Example usage for java.math BigDecimal ROUND_HALF_EVEN

List of usage examples for java.math BigDecimal ROUND_HALF_EVEN

Introduction

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

Prototype

int ROUND_HALF_EVEN

To view the source code for java.math BigDecimal ROUND_HALF_EVEN.

Click Source Link

Document

Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor.

Usage

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

public void pruefePositionenMitSollsatzgroesseUnterschreitung(Integer losIId, BigDecimal bdZuErledigendeMenge,
        TheClientDto theClientDto) throws EJBExceptionLP {

    // Basis fuer die Sollsatzgroesse sind die bisher erledigte Menge und
    // die zu erledigende
    BigDecimal bdKuenftigErledigt = getErledigteMenge(losIId, theClientDto).add(bdZuErledigendeMenge);
    LosDto losDto = losFindByPrimaryKey(losIId);
    // es sollte von jeder Position ein prozentueller Anteil ausgegeben sein
    // der prozentsatz wird durch die kuenftig erl. Menge im Verhaeltnis zur
    // Losgroesse bestimmt
    BigDecimal bdFaktor = bdKuenftigErledigt.divide(losDto.getNLosgroesse(), 10, BigDecimal.ROUND_HALF_EVEN);
    // alle Positionen holen
    LossollmaterialDto[] sollmat = lossollmaterialFindByLosIId(losIId);
    LinkedList<LossollmaterialDto> listUnterschritten = new LinkedList<LossollmaterialDto>();
    // fuer jede einzelne soll- und istmenge vergleichen
    for (int i = 0; i < sollmat.length; i++) {
        // bisher ausgegebene Menge
        BigDecimal bdAusgegeben = getAusgegebeneMenge(sollmat[i].getIId(), null, theClientDto);
        // Die soll-ausgabe menge berechnen
        BigDecimal bdSollAusgabeMenge = Helper.rundeKaufmaennisch(sollmat[i].getNMenge().multiply(bdFaktor), 3);
        if (bdSollAusgabeMenge.compareTo(bdAusgegeben) > 0) {
            // Wenn die soll-ausgabe-menge noch nicht erreicht ist, dann zur
            // Liste hinzufuegen
            listUnterschritten.add(sollmat[i]);
        }/*from   w  w w  . j  ava2 s  .c o m*/
    }
    // und jetzt noch ein Array aus der Liste bauen
    LossollmaterialDto[] sollmatUnterschritten = new LossollmaterialDto[listUnterschritten.size()];
    int i = 0;
    for (Iterator<?> iter = listUnterschritten.iterator(); iter.hasNext(); i++) {
        sollmatUnterschritten[i] = (LossollmaterialDto) iter.next();
    }

    if (sollmatUnterschritten.length > 0) {

        StringBuffer sText = new StringBuffer(getTextRespectUISpr("fert.sollsatzgroesseunterschritten",
                theClientDto.getMandant(), theClientDto.getLocUi()));

        String stkl = getTextRespectUISpr("lp.stueckliste", theClientDto.getMandant(), theClientDto.getLocUi());

        for (int j = 0; j < sollmatUnterschritten.length; j++) {
            sText.append("\n");

            if (losDto.getStuecklisteIId() != null) {
                sText.append(stkl);
                StuecklisteDto stklDto = getStuecklisteFac()
                        .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                sText.append(" " + stklDto.getArtikelDto().getCNr() + ": ");
            }

            ArtikelDto artikelDto = getArtikelFac()
                    .artikelFindByPrimaryKey(sollmatUnterschritten[j].getArtikelIId(), theClientDto);
            sText.append(artikelDto.formatArtikelbezeichnung());

        }
        ArrayList ai = new ArrayList();
        ai.add(sText);
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_SOLLSATZGROESSE_UNTERSCHRITTEN, ai,
                new Exception("losIId == null"));

    }
}

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;/*w w  w  . ja  va 2  s  . 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:org.openbravo.test.costing.TestCosting.java

@SuppressWarnings("unchecked")
private void assertDocumentPost(BaseOBObject document, String productId,
        List<DocumentPostAssert> documentPostAssertList) {
    try {/* ww w . jav  a 2  s . c o  m*/

        BaseOBObject doc = OBDal.getInstance().get(document.getClass(), document.getId());
        if (!doc.get("posted").equals("Y")) {
            OBDal.getInstance().refresh(doc);
            Thread.sleep(5000);
            for (int i = 0; i < 10 && !doc.get("posted").equals("Y"); i++) {
                postDocument(doc);
                doc = OBDal.getInstance().get(doc.getClass(), doc.getId());
                OBDal.getInstance().refresh(doc);
                Thread.sleep(1000);
            }
        }

        assertEquals(doc.get("posted"), "Y");

        final OBCriteria<Table> criteria1 = OBDal.getInstance().createCriteria(Table.class);
        criteria1.add(Restrictions.eq(Table.PROPERTY_NAME, doc.getEntityName()));
        Table table = criteria1.list().get(0);

        final OBCriteria<AccountingFact> criteria2 = OBDal.getInstance().createCriteria(AccountingFact.class);
        criteria2.add(Restrictions.eq(AccountingFact.PROPERTY_RECORDID, doc.getId()));
        criteria2.add(Restrictions.eq(AccountingFact.PROPERTY_TABLE, table));
        criteria2.addOrderBy(AccountingFact.PROPERTY_SEQUENCENUMBER, true);
        String groupId = criteria2.list().get(0).getGroupID();

        assertEquals(criteria2.list().size(), documentPostAssertList.size());

        int i = 0;
        for (AccountingFact accountingFact : criteria2.list()) {

            String lineListProperty = Character.toLowerCase(doc.getEntityName().charAt(0))
                    + doc.getEntityName().substring(1) + "LineList";

            BaseOBObject line = null;
            if (doc.getEntityName().equals(ReceiptInvoiceMatch.ENTITY_NAME)) {
                if (i % 2 == 0) {
                    line = ((ReceiptInvoiceMatch) doc).getGoodsShipmentLine();
                } else {
                    line = ((ReceiptInvoiceMatch) doc).getInvoiceLine();
                }
            } else if (doc.getEntityName().equals(ProductionTransaction.ENTITY_NAME)) {
                StringBuffer where = new StringBuffer();
                where.append(" as t1 ");
                where.append("\n left join t1." + ProductionLine.PROPERTY_PRODUCTIONPLAN + " t2");
                where.append("\n where t2." + ProductionPlan.PROPERTY_PRODUCTION + " = :productionTransaction");
                where.append("\n order by t1." + ProductionLine.PROPERTY_LINENO);
                OBQuery<ProductionLine> hql = OBDal.getInstance().createQuery(ProductionLine.class,
                        where.toString());
                hql.setNamedParameter("productionTransaction",
                        OBDal.getInstance().get(ProductionTransaction.class, doc.getId()));
                line = hql.list().get(i / 2);
            } else if (doc.getEntityName().equals(CostAdjustment.ENTITY_NAME)) {
                final OBCriteria<CostAdjustmentLine> criteria3 = OBDal.getInstance()
                        .createCriteria(CostAdjustmentLine.class);
                criteria3.add(Restrictions.eq(CostAdjustmentLine.PROPERTY_COSTADJUSTMENT, doc));
                criteria3.add(Restrictions.eq(CostAdjustmentLine.PROPERTY_NEEDSPOSTING, true));
                criteria3.addOrderBy(CostAdjustmentLine.PROPERTY_LINENO, true);
                line = criteria3.list().get(i / 2);
            } else if (productId != null && (productId.equals(LANDEDCOSTTYPE1_ID)
                    || productId.equals(LANDEDCOSTTYPE2_ID) || productId.equals(LANDEDCOSTTYPE3_ID))) {
                line = ((List<BaseOBObject>) OBDal.getInstance().get(doc.getClass(), doc.getId())
                        .get(lineListProperty)).get(0);
            } else if (doc.getEntityName().equals(LandedCost.ENTITY_NAME)) {
                StringBuffer where = new StringBuffer();
                where.append(" as t1 ");
                where.append("\n join t1." + LCReceiptLineAmt.PROPERTY_LANDEDCOSTRECEIPT + " t2");
                where.append("\n join t1." + LCReceiptLineAmt.PROPERTY_LANDEDCOSTCOST + " t3");
                where.append("\n join t1." + LCReceiptLineAmt.PROPERTY_GOODSSHIPMENTLINE + " t4");
                where.append("\n left join t4." + ShipmentInOutLine.PROPERTY_SHIPMENTRECEIPT + " t5");
                where.append("\n where t2." + LCReceipt.PROPERTY_LANDEDCOST + " = :landedCost");
                where.append("\n order by t3." + LandedCostCost.PROPERTY_LINENO);
                where.append("\n , t5." + ShipmentInOut.PROPERTY_DOCUMENTNO);
                where.append("\n , t4." + ShipmentInOutLine.PROPERTY_LINENO);
                OBQuery<LCReceiptLineAmt> hql = OBDal.getInstance().createQuery(LCReceiptLineAmt.class,
                        where.toString());
                LandedCost landedCost = OBDal.getInstance().get(LandedCost.class, doc.getId());
                hql.setNamedParameter("landedCost", landedCost);
                line = hql.list().get(i / 2);
            } else if (doc.getEntityName().equals(LandedCostCost.ENTITY_NAME)) {
                if (((LandedCostCost) doc).getLandedCostMatchedList().size() == 1) {
                    line = ((LandedCostCost) doc).getLandedCostMatchedList().get(0);
                } else if (!((LandedCostCost) doc).getAmount().setScale(2, BigDecimal.ROUND_HALF_UP).equals(
                        ((LandedCostCost) doc).getMatchingAmount().setScale(2, BigDecimal.ROUND_HALF_UP))
                        && ((LandedCostCost) doc).isMatchingAdjusted()) {
                    if (i == 0) {
                        line = ((LandedCostCost) doc).getLandedCostMatchedList().get(0);
                    } else {
                        line = ((LandedCostCost) doc).getLandedCostMatchedList().get(1);
                    }
                } else {
                    line = ((LandedCostCost) doc).getLandedCostMatchedList().get(i / 2);
                }
            } else if (doc.getEntityName().equals(Invoice.ENTITY_NAME) && i > 0) {
                line = ((List<BaseOBObject>) OBDal.getInstance().get(doc.getClass(), doc.getId())
                        .get(lineListProperty)).get(i - 1);
            } else {
                line = ((List<BaseOBObject>) OBDal.getInstance().get(doc.getClass(), doc.getId())
                        .get(lineListProperty)).get(i / 2);
            }
            DocumentPostAssert documentPostAssert = documentPostAssertList.get(i);
            assertGeneralData(accountingFact);

            /* Accounting window fields assert */

            assertEquals(accountingFact.getTable(), table);
            assertEquals(accountingFact.getRecordID(), doc.getId());
            assertEquals(accountingFact.getAccountingSchema().getName(), "Main US/A/Euro");

            assertEquals(accountingFact.getAccount().getSearchKey(), documentPostAssert.getAccount());
            assertEquals(accountingFact.getQuantity(), documentPostAssert.getQuantity());

            BigDecimal rate;
            if ((productId != null && productId.equals(LANDEDCOSTTYPE3_ID))
                    || (doc.getEntityName().equals(Invoice.ENTITY_NAME)
                            && ((Invoice) doc).getCurrency().getId().equals(CURRENCY2_ID))
                    || (doc.getEntityName().equals(LandedCost.ENTITY_NAME)
                            && ((LCReceiptLineAmt) line).getLandedCostCost().getLandedCostType()
                                    .equals(OBDal.getInstance().get(Product.class, LANDEDCOSTTYPE3_ID)
                                            .getLandedCostTypeList().get(0)))
                    || (doc.getEntityName().equals(LandedCostCost.ENTITY_NAME)
                            && ((LCMatched) line).getInvoiceLine().getProduct() != null
                            && ((LCMatched) line).getInvoiceLine().getProduct().getId()
                                    .equals(LANDEDCOSTTYPE3_ID))
                    || (!doc.getEntityName().equals(LandedCostCost.ENTITY_NAME)
                            && !doc.getEntityName().equals(LandedCost.ENTITY_NAME)
                            && documentPostAssert.getProductId() != null
                            && !OBDal.getInstance().get(Product.class, documentPostAssert.getProductId())
                                    .getPricingProductPriceList().isEmpty()
                            && OBDal.getInstance().get(Product.class, documentPostAssert.getProductId())
                                    .getPricingProductPriceList().get(0).getPriceListVersion()
                                    .equals(OBDal.getInstance().get(Product.class, LANDEDCOSTTYPE3_ID)
                                            .getPricingProductPriceList().get(0).getPriceListVersion()))) {

                if (doc.getEntityName().equals(Invoice.ENTITY_NAME)
                        && ((Invoice) doc).getCurrencyConversionRateDocList().size() != 0) {
                    rate = ((Invoice) doc).getCurrencyConversionRateDocList().get(0).getRate();
                } else {
                    Calendar calendar = Calendar.getInstance();
                    calendar.set(9999, 0, 1);
                    OBCriteria<ConversionRate> criteria = OBDal.getInstance()
                            .createCriteria(ConversionRate.class);
                    criteria.add(Restrictions.eq(ConversionRate.PROPERTY_CLIENT,
                            OBDal.getInstance().get(Client.class, CLIENT_ID)));
                    criteria.add(Restrictions.eq(ConversionRate.PROPERTY_CURRENCY,
                            OBDal.getInstance().get(Currency.class, CURRENCY2_ID)));
                    criteria.add(Restrictions.eq(ConversionRate.PROPERTY_TOCURRENCY,
                            OBDal.getInstance().get(Currency.class, CURRENCY1_ID)));
                    criteria.add(Restrictions.ge(ConversionRate.PROPERTY_VALIDTODATE, calendar.getTime()));
                    rate = criteria.list().get(0).getMultipleRateBy();
                }
            }

            else {
                rate = BigDecimal.ONE;
            }

            assertEquals(accountingFact.getDebit().setScale(2, BigDecimal.ROUND_HALF_UP),
                    documentPostAssert.getDebit().multiply(rate).setScale(2,
                            doc.getEntityName().equals(LandedCost.ENTITY_NAME) ? BigDecimal.ROUND_HALF_EVEN
                                    : BigDecimal.ROUND_HALF_UP));
            assertEquals(accountingFact.getCredit().setScale(2, BigDecimal.ROUND_HALF_UP),
                    documentPostAssert.getCredit().multiply(rate).setScale(2,
                            doc.getEntityName().equals(LandedCost.ENTITY_NAME) ? BigDecimal.ROUND_HALF_EVEN
                                    : BigDecimal.ROUND_HALF_UP));

            if ((productId != null && productId.equals(LANDEDCOSTTYPE3_ID))
                    || (doc.getEntityName().equals(Invoice.ENTITY_NAME)
                            && ((Invoice) doc).getCurrency().getId().equals(CURRENCY2_ID))
                    || (doc.getEntityName().equals(LandedCost.ENTITY_NAME)
                            && ((LCReceiptLineAmt) line).getLandedCostCost().getLandedCostType()
                                    .equals(OBDal.getInstance().get(Product.class, LANDEDCOSTTYPE3_ID)
                                            .getLandedCostTypeList().get(0)))
                    || (doc.getEntityName().equals(LandedCostCost.ENTITY_NAME)
                            && ((LCMatched) line).getInvoiceLine().getProduct() != null && ((LCMatched) line)
                                    .getInvoiceLine().getProduct().getId().equals(LANDEDCOSTTYPE3_ID))) {
                rate = BigDecimal.ONE;
            }

            else if ((doc.getEntityName().equals(ShipmentInOut.ENTITY_NAME)
                    || doc.getEntityName().equals(CostAdjustment.ENTITY_NAME))
                    && OBDal.getInstance().get(Organization.class, ORGANIZATION_ID).getCurrency() != null
                    && OBDal.getInstance().get(Organization.class, ORGANIZATION_ID).getCurrency().getId()
                            .equals(CURRENCY2_ID)) {
                Calendar calendar = Calendar.getInstance();
                calendar.set(9999, 0, 1);
                OBCriteria<ConversionRate> criteria = OBDal.getInstance().createCriteria(ConversionRate.class);
                criteria.add(Restrictions.eq(ConversionRate.PROPERTY_CLIENT,
                        OBDal.getInstance().get(Client.class, CLIENT_ID)));
                criteria.add(Restrictions.eq(ConversionRate.PROPERTY_CURRENCY,
                        OBDal.getInstance().get(Currency.class, CURRENCY1_ID)));
                criteria.add(Restrictions.eq(ConversionRate.PROPERTY_TOCURRENCY,
                        OBDal.getInstance().get(Currency.class, CURRENCY2_ID)));
                criteria.add(Restrictions.ge(ConversionRate.PROPERTY_VALIDTODATE, calendar.getTime()));
                rate = criteria.list().get(0).getMultipleRateBy();
            }

            assertEquals(accountingFact.getForeignCurrencyDebit().setScale(2, BigDecimal.ROUND_HALF_UP),
                    documentPostAssert.getDebit().multiply(rate).setScale(2,
                            doc.getEntityName().equals(LandedCost.ENTITY_NAME) ? BigDecimal.ROUND_HALF_EVEN
                                    : BigDecimal.ROUND_HALF_UP));
            assertEquals(accountingFact.getForeignCurrencyCredit().setScale(2, BigDecimal.ROUND_HALF_UP),
                    documentPostAssert.getCredit().multiply(rate).setScale(2,
                            doc.getEntityName().equals(LandedCost.ENTITY_NAME) ? BigDecimal.ROUND_HALF_EVEN
                                    : BigDecimal.ROUND_HALF_UP));

            Calendar calendar1 = Calendar.getInstance();
            calendar1.setTime(accountingFact.getAccountingDate());
            calendar1.set(Calendar.DAY_OF_MONTH, calendar1.getActualMinimum(Calendar.DAY_OF_MONTH));
            Calendar calendar2 = Calendar.getInstance();
            calendar2.setTime(accountingFact.getAccountingDate());
            calendar2.set(Calendar.DAY_OF_MONTH, calendar2.getActualMaximum(Calendar.DAY_OF_MONTH));
            final OBCriteria<Period> criteria3 = OBDal.getInstance().createCriteria(Period.class);
            criteria3.add(Restrictions.eq(Period.PROPERTY_STARTINGDATE, calendar1.getTime()));
            criteria3.add(Restrictions.eq(Period.PROPERTY_ENDINGDATE, calendar2.getTime()));
            assertEquals(accountingFact.getPeriod(), criteria3.list().get(0));

            if (doc.getEntityName().equals(CostAdjustment.ENTITY_NAME)) {
                assertEquals(formatDate(accountingFact.getTransactionDate()), formatDate(today));
                assertEquals(formatDate(accountingFact.getAccountingDate()),
                        formatDate(((CostAdjustmentLine) line).getAccountingDate()));
                if (((CostAdjustmentLine) line).getInventoryTransaction().getGoodsShipmentLine() != null) {
                    assertEquals(accountingFact.getBusinessPartner(),
                            ((CostAdjustmentLine) line).getInventoryTransaction().getGoodsShipmentLine()
                                    .getShipmentReceipt().getBusinessPartner());
                } else {
                    assertEquals(accountingFact.getBusinessPartner(), null);
                }
            } else if (doc.getEntityName().equals(InventoryCount.ENTITY_NAME)) {
                assertEquals(formatDate(accountingFact.getTransactionDate()),
                        formatDate(((InventoryCount) doc).getMovementDate()));
                assertEquals(formatDate(accountingFact.getAccountingDate()),
                        formatDate(((InventoryCount) doc).getMovementDate()));
                assertEquals(accountingFact.getBusinessPartner(), null);
            } else if (doc.getEntityName().equals(ReceiptInvoiceMatch.ENTITY_NAME)) {
                assertEquals(formatDate(accountingFact.getTransactionDate()),
                        formatDate(((ReceiptInvoiceMatch) doc).getTransactionDate()));
                assertEquals(formatDate(accountingFact.getAccountingDate()),
                        formatDate(((ReceiptInvoiceMatch) doc).getTransactionDate()));
                assertEquals(accountingFact.getBusinessPartner(),
                        ((ReceiptInvoiceMatch) doc).getInvoiceLine().getBusinessPartner());
            } else if (doc.getEntityName().equals(InternalMovement.ENTITY_NAME)) {
                assertEquals(formatDate(accountingFact.getTransactionDate()),
                        formatDate(((InternalMovement) doc).getMovementDate()));
                assertEquals(formatDate(accountingFact.getAccountingDate()),
                        formatDate(((InternalMovement) doc).getMovementDate()));
                assertEquals(accountingFact.getBusinessPartner(), null);
            } else if (doc.getEntityName().equals(InternalConsumption.ENTITY_NAME)) {
                assertEquals(formatDate(accountingFact.getTransactionDate()),
                        formatDate(((InternalConsumption) doc).getMovementDate()));
                assertEquals(formatDate(accountingFact.getAccountingDate()),
                        formatDate(((InternalConsumption) doc).getMovementDate()));
                assertEquals(accountingFact.getBusinessPartner(), null);
            } else if (doc.getEntityName().equals(ProductionTransaction.ENTITY_NAME)) {
                assertEquals(formatDate(accountingFact.getTransactionDate()),
                        formatDate(((ProductionTransaction) doc).getMovementDate()));
                assertEquals(formatDate(accountingFact.getAccountingDate()),
                        formatDate(((ProductionTransaction) doc).getMovementDate()));
                assertEquals(accountingFact.getBusinessPartner(), null);
            } else if (doc.getEntityName().equals(LandedCost.ENTITY_NAME)) {
                assertEquals(formatDate(accountingFact.getTransactionDate()),
                        formatDate(((LandedCost) doc).getReferenceDate()));
                assertEquals(formatDate(accountingFact.getAccountingDate()),
                        formatDate(((LandedCost) doc).getReferenceDate()));
                if (i % 2 == 0) {
                    assertEquals(accountingFact.getBusinessPartner(),
                            OBDal.getInstance()
                                    .get(ShipmentInOutLine.class,
                                            ((LCReceiptLineAmt) line).getGoodsShipmentLine().getId())
                                    .getBusinessPartner());
                } else {
                    assertEquals(accountingFact.getBusinessPartner(), null);
                }
            } else if (doc.getEntityName().equals(LandedCostCost.ENTITY_NAME)) {
                assertEquals(formatDate(accountingFact.getTransactionDate()),
                        formatDate(((LandedCostCost) doc).getAccountingDate()));
                assertEquals(formatDate(accountingFact.getAccountingDate()),
                        formatDate(((LandedCostCost) doc).getAccountingDate()));
                if (i == 0 || (documentPostAssert.getProductId() != null
                        && OBDal.getInstance()
                                .get(InvoiceLine.class,
                                        ((LandedCostCost) doc).getLandedCostMatchedList().get(0)
                                                .getInvoiceLine().getId())
                                .getProduct() != null
                        && documentPostAssert.getProductId()
                                .equals(OBDal.getInstance()
                                        .get(InvoiceLine.class, ((LandedCostCost) doc)
                                                .getLandedCostMatchedList().get(0).getInvoiceLine().getId())
                                        .getProduct().getId()))) {
                    assertEquals(accountingFact.getBusinessPartner(),
                            OBDal.getInstance().get(InvoiceLine.class, ((LandedCostCost) doc)
                                    .getLandedCostMatchedList().get(0).getInvoiceLine().getId())
                                    .getBusinessPartner());
                } else {
                    assertEquals(accountingFact.getBusinessPartner(), null);
                }
            } else {
                assertEquals(formatDate(accountingFact.getTransactionDate()),
                        formatDate((Date) doc.get("accountingDate")));
                assertEquals(formatDate(accountingFact.getAccountingDate()),
                        formatDate((Date) doc.get("accountingDate")));
                assertEquals(accountingFact.getBusinessPartner(), doc.get("businessPartner"));
            }

            if ((productId != null && productId.equals(LANDEDCOSTTYPE3_ID))
                    || (doc.getEntityName().equals(Invoice.ENTITY_NAME)
                            && ((Invoice) doc).getCurrency().getId().equals(CURRENCY2_ID))
                    || (doc.getEntityName().equals(LandedCost.ENTITY_NAME)
                            && ((LCReceiptLineAmt) line).getLandedCostCost().getLandedCostType()
                                    .equals(OBDal.getInstance().get(Product.class, LANDEDCOSTTYPE3_ID)
                                            .getLandedCostTypeList().get(0)))
                    || (doc.getEntityName().equals(LandedCostCost.ENTITY_NAME)
                            && ((LCMatched) line).getInvoiceLine().getProduct() != null
                            && ((LCMatched) line).getInvoiceLine().getProduct().getId()
                                    .equals(LANDEDCOSTTYPE3_ID))
                    || (!doc.getEntityName().equals(Invoice.ENTITY_NAME)
                            && !doc.getEntityName().equals(ReceiptInvoiceMatch.ENTITY_NAME)
                            && OBDal.getInstance().get(Organization.class, ORGANIZATION_ID)
                                    .getCurrency() != null
                            && OBDal.getInstance().get(Organization.class, ORGANIZATION_ID).getCurrency()
                                    .getId().equals(CURRENCY2_ID))) {
                assertEquals(accountingFact.getCurrency(),
                        OBDal.getInstance().get(Currency.class, CURRENCY2_ID));
            } else {
                assertEquals(accountingFact.getCurrency(),
                        OBDal.getInstance().get(Currency.class, CURRENCY1_ID));
            }

            if (productId != null && productId.equals(LANDEDCOSTTYPE2_ID)) {
                if (i == 0) {
                    assertEquals(accountingFact.getProduct(), null);
                    assertEquals(accountingFact.getUOM(), null);
                    assertEquals(accountingFact.getTax(), null);
                } else if (i == 1) {
                    assertEquals(accountingFact.getProduct(), null);
                    assertEquals(accountingFact.getUOM(), null);
                    assertEquals(accountingFact.getLineID(), null);
                    assertEquals(accountingFact.getRecordID2(), null);

                    OBCriteria<TaxRate> criteria = OBDal.getInstance().createCriteria(TaxRate.class);
                    criteria.add(Restrictions.eq(TaxRate.PROPERTY_TAXCATEGORY,
                            OBDal.getInstance().get(Product.class, productId).getTaxCategory()));
                    criteria.add(Restrictions.eq(TaxRate.PROPERTY_ORGANIZATION,
                            OBDal.getInstance().get(Organization.class, ORGANIZATION_ID)));
                    assertEquals(accountingFact.getTax(), criteria.list().get(0));
                } else {
                    assertEquals(accountingFact.getProduct().getId(), productId);
                    assertEquals(accountingFact.getUOM(), line.get("uOM"));
                    assertEquals(accountingFact.getLineID(), line.getId());
                    assertEquals(accountingFact.getRecordID2(), null);
                    assertEquals(accountingFact.getTax(), null);
                }
            }

            else {
                if (doc.getEntityName().equals(Invoice.ENTITY_NAME) && i == 0) {
                    assertEquals(accountingFact.getProduct(), null);
                    assertEquals(accountingFact.getUOM(), null);
                    assertEquals(accountingFact.getTax(), null);
                } else {
                    if (productId == null) {
                        assertEquals(accountingFact.getProduct(), documentPostAssert.getProductId() == null
                                ? null
                                : OBDal.getInstance().get(Product.class, documentPostAssert.getProductId()));
                    } else {
                        assertEquals(accountingFact.getProduct().getId(), productId);
                    }
                    if (line.getEntity().getProperty("uOM", false) == null) {
                        assertEquals(accountingFact.getUOM(), null);
                    } else {
                        assertEquals(accountingFact.getUOM(), line.get("uOM"));
                    }
                    if (!doc.getEntityName().equals(LandedCost.ENTITY_NAME)) {
                        assertEquals(accountingFact.getLineID(), line.getId());
                    }
                    assertEquals(accountingFact.getRecordID2(), null);
                    assertEquals(accountingFact.getTax(), null);
                }
            }

            assertEquals(accountingFact.getProject(), null);
            assertEquals(accountingFact.getCostcenter(), null);
            assertEquals(accountingFact.getAsset(), null);
            assertEquals(accountingFact.getStDimension(), null);
            assertEquals(accountingFact.getNdDimension(), null);

            /* Rest of fields assert */

            if (doc.getEntityName().equals(ShipmentInOut.ENTITY_NAME)) {
                assertEquals(accountingFact.getGLCategory().getName(), "Material Management");
            } else if (doc.getEntityName().equals(Invoice.ENTITY_NAME)) {
                assertEquals(accountingFact.getGLCategory().getName(), "AP Invoice");
            } else if (doc.getEntityName().equals(CostAdjustment.ENTITY_NAME)) {
                assertEquals(accountingFact.getGLCategory().getName(), "None");
            } else {
                assertEquals(accountingFact.getGLCategory().getName(), "Standard");
            }

            assertEquals(accountingFact.getPostingType(), "A");

            if (doc.getEntityName().equals(ReceiptInvoiceMatch.ENTITY_NAME)) {
                assertEquals(accountingFact.getStorageBin(), null);
            } else if (doc.getEntityName().equals(InternalMovement.ENTITY_NAME)) {
                if (i % 2 == 0) {
                    assertEquals(accountingFact.getStorageBin(),
                            line.get(InternalMovementLine.PROPERTY_STORAGEBIN));
                } else {
                    assertEquals(accountingFact.getStorageBin(),
                            line.get(InternalMovementLine.PROPERTY_NEWSTORAGEBIN));
                }
            } else if (line.getEntity().getProperty("storageBin", false) == null) {
                assertEquals(accountingFact.getStorageBin(), null);
            } else {
                assertEquals(accountingFact.getStorageBin(), line.get("storageBin"));
            }

            if (doc.getEntityName().equals(InventoryCount.ENTITY_NAME)) {
                assertEquals(accountingFact.getDocumentType(), null);
                assertEquals(accountingFact.getDocumentCategory(), "MMI");
            } else if (doc.getEntityName().equals(ReceiptInvoiceMatch.ENTITY_NAME)) {
                assertEquals(accountingFact.getDocumentType(), null);
                assertEquals(accountingFact.getDocumentCategory(), "MXI");
            } else if (doc.getEntityName().equals(InternalMovement.ENTITY_NAME)) {
                assertEquals(accountingFact.getDocumentType(), null);
                assertEquals(accountingFact.getDocumentCategory(), "MMM");
            } else if (doc.getEntityName().equals(InternalConsumption.ENTITY_NAME)) {
                assertEquals(accountingFact.getDocumentType(), null);
                assertEquals(accountingFact.getDocumentCategory(), "MIC");
            } else if (doc.getEntityName().equals(ProductionTransaction.ENTITY_NAME)) {
                assertEquals(accountingFact.getDocumentType(), null);
                assertEquals(accountingFact.getDocumentCategory(), "MMP");
            } else if (doc.getEntityName().equals(LandedCost.ENTITY_NAME)) {
                assertEquals(accountingFact.getDocumentType(), null);
                assertEquals(accountingFact.getDocumentCategory(), "LDC");
            } else if (doc.getEntityName().equals(LandedCostCost.ENTITY_NAME)) {
                assertEquals(accountingFact.getDocumentType(), null);
                assertEquals(accountingFact.getDocumentCategory(), "LCC");
            } else {
                assertEquals(accountingFact.getDocumentType(), doc.get("documentType"));
                assertEquals(accountingFact.getDocumentCategory(),
                        ((DocumentType) doc.get("documentType")).getDocumentCategory());
            }

            assertEquals(accountingFact.getSalesRegion(), null);
            assertEquals(accountingFact.getSalesCampaign(), null);
            assertEquals(accountingFact.getActivity(), null);
            assertEquals(accountingFact.getGroupID(), groupId);
            assertEquals(accountingFact.getType(), "N");
            assertEquals(accountingFact.getValue(), documentPostAssert.getAccount());
            assertEquals(accountingFact.getWithholding(), null);
            assertFalse(accountingFact.isModify());
            assertEquals(accountingFact.getDateBalanced(), null);

            final OBCriteria<ElementValue> criteria4 = OBDal.getInstance().createCriteria(ElementValue.class);
            criteria4.add(Restrictions.eq(ElementValue.PROPERTY_SEARCHKEY, documentPostAssert.getAccount()));
            assertEquals(accountingFact.getAccountingEntryDescription(),
                    criteria4.list().get(0).getDescription());

            i++;
        }
    } catch (Exception e) {
        throw new OBException(e);
    }
}