Example usage for org.hibernate.criterion Restrictions isNull

List of usage examples for org.hibernate.criterion Restrictions isNull

Introduction

In this page you can find the example usage for org.hibernate.criterion Restrictions isNull.

Prototype

public static Criterion isNull(String propertyName) 

Source Link

Document

Apply an "is null" constraint to the named property

Usage

From source file:com.lp.server.artikel.ejbfac.LagerReportFacBean.java

License:Open Source License

public JasperPrintLP printLieferantumsatzstatistik(Timestamp tVon, Timestamp tBis,
        boolean bWareneingangspositionen, Integer iOptionKundengruppierung, Integer iOptionGruppierung,
        Integer iOptionSortierung, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException {
    List<String> gruppierung = new ArrayList<String>();

    String[] monate = new DateFormatSymbols(theClientDto.getLocUi()).getMonths();

    if (iOptionGruppierung
            .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {

        ArtklaDto[] artklDtos = getArtikelFac().artklaFindByMandantCNr(theClientDto);
        for (int i = 0; i < artklDtos.length; i++) {
            gruppierung.add(artklDtos[i].getCNr());
        }/*from   w w  w  .j  ava2 s  .  c om*/
    } else if (iOptionGruppierung
            .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {

        ArtgruDto[] artgruDtos = getArtikelFac().artgruFindByMandantCNr(theClientDto);
        for (int i = 0; i < artgruDtos.length; i++) {
            gruppierung.add(artgruDtos[i].getCNr());
        }
    } else if (iOptionGruppierung
            .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(tVon.getTime());
        c.set(Calendar.DAY_OF_YEAR, 1);
        while (c.getTime().before(tBis)) {
            gruppierung.add(c.get(Calendar.YEAR) + "");
            c.set(Calendar.YEAR, c.get(Calendar.YEAR) + 1);

        }

    } else if (iOptionGruppierung
            .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(tVon.getTime());
        c.set(Calendar.MONTH, 1);
        while (c.getTime().before(tBis)) {

            gruppierung.add(monate[c.get(Calendar.MONTH)] + " " + c.get(Calendar.YEAR));
            c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1);

        }

    }

    tVon = Helper.cutTimestamp(tVon);
    tBis = Helper.cutTimestamp(tBis);

    BigDecimal gesamtUmsatz = new BigDecimal(0);
    Session session = FLRSessionFactory.getFactory().openSession();

    org.hibernate.Criteria crit = session.createCriteria(FLRLieferant.class);
    crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));

    List<?> results = crit.list();
    Iterator<?> resultListIterator = results.iterator();

    ArrayList<Object> gesamtListe = new ArrayList<Object>();

    // Leere Spalten entfernen

    boolean[] bSpalteAndrucken = new boolean[gruppierung.size()];

    while (resultListIterator.hasNext()) {
        FLRLieferant lieferant = (FLRLieferant) resultListIterator.next();

        LieferantDto lieferantDto = getLieferantFac().lieferantFindByPrimaryKey(lieferant.getI_id(),
                theClientDto);

        KundeUmsatzstatistikDto kdums = new KundeUmsatzstatistikDto(gruppierung.size() + 1);
        kdums.setSKunde(lieferant.getFlrpartner().getC_name1nachnamefirmazeile1());
        kdums.setIZahlungsziel(lieferantDto.getZahlungszielIId());
        kdums.setILieferart(lieferantDto.getLieferartIId());
        kdums.setISpediteur(lieferantDto.getIdSpediteur());

        kdums.setSKundengruppierung("");
        // Branche/Partnerklasse hinzufuegen

        if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE
                && lieferant.getFlrpartner().getBranche_i_id() != null) {
            kdums.setSKundengruppierung(getPartnerServicesFac()
                    .brancheFindByPrimaryKey(lieferant.getFlrpartner().getBranche_i_id(), theClientDto)
                    .getBezeichnung());
        } else if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE
                && lieferant.getFlrpartner().getPartnerklasse_i_id() != null) {
            kdums.setSKundengruppierung(getPartnerFac().partnerklasseFindByPrimaryKey(
                    lieferant.getFlrpartner().getPartnerklasse_i_id(), theClientDto).getBezeichnung());
        }

        if (bWareneingangspositionen) {
            Session session2 = FLRSessionFactory.getFactory().openSession();

            org.hibernate.Criteria crit2 = session2.createCriteria(FLRWareneingangspositionen.class)
                    .createAlias("flrwareneingang", "w").createAlias("w.flrbestellung", "b")
                    .createAlias("b.flrlieferant", "l").add(Restrictions.eq("l.i_id", lieferant.getI_id()))
                    .createAlias("l.flrpartner", "p");
            crit2.add(Restrictions.isNotNull(WareneingangFac.FLR_WEPOS_N_EINSTANDSPREIS));

            // SP1115
            crit2.createAlias("flrbestellposition", "bp")
                    .add(Restrictions.isNull("bp.position_i_id_artikelset"));

            String[] stati = new String[2];
            stati[0] = BestellungFac.BESTELLSTATUS_ANGELEGT;
            stati[1] = BestellungFac.BESTELLSTATUS_STORNIERT;

            crit2.add(Restrictions
                    .not(Restrictions.in("b." + BestellungFac.FLR_BESTELLUNG_BESTELLUNGSTATUS_C_NR, stati)));

            Calendar c = Calendar.getInstance();
            c.setTime(tVon);
            c.set(Calendar.HOUR_OF_DAY, 0);
            c.set(Calendar.MINUTE, 0);
            c.set(Calendar.SECOND, 0);
            c.set(Calendar.MILLISECOND, 0);
            crit2.add(Restrictions.ge("w." + WareneingangFac.FLR_WE_T_WARENEINGANGSDATUM, c.getTime()));

            c.setTime(tBis);
            c.set(Calendar.HOUR_OF_DAY, 23);
            c.set(Calendar.MINUTE, 59);
            c.set(Calendar.SECOND, 59);
            c.set(Calendar.MILLISECOND, 999);
            crit2.add(Restrictions.le("w." + WareneingangFac.FLR_WE_T_WARENEINGANGSDATUM, c.getTime()));
            crit2.addOrder(Order.asc("p.c_name1nachnamefirmazeile1"));

            List<?> results2 = crit2.list();
            Iterator<?> resultListIterator2 = results2.iterator();
            while (resultListIterator2.hasNext()) {
                FLRWareneingangspositionen wepos = (FLRWareneingangspositionen) resultListIterator2.next();

                BigDecimal umsatz = wepos.getN_einstandspreis();

                // Mit Welchselkurs zu Mandantenwaehrung multiplizieren
                if (wepos.getFlrwareneingang().getN_wechselkurs() != null
                        && wepos.getFlrwareneingang().getN_wechselkurs().doubleValue() != 0) {
                    umsatz = umsatz.divide(wepos.getFlrwareneingang().getN_wechselkurs(), 4,
                            BigDecimal.ROUND_HALF_EVEN);

                }

                // Bei Handeingabe ist Umsatz gleich Deckungsbeitrag und
                // kommt in die Kategorie Unbekannt
                if (wepos.getFlrbestellposition().getBestellpositionart_c_nr()
                        .equals(LocaleFac.POSITIONSART_HANDEINGABE)
                        && iOptionGruppierung
                                .intValue() != LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                        && iOptionGruppierung
                                .intValue() != LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {
                    umsatz = umsatz.multiply(wepos.getN_geliefertemenge());
                    kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                    // GESAMTSUMME
                    kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatz));
                } else if (wepos.getFlrbestellposition().getBestellpositionart_c_nr()
                        .equals(LocaleFac.POSITIONSART_IDENT)
                        || (wepos.getFlrbestellposition().getBestellpositionart_c_nr()
                                .equals(LocaleFac.POSITIONSART_HANDEINGABE)
                                && ((iOptionGruppierung
                                        .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR)
                                        || iOptionGruppierung
                                                .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT))) {
                    umsatz = umsatz.multiply(wepos.getN_geliefertemenge());

                    // GESAMTSUMME
                    kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatz));

                    // Aufteilen auf Gruppe
                    if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
                        if (wepos.getFlrbestellposition().getFlrartikel().getFlrartikelklasse() != null) {
                            // Bei richtiger Artikelklasse einfuegen

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j).equals(wepos.getFlrbestellposition().getFlrartikel()
                                        .getFlrartikelklasse().getC_nr())) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatz);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else {
                            kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
                        if (wepos.getFlrbestellposition().getFlrartikel().getFlrartikelgruppe() != null) {
                            // Bei richtiger Gruppe einfuegen

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j).equals(wepos.getFlrbestellposition().getFlrartikel()
                                        .getFlrartikelgruppe().getC_nr())) {

                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatz);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else {
                            kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

                        Calendar cZeile = Calendar.getInstance();
                        cZeile.setTimeInMillis(wepos.getFlrwareneingang().getT_wareneingansdatum().getTime());
                        String jahr = cZeile.get(Calendar.YEAR) + "";

                        for (int j = 0; j < gruppierung.size(); j++) {
                            if (gruppierung.get(j).equals(jahr)) {

                                kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1].add(umsatz);
                                bSpalteAndrucken[j] = true;
                            }
                        }

                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {
                        Calendar cZeile = Calendar.getInstance();
                        cZeile.setTimeInMillis(wepos.getFlrwareneingang().getT_wareneingansdatum().getTime());
                        String jahrMonat = monate[cZeile.get(Calendar.MONTH)] + " " + cZeile.get(Calendar.YEAR);

                        for (int j = 0; j < gruppierung.size(); j++) {
                            if (gruppierung.get(j).equals(jahrMonat)) {

                                kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1].add(umsatz);
                                bSpalteAndrucken[j] = true;
                            }
                        }
                    }
                }
            }
            session2.close();

            if (results2.size() > 0) {
                gesamtListe.add(kdums);

                gesamtUmsatz = gesamtUmsatz.add(kdums.getBdUmsatz());
            }
        } else {
            // Eingangsrechnung
            Session session2 = FLRSessionFactory.getFactory().openSession();

            org.hibernate.Criteria crit2 = session2.createCriteria(FLREingangsrechnungReport.class)
                    .createAlias("flrlieferant", "l");
            crit2.add(Restrictions.eq("l.i_id", lieferant.getI_id()));
            crit2.add(Restrictions.ge(EingangsrechnungFac.FLR_ER_D_BELEGDATUM, Helper.cutTimestamp(tVon)));

            Calendar c = Calendar.getInstance();
            c.setTime(tBis);
            c.set(Calendar.HOUR_OF_DAY, 23);
            c.set(Calendar.MINUTE, 59);
            c.set(Calendar.SECOND, 59);
            c.set(Calendar.MILLISECOND, 999);
            crit2.add(Restrictions.le(EingangsrechnungFac.FLR_ER_D_BELEGDATUM, c.getTime()));

            List<?> results2 = crit2.list();
            Iterator<?> resultListIterator2 = results2.iterator();

            while (resultListIterator2.hasNext()) {
                FLREingangsrechnungReport er = (FLREingangsrechnungReport) resultListIterator2.next();

                if (iOptionGruppierung
                        .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

                    Calendar cZeile = Calendar.getInstance();
                    cZeile.setTimeInMillis(er.getT_belegdatum().getTime());
                    String jahr = cZeile.get(Calendar.YEAR) + "";

                    for (int j = 0; j < gruppierung.size(); j++) {
                        if (gruppierung.get(j).equals(jahr)) {

                            kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                    .add(er.getN_betrag().subtract(er.getN_ustbetrag()));

                            kdums.setBdUmsatz(
                                    kdums.getBdUmsatz().add(er.getN_betrag().subtract(er.getN_ustbetrag())));

                            bSpalteAndrucken[j] = true;
                        }
                    }

                } else if (iOptionGruppierung
                        .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

                    Calendar cZeile = Calendar.getInstance();
                    cZeile.setTimeInMillis(er.getT_belegdatum().getTime());

                    String jahrMonat = monate[cZeile.get(Calendar.MONTH)] + " " + cZeile.get(Calendar.YEAR);

                    for (int j = 0; j < gruppierung.size(); j++) {
                        if (gruppierung.get(j).equals(jahrMonat)) {

                            kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                    .add(er.getN_betrag().subtract(er.getN_ustbetrag()));

                            kdums.setBdUmsatz(
                                    kdums.getBdUmsatz().add(er.getN_betrag().subtract(er.getN_ustbetrag())));

                            bSpalteAndrucken[j] = true;
                        }
                    }

                } else {

                    kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0]
                            .add(er.getN_betrag().subtract(er.getN_ustbetrag()));
                    kdums.setBdUmsatz(kdums.getBdUmsatz().add(er.getN_betrag().subtract(er.getN_ustbetrag())));
                }
            }

            if (results2.size() > 0) {
                gesamtListe.add(kdums);

                gesamtUmsatz = gesamtUmsatz.add(kdums.getBdUmsatz());
            }

        }
    }
    session.close();

    JasperPrintLP print = null;

    // NACH UMSATZ SORTIEREN
    int n = gesamtListe.size();
    Object temp;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {
            double a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getBdUmsatz().doubleValue();
            double b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getBdUmsatz().doubleValue();
            if (a < b) {
                temp = gesamtListe.get(j);
                gesamtListe.set(j, gesamtListe.get(j + 1));
                gesamtListe.set(j + 1, temp);
            }

        }
    }

    // ABC-Klassifizierung
    // A=80%
    // B=15%
    // C=5%

    double dTempUmsatz = gesamtUmsatz.doubleValue();

    ParametermandantDto mandantparameterA = null;
    ParametermandantDto mandantparameterB = null;
    try {
        mandantparameterA = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_KUNDEN, ParameterFac.PARAMETER_KUNDENBEWERTUNG_WERT_A);
        mandantparameterB = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_KUNDEN, ParameterFac.PARAMETER_KUNDENBEWERTUNG_WERT_B);

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

    BigDecimal paramBUmsatz = gesamtUmsatz.multiply((new BigDecimal(mandantparameterB.getCWert())
            .divide(new BigDecimal(100), 4, BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramAUmsatz = gesamtUmsatz.multiply((new BigDecimal(mandantparameterA.getCWert())
            .divide(new BigDecimal(100), 4, BigDecimal.ROUND_HALF_EVEN)));

    for (int i = 0; i < gesamtListe.size(); i++) {
        KundeUmsatzstatistikDto dto = (KundeUmsatzstatistikDto) gesamtListe.get(i);

        if (dTempUmsatz < gesamtUmsatz.doubleValue()
                - (paramAUmsatz.doubleValue() + paramBUmsatz.doubleValue())) {
            dto.setAbcKlassifizierung("C");
        } else if (dTempUmsatz < paramBUmsatz.doubleValue()) {
            dto.setAbcKlassifizierung("B");
        } else {
            dto.setAbcKlassifizierung("A");
        }

        dTempUmsatz = dTempUmsatz - dto.getBdUmsatz().doubleValue();

        gesamtListe.set(i, dto);
    }

    // Nach Name sortieren

    // NACH NAME SORTIEREN, Wenn angegeben

    if (iOptionSortierung
            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_FIRMANNAME) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSKunde();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSKunde();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            }
        }
    }

    // Nach Branche/Partnerklasse Gruppieren

    if (iOptionKundengruppierung
            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE
            || iOptionKundengruppierung
                    .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSKundengruppierung();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSKundengruppierung();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            }
        }

    }

    // SPALTENHEADER entfernen, wenn Spalte leer
    for (int i = bSpalteAndrucken.length; i > 0; i--) {
        if (bSpalteAndrucken[i - 1] == false) {
            gruppierung.remove(i - 1);
        }
    }

    int[] spaltenDrucken = new int[gruppierung.size() + 1];
    spaltenDrucken[0] = 0;
    int x = 1;
    for (int i = 1; i < bSpalteAndrucken.length + 1; i++) {
        if (bSpalteAndrucken[i - 1] == true) {
            spaltenDrucken[x] = i;
            x++;
        }
    }

    int seiten_breite = (gruppierung.size() / 8) + 1;

    for (int i = 0; i < seiten_breite; i++) {
        index = -1;

        sAktuellerReport = LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK;

        data = new Object[gesamtListe.size()][15];
        for (int j = 0; j < gesamtListe.size(); j++) {
            KundeUmsatzstatistikDto dto = (KundeUmsatzstatistikDto) gesamtListe.get(j);
            data[j][REPORT_LIEFERANTUMSATZSTATISTIK_LIEFERANTGRUPPIERUNG] = dto.getSKundengruppierung();
            data[j][REPORT_LIEFERANTUMSATZSTATISTIK_LIEFERANT] = dto.getSKunde();
            data[j][REPORT_LIEFERANTUMSATZSTATISTIK_UMSATZ] = dto.getBdUmsatz();
            data[j][REPORT_LIEFERANTUMSATZSTATISTIK_ABCKLASSE] = dto.getAbcKlassifizierung();
            data[j][REPORT_LIEFERANTUMSATZSTATISTIK_ZAHLUNGSZIEL] = getMandantFac()
                    .zahlungszielFindByIIdLocaleOhneExc(dto.getIZahlungsziel(), theClientDto.getLocMandant(),
                            theClientDto);
            data[j][REPORT_LIEFERANTUMSATZSTATISTIK_LIEFERART] = getLocaleFac().lieferartFindByIIdLocaleOhneExc(
                    dto.getILieferart(), theClientDto.getLocMandant(), theClientDto);
            data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPEDITEUR] = getMandantFac()
                    .spediteurFindByPrimaryKey(dto.getISpediteur()).getCNamedesspediteurs();

            try {
                if (i == 0) {
                    data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPALTE1] = dto.getSubSummeUmsatz()[0];
                } else {
                    data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPALTE1] = dto
                            .getSubSummeUmsatz()[spaltenDrucken[0 + (i * 8)]];
                }
                data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPALTE2] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[1 + (i * 8)]];
                data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPALTE3] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[2 + (i * 8)]];
                data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPALTE4] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[3 + (i * 8)]];
                data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPALTE5] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[4 + (i * 8)]];
                data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPALTE6] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[5 + (i * 8)]];
                data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPALTE7] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[6 + (i * 8)]];
                data[j][REPORT_LIEFERANTUMSATZSTATISTIK_SPALTE8] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[7 + (i * 8)]];
            } catch (ArrayIndexOutOfBoundsException ex1) {
                // nothing
            }

        }

        HashMap<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("P_VON", tVon);
        parameter.put("P_BIS", tBis);

        if (bWareneingangspositionen) {
            parameter.put("P_BASIS", getTextRespectUISpr("bes.wareneingangsposition", theClientDto.getMandant(),
                    theClientDto.getLocUi()));
        } else {
            parameter.put("P_BASIS", getTextRespectUISpr("er.eingangsrechnung", theClientDto.getMandant(),
                    theClientDto.getLocUi()));

        }

        if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE) {
            parameter.put("P_GRUPPIERUNGLIEFERANT",
                    getTextRespectUISpr("lp.branche", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE) {
            parameter.put("P_GRUPPIERUNGLIEFERANT", "Partnerklasse");
        }

        if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.artikelklasse", theClientDto.getMandant(),
                    theClientDto.getLocUi()));
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.artikelgruppe", theClientDto.getMandant(),
                    theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {
            parameter.put("P_GRUPPIERUNG",
                    getTextRespectUISpr("lp.jahr", theClientDto.getMandant(), theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {
            parameter.put("P_GRUPPIERUNG",
                    getTextRespectUISpr("lp.monat", theClientDto.getMandant(), theClientDto.getLocUi()));

        }
        if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_SORTIERUNG_FIRMANNAME) {
            parameter.put("P_SORTIERUNG", "Firmenname");
        } else if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_LIEFERANTUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("er.umsatz", theClientDto.getMandant(), theClientDto.getLocUi()));

        }

        try {

            parameter.put("P_GRUPPEA", mandantparameterA.getCWertAsObject());
            parameter.put("P_GRUPPEB", mandantparameterB.getCWertAsObject());

            if (i == 0) {
                parameter.put("Spalte1", "Unbekannt");
                parameter.put("Spalte2", gruppierung.get(0 + (i * 8)));
                parameter.put("Spalte3", gruppierung.get(1 + (i * 8)));
                parameter.put("Spalte4", gruppierung.get(2 + (i * 8)));
                parameter.put("Spalte5", gruppierung.get(3 + (i * 8)));
                parameter.put("Spalte6", gruppierung.get(4 + (i * 8)));
                parameter.put("Spalte7", gruppierung.get(5 + (i * 8)));
                parameter.put("Spalte8", gruppierung.get(6 + (i * 8)));

            } else {

                parameter.put("Spalte1", gruppierung.get(7 + (i * 8) - 8));
                parameter.put("Spalte2", gruppierung.get(8 + (i * 8) - 8));
                parameter.put("Spalte3", gruppierung.get(1 + (i * 8)));
                parameter.put("Spalte4", gruppierung.get(2 + (i * 8)));
                parameter.put("Spalte5", gruppierung.get(3 + (i * 8)));
                parameter.put("Spalte6", gruppierung.get(4 + (i * 8)));
                parameter.put("Spalte7", gruppierung.get(5 + (i * 8)));
                parameter.put("Spalte8", gruppierung.get(6 + (i * 80)));

            }

        } catch (IndexOutOfBoundsException ex1) {
            // nothing
        }
        initJRDS(parameter, LagerReportFac.REPORT_MODUL, sAktuellerReport, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);

        if (print == null) {
            print = getReportPrint();
        } else {
            print = Helper.addReport2Report(print, getReportPrint().getPrint());
        }
    }

    return print;

}

From source file:com.lp.server.artikel.ejbfac.LagerReportFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printKundeumsatzstatistik(Timestamp tVon, Timestamp tBis, Integer iOptionKundengruppierung,
        boolean bUmsatz, Integer iOptionGruppierung, Integer iOptionSortierung, Integer iSortierbasisJahre,
        boolean bVerwendeStatistikadresse, boolean bMitNichtLagerbewertetenArtikeln, boolean ohneDBBetrachtung,
        TheClientDto theClientDto) throws EJBExceptionLP, RemoteException {
    List<String> gruppierung = new ArrayList<String>();

    tVon = Helper.cutTimestamp(tVon);//from ww w  .  j  a va  2s. c  o m
    tBis = Helper.cutTimestamp(tBis);
    String[] monate = new DateFormatSymbols(theClientDto.getLocUi()).getMonths();
    try {
        if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {

            ArtklaDto[] artklDtos = getArtikelFac().artklaFindByMandantCNr(theClientDto);
            for (int i = 0; i < artklDtos.length; i++) {
                gruppierung.add(artklDtos[i].getCNr());
            }
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {

            ArtgruDto[] artgruDtos = getArtikelFac().artgruFindByMandantCNr(theClientDto);
            for (int i = 0; i < artgruDtos.length; i++) {
                gruppierung.add(artgruDtos[i].getCNr());
            }
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {

            FertigungsgruppeDto[] ftgruDtos = getStuecklisteFac()
                    .fertigungsgruppeFindByMandantCNr(theClientDto.getMandant(), theClientDto);
            for (int i = 0; i < ftgruDtos.length; i++) {
                gruppierung.add(ftgruDtos[i].getCBez());
            }
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tVon.getTime());
            c.set(Calendar.DAY_OF_YEAR, 1);
            while (c.getTime().before(tBis)) {
                gruppierung.add(c.get(Calendar.YEAR) + "");
                c.set(Calendar.YEAR, c.get(Calendar.YEAR) + 1);

            }

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tVon.getTime());
            c.set(Calendar.MONTH, 1);
            while (c.getTime().before(tBis)) {

                gruppierung.add(monate[c.get(Calendar.MONTH)] + " " + c.get(Calendar.YEAR));
                c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1);

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

    BigDecimal gesamtUmsatz = new BigDecimal(0);
    BigDecimal gesamtDeckungsbeitrag = new BigDecimal(0);
    Session session = FLRSessionFactory.getFactory().openSession();

    org.hibernate.Criteria crit = session.createCriteria(FLRKunde.class);
    crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));

    List<?> results = crit.list();
    Iterator<?> resultListIterator = results.iterator();

    ArrayList<Object> gesamtListe = new ArrayList<Object>();

    // Leere Spalten entfernen

    boolean[] bSpalteAndrucken = new boolean[gruppierung.size()];
    int iKunde = 0;
    while (resultListIterator.hasNext()) {
        FLRKunde kunde = (FLRKunde) resultListIterator.next();
        iKunde++;
        System.out.println(iKunde + " von " + results.size());

        KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kunde.getI_id(), theClientDto);

        KundeUmsatzstatistikDto kdums = new KundeUmsatzstatistikDto(gruppierung.size() + 1);
        kdums.setSKunde(kunde.getFlrpartner().getC_name1nachnamefirmazeile1());
        kdums.setIZahlungsziel(kundeDto.getZahlungszielIId());
        kdums.setILieferart(kundeDto.getLieferartIId());
        kdums.setISpediteur(kundeDto.getSpediteurIId());
        kdums.setIKundennummer(kundeDto.getIKundennummer());

        if (kundeDto.getPartnerDto().getLandplzortDto() != null) {
            kdums.setSLkz(kundeDto.getPartnerDto().getLandplzortDto().getLandDto().getCLkz());
            kdums.setSPlz(kundeDto.getPartnerDto().getLandplzortDto().getCPlz());
        }

        kdums.setSKundengruppierung("");
        // Branche/Partnerklasse hinzufuegen

        if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE
                && kunde.getFlrpartner().getBranche_i_id() != null) {
            kdums.setSKundengruppierung(getPartnerServicesFac()
                    .brancheFindByPrimaryKey(kunde.getFlrpartner().getBranche_i_id(), theClientDto)
                    .getBezeichnung());
        } else if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE
                && kunde.getFlrpartner().getPartnerklasse_i_id() != null) {
            kdums.setSKundengruppierung(getPartnerFac()
                    .partnerklasseFindByPrimaryKey(kunde.getFlrpartner().getPartnerklasse_i_id(), theClientDto)
                    .getBezeichnung());
        }

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

        org.hibernate.Criteria crit2 = session2.createCriteria(FLRRechnungPosition.class)
                .createAlias("flrrechnung", "r");

        if (bVerwendeStatistikadresse) {
            crit2.createAlias("r.flrstatistikadresse", "k");
        } else {
            crit2.createAlias("r.flrkunde", "k");
        }

        crit2.add(Restrictions.eq("k.i_id", kunde.getI_id())).createAlias("k.flrpartner", "p")
                .createAlias("r." + RechnungFac.FLR_RECHNUNG_FLRRECHNUNGART, "ra");

        // PJ 14808
        crit2.add(Restrictions.or(
                Restrictions.isNotNull(
                        RechnungFac.FLR_RECHNUNGPOSITION_N_NETTOEINZELPREIS_PLUS_AUFSCHLAG_MINUS_RABATT),
                Restrictions.eq(RechnungFac.FLR_RECHNUNGPOSITIONSART_POSITIONSART_C_NR,
                        RechnungFac.POSITIONSART_RECHNUNG_LIEFERSCHEIN)));

        // projekt 3568
        String[] arten = new String[2];
        arten[0] = RechnungFac.RECHNUNGART_ANZAHLUNG;
        arten[1] = RechnungFac.RECHNUNGART_PROFORMARECHNUNG;

        crit2.add(Restrictions.not(Restrictions.in("ra.c_nr", arten)));

        String[] stati = new String[2];
        stati[0] = RechnungFac.STATUS_ANGELEGT;
        stati[1] = RechnungFac.STATUS_STORNIERT;

        crit2.add(Restrictions.not(Restrictions.in("r." + RechnungFac.FLR_RECHNUNG_STATUS_C_NR, stati)));

        Calendar c = Calendar.getInstance();
        c.setTime(tVon);
        c.set(Calendar.HOUR_OF_DAY, 0);
        c.set(Calendar.MINUTE, 0);
        c.set(Calendar.SECOND, 0);
        c.set(Calendar.MILLISECOND, 0);
        crit2.add(Restrictions.ge("r." + RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, c.getTime()));

        c.setTime(tBis);
        c.set(Calendar.HOUR_OF_DAY, 23);
        c.set(Calendar.MINUTE, 59);
        c.set(Calendar.SECOND, 59);
        c.set(Calendar.MILLISECOND, 999);
        crit2.add(Restrictions.le("r." + RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, c.getTime()));

        // SP903
        crit2.add(Restrictions.isNull("position_i_id_artikelset"));

        crit2.addOrder(Order.asc("p.c_name1nachnamefirmazeile1"));

        List<?> results2 = crit2.list();
        Iterator<?> resultListIterator2 = results2.iterator();

        int iPos = 0;
        while (resultListIterator2.hasNext()) {
            FLRRechnungPosition rechpos = (FLRRechnungPosition) resultListIterator2.next();

            iPos++;

            // 16882 Ohne Lagerbewertete Artikel
            if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)
                    && rechpos.getFlrartikel() != null
                    && !Helper.short2boolean(rechpos.getFlrartikel().getB_lagerbewertet())) {

                if (bMitNichtLagerbewertetenArtikeln == false) {
                    continue;
                }
            }

            if (iPos % 100 == 0) {
                System.out.println(iPos + " von " + results2.size());
            }

            // Erstumsatz?
            Session sessionEU = FLRSessionFactory.getFactory().openSession();

            org.hibernate.Criteria critEU = session2.createCriteria(FLRRechnung.class)
                    .createAlias("flrkunde", "k").add(Restrictions.eq("k.i_id", kunde.getI_id()));

            critEU.add(Restrictions.lt(RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, tVon));

            String[] statiErstumsatz = new String[1];
            statiErstumsatz[0] = RechnungFac.STATUS_STORNIERT;
            critEU.add(
                    Restrictions.not(Restrictions.in(RechnungFac.FLR_RECHNUNG_STATUS_C_NR, statiErstumsatz)));
            critEU.setFetchSize(1);
            List<?> resultsEU = critEU.list();
            if (resultsEU.size() < 1) {
                kdums.setBErstumsatz(true);
            }
            sessionEU.close();

            // ENDE Erstumsatz

            boolean bGutschrift = false;

            BigDecimal umsatz = rechpos.getN_nettoeinzelpreis_plus_aufschlag_minus_rabatt();
            // Gutschrift oder Wertgutschrift
            if (rechpos.getFlrrechnung().getFlrrechnungart().getC_nr()
                    .equals(RechnungFac.RECHNUNGART_GUTSCHRIFT)
                    || rechpos.getFlrrechnung().getFlrrechnungart().getC_nr()
                            .equals(RechnungFac.RECHNUNGART_WERTGUTSCHRIFT)) {
                bGutschrift = true;
                umsatz = new BigDecimal(0).subtract(umsatz);

            }

            // Mit Welchselkurs zu Mandantenwaehrung dividieren
            if (rechpos.getFlrrechnung().getN_kurs() != null
                    && rechpos.getFlrrechnung().getN_kurs().doubleValue() != 0
                    && !rechpos.getPositionsart_c_nr().equals(RechnungFac.POSITIONSART_RECHNUNG_LIEFERSCHEIN)) {
                umsatz = umsatz.divide(rechpos.getFlrrechnung().getN_kurs(), 4, BigDecimal.ROUND_HALF_EVEN);

            }

            // Bei Handeingabe ist Umsatz gleich Deckungsbeitrag und kommt
            // in die Kategorie Unbekannt
            if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                    && iOptionGruppierung
                            .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                    && iOptionGruppierung
                            .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {
                umsatz = umsatz.multiply(rechpos.getN_menge());
                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0].add(umsatz);
                // GESAMTSUMME
                kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatz));
                kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(umsatz));

            } else if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT) || (rechpos
                    .getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                    && iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR)
                    || (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                            && iOptionGruppierung
                                    .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT)) {

                if (rechpos.getPosition_i_id_artikelset() == null) {

                    umsatz = umsatz.multiply(rechpos.getN_menge());
                    BigDecimal gestwert = new BigDecimal(0);

                    BigDecimal deckungsbeitrag = new BigDecimal(0);
                    if (ohneDBBetrachtung == false) {
                        if (!rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)) {

                            if (rechpos.getSetartikel_set().size() == 0) {
                                gestwert = getGestpreisFuerUmsatzStatistik(rechpos, bGutschrift);
                            } else {
                                Iterator it = rechpos.getSetartikel_set().iterator();
                                while (it.hasNext()) {
                                    gestwert = gestwert.add(getGestpreisFuerUmsatzStatistik(
                                            (FLRRechnungPosition) it.next(), bGutschrift));
                                }
                            }
                        }

                        // Mit Welchselkurs zu Mandantenwaehrung dividieren
                        if (rechpos.getFlrrechnung().getN_kurs() != null
                                && rechpos.getFlrrechnung().getN_kurs().doubleValue() != 0) {
                            gestwert = gestwert.divide(rechpos.getFlrrechnung().getN_kurs(), 4,
                                    BigDecimal.ROUND_HALF_EVEN);
                        }

                        deckungsbeitrag = umsatz.subtract(gestwert);
                    }

                    // GESAMTSUMME
                    if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)) {
                        deckungsbeitrag = umsatz;
                    }

                    kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(deckungsbeitrag));

                    kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatz));

                    // Aufteilen auf Gruppe
                    if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
                        if (rechpos.getFlrartikel().getFlrartikelklasse() != null) {
                            // Bei richtiger Artikelklasse einfuegen

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j)
                                        .equals(rechpos.getFlrartikel().getFlrartikelklasse().getC_nr())) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatz);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else {
                            kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                            kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                    .add(deckungsbeitrag);
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
                        if (rechpos.getFlrartikel().getFlrartikelgruppe() != null) {
                            // Bei richtiger Gruppe einfuegen

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j)
                                        .equals(rechpos.getFlrartikel().getFlrartikelgruppe().getC_nr())) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatz);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else {
                            kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                            kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                    .add(deckungsbeitrag);
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {

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

                        String queryString = "SELECT stkl.flrfertigungsgruppe FROM FLRStueckliste AS stkl"
                                + " WHERE stkl.artikel_i_id= " + rechpos.getFlrartikel().getI_id();

                        Query query = sessionFTGruppe.createQuery(queryString);
                        List<?> resultList = query.list();
                        Iterator<?> resultListIteratorFTGruppe = resultList.iterator();
                        if (resultListIteratorFTGruppe.hasNext()) {
                            FLRFertigungsgruppe gru = (FLRFertigungsgruppe) resultListIteratorFTGruppe.next();

                            if (gru != null) {
                                // Bei richtiger Gruppe einfuegen
                                for (int j = 0; j < gruppierung.size(); j++) {
                                    if (gruppierung.get(j).equals(gru.getC_bez())) {
                                        kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                .add(umsatz);
                                        kdums.getSubSummeDeckungsbeitrag()[j
                                                + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                        .add(deckungsbeitrag);
                                        bSpalteAndrucken[j] = true;
                                    }
                                }
                            } else {
                                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatz);
                                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                        .add(deckungsbeitrag);
                            }
                            sessionFTGruppe.close();
                        }
                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

                        Calendar cZeile = Calendar.getInstance();
                        cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                        String jahr = cZeile.get(Calendar.YEAR) + "";

                        // Bei richtiger Gruppe einfuegen
                        for (int j = 0; j < gruppierung.size(); j++) {
                            if (gruppierung.get(j).equals(jahr)) {
                                kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1].add(umsatz);
                                kdums.getSubSummeDeckungsbeitrag()[j
                                        + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1].add(deckungsbeitrag);
                                bSpalteAndrucken[j] = true;
                            }
                        }

                    } else if (iOptionGruppierung
                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

                        Calendar cZeile = Calendar.getInstance();
                        cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                        String jahrMonat = monate[cZeile.get(Calendar.MONTH)] + " " + cZeile.get(Calendar.YEAR);

                        // Bei richtiger Gruppe einfuegen
                        for (int j = 0; j < gruppierung.size(); j++) {
                            if (gruppierung.get(j).equals(jahrMonat)) {
                                kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1].add(umsatz);
                                kdums.getSubSummeDeckungsbeitrag()[j
                                        + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1].add(deckungsbeitrag);
                                bSpalteAndrucken[j] = true;
                            }
                        }

                    }
                }
            }
            // Wenn Rechnungsposition ein LS ist, dann dessen Positionen
            // verwenden
            else if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_LIEFERSCHEIN)) {
                Integer lieferscheinIId = rechpos.getFlrlieferschein().getI_id();

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

                org.hibernate.Criteria crit3 = session3.createCriteria(FLRLieferscheinposition.class);
                crit3.createAlias("flrlieferschein", "l");
                crit3.add(Restrictions.eq("l.i_id", lieferscheinIId));
                // SP903
                crit3.add(Restrictions.isNull("position_i_id_artikelset"));
                crit3.add(Restrictions
                        .isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_NETTOGESAMTPREIS));
                crit3.add(Restrictions.not(Restrictions
                        .eq(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE, new BigDecimal(0))));

                List<?> results3 = crit3.list();
                Iterator<?> resultListIterator3 = results3.iterator();
                while (resultListIterator3.hasNext()) {
                    FLRLieferscheinposition lieferscheinpos = (FLRLieferscheinposition) resultListIterator3
                            .next();

                    // 16882 Ohne Lagerbewertete Artikel
                    if (lieferscheinpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)
                            && lieferscheinpos.getFlrartikel() != null
                            && !Helper.short2boolean(lieferscheinpos.getFlrartikel().getB_lagerbewertet())) {
                        if (bMitNichtLagerbewertetenArtikeln == false) {
                            continue;
                        }
                    }

                    // PJ 14525
                    BigDecimal umsatzLs = lieferscheinpos
                            .getN_nettogesamtpreisplusversteckteraufschlagminusrabatt()
                            .divide(rechpos.getFlrrechnung().getN_kurs(), 4, BigDecimal.ROUND_HALF_EVEN);
                    umsatzLs = umsatzLs.multiply(lieferscheinpos.getN_menge());

                    if (lieferscheinpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)
                            && iOptionGruppierung
                                    .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                            && iOptionGruppierung
                                    .intValue() != LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {
                        kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                        kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                .add(umsatzLs);
                        // GESAMTSUMME
                        kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatzLs));
                        kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(umsatzLs));

                    } else if (lieferscheinpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_IDENT)
                            || (lieferscheinpos.getPositionsart_c_nr()
                                    .equals(LocaleFac.POSITIONSART_HANDEINGABE)
                                    && iOptionGruppierung
                                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR)
                            || (lieferscheinpos.getPositionsart_c_nr()
                                    .equals(LocaleFac.POSITIONSART_HANDEINGABE)
                                    && iOptionGruppierung
                                            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT)) {
                        BigDecimal gestpreis = new BigDecimal(0);
                        BigDecimal deckungsbeitrag = new BigDecimal(0);
                        if (ohneDBBetrachtung == false) {
                            try {

                                /**
                                 * @todo Berechnung fuer negative
                                 *       Lieferscheinpositionen einbauen
                                 */
                                if (lieferscheinpos.getN_menge().doubleValue() < 0) {
                                    if (umsatz != null) {
                                        gestpreis = umsatz;
                                    }
                                } else {

                                    if (!rechpos.getPositionsart_c_nr()
                                            .equals(LocaleFac.POSITIONSART_HANDEINGABE)) {

                                        // PJ 16882
                                        if (lieferscheinpos.getFlrartikel() != null
                                                && Helper.short2boolean(lieferscheinpos.getFlrartikel()
                                                        .getB_lagerbewirtschaftet()) == false
                                                && !lieferscheinpos.getFlrartikel().getArtikelart_c_nr()
                                                        .equals(ArtikelFac.ARTIKELART_ARBEITSZEIT)) {
                                            gestpreis = new BigDecimal(0);
                                        } else {
                                            gestpreis = getLagerFac()
                                                    .getGemittelterGestehungspreisEinerAbgangsposition(
                                                            LocaleFac.BELEGART_LIEFERSCHEIN,
                                                            lieferscheinpos.getI_id());
                                            gestpreis = gestpreis.multiply(lieferscheinpos.getN_menge());
                                        }

                                    }
                                }
                            } catch (RemoteException ex2) {
                                if (ex2.getCause() instanceof EJBExceptionLP) {
                                    if (((EJBExceptionLP) ex2.getCause())
                                            .getCode() == EJBExceptionLP.ARTIKEL_KEINE_LAGERBUCHUNG_VORHANDEN) {
                                        // DANN ALLES OK
                                    } else {
                                        throwEJBExceptionLPRespectOld(ex2);
                                    }
                                } else {
                                    throwEJBExceptionLPRespectOld(ex2);
                                }
                            }
                            deckungsbeitrag = umsatzLs.subtract(gestpreis);
                        }

                        // GESAMTSUMME

                        if (rechpos.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_HANDEINGABE)) {
                            deckungsbeitrag = umsatzLs;
                        }

                        kdums.setBdUmsatz(kdums.getBdUmsatz().add(umsatzLs));
                        kdums.setBdDeckungsbeitrag(kdums.getBdDeckungsbeitrag().add(deckungsbeitrag));

                        if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
                            if (lieferscheinpos.getFlrartikel().getFlrartikelklasse() != null) {
                                // Bei richtiger Artikelklasse einfuegen

                                for (int j = 0; j < gruppierung.size(); j++) {
                                    if (gruppierung.get(j).equals(
                                            lieferscheinpos.getFlrartikel().getFlrartikelklasse().getC_nr())) {
                                        kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                .add(umsatzLs);
                                        kdums.getSubSummeDeckungsbeitrag()[j
                                                + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                        .add(deckungsbeitrag);
                                        bSpalteAndrucken[j] = true;

                                    }
                                }
                            } else {
                                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                        .add(deckungsbeitrag);
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
                            if (lieferscheinpos.getFlrartikel().getFlrartikelgruppe() != null) {
                                // Bei richtiger Gruppe einfuegen

                                for (int j = 0; j < gruppierung.size(); j++) {
                                    if (gruppierung.get(j).equals(
                                            lieferscheinpos.getFlrartikel().getFlrartikelgruppe().getC_nr())) {
                                        kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                .add(umsatzLs);
                                        kdums.getSubSummeDeckungsbeitrag()[j
                                                + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                        .add(deckungsbeitrag);
                                        bSpalteAndrucken[j] = true;

                                    }
                                }
                            } else {
                                kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                                kdums.getSubSummeDeckungsbeitrag()[0] = kdums.getSubSummeDeckungsbeitrag()[0]
                                        .add(deckungsbeitrag);
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {

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

                            String queryString = "SELECT stkl.flrfertigungsgruppe FROM FLRStueckliste AS stkl"
                                    + " WHERE stkl.artikel_i_id= " + lieferscheinpos.getFlrartikel().getI_id();

                            Query query = sessionFTGruppe.createQuery(queryString);
                            List<?> resultList = query.list();
                            Iterator<?> resultListIteratorFTGruppe = resultList.iterator();

                            if (resultListIteratorFTGruppe.hasNext()) {
                                FLRFertigungsgruppe gru = (FLRFertigungsgruppe) resultListIteratorFTGruppe
                                        .next();

                                if (gru != null) {
                                    // Bei richtiger Gruppe einfuegen
                                    for (int j = 0; j < gruppierung.size(); j++) {
                                        if (gruppierung.get(j).equals(gru.getC_bez())) {
                                            kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                                    .add(umsatzLs);
                                            kdums.getSubSummeDeckungsbeitrag()[j
                                                    + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                            .add(deckungsbeitrag);
                                            bSpalteAndrucken[j] = true;
                                        }
                                    }
                                } else {
                                    kdums.getSubSummeUmsatz()[0] = kdums.getSubSummeUmsatz()[0].add(umsatzLs);
                                    kdums.getSubSummeDeckungsbeitrag()[0] = kdums
                                            .getSubSummeDeckungsbeitrag()[0].add(deckungsbeitrag);
                                }
                                sessionFTGruppe.close();
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {

                            Calendar cZeile = Calendar.getInstance();
                            cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                            String jahr = cZeile.get(Calendar.YEAR) + "";

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j).equals(jahr)) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatzLs);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        } else if (iOptionGruppierung
                                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_MONAT) {

                            Calendar cZeile = Calendar.getInstance();
                            cZeile.setTimeInMillis(rechpos.getFlrrechnung().getD_belegdatum().getTime());
                            String jahrMonat = monate[cZeile.get(Calendar.MONTH)] + " "
                                    + cZeile.get(Calendar.YEAR);

                            for (int j = 0; j < gruppierung.size(); j++) {
                                if (gruppierung.get(j).equals(jahrMonat)) {
                                    kdums.getSubSummeUmsatz()[j + 1] = kdums.getSubSummeUmsatz()[j + 1]
                                            .add(umsatzLs);
                                    kdums.getSubSummeDeckungsbeitrag()[j
                                            + 1] = kdums.getSubSummeDeckungsbeitrag()[j + 1]
                                                    .add(deckungsbeitrag);
                                    bSpalteAndrucken[j] = true;
                                }
                            }
                        }
                    }

                }
                session3.close();

            }
        }
        session2.close();
        if (results2.size() > 0) {
            gesamtListe.add(kdums);

            gesamtUmsatz = gesamtUmsatz.add(kdums.getBdUmsatz());
            gesamtDeckungsbeitrag = gesamtDeckungsbeitrag.add(kdums.getBdDeckungsbeitrag());
        }
    }
    session.close();

    JasperPrintLP print = null;

    // NACH UMSATZ SORTIEREN
    int n = gesamtListe.size();
    Object temp;
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - 1 - i; j++) {

            if (bUmsatz == true) {

                double a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getBdUmsatz().doubleValue();
                double b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getBdUmsatz().doubleValue();

                if (iOptionGruppierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                        && iOptionSortierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
                    if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_AKTUELLESJAHR) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 1].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 1].doubleValue();
                    } else if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_VORJAHR
                            && ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSubSummeUmsatz().length > 1) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 2].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeUmsatz()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeUmsatz().length - 2].doubleValue();
                    }
                }

                if (a < b) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            } else {
                double a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getBdDeckungsbeitrag().doubleValue();
                double b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getBdDeckungsbeitrag()
                        .doubleValue();

                if (iOptionGruppierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR
                        && iOptionSortierung == REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
                    if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_AKTUELLESJAHR) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 1].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 1].doubleValue();
                    } else if (iSortierbasisJahre == REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHRE_SORTIERBASIS_UMSATZ_VORJAHR
                            && ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                    .getSubSummeDeckungsbeitrag().length > 1) {
                        a = ((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 2].doubleValue();
                        b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1))
                                .getSubSummeDeckungsbeitrag()[((KundeUmsatzstatistikDto) gesamtListe.get(j))
                                        .getSubSummeDeckungsbeitrag().length - 2].doubleValue();
                    }
                }

                if (a < b) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }

            }
        }
    }

    // ABC-Klassifizierung
    // A=80%
    // B=15%
    // C=5%

    double dTempUmsatz = gesamtUmsatz.doubleValue();
    double dTempDeckungsbeitrag = gesamtDeckungsbeitrag.doubleValue();

    ParametermandantDto mandantparameterA = null;
    ParametermandantDto mandantparameterB = null;
    try {
        mandantparameterA = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_KUNDEN, ParameterFac.PARAMETER_KUNDENBEWERTUNG_WERT_A);
        mandantparameterB = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_KUNDEN, ParameterFac.PARAMETER_KUNDENBEWERTUNG_WERT_B);

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

    BigDecimal paramBUmsatz = gesamtUmsatz.multiply((new BigDecimal(mandantparameterB.getCWert())
            .divide(new BigDecimal(100), 4, BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramAUmsatz = gesamtUmsatz.multiply((new BigDecimal(mandantparameterA.getCWert())
            .divide(new BigDecimal(100), 4, BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramBDeckungsbeitrag = gesamtDeckungsbeitrag
            .multiply((new BigDecimal(mandantparameterB.getCWert()).divide(new BigDecimal(100), 4,
                    BigDecimal.ROUND_HALF_EVEN)));

    BigDecimal paramADeckungsbeitrag = gesamtDeckungsbeitrag
            .multiply((new BigDecimal(mandantparameterA.getCWert()).divide(new BigDecimal(100), 4,
                    BigDecimal.ROUND_HALF_EVEN)));

    for (int i = 0; i < gesamtListe.size(); i++) {
        KundeUmsatzstatistikDto dto = (KundeUmsatzstatistikDto) gesamtListe.get(i);

        if (bUmsatz == true) {
            if (dTempUmsatz < gesamtUmsatz.doubleValue()
                    - (paramAUmsatz.doubleValue() + paramBUmsatz.doubleValue())) {
                dto.setAbcKlassifizierung("C");
            } else if (dTempUmsatz < paramBUmsatz.doubleValue()) {
                dto.setAbcKlassifizierung("B");
            } else {
                dto.setAbcKlassifizierung("A");
            }

            dTempUmsatz = dTempUmsatz - dto.getBdUmsatz().doubleValue();
        } else {
            if (dTempDeckungsbeitrag < gesamtDeckungsbeitrag.doubleValue()
                    - (paramADeckungsbeitrag.doubleValue() + paramBDeckungsbeitrag.doubleValue())) {
                dto.setAbcKlassifizierung("C");
            } else if (dTempDeckungsbeitrag < paramBDeckungsbeitrag.doubleValue()) {
                dto.setAbcKlassifizierung("B");
            } else {
                dto.setAbcKlassifizierung("A");
            }

            dTempDeckungsbeitrag = dTempDeckungsbeitrag - dto.getBdDeckungsbeitrag().doubleValue();

        }
        gesamtListe.set(i, dto);
    }

    // Nach Name sortieren

    // NACH NAME SORTIEREN, Wenn angegeben

    if (iOptionSortierung
            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_FIRMANNAME) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSKunde();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSKunde();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            }
        }
    }

    else if (iOptionSortierung.intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_LKZ) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSLkz();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSLkz();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                } else if (a.compareTo(b) == 0) {
                    String plz1 = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSPlz();
                    String plz2 = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSPlz();

                    if (plz1.compareTo(plz2) > 0) {
                        temp = gesamtListe.get(j);
                        gesamtListe.set(j, gesamtListe.get(j + 1));
                        gesamtListe.set(j + 1, temp);
                    }

                }
            }
        }
    }

    // Nach Branche/Partnerklasse Gruppieren

    if (iOptionKundengruppierung
            .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE
            || iOptionKundengruppierung
                    .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE) {
        n = gesamtListe.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - 1 - i; j++) {
                String a = ((KundeUmsatzstatistikDto) gesamtListe.get(j)).getSKundengruppierung();
                String b = ((KundeUmsatzstatistikDto) gesamtListe.get(j + 1)).getSKundengruppierung();
                if (a.compareTo(b) > 0) {
                    temp = gesamtListe.get(j);
                    gesamtListe.set(j, gesamtListe.get(j + 1));
                    gesamtListe.set(j + 1, temp);
                }
            }
        }

    }

    // SPALTENHEADER entfernen, wenn Spalte leer
    for (int i = bSpalteAndrucken.length; i > 0; i--) {
        if (bSpalteAndrucken[i - 1] == false) {
            gruppierung.remove(i - 1);
        }
    }

    int[] spaltenDrucken = new int[gruppierung.size() + 1];
    spaltenDrucken[0] = 0;
    int x = 1;
    for (int i = 1; i < bSpalteAndrucken.length + 1; i++) {
        if (bSpalteAndrucken[i - 1] == true) {
            spaltenDrucken[x] = i;
            x++;
        }
    }

    int seiten_breite = (gruppierung.size() / 8) + 1;

    for (int i = 0; i < seiten_breite; i++) {
        index = -1;
        if (bUmsatz == true) {
            sAktuellerReport = LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK;
        } else {
            sAktuellerReport = LagerReportFac.REPORT_KUNDEDBSTATISTIK;
        }
        data = new Object[gesamtListe.size()][28];
        for (int j = 0; j < gesamtListe.size(); j++) {
            KundeUmsatzstatistikDto dto = (KundeUmsatzstatistikDto) gesamtListe.get(j);
            data[j][REPORT_KUNDEUMSATZSTATISTIK_KUNDENGRUPPIERUNG] = dto.getSKundengruppierung();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_KUNDE] = dto.getSKunde();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_UMSATZ] = dto.getBdUmsatz();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_PLZ] = dto.getSPlz();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_LKZ] = dto.getSLkz();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_KUNDENNUMMER] = dto.getIKundennummer();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_DECKUNGSBEITRAG] = dto.getBdDeckungsbeitrag();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_ERSTUMSATZ] = new Boolean(dto.isBErstumsatz());
            data[j][REPORT_KUNDEUMSATZSTATISTIK_ABCKLASSE] = dto.getAbcKlassifizierung();
            data[j][REPORT_KUNDEUMSATZSTATISTIK_ZAHLUNGSZIEL] = getMandantFac()
                    .zahlungszielFindByIIdLocaleOhneExc(dto.getIZahlungsziel(), theClientDto.getLocMandant(),
                            theClientDto);
            data[j][REPORT_KUNDEUMSATZSTATISTIK_LIEFERART] = getLocaleFac().lieferartFindByIIdLocaleOhneExc(
                    dto.getILieferart(), theClientDto.getLocMandant(), theClientDto);
            data[j][REPORT_KUNDEUMSATZSTATISTIK_SPEDITEUR] = getMandantFac()
                    .spediteurFindByPrimaryKey(dto.getISpediteur()).getCNamedesspediteurs();

            try {
                if (i == 0) {
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1] = dto.getSubSummeUmsatz()[0];
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1DB] = dto.getSubSummeDeckungsbeitrag()[0];
                } else {
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1] = dto
                            .getSubSummeUmsatz()[spaltenDrucken[0 + (i * 8)]];
                    data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE1DB] = dto
                            .getSubSummeDeckungsbeitrag()[spaltenDrucken[0 + (i * 8)]];
                }
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE2] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[1 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE2DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[1 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE3] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[2 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE3DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[2 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE4] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[3 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE4DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[3 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE5] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[4 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE5DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[4 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE6] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[5 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE6DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[5 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE7] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[6 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE7DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[6 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE8] = dto
                        .getSubSummeUmsatz()[spaltenDrucken[7 + (i * 8)]];
                data[j][REPORT_KUNDEUMSATZSTATISTIK_SPALTE8DB] = dto
                        .getSubSummeDeckungsbeitrag()[spaltenDrucken[7 + (i * 8)]];
            } catch (ArrayIndexOutOfBoundsException ex1) {
                // nothing
            }

        }

        HashMap<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("P_VON", tVon);
        parameter.put("P_BIS", tBis);

        if (bUmsatz == true) {
            parameter.put("P_UMSATZ", new Boolean(true));
        } else {
            parameter.put("P_UMSATZ", new Boolean(false));
        }

        if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_BRANCHE) {
            parameter.put("P_GRUPPIERUNGKUNDE",
                    getTextRespectUISpr("lp.branche", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionKundengruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_KUNDENGRUPPIERUNG_PARTNERKLASSE) {
            parameter.put("P_GRUPPIERUNGKUNDE", "Partnerklasse");
        }

        if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELKLASSE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.artikelklasse", theClientDto.getMandant(),
                    theClientDto.getLocUi()));
        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_ARTIKELGRUPPE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.artikelgruppe", theClientDto.getMandant(),
                    theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_FERTIGUNGSGRUPPE) {
            parameter.put("P_GRUPPIERUNG", getTextRespectUISpr("lp.fertigungsgruppe", theClientDto.getMandant(),
                    theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {
            parameter.put("P_GRUPPIERUNG",
                    getTextRespectUISpr("lp.jahr", theClientDto.getMandant(), theClientDto.getLocUi()));

        } else if (iOptionGruppierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_GRUPPIERUNG_JAHR) {
            parameter.put("P_GRUPPIERUNG",
                    getTextRespectUISpr("lp.monat", theClientDto.getMandant(), theClientDto.getLocUi()));

        }
        if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_FIRMANNAME) {
            parameter.put("P_SORTIERUNG", "Firmenname");
        } else if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_UMSATZ) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("er.umsatz", theClientDto.getMandant(), theClientDto.getLocUi()));

        } else if (iOptionSortierung
                .intValue() == LagerReportFac.REPORT_KUNDEUMSATZSTATISTIK_OPTION_SORTIERUNG_LKZ) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.lkzplz", theClientDto.getMandant(), theClientDto.getLocUi()));

        }
        parameter.put("P_STATISTIKADRESSE", new Boolean(bVerwendeStatistikadresse));

        parameter.put("P_MITNICHTLAGERBEWERTETENARTIKELN", new Boolean(bMitNichtLagerbewertetenArtikeln));
        parameter.put("P_OHNE_DBBETRACHTUNG", new Boolean(ohneDBBetrachtung));

        try {

            parameter.put("P_GRUPPEA", mandantparameterA.getCWertAsObject());
            parameter.put("P_GRUPPEB", mandantparameterB.getCWertAsObject());

            if (i == 0) {
                parameter.put("Spalte1", "Unbekannt");
                parameter.put("Spalte2", gruppierung.get(0 + (i * 8)));
                parameter.put("Spalte3", gruppierung.get(1 + (i * 8)));
                parameter.put("Spalte4", gruppierung.get(2 + (i * 8)));
                parameter.put("Spalte5", gruppierung.get(3 + (i * 8)));
                parameter.put("Spalte6", gruppierung.get(4 + (i * 8)));
                parameter.put("Spalte7", gruppierung.get(5 + (i * 8)));
                parameter.put("Spalte8", gruppierung.get(6 + (i * 8)));

            } else {

                parameter.put("Spalte1", gruppierung.get(7 + (i * 8) - 8));
                parameter.put("Spalte2", gruppierung.get(8 + (i * 8) - 8));
                parameter.put("Spalte3", gruppierung.get(1 + (i * 8)));
                parameter.put("Spalte4", gruppierung.get(2 + (i * 8)));
                parameter.put("Spalte5", gruppierung.get(3 + (i * 8)));
                parameter.put("Spalte6", gruppierung.get(4 + (i * 8)));
                parameter.put("Spalte7", gruppierung.get(5 + (i * 8)));
                parameter.put("Spalte8", gruppierung.get(6 + (i * 80)));

            }

        } catch (IndexOutOfBoundsException ex1) {
            // nothing
        }
        initJRDS(parameter, LagerReportFac.REPORT_MODUL, sAktuellerReport, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);

        if (print == null) {
            print = getReportPrint();
        } else {
            print = Helper.addReport2Report(print, getReportPrint().getPrint());
        }
    }

    return print;

}

From source file:com.lp.server.artikel.ejbfac.VkPreisfindungFacBean.java

License:Open Source License

public void pruefeVkpfStaffelmenge(TheClientDto theClientDto) {
    Session session = FLRSessionFactory.getFactory().openSession();
    ArrayList<Integer> rids = new ArrayList<Integer>();
    try {/* ww w.  j  av  a2s. co  m*/
        org.hibernate.Criteria crit = session.createCriteria(FLRVkpfStaffelmenge.class);
        crit.add(Restrictions.isNull("t_preisgueltigbis"));
        crit.addOrder(Order.asc("artikel_i_id"));
        Integer artikel_i_id = null;
        Integer tmp_i_id = new Integer(0);
        List<?> vkpfsmList = crit.list();
        Iterator<?> it = vkpfsmList.iterator();
        while (it.hasNext()) {
            FLRVkpfStaffelmenge item = (FLRVkpfStaffelmenge) it.next();
            artikel_i_id = item.getArtikel_i_id();
            if (!artikel_i_id.equals(tmp_i_id)) {
                rids.add(artikel_i_id);
                tmp_i_id = artikel_i_id;
            }
        }
        BigDecimal tmpmenge = null;
        for (int i = 0; i < rids.size(); i++) {
            String queryString = "from FLRVkpfStaffelmenge flrvkpfstaffelmenge  WHERE flrvkpfstaffelmenge.artikel_i_id = "
                    + rids.get(i)
                    + " ORDER BY flrvkpfstaffelmenge.n_menge,flrvkpfstaffelmenge.t_preisgueltigab";
            org.hibernate.Query query = session.createQuery(queryString);
            List<?> rList = query.list();
            Iterator<?> rlIterator = rList.iterator();
            ArrayList<FLRVkpfStaffelmenge> items = null;
            tmpmenge = new BigDecimal(0);
            tmpmenge = tmpmenge.setScale(4);
            BigDecimal menge = null;
            while (rlIterator.hasNext()) {
                FLRVkpfStaffelmenge item = (FLRVkpfStaffelmenge) rlIterator.next();
                menge = item.getN_menge();
                System.out.println(rids.get(i) + " " + item.getN_menge() + " " + item.getT_preisgueltigab()
                        + " " + item.getT_preisgueltigbis());
                if ((menge.compareTo(tmpmenge) != 0)) {
                    if (items != null) {
                        int s = items.size();
                        if (s >= 2) {
                            if (items.get(s - 2).getT_preisgueltigbis() == null) {
                                Vkpfmengenstaffel vkpfMengenstaffel = null;
                                // try {
                                vkpfMengenstaffel = em.find(Vkpfmengenstaffel.class,
                                        items.get(s - 2).getI_id());
                                if (vkpfMengenstaffel == null) {
                                }
                                // }
                                // catch (FinderException ex) {
                                // }
                                java.sql.Date d = new Date(items.get(s - 1).getT_preisgueltigab().getTime());
                                vkpfMengenstaffel.setTPreisgueltigbis(d);
                            }
                        }
                    }
                    items = new ArrayList<FLRVkpfStaffelmenge>();
                    tmpmenge = menge;
                }
                items.add(item);
            }
        }
    } finally {
        if (session != null) {
            session.close();
        }
    }

}

From source file:com.lp.server.bestellung.ejbfac.BestellungReportFacBean.java

License:Open Source License

/**
 * Alle offenen Bestellungen fuer einen bestimmten Mandanten drucken.
 * //ww  w  . j av a 2 s  . c o m
 * @param krit
 *            die Filter- und Sortierkriterien
 * @param dStichtag
 *            Date
 * @param bSortierungNachLiefertermin
 *            Boolean
 * @param artikelklasseIId
 *            Integer
 * @param artikelgruppeIId
 *            Integer
 * @param artikelCNrVon
 *            String
 * @param artikelCNrBis
 *            String
 * @param projektCBezeichnung
 *            String
 * @param auftragIId
 *            Integer
 * @param theClientDto
 *            der aktuelle Benutzer
 * @throws EJBExceptionLP
 *             Ausnahme
 * @return JasperPrint der Druck
 */
@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printBestellungOffene(ReportJournalKriterienDto krit, Date dStichtag,
        Boolean bSortierungNachLiefertermin, Integer artikelklasseIId, Integer artikelgruppeIId,
        String artikelCNrVon, String artikelCNrBis, String projektCBezeichnung, Integer auftragIId,
        Integer iArt, boolean bNurAngelegte, boolean bNurOffeneMengenAnfuehren, Integer[] projekte,
        TheClientDto theClientDto) throws EJBExceptionLP {
    useCase = UC_OFFENE;
    int iAnzahlZeilen = 0;

    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = null;
    // vom Stichtag die Uhrzeit abschneiden
    dStichtag = Helper.cutDate(dStichtag);

    // die dem Report uebergeben
    HashMap<String, Object> parameter = new HashMap<String, Object>();
    parameter.put("P_STICHTAG", Helper.formatDatum(dStichtag, theClientDto.getLocUi()));
    dStichtag = Helper.addiereTageZuDatum(dStichtag, 1);

    session = factory.openSession();

    boolean darfEinkaufspreisSehen = getTheJudgeFac().hatRecht(RechteFac.RECHT_LP_DARF_PREISE_SEHEN_EINKAUF,
            theClientDto);
    boolean bProjektklammer = getMandantFac().darfAnwenderAufZusatzfunktionZugreifen(
            MandantFac.ZUSATZFUNKTION_PROJEKTKLAMMER, theClientDto.getMandant());
    // Hiberante Criteria fuer alle Tabellen ausgehend von meiner
    // Haupttabelle anlegen,
    // nach denen ich filtern und sortieren kann
    Criteria crit = session.createCriteria(FLRBestellung.class);

    // Einschraenkung auf den aktuellen Mandanten
    crit.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_MANDANT_C_NR, theClientDto.getMandant()));

    // Einschraenkung nach Status Offen, Erledigt
    Collection<String> cStati = new LinkedList<String>();
    cStati.add(BestellungFac.BESTELLSTATUS_ANGELEGT);
    if (bNurAngelegte == false) {
        cStati.add(BestellungFac.BESTELLSTATUS_OFFEN);
        cStati.add(BestellungFac.BESTELLSTATUS_BESTAETIGT);
        cStati.add(BestellungFac.BESTELLSTATUS_ERLEDIGT);
    }
    crit.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGSTATUS_C_NR, cStati));

    // Das Belegdatum muss vor dem Stichtag liegen
    crit.add(Restrictions.le(BestellungFac.FLR_BESTELLUNG_T_BELEGDATUM, dStichtag));

    /**
     * @todo MB->MB hier sollte auch das erledigt-datum ziehen, das gibts
     *       aber in der BS nicht :-(
     */

    crit.add(Restrictions.or(Restrictions.ge(BestellungFac.FLR_BESTELLUNG_T_MANUELLGELIEFERT, dStichtag),
            Restrictions.isNull(BestellungFac.FLR_BESTELLUNG_T_MANUELLGELIEFERT)));

    // Das Belegdatum muss vor dem Stichtag liegen
    crit.add(Restrictions.le(BestellungFac.FLR_BESTELLUNG_T_BELEGDATUM, dStichtag));
    // Filter nach Projektbezeichnung
    if (projektCBezeichnung != null) {
        crit.add(Restrictions.ilike(BestellungFac.FLR_BESTELLUNG_C_BEZPROJEKTBEZEICHNUNG,
                "%" + projektCBezeichnung + "%"));
    }

    // Projektklammer
    if (projekte != null && projekte.length > 0) {
        crit.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_PROJEKT_I_ID, projekte));

        String text = "";
        for (int i = 0; i < projekte.length; i++) {

            try {
                ProjektDto pDto = getProjektFac().projektFindByPrimaryKey(projekte[i]);

                text += pDto.getCNr() + ", ";
            } catch (RemoteException e) {
                throwEJBExceptionLPRespectOld(e);
            }

        }

        parameter.put("P_PROJEKTE", text);

    }

    // Filter nach Auftrag
    if (auftragIId != null) {
        crit.add(Restrictions.like(BestellungFac.FLR_BESTELLUNG_AUFTRAG_I_ID, auftragIId));
    }
    // Einschraenkung nach einer bestimmten Kostenstelle
    if (krit.kostenstelleIId != null) {
        crit.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_KOSTENSTELLE_I_ID, krit.kostenstelleIId));
    }

    // Einschraenkung nach einem bestimmten Lieferanten
    if (krit.lieferantIId != null) {
        crit.add(
                Restrictions.eq(BestellungFac.FLR_BESTELLUNG_LIEFERANT_I_ID_BESTELLADRESSE, krit.lieferantIId));
    }
    // Filter nach Bestellungsart
    Collection<String> cArt = null;
    if (iArt != null) {
        if (iArt == 1) {
            // Ohne Rahmenbestellungen
            cArt = new LinkedList<String>();
            cArt.add(BestellungFac.BESTELLUNGART_FREIE_BESTELLUNG_C_NR);
            cArt.add(BestellungFac.BESTELLUNGART_ABRUFBESTELLUNG_C_NR);
            cArt.add(BestellungFac.BESTELLUNGART_LEIHBESTELLUNG_C_NR);
            crit.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGART_C_NR, cArt));
        } else if (iArt == 2) {
            // Nur Rahmenbestellungen
            cArt = new LinkedList<String>();
            cArt.add(BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR);
            crit.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGART_C_NR, cArt));
        }
    }

    // Sortierung nach Kostenstelle ist immer die erste Sortierung
    if (krit.bSortiereNachKostenstelle) {
        crit.createCriteria(BestellungFac.FLR_BESTELLUNG_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
    }
    // Sortierung nach Kunde, eventuell innerhalb der Kostenstelle
    if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
        crit.createCriteria(BestellungFac.FLR_BESTELLUNG_FLRLIEFERANT).createCriteria(LieferantFac.FLR_PARTNER)
                .addOrder(Order.asc(PartnerFac.FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1));

    }
    // Sortierung nach Projekt, eventuell innerhalb der Kostenstelle
    else if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PROJEKT) {

        if (bProjektklammer == true) {

            crit.createAlias(BestellungFac.FLR_BESTELLUNG_FLRPROJEKT, "p");

            crit.addOrder(Order.asc("p.c_nr"));
        } else {
            crit.addOrder(Order.asc(BestellungFac.FLR_BESTELLUNG_C_BEZPROJEKTBEZEICHNUNG));
        }

    }
    // Sortierung nach Bestellungart, eventuell innerhalb der
    // Kostenstelle
    // else if (krit.iSortierung ==
    // ReportJournalKriterienDto.KRIT_SORT_NACH_ART) {
    // crit.addOrder(Order
    // .asc(BestellungFac.FLR_BESTELLUNG_BESTELLUNGART_C_NR));
    // }

    // Sortierung nach Liefertermin (optional)
    if (bSortierungNachLiefertermin != null && bSortierungNachLiefertermin.booleanValue()) {
        crit.addOrder(Order.asc(BestellungFac.FLR_BESTELLUNG_T_LIEFERTERMIN));
    }

    // es wird in jedem Fall nach der Belegnummer sortiert
    crit.addOrder(Order.asc("c_nr"));

    List<?> list = crit.list();
    Iterator<?> it = list.iterator();

    ArrayList<FLRBestellung> bestellung = new ArrayList<FLRBestellung>();
    while (it.hasNext()) {
        FLRBestellung flrbestellung = (FLRBestellung) it.next();
        session = factory.openSession();
        Criteria crit1 = session.createCriteria(FLRBestellposition.class);
        Criteria crit1Bestellung = crit1.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRBESTELLUNG);
        // nur Positionen der aktuellen Bestellung.
        crit1Bestellung.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_I_ID, flrbestellung.getI_id()));
        // keine erledigten Positionen.
        crit1.add(Restrictions.ne(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONSTATUS_C_NR,
                BestellpositionFac.BESTELLPOSITIONSTATUS_ERLEDIGT));
        // keine geliferten Positionen.
        crit1.add(Restrictions.ne(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONSTATUS_C_NR,
                BestellpositionFac.BESTELLPOSITIONSTATUS_GELIEFERT));
        // Der Liefertermin muss vor dem Stichtag liegen
        crit1.add(Restrictions.or(Restrictions.and(
                // Wenn der AB-Termin
                // eingegeben ist, zieht
                // der
                Restrictions.isNotNull(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN),
                Restrictions
                        .le(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN, dStichtag)),
                Restrictions.and(
                        // sonst der
                        // uebersteuerte
                        // Liefertermin
                        Restrictions
                                .isNull(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN),
                        Restrictions.le(BestellpositionFac.FLR_BESTELLPOSITION_T_UEBERSTEUERTERLIEFERTERMIN,
                                dStichtag))));

        if (artikelklasseIId != null || artikelgruppeIId != null || artikelCNrVon != null
                || artikelCNrBis != null) {
            // Wenn nach Artikelklassen/Gruppen gefiltert wird, dann
            // kommen nur Ident-Positionen
            crit1.add(Restrictions.eq(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONART_C_NR,
                    BestellpositionFac.BESTELLPOSITIONART_IDENT));
            Criteria critArtikel = crit1.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRARTIKEL);
            if (artikelklasseIId != null) {
                critArtikel.createCriteria(ArtikelFac.FLR_ARTIKEL_FLRARTIKELKLASSE)
                        .add(Restrictions.eq("i_id", artikelklasseIId));
            }
            if (artikelgruppeIId != null) {
                critArtikel.createCriteria(ArtikelFac.FLR_ARTIKEL_FLRARTIKELGRUPPE)
                        .add(Restrictions.eq("i_id", artikelgruppeIId));
            }
            if (artikelCNrVon != null) {
                critArtikel.add(Restrictions.ge(ArtikelFac.FLR_ARTIKEL_C_NR, artikelCNrVon));
            }
            if (artikelCNrBis != null) {
                critArtikel.add(Restrictions.le(ArtikelFac.FLR_ARTIKEL_C_NR, artikelCNrBis));
            }
        }
        List<?> resultList = crit1.list();
        // Wenn die Bestellung anzuzeigende Positionen enthaelt, dann in
        // die Liste aufnehmen.
        if (resultList.size() > 0) {
            bestellung.add(flrbestellung);
            iAnzahlZeilen++;
        }
        for (Iterator<?> iter = resultList.iterator(); iter.hasNext();) {
            FLRBestellposition item = (FLRBestellposition) iter.next();
            if (item.getN_menge() != null) {
                bestellung.add(null);
                iAnzahlZeilen++;
            }
        }
    }

    data = new Object[iAnzahlZeilen][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ANZAHL_SPALTEN];

    int i = 0;
    while (i < iAnzahlZeilen) {
        FLRBestellung flrbestellung = null;
        if (bestellung.get(i) != null) {
            flrbestellung = (FLRBestellung) bestellung.get(i);
            data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGCNR] = flrbestellung.getC_nr();
            data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGARTCNR] = flrbestellung
                    .getBestellungart_c_nr();

            if (bProjektklammer && flrbestellung.getProjekt_i_id() != null) {
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_PROJEKT] = flrbestellung.getFlrprojekt()
                        .getC_nr();
            } else {
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_PROJEKT] = flrbestellung
                        .getC_bezprojektbezeichnung();
            }

            data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGLIEFERANT] = flrbestellung
                    .getFlrlieferant().getFlrpartner().getC_name1nachnamefirmazeile1();

            // PJ 14752

            String sortierstring = "";
            if (krit.bSortiereNachKostenstelle == true) {
                sortierstring = Helper.fitString2Length(flrbestellung.getFlrkostenstelle().getC_nr(), 80, ' ');
            }
            if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_IDENT) {
                sortierstring += Helper.fitString2Length(
                        flrbestellung.getFlrlieferant().getFlrpartner().getC_name1nachnamefirmazeile1(), 80,
                        ' ') + Helper.fitString2Length("", 80, ' ');
            }
            if (bSortierungNachLiefertermin == true) {
                sortierstring += Helper.fitString2Length(flrbestellung.getT_liefertermin() + "", 15, ' ');
            }
            data[i][REPORT_BESTELLUNG_OFFENE_SORTIERKRITERIUM] = sortierstring;

            data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGDATUM] = Helper
                    .formatDatum(flrbestellung.getT_belegdatum(), theClientDto.getLocUi());
            if (flrbestellung.getFlrkostenstelle() != null) {
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_KOSTENSTELLECNR] = flrbestellung
                        .getFlrkostenstelle().getC_nr();
            }
            i++;
        }
        session = factory.openSession();
        Criteria crit1 = session.createCriteria(FLRBestellpositionReport.class);
        // Keine erledigten Positionen.
        crit1.add(Restrictions.ne(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONSTATUS_C_NR,
                BestellpositionFac.BESTELLPOSITIONSTATUS_ERLEDIGT));
        crit1.add(Restrictions.ne(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONSTATUS_C_NR,
                BestellpositionFac.BESTELLPOSITIONSTATUS_GELIEFERT));

        // Der Liefertermin muss vor dem Stichtag liegen
        crit1.add(Restrictions.or(Restrictions.and(
                // Wenn der AB-Termin
                // eingegeben ist, zieht
                // der
                Restrictions.isNotNull(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN),
                Restrictions
                        .le(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN, dStichtag)),
                Restrictions.and(
                        // sonst der
                        // uebersteuerte
                        // Liefertermin
                        Restrictions
                                .isNull(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN),
                        Restrictions.le(BestellpositionFac.FLR_BESTELLPOSITION_T_UEBERSTEUERTERLIEFERTERMIN,
                                dStichtag))));

        // Nur Positionen der aktuellen Bestellung.
        Criteria crit1Bestellung = crit1.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRBESTELLUNG);
        crit1Bestellung.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_I_ID, flrbestellung.getI_id()));
        if (artikelklasseIId != null || artikelgruppeIId != null || artikelCNrVon != null
                || artikelCNrBis != null) {
            // Wenn nach Artikelklassen/Gruppen gefiltert wird, dann
            // kommen nur Ident-Positionen
            crit1.add(Restrictions.eq(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONART_C_NR,
                    BestellpositionFac.BESTELLPOSITIONART_IDENT));
            Criteria critArtikel = crit1.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRARTIKEL);
            if (artikelklasseIId != null) {
                critArtikel.createCriteria(ArtikelFac.FLR_ARTIKEL_FLRARTIKELKLASSE)
                        .add(Restrictions.eq("i_id", artikelklasseIId));
            }
            if (artikelgruppeIId != null) {
                critArtikel.createCriteria(ArtikelFac.FLR_ARTIKEL_FLRARTIKELGRUPPE)
                        .add(Restrictions.eq("i_id", artikelgruppeIId));
            }
            if (artikelCNrVon != null) {
                critArtikel.add(Restrictions.ge(ArtikelFac.FLR_ARTIKEL_C_NR, artikelCNrVon));
            }
            if (artikelCNrBis != null) {
                critArtikel.add(Restrictions.le(ArtikelFac.FLR_ARTIKEL_C_NR, artikelCNrBis));
            }
        }

        List<?> resultList = crit1.list();
        for (Iterator<?> iter = resultList.iterator(); iter.hasNext();) {
            FLRBestellpositionReport item = (FLRBestellpositionReport) iter.next();
            if (item.getN_menge() != null) {
                String artikelCNr = null;
                /**
                 * @todo das ist nicht sehr sauber ...
                 */
                if (item.getFlrartikel().getC_nr().startsWith("~")) {
                    artikelCNr = BestellungReportFac.REPORT_VORKALKULATION_ZEICHEN_FUER_HANDEINGABE;
                } else {
                    artikelCNr = item.getFlrartikel().getC_nr();
                }
                Criteria critWep = session.createCriteria(FLRWareneingangspositionen.class);
                critWep.createCriteria("flrbestellposition").add(Restrictions.eq("i_id", item.getI_id()));
                List<?> wepResultList = critWep.list();
                Iterator<?> wepResultListIterator = wepResultList.iterator();

                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGCNR] = flrbestellung.getC_nr();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGARTCNR] = flrbestellung
                        .getBestellungart_c_nr();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_PROJEKT] = flrbestellung
                        .getC_bezprojektbezeichnung();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGLIEFERANT] = flrbestellung
                        .getFlrlieferant().getFlrpartner().getC_name1nachnamefirmazeile1();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELCNR] = artikelCNr;

                // SP903
                if (item.getPosition_i_id_artikelset() != null) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_SETARTIKEL_TYP] = ArtikelFac.SETARTIKEL_TYP_POSITION;
                } else {

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

                    sessionSet = factory.openSession();
                    Criteria critSet = sessionSet.createCriteria(FLRBestellpositionReport.class);
                    critSet.add(Restrictions.eq("position_i_id_artikelset", item.getI_id()));

                    int iZeilen = critSet.list().size();

                    if (iZeilen > 0) {
                        data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_SETARTIKEL_TYP] = ArtikelFac.SETARTIKEL_TYP_KOPF;
                    }
                    sessionSet.close();

                }

                // PJ 14752

                String sortierstring = "";
                if (krit.bSortiereNachKostenstelle == true) {
                    sortierstring = Helper.fitString2Length(flrbestellung.getFlrkostenstelle().getC_nr(), 80,
                            ' ');
                }

                if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_IDENT) {
                    sortierstring += Helper
                            .fitString2Length(flrbestellung.getFlrlieferant().getFlrpartner()
                                    .getC_name1nachnamefirmazeile1(), 80, ' ')
                            + Helper.fitString2Length(artikelCNr, 80, ' ');
                }

                if (bSortierungNachLiefertermin == true) {
                    sortierstring += Helper.fitString2Length(flrbestellung.getT_liefertermin() + "", 15, ' ');
                }

                data[i][REPORT_BESTELLUNG_OFFENE_SORTIERKRITERIUM] = sortierstring;

                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELMENGE] = item.getN_menge();
                BigDecimal bdOffeneLiefermenge = new BigDecimal(0);
                if (BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR
                        .equals(flrbestellung.getBestellungart_c_nr())) {
                    try {
                        BestellpositionDto[] abrufPos = getBestellpositionFac()
                                .bestellpositionFindByBestellpositionIIdRahmenposition(item.getI_id(),
                                        theClientDto);
                        for (int y = 0; y < abrufPos.length; y++) {
                            bdOffeneLiefermenge = bdOffeneLiefermenge
                                    .add(getBestellpositionFac().berechneOffeneMenge(abrufPos[y]));
                        }
                    } catch (RemoteException e) {
                    }
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_OFFENELIEFERUNGEN] = bdOffeneLiefermenge;

                } else {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_OFFENELIEFERUNGEN] = null;
                }
                StringBuffer sbArtikelInfo = new StringBuffer();
                if (item.getC_bezeichnung() != null) {
                    sbArtikelInfo.append(item.getC_bezeichnung());
                } else {
                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKey(item.getFlrartikel().getI_id(), theClientDto);

                    if (artikelDto.getArtikelsprDto() != null) {
                        if (artikelDto.getArtikelsprDto().getCBez() != null) {
                            sbArtikelInfo.append(artikelDto.getArtikelsprDto().getCBez());
                        }
                    }
                }
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELBEZ] = sbArtikelInfo.toString();

                // der Preis wird in Mandantenwaehrung angezeigt, es
                // gilt der hinterlegte Wechselkurs
                BigDecimal bdPreisinmandantenwaehrung = item.getN_nettogesamtpreis();
                BigDecimal wechselkursmandantwaehrungzuauftragswaehrung = null;
                if (!flrbestellung.getWaehrung_c_nr_bestellwaehrung()
                        .equals(theClientDto.getSMandantenwaehrung())) {
                    wechselkursmandantwaehrungzuauftragswaehrung = new BigDecimal(
                            flrbestellung.getF_wechselkursmandantwaehrungbestellungswaehrung().doubleValue());
                    bdPreisinmandantenwaehrung = getBetragMalWechselkurs(bdPreisinmandantenwaehrung,
                            Helper.getKehrwert(wechselkursmandantwaehrungzuauftragswaehrung));
                }
                if (darfEinkaufspreisSehen) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELPREIS] = bdPreisinmandantenwaehrung;
                } else {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELPREIS] = null;
                }

                if (item.getEinheit_c_nr() != null) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELEINHEIT] = item
                            .getEinheit_c_nr().trim();
                }
                if (item.getT_auftragsbestaetigungstermin() != null) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ABTERMIN] = Helper
                            .formatDatum(item.getT_auftragsbestaetigungstermin(), theClientDto.getLocUi());
                }

                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ABNUMMER] = item.getC_abnummer();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ABKOMMENTAR] = item.getC_abkommentar();

                if (item.getT_uebersteuerterliefertermin() != null) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGLIEFERTERMIN] = Helper
                            .formatDatum(item.getT_uebersteuerterliefertermin(), theClientDto.getLocUi());
                } else {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGLIEFERTERMIN] = Helper
                            .formatDatum(item.getFlrbestellung().getT_liefertermin(), theClientDto.getLocUi());
                }
                BigDecimal noffeneMenge = item.getN_menge();
                BigDecimal ngeliferteMenge = new BigDecimal(0);
                if (flrbestellung.getBestellungart_c_nr()
                        .equals(BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR)) {
                    noffeneMenge = item.getN_offenemenge();
                    while (wepResultListIterator.hasNext()) {
                        FLRWareneingangspositionen waren = (FLRWareneingangspositionen) wepResultListIterator
                                .next();
                        ngeliferteMenge = ngeliferteMenge.add(waren.getN_geliefertemenge());
                    }

                } else {
                    while (wepResultListIterator.hasNext()) {
                        FLRWareneingangspositionen waren = (FLRWareneingangspositionen) wepResultListIterator
                                .next();
                        noffeneMenge = noffeneMenge.subtract(waren.getN_geliefertemenge());
                    }
                }
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELGELIFERTEMENGE] = ngeliferteMenge;

                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELOFFENEMENGE] = noffeneMenge;
                if (darfEinkaufspreisSehen) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELOFFENEWERT] = noffeneMenge
                            .multiply(bdPreisinmandantenwaehrung);
                } else {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELOFFENEWERT] = null;
                }
                i++;
            }
        }
    }

    closeSession(session);

    // PJ 15254
    if (bNurOffeneMengenAnfuehren) {
        ArrayList alTemp = new ArrayList();

        for (int k = 0; k < data.length; k++) {
            BigDecimal bdOffeneMenge = (BigDecimal) data[k][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELOFFENEMENGE];
            if (bdOffeneMenge != null && bdOffeneMenge.doubleValue() > 0) {
                alTemp.add(data[k]);
            }
        }
        Object[][] returnArray = new Object[alTemp
                .size()][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ANZAHL_SPALTEN];
        data = (Object[][]) alTemp.toArray(returnArray);
    }

    // PJ 14752 Manuell nachsortieren (in Besprechung mit AD+WH besprochen)

    if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_IDENT) {

        for (int k = data.length - 1; k > 0; --k) {
            for (int j = 0; j < k; ++j) {
                Object[] o = data[j];
                Object[] o1 = data[j + 1];

                String s = (String) o[REPORT_BESTELLUNG_OFFENE_SORTIERKRITERIUM];
                String s1 = (String) o1[REPORT_BESTELLUNG_OFFENE_SORTIERKRITERIUM];

                if (s.toUpperCase().compareTo(s1.toUpperCase()) > 0) {
                    data[j] = o1;
                    data[j + 1] = o;
                }
            }
        }

    }

    parameter.put(LPReport.P_SORTIERUNG, buildSortierungBestellungOffene(krit, theClientDto));
    parameter.put(LPReport.P_FILTER, buildFilterBestellungOffene(krit, artikelklasseIId, artikelgruppeIId,
            artikelCNrVon, artikelCNrBis, projektCBezeichnung, theClientDto));

    parameter.put(LPReport.P_SORTIERENACHLIEFERANT,
            new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER));
    parameter.put("P_SORTIERENACHBESTELLUNGART",
            new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_ART));
    parameter.put("P_TITLE",
            getTextRespectUISpr("bes.print.offene", theClientDto.getMandant(), theClientDto.getLocUi()));
    parameter.put(P_MANDANTWAEHRUNG, theClientDto.getSMandantenwaehrung());

    initJRDS(parameter, BestellungReportFac.REPORT_MODUL, BestellungReportFac.REPORT_BESTELLUNG_JOURNAL_OFFENE,
            theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
    return getReportPrint();
}

From source file:com.lp.server.bestellung.ejbfac.BestellungReportFacBean.java

License:Open Source License

/**
 * Alle offenen Bestellungen fuer einen bestimmten Mandanten drucken.
 * //  w w  w.j  av a  2 s . c o  m
 * @param krit
 *            die Filter- und Sortierkriterien
 * @param bSortierungNachLiefertermin
 *            Boolean
 * @param bAnfragevorschlag
 * @param theClientDto
 *            der aktuelle Benutzer
 * @throws EJBExceptionLP
 *             Ausnahme
 * @return JasperPrint der Druck
 */
@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printBestellVorschlag(ReportJournalKriterienDto krit, Boolean bSortierungNachLiefertermin,
        boolean bAnfragevorschlag, TheClientDto theClientDto) throws EJBExceptionLP {
    JasperPrintLP oPrintO = null;
    useCase = UC_BESTELLVORSCHLAG;
    int iAnzahlZeilen = 0;
    Locale locDruck = theClientDto.getLocUi();

    ArrayList<FLRBestellvorschlag> bestellung = new ArrayList();

    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = null;
    try {

        LagerDto[] lagerDto = getLagerFac().lagerFindByMandantCNr(theClientDto.getMandant());

        session = factory.openSession();
        // Hiberante Criteria fuer alle Tabellen ausgehend von meiner
        // Haupttabelle anlegen,
        // nach denen ich filtern und sortieren kann
        Criteria crit = session.createCriteria(FLRBestellvorschlag.class);

        // Einschraenkung auf den aktuellen Mandanten
        crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));

        // Einschraenkung nach einem bestimmten Kunden
        if (krit.lieferantIId != null) {
            crit.add(Restrictions.eq(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_LIEFERANT_I_ID,
                    krit.lieferantIId));
        }

        // Sortierung nach Kunde, eventuell innerhalb der Kostenstelle
        if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
            crit.createCriteria(BestellungFac.FLR_BESTELLUNG_FLRLIEFERANT)
                    .createCriteria(LieferantFac.FLR_PARTNER)
                    .addOrder(Order.asc(PartnerFac.FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1));
        }

        if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_IDENT) {
            crit.createCriteria(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_FLRARTIKEL)
                    .addOrder(Order.asc("c_nr"));
        }

        // Sortierung nach Liefertermin (optional)
        if (bSortierungNachLiefertermin != null && bSortierungNachLiefertermin.booleanValue()) {
            crit.addOrder(Order.asc(BestellungFac.FLR_BESTELLUNG_T_LIEFERTERMIN));
        }
        crit.addOrder(Order.asc(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_BELEGART_C_NR));
        List<?> list = crit.list();
        Iterator<?> it = list.iterator();

        while (it.hasNext()) {
            FLRBestellvorschlag flrbestellvorschlag = (FLRBestellvorschlag) it.next();
            bestellung.add(flrbestellvorschlag);
            iAnzahlZeilen++;
        }
        // Danach wenn nach Lieferant sortiert auch noch die null
        // Lieferanten anfuegen
        if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
            Criteria crit2 = session.createCriteria(FLRBestellvorschlag.class);
            crit2.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));
            crit2.add(Restrictions.isNull(BestellungFac.FLR_BESTELLUNG_FLRLIEFERANT));
            if (bSortierungNachLiefertermin != null && bSortierungNachLiefertermin.booleanValue()) {
                crit2.addOrder(Order.asc(BestellungFac.FLR_BESTELLUNG_T_LIEFERTERMIN));
            }
            crit2.addOrder(Order.asc(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_BELEGART_C_NR));
            if (krit.kundeIId != null) {
                crit2.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_LIEFERANT_I_ID_BESTELLADRESSE,
                        krit.lieferantIId));
            }

            list = crit2.list();
            it = list.iterator();
            while (it.hasNext()) {
                FLRBestellvorschlag flrbestellvorschlag = (FLRBestellvorschlag) it.next();
                bestellung.add(flrbestellvorschlag);
                iAnzahlZeilen++;
            }
        }

        data = new Object[iAnzahlZeilen][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ANZAHL_SPALTEN];

        int i = 0;
        FLRBestellvorschlag flrbestellung = null;
        while (i < iAnzahlZeilen) {
            flrbestellung = (FLRBestellvorschlag) bestellung.get(i);
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_BELEGART] = flrbestellung.getBelegart_c_nr();
            String belegCNr = "";
            if (flrbestellung.getBelegart_c_nr() != null) { // Es gibt auch
                // Eintraege
                // ohne
                // Belegart, zb
                // fuer den
                // mindestlagerstand
                if (flrbestellung.getBelegart_c_nr().equals(LocaleFac.BELEGART_AUFTRAG)) {
                    AuftragDto aDto = getAuftragFac().auftragFindByPrimaryKey(flrbestellung.getI_belegartid());
                    belegCNr = aDto.getCNr();
                } else if (flrbestellung.getBelegart_c_nr().equals(LocaleFac.BELEGART_LOS)) {
                    LosDto aDto = getFertigungFac().losFindByPrimaryKey(flrbestellung.getI_belegartid());
                    belegCNr = aDto.getCNr();
                }
            }
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_BELEGCNR] = belegCNr;

            if (flrbestellung.getLieferant_i_id() != null) {
                data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_BESTELLUNGLIEFERANT] = flrbestellung
                        .getFlrlieferant().getFlrpartner().getC_name1nachnamefirmazeile1();
            }
            if (flrbestellung.getProjekt_i_id() != null) {
                data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_PROJEKT] = flrbestellung.getFlrprojekt()
                        .getC_nr();
            }

            /*
             * locDruck =
             * Helper.string2Locale(flrbestellung.getFlrlieferant(
             * ).getFlrpartner(). getLocale_c_nr_kommunikation());
             */
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_BESTELLTERMIN] = Helper
                    .formatDatum(flrbestellung.getT_liefertermin(), locDruck);

            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELCNR] = flrbestellung.getFlrartikel()
                    .getC_nr();
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKEL_LAGERBEWIRTSCHAFTET] = Helper
                    .short2Boolean(flrbestellung.getFlrartikel().getB_lagerbewirtschaftet());
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELMENGE] = flrbestellung
                    .getN_zubestellendemenge();
            ArtikelDto oArtikelDto = getArtikelFac().artikelFindByPrimaryKey(flrbestellung.getArtikel_i_id(),
                    theClientDto);
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELBEZ] = oArtikelDto.getArtikelsprDto()
                    .getCBez();
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELKBEZ] = oArtikelDto.getArtikelsprDto()
                    .getCKbez();
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELZBEZ] = oArtikelDto.getArtikelsprDto()
                    .getCZbez();
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELZBEZ2] = oArtikelDto.getArtikelsprDto()
                    .getCZbez2();

            // Sperren
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_SPERREN] = getArtikelFac()
                    .getArtikelsperrenText(flrbestellung.getArtikel_i_id());

            // offene Bestellmenge
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKEL_MENGE_OFFEN] = getArtikelbestelltFac()
                    .getAnzahlBestellt(flrbestellung.getArtikel_i_id());

            // offene Rahmenbestellmenge
            Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                    .getAnzahlRahmenbestellt(flrbestellung.getArtikel_i_id(), theClientDto);
            if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKEL_RAHMENMENGE_OFFEN] = htRahmenbestellt
                        .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
            }
            // alle offenen Rahmenbestellnr
            if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_BELEGCNR)) {
                Collection<?> aRahmenbestellnr = (Collection<?>) htRahmenbestellt
                        .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_BELEGCNR);
                if (aRahmenbestellnr != null && aRahmenbestellnr.size() > 0) {
                    String[] aRahmenbestellnrStringArray = (String[]) aRahmenbestellnr.toArray(new String[0]);
                    data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKEL_RAHMENBESTELLNR] = Helper
                            .erzeugeStringAusStringArray(aRahmenbestellnrStringArray);
                }
            }
            // alle offenenen Bestellungen CNr
            ArrayList<String> alBestellungnr = new ArrayList<String>();
            Collection<?> lFLRArtikelbestellt = getArtikelbestelltFac()
                    .getArtikelbestellt(flrbestellung.getArtikel_i_id(), null, null);
            Iterator<?> iteratorFLRArtikelbestellt = lFLRArtikelbestellt.iterator();
            while (iteratorFLRArtikelbestellt.hasNext()) {
                FLRArtikelbestellt fLRArtikelbestellt = (FLRArtikelbestellt) iteratorFLRArtikelbestellt.next();
                BestellpositionDto bestellpositionDto = null;
                BestellungDto bestellungDto = null;
                if (fLRArtikelbestellt.getC_belegartnr().equals(LocaleFac.BELEGART_BESTELLUNG)) {
                    bestellpositionDto = getBestellpositionFac()
                            .bestellpositionFindByPrimaryKey(fLRArtikelbestellt.getI_belegartpositionid());
                    if (!bestellpositionDto.getBestellpositionstatusCNr()
                            .equals(BestellpositionFac.BESTELLPOSITIONSTATUS_ERLEDIGT)) {
                        bestellungDto = getBestellungFac()
                                .bestellungFindByPrimaryKey(bestellpositionDto.getBestellungIId());
                        alBestellungnr.add(bestellungDto.getCNr());
                    }
                }
            }
            // offene Bestellungen CNr als String uebergeben
            if (alBestellungnr.size() > 0) {
                String[] aArtikelbestellNr = (String[]) alBestellungnr.toArray(new String[0]);
                data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKEL_OFFENE_BESTELLNR] = Helper
                        .erzeugeStringAusStringArray(aArtikelbestellNr);
            }

            // ----------------
            // Artikellieferant, wenn vorhanden
            ArtikellieferantDto artikellieferantDto = getArtikelFac()
                    .artikellieferantFindByArtikellIIdLieferantIIdOhneExc(flrbestellung.getArtikel_i_id(),
                            flrbestellung.getLieferant_i_id(), theClientDto);
            if (artikellieferantDto != null) {
                data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_LIEFERANT_ARTIKEL_IDENTNUMMER] = artikellieferantDto
                        .getCArtikelnrlieferant();
                data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_LIEFERANT_ARTIKEL_BEZEICHNUNG] = artikellieferantDto
                        .getCBezbeilieferant();
                data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_LIEFERANT_STANDARDMENGE] = artikellieferantDto
                        .getFStandardmenge();

                data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_LIEFERANT_MATERIALZUSCHLAG] = artikellieferantDto
                        .getNMaterialzuschlag();
            }
            BigDecimal rahmenbedarf = this.getRahmenbedarfeFac()
                    .getSummeAllerRahmenbedarfeEinesArtikels(flrbestellung.getArtikel_i_id());
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKEL_RAHMENDETAILBEDARF] = rahmenbedarf;

            BigDecimal nLagersoll = new BigDecimal(0);
            BigDecimal nLagermindest = new BigDecimal(0);
            BigDecimal nArtikelPreis = new BigDecimal(0);
            BigDecimal nAnzahlArtikelRes = new BigDecimal(0);
            BigDecimal nFehlMenge = new BigDecimal(0);
            if (oArtikelDto.getFLagermindest() != null) {
                nLagermindest = new BigDecimal(oArtikelDto.getFLagermindest());
            }
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELLAGERMINDESTSTAND] = nLagermindest;
            if (oArtikelDto.getFLagersoll() != null) {
                nLagersoll = new BigDecimal(oArtikelDto.getFLagersoll());
            }
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELLAGERSOLL] = nLagersoll;

            // PJ 14828

            BigDecimal bdLagerstand = new BigDecimal(0);

            if (Helper.short2Boolean(flrbestellung.getFlrartikel().getB_lagerbewirtschaftet())) {
                for (int j = 0; j < lagerDto.length; j++) {

                    if (Helper.short2boolean(lagerDto[j].getBBestellvorschlag())) {
                        bdLagerstand = bdLagerstand.add(getLagerFac().getLagerstand(oArtikelDto.getIId(),
                                lagerDto[j].getIId(), theClientDto));
                    }

                }
            }

            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELLAGERSTAND] = bdLagerstand;

            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELEINHEIT] = flrbestellung.getFlrartikel()
                    .getEinheit_c_nr();
            if (flrbestellung.getN_nettoeinzelpreis() != null) {
                nArtikelPreis = flrbestellung.getN_nettoeinzelpreis();
            }
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELPREIS] = nArtikelPreis;

            nAnzahlArtikelRes = getReservierungFac().getAnzahlReservierungen(flrbestellung.getArtikel_i_id(),
                    theClientDto);
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELRESERVIERUNG] = nAnzahlArtikelRes;
            nFehlMenge = getFehlmengeFac().getAnzahlFehlmengeEinesArtikels(flrbestellung.getArtikel_i_id(),
                    theClientDto);
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_ARTIKELFEHLMENGE] = nFehlMenge;

            // Verwendungsnachweis
            Session session2 = FLRSessionFactory.getFactory().openSession();
            org.hibernate.Criteria critVW = session2.createCriteria(FLRStuecklisteposition.class)
                    .createAlias(
                            com.lp.server.stueckliste.service.StuecklisteFac.FLR_STUECKLISTEPOSITION_FLRARTIKEL,
                            "a")
                    .add(Restrictions.eq("a.i_id", flrbestellung.getArtikel_i_id()))
                    .addOrder(Order.asc("a.c_nr"));
            List<?> results = critVW.list();
            Iterator itVW = results.iterator();

            Object[][] dataSub = new Object[results.size()][3];
            String[] fieldnames = new String[] { "F_ARTIKEL", "F_BEZEICHNUNG", "F_MENGE" };

            int iZeileSub = 0;
            while (itVW.hasNext()) {
                FLRStuecklisteposition stkpos = (FLRStuecklisteposition) itVW.next();

                dataSub[iZeileSub][0] = stkpos.getFlrstueckliste().getFlrartikel().getC_nr();
                ArtikelDto aDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                        stkpos.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                dataSub[iZeileSub][1] = aDto.formatBezeichnung();
                dataSub[iZeileSub][2] = stkpos.getN_menge();
                iZeileSub++;
            }
            data[i][BestellungReportFac.REPORT_BESTELLVORSCHLAG_SUBREPORT_VERWENDUNGSNACHWEIS] = new LPDatenSubreport(
                    dataSub, fieldnames);
            session2.close();

            i++;
        }

        // die Parameter dem Report uebergeben
        HashMap<String, Object> mapParameter = new HashMap<String, Object>();
        mapParameter.put(LPReport.P_SORTIERUNG, buildSortierungBestellvorschlag(krit, theClientDto));
        mapParameter.put(LPReport.P_FILTER, buildFilterBestellungOffene(krit, theClientDto));
        mapParameter.put("P_SORTIERENACHBELEGART",
                new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_BELEGNUMMER));
        mapParameter.put("P_SORTIERENACHIDENT",
                new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_IDENT));
        mapParameter.put(LPReport.P_SORTIERENACHLIEFERANT,
                new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER));

        mapParameter.put(P_MANDANTWAEHRUNG, theClientDto.getSMandantenwaehrung());

        mapParameter.put("P_ANFRAGEVORSCHLAG", new Boolean(bAnfragevorschlag));

        initJRDS(mapParameter, BestellungReportFac.REPORT_MODUL,
                BestellungReportFac.REPORT_BESTELLUNG_JOURNAL_BESTELLVORSCHLAG, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);

        oPrintO = getReportPrint();
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    } finally {
        closeSession(session);
    }
    return oPrintO;
}

From source file:com.lp.server.bestellung.ejbfac.BestellvorschlagFacBean.java

License:Open Source License

private void verdichteBestellvorschlagNachMindesbestellmengen(boolean bBeruecksichtigeProjektklammer,
        TheClientDto theClientDto) throws EJBExceptionLP {
    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = null;//from w ww  .j ava  2s .  c o m
    try {
        session = factory.openSession();
        // Zuerst die ID's aller vorkommender Artikel holen.
        String queryString = "select distinct bestellvorschlag."
                + BestellvorschlagFac.FLR_BESTELLVORSCHLAG_ARTIKEL_I_ID
                + " from FLRBestellvorschlag bestellvorschlag where bestellvorschlag."
                + BestellvorschlagFac.FLR_BESTELLVORSCHLAG_MANDANT_C_NR + "='" + theClientDto.getMandant()
                + "'";

        org.hibernate.Query query = session.createQuery(queryString);
        List<?> rowCountResult = query.list();
        // nun die Eintraege fuer jeden Artikel verdichten.
        for (Iterator<?> itArtikel = rowCountResult.iterator(); itArtikel.hasNext();) {
            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall((Integer) itArtikel.next(),
                    theClientDto);

            ArrayList<Integer> alProjekte = new ArrayList<Integer>();

            if (bBeruecksichtigeProjektklammer == true) {
                String queryStringProjekte = "select distinct bestellvorschlag."
                        + BestellvorschlagFac.FLR_BESTELLVORSCHLAG_PROJEKT_I_ID
                        + " from FLRBestellvorschlag bestellvorschlag where bestellvorschlag.artikel_i_id="
                        + artikelDto.getIId() + " AND bestellvorschlag."
                        + BestellvorschlagFac.FLR_BESTELLVORSCHLAG_MANDANT_C_NR + "='"
                        + theClientDto.getMandant() + "'";
                org.hibernate.Query queryProjekte = session.createQuery(queryStringProjekte);
                List<?> resultProjekte = queryProjekte.list();
                Iterator itProjekte = resultProjekte.iterator();
                while (itProjekte.hasNext()) {
                    Integer projektIId = (Integer) itProjekte.next();
                    alProjekte.add(projektIId);
                }
            } else {
                alProjekte.add(null);
            }

            for (int j = 0; j < alProjekte.size(); j++) {
                Integer projektIId = alProjekte.get(j);

                // Alle BV-Eintraege des Mandanten auflisten.
                Criteria crit = session.createCriteria(FLRBestellvorschlag.class);
                // Filter nach Mandant
                crit.add(Restrictions.eq(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_MANDANT_C_NR,
                        theClientDto.getMandant()));
                // Filter nach Artikel
                crit.add(Restrictions.eq(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_ARTIKEL_I_ID,
                        artikelDto.getIId()));

                if (bBeruecksichtigeProjektklammer == true) {
                    if (projektIId == null) {
                        crit.add(Restrictions.isNull(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_PROJEKT_I_ID));
                    } else {
                        crit.add(Restrictions.eq(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_PROJEKT_I_ID,
                                projektIId));
                    }
                }

                // Sortierung nach Liefertermin.
                crit.addOrder(Order.asc(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_T_LIEFERTERMIN));
                List<?> resultList = crit.list();
                // Da die Eintraege zwischendurch auf Mindest- bzw.
                // Verpackungsmengen
                // aufgerundet werden muessen, entwickelt sich zwischendurch
                // ein
                // Guthaben
                BigDecimal bdGuthaben = new BigDecimal(0);
                ArtikellieferantDto artLief = null;
                // nun alle Eintraege durchiterieren.
                for (Iterator<?> itBV = resultList.iterator(); itBV.hasNext();) {
                    FLRBestellvorschlag bv = (FLRBestellvorschlag) itBV.next();
                    Bestellvorschlag bvEntity = em.find(Bestellvorschlag.class, bv.getI_id());
                    if (bvEntity == null) {
                        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, "");
                    }
                    if (bv.getArtikel_i_id() != null && bv.getLieferant_i_id() != null) {
                        if (artLief == null) { // lazy loading fuer jeden
                            // Artikel.
                            artLief = getArtikelFac().artikellieferantFindByArtikellIIdLieferantIIdOhneExc(
                                    bv.getArtikel_i_id(), bv.getLieferant_i_id(), theClientDto);
                        }
                        // Wenn der Artikellieferant definiert ist (von dort
                        // kommen VPE und Mindestbestellmenge)
                        if (artLief != null) {
                            if (bdGuthaben.compareTo(bv.getN_zubestellendemenge()) >= 0) {
                                // Wenn durch Mengenerhoehungen vorheriger
                                // Eintraege genug Guthaben
                                // "erzielt" wurde, um auf diese Position
                                // verzichten zu koennen -> loeschen.
                                bdGuthaben = bdGuthaben.subtract(bv.getN_zubestellendemenge());
                                removeBestellvorschlag(bv.getI_id());
                            } else {

                                BigDecimal bdMindestbestellmenge = new BigDecimal(0);

                                if (artLief.getFMindestbestelmenge() != null) {
                                    // Ist keine Mindestbestellmenge
                                    // definiert,
                                    // kann ich deren Behandlung als
                                    // abgeschlossen betrachten.
                                    bdMindestbestellmenge = new BigDecimal(artLief.getFMindestbestelmenge());
                                }

                                // Wenn die zu bestellende Menge
                                // geringer
                                // als die Mindestbestellmenge ist,
                                // dann muss ich auf die
                                // Mindestbestellmenge
                                // erhoehen.
                                if (bv.getN_zubestellendemenge().compareTo(bdMindestbestellmenge) < 0) {
                                    BigDecimal bdDifferenz = bdMindestbestellmenge
                                            .subtract(bv.getN_zubestellendemenge());
                                    bv.setN_zubestellendemenge(bdMindestbestellmenge);
                                    bdGuthaben = bdGuthaben.add(bdDifferenz);
                                    // speichern
                                    bvEntity.setNZubestellendemenge(bdMindestbestellmenge);
                                }

                                // Zuletzt muss noch auf die
                                // Verpackungseinheit
                                // geprueft werden. (sofern diese definiert
                                // ist)
                                if (artLief.getNVerpackungseinheit() != null) {
                                    if (artLief.getNVerpackungseinheit().doubleValue() != 0) {
                                        // Die zu bestellende Menge muss
                                        // immer
                                        // ein Vielfaches der VPE sein.
                                        int iNachkommastellenMandant = getMandantFac()
                                                .getNachkommastellenMenge(theClientDto.getMandant());
                                        BigDecimal bdVPE = artLief.getNVerpackungseinheit();
                                        bdVPE = bdVPE.setScale(iNachkommastellenMandant, RoundingMode.HALF_UP);
                                        BigDecimal bdMenge = bv.getN_zubestellendemenge()
                                                .setScale(iNachkommastellenMandant, RoundingMode.HALF_UP);
                                        BigDecimal bdDivRest = bdMenge.divideAndRemainder(bdVPE,
                                                new MathContext(4, RoundingMode.HALF_UP))[1].setScale(
                                                        iNachkommastellenMandant, RoundingMode.HALF_UP);
                                        if (bdDivRest.compareTo(
                                                new BigDecimal(0).setScale(iNachkommastellenMandant)) != 0) {
                                            BigDecimal bdDifferenz = bdVPE.subtract(bdDivRest);
                                            bdGuthaben = bdGuthaben.add(bdDifferenz);
                                            // speichern
                                            bvEntity.setNZubestellendemenge(
                                                    bvEntity.getNZubestellendemenge().add(bdDifferenz));
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    // catch (FinderException ex) {
    // throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
    // }
    catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    } finally {
        closeSession(session);
    }
}

From source file:com.lp.server.bestellung.ejbfac.BestellvorschlagFacBean.java

License:Open Source License

private void verdichteBestellvorschlagNachDatum(Long lVerdichtungszeitraumparam,
        boolean bBeruecksichtigeProjektklammer, TheClientDto theClientDto) {
    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = null;//  w  ww  .j  ava 2 s  . c o m

    session = factory.openSession();
    // Zuerst die ID's aller vorkommender Artikel holen.
    String queryString = "select distinct bestellvorschlag."
            + BestellvorschlagFac.FLR_BESTELLVORSCHLAG_ARTIKEL_I_ID
            + " from FLRBestellvorschlag bestellvorschlag where bestellvorschlag."
            + BestellvorschlagFac.FLR_BESTELLVORSCHLAG_MANDANT_C_NR + "='" + theClientDto.getMandant() + "'";

    org.hibernate.Query query = session.createQuery(queryString);
    List<?> rowCountResult = query.list();
    // nun die Eintraege fuer jeden Artikel verdichten.
    for (Iterator<?> itArtikel = rowCountResult.iterator(); itArtikel.hasNext();) {
        ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall((Integer) itArtikel.next(),
                theClientDto);

        ArrayList<Integer> alProjekte = new ArrayList<Integer>();

        if (bBeruecksichtigeProjektklammer == true) {
            String queryStringProjekte = "select distinct bestellvorschlag."
                    + BestellvorschlagFac.FLR_BESTELLVORSCHLAG_PROJEKT_I_ID
                    + " from FLRBestellvorschlag bestellvorschlag where bestellvorschlag.artikel_i_id="
                    + artikelDto.getIId() + " AND bestellvorschlag."
                    + BestellvorschlagFac.FLR_BESTELLVORSCHLAG_MANDANT_C_NR + "='" + theClientDto.getMandant()
                    + "'";
            org.hibernate.Query queryProjekte = session.createQuery(queryStringProjekte);
            List<?> resultProjekte = queryProjekte.list();
            Iterator itProjekte = resultProjekte.iterator();
            while (itProjekte.hasNext()) {
                Integer projektIId = (Integer) itProjekte.next();
                alProjekte.add(projektIId);
            }
        } else {
            alProjekte.add(null);
        }

        for (int j = 0; j < alProjekte.size(); j++) {
            Integer projektIId = alProjekte.get(j);
            // Alle BV-Eintraege des Mandanten auflisten.
            Criteria crit = session.createCriteria(FLRBestellvorschlag.class);
            // Filter nach Mandant
            crit.add(Restrictions.eq(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_MANDANT_C_NR,
                    theClientDto.getMandant()));
            // Filter nach Artikel
            crit.add(Restrictions.eq(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_ARTIKEL_I_ID,
                    artikelDto.getIId()));

            if (bBeruecksichtigeProjektklammer == true) {
                if (projektIId == null) {
                    crit.add(Restrictions.isNull(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_PROJEKT_I_ID));
                } else {
                    crit.add(
                            Restrictions.eq(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_PROJEKT_I_ID, projektIId));
                }
            }

            // Sortierung nach Liefertermin.
            crit.addOrder(Order.asc(BestellvorschlagFac.FLR_BESTELLVORSCHLAG_T_LIEFERTERMIN));
            List<?> resultList = crit.list();
            FLRBestellvorschlag[] bestVorschlaege = (FLRBestellvorschlag[]) resultList
                    .toArray(new FLRBestellvorschlag[] {});
            // der erste Bestellvorschlag ist der frueheste
            Bestellvorschlag bvFirst = em.find(Bestellvorschlag.class, bestVorschlaege[0].getI_id());
            if (bvFirst == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER, "");
            }
            Long lVerdichtungszeitraum = 60 * 60 * 1000 * 24 * lVerdichtungszeitraumparam;
            // Alle Bestellvorschlaege dieses Artikels,
            // die vor dem Datum sind muessen auf diesem gesammelt werden
            Timestamp dateOfVerdichtung = new Timestamp(
                    bvFirst.getTLiefertermin().getTime() + lVerdichtungszeitraum);
            for (int i = 1; i < bestVorschlaege.length; i++) {
                if (bestVorschlaege[i].getT_liefertermin().before(dateOfVerdichtung)
                        || bestVorschlaege[i].getT_liefertermin().compareTo(dateOfVerdichtung) == 0) {
                    // Bestellvorschlag wird auf vorherigen verdichtet
                    bvFirst.setNZubestellendemenge(
                            bvFirst.getNZubestellendemenge().add(bestVorschlaege[i].getN_zubestellendemenge()));

                    // Der Beleg wird geloescht, da das nicht mehr stimmen
                    // kann
                    bvFirst.setBelegartCNr(null);
                    bvFirst.setIBelegartid(null);
                    bvFirst.setIBelegartpositionid(null);

                    if (bBeruecksichtigeProjektklammer == false) {
                        bvFirst.setProjektIId(null);
                    }

                    // Der Bestellvorschlag der verdichtet wurde kann
                    // geloescht werden
                    removeBestellvorschlag(bestVorschlaege[i].getI_id());
                    System.out.println("verdichtet");
                } else {
                    // Der Liefertermin wird die neue Referenz
                    // fuer die naechsten Vorschlaege
                    bvFirst = em.find(Bestellvorschlag.class, bestVorschlaege[i].getI_id());
                    dateOfVerdichtung = new Timestamp(
                            bvFirst.getTLiefertermin().getTime() + lVerdichtungszeitraum);
                }
            }
        }
    }

}

From source file:com.lp.server.bestellung.ejbfac.BSMahnwesenFacBean.java

License:Open Source License

/**
 * erstellt Liefermahnungen, ABMahnungen oder beides ruft dazu die Methoden
 * echteLiefermahnungen() und (oder) echteABMahnungen() auf
 * ------------------//from   w ww .j  a va2  s  .  c o  m
 * ----------------------------------------------------------
 * 
 * @param echteLiefermahnung
 *            boolean
 * @param echteABMahnungen
 *            boolean
 * @param theClientDto
 *            String
 * @throws EJBExceptionLP
 * @return Integer
 *         ----------------------------------------------------------
 *         -----------------
 */
@TransactionAttribute(TransactionAttributeType.NEVER)
private Integer createMahnungen(boolean echteLiefermahnung, boolean echteABMahnungen, boolean liefererinnerung,
        TheClientDto theClientDto) throws EJBExceptionLP {

    Session session = null;
    try {
        // Mahnstufen des Mandanten holen
        BSMahnstufeDto bsmahnstufeDto[] = this.bsmahnstufeFindByMandantCNr(theClientDto.getMandant(),
                theClientDto);
        if (bsmahnstufeDto == null || bsmahnstufeDto.length == 0) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FINANZ_KEINE_MAHNSTUFEN_EINGETRAGEN, "");
        }

        // mahnlaufIId generieren wird fuer Liefermahnung und ABMahnung
        // gebraucht
        Integer bsmahnlaufIId = null;
        BSMahnlaufDto bsmahnlaufDto = null;
        bsmahnlaufIId = context.getBusinessObject(BSMahnwesenFac.class).createBSMahnlauf(bsmahnlaufDto,
                theClientDto);
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria crit = session.createCriteria(FLRBestellpositionReport.class);

        // folgende Positionsarten werden ignoriert.
        Collection<String> cPositionsarten = new LinkedList<String>();
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_BETRIFFT);
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_SEITENUMBRUCH);
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_LEERZEILE);
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_TEXTBAUSTEIN);
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_TEXTEINGABE);
        crit.add(Restrictions.not(Restrictions
                .in(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONART_C_NR, cPositionsarten)));

        // PJ 16536
        String queryString = "SELECT artgru_i_id FROM FLRMahngruppe m"
                + " WHERE m.flrartikelgruppe.mandant_c_nr ='" + theClientDto.getMandant() + "'";

        Session session2 = FLRSessionFactory.getFactory().openSession();
        org.hibernate.Query query = session2.createQuery(queryString);
        List<?> results = query.list();
        Iterator<?> resultListIterator = results.iterator();

        Integer[] ids = new Integer[results.size()];
        int row = 0;
        while (resultListIterator.hasNext()) {
            Integer artgruIId = (Integer) resultListIterator.next();
            ids[row] = artgruIId;
            row++;
        }
        session2.close();
        if (ids.length > 0) {
            crit.createAlias("flrartikel", "a");
            crit.createAlias("a.flrartikelgruppe", "ag");

            crit.add(Restrictions.in("ag.i_id", ids));
        }

        Criteria critBestellung = crit.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRBESTELLUNG);
        // nach mandanten filtern
        critBestellung
                .add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_MANDANT_C_NR, theClientDto.getMandant()));
        // PJ 15165
        critBestellung.add(Restrictions.or(Restrictions.isNull(BestellungFac.FLR_BESTELLUNG_T_MAHNSPERREBIS),
                Restrictions.lt(BestellungFac.FLR_BESTELLUNG_T_MAHNSPERREBIS,
                        Helper.cutTimestamp(new Timestamp(System.currentTimeMillis())))));

        // nach Stati filtern
        Collection<String> cStati = new LinkedList<String>();
        cStati.add(BestellungFac.BESTELLSTATUS_OFFEN);
        cStati.add(BestellungFac.BESTELLSTATUS_BESTAETIGT);
        // SK added BESTELLSTATUS_TEILERLEDIGT
        cStati.add(BestellungFac.BESTELLSTATUS_TEILERLEDIGT);
        critBestellung.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGSTATUS_C_NR, cStati));
        List<?> list = crit.list();

        for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
            FLRBestellpositionReport flrbespos = (FLRBestellpositionReport) iter.next();
            /**
             * nur Liefermahnungen deren Status bestaetigt ist oder deren
             * Liefertermin vor heute ist
             */
            if (echteLiefermahnung == true && !(BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR
                    .equals(flrbespos.getFlrbestellung().getBestellungart_c_nr()))) {
                BSMahnungDto[] bsmahnungdto = getBSMahnwesenFac()
                        .bsmahnungFindByBestellpositionIIdOhneExc(flrbespos.getI_id(), theClientDto);
                if (bsmahnungdto.length > 0) {

                    Integer latest = 0;
                    for (int y = 0; y < bsmahnungdto.length; y++) {
                        if (bsmahnungdto[y].getMahnstufeIId() > latest) {
                            latest = bsmahnungdto[y].getMahnstufeIId();
                        }
                    }
                    for (int i = 0; i < bsmahnstufeDto.length; i++) {
                        if (latest.equals(bsmahnstufeDto[i].getIId())) {
                            echteLiefermahnungen(flrbespos, bsmahnlaufIId, bsmahnstufeDto[i], theClientDto);
                        }
                    }
                } else {
                    echteLiefermahnungen(flrbespos, bsmahnlaufIId, null, theClientDto);
                }
            }

            // lt. WH
            boolean bEchteLiefermahnungVorhanden = false;
            BSMahnungDto[] bsmahnungdto = getBSMahnwesenFac()
                    .bsmahnungFindByBestellpositionIIdOhneExc(flrbespos.getI_id(), theClientDto);
            if (bsmahnungdto.length > 0) {
                for (int y = 0; y < bsmahnungdto.length; y++) {
                    if (bsmahnungdto[y].getMahnstufeIId() > 0) {
                        bEchteLiefermahnungVorhanden = true;
                    }
                }
            }

            if (bEchteLiefermahnungVorhanden == false) {

                /**
                 * nur ABMahnungen deren Status offen ist ausser der
                 * Liefertermin ist vor heute dann ist es eine Liefermahnung
                 */
                if (echteABMahnungen == true) {
                    // hier wird mahnstufe 0 uebergeben
                    for (int i = 0; i < bsmahnstufeDto.length; i++) {
                        if (bsmahnstufeDto[i].getIId().equals(new Integer(BSMahnwesenFac.MAHNSTUFE_0))) {
                            echteABMahnungen(flrbespos, bsmahnstufeDto[i], bsmahnlaufIId, theClientDto);
                        }
                    }
                }

                // lt. WH
                boolean bABLiefermahnungVorhanden = false;
                bsmahnungdto = getBSMahnwesenFac().bsmahnungFindByBestellpositionIIdOhneExc(flrbespos.getI_id(),
                        theClientDto);
                if (bsmahnungdto.length > 0) {
                    for (int y = 0; y < bsmahnungdto.length; y++) {
                        if (bsmahnungdto[y].getMahnstufeIId() == 0) {
                            bABLiefermahnungVorhanden = true;
                        }
                    }
                }

                if (bABLiefermahnungVorhanden == false) {

                    // lt. WH Liefererinnerung ist wie echte
                    // Liefermahnung,
                    // jedoch
                    // nur mit Mahnstufe -1
                    if (liefererinnerung == true && !(BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR
                            .equals(flrbespos.getFlrbestellung().getBestellungart_c_nr()))) {

                        if (flrbespos.getT_lieferterminbestaetigt() == null) {

                            // hier wird mahnstufe -1 uebergeben
                            for (int i = 0; i < bsmahnstufeDto.length; i++) {
                                if (bsmahnstufeDto[i].getIId()
                                        .equals(new Integer(BSMahnwesenFac.MAHNSTUFE_MINUS1))) {

                                    liefererinnerungen(flrbespos, bsmahnlaufIId, bsmahnstufeDto[i],
                                            theClientDto);

                                }
                            }
                        }
                    }
                }
            }

        }
        return bsmahnlaufIId;
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
        return null;
    } finally {
        closeSession(session);
    }
}

From source file:com.lp.server.eingangsrechnung.ejbfac.EingangsrechnungFacBean.java

License:Open Source License

public int wiederholendeZusatzkostenAnlegen(TheClientDto theClientDto) {

    int iAnzahlAngelegt = 0;
    Session session = FLRSessionFactory.getFactory().openSession();

    Criteria crit = session.createCriteria(FLREingangsrechnung.class);

    crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));
    crit.add(Restrictions.eq("eingangsrechnungart_c_nr", EingangsrechnungFac.EINGANGSRECHNUNGART_ZUSATZKOSTEN));

    crit.add(Restrictions.not(Restrictions.eq("status_c_nr", EingangsrechnungFac.STATUS_STORNIERT)));

    crit.add(Restrictions.isNull("t_wiederholenderledigt"));

    crit.add(Restrictions.isNull("eingangsrechnung_i_id_nachfolger"));
    crit.add(Restrictions.isNotNull("auftragwiederholungsintervall_c_nr"));

    crit.add(Restrictions.lt("t_belegdatum",
            Helper.cutTimestamp(new Timestamp(System.currentTimeMillis() + (24 * 3600000)))));

    List<?> resultList = crit.list();
    Iterator<?> resultListIterator = resultList.iterator();
    while (resultListIterator.hasNext()) {
        FLREingangsrechnung flrEingangsrechnung = (FLREingangsrechnung) resultListIterator.next();

        // Naechster faelliger Termin nach Heute
        Calendar cBeginn = Calendar.getInstance();
        cBeginn.setTimeInMillis(flrEingangsrechnung.getT_belegdatum().getTime());

        String intervall = flrEingangsrechnung.getAuftragwiederholungsintervall_c_nr();

        Timestamp tHeute = Helper.cutTimestamp(new Timestamp(System.currentTimeMillis() + (24 * 3600000)));

        if (intervall.equals(AuftragServiceFac.AUFTRAGWIEDERHOLUNGSINTERVALL_2WOECHENTLICH)) {
            cBeginn.set(Calendar.DAY_OF_MONTH, cBeginn.get(Calendar.DAY_OF_MONTH) + 14);
        } else if (intervall.equals(AuftragServiceFac.AUFTRAGWIEDERHOLUNGSINTERVALL_WOECHENTLICH)) {
            cBeginn.set(Calendar.DAY_OF_MONTH, cBeginn.get(Calendar.DAY_OF_MONTH) + 7);
        }//from   w  w  w  .j a  va2 s  .c o  m

        if (intervall.equals(AuftragServiceFac.AUFTRAGWIEDERHOLUNGSINTERVALL_JAHR)) {
            cBeginn.set(Calendar.YEAR, cBeginn.get(Calendar.YEAR) + 1);
        } else if (intervall.equals(AuftragServiceFac.AUFTRAGWIEDERHOLUNGSINTERVALL_2JAHR)) {
            cBeginn.set(Calendar.YEAR, cBeginn.get(Calendar.YEAR) + 2);
        } else if (intervall.equals(AuftragServiceFac.AUFTRAGWIEDERHOLUNGSINTERVALL_3JAHR)) {
            cBeginn.set(Calendar.YEAR, cBeginn.get(Calendar.YEAR) + 3);
        } else if (intervall.equals(AuftragServiceFac.AUFTRAGWIEDERHOLUNGSINTERVALL_4JAHR)) {
            cBeginn.set(Calendar.YEAR, cBeginn.get(Calendar.YEAR) + 4);
        } else if (intervall.equals(AuftragServiceFac.AUFTRAGWIEDERHOLUNGSINTERVALL_5JAHR)) {
            cBeginn.set(Calendar.YEAR, cBeginn.get(Calendar.YEAR) + 5);
        } else if (intervall.equals(AuftragServiceFac.AUFTRAGWIEDERHOLUNGSINTERVALL_MONATLICH)) {
            cBeginn.set(Calendar.MONTH, cBeginn.get(Calendar.MONTH) + 1);
        } else if (intervall.equals(AuftragServiceFac.AUFTRAGWIEDERHOLUNGSINTERVALL_QUARTAL)) {
            cBeginn.set(Calendar.MONTH, cBeginn.get(Calendar.MONTH) + 3);
        }

        Date tBelegdatumNeu = new Date(cBeginn.getTimeInMillis());

        if (cBeginn.getTimeInMillis() < tHeute.getTime()) {

            Eingangsrechnung er = em.find(Eingangsrechnung.class, flrEingangsrechnung.getI_id());

            EingangsrechnungDto erDtoNeu = assembleEingangsrechnungDto(er);
            erDtoNeu.setIId(null);
            erDtoNeu.setDBelegdatum(tBelegdatumNeu);
            erDtoNeu.setStatusCNr(EingangsrechnungFac.STATUS_ANGELEGT);
            Integer idNeu = createEingangsrechnung(erDtoNeu, theClientDto).getIId();

            // Nachfolger setzten
            er.setEingangsrechnungIIdNachfolger(idNeu);
            iAnzahlAngelegt++;
        }

    }

    return iAnzahlAngelegt;
}

From source file:com.lp.server.eingangsrechnung.ejbfac.EingangsrechnungReportFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printOffene(TheClientDto theClientDto, int iSort, Integer lieferantIId, Date dStichtag,
        boolean bStichtagIstFreigabeDatum, boolean bZusatzkosten, boolean mitNichtZugeordnetenBelegen) {
    this.useCase = UC_OFFENE;

    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = null;/*w w w  .java2 s . c  om*/
    try {
        Map<Integer, ZahlungszielDto> mZahlungsziel = getMandantFac()
                .zahlungszielFindAllByMandantAsDto(theClientDto.getMandant(), theClientDto);

        session = factory.openSession();

        List<Integer> lieferantenIIds = new ArrayList<Integer>();
        if (lieferantIId != null) {
            lieferantenIIds.add(lieferantIId);
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT) {
            Iterator<?> iter = session.createCriteria(FLRLieferant.class).createAlias("flrpartner", "p")
                    .addOrder(Order.asc("p.c_name1nachnamefirmazeile1"))
                    .add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()))

                    .list().iterator();
            while (iter.hasNext()) {
                lieferantenIIds.add(((FLRLieferant) iter.next()).getI_id());
            }
        } else {
            lieferantenIIds.add(null);
        }

        List<Object[]> dataList = new ArrayList<Object[]>();

        for (Integer liefIId : lieferantenIIds) {
            Criteria crit = session.createCriteria(FLREingangsrechnungReport.class);
            // Filter nach Mandant
            crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));

            Collection<String> cStati = new LinkedList<String>();
            cStati.add(EingangsrechnungFac.STATUS_TEILBEZAHLT);
            cStati.add(EingangsrechnungFac.STATUS_ANGELEGT);
            cStati.add(EingangsrechnungFac.STATUS_ERLEDIGT);
            crit.add(Restrictions.in("status_c_nr", cStati));

            if (bZusatzkosten) {
                crit.add(Restrictions.eq(EingangsrechnungFac.FLR_ER_EINGANGSRECHNUNGART_C_NR,
                        EingangsrechnungFac.EINGANGSRECHNUNGART_ZUSATZKOSTEN));
            } else {
                crit.add(Restrictions.not(Restrictions.eq(EingangsrechnungFac.FLR_ER_EINGANGSRECHNUNGART_C_NR,
                        EingangsrechnungFac.EINGANGSRECHNUNGART_ZUSATZKOSTEN)));
            }

            if (liefIId != null) {
                crit.add(Restrictions.eq("lieferant_i_id", liefIId));
            }
            if (bStichtagIstFreigabeDatum) {
                crit.add(Restrictions.le("t_freigabedatum", dStichtag));
            } else {
                crit.add(Restrictions.le("t_belegdatum", dStichtag));
            }
            crit.add(Restrictions.or(Restrictions.gt("t_bezahltdatum", dStichtag),
                    Restrictions.isNull("t_bezahltdatum")));
            crit.add(Restrictions.or(Restrictions.gt("t_manuellerledigt", dStichtag),
                    Restrictions.isNull("t_manuellerledigt")));

            if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_RECHNUNGSNUMMER) {
                crit.addOrder(Order.asc("c_nr"));
            } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT) {
                crit.addOrder(Order.asc("c_nr"));
            } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT) {
                crit.addOrder(Order.asc("t_faelligkeit")).addOrder(Order.asc("c_nr")); // Inerhalb wird immer nach
                // Rechnungsnummer sortiert
            } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT_SKONTO1) {
                crit.addOrder(Order.asc("t_faelligkeit_skonto1")).addOrder(Order.asc("c_nr"));
            } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT_SKONTO2) {
                crit.addOrder(Order.asc("t_faelligkeit_skonto2")).addOrder(Order.asc("c_nr"));
            }
            if (iSort != EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT) {
                mitNichtZugeordnetenBelegen = false;
            }
            List<?> resultList = crit.list();

            Iterator<?> resultListIterator = resultList.iterator();
            int row = 0;

            Object[][] tempData = new Object[resultList.size()][OFFENE_ANZAHL_FELDER];

            if (mitNichtZugeordnetenBelegen) {
                LieferantDto liefDto = getLieferantFac().lieferantFindByPrimaryKey(liefIId, theClientDto);

                if (liefDto.getKontoIIdKreditorenkonto() != null) {
                    // TODO: nur FLRFinanzBuchungDetail holen
                    Query query = session.createQuery(
                            "SELECT buchungdetail from FLRFinanzBuchungDetail buchungdetail LEFT OUTER JOIN buchungdetail.flrbuchung AS buchung"
                                    + " WHERE"
                                    + BuchungDetailQueryBuilder.buildNurOffeneBuchungDetails("buchungdetail")
                                    + "AND"
                                    + BuchungDetailQueryBuilder.buildNichtZuordenbareVonKonto("buchungdetail",
                                            "buchung", liefDto.getKontoIIdKreditorenkonto())
                                    + (dStichtag == null ? ""
                                            : ("AND buchung.d_buchungsdatum<='"
                                                    + Helper.formatDateWithSlashes(dStichtag) + "'")));

                    @SuppressWarnings("unchecked")
                    List<FLRFinanzBuchungDetail> bdList = query.list();
                    if (bdList.size() > 0) {
                        if (tempData.length < 1) {
                            tempData = new Object[1][OFFENE_ANZAHL_FELDER];
                            String sFirma = liefDto.getPartnerDto().formatFixTitelName1Name2();
                            tempData[0][OFFENE_FELD_FIRMA] = sFirma;
                            tempData[0][OFFENE_FELD_KREDITORENNR] = getFinanzFac()
                                    .kontoFindByPrimaryKeySmall(liefDto.getKontoIIdKreditorenkonto()).getCNr();
                        }
                        tempData[0][OFFENE_SUBREPORT_OFFENE_BUCHUNGEN] = FinanzSubreportGenerator
                                .createBuchungsdetailSubreport(bdList, false);
                    }
                }

            }
            while (resultListIterator.hasNext()) {
                FLREingangsrechnungReport er = (FLREingangsrechnungReport) resultListIterator.next();
                EingangsrechnungDto erDto = getEingangsrechnungFac()
                        .eingangsrechnungFindByPrimaryKey(er.getI_id());
                LieferantDto liefDto = getLieferantFac().lieferantFindByPrimaryKey(erDto.getLieferantIId(),
                        theClientDto);

                String sErCNr = erDto.getCNr();
                String sFirma = liefDto.getPartnerDto().formatFixTitelName1Name2();
                ZahlungszielDto zzDto = mZahlungsziel.get(erDto.getZahlungszielIId());
                tempData[row][OFFENE_FELD_ER_C_NR] = sErCNr;
                tempData[row][OFFENE_FELD_FIRMA] = sFirma;
                tempData[row][OFFENE_FELD_ERDATUM] = er.getT_belegdatum();
                tempData[row][OFFENE_FELD_MAHNDATUM] = erDto.getTMahndatum();
                tempData[row][OFFENE_FELD_KREDITORENNR] = liefDto.getKontoIIdKreditorenkonto() != null
                        ? getFinanzFac().kontoFindByPrimaryKeySmall(liefDto.getKontoIIdKreditorenkonto())
                                .getCNr()
                        : null;
                tempData[row][OFFENE_FELD_MAHNSTUFE] = er.getMahnstufe_i_id();
                tempData[row][OFFENE_FELD_FREIGABEDATUM] = er.getT_freigabedatum();
                tempData[row][OFFENE_FELD_WERT] = erDto.getNBetrag();
                tempData[row][OFFENE_FELD_LIEFERANTENRECHNUNGSNUMMER] = erDto.getCLieferantenrechnungsnummer();
                tempData[row][OFFENE_FELD_TEXT] = erDto.getCText();
                if (zzDto != null) {
                    tempData[row][OFFENE_FELD_ZAHLUNGSZIEL] = zzDto.getCBez();
                    tempData[row][OFFENE_FELD_SKONTOTAGE1] = zzDto.getSkontoAnzahlTage1();
                    tempData[row][OFFENE_FELD_SKONTOTAGE2] = zzDto.getSkontoAnzahlTage2();
                    tempData[row][OFFENE_FELD_SKONTOPROZENT1] = zzDto.getSkontoProzentsatz1();
                    tempData[row][OFFENE_FELD_SKONTOPROZENT2] = zzDto.getSkontoProzentsatz2();
                    tempData[row][OFFENE_FELD_NETTOTAGE] = zzDto.getAnzahlZieltageFuerNetto();
                    if (erDto.getDFreigabedatum() != null) {
                        if (zzDto.getAnzahlZieltageFuerNetto() != null) {
                            tempData[row][OFFENE_FELD_FAELLIGKEIT] = er.getT_faelligkeit();
                        }
                        if (zzDto.getSkontoAnzahlTage1() != null) {
                            tempData[row][OFFENE_FELD_FAELLIGKEIT_SKONTO1] = er.getT_faelligkeit_skonto1();
                        }
                        if (zzDto.getSkontoAnzahlTage2() != null) {
                            tempData[row][OFFENE_FELD_FAELLIGKEIT_SKONTO2] = er.getT_faelligkeit_skonto2();
                        }
                    }
                }

                // datum der letzten zahlung bis zum stichtag ermitteln
                EingangsrechnungzahlungDto[] zahlungen = getEingangsrechnungFac()
                        .eingangsrechnungzahlungFindByEingangsrechnungIId(er.getI_id());
                java.sql.Date dZahldatum = null;
                for (int i = 0; i < zahlungen.length; i++) {
                    if ((dZahldatum == null || zahlungen[i].getTZahldatum().after(dZahldatum))
                            && !zahlungen[i].getTZahldatum().after(dStichtag)) {
                        dZahldatum = new Date(zahlungen[i].getTZahldatum().getTime());
                    }
                }
                tempData[row][OFFENE_FELD_ZAHLDATUM] = dZahldatum;
                // Zahlungsbetrag bis zum Stichtag ermitteln
                BigDecimal bdBezahltFw = new BigDecimal(0);
                BigDecimal bdBezahltKursBelegdatum = new BigDecimal(0);
                for (int i = 0; i < zahlungen.length; i++) {
                    if (!zahlungen[i].getTZahldatum().after(dStichtag)) {
                        bdBezahltFw = bdBezahltFw.add(zahlungen[i].getNBetragfw());
                        bdBezahltKursBelegdatum = bdBezahltKursBelegdatum
                                .add(zahlungen[i].getNBetragfw().multiply(erDto.getNKurs()));
                    }
                }

                tempData[row][OFFENE_FELD_BETRAG] = getLocaleFac().rechneUmInAndereWaehrungZuDatum(bdBezahltFw,
                        erDto.getWaehrungCNr(), theClientDto.getSMandantenwaehrung(),
                        // new Date(System.currentTimeMillis()),
                        dStichtag, theClientDto);
                tempData[row][OFFENE_FELD_BETRAG_KURS_BELEGDATUM] = bdBezahltKursBelegdatum;
                tempData[row][OFFENE_FELD_OFFEN] = getLocaleFac().rechneUmInAndereWaehrungZuDatum(
                        erDto.getNBetragfw().subtract(bdBezahltFw), erDto.getWaehrungCNr(),
                        theClientDto.getSMandantenwaehrung(),
                        // new Date(System.currentTimeMillis()),
                        dStichtag, theClientDto);
                tempData[row][OFFENE_FELD_OFFEN_KURS_BELEGDATUM] = erDto.getNBetrag()
                        .subtract(bdBezahltKursBelegdatum);

                tempData[row][OFFENE_FELD_BETRAG_FW] = bdBezahltFw;
                tempData[row][OFFENE_FELD_OFFEN_FW] = erDto.getNBetragfw().subtract(bdBezahltFw);
                tempData[row][OFFENE_FELD_ERWAEHRUNG] = erDto.getWaehrungCNr();
                tempData[row][OFFENE_FELD_WERT_FW] = erDto.getNBetragfw();
                tempData[row][OFFENE_FELD_ERKURS] = erDto.getNKurs();
                WechselkursDto wkDto = getLocaleFac().getKursZuDatum(erDto.getWaehrungCNr(),
                        theClientDto.getSMandantenwaehrung(), dStichtag, theClientDto);
                tempData[row][OFFENE_FELD_KURS_STICHTAG] = wkDto.getNKurs()
                        .setScale(LocaleFac.ANZAHL_NACHKOMMASTELLEN_WECHSELKURS, RoundingMode.HALF_EVEN);
                row++;
            }
            dataList.addAll(Arrays.asList(tempData));
        }

        data = dataList.toArray(new Object[0][]);
        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        mapParameter.put("P_DATUM", dStichtag);
        mapParameter.put("P_STICHTAGISTFREIGABEDATUM", new Boolean(bStichtagIstFreigabeDatum));
        mapParameter.put("P_ZUSATZKOSTEN", new Boolean(bZusatzkosten));
        String sSortierung = null;
        if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT) {
            sSortierung = "Lieferant";
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_RECHNUNGSNUMMER) {
            sSortierung = "Rechnungsnummer";
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT) {
            sSortierung = getTextRespectUISpr("lp.faelligkeit", theClientDto.getMandant(),
                    theClientDto.getLocUi());
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT_SKONTO1) {
            sSortierung = getTextRespectUISpr("er.faelligkeitskonto1", theClientDto.getMandant(),
                    theClientDto.getLocUi());
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT_SKONTO2) {
            sSortierung = getTextRespectUISpr("er.faelligkeitskonto2", theClientDto.getMandant(),
                    theClientDto.getLocUi());
        }
        mapParameter.put("P_SORTIERUNGNACHLIEFERANT",
                new Boolean(iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT));
        mapParameter.put(LPReport.P_SORTIERUNG, sSortierung);

        String sZessionstext = null;
        sZessionstext = getParameterFac().parametermandantFindByPrimaryKey(ParameterFac.PARAMETER_ZESSIONSTEXT,
                ParameterFac.KATEGORIE_ALLGEMEIN, theClientDto.getMandant()).getCWert();
        if (sZessionstext != null) {
            mapParameter.put("P_ZESSIONSTEXT", sZessionstext);
        }
        mapParameter.put("P_MANDANTENWAEHRUNG", theClientDto.getSMandantenwaehrung());
        initJRDS(mapParameter, EingangsrechnungReportFac.REPORT_MODUL,
                EingangsrechnungReportFac.REPORT_EINGANGSRECHNUNG_OFFENE, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
        return null;
    } finally {
        closeSession(session);
    }
}