public List<MarshGruppoCommerciale> listGruppiComercialiWithAchieved() {
    List<MarshGruppoCommerciale> result = new ArrayList<MarshGruppoCommerciale>();
    Session session = (Session) this.connection.getSessionFactory().openSession();
    Transaction tx = session.beginTransaction();
    try {
      Query query =
          session.createQuery(
              "from MAchieved where netRevenues > 0"); // where id.ebtProdotto <> '' and
                                                       // id.ebtProdotto <> 'Out of scope'
      List<MAchieved> collections = query.list();

      Map<String, MarshGruppoCommerciale> grupCommMap =
          new HashMap<
              String,
              MarshGruppoCommerciale>(); // mappa dei Gruppi commerciali recuperati da MAchieved con
                                         // chiave il proprio codice eys
      for (MAchieved mAchieved :
          collections) { // Per tutti i record della tabella derivata dal file PRODUZIONE (Estrattre
                         // ebt) che Marsh ci invia

        //				//GESTIONE DEL CLIENT EXECUTIVE
        //				// check if the CE already exists
        //				MarshCE clientExec = ceMap.get(mAchieved.getIdAeCgruppo());
        //				if(null == clientExec) {
        //					clientExec = new MarshCE();
        //					ceMap.put(mAchieved.getIdAeCgruppo(), clientExec);
        //					clientExec.setEysCode(mAchieved.getIdAeCgruppo());
        //					clientExec.setNominativo(mAchieved.getAeCgruppo());
        //					// clientExec.setUsername(username) qui non ce l'ho e comunque in information owners
        // non serve
        //					result.add(clientExec);
        //				}

        MarshGruppoCommerciale gruppoCommerciale = grupCommMap.get(mAchieved.getCodiceCapogruppo());
        if (null == gruppoCommerciale) {
          gruppoCommerciale = new MarshGruppoCommerciale();
          grupCommMap.put(mAchieved.getCodiceCapogruppo(), gruppoCommerciale);
          gruppoCommerciale.setCodiceCapoGruppo(mAchieved.getCodiceCapogruppo());
          gruppoCommerciale.setDenominazione(mAchieved.getCapogruppo());
          result.add(gruppoCommerciale);
        }

        // GESTIONE DEL PRODOTTO
        // trovo il codice prodotto usato in ebt relativo al codice eurosys indicato nel record di
        // M_achieved
        Query queryProduct =
            session.createQuery(
                "from MEbtMapping where eysCode = '" + mAchieved.getCodGaranzia() + "'");
        MEbtMapping lobProduct = (MEbtMapping) queryProduct.uniqueResult();
        if (lobProduct == null) {
          log.debug(
              "ATTENTION: eysCode " + mAchieved.getCodGaranzia() + " not found in MLobProduct");
          continue;
        }
        String ebtProduct = lobProduct.getProdotto(); // nome del prodotto ebt
        MarshProduct product = gruppoCommerciale.getProductMap().get(ebtProduct);
        if (product == null) {
          product = new MarshProduct();
          gruppoCommerciale.getProductMap().put(ebtProduct, product);
          product.setName(ebtProduct);
          product.setYear(mAchieved.getAnnoContabile());
        }
        if (mAchieved.getNetRevenues() > 0)
          product.setAchieved(product.getAchieved() + mAchieved.getNetRevenues().longValue());
      }

      tx.commit();
    } catch (HibernateException ex) {
      log.error("Exception in listClientExecutives", ex);
      ex.printStackTrace();
      tx.rollback();
    } finally {
      session.close();
    }
    return result;
  }
  /* (non-Javadoc)
   * @see com.kp.marsh.ebt.server.importer.dao.impl.ImportController#listClientExecutivesWithFinalBalance()
   */
  @Override
  public List<MarshCE> listClientExecutivesWithFinalBalance() {
    List<MarshCE> result = new ArrayList<MarshCE>();
    Session session = (Session) this.connection.getSessionFactory().openSession();
    Transaction tx = session.beginTransaction();
    try {
      Query query =
          session.createQuery(
              "from MActuals"); // where id.ebtProdotto <> '' and id.ebtProdotto <> 'Out of scope'
      List<MActuals> collections = query.list();
      Map<String, MarshCE> ceMap =
          new HashMap<String, MarshCE>(); // mappa dei CE con chiave il proprio codice eys
      for (MActuals mActual :
          collections) { // Per tutti i record della tabella derivata dal file PRODUZIONE che marsh
                         // ci invia
        // check if the CE already exists
        MarshCE clientExec = ceMap.get(mActual.getIdAeCgruppo());
        if (null == clientExec) {
          clientExec = new MarshCE();
          ceMap.put(mActual.getIdAeCgruppo(), clientExec);
          clientExec.setEysCode(mActual.getIdAeCgruppo());
          clientExec.setNominativo(mActual.getAeCgruppo());
          // clientExec.setUsername(username) qui non ce l'ho e comunque in information owners non
          // serve

          result.add(clientExec);
        }

        MarshGruppoCommerciale mGC =
            clientExec.getGruppoCommercialeMap().get(mActual.getCodiceCapogruppo());

        if (null == mGC) {
          mGC = new MarshGruppoCommerciale();
          clientExec.getGruppoCommercialeMap().put(mActual.getCodiceCapogruppo(), mGC);
          mGC.setCodiceCapoGruppo(mActual.getCodiceCapogruppo());
          mGC.setDenominazione(mActual.getCapogruppo());
        }

        Query queryProduct =
            session.createQuery(
                "from MEbtMapping where eysCode = '" + mActual.getCodGaranzia() + "'");
        MEbtMapping lobProduct = (MEbtMapping) queryProduct.uniqueResult();
        if (lobProduct == null) {
          log.debug("ATTENTION: eysCode not found in MLobProduct");
          continue;
        }
        String ebtProduct = lobProduct.getProdotto(); // nome del prodotto ebt

        MarshProduct product = mGC.getProductMap().get(ebtProduct);
        if (product == null) {
          product = new MarshProduct();
          mGC.getProductMap().put(ebtProduct, product);
          product.setName(ebtProduct);
          product.setYear(mActual.getAnnoContabile());
        }
        if (mActual.getNetRevenues() > 0)
          product.setActual(product.getActual() + mActual.getNetRevenues().longValue());
      }

      tx.commit();
    } catch (HibernateException ex) {
      log.error("Exception in listClientExecutives", ex);
      ex.printStackTrace();
      tx.rollback();
    } finally {
      session.close();
    }

    return result;
  }