Example usage for java.math BigDecimal compareTo

List of usage examples for java.math BigDecimal compareTo

Introduction

In this page you can find the example usage for java.math BigDecimal compareTo.

Prototype

@Override
public int compareTo(BigDecimal val) 

Source Link

Document

Compares this BigDecimal with the specified BigDecimal .

Usage

From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java

/**
 * Ist-Arbeitszeit fuer eine Ablieferung pro abgelieferter Einheit
 * bestimmen./*from w w  w.j  a  v a  2 s.co m*/
 * 
 * @param losablieferungIId
 *            Integer
 * @param bWertOderZeit
 *            boolean fuer Wert = true, fuer Zeit = false
 * @param theClientDto
 *            String
 * @return BigDecimal
 * @throws EJBExceptionLP
 */
private BigDecimal getErledigteArbeitszeitEinerLosablieferung(Integer losablieferungIId, boolean bWertOderZeit,
        boolean bMitMaschinenZeit, TheClientDto theClientDto, boolean bRekursiv) throws EJBExceptionLP {
    BigDecimal bdErgebnis = new BigDecimal(0);
    LosablieferungDto losablieferungDto = losablieferungFindByPrimaryKey(losablieferungIId, false,
            theClientDto);
    try {
        // Alle Ablieferungen auf dieses Los aufsteigend nach datum sortiert

        LosablieferungDto[] abl = losablieferungFindByLosIId(losablieferungDto.getLosIId(), false,
                theClientDto);
        // Rueckwaertsschleife, da die werte der vorgaenger berechnet werden
        // muessen (rekursiv)
        for (int i = abl.length - 1; i > 0; i--) {
            // wenn ich die aktuelle gefunden hab, subtrahier ich den wert
            // des vorgaengers
            if (abl[i].getIId().equals(losablieferungIId)) {
                bdErgebnis = bdErgebnis.subtract(getErledigteArbeitszeitEinerLosablieferung(abl[i - 1].getIId(),
                        bWertOderZeit, bMitMaschinenZeit, theClientDto, true).multiply(abl[i - 1].getNMenge()));
                break;
            }
        }
        // ------------------------------------------------------------------
        // ----

        BigDecimal summeAblieferungen = new BigDecimal(0);

        // Sollsatzfaktor bestimmen
        BigDecimal bdErledigt = new BigDecimal(0);
        for (int i = 0; i < abl.length; i++) {
            summeAblieferungen = summeAblieferungen.add(abl[i].getNMenge());
            if (!abl[i].getTAendern().after(losablieferungDto.getTAendern())) {
                bdErledigt = bdErledigt.add(abl[i].getNMenge());
            }
        }

        LosDto losDto = losFindByPrimaryKey(losablieferungDto.getLosIId());
        // Wenn Los ueberliefert oder Erledigt, dann zaehlen alle Zeidaten
        // zum Arbeitszeitwert
        boolean bAlleZeitenZaehlenFuerArbeitswert = false;
        if (summeAblieferungen.doubleValue() >= losDto.getNLosgroesse().doubleValue()
                || losDto.getStatusCNr().equals(LocaleFac.STATUS_ERLEDIGT)) {
            if (bRekursiv == false) {
                bAlleZeitenZaehlenFuerArbeitswert = true;
            }
        }

        BigDecimal bdFaktor = bdErledigt.divide(losDto.getNLosgroesse(), 10, BigDecimal.ROUND_HALF_EVEN);
        // ------------------------------------------------------------------
        // ----
        // Sollzeiten
        LossollarbeitsplanDto[] soll = getFertigungFac()
                .lossollarbeitsplanFindByLosIId(losablieferungDto.getLosIId());
        // Sollzeiten nach Artikel verdichten und mit Sollsatzfaktor
        // multiplizieren
        HashMap<Integer, BigDecimal> listSollVerdichtet = new HashMap<Integer, BigDecimal>();
        for (int i = 0; i < soll.length; i++) {
            BigDecimal bdBisher = listSollVerdichtet.get(soll[i].getArtikelIIdTaetigkeit());
            if (bdBisher == null) {
                listSollVerdichtet.put(soll[i].getArtikelIIdTaetigkeit(),
                        soll[i].getNGesamtzeit().multiply(bdFaktor));
            } else {
                listSollVerdichtet.put(soll[i].getArtikelIIdTaetigkeit(),
                        bdBisher.add(soll[i].getNGesamtzeit().multiply(bdFaktor)));
            }
        }
        // ------------------------------------------------------------------
        // ----
        // gebuchte Zeiten holen
        ParametermandantDto parametermandantDto = getParameterFac().getMandantparameter(
                theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG,
                ParameterFac.PARAMETER_ISTZEITEN_GLEICH_SOLLZEITEN);
        boolean bSollGleichIstzeiten = false;
        if (((java.lang.Boolean) parametermandantDto.getCWertAsObject()).booleanValue() == true) {
            bSollGleichIstzeiten = true;
        }
        // Maschinenzeiten
        AuftragzeitenDto[] zeitenMaschine = null;
        AuftragzeitenDto[] zeiten = null;
        if (bSollGleichIstzeiten == false) {

            // Maschinenzeiten
            zeitenMaschine = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(
                    losablieferungDto.getLosIId(), null, null, null, theClientDto);
            // "normale" Zeiten
            zeiten = getZeiterfassungFac().getAllZeitenEinesBeleges(LocaleFac.BELEGART_LOS,
                    losablieferungDto.getLosIId(), null, null, null, null, false, false, theClientDto);
        } else {
            zeiten = new AuftragzeitenDto[listSollVerdichtet.size()];
            zeitenMaschine = new AuftragzeitenDto[0];
            bAlleZeitenZaehlenFuerArbeitswert = true;
            int row = 0;
            for (Iterator<?> iter = listSollVerdichtet.keySet().iterator(); iter.hasNext();) {
                Integer artikelIId = (Integer) iter.next();
                BigDecimal gesamtzeit = listSollVerdichtet.get(artikelIId);
                AuftragzeitenDto az = new AuftragzeitenDto();
                az.setArtikelIId(artikelIId);
                az.setDdDauer(new Double(gesamtzeit.doubleValue()));
                BigDecimal bdPreis = getLagerFac()
                        .getGemittelterGestehungspreisAllerLaegerEinesMandanten(artikelIId, theClientDto);
                az.setBdKosten(gesamtzeit.multiply(bdPreis));
                zeiten[row] = az;
                row++;
            }
        }
        // ------------------------------------------------------------------
        // ----
        // relevante Ist-Zeiten nach Ident verdichten
        HashMap<Integer, BigDecimal> listIstWert = new HashMap<Integer, BigDecimal>();
        HashMap<Integer, BigDecimal> listIstZeit = new HashMap<Integer, BigDecimal>();
        if (bMitMaschinenZeit) {
            for (int i = 0; i < zeitenMaschine.length; i++) {
                // Wenn vor der Ablieferung gebucht, dann addieren
                if ((zeitenMaschine[i].getTsEnde() != null
                        && zeitenMaschine[i].getTsEnde().before(losablieferungDto.getTAendern()))
                        || bAlleZeitenZaehlenFuerArbeitswert == true) {
                    BigDecimal bdBisherWert = listIstWert.get(zeitenMaschine[i].getArtikelIId());
                    BigDecimal bdBisherZeit = listIstZeit.get(zeitenMaschine[i].getArtikelIId());
                    if (bdBisherWert == null) {
                        listIstWert.put(zeitenMaschine[i].getArtikelIId(), zeitenMaschine[i].getBdKosten());
                        listIstZeit.put(zeitenMaschine[i].getArtikelIId(),
                                new BigDecimal(zeitenMaschine[i].getDdDauer()));
                    } else {
                        listIstWert.put(zeitenMaschine[i].getArtikelIId(),
                                bdBisherWert.add(zeitenMaschine[i].getBdKosten()));
                        listIstZeit.put(zeitenMaschine[i].getArtikelIId(),
                                bdBisherZeit.add(new BigDecimal(zeitenMaschine[i].getDdDauer())));
                    }
                }
            }
        }
        // "normale" Zeiten
        for (int i = 0; i < zeiten.length; i++) {
            // Wenn vor der Ablieferung gebucht, dann addieren
            if ((zeiten[i].getTsEnde() != null && zeiten[i].getTsEnde().before(losablieferungDto.getTAendern()))
                    || bAlleZeitenZaehlenFuerArbeitswert == true) {
                BigDecimal bdBisherWert = listIstWert.get(zeiten[i].getArtikelIId());
                BigDecimal bdBisherZeit = listIstZeit.get(zeiten[i].getArtikelIId());
                if (bdBisherWert == null) {
                    listIstWert.put(zeiten[i].getArtikelIId(), zeiten[i].getBdKosten());
                    listIstZeit.put(zeiten[i].getArtikelIId(), new BigDecimal(zeiten[i].getDdDauer()));
                } else {
                    listIstWert.put(zeiten[i].getArtikelIId(), bdBisherWert.add(zeiten[i].getBdKosten()));
                    listIstZeit.put(zeiten[i].getArtikelIId(),
                            bdBisherZeit.add(new BigDecimal(zeiten[i].getDdDauer())));
                }
            }
        }
        // ------------------------------------------------------------------
        // ----
        for (Iterator<?> iter = listIstZeit.keySet().iterator(); iter.hasNext();) {
            Integer artikelIId = (Integer) iter.next();
            // Wenn das Los erledigt ist, dann zaehlen alle
            if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT)
                    || (bdErledigt.doubleValue() >= losDto.getNLosgroesse().doubleValue())) {
                if (bWertOderZeit) {
                    bdErgebnis = bdErgebnis.add(listIstWert.get(artikelIId));
                } else {
                    bdErgebnis = bdErgebnis.add(listIstZeit.get(artikelIId));
                }
            }
            // nicht vollstaendig erledigte Lose kriegen hoechstens die
            // anhand sollsatzgroesse errechnete zeit
            else {
                BigDecimal bdIstZeit = listIstZeit.get(artikelIId);
                BigDecimal bdSollZeit = listSollVerdichtet.get(artikelIId);
                if (bdSollZeit == null) {
                    // nothing here
                    // Taetigkeiten, die im Sollarbeitsplan nicht enthalten
                    // waren, werden hier noch nicht gezaehlt
                } else {
                    // Ist liegt unter Soll -> ganzer Wert bzw. Zeit
                    if (bdSollZeit.compareTo(bdIstZeit) >= 0) {
                        if (bWertOderZeit) {
                            bdErgebnis = bdErgebnis.add(listIstWert.get(artikelIId));
                        } else {
                            bdErgebnis = bdErgebnis.add(listIstZeit.get(artikelIId));
                        }
                    }
                    // Sollsatzzeit ueberschritten
                    else {
                        if (bWertOderZeit) {
                            bdErgebnis = bdErgebnis.add(listIstWert.get(artikelIId).multiply(bdSollZeit)
                                    .divide(bdIstZeit, 4, BigDecimal.ROUND_HALF_EVEN));
                        } else {
                            bdErgebnis = bdErgebnis.add(bdSollZeit);
                        }
                    }
                }
            }
        }
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    }
    if (losablieferungDto.getNMenge().doubleValue() != 0) {

        return bdErgebnis.divide(losablieferungDto.getNMenge(), 4, BigDecimal.ROUND_HALF_EVEN);
    } else {
        return new BigDecimal(0);
    }
}

From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java

@TransactionAttribute(TransactionAttributeType.NEVER)
public KapazitaetsvorschauDto getKapazitaetsvorschau(TheClientDto theClientDto) throws EJBExceptionLP {
    KapazitaetsvorschauDto kapDto = null;
    Session session = null;//from www.j  a v  a2s  .  c o m
    try {

        // ------------------------------------------------------------------
        // -----
        // Benoetigte Parameter holen
        // ------------------------------------------------------------------
        // -----
        // Default Sicht nach Wochen
        // final int iSicht = FertigungFac.KAPAZITAETSVORSCHAU_NACH_WOCHEN;
        // Anzahl der angezeigten Vatergruppen. Alles andere wird nach
        // "Sonstige" verdichtet
        final ParametermandantDto parameterAnzahlGruppen = getParameterFac().getMandantparameter(
                theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG,
                ParameterFac.PARAMETER_FERTIGUNG_KAPAZITAETSVORSCHAU_ANZAHL_GRUPPEN);
        final int iParamAnzahlGruppen = (Integer) parameterAnzahlGruppen.getCWertAsObject();
        // Angezeigter Zeitraum = Anzahl der Spalten
        final ParametermandantDto parameterZeitraum = getParameterFac().getMandantparameter(
                theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG,
                ParameterFac.PARAMETER_FERTIGUNG_KAPAZITAETSVORSCHAU_ZEITRAUM);
        final int iParamZeitraum = (Integer) parameterZeitraum.getCWertAsObject();

        // ------------------------------------------------------------------
        // -----
        // Hibernate-Session erstellen
        // ------------------------------------------------------------------
        // -----
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        // ------------------------------------------------------------------
        // -----
        // Artikel- / Maschinen-Vatergruppen holen
        // ------------------------------------------------------------------
        // -----
        // Alle Artikel-Vatergruppen
        Criteria cArtikelVatergruppen = session.createCriteria(FLRArtikelgruppe.class);
        cArtikelVatergruppen.add(Restrictions.isNull(ArtikelFac.FLR_ARTIKELGRUPPE_FLRARTIKELGRUPPE));
        List<?> listArtikelgruppen = cArtikelVatergruppen.list();
        // Alle Maschinen-Vatergruppen
        Criteria cMaschinengruppen = session.createCriteria(FLRMaschinengruppe.class);
        List<?> listMaschinengruppen = cMaschinengruppen.list();
        // ------------------------------------------------------------------
        // -----
        // Anzahl der sub-Diagramme bestimmen
        // das ist grundsaetzlich (iParamAnzahlGruppen + 1) x 2 ...
        // (Anzahl d. anzuzeigenden Vatergruppen + Sonstige) f. AZ und
        // Maschinen
        // wenn es weniger Vatergruppen als anzuzeigende gibt, reduziert
        // sich das aber
        // Gibt es keine Vatergruppe, wird daher alles nach "Sonstige"
        // verdichtet
        // ------------------------------------------------------------------
        // -----
        final int iAnzuzeigendeArtikelgruppen = Math.min(iParamAnzahlGruppen, listArtikelgruppen.size());

        final int iAnzuzeigendeMaschinengruppen = Math.min(iParamAnzahlGruppen, listMaschinengruppen.size());

        final int iAnzahlZeilen = iAnzuzeigendeArtikelgruppen + 1 + iAnzuzeigendeMaschinengruppen + 1;

        // ------------------------------------------------------------------
        // -----
        // Dto initialisieren
        // ------------------------------------------------------------------
        // -----
        kapDto = new KapazitaetsvorschauDto(iAnzahlZeilen, iParamZeitraum);
        // ------------------------------------------------------------------
        // -----
        // Beschriftung der x-Achse ermitteln. das sind die Kalenderwochen
        // ------------------------------------------------------------------
        // -----
        HashMap<Integer, Integer> hmKWIndizes = new HashMap<Integer, Integer>();

        String[] kw = new String[iParamZeitraum];
        GregorianCalendar gc = new GregorianCalendar();
        for (int i = 0; i < kw.length; i++) {
            int iKw = gc.get(GregorianCalendar.WEEK_OF_YEAR);
            kw[i] = "" + iKw;
            kapDto.setISpaltenueberschrift(i, kw[i]);
            hmKWIndizes.put(gc.get(GregorianCalendar.WEEK_OF_YEAR), i);
            gc.setTimeInMillis(gc.getTimeInMillis() + 7 * 24 * 60 * 60 * 1000); // 1 Woche dazu
        }
        // ------------------------------------------------------------------
        // -----
        // Beschriftung der y-Achse ermitteln. das sind die Namen der
        // Vatergruppen bzw. 2 x "Sonstige".
        // Weiters werden die Indizes im Daten-Array fuer die jeweiligen
        // Gruppen festgelegt.
        // ------------------------------------------------------------------
        // -----
        String sSonstige = getTextRespectUISpr("lp.sonstige", theClientDto.getMandant(),
                theClientDto.getLocUi());

        HashMap<Integer, Integer> hmArtikelGruppenIndizes = new HashMap<Integer, Integer>();
        HashMap<Integer, Integer> hmMaschinenGruppenIndizes = new HashMap<Integer, Integer>();

        // zuerst die Artikelvatergruppen
        for (int i = 0; i < iAnzuzeigendeArtikelgruppen; i++) {
            FLRArtikelgruppe item = (FLRArtikelgruppe) listArtikelgruppen.get(i);
            kapDto.setIZeilenueberschrift(i, item.getC_nr());
            hmArtikelGruppenIndizes.put(item.getI_id(), i);
        }
        // Dann Sonstige Artikelgruppen
        final int indexSonstigeArtikelGruppen = iAnzuzeigendeArtikelgruppen;
        kapDto.setIZeilenueberschrift(indexSonstigeArtikelGruppen, sSonstige);
        // Maschinengruppen
        for (int i = 0; i < iAnzuzeigendeMaschinengruppen; i++) {
            FLRMaschinengruppe item = (FLRMaschinengruppe) listMaschinengruppen.get(i);
            int index = iAnzuzeigendeArtikelgruppen + 1 + i;
            kapDto.setIZeilenueberschrift(index, item.getC_bez());
            hmMaschinenGruppenIndizes.put(item.getI_id(), index);
        }
        // zuletzt Sonstige Maschinengruppen
        final int indexSonstigeMaschinenGruppen = iAnzuzeigendeArtikelgruppen + 1
                + iAnzuzeigendeMaschinengruppen;
        kapDto.setIZeilenueberschrift(indexSonstigeMaschinenGruppen, sSonstige);

        // ------------------------------------------------------------------
        // -----
        // Lose holen
        // ------------------------------------------------------------------
        // -----
        Criteria cLose = session.createCriteria(FLRLos.class);
        // Filter nach Mandant
        cLose.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
        // Alle Stati ausser Erledigt, Gestoppt, Storniert
        Collection<String> cLoseStati = new LinkedList<String>();
        cLoseStati.add(FertigungFac.STATUS_ERLEDIGT);
        cLoseStati.add(FertigungFac.STATUS_GESTOPPT);
        cLoseStati.add(FertigungFac.STATUS_STORNIERT);
        cLose.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR, cLoseStati)));
        List<?> listLose = cLose.list();
        // ------------------------------------------------------------------
        // -----
        // Auswertungszeitraum und verfuegbare Kapazitaeten ermitteln
        // ------------------------------------------------------------------
        // -----

        // 3 Monate in die zukunft
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(System.currentTimeMillis());
        c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 3);
        java.util.Date dMax = Helper.cutDate(new java.sql.Date(c.getTimeInMillis()));

        java.sql.Timestamp tVon = Helper.cutTimestamp(new java.sql.Timestamp(System.currentTimeMillis()));
        java.sql.Timestamp tBis = Helper.cutTimestamp(new java.sql.Timestamp(dMax.getTime()));
        // Verfuegbare Zeiten holen
        SollverfuegbarkeitDto[] oVerfuegbar = getZeiterfassungFac().getVerfuegbareSollzeit(tVon, tBis,
                theClientDto);
        // diese nun aufteilen
        for (int i = 0; i < oVerfuegbar.length; i++) {
            SollverfuegbarkeitDto svDto = oVerfuegbar[i];
            // "normale" AZ
            if (svDto.isBMannarbeitszeit()) {
                // die sind einer Artikelgruppe zugeordnet
                if (svDto.getIGruppeid() != null) {
                    Integer iZeile = hmArtikelGruppenIndizes.get(svDto.getIGruppeid());
                    // ist das eine sichtbare Gruppe
                    if (iZeile != null) {
                        for (int iSpalte = 0; iSpalte < kapDto.getDetails()[iZeile].length; iSpalte++) {
                            // mal 5 Tage
                            kapDto.addBdVerfuegbareStunden(iZeile, iSpalte,
                                    svDto.getNSollstunden().multiply(new BigDecimal(5)));
                        }
                    }
                    // wenn nicht, dann zu den sonstigen
                    else {
                        for (int iSpalte = 0; iSpalte < kapDto
                                .getDetails()[indexSonstigeArtikelGruppen].length; iSpalte++) {
                            // mal 5 Tage
                            kapDto.addBdVerfuegbareStunden(indexSonstigeArtikelGruppen, iSpalte,
                                    svDto.getNSollstunden().multiply(new BigDecimal(5)));
                        }
                    }
                }
                // Rest = Sonstige Artikelgruppen
                else {
                    if (svDto.getTDatum() != null) {
                        // Die KW dieses Datums ermitteln, damit das
                        // zugeordnet werden kann
                        GregorianCalendar gcSV = new GregorianCalendar();
                        gcSV.setTime(svDto.getTDatum());
                        int kwSV = gcSV.get(Calendar.WEEK_OF_YEAR);
                        Integer iIndexDerKW = hmKWIndizes.get(kwSV);
                        if (iIndexDerKW != null) {
                            // Hier nicht mit 5 multiplizieren, da es fuer
                            // jeden Tag einen eigenen Eintrag gibt
                            kapDto.addBdVerfuegbareStunden(indexSonstigeArtikelGruppen, iIndexDerKW,
                                    svDto.getNSollstunden());
                        } else {
                            // diese KW wird nicht mehr angezeigt - brauch
                            // ich nicht einrechnen
                        }
                    }
                }
            }
            // Maschinenzeit - die Verfuegbarkeit ist jeden Tag gleich
            else {
                Integer iZeile = hmMaschinenGruppenIndizes.get(svDto.getIGruppeid());
                // ist das eine sichtbare Gruppe
                if (iZeile != null) {
                    for (int iSpalte = 0; iSpalte < kapDto.getDetails()[iZeile].length; iSpalte++) {
                        // mal 5 Tage
                        kapDto.addBdVerfuegbareStunden(iZeile, iSpalte,
                                svDto.getNSollstunden().multiply(new BigDecimal(5)));
                    }
                }
                // wenn nicht, dann zu den sonstigen
                else {
                    for (int iSpalte = 0; iSpalte < kapDto
                            .getDetails()[indexSonstigeMaschinenGruppen].length; iSpalte++) {
                        // mal 5 Tage
                        kapDto.addBdVerfuegbareStunden(indexSonstigeMaschinenGruppen, iSpalte,
                                svDto.getNSollstunden().multiply(new BigDecimal(5)));
                    }
                }
            }
        }
        // ------------------------------------------------------------------
        // -----
        // Offene Zeiten ermitteln
        // ------------------------------------------------------------------
        // -----
        for (Iterator<?> iter = listLose.iterator(); iter.hasNext();) {
            FLRLos los = (FLRLos) iter.next();
            // Offene Menge ermitteln
            BigDecimal bdOffen = los.getN_losgroesse();
            for (Iterator<?> iterAblieferung = los.getAblieferungset().iterator(); iterAblieferung.hasNext();) {
                FLRLosablieferung item = (FLRLosablieferung) iterAblieferung.next();
                bdOffen = bdOffen.subtract(item.getN_menge());
            }
            // nur Lose mit tatsaechlich offener Menge>0
            if (bdOffen.compareTo(new BigDecimal(0)) > 0) {
                // Faktor zur Berechnung der offenen Zeiten = offene Menge /
                // Losgroesse. 2 Nachkommastellen sollten reichen.
                BigDecimal bdFaktor = bdOffen.divide(los.getN_losgroesse(), 2, BigDecimal.ROUND_HALF_EVEN);
                // Arbeitsplan holen
                Criteria cLosAZ = session.createCriteria(FLRLossollarbeitsplan.class);
                cLosAZ.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLARBEITSPLAN_LOS_I_ID, los.getI_id()));
                List<?> listLosAZ = cLosAZ.list();
                // fuer alle Taetigkeiten
                for (Iterator<?> iterAZ = listLosAZ.iterator(); iterAZ.hasNext();) {
                    FLRLossollarbeitsplan losAZ = (FLRLossollarbeitsplan) iterAZ.next();
                    BigDecimal bdOffeneStunden = losAZ.getN_gesamtzeit().multiply(bdFaktor);
                    // ------------------------------------------------------
                    // -----------------
                    // Index der Gruppe bestimmen, der ich das zuordnen muss
                    // ------------------------------------------------------
                    // -----------------
                    int iZeilenIndex;
                    // 1. nach Maschinengruppe
                    // 2. nach Artikelgruppe der Taetigkeit
                    FLRMaschine flrMaschine = losAZ.getFlrmaschine();
                    Integer iMaschinengruppeIId = null;
                    Integer iArtikelgruppeIId = null;
                    if (flrMaschine != null) {
                        FLRMaschinengruppe flrMaschinengruppe = flrMaschine.getFlrmaschinengruppe();
                        if (flrMaschinengruppe != null) {
                            // Wenn diese Maschinengruppe dargestellt wird,
                            // dann kommt hier der index raus.
                            Integer i = hmMaschinenGruppenIndizes.get(flrMaschinengruppe.getI_id());
                            iMaschinengruppeIId = flrMaschinengruppe.getI_id();
                            if (i != null) {
                                iZeilenIndex = i;
                            }
                            // wenn nicht -> sonstige.
                            else {
                                iZeilenIndex = indexSonstigeMaschinenGruppen;
                            }
                        }
                        // Maschinen ohne Maschinengruppe werden nach
                        // "Sonstige" verdichtet.
                        else {
                            iZeilenIndex = indexSonstigeMaschinenGruppen;
                        }
                    } else {
                        FLRArtikel flrArtikel = losAZ.getFlrartikel();
                        FLRArtikelgruppe flrArtikelgruppe = flrArtikel.getFlrartikelgruppe();
                        if (flrArtikelgruppe != null) {
                            // Wenn diese Artikelgruppe dargestellt wird,
                            // dann kommt hier der index raus.
                            Integer i = hmArtikelGruppenIndizes.get(flrArtikelgruppe.getI_id());
                            iArtikelgruppeIId = flrArtikelgruppe.getI_id();
                            if (i != null) {
                                iZeilenIndex = i;
                            }
                            // wenn nicht -> sonstige.
                            else {
                                iZeilenIndex = indexSonstigeArtikelGruppen;
                            }
                        }
                        // Taetigkeiten ohne Artikelgruppe werden nach
                        // "Sonstige" verdichtet.
                        else {
                            iZeilenIndex = indexSonstigeArtikelGruppen;
                        }
                    }
                    // ------------------------------------------------------
                    // -----------------
                    // Jetzt hab ich die Gruppe, der ich das zuordnen muss
                    // nun muss die Zeit aufgeteilt werden
                    // ------------------------------------------------------
                    // -----------------
                    java.util.Date tLosStarttermin = los.getT_produktionsbeginn();
                    java.util.Date tLosEndetermin = los.getT_produktionsende();
                    // beide Termine duerfen nicht vor heute liegen
                    if (tLosStarttermin.before(getDate())) {
                        tLosStarttermin = getDate();
                    }
                    if (tLosEndetermin.before(getDate())) {
                        tLosEndetermin = getDate();
                    }
                    // Anzahl der betroffenen Kalenderwochen bestimmen
                    GregorianCalendar gcStart = new GregorianCalendar();
                    gcStart.setTime(tLosStarttermin);
                    GregorianCalendar gcEnde = new GregorianCalendar();
                    gcEnde.setTime(tLosEndetermin);
                    int iStartKW = gcStart.get(Calendar.WEEK_OF_YEAR);
                    int iEndeKW = gcEnde.get(Calendar.WEEK_OF_YEAR);
                    int iAnzahlKW = 1 + iEndeKW - iStartKW;
                    // nun auf die Wochen aufteilen
                    BigDecimal bdOffeneStundenJeWoche = bdOffeneStunden;

                    if (iAnzahlKW > 0) {
                        bdOffeneStundenJeWoche = bdOffeneStunden.divide(new BigDecimal(iAnzahlKW), 2,
                                RoundingMode.HALF_UP);
                    }

                    for (int iAktuelleKW = iStartKW; iAktuelleKW <= iEndeKW; iAktuelleKW++) {
                        Integer indexDerKW = hmKWIndizes.get(iAktuelleKW);
                        // wird diese Woche auch angezeigt?
                        if (indexDerKW != null) {
                            KapazitaetsvorschauDetailDto detailDto = new KapazitaetsvorschauDetailDto();
                            detailDto.setArtikelgruppeIId(iArtikelgruppeIId);
                            detailDto.setArtikelIIdTaetigkeit(losAZ.getFlrartikel().getI_id());
                            detailDto.setBdDauer(bdOffeneStundenJeWoche);
                            detailDto.setLosIId(los.getI_id());
                            detailDto.setLossollarbeitsplanIId(losAZ.getI_id());
                            detailDto.setMaschinengruppeIId(iMaschinengruppeIId);
                            kapDto.addDetail(iZeilenIndex, indexDerKW, detailDto);
                        }
                    }
                }
            }
        }

        // ------------------------------------------------------------------
        // -----
        // Diagramm aus den Daten erstellen
        // ------------------------------------------------------------------
        // -----
        SymbolAxis xAchse = new SymbolAxis("KW", kw);
        CombinedDomainXYPlot plot = new CombinedDomainXYPlot(xAchse);
        for (int iZeile = 0; iZeile < kapDto.getDetails().length; iZeile++) {
            XYSeries datenZeile = new XYSeries(kapDto.getIZeilenueberschrift(iZeile));
            // Balkenfarben festlegen ( >100% = rot, sonst hellgrau)
            // fuer jede zeile und jede spalte
            Paint[][] paints = new Paint[1][kapDto.getDetails()[iZeile].length];
            for (int iSpalte = 0; iSpalte < kapDto.getDetails()[iZeile].length; iSpalte++) {
                BigDecimal bdVerfuegbar = kapDto.getBdVerfuegbareStunden()[iZeile][iSpalte];
                BigDecimal bdBenoetigt = new BigDecimal(0);
                // Benoetigte Zeit jet Gruppe je Woche ermitteln
                for (Iterator<?> iter = kapDto.getDetails()[iZeile][iSpalte].iterator(); iter.hasNext();) {
                    KapazitaetsvorschauDetailDto item = (KapazitaetsvorschauDetailDto) iter.next();
                    bdBenoetigt = bdBenoetigt.add(item.getBdDauer());
                }
                BigDecimal value = new BigDecimal(0);
                if (bdVerfuegbar.compareTo(new BigDecimal(0)) > 0) {
                    value = (bdBenoetigt.multiply(new BigDecimal(100))).divide(bdVerfuegbar, 4,
                            BigDecimal.ROUND_HALF_EVEN);
                    if (value.doubleValue() > 100.0) {
                        paints[0][iSpalte] = Color.red;
                    } else {
                        paints[0][iSpalte] = Color.lightGray;
                    }
                }
                // tage ohne Verfuegbarkeit mach ich 100% und weisz
                else {
                    value = new BigDecimal(100.0);
                    // Wochen ohne Kapazitaet aber mit geplanter Zeit
                    if (bdBenoetigt.compareTo(new BigDecimal(0)) > 0) {
                        paints[0][iSpalte] = Color.MAGENTA;
                    }
                    // Wenn nichts verfuegbar aber auch nichts benoetigt ->
                    // weiss
                    else {
                        paints[0][iSpalte] = Color.white;
                    }
                }
                XYDataItem data = new XYDataItem(iSpalte, value.doubleValue());
                datenZeile.add(data);
            }
            // Zur Collection
            XYSeriesCollection xyDataset = new XYSeriesCollection();
            xyDataset.addSeries(datenZeile);

            // subplot erstellen
            XYItemRenderer renderer1 = new CustomXYBarRenderer(paints);

            // renderer1.setItemLabelsVisible(true);
            // Legende nicht anzeigen
            renderer1.setBaseSeriesVisibleInLegend(false);
            NumberAxis zeilenAchse = new NumberAxis(kapDto.getIZeilenueberschrift(iZeile));
            // Beschriftung der Y-Achse um 90 grad drehen
            zeilenAchse.setLabelAngle(Math.PI / 2.0);
            zeilenAchse.setAutoRange(true);
            XYPlot subplot1 = new XYPlot(xyDataset, null, zeilenAchse, renderer1);
            subplot1.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
            // Markierung bei 100%
            final Marker target = new ValueMarker(100.0);
            target.setPaint(Color.darkGray);
            // target.setLabel("100 %"); // Label
            // target.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
            // target.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
            subplot1.addRangeMarker(target);

            plot.add(subplot1); // plot.add(subplot1, 1);
        }
        JFreeChart lStackedBarChart = new JFreeChart(plot);

        kapDto.setJfcKapazitaetsvorschau(lStackedBarChart);
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    } finally {
        if (session != null) {
            session.close();
        }
    }
    return kapDto;
}

From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java

@TransactionTimeout(5000)
public TreeMap<String, Object[]> aktualisiereLoseAusStueckliste(Integer stuecklisteIId,
        TheClientDto theClientDto) {/*  w  ww.j ava2 s .  co m*/

    TreeMap<String, Object[]> tmAktualisierteLose = new TreeMap<String, Object[]>();

    ParametermandantDto parameter = null;
    try {
        parameter = getParameterFac().getMandantparameter(theClientDto.getSMandantenwaehrung(),
                ParameterFac.KATEGORIE_STUECKLISTE,
                ParameterFac.PARAMETER_BEI_LOS_AKTUALISIERUNG_MATERIAL_NACHBUCHEN);
    } catch (RemoteException e1) {
        throwEJBExceptionLPRespectOld(e1);
    }
    boolean bMaterialNachbuchen = (Boolean) parameter.getCWertAsObject();

    Session session = FLRSessionFactory.getFactory().openSession();

    String queryString = "SELECT l FROM FLRLosReport l WHERE l.status_c_nr IN ('" + LocaleFac.STATUS_ANGELEGT
            + "','" + LocaleFac.STATUS_AUSGEGEBEN + "','" + LocaleFac.STATUS_IN_PRODUKTION
            + "') AND l.mandant_c_nr='" + theClientDto.getMandant() + "' AND l.stueckliste_i_id IS NOT NULL ";

    if (stuecklisteIId != null) {
        queryString += " AND l.stueckliste_i_id=" + stuecklisteIId;
    }

    org.hibernate.Query query = session.createQuery(queryString);
    List<?> results = query.list();
    Iterator<?> resultListIterator = results.iterator();
    while (resultListIterator.hasNext()) {
        FLRLosReport los = (FLRLosReport) resultListIterator.next();

        if (los.getStatus_c_nr().equals(LocaleFac.STATUS_ANGELEGT)) {
            aktualisiereSollArbeitsplanAusStueckliste(los.getI_id(), theClientDto);
            aktualisiereSollMaterialAusStueckliste(los.getI_id(), theClientDto);
        } else {

            LoslagerentnahmeDto[] laeger = loslagerentnahmeFindByLosIId(los.getI_id());

            aktualisiereSollArbeitsplanAusStueckliste(los.getI_id(), theClientDto);

            // Alle stuecklistenpositionen holen + Hilfsstueckliste und dann
            // verdichten
            HashMap<Integer, StuecklistepositionDto> hmStuecklistenposition = getFertigungFac()
                    .holeAlleLossollmaterialFuerStuecklistenAktualisierung(los.getStueckliste_i_id(),
                            los.getN_losgroesse(), 0, null, theClientDto);

            LossollmaterialDto[] sollmatDtos = lossollmaterialFindByLosIId(los.getI_id());

            for (int i = 0; i < sollmatDtos.length; i++) {
                try {
                    if (!Helper.short2boolean(sollmatDtos[i].getBNachtraeglich())) {
                        // War vor SP2000 --> &&
                        // sollmatDtos[i].getNMenge().doubleValue() > 0

                        LosistmaterialDto[] istmaterialDtos = losistmaterialFindByLossollmaterialIId(
                                sollmatDtos[i].getIId());
                        BigDecimal bdAusgegeben = getAusgegebeneMenge(sollmatDtos[i].getIId(), null,
                                theClientDto);
                        ArtikelDto artikelDto = getArtikelFac()
                                .artikelFindByPrimaryKeySmall(sollmatDtos[i].getArtikelIId(), theClientDto);

                        Object[] oZeileReport = new Object[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ANZAHL_SPALTEN];
                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_LOSNUMMER] = los
                                .getC_nr();
                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ARTIKELNUMMER] = artikelDto
                                .getCNr();
                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_EINHEIT] = artikelDto
                                .getEinheitCNr();
                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = sollmatDtos[i]
                                .getNMenge();
                        if (artikelDto.getArtikelsprDto() != null) {
                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEZEICHNUNG] = artikelDto
                                    .getArtikelsprDto().getCBez();
                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ZUSATZBEZEICHNUNG] = artikelDto
                                    .getArtikelsprDto().getCZbez();
                        }

                        if (hmStuecklistenposition.containsKey(sollmatDtos[i].getArtikelIId())) {

                            // Mengen abziehen
                            StuecklistepositionDto stklPos = hmStuecklistenposition
                                    .get(sollmatDtos[i].getArtikelIId());

                            sollmatDtos[i].setNMenge(stklPos.getNMenge());

                            Lossollmaterial sollmatBean = em.find(Lossollmaterial.class,
                                    sollmatDtos[i].getIId());

                            BigDecimal diffSollmenge = stklPos.getNMenge().subtract(sollmatBean.getNMenge());

                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = diffSollmenge;

                            sollmatBean.setNMenge(stklPos.getNMenge());
                            sollmatBean.setIBeginnterminoffset(stklPos.getIBeginnterminoffset());

                            BigDecimal diff = bdAusgegeben.subtract(sollmatDtos[i].getNMenge());

                            if (diff.doubleValue() == 0 && diffSollmenge.doubleValue() != 0) {
                                oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal(
                                        0);
                                tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                        los.getC_nr() + artikelDto.getCNr(), oZeileReport);

                            } else {

                                if (bMaterialNachbuchen == true || (bMaterialNachbuchen == false && Helper
                                        .short2boolean(artikelDto.getBLagerbewirtschaftet()) == false)) {

                                    if (Helper.short2boolean(artikelDto.getBSeriennrtragend())
                                            || Helper.short2boolean(artikelDto.getBChargennrtragend())) {
                                        sollmatDtos[i] = null;

                                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal(
                                                0);
                                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEMERKUNG] = "Der Artikel ist SNR/CNR behaftet und wurde nicht ber\u00FCcksichtigt.";

                                        tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                                los.getC_nr() + artikelDto.getCNr(), oZeileReport);

                                        continue;
                                    }

                                    if (diff.doubleValue() > 0) {

                                        for (int j = 0; j < istmaterialDtos.length; j++) {
                                            if (diff.doubleValue() > 0) {
                                                BigDecimal istmenge = istmaterialDtos[j].getNMenge();

                                                BigDecimal bdMengeNeu = null;

                                                if (diff.doubleValue() > istmenge.doubleValue()) {
                                                    bdMengeNeu = new BigDecimal(0);
                                                    diff = diff.subtract(istmenge);
                                                } else {
                                                    bdMengeNeu = istmenge.subtract(diff);
                                                    diff = new BigDecimal(0);
                                                }

                                                updateLosistmaterialMenge(istmaterialDtos[j].getIId(),
                                                        bdMengeNeu, theClientDto);
                                            }
                                        }

                                        BigDecimal bdAusgegebenNachher = getAusgegebeneMenge(
                                                sollmatDtos[i].getIId(), null, theClientDto);

                                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdAusgegebenNachher
                                                .subtract(bdAusgegeben);

                                        tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                                los.getC_nr() + artikelDto.getCNr(), oZeileReport);
                                    } else {
                                        BigDecimal bdAbzubuchendeMenge = diff.abs();
                                        for (int j = 0; j < laeger.length; j++) {
                                            // wenn noch was abzubuchen ist
                                            // (Menge >
                                            // 0)
                                            if (bdAbzubuchendeMenge.compareTo(new BigDecimal(0)) == 1) {
                                                BigDecimal bdLagerstand = null;
                                                if (Helper
                                                        .short2boolean(artikelDto.getBLagerbewirtschaftet())) {

                                                    bdLagerstand = getLagerFac().getLagerstand(
                                                            artikelDto.getIId(), laeger[j].getLagerIId(),
                                                            theClientDto);

                                                } else {
                                                    bdLagerstand = new BigDecimal(999999999);
                                                }
                                                // wenn ein lagerstand da
                                                // ist
                                                if (bdLagerstand.compareTo(new BigDecimal(0)) == 1) {
                                                    BigDecimal bdMengeVonLager;
                                                    if (bdLagerstand.compareTo(bdAbzubuchendeMenge) == 1) {
                                                        // wenn mehr als
                                                        // ausreichend
                                                        // auf
                                                        // lager
                                                        bdMengeVonLager = bdAbzubuchendeMenge;
                                                    } else {
                                                        // dann nur den
                                                        // lagerstand
                                                        // entnehmen
                                                        bdMengeVonLager = bdLagerstand;
                                                    }
                                                    LosistmaterialDto istmat = new LosistmaterialDto();
                                                    istmat.setLagerIId(laeger[j].getLagerIId());
                                                    istmat.setLossollmaterialIId(sollmatDtos[i].getIId());
                                                    istmat.setNMenge(bdMengeVonLager);

                                                    if (sollmatDtos[i].getNMenge().doubleValue() > 0) {
                                                        istmat.setBAbgang(Helper.boolean2Short(true));
                                                    } else {
                                                        istmat.setBAbgang(Helper.boolean2Short(false));
                                                    }

                                                    // ist-wert anlegen und
                                                    // lagerbuchung
                                                    // durchfuehren
                                                    createLosistmaterial(istmat, null, theClientDto);
                                                    // menge reduzieren
                                                    bdAbzubuchendeMenge = bdAbzubuchendeMenge
                                                            .subtract(bdMengeVonLager);
                                                    oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdMengeVonLager;

                                                    tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                                            los.getC_nr() + artikelDto.getCNr(), oZeileReport);

                                                } else {
                                                    oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal(
                                                            0);
                                                    tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                                            los.getC_nr() + artikelDto.getCNr(), oZeileReport);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            hmStuecklistenposition.remove(sollmatDtos[i].getArtikelIId());
                            getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS,
                                    sollmatDtos[i].getIId(), false, theClientDto);
                        } else {

                            // Los-Sollmaterial loeschen

                            verknuepfungZuBestellpositionUndArbeitsplanLoeschen(sollmatDtos[i].getIId());

                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = sollmatDtos[i]
                                    .getNMenge().multiply(new BigDecimal(-1));

                            if (bMaterialNachbuchen == true || istmaterialDtos.length == 0
                                    || (bMaterialNachbuchen == false && Helper
                                            .short2boolean(artikelDto.getBLagerbewirtschaftet()) == false)) {
                                for (int j = 0; j < istmaterialDtos.length; j++) {
                                    removeLosistmaterial(istmaterialDtos[j], theClientDto);
                                }

                                removeLossollmaterial(sollmatDtos[i], theClientDto);

                                oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdAusgegeben
                                        .multiply(new BigDecimal(-1));
                                tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                        los.getC_nr() + artikelDto.getCNr(), oZeileReport);

                            } else {
                                sollmatDtos[i].setNMenge(new BigDecimal(0));
                                updateLossollmaterial(sollmatDtos[i], theClientDto);
                                oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal(
                                        0);
                                tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                        los.getC_nr() + artikelDto.getCNr(), oZeileReport);
                            }

                            getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS,
                                    sollmatDtos[i].getIId(), false, theClientDto);
                            sollmatDtos[i] = null;

                        }

                    }
                } catch (RemoteException e) {
                    throwEJBExceptionLPRespectOld(e);
                }

            }

            // Nun alle uebrigen Sollmaterial=0 loeschen
            for (int i = 0; i < sollmatDtos.length; i++) {
                if (sollmatDtos[i] != null && !Helper.short2boolean(sollmatDtos[i].getBNachtraeglich())
                        && sollmatDtos[i].getNMenge().doubleValue() == 0) {

                    // Los-Sollmaterial loeschen
                    LosistmaterialDto[] istmaterialDtos = losistmaterialFindByLossollmaterialIId(
                            sollmatDtos[i].getIId());

                    boolean bAlleIstMaterialSindNull = true;

                    for (int z = 0; z < istmaterialDtos.length; z++) {
                        if (istmaterialDtos[z].getNMenge().doubleValue() != 0) {
                            bAlleIstMaterialSindNull = false;
                        }
                    }
                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKeySmall(sollmatDtos[i].getArtikelIId(), theClientDto);
                    if (bMaterialNachbuchen == true || bAlleIstMaterialSindNull == true
                            || (bMaterialNachbuchen == false
                                    && Helper.short2boolean(artikelDto.getBLagerbewirtschaftet()) == false)) {

                        BigDecimal bdAusgegeben = getAusgegebeneMenge(sollmatDtos[i].getIId(), null,
                                theClientDto);

                        for (int j = 0; j < istmaterialDtos.length; j++) {
                            removeLosistmaterial(istmaterialDtos[j], theClientDto);
                        }

                        verknuepfungZuBestellpositionUndArbeitsplanLoeschen(sollmatDtos[i].getIId());
                        removeLossollmaterial(sollmatDtos[i], theClientDto);

                        if (bdAusgegeben.doubleValue() != 0) {

                            Object[] oZeileReport = new Object[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ANZAHL_SPALTEN];
                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_LOSNUMMER] = los
                                    .getC_nr();
                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ARTIKELNUMMER] = artikelDto
                                    .getCNr();
                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_EINHEIT] = artikelDto
                                    .getEinheitCNr();
                            if (artikelDto.getArtikelsprDto() != null) {
                                oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEZEICHNUNG] = artikelDto
                                        .getArtikelsprDto().getCBez();
                                oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ZUSATZBEZEICHNUNG] = artikelDto
                                        .getArtikelsprDto().getCZbez();
                            }
                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdAusgegeben
                                    .multiply(new BigDecimal(-1));

                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = new BigDecimal(
                                    0);

                            tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                    los.getC_nr() + artikelDto.getCNr(), oZeileReport);

                        }
                    }

                }
            }

            // Alle noch nicht verbrauchten neu eintragen

            Iterator it = hmStuecklistenposition.keySet().iterator();
            while (it.hasNext()) {

                try {
                    LagerDto lagerDtoMandant = getLagerFac().getHauptlagerDesMandanten(theClientDto);
                    Integer artikelIId = (Integer) it.next();

                    StuecklistepositionDto stklPos = hmStuecklistenposition.get(artikelIId);
                    BigDecimal bdAbzubuchendeMenge = stklPos.getNMenge();

                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKeySmall(stklPos.getArtikelIId(), theClientDto);

                    Object[] oZeileReport = new Object[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ANZAHL_SPALTEN];
                    oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_LOSNUMMER] = los
                            .getC_nr();
                    oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ARTIKELNUMMER] = artikelDto
                            .getCNr();
                    oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_EINHEIT] = artikelDto
                            .getEinheitCNr();
                    oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = stklPos
                            .getNMenge();

                    if (artikelDto.getArtikelsprDto() != null) {
                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEZEICHNUNG] = artikelDto
                                .getArtikelsprDto().getCBez();
                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ZUSATZBEZEICHNUNG] = artikelDto
                                .getArtikelsprDto().getCZbez();
                    }

                    LossollmaterialDto losMatDto = new LossollmaterialDto();
                    losMatDto.setArtikelIId(stklPos.getArtikelIId());
                    losMatDto.setBNachtraeglich(Helper.boolean2Short(false));
                    losMatDto.setCKommentar(stklPos.getCKommentar());
                    losMatDto.setCPosition(stklPos.getCPosition());
                    losMatDto.setFDimension1(stklPos.getFDimension1());
                    losMatDto.setFDimension2(stklPos.getFDimension2());
                    losMatDto.setFDimension3(stklPos.getFDimension3());
                    losMatDto.setILfdnummer(stklPos.getILfdnummer());
                    losMatDto.setEinheitCNr(stklPos.getEinheitCNr());
                    losMatDto.setLosIId(los.getI_id());
                    losMatDto.setMontageartIId(stklPos.getMontageartIId());
                    losMatDto.setNMenge(stklPos.getNMenge());
                    losMatDto.setISort(new Integer(0));

                    BigDecimal bdSollpreis = getLagerFac().getGemittelterGestehungspreisEinesLagers(
                            stklPos.getArtikelIId(), lagerDtoMandant.getIId(), theClientDto);
                    losMatDto.setNSollpreis(bdSollpreis);

                    Integer sollmatIId = createLossollmaterial(losMatDto, theClientDto).getIId();
                    if (bMaterialNachbuchen == true || (bMaterialNachbuchen == false
                            && Helper.short2boolean(artikelDto.getBLagerbewirtschaftet()) == false)) {

                        if (Helper.short2boolean(artikelDto.getBSeriennrtragend())
                                || Helper.short2boolean(artikelDto.getBChargennrtragend())) {
                            oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEMERKUNG] = "Der Artikel ist SNR/CNR behaftet und wurde nicht ber\u00FCcksichtigt.";

                            tmAktualisierteLose.put(los.getC_nr() + artikelDto.getCNr(), oZeileReport);
                            continue;
                        }

                        for (int j = 0; j < laeger.length; j++) {
                            // wenn noch was abzubuchen ist
                            // (Menge >
                            // 0)
                            if (bdAbzubuchendeMenge.compareTo(new BigDecimal(0)) == 1) {
                                BigDecimal bdLagerstand = null;
                                if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) {

                                    bdLagerstand = getLagerFac().getLagerstand(artikelDto.getIId(),
                                            laeger[j].getLagerIId(), theClientDto);

                                } else {
                                    bdLagerstand = new BigDecimal(999999999);
                                }
                                // wenn ein lagerstand da ist
                                if (bdLagerstand.compareTo(new BigDecimal(0)) == 1) {
                                    BigDecimal bdMengeVonLager;
                                    if (bdLagerstand.compareTo(bdAbzubuchendeMenge) == 1) {
                                        // wenn mehr als
                                        // ausreichend
                                        // auf
                                        // lager
                                        bdMengeVonLager = bdAbzubuchendeMenge;
                                    } else {
                                        // dann nur den
                                        // lagerstand
                                        // entnehmen
                                        bdMengeVonLager = bdLagerstand;
                                    }
                                    LosistmaterialDto istmat = new LosistmaterialDto();
                                    istmat.setLagerIId(laeger[j].getLagerIId());
                                    istmat.setLossollmaterialIId(sollmatIId);
                                    istmat.setNMenge(bdMengeVonLager);

                                    if (stklPos.getNMenge().doubleValue() > 0) {
                                        istmat.setBAbgang(Helper.boolean2Short(true));
                                    } else {
                                        istmat.setBAbgang(Helper.boolean2Short(false));
                                    }

                                    // ist-wert anlegen und
                                    // lagerbuchung
                                    // durchfuehren
                                    createLosistmaterial(istmat, null, theClientDto);
                                    // menge reduzieren
                                    bdAbzubuchendeMenge = bdAbzubuchendeMenge.subtract(bdMengeVonLager);

                                    oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdMengeVonLager;
                                    tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                            los.getC_nr() + artikelDto.getCNr(), oZeileReport);

                                }
                            }
                        }
                    } else {
                        oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal(
                                0);
                        tmAktualisierteLose = add2TreeMap(tmAktualisierteLose,
                                los.getC_nr() + artikelDto.getCNr(), oZeileReport);
                    }

                    getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS, losMatDto.getIId(), false,
                            theClientDto);

                } catch (RemoteException e) {
                    throwEJBExceptionLPRespectOld(e);
                }
            }

            // Los aktualisieren
            Los losUpd = em.find(Los.class, los.getI_id());
            losUpd.setTAktualisierungstueckliste(getTimestamp());

        }

    }

    return tmAktualisierteLose;
}

From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java

public void bucheMaterialAufLos(LosDto losDto, BigDecimal menge, boolean bHandausgabe,
        boolean bNurFehlmengenAnlegenUndReservierungenLoeschen, boolean bUnterstuecklistenAbbuchen,
        TheClientDto theClientDto, ArrayList<BucheSerienChnrAufLosDto> bucheSerienChnrAufLosDtos,
        boolean throwExceptionWhenCreate) {
    try {/*from  w  ww .  ja  v a2 s  . c o m*/

        Query query = em.createNamedQuery("LossollmaterialfindByLosIId");
        query.setParameter(1, losDto.getIId());
        Collection<?> cl = query.getResultList();
        // if (cl.isEmpty()) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, null);
        // }
        LossollmaterialDto[] sollmat = assembleLossollmaterialDtos(cl);
        LosablieferungDto[] dtos = losablieferungFindByLosIId(losDto.getIId(), false, theClientDto);
        BigDecimal bdBereitsabgeliefert = new BigDecimal(0);
        for (int i = 0; i < dtos.length; i++) {
            bdBereitsabgeliefert = bdBereitsabgeliefert.add(dtos[i].getNMenge());
        }

        // PJ18216
        boolean bNichtLagerbewSofortAusgeben = false;
        try {
            ParametermandantDto parameterM = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_FERTIGUNG,
                    ParameterFac.PARAMETER_NICHT_LAGERBEWIRTSCHAFTETE_SOFORT_AUSGEBEN);
            bNichtLagerbewSofortAusgeben = ((Boolean) parameterM.getCWertAsObject()).booleanValue();

        } catch (RemoteException ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
        }

        // Laeger des Loses
        LoslagerentnahmeDto[] laeger = loslagerentnahmeFindByLosIId(losDto.getIId());
        // nun vom lager abbuchen
        for (int i = 0; i < sollmat.length; i++) {
            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(sollmat[i].getArtikelIId(),
                    theClientDto);
            // seriennummerntragende werden jetzt gar nicht gebucht

            if (!bNurFehlmengenAnlegenUndReservierungenLoeschen) {
                if (!bHandausgabe || (bHandausgabe == true && bNichtLagerbewSofortAusgeben == true)) {

                    // PJ18216
                    if (bHandausgabe == true && bNichtLagerbewSofortAusgeben == true) {

                        if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) {
                            continue;
                        }

                    }

                    StuecklisteDto stuecklisteDto = getStuecklisteFac()
                            .stuecklisteFindByMandantCNrArtikelIIdOhneExc(artikelDto.getIId(), theClientDto);
                    if (bUnterstuecklistenAbbuchen == false && stuecklisteDto != null) {
                    } else {

                        BigDecimal bdAbzubuchendeMenge = new BigDecimal(0.0000);
                        if (menge == null) {
                            bdAbzubuchendeMenge = sollmat[i].getNMenge();
                        } else {
                            if (losDto.getNLosgroesse().doubleValue() != 0) {
                                BigDecimal sollsatzGroesse = sollmat[i].getNMenge()
                                        .divide(losDto.getNLosgroesse(), 10, BigDecimal.ROUND_HALF_EVEN);

                                sollsatzGroesse = Helper.rundeKaufmaennisch(sollsatzGroesse, 3);

                                BigDecimal bdBereitsausgegeben = getAusgegebeneMenge(sollmat[i].getIId(), null,
                                        theClientDto);
                                BigDecimal bdGesamtmenge = Helper.rundeKaufmaennisch(
                                        bdBereitsabgeliefert.add(menge).multiply(sollsatzGroesse), 4);
                                if (bdGesamtmenge.subtract(bdBereitsausgegeben).doubleValue() > 0) {
                                    bdAbzubuchendeMenge = bdGesamtmenge.subtract(bdBereitsausgegeben);
                                } else {
                                    if (bdGesamtmenge.doubleValue() < 0) {
                                        bdAbzubuchendeMenge = bdGesamtmenge.subtract(bdBereitsausgegeben).abs();

                                    }
                                }
                            }
                        }

                        // wg. PJ 15370
                        if (sollmat[i].getNMenge().doubleValue() > 0) {

                            if (!Helper.short2boolean(artikelDto.getBSeriennrtragend())
                                    && !Helper.short2boolean(artikelDto.getBChargennrtragend())) {
                                for (int j = 0; j < laeger.length; j++) {
                                    // wenn noch was abzubuchen ist (Menge >
                                    // 0)
                                    if (bdAbzubuchendeMenge.compareTo(new BigDecimal(0)) == 1) {
                                        BigDecimal bdLagerstand = null;
                                        if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) {

                                            // PJ18290
                                            boolean bImmerAusreichendVerfuegbar = false;
                                            try {
                                                ParametermandantDto parameterM = getParameterFac()
                                                        .getMandantparameter(theClientDto.getMandant(),
                                                                ParameterFac.KATEGORIE_ARTIKEL,
                                                                ParameterFac.PARAMETER_LAGER_IMMER_AUSREICHEND_VERFUEGBAR);
                                                bImmerAusreichendVerfuegbar = ((Boolean) parameterM
                                                        .getCWertAsObject()).booleanValue();

                                            } catch (RemoteException ex) {
                                                throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
                                            }
                                            if (bImmerAusreichendVerfuegbar == true) {
                                                bdLagerstand = new BigDecimal(999999999);
                                            } else {
                                                bdLagerstand = getLagerFac().getLagerstand(artikelDto.getIId(),
                                                        laeger[j].getLagerIId(), theClientDto);

                                            }

                                        } else {
                                            bdLagerstand = new BigDecimal(999999999);
                                        }
                                        // wenn ein lagerstand da ist
                                        if (bdLagerstand.compareTo(new BigDecimal(0)) == 1) {
                                            BigDecimal bdMengeVonLager;
                                            if (bdLagerstand.compareTo(bdAbzubuchendeMenge) == 1) {
                                                // wenn mehr als ausreichend
                                                // auf
                                                // lager
                                                bdMengeVonLager = bdAbzubuchendeMenge;
                                            } else {
                                                // dann nur den lagerstand
                                                // entnehmen
                                                bdMengeVonLager = bdLagerstand;
                                            }
                                            LosistmaterialDto istmat = new LosistmaterialDto();
                                            istmat.setLagerIId(laeger[j].getLagerIId());
                                            istmat.setLossollmaterialIId(sollmat[i].getIId());
                                            istmat.setNMenge(bdMengeVonLager);

                                            if (sollmat[i].getNMenge().doubleValue() > 0) {
                                                istmat.setBAbgang(Helper.boolean2Short(true));
                                            } else {
                                                istmat.setBAbgang(Helper.boolean2Short(false));
                                            }

                                            // ist-wert anlegen und
                                            // lagerbuchung
                                            // durchfuehren
                                            createLosistmaterial(istmat, null, theClientDto);
                                            // menge reduzieren
                                            bdAbzubuchendeMenge = bdAbzubuchendeMenge.subtract(bdMengeVonLager);
                                        }
                                    }
                                }

                            } else {
                                if (bucheSerienChnrAufLosDtos != null) {
                                    for (int j = 0; j < bucheSerienChnrAufLosDtos.size(); j++) {
                                        BucheSerienChnrAufLosDto dtoTemp = bucheSerienChnrAufLosDtos.get(j);

                                        if (dtoTemp.getLossollmaterialIId().equals(sollmat[i].getIId())) {

                                            LosistmaterialDto istmat = new LosistmaterialDto();
                                            istmat.setLagerIId(dtoTemp.getLagerIId());
                                            istmat.setLossollmaterialIId(dtoTemp.getLossollmaterialIId());
                                            istmat.setNMenge(dtoTemp.getNMenge());
                                            if (sollmat[i].getNMenge().doubleValue() > 0) {
                                                istmat.setBAbgang(Helper.boolean2Short(true));
                                            } else {
                                                istmat.setBAbgang(Helper.boolean2Short(false));
                                            }
                                            // ist-wert anlegen und
                                            // lagerbuchung
                                            // durchfuehren
                                            createLosistmaterial(istmat, dtoTemp.getCSeriennrChargennr(),
                                                    theClientDto);

                                        }

                                    }
                                }
                            }
                        }
                    }

                }
            }

            // Reservierung loeschen
            removeReservierung(artikelDto, sollmat[i].getIId());
            // Fehlmenge anlegen
            getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS, sollmat[i].getIId(),
                    throwExceptionWhenCreate, theClientDto);
        }

    }
    // catch (FinderException ex) {
    // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex);
    // }
    catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    }

}

From source file:ca.oson.json.Oson.java

private <E, R> BigDecimal json2BigDecimalDefault(FieldData objectDTO) {
    E value = (E) objectDTO.valueToProcess;
    Class<R> returnType = objectDTO.returnType;
    boolean required = objectDTO.required();

    Long min = objectDTO.getMin();
    Long max = objectDTO.getMax();
    boolean json2Java = objectDTO.json2Java;

    if (getDefaultType() == JSON_INCLUDE.DEFAULT || required) {
        BigDecimal defaultValue = (BigDecimal) objectDTO.getDefaultValue();
        if (defaultValue != null) {
            if (min != null && defaultValue.compareTo(new BigDecimal(min)) < 0) {
                return new BigDecimal(min);
            }/* w w  w. jav a 2  s. co m*/

            if (max != null && defaultValue.compareTo(new BigDecimal(max)) > 0) {
                return new BigDecimal(max);
            }

            return defaultValue;
        }

        if (min != null && DefaultValue.bigDecimal.compareTo(new BigDecimal(min)) < 0) {
            return new BigDecimal(min);
        }

        return DefaultValue.bigDecimal;
    }

    return null;
}

From source file:com.turborep.turbotracker.vendor.controller.VendorInvoiceBillController.java

@RequestMapping(value = "/addVendorInvoiceFromPO", method = RequestMethod.POST)
public @ResponseBody Vebill addVendorInvoiceFromPO(
        @RequestParam(value = "recDateIdPO", required = false) String recDateIdPO,
        @RequestParam(value = "datePO", required = false) String datePO,
        @RequestParam(value = "duePO", required = false) String duePO,
        @RequestParam(value = "shipviaPO", required = false) Integer shipviaPO,
        @RequestParam(value = "vendorInvoicePO", required = false) String vendorInvoicePO,
        @RequestParam(value = "apacctPO", required = false) Integer apacctPO,
        @RequestParam(value = "postdatePO", required = false) String postdatePO,
        @RequestParam(value = "postDate1PO", required = false) String postDate1PO,
        @RequestParam(value = "shipDatePO", required = false) String shipDatePO,
        @RequestParam(value = "proPO", required = false) String proPO,
        @RequestParam(value = "subtotalGeneralId", required = false) BigDecimal subtotalGeneralId,
        @RequestParam(value = "freightGeneralId", required = false) BigDecimal freightGeneralId,
        @RequestParam(value = "taxGeneralId", required = false) BigDecimal taxGeneralId,
        @RequestParam(value = "totalGeneralId", required = false) BigDecimal totalGeneralId,
        @RequestParam(value = "balDuePO", required = false) BigDecimal balDuePO,
        @RequestParam(value = "vepoId", required = false) Integer vepoId,
        @RequestParam(value = "veBillIdPO", required = false) Integer veBillIdPO,
        @RequestParam(value = "prMasterIDPO", required = false) Integer prMasterIDPO,
        @RequestParam(value = "rxMasterIDPayablePO", required = false) Integer rxMasterIDPayablePO,
        @RequestParam(value = "buttonValue", required = false) String buttonValue,
        @RequestParam(value = "updatePO", required = false) String updatePO,
        @RequestParam(value = "reason", required = false) String reason,
        @RequestParam(value = "coFiscalPeriodId", required = false) Integer periodId,
        @RequestParam(value = "coFiscalYearId", required = false) Integer yearId,
        @RequestParam(value = "joreleasedetid", required = false) Integer joreleasedetid,
        @RequestParam(value = "operatorStatus", required = false) String operatorStatus,
        @RequestParam(value = "gridData", required = false) String gridData,
        @RequestParam(value = "delData[]", required = false) ArrayList<String> delData, ModelMap theModel,
        HttpSession theSession, HttpServletResponse theResponse, HttpServletRequest theRequest)
        throws IOException, JobException, ParseException, BankingException, CompanyException,
        MessagingException {//from   w ww  .j  a  v  a2  s  .  c  o m
    Vebill aVebill = new Vebill();
    String result = null;
    Integer insertStatus = 0;
    logger.info("updatePO Status : " + updatePO + "REason" + reason);
    Vebilldetail vebilDetail = new Vebilldetail();
    System.out.println("check vendor invoice bill contr");
    UserBean aUserBean;
    aUserBean = (UserBean) theSession.getAttribute(SessionConstants.USER);

    try {
        if (recDateIdPO != null && recDateIdPO != "") {
            aVebill.setReceiveDate(DateUtils.parseDate(recDateIdPO.trim(), new String[] { "MM/dd/yyyy" }));
        }
        if (datePO != null && datePO != "") {
            aVebill.setBillDate(DateUtils.parseDate(datePO.trim(), new String[] { "MM/dd/yyyy" }));
        }
        if (duePO != null && duePO != "") {
            aVebill.setDueDate(DateUtils.parseDate(duePO.trim(), new String[] { "MM/dd/yyyy" }));
        }

        if (shipDatePO != null && shipDatePO != "") {
            aVebill.setShipDate(DateUtils.parseDate(shipDatePO.trim(), new String[] { "MM/dd/yyyy" }));
        }
        aVebill.setVeShipViaId(shipviaPO);
        aVebill.setApaccountId(apacctPO);
        aVebill.setInvoiceNumber(vendorInvoicePO);

        if (joreleasedetid != null)
            aVebill.setJoReleaseDetailId(joreleasedetid);

        if (rxMasterIDPayablePO != null)
            aVebill.setRxMasterId(rxMasterIDPayablePO);
        /*if(postdatePO != null && "on".equalsIgnoreCase(postdatePO))
        {
           aVebill.setUsePostDate(true);
           if (postDate1PO != null && postDate1PO != "") {
              aVebill.setPostDate(DateUtils.parseDate(postDate1PO.trim(),
             new String[] { "MM/dd/yyyy" }));
           }
                   
        }
        else
        {
           aVebill.setUsePostDate(false);
           if (postDate1PO != null && postDate1PO != "") {
              aVebill.setPostDate(DateUtils.parseDate(postDate1PO.trim(),
             new String[] { "MM/dd/yyyy" }));
           }
        }*/
        aVebill.setTrackingNumber(proPO);
        aVebill.setReason(reason);
        aVebill.setBillAmount(subtotalGeneralId.add(freightGeneralId).add(taxGeneralId));
        aVebill.setFreightAmount(freightGeneralId);
        aVebill.setTaxAmount(taxGeneralId);
        aVebill.setVePoid(vepoId);
        if ("Void".equalsIgnoreCase(buttonValue))
            aVebill.setTransactionStatus(-1);
        else if ("Acct. HOLD".equalsIgnoreCase(buttonValue))
            aVebill.setTransactionStatus(0);
        else if ("Open".equalsIgnoreCase(buttonValue))
            aVebill.setTransactionStatus(1);
        else if ("Pmt. HOLD".equalsIgnoreCase(buttonValue))
            aVebill.setTransactionStatus(-2);
        else
            aVebill.setTransactionStatus(2);
        aVebill.setAppliedAmount(new BigDecimal(0.00));

        //aVebill.setFreightAmount(new BigDecimal(0.00));
        //aVebill.setVePoid(1);
        aVebill.setApplied(false);
        aVebill.setVoid_(false);
        /*if(veBillIdPO != null && veBillIdPO != 0)
           aVebill.setVeBillId(veBillIdPO);*/

        //   Vebill theVebill = new Vebill();
        //   theVebill = vendorService.getVeBill(vepoId);

        aVebill.setCreatedById(aUserBean.getUserId());
        aVebill.setCreatedOn(new Date());
        /*
         * Added by Simon
         * Reason for Adding ID#573 for differentiating purchases.
         */
        ArrayList<Prmaster> prMaster = new ArrayList<Prmaster>();
        if (veBillIdPO == null || veBillIdPO == 0) {
            if (vepoId != null && vepoId != 0) {
                Vepo testvepo = itsJobService.getVepo(vepoId);
                if (testvepo != null && testvepo.getJoReleaseId() != null && testvepo.getJoReleaseId() != 0) {
                    JoReleaseDetail thejoreleaseDetail = new JoReleaseDetail();
                    thejoreleaseDetail.setJoReleaseId(testvepo.getJoReleaseId());
                    thejoreleaseDetail.setShipDate(aVebill.getShipDate());
                    thejoreleaseDetail.setVendorInvoiceDate(aVebill.getBillDate());
                    thejoreleaseDetail.setVendorInvoiceAmount(aVebill.getBillAmount());
                    JoRelease thejorelease = itsJobService.getJoRelease(testvepo.getJoReleaseId());
                    if (thejorelease != null && thejorelease.getJoMasterId() != null
                            && thejorelease.getJoMasterId() != 0) {
                        thejoreleaseDetail.setJoMasterId(thejorelease.getJoMasterId());
                    }
                    Integer joReleaseDetailID = itsJobService.addJoReleaseDetail(thejoreleaseDetail);
                    aVebill.setJoReleaseDetailId(joReleaseDetailID);
                }
            }

            Integer veBillid = vendorService.insertVebill(aVebill);

            if (veBillid != null && veBillid != 0)
                aVebill.setVeBillId(veBillid);
            else
                aVebill.setVeBillId(veBillIdPO);

            if (delData != null) {
                for (String detailID : delData) {
                    Vebilldetail aVebilldetail = new Vebilldetail();
                    System.out.println("delData[i]" + detailID);
                    Integer vebillDetailID = JobUtil.ConvertintoInteger(detailID);
                    aVebilldetail.setVeBillDetailId(vebillDetailID);
                    aVebilldetail.setVeBillId(aVebill.getVeBillId());
                    vendorService.saveVebillDetail(aVebilldetail, "delete");
                }
            }

            if (veBillIdPO == null || veBillIdPO == 0) {

                //insertStatus = vendorService.insertVebillDetail(veBillid,vepoId,aUserBean.getUserId());
                JsonParser parser = new JsonParser();
                if (gridData != null) {
                    System.out.println("gridData" + gridData);
                    JsonElement ele = parser.parse(gridData);
                    JsonArray array = ele.getAsJsonArray();
                    System.out.println("array length==>" + array.size());
                    for (int ki = 0; ki < array.size() - 1; ki++) {
                        JsonElement ele1 = array.get(ki);
                        Prmaster master = new Prmaster();
                        JsonObject obj = ele1.getAsJsonObject();
                        String desc = obj.get("description").getAsString();
                        String note = obj.get("note").getAsString();
                        master.setItemCode(note);
                        BigDecimal quantityOrder = obj.get("quantityOrdered").getAsBigDecimal();
                        Integer prMasterID = obj.get("prMasterId").getAsInt();
                        master.setPrMasterId(prMasterID);
                        BigDecimal priceMultiplier = obj.get("priceMultiplier").getAsBigDecimal();
                        String unitCost_String = obj.get("unitCost").getAsString().replaceAll("\\$", "");
                        unitCost_String = unitCost_String.replaceAll(",", "");
                        BigDecimal unitCost = JobUtil.ConvertintoBigDecimal(unitCost_String);
                        String quantityBilled_String = obj.get("quantityBilled").getAsString().replaceAll("\\$",
                                "");
                        quantityBilled_String = quantityBilled_String.replaceAll(",", "");
                        BigDecimal quantityBilled = JobUtil.ConvertintoBigDecimal(quantityBilled_String);
                        master.setLastCost(quantityBilled);
                        Integer veBillDetailId = null;
                        if (obj.get("veBillDetailId") != null && obj.get("veBillDetailId").getAsString() != ""
                                && obj.get("veBillDetailId").getAsString().length() > 0) {
                            veBillDetailId = obj.get("veBillDetailId").getAsInt();
                        }
                        String Oper = "add";
                        if (veBillDetailId != null) {
                            Oper = "edit";
                        }

                        Integer vePODetailId = null;
                        if (obj.get("vePodetailId") != null && obj.get("vePodetailId").getAsString() != ""
                                && obj.get("vePodetailId").getAsString().length() > 0) {
                            vePODetailId = obj.get("vePodetailId").getAsInt();
                        }

                        Vebilldetail aVebilldetail = new Vebilldetail();
                        aVebilldetail.setVeBillDetailId(veBillDetailId);
                        aVebilldetail.setDescription(desc);
                        aVebilldetail.setNote(note);
                        aVebilldetail.setQuantityBilled(quantityOrder);
                        aVebilldetail.setPriceMultiplier(priceMultiplier);
                        aVebilldetail.setUnitCost(unitCost);
                        aVebilldetail.setVePodetailId(vePODetailId);
                        aVebilldetail.setPrMasterId(prMasterID);
                        aVebilldetail.setVeBillId(aVebill.getVeBillId());

                        if (obj.get("taxable").getAsString().equals("Yes"))
                            aVebilldetail.setTaxable(true);
                        else
                            aVebilldetail.setTaxable(false);

                        vendorService.saveVebillDetail(aVebilldetail, Oper);
                        master.setInitialCost(freightGeneralId);
                        prMaster.add(master);
                    }
                }
                if ((prMaster.size() == 0) && (freightGeneralId.compareTo(BigDecimal.ZERO) != 0)) {
                    Prmaster master = new Prmaster();
                    master.setInitialCost(freightGeneralId);
                    prMaster.add(master);
                }
                prMaster.trimToSize();
                vendorService.insertVebillHistory(aVebill.getVeBillId(), vepoId, aUserBean.getUserId());
                vendorService.updateveBillHistory(aVebill.getVeBillId());

                if (updatePO.equalsIgnoreCase("yes")) {
                    vendorService.updateVepoStatus(vepoId, 2);
                }

                if (operatorStatus.equals("close")) {
                    /*
                     *Modified Signature by Simon
                     *Reason for Modifying ID#573 for differentiating purchases 
                     */
                    itsGltransactionService.recieveVendorBill(prMaster, aVebill, insertStatus, yearId, periodId,
                            aUserBean.getFullName());
                }
            }
        } else {
            //update the edited vendor invoice   
            if (!reason.equals("")) {
                //   vendorService.rollbackupdatePrMaster(veBillIdPO);
            }
            aVebill.setVeBillId(veBillIdPO);
            System.out.println("delData" + delData);
            //functionality for delete the grid columns
            if (delData != null) {
                for (String detailID : delData) {
                    Vebilldetail aVebilldetail = new Vebilldetail();
                    System.out.println("delData[i]" + detailID);
                    Integer vebillDetailID = JobUtil.ConvertintoInteger(detailID);
                    aVebilldetail.setVeBillDetailId(vebillDetailID);
                    aVebilldetail.setVeBillId(aVebill.getVeBillId());
                    vendorService.saveVebillDetail(aVebilldetail, "delete");
                }
            }

            JsonParser parser = new JsonParser();
            if (gridData != null) {
                System.out.println("gridData" + gridData);
                JsonElement ele = parser.parse(gridData);
                JsonArray array = ele.getAsJsonArray();
                System.out.println("array length==>" + array.size());
                for (int ki = 0; ki < array.size() - 1; ki++) {
                    JsonElement ele1 = array.get(ki);
                    Prmaster master = new Prmaster();
                    JsonObject obj = ele1.getAsJsonObject();
                    String desc = obj.get("description").getAsString();
                    String note = obj.get("note").getAsString();
                    master.setItemCode(note);
                    BigDecimal quantityOrder = obj.get("quantityOrdered").getAsBigDecimal();
                    Integer prMasterID = obj.get("prMasterId").getAsInt();
                    master.setPrMasterId(prMasterID);
                    BigDecimal priceMultiplier = obj.get("priceMultiplier").getAsBigDecimal();
                    String unitCost_String = obj.get("unitCost").getAsString().replaceAll("\\$", "");
                    unitCost_String = unitCost_String.replaceAll(",", "");
                    BigDecimal unitCost = JobUtil.ConvertintoBigDecimal(unitCost_String);
                    String quantityBilled_String = obj.get("quantityBilled").getAsString().replaceAll("\\$",
                            "");
                    quantityBilled_String = quantityBilled_String.replaceAll(",", "");
                    BigDecimal quantityBilled = JobUtil.ConvertintoBigDecimal(quantityBilled_String);
                    master.setLastCost(quantityBilled);
                    Integer veBillDetailId = null;
                    if (obj.get("veBillDetailId") != null && obj.get("veBillDetailId").getAsString() != ""
                            && obj.get("veBillDetailId").getAsString().length() > 0) {
                        veBillDetailId = obj.get("veBillDetailId").getAsInt();
                    }
                    String Oper = "add";
                    if (veBillDetailId != null) {
                        Oper = "edit";
                    }

                    Integer vePODetailId = null;
                    if (obj.get("vePodetailId") != null && obj.get("vePodetailId").getAsString() != ""
                            && obj.get("vePodetailId").getAsString().length() > 0) {
                        vePODetailId = obj.get("vePodetailId").getAsInt();
                    }

                    Vebilldetail aVebilldetail = new Vebilldetail();
                    aVebilldetail.setVeBillDetailId(veBillDetailId);
                    aVebilldetail.setDescription(desc);
                    aVebilldetail.setNote(note);
                    aVebilldetail.setQuantityBilled(quantityOrder);
                    aVebilldetail.setPriceMultiplier(priceMultiplier);
                    aVebilldetail.setUnitCost(unitCost);
                    aVebilldetail.setVePodetailId(vePODetailId);
                    aVebilldetail.setPrMasterId(prMasterID);
                    aVebilldetail.setVeBillId(veBillIdPO);

                    if (obj.get("taxable").getAsString().equals("Yes"))
                        aVebilldetail.setTaxable(true);
                    else
                        aVebilldetail.setTaxable(false);

                    vendorService.saveVebillDetail(aVebilldetail, Oper);
                    master.setInitialCost(freightGeneralId);
                    prMaster.add(master);
                }
            }
            if (prMaster.size() == 0) {
                Prmaster master = new Prmaster();
                master.setInitialCost(freightGeneralId);
                prMaster.add(master);
            }
            prMaster.trimToSize();

            if (!reason.equals("")) {
                Coledgersource aColedgersource = itsGltransactionService.getColedgersourceDetail("VB");
                GlRollback glRollback = new GlRollback();
                glRollback.setVeBillID(aVebill.getVeBillId());
                glRollback.setCoLedgerSourceID(aColedgersource.getCoLedgerSourceId());
                glRollback.setPeriodID(periodId);
                glRollback.setYearID(yearId);
                glRollback.setTransactionDate(aVebill.getBillDate());
                itsGltransactionService.rollBackGlTransaction(glRollback);
                //vendorService.rollbackupdatePrMaster(veBillIdPO);
            }
            aVebill.setChangedById(aUserBean.getUserId());
            aVebill.setChangedOn(new Date());
            vendorService.insertVebill(aVebill);
            vendorService.updateveBillHistory(veBillIdPO);
            if (operatorStatus != null)
                if (veBillIdPO != null && veBillIdPO != 0 && operatorStatus.equals("close")
                        && !buttonValue.equals("Void"))
                    itsGltransactionService.recieveVendorBill(prMaster, aVebill, 0, yearId, periodId,
                            aUserBean.getFullName());
        }

        //   throw new VendorException("Testing Exception");

    } catch (VendorException e) {
        logger.error(e.getMessage());
        theResponse.sendError(e.getItsErrorStatusCode(), e.getMessage());
        theResponse.sendError(e.getItsErrorStatusCode(), e.getMessage());
        Transactionmonitor transObj = new Transactionmonitor();
        SendQuoteMail sendMail = new SendQuoteMail();
        transObj.setHeadermsg("Transaction Log << " + e.getMessage() + " >>");
        transObj.setTrackingId("<b>Invoice No:</b>" + aVebill.getInvoiceNumber() + "<br><b>RxMasterID:</b>"
                + aVebill.getRxMasterId());
        transObj.setTimetotriggerd(new Date());
        transObj.setJobStatus("Outside");
        transObj.setUsername(aUserBean.getFullName() + "[" + aUserBean.getUserId() + "]");
        StringWriter errors = new StringWriter();
        e.printStackTrace(new PrintWriter(errors));
        transObj.setDescription("Message :: " + errors.toString());
        sendMail.sendTransactionInfo(transObj, theRequest);
    }

    /* Commented by Jenith on 2014-09-11 11:52
     * catch (FinancePostingException e){
       logger.error(e.getMessage());
       theResponse.sendError(e.getItsErrorStatusCode(), e.getMessage());
    }
    catch (ProductException e) {
       logger.error(e.getMessage());
    }*/
    return aVebill;
}

From source file:ca.oson.json.Oson.java

private <E, R> String bigDecimal2Json(FieldData objectDTO) {
    if (objectDTO == null || objectDTO.json2Java) {
        return null;
    }//from w  ww .  ja v a2 s . co  m

    E value = (E) objectDTO.valueToProcess;
    Class<R> returnType = objectDTO.returnType;

    if (value != null && value.toString().trim().length() > 0) {
        BigDecimal valueToProcess = null;
        String valueToReturn = null;

        if (value instanceof BigDecimal) {
            valueToProcess = (BigDecimal) value;
        } else {
            try {
                valueToProcess = new BigDecimal(value.toString().trim());
            } catch (Exception ex) {
            }
        }

        if (valueToProcess != null) {
            try {
                Function function = objectDTO.getSerializer();
                if (function != null) {
                    try {
                        if (function instanceof DataMapper2JsonFunction) {
                            DataMapper classData = new DataMapper(returnType, value, objectDTO.classMapper,
                                    objectDTO.level, getPrettyIndentation());
                            return ((DataMapper2JsonFunction) function).apply(classData);

                        } else if (function instanceof BigDecimal2JsonFunction) {
                            return ((BigDecimal2JsonFunction) function).apply(valueToProcess);

                        } else {

                            Object returnedValue = null;
                            if (function instanceof FieldData2JsonFunction) {
                                FieldData2JsonFunction f = (FieldData2JsonFunction) function;
                                FieldData fieldData = objectDTO.clone();
                                returnedValue = f.apply(fieldData);
                            } else {
                                returnedValue = function.apply(value);
                            }

                            if (returnedValue instanceof Optional) {
                                returnedValue = ObjectUtil.unwrap(returnedValue);
                            }

                            if (returnedValue == null) {
                                return null;

                            } else if (returnedValue instanceof BigDecimal) {
                                valueToProcess = (BigDecimal) returnedValue;

                            } else {
                                objectDTO.valueToProcess = returnedValue;
                                return object2String(objectDTO);
                            }

                        }

                    } catch (Exception e) {
                    }
                }

                if (valueToProcess != null) {
                    Long min = objectDTO.getMin();
                    Long max = objectDTO.getMax();

                    if (min != null && valueToProcess.compareTo(new BigDecimal(min)) < 0) {
                        valueToProcess = new BigDecimal(min);
                    }

                    if (max != null && valueToProcess.compareTo(new BigDecimal(max)) > 0) {
                        valueToProcess = new BigDecimal(max);
                    }

                    Integer precision = objectDTO.getPrecision();
                    Integer scale = objectDTO.getScale();

                    if (precision != null && precision < valueToProcess.precision()) {
                        valueToProcess = (BigDecimal) NumberUtil.setPrecision(valueToProcess, precision,
                                getRoundingMode());

                        if (scale != null) {
                            valueToProcess = valueToProcess.setScale(scale, getRoundingMode());
                        }

                    } else if (scale != null) {
                        valueToProcess = valueToProcess.setScale(scale, getRoundingMode());
                    }

                    return NumberUtil.appendingFloatingZero(NumberUtil.toPlainString(valueToProcess),
                            this.isAppendingFloatingZero());
                }

            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    }

    return bigDecimal2JsonDefault(objectDTO);
}

From source file:ca.oson.json.Oson.java

private <E, R> BigDecimal json2BigDecimal(FieldData objectDTO) {
    if (objectDTO == null || !objectDTO.json2Java) {
        return null;
    }//from  w  w  w .jav  a 2 s  .  c  o  m

    E value = (E) objectDTO.valueToProcess;
    Class<R> returnType = objectDTO.returnType;

    if (value != null && value.toString().trim().length() > 0) {
        String valueToProcess = value.toString().trim();
        BigDecimal valueToReturn = null;

        try {
            Function function = objectDTO.getDeserializer();

            if (function != null) {
                try {
                    Object returnedValue = null;

                    if (function instanceof Json2DataMapperFunction) {
                        DataMapper classData = new DataMapper(returnType, value, objectDTO.classMapper,
                                objectDTO.level, getPrettyIndentation());
                        returnedValue = ((Json2DataMapperFunction) function).apply(classData);

                    } else if (function instanceof Json2FieldDataFunction) {
                        Json2FieldDataFunction f = (Json2FieldDataFunction) function;
                        FieldData fieldData = objectDTO.clone();

                        returnedValue = f.apply(fieldData);

                    } else if (function instanceof Json2BigDecimalFunction) {
                        return ((Json2BigDecimalFunction) function).apply(valueToProcess);
                    } else {
                        returnedValue = function.apply(valueToProcess);
                    }

                    if (returnedValue instanceof Optional) {
                        returnedValue = ObjectUtil.unwrap(returnedValue);
                    }

                    if (returnedValue == null) {
                        return null;

                    } else if (Number.class.isAssignableFrom(returnedValue.getClass())
                            || returnedValue.getClass().isPrimitive()) {

                        if (returnedValue instanceof BigDecimal) {
                            valueToReturn = (BigDecimal) returnedValue;
                        } else if (returnedValue instanceof String) {
                            valueToReturn = new BigDecimal((String) returnedValue);

                        } else if (returnedValue instanceof Integer) {
                            valueToReturn = new BigDecimal((Integer) returnedValue);
                        } else if (returnedValue instanceof Long) {
                            valueToReturn = new BigDecimal((Long) returnedValue);
                        } else if (returnedValue instanceof Short) {
                            valueToReturn = new BigDecimal((Short) returnedValue);
                        } else if (returnedValue instanceof Double) {
                            valueToReturn = new BigDecimal((Double) returnedValue);
                        } else if (returnedValue instanceof Float) {
                            valueToReturn = new BigDecimal((Float) returnedValue);
                        } else if (returnedValue instanceof BigInteger) {
                            valueToReturn = new BigDecimal((BigInteger) returnedValue);
                        } else if (returnedValue instanceof Byte) {
                            valueToReturn = new BigDecimal((Byte) returnedValue);
                        } else if (returnedValue instanceof AtomicInteger) {
                            valueToReturn = new BigDecimal(((AtomicInteger) returnedValue).intValue());
                        } else if (returnedValue instanceof AtomicLong) {
                            valueToReturn = new BigDecimal(((AtomicLong) returnedValue).longValue());
                        } else {
                            valueToReturn = new BigDecimal(((Number) returnedValue).doubleValue());
                        }

                    } else if (returnedValue instanceof Character) {
                        char c = (Character) returnedValue;
                        valueToReturn = new BigDecimal(Character.getNumericValue((Character) returnedValue));

                    } else if (returnedValue instanceof Boolean) {
                        if ((Boolean) returnedValue)
                            valueToReturn = new BigDecimal(1);
                        else
                            valueToReturn = new BigDecimal(0);

                    } else if (Enum.class.isAssignableFrom(returnedValue.getClass())) {
                        valueToReturn = new BigDecimal((Integer) ((Enum) returnedValue).ordinal());

                    } else if (Date.class.isAssignableFrom(returnedValue.getClass())) {
                        valueToReturn = new BigDecimal(((Date) returnedValue).getTime());

                    } else {
                        valueToReturn = new BigDecimal((returnedValue.toString()));
                    }

                    return valueToReturn;

                } catch (Exception e) {
                    e.printStackTrace();
                }

            } else {
                valueToReturn = new BigDecimal(valueToProcess);
            }

            if (valueToReturn != null) {
                Long min = objectDTO.getMin();
                Long max = objectDTO.getMax();

                if (min != null && valueToReturn.compareTo(new BigDecimal(min)) < 0) {
                    return new BigDecimal(min);
                }

                if (max != null && valueToReturn.compareTo(new BigDecimal(max)) > 0) {
                    valueToReturn = new BigDecimal(max);
                }

                Integer precision = objectDTO.getPrecision();
                if (precision != null && precision < valueToReturn.precision()) {
                    valueToReturn = (BigDecimal) NumberUtil.setPrecision(valueToReturn, precision,
                            getRoundingMode());
                }

                Integer scale = objectDTO.getScale();
                if (scale != null) {
                    valueToReturn = valueToReturn.setScale(scale, getRoundingMode());
                }

                return valueToReturn;
            }

        } catch (Exception ex) {
            //ex.printStackTrace();
        }

    }

    return json2BigDecimalDefault(objectDTO);
}

From source file:it.govpay.core.business.Rendicontazioni.java

public String downloadRendicontazioni(boolean deep) throws GovPayException {
    boolean errori = false;
    List<String> response = new ArrayList<String>();
    try {//from w  w w .  jav  a  2 s .c om
        GpThreadLocal.get().log("rendicontazioni.acquisizione");
        DominiBD dominiBD = new DominiBD(this);

        StazioniBD stazioniBD = new StazioniBD(this);
        List<Stazione> lstStazioni = stazioniBD.getStazioni();

        PspBD pspBD = new PspBD(this);
        List<Psp> lstPsp = pspBD.getPsp();
        closeConnection();

        for (Stazione stazione : lstStazioni) {

            List<TipoIdRendicontazione> flussiDaAcquisire = new ArrayList<TipoIdRendicontazione>();

            setupConnection(GpThreadLocal.get().getTransactionId());
            Intermediario intermediario = stazione.getIntermediario(this);
            NodoClient client = new NodoClient(intermediario, this);
            closeConnection();

            if (deep) {
                DominioFilter filter = dominiBD.newFilter();
                filter.setCodStazione(stazione.getCodStazione());
                List<Dominio> lstDomini = dominiBD.findAll(filter);

                for (Dominio dominio : lstDomini) {
                    List<String> sids = new ArrayList<String>();
                    for (Psp psp : lstPsp) {
                        if (sids.contains(psp.getCodPsp()))
                            continue;
                        sids.add(psp.getCodPsp());
                        log.debug("Acquisizione dei flussi di rendicontazione dal psp [" + psp.getCodPsp()
                                + "] per il dominio [" + dominio.getCodDominio() + "] in corso.");
                        flussiDaAcquisire.addAll(chiediListaFr(client, psp, stazione, dominio));
                    }
                }
            } else {
                log.debug("Acquisizione dei flussi di rendicontazione per la stazione ["
                        + stazione.getCodStazione() + "] in corso.");
                flussiDaAcquisire.addAll(chiediListaFr(client, null, stazione, null));
            }

            // Scarto i flussi gia acquisiti
            setupConnection(GpThreadLocal.get().getTransactionId());

            FrBD frBD = new FrBD(this);
            for (TipoIdRendicontazione idRendicontazione : flussiDaAcquisire) {
                if (frBD.exists(idRendicontazione.getIdentificativoFlusso()))
                    flussiDaAcquisire.remove(idRendicontazione);
            }
            closeConnection();

            for (TipoIdRendicontazione idRendicontazione : flussiDaAcquisire) {
                log.debug("Acquisizione flusso di rendicontazione "
                        + idRendicontazione.getIdentificativoFlusso());
                boolean hasFrAnomalia = false;
                String idTransaction2 = null;
                try {
                    idTransaction2 = GpThreadLocal.get().openTransaction();
                    GpThreadLocal.get().getContext().getRequest()
                            .addGenericProperty(new Property("codStazione", stazione.getCodStazione()));
                    GpThreadLocal.get().getContext().getRequest().addGenericProperty(
                            new Property("idFlusso", idRendicontazione.getIdentificativoFlusso()));
                    GpThreadLocal.get().setupNodoClient(stazione.getCodStazione(), null,
                            Azione.nodoChiediFlussoRendicontazione);
                    NodoChiediFlussoRendicontazione richiestaFlusso = new NodoChiediFlussoRendicontazione();
                    richiestaFlusso.setIdentificativoIntermediarioPA(
                            stazione.getIntermediario(this).getCodIntermediario());
                    richiestaFlusso.setIdentificativoStazioneIntermediarioPA(stazione.getCodStazione());
                    richiestaFlusso.setPassword(stazione.getPassword());
                    richiestaFlusso.setIdentificativoFlusso(idRendicontazione.getIdentificativoFlusso());

                    NodoChiediFlussoRendicontazioneRisposta risposta;
                    try {
                        risposta = client.nodoChiediFlussoRendicontazione(richiestaFlusso,
                                stazione.getIntermediario(this).getDenominazione());
                    } catch (Exception e) {
                        // Errore nella richiesta. Loggo e continuo con il prossimo flusso
                        response.add(idRendicontazione.getIdentificativoFlusso()
                                + "#Richiesta al nodo fallita: " + e + ".");
                        log.error("Richiesta flusso  rendicontazione ["
                                + idRendicontazione.getIdentificativoFlusso() + "] fallita: " + e);
                        GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoFail", e.getMessage());
                        errori = true;
                        continue;
                    }

                    if (risposta.getFault() != null) {
                        // Errore nella richiesta. Loggo e continuo con il prossimo flusso
                        response.add(idRendicontazione.getIdentificativoFlusso()
                                + "#Richiesta al nodo fallita: " + risposta.getFault().getFaultCode() + " "
                                + risposta.getFault().getFaultString() + ".");
                        log.error("Richiesta flusso rendicontazione ["
                                + idRendicontazione.getIdentificativoFlusso() + "] fallita: "
                                + risposta.getFault().getFaultCode() + " "
                                + risposta.getFault().getFaultString());
                        GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoKo",
                                risposta.getFault().getFaultCode(), risposta.getFault().getFaultString(),
                                risposta.getFault().getDescription());
                    } else {
                        byte[] tracciato = null;
                        try {
                            ByteArrayOutputStream output = new ByteArrayOutputStream();
                            DataHandler dh = risposta.getXmlRendicontazione();
                            dh.writeTo(output);
                            tracciato = output.toByteArray();
                        } catch (IOException e) {
                            response.add(idRendicontazione.getIdentificativoFlusso()
                                    + "#Lettura del flusso fallita: " + e + ".");
                            log.error("Errore durante la lettura del flusso di rendicontazione", e);
                            GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoFail",
                                    "Lettura del flusso fallita: " + e);
                            errori = true;
                            continue;
                        }

                        CtFlussoRiversamento flussoRendicontazione = null;
                        try {
                            flussoRendicontazione = JaxbUtils.toFR(tracciato);
                        } catch (Exception e) {
                            response.add(idRendicontazione.getIdentificativoFlusso()
                                    + "#Parsing del flusso fallita: " + e + ".");
                            log.error("Errore durante il parsing del flusso di rendicontazione", e);
                            GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoFail",
                                    "Errore durante il parsing del flusso di rendicontazione: " + e);
                            errori = true;
                            continue;
                        }

                        log.info("Ricevuto flusso rendicontazione per "
                                + flussoRendicontazione.getDatiSingoliPagamenti().size()
                                + " singoli pagamenti");

                        setupConnection(GpThreadLocal.get().getTransactionId());

                        GpThreadLocal.get().log("rendicontazioni.acquisizioneFlusso");
                        GpThreadLocal.get().getContext().getRequest().addGenericProperty(new Property("trn",
                                flussoRendicontazione.getIdentificativoUnivocoRegolamento()));

                        Fr fr = new Fr();
                        fr.setCodBicRiversamento(flussoRendicontazione.getCodiceBicBancaDiRiversamento());
                        fr.setCodFlusso(idRendicontazione.getIdentificativoFlusso());
                        fr.setIur(flussoRendicontazione.getIdentificativoUnivocoRegolamento());
                        fr.setDataAcquisizione(new Date());
                        fr.setDataFlusso(flussoRendicontazione.getDataOraFlusso());
                        fr.setDataRegolamento(flussoRendicontazione.getDataRegolamento());
                        fr.setNumeroPagamenti(flussoRendicontazione.getNumeroTotalePagamenti().longValue());
                        fr.setImportoTotalePagamenti(flussoRendicontazione.getImportoTotalePagamenti());

                        fr.setXml(tracciato);

                        String codPsp = null, codDominio = null;
                        try {
                            codPsp = idRendicontazione.getIdentificativoFlusso().substring(10,
                                    idRendicontazione.getIdentificativoFlusso().indexOf("-", 10));
                            fr.setCodPsp(codPsp);
                            log.debug("Identificativo PSP estratto dall'identificativo flusso: " + codPsp);
                            AnagraficaManager.getPsp(this, codPsp);
                            GpThreadLocal.get().getContext().getRequest()
                                    .addGenericProperty(new Property("codPsp", codPsp));
                        } catch (Exception e) {
                            GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoPspNonCensito",
                                    codPsp == null ? "null" : codPsp);
                            GpThreadLocal.get().getContext().getRequest().addGenericProperty(
                                    new Property("codPsp", codPsp == null ? "null" : codPsp));
                            fr.addAnomalia("007108", "L'identificativo PSP [" + codPsp
                                    + "] ricavato dal codice flusso non riferisce un PSP censito");
                        }

                        Dominio dominio = null;
                        try {
                            codDominio = flussoRendicontazione.getIstitutoRicevente()
                                    .getIdentificativoUnivocoRicevente().getCodiceIdentificativoUnivoco();
                            fr.setCodDominio(codDominio);
                            GpThreadLocal.get().getContext().getRequest()
                                    .addGenericProperty(new Property("codDominio", codDominio));
                            dominio = AnagraficaManager.getDominio(this, codDominio);
                        } catch (Exception e) {
                            if (codDominio == null) {
                                codDominio = "????";
                                GpThreadLocal.get().getContext().getRequest()
                                        .addGenericProperty(new Property("codDominio", "null"));
                            }
                            GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoDominioNonCensito");
                            fr.addAnomalia("007109", "L'indentificativo ricevente [" + codDominio
                                    + "] del flusso non riferisce un Dominio censito");
                        }

                        BigDecimal totaleImportiRendicontati = BigDecimal.ZERO;

                        PagamentiBD pagamentiBD = new PagamentiBD(this);
                        VersamentiBD versamentiBD = new VersamentiBD(this);
                        IuvBD iuvBD = new IuvBD(this);
                        for (CtDatiSingoliPagamenti dsp : flussoRendicontazione.getDatiSingoliPagamenti()) {

                            String iur = dsp.getIdentificativoUnivocoRiscossione();
                            String iuv = dsp.getIdentificativoUnivocoVersamento();
                            BigDecimal importoRendicontato = dsp.getSingoloImportoPagato();

                            log.debug("Rendicontato (Esito " + dsp.getCodiceEsitoSingoloPagamento()
                                    + ") per un importo di (" + dsp.getSingoloImportoPagato()
                                    + ") [CodDominio: " + codDominio + "] [Iuv: "
                                    + dsp.getIdentificativoUnivocoVersamento() + "][Iur: " + iur + "]");

                            it.govpay.bd.model.Rendicontazione rendicontazione = new it.govpay.bd.model.Rendicontazione();

                            // Gestisco un codice esito non supportato
                            try {
                                rendicontazione.setEsito(
                                        EsitoRendicontazione.toEnum(dsp.getCodiceEsitoSingoloPagamento()));
                            } catch (Exception e) {
                                GpThreadLocal.get().log("rendicontazioni.esitoSconosciuto", iuv, iur,
                                        dsp.getCodiceEsitoSingoloPagamento() == null ? "null"
                                                : dsp.getCodiceEsitoSingoloPagamento());
                                rendicontazione.addAnomalia("007110", "Codice esito ["
                                        + dsp.getCodiceEsitoSingoloPagamento() + "] sconosciuto");
                            }

                            rendicontazione.setData(dsp.getDataEsitoSingoloPagamento());
                            rendicontazione.setIur(dsp.getIdentificativoUnivocoRiscossione());
                            rendicontazione.setIuv(dsp.getIdentificativoUnivocoVersamento());
                            rendicontazione.setImporto(dsp.getSingoloImportoPagato());

                            totaleImportiRendicontati = totaleImportiRendicontati.add(importoRendicontato);

                            // Cerco il pagamento riferito
                            it.govpay.bd.model.Pagamento pagamento = null;
                            try {
                                pagamento = pagamentiBD.getPagamento(codDominio, iuv, iur);

                                // Pagamento trovato. Faccio i controlli semantici
                                rendicontazione.setIdPagamento(pagamento.getId());

                                // Verifico l'importo
                                if (rendicontazione.getEsito().equals(EsitoRendicontazione.REVOCATO)) {
                                    if (pagamento.getImportoRevocato()
                                            .compareTo(importoRendicontato.abs()) != 0) {
                                        GpThreadLocal.get().log("rendicontazioni.importoStornoErrato", iuv,
                                                iur);
                                        log.info("Revoca [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: "
                                                + iur + "] rendicontato con errore: l'importo rendicontato ["
                                                + importoRendicontato.doubleValue()
                                                + "] non corrisponde a quanto stornato ["
                                                + pagamento.getImportoRevocato().doubleValue() + "]");
                                        rendicontazione.addAnomalia("007112",
                                                "L'importo rendicontato [" + importoRendicontato.doubleValue()
                                                        + "] non corrisponde a quanto stornato ["
                                                        + pagamento.getImportoRevocato().doubleValue() + "]");
                                    }

                                    // Verifico che il pagamento non sia gia' rendicontato
                                    if (pagamento.isPagamentoRendicontato(this)) {
                                        GpThreadLocal.get().log("rendicontazioni.giaStornato", iuv, iur);
                                        log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: "
                                                + iur
                                                + "] rendicontato con errore: storno gia' rendicontato da altri flussi");
                                        rendicontazione.addAnomalia("007113",
                                                "Lo storno riferito dalla rendicontazione risulta gia' rendicontato da altri flussi");
                                    }

                                } else {
                                    if (pagamento.getImportoPagato().compareTo(importoRendicontato) != 0) {
                                        GpThreadLocal.get().log("rendicontazioni.importoErrato", iuv, iur);
                                        log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: "
                                                + iur + "] rendicontato con errore: l'importo rendicontato ["
                                                + importoRendicontato.doubleValue()
                                                + "] non corrisponde a quanto pagato ["
                                                + pagamento.getImportoPagato().doubleValue() + "]");
                                        rendicontazione.addAnomalia("007104",
                                                "L'importo rendicontato [" + importoRendicontato.doubleValue()
                                                        + "] non corrisponde a quanto pagato ["
                                                        + pagamento.getImportoPagato().doubleValue() + "]");
                                    }

                                    // Verifico che il pagamento non sia gia' rendicontato
                                    if (pagamento.isPagamentoRendicontato(this)) {
                                        GpThreadLocal.get().log("rendicontazioni.giaRendicontato", iuv, iur);
                                        log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: "
                                                + iur
                                                + "] rendicontato con errore: pagamento gia' rendicontato da altri flussi");
                                        rendicontazione.addAnomalia("007103",
                                                "Il pagamento riferito dalla rendicontazione risulta gia' rendicontato da altri flussi");
                                    }
                                }

                            } catch (NotFoundException e) {
                                // Pagamento non trovato. Devo capire se ce' un errore.

                                // Controllo che sia per uno IUV generato da noi
                                if (!isInterno(dominio, iuv)) {
                                    rendicontazione.setStato(StatoRendicontazione.ALTRO_INTERMEDIARIO);
                                    continue;
                                }

                                // Controllo se e' un pagamento senza RPT
                                if (rendicontazione.getEsito()
                                        .equals(EsitoRendicontazione.ESEGUITO_SENZA_RPT)) {

                                    //Recupero il versamento, internamente o dall'applicazione esterna
                                    it.govpay.bd.model.Versamento versamento = null;
                                    String erroreVerifica = null;
                                    String codApplicazione = null;
                                    try {
                                        try {
                                            it.govpay.model.Iuv iuvModel = iuvBD.getIuv(dominio.getId(), iuv);
                                            versamento = versamentiBD.getVersamento(
                                                    iuvModel.getIdApplicazione(),
                                                    iuvModel.getCodVersamentoEnte());
                                        } catch (NotFoundException nfe) {
                                            codApplicazione = it.govpay.bd.GovpayConfig.getInstance()
                                                    .getDefaultCustomIuvGenerator().getCodApplicazione(dominio,
                                                            iuv, dominio.getApplicazioneDefault(this));
                                            if (codApplicazione == null) {
                                                response.add(idRendicontazione.getIdentificativoFlusso()
                                                        + "#Acquisizione flusso fallita. Impossibile individuare l'applicativo gestore del versamento per acquisirne i dati [Dominio:"
                                                        + codDominio + " Iuv:" + iuv + "].");
                                                log.error(
                                                        "Errore durante il processamento del flusso di Rendicontazione [Flusso:"
                                                                + idRendicontazione.getIdentificativoFlusso()
                                                                + "]: Impossibile individuare l'applicativo gestore del versamento per acquisirne i dati [Dominio:"
                                                                + codDominio + " Iuv:" + iuv
                                                                + "]. Flusso non acquisito.");
                                                GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoKo",
                                                        idRendicontazione.getIdentificativoFlusso(),
                                                        "Impossibile individuare l'applicativo gestore del versamento per acquisirne i dati [Dominio:"
                                                                + codDominio + " Iuv:" + iuv
                                                                + "].  Flusso non acquisito.");
                                                throw new GovPayException(EsitoOperazione.INTERNAL,
                                                        "Impossibile individuare l'applicativo gestore del versamento per acquisirne i dati [Dominio:"
                                                                + codDominio + " Iuv:" + iuv
                                                                + "].  Flusso non acquisito.");
                                            }
                                            versamento = VersamentoUtils.acquisisciVersamento(
                                                    AnagraficaManager.getApplicazione(this, codApplicazione),
                                                    null, null, null, codDominio, iuv, this);
                                        }
                                    } catch (VersamentoScadutoException e1) {
                                        erroreVerifica = "Versamento non acquisito dall'applicazione gestrice perche' SCADUTO.";
                                    } catch (VersamentoAnnullatoException e1) {
                                        erroreVerifica = "Versamento non acquisito dall'applicazione gestrice perche' ANNULLATO.";
                                    } catch (VersamentoDuplicatoException e1) {
                                        erroreVerifica = "Versamento non acquisito dall'applicazione gestrice perche' DUPLICATO.";
                                    } catch (VersamentoSconosciutoException e1) {
                                        erroreVerifica = "Versamento non acquisito dall'applicazione gestrice perche' SCONOSCIUTO.";
                                    } catch (ClientException ce) {
                                        response.add(idRendicontazione.getIdentificativoFlusso()
                                                + "#Acquisizione flusso fallita. Riscontrato errore nell'acquisizione del versamento dall'applicazione gestrice [Transazione: "
                                                + idTransaction2 + "].");
                                        log.error(
                                                "Errore durante il processamento del flusso di Rendicontazione [Flusso:"
                                                        + idRendicontazione.getIdentificativoFlusso()
                                                        + "]: impossibile acquisire i dati del versamento [Dominio:"
                                                        + codDominio + " Iuv:" + iuv
                                                        + "]. Flusso non acquisito.");
                                        GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoKo",
                                                idRendicontazione.getIdentificativoFlusso(),
                                                "Impossibile acquisire i dati di un versamento dall'applicativo gestore [Applicazione:"
                                                        + codApplicazione + " Dominio:" + codDominio + " Iuv:"
                                                        + iuv + "].  Flusso non acquisito.");
                                        throw new GovPayException(ce);
                                    }

                                    if (versamento == null) {
                                        // non ho trovato il versamento 
                                        GpThreadLocal.get().log("rendicontazioni.senzaRptNoVersamento", iuv,
                                                iur);
                                        log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: "
                                                + iur
                                                + "] rendicontato con errore: Pagamento senza RPT di versamento sconosciuto.");
                                        rendicontazione.addAnomalia("007111",
                                                "Il versamento risulta sconosciuto: " + erroreVerifica);
                                        continue;
                                    } else {

                                        if (versamento.getSingoliVersamenti(this).size() != 1) {
                                            // Un pagamento senza rpt DEVE riferire un pagamento tipo 3 con un solo singolo versamento
                                            GpThreadLocal.get().log(
                                                    "rendicontazioni.senzaRptVersamentoMalformato", iuv, iur);
                                            log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv
                                                    + " Iur: " + iur
                                                    + "] rendicontato con errore: Pagamento senza RPT di versamento sconosciuto.");
                                            rendicontazione.addAnomalia("007114",
                                                    "Il versamento presenta piu' singoli versamenti");
                                            continue;
                                        }

                                        // Trovato versamento. Creo il pagamento senza rpt 
                                        pagamento = new it.govpay.bd.model.Pagamento();
                                        pagamento.setCodDominio(codDominio);
                                        pagamento.setDataAcquisizione(rendicontazione.getData());
                                        pagamento.setDataPagamento(rendicontazione.getData());
                                        pagamento.setImportoPagato(rendicontazione.getImporto());
                                        pagamento.setIur(rendicontazione.getIur());
                                        pagamento.setIuv(rendicontazione.getIuv());
                                        pagamento.setCodDominio(fr.getCodDominio());
                                        pagamento.setSingoloVersamento(
                                                versamento.getSingoliVersamenti(this).get(0));

                                        rendicontazione.setPagamento(pagamento);
                                        rendicontazione.setPagamentoDaCreare(true);
                                        continue;
                                    }
                                }

                                GpThreadLocal.get().log("rendicontazioni.noPagamento", iuv, iur);
                                log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: " + iur
                                        + "] rendicontato con errore: il pagamento non risulta presente in base dati.");
                                rendicontazione.addAnomalia("007101",
                                        "Il pagamento riferito dalla rendicontazione non risulta presente in base dati.");
                                continue;
                            } catch (MultipleResultException e) {
                                // Individuati piu' pagamenti riferiti dalla rendicontazione
                                GpThreadLocal.get().log("rendicontazioni.poliPagamento", iuv, iur);
                                log.info("Pagamento rendicontato duplicato: [CodDominio: " + codDominio
                                        + "] [Iuv: " + iuv + "] [Iur: " + iur + "]");
                                rendicontazione.addAnomalia("007102",
                                        "La rendicontazione riferisce piu di un pagamento gestito.");
                            } finally {
                                if (!StatoRendicontazione.ALTRO_INTERMEDIARIO.equals(rendicontazione.getStato())
                                        && rendicontazione.getAnomalie().isEmpty()) {
                                    rendicontazione.setStato(StatoRendicontazione.OK);
                                } else if (!StatoRendicontazione.ALTRO_INTERMEDIARIO
                                        .equals(rendicontazione.getStato())
                                        && !rendicontazione.getAnomalie().isEmpty()) {
                                    rendicontazione.setStato(StatoRendicontazione.ANOMALA);
                                    hasFrAnomalia = true;
                                }
                                fr.addRendicontazione(rendicontazione);
                            }
                        }

                        // Singole rendicontazioni elaborate.
                        // Controlli di quadratura generali

                        if (totaleImportiRendicontati
                                .compareTo(flussoRendicontazione.getImportoTotalePagamenti()) != 0) {
                            GpThreadLocal.get().log("rendicontazioni.importoTotaleErrato");
                            log.info("La somma degli importi rendicontati [" + totaleImportiRendicontati
                                    + "] non corrisponde al totale indicato nella testata del flusso ["
                                    + flussoRendicontazione.getImportoTotalePagamenti() + "]");
                            fr.addAnomalia("007106",
                                    "La somma degli importi rendicontati [" + totaleImportiRendicontati
                                            + "] non corrisponde al totale indicato nella testata del flusso ["
                                            + flussoRendicontazione.getImportoTotalePagamenti() + "]");
                        }

                        try {
                            if (flussoRendicontazione.getDatiSingoliPagamenti().size() != flussoRendicontazione
                                    .getNumeroTotalePagamenti().longValueExact()) {
                                GpThreadLocal.get().log("rendicontazioni.numeroRendicontazioniErrato");
                                log.info("Il numero di pagamenti rendicontati ["
                                        + flussoRendicontazione.getDatiSingoliPagamenti().size()
                                        + "] non corrisponde al totale indicato nella testata del flusso ["
                                        + flussoRendicontazione.getNumeroTotalePagamenti().longValueExact()
                                        + "]");
                                fr.addAnomalia("007107", "Il numero di pagamenti rendicontati ["
                                        + flussoRendicontazione.getDatiSingoliPagamenti().size()
                                        + "] non corrisponde al totale indicato nella testata del flusso ["
                                        + flussoRendicontazione.getNumeroTotalePagamenti().longValueExact()
                                        + "]");
                            }
                        } catch (Exception e) {
                            GpThreadLocal.get().log("rendicontazioni.numeroRendicontazioniErrato");
                            log.info("Il numero di pagamenti rendicontati ["
                                    + flussoRendicontazione.getDatiSingoliPagamenti().size()
                                    + "] non corrisponde al totale indicato nella testata del flusso [????]");
                            fr.addAnomalia("007107", "Il numero di pagamenti rendicontati ["
                                    + flussoRendicontazione.getDatiSingoliPagamenti().size()
                                    + "] non corrisponde al totale indicato nella testata del flusso [????]");
                        }

                        // Decido lo stato del FR
                        if (fr.getAnomalie().isEmpty()) {
                            fr.setStato(StatoFr.ACCETTATA);
                        } else {
                            fr.setStato(StatoFr.ANOMALA);
                            hasFrAnomalia = true;
                        }

                        // Procedo al salvataggio
                        RendicontazioniBD rendicontazioniBD = new RendicontazioniBD(this);

                        // Tutte le operazioni di salvataggio devono essere in transazione.
                        setAutoCommit(false);
                        frBD.insertFr(fr);
                        for (Rendicontazione r : fr.getRendicontazioni(this)) {
                            r.setIdFr(fr.getId());

                            // controllo se c'e' un pagamento da creare relativo alla rendicontazione
                            // deve anche essere creato il pagamento.
                            if (r.isPagamentoDaCreare()) {
                                pagamentiBD.insertPagamento(r.getPagamento(this));
                                r.setIdPagamento(r.getPagamento(this).getId());
                            }
                            rendicontazioniBD.insert(r);
                        }
                        this.commit();
                        if (!hasFrAnomalia) {
                            log.info("Flusso di rendicontazione acquisito senza anomalie.");
                            GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoOk");
                        } else {
                            log.info("Flusso di rendicontazione acquisito con anomalie.");
                            GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoOkAnomalia");
                        }
                    }
                } catch (GovPayException ce) {
                    log.error("Flusso di rendicontazione non acquisito", ce);
                    errori = true;
                } finally {
                    GpThreadLocal.get().closeTransaction(idTransaction2);
                }
            }
        }
    } catch (Exception e) {
        GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussiFail", e.getMessage());
        throw new GovPayException(e);
    } finally {
        try {
            if (isClosed())
                setupConnection(GpThreadLocal.get().getTransactionId());
        } catch (Exception e) {
            log.error("Errore nel ripristino della connessione", e);
        }
    }

    GpThreadLocal.get().log("rendicontazioni.acquisizioneOk");

    String rspTxt = "";
    if (errori)
        rspTxt = "WARNING#Processo di acquisizione completato parzialmente: uno o piu' flussi non sono stati acquisiti.|";
    else
        rspTxt = "OK#Processo di acquisizione completato con successo|";

    if (response.isEmpty()) {
        return rspTxt + "Processo di acquisizione completato con successo. #Nessun flusso acquisito.";
    } else {
        return rspTxt + StringUtils.join(response, "|");
    }
}