Example usage for org.hibernate.criterion Restrictions in

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

Introduction

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

Prototype

public static Criterion in(String propertyName, Collection values) 

Source Link

Document

Apply an "in" constraint to the named property.

Usage

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

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printOffene(java.sql.Date dStichtag, int iOptionStichtag, String belegNrVon,
        String belegNrBis, Integer kundeIId, Integer kostenstelleIId, Integer fertigungsgruppeIId,
        int iSortierung, TheClientDto theClientDto) throws EJBExceptionLP {
    Session session = null;//from   w w w  .ja  v a  2 s.  co  m

    try {
        this.useCase = UC_OFFENE;
        this.index = -1;
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRLosReport.class);
        c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
        Map<String, Object> mapParameter = new TreeMap<String, Object>();

        if (kostenstelleIId != null) {
            KostenstelleDto kostenstelleDto = getSystemFac().kostenstelleFindByPrimaryKey(kostenstelleIId);
            mapParameter.put("P_KOSTENSTELLE", kostenstelleDto.formatKostenstellenbezeichnung());

            c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_KOSTENSTELLE_I_ID, kostenstelleIId));
        }
        boolean flrAuftragSchonVerwendet = false;
        if (kundeIId != null) {
            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kundeIId, theClientDto);
            mapParameter.put("P_KUNDE", kundeDto.getPartnerDto().formatFixTitelName1Name2());
            c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
            flrAuftragSchonVerwendet = true;
            c.add(Restrictions.eq("a." + AuftragFac.FLR_AUFTRAG_KUNDE_I_ID_AUFTRAGSADRESSE, kundeIId));
        }
        if (fertigungsgruppeIId != null) {
            c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_FERTIGUNGSGRUPPE_I_ID, fertigungsgruppeIId));
        }

        String[] stati = new String[4];
        stati[0] = LocaleFac.STATUS_AUSGEGEBEN;
        stati[1] = LocaleFac.STATUS_IN_PRODUKTION;
        stati[2] = LocaleFac.STATUS_TEILERLEDIGT;
        stati[3] = LocaleFac.STATUS_ANGELEGT;

        c.add(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR, stati));

        if (dStichtag != null) {

            dStichtag = Helper.cutDate(dStichtag);

            // PJ 14420
            mapParameter.put("P_STICHTAG", dStichtag);

            Calendar cal = Calendar.getInstance();
            cal.setTimeInMillis(dStichtag.getTime());
            cal.set(Calendar.DATE, cal.get(Calendar.DATE) + 1);

            dStichtag = new java.sql.Date(cal.getTimeInMillis());

            String datumsart = "";

            if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_BEGINNDATUM) {
                c.add(Restrictions.lt(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, dStichtag));

                datumsart = getTextRespectUISpr("lp.begintermin", theClientDto.getMandant(),
                        theClientDto.getLocUi());

            } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_ENDEDATUM) {
                c.add(Restrictions.lt(FertigungFac.FLR_LOS_T_PRODUKTIONSENDE, dStichtag));
                datumsart = getTextRespectUISpr("lp.endetermin", theClientDto.getMandant(),
                        theClientDto.getLocUi());

            } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_LIEFERTERMIN) {
                if (flrAuftragSchonVerwendet == false) {
                    c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                    flrAuftragSchonVerwendet = true;
                    c.add(Restrictions.lt("a." + AuftragFac.FLR_AUFTRAG_T_LIEFERTERMIN, dStichtag));

                }
                datumsart = getTextRespectUISpr("bes.liefertermin", theClientDto.getMandant(),
                        theClientDto.getLocUi());

            }

            mapParameter.put("P_DATUMSART", datumsart);

        }
        LpBelegnummerFormat f = getBelegnummerGeneratorObj().getBelegnummernFormat(theClientDto.getMandant());
        Integer iGeschaeftsjahr = getParameterFac().getGeschaeftsjahr(theClientDto.getMandant());
        String sMandantKuerzel = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_ALLGEMEIN, ParameterFac.PARAMETER_BELEGNUMMER_MANDANTKENNUNG).getCWert();
        if (belegNrVon != null) {
            String sVon = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr,
                    sMandantKuerzel, belegNrVon);
            c.add(Restrictions.ge(FertigungFac.FLR_LOS_C_NR, sVon));
            mapParameter.put("P_LOSNRVON", sVon);
        }
        if (belegNrBis != null) {
            String sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr,
                    sMandantKuerzel, belegNrBis);
            c.add(Restrictions.le(FertigungFac.FLR_LOS_C_NR, sBis));
            mapParameter.put("P_LOSNRBIS", sBis);
        }

        // Sortierung
        if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_KOSTENSTELLE) {
            c.createCriteria(FertigungFac.FLR_LOSREPORT_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
            mapParameter.put(P_SORTIERUNG,
                    getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_KUNDE) {
            if (flrAuftragSchonVerwendet == false) {
                c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                flrAuftragSchonVerwendet = true;
            }
            c.createAlias("a." + AuftragFac.FLR_AUFTRAG_FLRKUNDE, "k", CriteriaSpecification.LEFT_JOIN);
            c.createAlias("k." + KundeFac.FLR_PARTNER, "p", CriteriaSpecification.LEFT_JOIN);

            c.addOrder(Order.asc("p." + PartnerFac.FLR_PARTNER_C_NAME1NACHNAMEFIRMAZEILE1));
            c.addOrder(Order.asc("k.i_id"));

            mapParameter.put(P_SORTIERUNG,
                    getTextRespectUISpr("lp.kunde", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_KUNDEUNDGEWAEHLTERTERMIN) {
            if (flrAuftragSchonVerwendet == false) {
                c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                flrAuftragSchonVerwendet = true;
            }
            c.createAlias("a." + AuftragFac.FLR_AUFTRAG_FLRKUNDE, "k", CriteriaSpecification.LEFT_JOIN);
            c.createAlias("k." + KundeFac.FLR_PARTNER, "p", CriteriaSpecification.LEFT_JOIN);

            c.addOrder(Order.asc("p." + PartnerFac.FLR_PARTNER_C_NAME1NACHNAMEFIRMAZEILE1));

            if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_BEGINNDATUM) {
                c.addOrder(Order.asc(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN));
            } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_ENDEDATUM) {
                c.addOrder(Order.asc(FertigungFac.FLR_LOS_T_PRODUKTIONSENDE));
            } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_LIEFERTERMIN) {
                c.addOrder(Order.asc("a." + AuftragFac.FLR_AUFTRAG_T_LIEFERTERMIN));
            }

            mapParameter.put(P_SORTIERUNG, getTextRespectUISpr("fert.kundeundtermin", theClientDto.getMandant(),
                    theClientDto.getLocUi()));
        } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_LIEFERTERMIN) {
            if (flrAuftragSchonVerwendet == false) {
                c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                flrAuftragSchonVerwendet = true;
            }
            c.createAlias("a." + AuftragFac.FLR_AUFTRAG_FLRKUNDE, "k", CriteriaSpecification.LEFT_JOIN);
            c.createAlias("k." + KundeFac.FLR_PARTNER, "p", CriteriaSpecification.LEFT_JOIN);

            c.addOrder(Order.asc("a." + AuftragFac.FLR_AUFTRAG_T_LIEFERTERMIN));
            c.addOrder(Order.asc("p." + PartnerFac.FLR_PARTNER_C_NAME1NACHNAMEFIRMAZEILE1));

            mapParameter.put(P_SORTIERUNG, getTextRespectUISpr("fert.liefertermin", theClientDto.getMandant(),
                    theClientDto.getLocUi()));
        } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_ARTIKEL) {
            c.createAlias(FertigungFac.FLR_LOS_FLRSTUECKLISTE, "s");
            c.createAlias("s." + StuecklisteFac.FLR_STUECKLISTE_FLRARTIKEL, "art");
            c.addOrder(Order.asc("art.c_nr"));
            mapParameter.put(P_SORTIERUNG,
                    getTextRespectUISpr("lp.kunde", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_FERTIGUNGSGRUPPE) {
            c.createAlias(FertigungFac.FLR_LOSREPORT_FLRFERTIGUNGSGRUPPE, "f");
            c.addOrder(Order.asc("f.c_bez"));
            mapParameter.put(P_SORTIERUNG, getTextRespectUISpr("lp.fertigungsgruppe", theClientDto.getMandant(),
                    theClientDto.getLocUi()));
        } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_BEGINN) {
            c.addOrder(Order.asc(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN));
            mapParameter.put(P_SORTIERUNG,
                    getTextRespectUISpr("lp.beginn", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_ENDE) {
            c.addOrder(Order.asc(FertigungFac.FLR_LOS_T_PRODUKTIONSENDE));
            mapParameter.put(P_SORTIERUNG,
                    getTextRespectUISpr("lp.ende", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else {
            mapParameter.put(P_SORTIERUNG,
                    getTextRespectUISpr("lp.losnr", theClientDto.getMandant(), theClientDto.getLocUi()));
        }

        // 2tes sortierkriterium immer Losnr

        if (iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_BEGINN
                || iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_ENDE
                || iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_LIEFERTERMIN
                || iSortierung == FertigungReportFac.OFFENE_OPTION_SORTIERUNG_KUNDEUNDGEWAEHLTERTERMIN) {
            if (flrAuftragSchonVerwendet == false) {
                c.createAlias(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
                flrAuftragSchonVerwendet = true;
            }
            c.addOrder(Order.asc("a.c_nr"));
        } else {

            c.addOrder(Order.asc(FertigungFac.FLR_LOS_C_NR));
        }

        List<?> list = c.list();
        data = new Object[list.size()][OFFENE_SPALTENANZAHL];
        int i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLRLosReport los = (FLRLosReport) iter.next();

            if (los.getFlrauftrag() != null) {

                Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId, theClientDto);
                data[i][OFFENE_KUNDE] = partnerDto.formatFixTitelName1Name2();
                data[i][OFFENE_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
            }

            if (los.getFlrauftrag() != null) {
                data[i][OFFENE_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                data[i][OFFENE_PROJEKT] = los.getFlrauftrag().getC_bez();
                data[i][OFFENE_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
            }
            BigDecimal bdGeliefert = new BigDecimal(0);
            for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                bdGeliefert = bdGeliefert.add(item.getN_menge());
            }
            data[i][OFFENE_GELIEFERT] = bdGeliefert;
            if (los.getFlrstueckliste() != null) {
                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                        los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                data[i][OFFENE_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                data[i][OFFENE_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                data[i][OFFENE_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel().getC_nr();

                data[i][OFFENE_DETAILBEDARF] = getRahmenbedarfeFac()
                        .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                // Offene Fehlmengen
                data[i][OFFENE_FEHLMENGE] = getFehlmengeFac()
                        .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                        .lossollarbeitsplanFindByLosIId(los.getI_id());

                BigDecimal bdFertigungszeit = new BigDecimal(0);
                for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                    bdFertigungszeit = bdFertigungszeit.add(lossollarbeitsplanDto[j].getNGesamtzeit());
                }
                data[i][OFFENE_FERTIGUNGSZEIT] = bdFertigungszeit;

                // Rahmenbestellt
                Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                        .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                    BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                            .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                    data[i][OFFENE_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                }
                data[i][OFFENE_RESERVIERUNGEN] = getReservierungFac()
                        .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                data[i][OFFENE_RAHMENRESERVIERUNGEN] = getReservierungFac()
                        .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

            } else {
                data[i][OFFENE_BEZEICHNUNG] = los.getC_projekt();
                data[i][OFFENE_ZUSATZBEZEICHNUNG] = null;
                data[i][OFFENE_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                        theClientDto.getMandant(), theClientDto.getLocUi());
            }

            GregorianCalendar gc = new GregorianCalendar();
            gc.setTime(los.getT_produktionsbeginn());
            data[i][OFFENE_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
            data[i][OFFENE_LOSGROESSE] = los.getN_losgroesse();
            data[i][OFFENE_LOSNUMMER] = los.getC_nr();
            data[i][OFFENE_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
            /**
             * @todo material PJ 4239
             */
            data[i][OFFENE_MATERIAL] = null;
            data[i][OFFENE_BEGINN] = los.getT_produktionsbeginn();
            data[i][OFFENE_ENDE] = los.getT_produktionsende();
            data[i][OFFENE_LOSSTATUS] = los.getStatus_c_nr();

            // PJ 15009

            String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                    + los.getI_id() + " AND flrfehlmenge.n_menge>0";
            Session session2 = FLRSessionFactory.getFactory().openSession();
            Query query = session2.createQuery(queryf);
            List<?> results = query.list();

            data[i][OFFENE_LOSHATFEHLMENGE] = new Boolean(false);
            if (results.size() > 0) {
                BigDecimal bd = (BigDecimal) results.iterator().next();

                if (bd != null && bd.doubleValue() > 0) {
                    data[i][OFFENE_LOSHATFEHLMENGE] = new Boolean(true);
                }
            }
            session2.close();
        }

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_OFFENE,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    } catch (Exception t) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
    } finally {
        closeSession(session);
    }
}

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

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printOffeneArbeitsgaenge(java.sql.Date dStichtag, int iOptionStichtag, String belegNrVon,
        String belegNrBis, Integer kundeIId, Integer kostenstelleIId, Integer fertigungsgruppeIId,
        Integer artikelgruppeIId, Integer maschineIId, boolean bSollstundenbetrachtung,
        TheClientDto theClientDto) {/*from w  w  w . j  a  va 2 s . c o m*/
    Session session = null;

    try {
        this.useCase = UC_OFFENE_AG;
        this.index = -1;
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRLossollarbeitsplan.class);

        c.createAlias(FertigungFac.FLR_LOSSOLLARBEITSPLAN_FLRLOS, "l", CriteriaSpecification.LEFT_JOIN);

        c.add(Restrictions.eq("l." + FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));

        c.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLARBEITSPLAN_B_FERTIG, Helper.boolean2Short(false)));

        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        mapParameter.put("P_SOLLSTUNDENBETRACHTUNG", new Boolean(bSollstundenbetrachtung));
        if (artikelgruppeIId != null) {
            c.createAlias(FertigungFac.FLR_LOSSOLLARBEITSPLAN_FLRARTIKEL, "artikel",
                    CriteriaSpecification.LEFT_JOIN);
            c.createAlias("artikel." + ArtikelFac.FLR_ARTIKEL_FLRARTIKELGRUPPE, "artikelgruppe",
                    CriteriaSpecification.LEFT_JOIN);
            c.add(Restrictions.eq("artikelgruppe.i_id", artikelgruppeIId));

            ArtgruDto artgruDto = getArtikelFac().artgruFindByPrimaryKey(artikelgruppeIId, theClientDto);

            mapParameter.put("P_ARTIKELGRUPPE", artgruDto.getBezeichnung());
        }

        /*
         * if (kostenstelleIId != null) { KostenstelleDto kostenstelleDto =
         * getSystemFac() .kostenstelleFindByPrimaryKey(kostenstelleIId);
         * mapParameter.put("P_KOSTENSTELLE",
         * kostenstelleDto.formatKostenstellenbezeichnung());
         * 
         * c.add(Restrictions.eq("l." +
         * FertigungFac.FLR_LOSREPORT_KOSTENSTELLE_I_ID, kostenstelleIId));
         * }
         */
        boolean flrAuftragSchonVerwendet = false;
        if (kundeIId != null) {
            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kundeIId, theClientDto);
            mapParameter.put("P_KUNDE", kundeDto.getPartnerDto().formatFixTitelName1Name2());
            c.createAlias("l." + FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a", CriteriaSpecification.LEFT_JOIN);
            flrAuftragSchonVerwendet = true;
            c.add(Restrictions.eq("a." + AuftragFac.FLR_AUFTRAG_KUNDE_I_ID_AUFTRAGSADRESSE, kundeIId));
        }

        String[] stati = new String[4];
        stati[0] = LocaleFac.STATUS_AUSGEGEBEN;
        stati[1] = LocaleFac.STATUS_IN_PRODUKTION;
        stati[2] = LocaleFac.STATUS_TEILERLEDIGT;
        stati[3] = LocaleFac.STATUS_ANGELEGT;

        c.add(Restrictions.in("l." + FertigungFac.FLR_LOS_STATUS_C_NR, stati));

        if (dStichtag != null) {

            dStichtag = Helper.cutDate(dStichtag);

            // PJ 14420
            mapParameter.put("P_STICHTAG", dStichtag);

            Calendar cal = Calendar.getInstance();
            cal.setTimeInMillis(dStichtag.getTime());
            cal.set(Calendar.DATE, cal.get(Calendar.DATE) + 1);

            dStichtag = new java.sql.Date(cal.getTimeInMillis());

            String datumsart = "";

            if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_BEGINNDATUM) {
                c.add(Restrictions.lt("l." + FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, dStichtag));

                datumsart = getTextRespectUISpr("lp.begintermin", theClientDto.getMandant(),
                        theClientDto.getLocUi());

            } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_ENDEDATUM) {
                c.add(Restrictions.lt("l." + FertigungFac.FLR_LOS_T_PRODUKTIONSENDE, dStichtag));
                datumsart = getTextRespectUISpr("lp.endetermin", theClientDto.getMandant(),
                        theClientDto.getLocUi());

            } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_LIEFERTERMIN) {
                if (flrAuftragSchonVerwendet == false) {
                    c.createAlias("l." + FertigungFac.FLR_LOSREPORT_FLRAUFTRAG, "a",
                            CriteriaSpecification.LEFT_JOIN);
                    flrAuftragSchonVerwendet = true;
                    c.add(Restrictions.lt("a." + AuftragFac.FLR_AUFTRAG_T_LIEFERTERMIN, dStichtag));

                }
                datumsart = getTextRespectUISpr("bes.liefertermin", theClientDto.getMandant(),
                        theClientDto.getLocUi());

            }

            mapParameter.put("P_DATUMSART", datumsart);

        }
        LpBelegnummerFormat f = getBelegnummerGeneratorObj().getBelegnummernFormat(theClientDto.getMandant());
        Integer iGeschaeftsjahr = getParameterFac().getGeschaeftsjahr(theClientDto.getMandant());
        String sMandantKuerzel = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_ALLGEMEIN, ParameterFac.PARAMETER_BELEGNUMMER_MANDANTKENNUNG).getCWert();
        if (belegNrVon != null) {
            String sVon = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr,
                    sMandantKuerzel, belegNrVon);
            c.add(Restrictions.ge("l." + FertigungFac.FLR_LOS_C_NR, sVon));
            mapParameter.put("P_LOSNRVON", sVon);
        }
        if (belegNrBis != null) {
            String sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr,
                    sMandantKuerzel, belegNrBis);
            c.add(Restrictions.le("l." + FertigungFac.FLR_LOS_C_NR, sBis));
            mapParameter.put("P_LOSNRBIS", sBis);
        }

        if (maschineIId != null) {
            MaschineDto mDto = getZeiterfassungFac().maschineFindByPrimaryKey(maschineIId);
            c.add(Restrictions.eq("maschine_i_id", maschineIId));
            mapParameter.put("P_MASCHINE", mDto.getBezeichnung());
        }

        List<?> list = c.list();
        data = new Object[list.size()][OFFENE_AG_SPALTENANZAHL];
        int i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLRLossollarbeitsplan a = (FLRLossollarbeitsplan) iter.next();
            FLRLos los = a.getFlrlos();
            if (fertigungsgruppeIId != null && kostenstelleIId != null) {
                if (los.getFertigungsgruppe_i_id().intValue() != fertigungsgruppeIId.intValue()
                        && los.getKostenstelle_i_id().intValue() != kostenstelleIId.intValue()) {
                    i--;
                } else {
                    // skip
                }
            } else if (fertigungsgruppeIId != null && kostenstelleIId == null) {
                if (los.getFertigungsgruppe_i_id().intValue() != fertigungsgruppeIId.intValue()) {
                    i--;
                } else {
                    // skip
                }
            } else if (fertigungsgruppeIId == null && kostenstelleIId != null) {
                if (los.getKostenstelle_i_id().intValue() != kostenstelleIId.intValue()) {
                    i--;
                } else {
                    // skip
                }
            }
        }
        if (fertigungsgruppeIId != null || kostenstelleIId != null) {
            data = new Object[i][OFFENE_AG_SPALTENANZAHL];
        }
        i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLRLossollarbeitsplan a = (FLRLossollarbeitsplan) iter.next();
            FLRLos los = a.getFlrlos();
            if (fertigungsgruppeIId != null && kostenstelleIId != null) {
                if (los.getFertigungsgruppe_i_id().intValue() != fertigungsgruppeIId.intValue()
                        && los.getKostenstelle_i_id().intValue() != kostenstelleIId.intValue()) {
                    i--;
                } else {
                    data[i][OFFENE_AG_AGNUMMER] = a.getI_arbeitsgangsnummer();
                    data[i][OFFENE_AG_UAGNUMMER] = a.getI_unterarbeitsgang();
                    data[i][OFFENE_AG_AG_ARTIKEL] = a.getFlrartikel().getC_nr();
                    ArtikelDto aDto = getArtikelFac().artikelFindByPrimaryKeySmall(a.getFlrartikel().getI_id(),
                            theClientDto);
                    data[i][OFFENE_AG_AG_ARTIKELBEZEICHNUNG] = aDto.formatBezeichnung();

                    if (Helper.short2boolean(a.getB_fertig())) {
                        data[i][OFFENE_AG_AG_GESAMTZEIT] = new BigDecimal(0);
                    } else {

                        data[i][OFFENE_AG_AG_GESAMTZEIT] = a.getN_gesamtzeit();
                    }

                    if (bSollstundenbetrachtung == true) {
                        data[i][OFFENE_AG_AG_ISTZEIT] = getZeiterfassungFac().getSummeZeitenEinesBeleges(
                                LocaleFac.BELEGART_LOS, los.getI_id(), a.getI_id(), null, null, null,
                                theClientDto);

                    }

                    if (a.getFlrmaschine() != null) {
                        data[i][OFFENE_AG_AG_MASCHINE_BEZEICHNUNG] = a.getFlrmaschine().getC_bez();
                        data[i][OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER] = a.getFlrmaschine()
                                .getC_identifikationsnr();
                        data[i][OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER] = a.getFlrmaschine()
                                .getC_inventarnummer();
                    }

                    if (a.getFlrartikel().getFlrartikelgruppe() != null) {
                        data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = a.getFlrartikel().getFlrartikelgruppe()
                                .getC_nr();
                    } else {
                        data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = "";
                    }

                    if (a.getI_maschinenversatztage() != null) {
                        data[i][OFFENE_AG_AG_BEGINN] = Helper.addiereTageZuTimestamp(
                                (Timestamp) los.getT_produktionsbeginn(), a.getI_maschinenversatztage());

                    } else {
                        data[i][OFFENE_AG_AG_BEGINN] = los.getT_produktionsbeginn();

                    }

                    if (los.getFlrauftrag() != null) {

                        Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                        PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId,
                                theClientDto);
                        data[i][OFFENE_AG_KUNDE] = partnerDto.formatFixTitelName1Name2();
                        data[i][OFFENE_AG_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
                    }

                    if (los.getFlrauftrag() != null) {
                        data[i][OFFENE_AG_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                        data[i][OFFENE_AG_PROJEKT] = los.getFlrauftrag().getC_bez();
                        data[i][OFFENE_AG_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                    }
                    BigDecimal bdGeliefert = new BigDecimal(0);
                    for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                        FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                        bdGeliefert = bdGeliefert.add(item.getN_menge());
                    }
                    data[i][OFFENE_AG_GELIEFERT] = bdGeliefert;
                    if (los.getFlrstueckliste() != null) {
                        ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                        data[i][OFFENE_AG_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                        data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                        data[i][OFFENE_AG_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel().getC_nr();

                        data[i][OFFENE_AG_DETAILBEDARF] = getRahmenbedarfeFac()
                                .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                        // Offene Fehlmengen
                        data[i][OFFENE_AG_FEHLMENGE] = getFehlmengeFac()
                                .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                        LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                                .lossollarbeitsplanFindByLosIId(los.getI_id());

                        BigDecimal bdFertigungszeit = new BigDecimal(0);
                        for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                            bdFertigungszeit = bdFertigungszeit.add(lossollarbeitsplanDto[j].getNGesamtzeit());
                        }
                        data[i][OFFENE_AG_FERTIGUNGSZEIT] = bdFertigungszeit;

                        // Rahmenbestellt
                        Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                                .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                        if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                            BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                    .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                            data[i][OFFENE_AG_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                        }
                        data[i][OFFENE_AG_RESERVIERUNGEN] = getReservierungFac()
                                .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                        data[i][OFFENE_AG_RAHMENRESERVIERUNGEN] = getReservierungFac()
                                .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                    } else {
                        data[i][OFFENE_AG_BEZEICHNUNG] = los.getC_projekt();
                        data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = null;
                        data[i][OFFENE_AG_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                                theClientDto.getMandant(), theClientDto.getLocUi());
                    }

                    GregorianCalendar gc = new GregorianCalendar();
                    gc.setTime(los.getT_produktionsbeginn());
                    data[i][OFFENE_AG_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
                    data[i][OFFENE_AG_LOSGROESSE] = los.getN_losgroesse();
                    data[i][OFFENE_AG_LOSNUMMER] = los.getC_nr();
                    data[i][OFFENE_AG_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                    /**
                     * @todo material PJ 4239
                     */
                    data[i][OFFENE_AG_MATERIAL] = null;
                    data[i][OFFENE_AG_BEGINN] = los.getT_produktionsbeginn();
                    data[i][OFFENE_AG_ENDE] = los.getT_produktionsende();
                    data[i][OFFENE_AG_LOSSTATUS] = los.getStatus_c_nr();

                    // PJ 15009

                    String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                            + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                    Session session2 = FLRSessionFactory.getFactory().openSession();
                    Query query = session2.createQuery(queryf);
                    List<?> results = query.list();

                    data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(false);
                    if (results.size() > 0) {
                        BigDecimal bd = (BigDecimal) results.iterator().next();

                        if (bd != null && bd.doubleValue() > 0) {
                            data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(true);
                        }
                    }
                    session2.close();
                }
            } else if (fertigungsgruppeIId != null || kostenstelleIId != null) {
                if (fertigungsgruppeIId != null) {
                    if (los.getFertigungsgruppe_i_id().intValue() != fertigungsgruppeIId.intValue()) {
                        i--;
                    } else {
                        data[i][OFFENE_AG_AGNUMMER] = a.getI_arbeitsgangsnummer();
                        data[i][OFFENE_AG_UAGNUMMER] = a.getI_unterarbeitsgang();
                        data[i][OFFENE_AG_AG_ARTIKEL] = a.getFlrartikel().getC_nr();
                        ArtikelDto aDto = getArtikelFac()
                                .artikelFindByPrimaryKeySmall(a.getFlrartikel().getI_id(), theClientDto);
                        data[i][OFFENE_AG_AG_ARTIKELBEZEICHNUNG] = aDto.formatBezeichnung();

                        if (Helper.short2boolean(a.getB_fertig())) {
                            data[i][OFFENE_AG_AG_GESAMTZEIT] = new BigDecimal(0);
                        } else {
                            data[i][OFFENE_AG_AG_GESAMTZEIT] = a.getN_gesamtzeit();
                        }

                        if (bSollstundenbetrachtung == true) {
                            data[i][OFFENE_AG_AG_ISTZEIT] = getZeiterfassungFac().getSummeZeitenEinesBeleges(
                                    LocaleFac.BELEGART_LOS, los.getI_id(), a.getI_id(), null, null, null,
                                    theClientDto);

                        }

                        if (a.getFlrmaschine() != null) {
                            data[i][OFFENE_AG_AG_MASCHINE_BEZEICHNUNG] = a.getFlrmaschine().getC_bez();
                            data[i][OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER] = a.getFlrmaschine()
                                    .getC_identifikationsnr();
                            data[i][OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER] = a.getFlrmaschine()
                                    .getC_inventarnummer();
                        }

                        if (a.getFlrartikel().getFlrartikelgruppe() != null) {
                            data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = a.getFlrartikel().getFlrartikelgruppe()
                                    .getC_nr();
                        } else {
                            data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = "";
                        }

                        if (a.getI_maschinenversatztage() != null) {
                            data[i][OFFENE_AG_AG_BEGINN] = Helper.addiereTageZuTimestamp(
                                    (Timestamp) los.getT_produktionsbeginn(), a.getI_maschinenversatztage());

                        } else {
                            data[i][OFFENE_AG_AG_BEGINN] = los.getT_produktionsbeginn();

                        }

                        if (los.getFlrauftrag() != null) {

                            Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                            PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId,
                                    theClientDto);
                            data[i][OFFENE_AG_KUNDE] = partnerDto.formatFixTitelName1Name2();
                            data[i][OFFENE_AG_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
                        }

                        if (los.getFlrauftrag() != null) {
                            data[i][OFFENE_AG_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                            data[i][OFFENE_AG_PROJEKT] = los.getFlrauftrag().getC_bez();
                            data[i][OFFENE_AG_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                        }
                        BigDecimal bdGeliefert = new BigDecimal(0);
                        for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                            FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                            bdGeliefert = bdGeliefert.add(item.getN_menge());
                        }
                        data[i][OFFENE_AG_GELIEFERT] = bdGeliefert;
                        if (los.getFlrstueckliste() != null) {
                            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                    los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                            data[i][OFFENE_AG_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                            data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                            data[i][OFFENE_AG_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel()
                                    .getC_nr();

                            data[i][OFFENE_AG_DETAILBEDARF] = getRahmenbedarfeFac()
                                    .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                            // Offene Fehlmengen
                            data[i][OFFENE_AG_FEHLMENGE] = getFehlmengeFac()
                                    .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                            LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                                    .lossollarbeitsplanFindByLosIId(los.getI_id());

                            BigDecimal bdFertigungszeit = new BigDecimal(0);
                            for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                                bdFertigungszeit = bdFertigungszeit
                                        .add(lossollarbeitsplanDto[j].getNGesamtzeit());
                            }
                            data[i][OFFENE_AG_FERTIGUNGSZEIT] = bdFertigungszeit;

                            // Rahmenbestellt
                            Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                                    .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                            if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                                BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                        .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                                data[i][OFFENE_AG_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                            }
                            data[i][OFFENE_AG_RESERVIERUNGEN] = getReservierungFac()
                                    .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                            data[i][OFFENE_AG_RAHMENRESERVIERUNGEN] = getReservierungFac()
                                    .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                        } else {
                            data[i][OFFENE_AG_BEZEICHNUNG] = los.getC_projekt();
                            data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = null;
                            data[i][OFFENE_AG_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                                    theClientDto.getMandant(), theClientDto.getLocUi());
                        }

                        GregorianCalendar gc = new GregorianCalendar();
                        gc.setTime(los.getT_produktionsbeginn());
                        data[i][OFFENE_AG_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
                        data[i][OFFENE_AG_LOSGROESSE] = los.getN_losgroesse();
                        data[i][OFFENE_AG_LOSNUMMER] = los.getC_nr();
                        data[i][OFFENE_AG_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                        /**
                         * @todo material PJ 4239
                         */
                        data[i][OFFENE_AG_MATERIAL] = null;
                        data[i][OFFENE_AG_BEGINN] = los.getT_produktionsbeginn();
                        data[i][OFFENE_AG_ENDE] = los.getT_produktionsende();
                        data[i][OFFENE_AG_LOSSTATUS] = los.getStatus_c_nr();

                        // PJ 15009

                        String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                                + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                        Session session2 = FLRSessionFactory.getFactory().openSession();
                        Query query = session2.createQuery(queryf);
                        List<?> results = query.list();

                        data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(false);
                        if (results.size() > 0) {
                            BigDecimal bd = (BigDecimal) results.iterator().next();

                            if (bd != null && bd.doubleValue() > 0) {
                                data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(true);
                            }
                        }
                        session2.close();
                    }
                } else if (kostenstelleIId != null) {
                    if (los.getKostenstelle_i_id().intValue() != kostenstelleIId.intValue()) {
                        i--;
                    } else {
                        data[i][OFFENE_AG_AGNUMMER] = a.getI_arbeitsgangsnummer();
                        data[i][OFFENE_AG_UAGNUMMER] = a.getI_unterarbeitsgang();
                        data[i][OFFENE_AG_AG_ARTIKEL] = a.getFlrartikel().getC_nr();
                        ArtikelDto aDto = getArtikelFac()
                                .artikelFindByPrimaryKeySmall(a.getFlrartikel().getI_id(), theClientDto);
                        data[i][OFFENE_AG_AG_ARTIKELBEZEICHNUNG] = aDto.formatBezeichnung();

                        if (Helper.short2boolean(a.getB_fertig())) {
                            data[i][OFFENE_AG_AG_GESAMTZEIT] = new BigDecimal(0);
                        } else {
                            data[i][OFFENE_AG_AG_GESAMTZEIT] = a.getN_gesamtzeit();
                        }
                        if (bSollstundenbetrachtung == true) {
                            data[i][OFFENE_AG_AG_ISTZEIT] = getZeiterfassungFac().getSummeZeitenEinesBeleges(
                                    LocaleFac.BELEGART_LOS, los.getI_id(), a.getI_id(), null, null, null,
                                    theClientDto);

                        }
                        if (a.getFlrmaschine() != null) {
                            data[i][OFFENE_AG_AG_MASCHINE_BEZEICHNUNG] = a.getFlrmaschine().getC_bez();
                            data[i][OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER] = a.getFlrmaschine()
                                    .getC_identifikationsnr();
                            data[i][OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER] = a.getFlrmaschine()
                                    .getC_inventarnummer();
                        }
                        if (a.getFlrartikel().getFlrartikelgruppe() != null) {
                            data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = a.getFlrartikel().getFlrartikelgruppe()
                                    .getC_nr();
                        } else {
                            data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = "";
                        }

                        if (a.getI_maschinenversatztage() != null) {
                            data[i][OFFENE_AG_AG_BEGINN] = Helper.addiereTageZuTimestamp(
                                    (Timestamp) los.getT_produktionsbeginn(), a.getI_maschinenversatztage());

                        } else {
                            data[i][OFFENE_AG_AG_BEGINN] = los.getT_produktionsbeginn();

                        }

                        if (los.getFlrauftrag() != null) {

                            Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                            PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId,
                                    theClientDto);
                            data[i][OFFENE_AG_KUNDE] = partnerDto.formatFixTitelName1Name2();
                            data[i][OFFENE_AG_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
                        }

                        if (los.getFlrauftrag() != null) {
                            data[i][OFFENE_AG_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                            data[i][OFFENE_AG_PROJEKT] = los.getFlrauftrag().getC_bez();
                            data[i][OFFENE_AG_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                        }
                        BigDecimal bdGeliefert = new BigDecimal(0);
                        for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                            FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                            bdGeliefert = bdGeliefert.add(item.getN_menge());
                        }
                        data[i][OFFENE_AG_GELIEFERT] = bdGeliefert;
                        if (los.getFlrstueckliste() != null) {
                            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                    los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                            data[i][OFFENE_AG_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                            data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                            data[i][OFFENE_AG_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel()
                                    .getC_nr();

                            data[i][OFFENE_AG_DETAILBEDARF] = getRahmenbedarfeFac()
                                    .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                            // Offene Fehlmengen
                            data[i][OFFENE_AG_FEHLMENGE] = getFehlmengeFac()
                                    .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                            LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                                    .lossollarbeitsplanFindByLosIId(los.getI_id());

                            BigDecimal bdFertigungszeit = new BigDecimal(0);
                            for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                                bdFertigungszeit = bdFertigungszeit
                                        .add(lossollarbeitsplanDto[j].getNGesamtzeit());
                            }
                            data[i][OFFENE_AG_FERTIGUNGSZEIT] = bdFertigungszeit;

                            // Rahmenbestellt
                            Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                                    .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                            if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                                BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                        .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                                data[i][OFFENE_AG_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                            }
                            data[i][OFFENE_AG_RESERVIERUNGEN] = getReservierungFac()
                                    .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                            data[i][OFFENE_AG_RAHMENRESERVIERUNGEN] = getReservierungFac()
                                    .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                        } else {
                            data[i][OFFENE_AG_BEZEICHNUNG] = los.getC_projekt();
                            data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = null;
                            data[i][OFFENE_AG_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                                    theClientDto.getMandant(), theClientDto.getLocUi());
                        }

                        GregorianCalendar gc = new GregorianCalendar();
                        gc.setTime(los.getT_produktionsbeginn());
                        data[i][OFFENE_AG_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
                        data[i][OFFENE_AG_LOSGROESSE] = los.getN_losgroesse();
                        data[i][OFFENE_AG_LOSNUMMER] = los.getC_nr();
                        data[i][OFFENE_AG_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                        /**
                         * @todo material PJ 4239
                         */
                        data[i][OFFENE_AG_MATERIAL] = null;
                        data[i][OFFENE_AG_BEGINN] = los.getT_produktionsbeginn();
                        data[i][OFFENE_AG_ENDE] = los.getT_produktionsende();
                        data[i][OFFENE_AG_LOSSTATUS] = los.getStatus_c_nr();

                        // PJ 15009

                        String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                                + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                        Session session2 = FLRSessionFactory.getFactory().openSession();
                        Query query = session2.createQuery(queryf);
                        List<?> results = query.list();

                        data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(false);
                        if (results.size() > 0) {
                            BigDecimal bd = (BigDecimal) results.iterator().next();

                            if (bd != null && bd.doubleValue() > 0) {
                                data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(true);
                            }
                        }
                        session2.close();
                    }
                }
            } else {

                data[i][OFFENE_AG_AGNUMMER] = a.getI_arbeitsgangsnummer();
                data[i][OFFENE_AG_UAGNUMMER] = a.getI_unterarbeitsgang();
                data[i][OFFENE_AG_AG_ARTIKEL] = a.getFlrartikel().getC_nr();
                ArtikelDto aDto = getArtikelFac().artikelFindByPrimaryKeySmall(a.getFlrartikel().getI_id(),
                        theClientDto);
                data[i][OFFENE_AG_AG_ARTIKELBEZEICHNUNG] = aDto.formatBezeichnung();

                if (Helper.short2boolean(a.getB_fertig())) {
                    data[i][OFFENE_AG_AG_GESAMTZEIT] = new BigDecimal(0);
                } else {
                    data[i][OFFENE_AG_AG_GESAMTZEIT] = a.getN_gesamtzeit();
                }
                if (bSollstundenbetrachtung == true) {
                    data[i][OFFENE_AG_AG_ISTZEIT] = getZeiterfassungFac().getSummeZeitenEinesBeleges(
                            LocaleFac.BELEGART_LOS, los.getI_id(), a.getI_id(), null, null, null, theClientDto);

                }
                if (a.getFlrmaschine() != null) {
                    data[i][OFFENE_AG_AG_MASCHINE_BEZEICHNUNG] = a.getFlrmaschine().getC_bez();
                    data[i][OFFENE_AG_AG_MASCHINE_IDENTIFIKATIONSNUMMMER] = a.getFlrmaschine()
                            .getC_identifikationsnr();
                    data[i][OFFENE_AG_AG_MASCHINE_INVENTARNUMMMER] = a.getFlrmaschine().getC_inventarnummer();
                }
                if (a.getFlrartikel().getFlrartikelgruppe() != null) {
                    data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = a.getFlrartikel().getFlrartikelgruppe().getC_nr();
                } else {
                    data[i][OFFENE_AG_AG_ARTIKELGRUPPPE] = "";
                }

                if (a.getI_maschinenversatztage() != null) {
                    data[i][OFFENE_AG_AG_BEGINN] = Helper.addiereTageZuTimestamp(
                            (Timestamp) los.getT_produktionsbeginn(), a.getI_maschinenversatztage());

                } else {
                    data[i][OFFENE_AG_AG_BEGINN] = los.getT_produktionsbeginn();

                }

                if (los.getFlrauftrag() != null) {

                    Integer partnerIId = los.getFlrauftrag().getFlrkunde().getFlrpartner().getI_id();
                    PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerIId, theClientDto);
                    data[i][OFFENE_AG_KUNDE] = partnerDto.formatFixTitelName1Name2();
                    data[i][OFFENE_AG_AUFTRAGSPOENALE] = los.getFlrauftrag().getB_poenale();
                }

                if (los.getFlrauftrag() != null) {
                    data[i][OFFENE_AG_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                    data[i][OFFENE_AG_PROJEKT] = los.getFlrauftrag().getC_bez();
                    data[i][OFFENE_AG_LIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                }
                BigDecimal bdGeliefert = new BigDecimal(0);
                for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                    FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                    bdGeliefert = bdGeliefert.add(item.getN_menge());
                }
                data[i][OFFENE_AG_GELIEFERT] = bdGeliefert;
                if (los.getFlrstueckliste() != null) {
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                            los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                    data[i][OFFENE_AG_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                    data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                    data[i][OFFENE_AG_ARTIKELNUMMER] = los.getFlrstueckliste().getFlrartikel().getC_nr();

                    data[i][OFFENE_AG_DETAILBEDARF] = getRahmenbedarfeFac()
                            .getSummeAllerRahmenbedarfeEinesArtikels(artikelDto.getIId());

                    // Offene Fehlmengen
                    data[i][OFFENE_AG_FEHLMENGE] = getFehlmengeFac()
                            .getAnzahlFehlmengeEinesArtikels(artikelDto.getIId(), theClientDto);

                    LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                            .lossollarbeitsplanFindByLosIId(los.getI_id());

                    BigDecimal bdFertigungszeit = new BigDecimal(0);
                    for (int j = 0; lossollarbeitsplanDto.length > j; j++) {
                        bdFertigungszeit = bdFertigungszeit.add(lossollarbeitsplanDto[j].getNGesamtzeit());
                    }
                    data[i][OFFENE_AG_FERTIGUNGSZEIT] = bdFertigungszeit;

                    // Rahmenbestellt
                    Hashtable<?, ?> htRahmenbestellt = getArtikelbestelltFac()
                            .getAnzahlRahmenbestellt(artikelDto.getIId(), theClientDto);
                    if (htRahmenbestellt.containsKey(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL)) {
                        BigDecimal bdAnzahlRahmenbestellt = (BigDecimal) htRahmenbestellt
                                .get(ArtikelbestelltFac.KEY_RAHMENBESTELLT_ANZAHL);
                        data[i][OFFENE_AG_RAHMEN_BESTELLT] = bdAnzahlRahmenbestellt;
                    }
                    data[i][OFFENE_AG_RESERVIERUNGEN] = getReservierungFac()
                            .getAnzahlReservierungen(artikelDto.getIId(), theClientDto);

                    data[i][OFFENE_AG_RAHMENRESERVIERUNGEN] = getReservierungFac()
                            .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);

                } else {
                    data[i][OFFENE_AG_BEZEICHNUNG] = los.getC_projekt();
                    data[i][OFFENE_AG_ZUSATZBEZEICHNUNG] = null;
                    data[i][OFFENE_AG_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste",
                            theClientDto.getMandant(), theClientDto.getLocUi());
                }

                GregorianCalendar gc = new GregorianCalendar();
                gc.setTime(los.getT_produktionsbeginn());
                data[i][OFFENE_AG_KALENDERWOCHE] = new Integer(gc.get(GregorianCalendar.WEEK_OF_YEAR));
                data[i][OFFENE_AG_LOSGROESSE] = los.getN_losgroesse();
                data[i][OFFENE_AG_LOSNUMMER] = los.getC_nr();
                data[i][OFFENE_AG_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
                /**
                 * @todo material PJ 4239
                 */
                data[i][OFFENE_AG_MATERIAL] = null;
                data[i][OFFENE_AG_BEGINN] = los.getT_produktionsbeginn();
                data[i][OFFENE_AG_ENDE] = los.getT_produktionsende();
                data[i][OFFENE_AG_LOSSTATUS] = los.getStatus_c_nr();

                // PJ 15009

                String queryf = "select sum(flrfehlmenge.n_menge) FROM FLRFehlmenge flrfehlmenge WHERE flrfehlmenge.flrlossollmaterial.flrlos = "
                        + los.getI_id() + " AND flrfehlmenge.n_menge>0";
                Session session2 = FLRSessionFactory.getFactory().openSession();
                Query query = session2.createQuery(queryf);
                List<?> results = query.list();

                data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(false);
                if (results.size() > 0) {
                    BigDecimal bd = (BigDecimal) results.iterator().next();

                    if (bd != null && bd.doubleValue() > 0) {
                        data[i][OFFENE_AG_LOSHATFEHLMENGE] = new Boolean(true);
                    }
                }
                session2.close();
            }
        }
        // Sortieren nach Artikelgruppe + AG-Beginn

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

                if (((String) a1[OFFENE_AG_AG_ARTIKELGRUPPPE])
                        .compareTo((String) a2[OFFENE_AG_AG_ARTIKELGRUPPPE]) > 0) {
                    data[j] = a2;
                    data[j + 1] = a1;
                } else if (((String) a1[OFFENE_AG_AG_ARTIKELGRUPPPE])
                        .compareTo((String) a2[OFFENE_AG_AG_ARTIKELGRUPPPE]) == 0) {
                    java.util.Date k1 = (java.util.Date) a1[OFFENE_AG_AG_BEGINN];
                    java.util.Date k2 = (java.util.Date) a2[OFFENE_AG_AG_BEGINN];

                    if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_ENDEDATUM) {
                        k1 = (java.util.Date) a1[OFFENE_AG_ENDE];
                        k2 = (java.util.Date) a2[OFFENE_AG_ENDE];
                    } else if (iOptionStichtag == FertigungReportFac.OFFENE_OPTION_STICHTAG_LIEFERTERMIN) {
                        k1 = (java.util.Date) a1[OFFENE_AG_LIEFERTERMIN];

                        if (k1 == null) {
                            k1 = new Date(0);
                        }

                        k2 = (java.util.Date) a2[OFFENE_AG_LIEFERTERMIN];

                        if (k2 == null) {
                            k2 = new Date(0);
                        }

                    }

                    k1 = Helper.cutDate(k1);
                    k2 = Helper.cutDate(k2);

                    if (k1.after(k2)) {
                        data[j] = a2;
                        data[j + 1] = a1;
                    } else if (k1.equals(k2)) {

                        String l1 = (String) a1[OFFENE_AG_LOSNUMMER];
                        String l2 = (String) a1[OFFENE_AG_LOSNUMMER];
                        if (l1.compareTo(l2) > 0) {
                            data[j] = a2;
                            data[j + 1] = a1;
                        }

                    }
                }
            }
        }

        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_OFFENE_AG,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    } catch (Exception t) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
    } finally {
        closeSession(session);
    }
}

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

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printHalbfertigfabrikatsinventur(java.sql.Timestamp tsStichtag, int iSortierung,
        boolean bVerdichtet, Integer partnerIIdFertigungsort, TheClientDto theClientDto) throws EJBExceptionLP {
    Session session = null;//  w ww.  j av  a 2 s .  c o m
    try {
        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        if (tsStichtag != null) {
            mapParameter.put("P_STICHTAG", tsStichtag);
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tsStichtag.getTime());
            c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);
            tsStichtag = new java.sql.Timestamp(c.getTimeInMillis());
            tsStichtag = Helper.cutTimestamp(tsStichtag);
        }

        this.useCase = UC_HALBFERTIGFABRIKATSINVENTUR;
        this.index = -1;
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRLosReport.class);
        c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
        // c.add(Restrictions.eq("i_id", 99579));

        if (partnerIIdFertigungsort != null) {
            c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_PARTNER_I_ID_FERTIGUNGSORT,
                    partnerIIdFertigungsort));
        }

        if (tsStichtag == null) {
            c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
                    new String[] { FertigungFac.STATUS_STORNIERT, FertigungFac.STATUS_ERLEDIGT,
                            FertigungFac.STATUS_ANGELEGT, FertigungFac.STATUS_GESTOPPT })));
        } else {
            c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
                    new String[] { FertigungFac.STATUS_STORNIERT, FertigungFac.STATUS_GESTOPPT })));

            c.add(Restrictions.or(Restrictions.gt(FertigungFac.FLR_LOS_T_ERLEDIGT, tsStichtag),
                    Restrictions.isNull(FertigungFac.FLR_LOS_T_ERLEDIGT)));

            c.add(Restrictions.or(Restrictions.gt(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tsStichtag),
                    Restrictions.isNull(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT)));

            c.add(Restrictions.le(FertigungFac.FLR_LOS_T_AUSGABE, tsStichtag));
        }

        // Sortierung nach Losnummer
        c.addOrder(Order.asc(FertigungFac.FLR_LOS_C_NR));
        List<?> list = c.list();

        ArrayList<Object[]> alDaten = new ArrayList<Object[]>();

        int i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLRLosReport item = (FLRLosReport) iter.next();

            Object[] zeile = new Object[17];

            zeile[HF_LOSNUMMER] = item.getC_nr();
            zeile[HF_LOSGROESSE] = item.getN_losgroesse();

            if (item.getFlrstueckliste() != null) {
                zeile[HF_ARTIKELNUMMER] = item.getFlrstueckliste().getFlrartikel().getC_nr();
                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                        item.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                zeile[HF_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                ;
            } else {
                zeile[HF_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste", theClientDto.getMandant(),
                        theClientDto.getLocUi());
                zeile[HF_BEZEICHNUNG] = item.getC_projekt();
            }

            LosablieferungDto[] losablieferungDtos = getFertigungFac()
                    .losablieferungFindByLosIId(item.getI_id(), true, theClientDto);
            BigDecimal bdAbgeliefert = new BigDecimal(0.0000);
            for (int j = 0; j < losablieferungDtos.length; j++) {

                if (tsStichtag == null) {
                    bdAbgeliefert = bdAbgeliefert.add(losablieferungDtos[j].getNMenge());
                } else {
                    if (tsStichtag.after(losablieferungDtos[j].getTAendern())) {
                        bdAbgeliefert = bdAbgeliefert.add(losablieferungDtos[j].getNMenge());
                    }
                }

            }
            zeile[HF_ERLEDIGT] = bdAbgeliefert;

            // Nun eine Zeile pro Position

            // Ausgegebenes Material
            LossollmaterialDto[] sollmat = getFertigungFac().lossollmaterialFindByLosIId(item.getI_id());

            for (int j = 0; j < sollmat.length; j++) {
                BigDecimal bdMenge = getFertigungFac().getAusgegebeneMenge(sollmat[j].getIId(), tsStichtag,
                        theClientDto);
                zeile[HF_POSITION_AUSGEGEBEN] = bdMenge;

                // Einkaufspreis des ersten Lieferanten hinzufuegen
                ArtikellieferantDto dto = getArtikelFac().getArtikelEinkaufspreis(sollmat[j].getArtikelIId(),
                        null, new BigDecimal(1), theClientDto.getSMandantenwaehrung(),
                        new java.sql.Date(sollmat[j].getTAendern().getTime()), theClientDto);
                if (dto != null) {
                    zeile[HF_POSITION_EKPREIS] = dto.getLief1Preis();
                }

                // CK:2008-12-23 Wegen Beistellteilen ist die Verfaelschung
                // des Gestehungspreises falsch
                // es muss immer der Gestehungspreis zum ausgabezeitpunkt
                // verwendet werden.
                BigDecimal bdPreis = getFertigungFac().getAusgegebeneMengePreis(sollmat[j].getIId(), tsStichtag,
                        theClientDto);
                zeile[HF_POSITION_PREIS] = bdPreis;

                BigDecimal sollsatzmenge = new BigDecimal(0);

                if (item.getN_losgroesse().doubleValue() != 0) {
                    sollsatzmenge = sollmat[j].getNMenge().divide(item.getN_losgroesse(),
                            BigDecimal.ROUND_HALF_EVEN);
                }

                BigDecimal theoretischabgeliefert = sollsatzmenge.multiply(bdAbgeliefert);

                if (theoretischabgeliefert.doubleValue() > bdMenge.doubleValue()) {
                    theoretischabgeliefert = bdMenge;
                }

                zeile[HF_POSITION_ABGELIFERT] = theoretischabgeliefert;
                zeile[HF_POSITION_OFFEN] = bdMenge.subtract(theoretischabgeliefert);

                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(sollmat[j].getArtikelIId(),
                        theClientDto);
                zeile[HF_POSITION_ARTIKELNUMMMER] = artikelDto.getCNr();
                zeile[HF_POSITION_BEZEICHNUNG] = artikelDto.formatBezeichnung();

                if (bVerdichtet) {
                    if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_ARTIKELNR) {
                        boolean bGefunden = false;
                        for (int k = 0; k < alDaten.size(); k++) {
                            Object[] zeileTemp = (Object[]) alDaten.get(k);

                            if (zeileTemp[HF_POSITION_ARTIKELNUMMMER]
                                    .equals(zeile[HF_POSITION_ARTIKELNUMMMER])) {
                                bGefunden = true;

                                zeileTemp[HF_LOSNUMMER] = "";
                                zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                        .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                        .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                // Neuen Preis berechnen

                                BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                        .add(neuerPreis.multiply(neueOffen));

                                if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                    zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                            BigDecimal.ROUND_HALF_EVEN);
                                } else {
                                    zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                }

                                zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                alDaten.set(k, zeileTemp);
                            }

                        }

                        if (bGefunden == false) {
                            alDaten.add(zeile);
                        }

                    } else if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_LOSNR) {
                        boolean bGefunden = false;
                        for (int k = 0; k < alDaten.size(); k++) {
                            Object[] zeileTemp = (Object[]) alDaten.get(k);

                            if (zeileTemp[HF_LOSNUMMER].equals(zeile[HF_LOSNUMMER])) {
                                bGefunden = true;

                                zeileTemp[HF_POSITION_ARTIKELNUMMMER] = "";
                                zeileTemp[HF_POSITION_BEZEICHNUNG] = "";

                                zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                        .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                        .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                // Neuen Preis berechnen

                                BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                        .add(neuerPreis.multiply(neueOffen));

                                if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                    zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                            BigDecimal.ROUND_HALF_EVEN);
                                } else {
                                    zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                }

                                zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                alDaten.set(k, zeileTemp);
                            }

                        }

                        if (bGefunden == false) {
                            alDaten.add(zeile);
                        }

                    }
                } else {

                    alDaten.add(zeile);
                }
                zeile = new Object[17];
                zeile[HF_LOSNUMMER] = item.getC_nr();
            }

            // Verbrauchte Arbeitszeit
            LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                    .lossollarbeitsplanFindByLosIId(item.getI_id());
            for (int j = 0; j < lossollarbeitsplanDto.length; j++) {
                AuftragzeitenDto[] zeiten = getZeiterfassungFac().getAllZeitenEinesBeleges(
                        LocaleFac.BELEGART_LOS, item.getI_id(), null, null, null, tsStichtag, false, false,
                        theClientDto);

                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(
                        lossollarbeitsplanDto[j].getArtikelIIdTaetigkeit(), theClientDto);
                zeile[HF_POSITION_ARTIKELNUMMMER] = artikelDto.getCNr();
                zeile[HF_POSITION_BEZEICHNUNG] = artikelDto.formatBezeichnung();

                BigDecimal bdArbeitszeitwert = new BigDecimal(0);
                BigDecimal bdIstZeit = new BigDecimal(0);

                for (int k = 0; k < zeiten.length; k++) {
                    if (artikelDto.getIId().equals(zeiten[k].getArtikelIId())) {

                        bdArbeitszeitwert = bdArbeitszeitwert.add(zeiten[k].getBdKosten());
                        bdIstZeit = bdIstZeit.add(new BigDecimal(zeiten[k].getDdDauer().doubleValue()));
                    }
                }
                BigDecimal sollsatzmenge = new BigDecimal(0);

                if (item.getN_losgroesse().doubleValue() != 0) {

                    sollsatzmenge = lossollarbeitsplanDto[j].getNGesamtzeit().divide(item.getN_losgroesse(),
                            BigDecimal.ROUND_HALF_EVEN);
                }

                if (Helper.short2boolean(lossollarbeitsplanDto[j].getBNurmaschinenzeit())) {
                    zeile[HF_POSITION_AUSGEGEBEN] = new BigDecimal(0);
                } else {
                    zeile[HF_POSITION_AUSGEGEBEN] = lossollarbeitsplanDto[j].getNGesamtzeit();
                }

                BigDecimal theoretischabgeliefert = sollsatzmenge.multiply(bdAbgeliefert);

                BigDecimal restist = bdIstZeit.subtract(theoretischabgeliefert);

                if (restist.doubleValue() <= 0) {
                    restist = new BigDecimal(0);
                }

                if (theoretischabgeliefert.doubleValue() > bdIstZeit.doubleValue()) {
                    theoretischabgeliefert = bdIstZeit;
                }
                zeile[HF_POSITION_ABGELIFERT] = theoretischabgeliefert;
                zeile[HF_POSITION_OFFEN] = restist;

                if (bdIstZeit.doubleValue() != 0) {
                    zeile[HF_POSITION_PREIS] = bdArbeitszeitwert.divide(bdIstZeit, BigDecimal.ROUND_HALF_EVEN);
                } else {
                    zeile[HF_POSITION_PREIS] = new BigDecimal(0);
                }

                AuftragzeitenDto[] maschinenzeiten = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(
                        item.getI_id(), lossollarbeitsplanDto[j].getIId(), null, tsStichtag, theClientDto);

                BigDecimal bdArbeitszeitwertMaschine = new BigDecimal(0);
                BigDecimal bdIstZeitMaschine = new BigDecimal(0);

                for (int k = 0; k < maschinenzeiten.length; k++) {

                    bdArbeitszeitwertMaschine = bdArbeitszeitwertMaschine.add(maschinenzeiten[k].getBdKosten());
                    bdIstZeitMaschine = bdIstZeitMaschine
                            .add(new BigDecimal(maschinenzeiten[k].getDdDauer().doubleValue()));

                }

                if (lossollarbeitsplanDto[j].getMaschineIId() == null) {
                    zeile[HF_POSITION_AUSGEGEBEN_MASCHINE] = new BigDecimal(0);
                } else {
                    zeile[HF_POSITION_AUSGEGEBEN_MASCHINE] = lossollarbeitsplanDto[j].getNGesamtzeit();
                }

                theoretischabgeliefert = sollsatzmenge.multiply(bdAbgeliefert);
                BigDecimal restistMaschine = bdIstZeitMaschine.subtract(theoretischabgeliefert);

                if (restistMaschine.doubleValue() <= 0) {
                    restistMaschine = new BigDecimal(0);
                }

                if (theoretischabgeliefert.doubleValue() > bdIstZeitMaschine.doubleValue()) {
                    theoretischabgeliefert = bdIstZeitMaschine;
                }
                zeile[HF_POSITION_ABGELIFERT_MASCHINE] = theoretischabgeliefert;
                zeile[HF_POSITION_OFFEN_MASCHINE] = restistMaschine;

                if (bdIstZeitMaschine.doubleValue() != 0) {
                    zeile[HF_POSITION_PREIS_MASCHINE] = bdArbeitszeitwertMaschine.divide(bdIstZeitMaschine,
                            BigDecimal.ROUND_HALF_EVEN);
                } else {
                    zeile[HF_POSITION_PREIS_MASCHINE] = new BigDecimal(0);
                }

                if (bVerdichtet) {
                    if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_ARTIKELNR) {
                        boolean bGefunden = false;
                        for (int k = 0; k < alDaten.size(); k++) {
                            Object[] zeileTemp = (Object[]) alDaten.get(k);

                            if (zeileTemp[HF_POSITION_ARTIKELNUMMMER]
                                    .equals(zeile[HF_POSITION_ARTIKELNUMMMER])) {
                                bGefunden = true;

                                zeileTemp[HF_LOSNUMMER] = "";
                                zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                        .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                        .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                // Neuen Preis berechnen

                                BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                        .add(neuerPreis.multiply(neueOffen));

                                if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                    zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                            BigDecimal.ROUND_HALF_EVEN);
                                } else {
                                    zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                }

                                zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                alDaten.set(k, zeileTemp);
                            }

                        }

                        if (bGefunden == false) {
                            alDaten.add(zeile);
                        }

                    } else if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_LOSNR) {
                        boolean bGefunden = false;
                        for (int k = 0; k < alDaten.size(); k++) {
                            Object[] zeileTemp = (Object[]) alDaten.get(k);

                            if (zeileTemp[HF_LOSNUMMER].equals(zeile[HF_LOSNUMMER])) {
                                bGefunden = true;

                                zeileTemp[HF_POSITION_ARTIKELNUMMMER] = "";
                                zeileTemp[HF_POSITION_BEZEICHNUNG] = "";
                                zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                        .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                        .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                // Neuen Preis berechnen

                                BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                        .add(neuerPreis.multiply(neueOffen));

                                if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                    zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                            BigDecimal.ROUND_HALF_EVEN);
                                } else {
                                    zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                }

                                zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                alDaten.set(k, zeileTemp);
                            }

                        }

                        if (bGefunden == false) {
                            alDaten.add(zeile);
                        }

                    }
                } else {

                    alDaten.add(zeile);
                }

                zeile = new Object[17];
                zeile[HF_LOSNUMMER] = item.getC_nr();

            }

        }
        mapParameter.put(LPReport.P_WAEHRUNG, theClientDto.getSMandantenwaehrung());
        mapParameter.put("P_VERDICHTET", new Boolean(bVerdichtet));

        if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_LOSNR) {
            // Sortierng nach Losnr
            data = new Object[alDaten.size()][17];
            data = (Object[][]) alDaten.toArray(data);

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL,
                    FertigungReportFac.REPORT_HALBFERTIGFABRIKATSINVENTUR, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);
        } else if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_ARTIKELNR) {

            // Sortieren nach Identnr
            for (int k = alDaten.size() - 1; k > 0; --k) {
                for (int j = 0; j < k; ++j) {
                    Object[] a1 = (Object[]) alDaten.get(j);
                    Object[] a2 = (Object[]) alDaten.get(j + 1);

                    if (((String) a1[HF_POSITION_ARTIKELNUMMMER])
                            .compareTo((String) a2[HF_POSITION_ARTIKELNUMMMER]) > 0) {
                        alDaten.set(j, a2);
                        alDaten.set(j + 1, a1);
                    }
                }
            }
            data = new Object[alDaten.size()][17];
            data = (Object[][]) alDaten.toArray(data);

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL,
                    FertigungReportFac.REPORT_HALBFERTIGFABRIKATSINVENTUR_IDENT, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);

        }
        return getReportPrint();
    } catch (RemoteException t) {
        throwEJBExceptionLPRespectOld(t);
    } finally {
        closeSession(session);
    }
    return getReportPrint();
}

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

License:Open Source License

private Object[][] getDataAusgabeListe(Integer[] losIId, Integer iSortierung, boolean bVerdichtetNachIdent,
        boolean bVorrangigNachFarbcodeSortiert, Integer artikelklasseIId, TheClientDto theClientDto) {
    Session session = null;/*from  ww w . ja  v a2 s .  co  m*/

    Object[][] dataLokal = null;

    try {

        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRLossollmaterial.class);

        c.add(Restrictions.in(FertigungFac.FLR_LOSSOLLMATERIAL_LOS_I_ID, losIId));

        if (artikelklasseIId != null) {

            c.createAlias("flrartikel", "a").createAlias("a.flrartikelklasse", "kl")
                    .add(Restrictions.eq("kl.i_id", artikelklasseIId));
        }

        List<?> list = c.list();
        // positionen verdichten
        LinkedHashMap<Integer, ReportLosAusgabelisteDto> listVerdichtet = new LinkedHashMap<Integer, ReportLosAusgabelisteDto>();
        for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
            FLRLossollmaterial sollmat = (FLRLossollmaterial) iter.next();

            LosistmaterialDto[] mat = getFertigungFac()
                    .losistmaterialFindByLossollmaterialIId(sollmat.getI_id());
            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(sollmat.getFlrartikel().getI_id(),
                    theClientDto);

            LoslagerentnahmeDto[] laeger = getFertigungFac()
                    .loslagerentnahmeFindByLosIId(sollmat.getLos_i_id());
            BigDecimal lagerstand = new BigDecimal(0);
            if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet()) == true) {
                for (int i = 0; i < laeger.length; i++) {
                    lagerstand = lagerstand.add(getLagerFac().getLagerstandOhneExc(artikelDto.getIId(),
                            laeger[i].getLagerIId(), theClientDto));
                }

            }
            BigDecimal inFertigung = getFertigungFac().getAnzahlInFertigung(artikelDto.getIId(), theClientDto);
            BigDecimal lagerstandSperrlager = getLagerFac()
                    .getLagerstandAllerSperrlaegerEinesMandanten(artikelDto.getIId(), theClientDto);

            // Artikelkommentar Text und Bild
            Image imageKommentar = null;
            String sArtikelKommentar = "";
            try {
                ArtikelkommentarDto[] aKommentarDto = getArtikelkommentarFac()
                        .artikelkommentardruckFindByArtikelIIdBelegartCNr(artikelDto.getIId(),
                                LocaleFac.BELEGART_LOS, theClientDto.getLocUiAsString(), theClientDto);

                // Artikelkommentar kann Text oder Bild sein
                if (aKommentarDto != null) {
                    for (int k = 0; k < aKommentarDto.length; k++) {
                        String cDatenformat = aKommentarDto[k].getDatenformatCNr().trim();
                        if (cDatenformat.indexOf(MediaFac.DATENFORMAT_MIMETYPEART_TEXT) != -1) {
                            sArtikelKommentar += "\n"
                                    + aKommentarDto[k].getArtikelkommentarsprDto().getXKommentar();
                        } else if (cDatenformat.indexOf(MediaFac.DATENFORMAT_MIMETYPEART_IMAGE) != -1) {
                            // es wird hoechstens 1 Bild pro Belegart
                            // gedruckt
                            imageKommentar = Helper
                                    .byteArrayToImage(aKommentarDto[k].getArtikelkommentarsprDto().getOMedia());
                        }
                    }
                }

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

            if (mat.length == 0) {
                ReportLosAusgabelisteDto dto = new ReportLosAusgabelisteDto();
                dto.setISchale(sollmat.getI_lfdnummer());
                dto.setNAusgabe(new BigDecimal(0));
                dto.setNMenge(sollmat.getN_menge());

                dto.setNLagerstand(lagerstand);
                dto.setNLagerstandSperrlager(lagerstandSperrlager);
                dto.setNInFertigung(inFertigung);
                dto.setArtikelbild(imageKommentar);
                dto.setSKommentar(sArtikelKommentar);
                dto.setBNurZurInfo(Helper.short2Boolean(artikelDto.getbNurzurinfo()));

                if (artikelDto.getFarbcodeIId() != null) {
                    dto.setSFarbcode(
                            getArtikelFac().farbcodeFindByPrimaryKey(artikelDto.getFarbcodeIId()).getCNr());
                }

                dto.setSBezeichnung(artikelDto.getArtikelsprDto().getCBez());
                dto.setSZusatzBezeichnung(artikelDto.getArtikelsprDto().getCZbez());
                dto.setSZusatzBezeichnung2(artikelDto.getArtikelsprDto().getCZbez2());
                dto.setSEinheit(sollmat.getFlrartikel().getEinheit_c_nr());

                // Material
                if (artikelDto.getMaterialIId() != null) {
                    MaterialDto materialDto = getMaterialFac()
                            .materialFindByPrimaryKey(artikelDto.getMaterialIId(), theClientDto);
                    dto.setSMaterial(materialDto.getBezeichnung());
                }
                // Staerke/Hoehe
                if (artikelDto.getGeometrieDto() != null) {
                    if (artikelDto.getGeometrieDto().getFHoehe() != null) {
                        dto.setDHoehe(artikelDto.getGeometrieDto().getFHoehe());
                    }
                    if (artikelDto.getGeometrieDto().getFBreite() != null) {
                        dto.setDBreite(artikelDto.getGeometrieDto().getFBreite());
                    }
                    if (artikelDto.getGeometrieDto().getFTiefe() != null) {
                        dto.setDTiefe(artikelDto.getGeometrieDto().getFTiefe());
                    }
                }

                dto.setSRevision(artikelDto.getCRevision());
                dto.setSIndex(artikelDto.getCIndex());

                // Verpackung
                if (artikelDto.getVerpackungDto() != null) {
                    dto.setSBauform(artikelDto.getVerpackungDto().getCBauform());
                    dto.setSVerpackungsart(artikelDto.getVerpackungDto().getCVerpackungsart());
                }

                // Gewicht
                dto.setDGewichtkg(artikelDto.getFGewichtkg());
                // Montage Rasterstehend
                if (artikelDto.getMontageDto() != null
                        && artikelDto.getMontageDto().getFRasterstehend() != null) {
                    dto.setDRasterstehend(artikelDto.getMontageDto().getFRasterstehend().doubleValue());
                }
                String sIdent;
                if (sollmat.getFlrartikel().getArtikelart_c_nr().equals(ArtikelFac.ARTIKELART_HANDARTIKEL)) {
                    sIdent = "";
                } else {
                    sIdent = sollmat.getFlrartikel().getC_nr();
                }
                dto.setSIdent(sIdent);
                if (sollmat.getFlrartikel().getFlrartikelklasse() != null) {
                    dto.setSArtikelklasse(sollmat.getFlrartikel().getFlrartikelklasse().getC_nr());
                }
                if (sollmat.getMontageart_i_id() != null) {
                    MontageartDto montageartDto = getStuecklisteFac()
                            .montageartFindByPrimaryKey(sollmat.getMontageart_i_id(), theClientDto);
                    dto.setSMontageart(montageartDto.getCBez());
                }

                LosDto losDto = getFertigungFac().losFindByPrimaryKey(sollmat.getLos_i_id());
                LagerDto lagerDto = getLagerFac().lagerFindByPrimaryKey(losDto.getLagerIIdZiel());
                dto.setSLager(lagerDto.getCNr());

                String sLagerort = getLagerFac().getLagerplaezteEinesArtikels(sollmat.getFlrartikel().getI_id(),
                        losDto.getLagerIIdZiel());

                dto.setSLagerort(sLagerort);
                // offene Bestellmenge
                dto.setBdAnzahlBestellt(getArtikelbestelltFac().getAnzahlBestellt(artikelDto.getIId()));

                // Stuecklistepositionskommentar
                if (sollmat.getFlrlos().getStueckliste_i_id() != null) {
                    try {
                        StuecklistepositionDto[] stuecklistepositionDto = getStuecklisteFac()
                                .stuecklistepositionFindByStuecklisteIIdArtikelIId(
                                        sollmat.getFlrlos().getStueckliste_i_id(), artikelDto.getIId(),
                                        theClientDto);

                        StringBuffer sbKommentarStuecklistepos = new StringBuffer();
                        // wenn ein Artikel mehrfach vorkommt und ich ja
                        // nicht entscheiden kann, an
                        // welcher Stelle ich bin, alle Kommentar
                        // aneinanderhaengen
                        for (int k = 0; k < stuecklistepositionDto.length; k++) {
                            sbKommentarStuecklistepos.append(stuecklistepositionDto[0].getCKommentar());

                        }
                        if (sbKommentarStuecklistepos.length() > 0) {
                            dto.setSKommentarStueckliste(sbKommentarStuecklistepos.toString());
                        }
                    } catch (EJBExceptionLP e) {
                        // ok
                    }
                }

                // key ist -i_id, damit ich keine vorhandenen eintraege
                // ueberschreibe

                // verdichten nach ident

                Iterator<Integer> it = listVerdichtet.keySet().iterator();
                boolean bGefunden = false;

                if (bVerdichtetNachIdent) {
                    while (it.hasNext()) {
                        Object key = it.next();

                        ReportLosAusgabelisteDto temp = (ReportLosAusgabelisteDto) listVerdichtet.get(key);
                        if ((temp.getSLager() == null && lagerDto.getCNr() == null)
                                || (temp.getSLager() != null && lagerDto.getCNr() != null)) {
                            if ((temp.getSLager() == null && lagerDto.getCNr() == null)
                                    || (temp.getSLager().equals(lagerDto.getCNr()))) {

                                if (temp.getSIdent().equals(sIdent) && !temp.getSIdent().equals("")) {

                                    bGefunden = true;
                                    dto.setNMenge(dto.getNMenge().add(temp.getNMenge()));
                                    dto.setNAusgabe(dto.getNAusgabe().add(temp.getNAusgabe()));

                                    listVerdichtet.put((Integer) key, dto);

                                    continue;
                                }
                            }
                        }

                    }
                }
                if (bGefunden == false) {
                    listVerdichtet.put(new Integer(-sollmat.getI_id().intValue()), dto);
                }

            } else {

                for (int i = 0; i < mat.length; i++) {
                    BigDecimal ausgabemenge = new BigDecimal(0);
                    Integer lagerIId = null;

                    if (Helper.short2boolean(mat[i].getBAbgang()) == true) {
                        ausgabemenge = ausgabemenge.add(mat[i].getNMenge());
                    } else {
                        ausgabemenge = ausgabemenge.add(mat[i].getNMenge().multiply(new BigDecimal(-1)));
                    }
                    lagerIId = mat[i].getLagerIId();

                    ReportLosAusgabelisteDto dto = new ReportLosAusgabelisteDto();
                    dto.setISchale(sollmat.getI_lfdnummer());
                    dto.setNAusgabe(ausgabemenge);
                    dto.setArtikelbild(imageKommentar);
                    dto.setSKommentar(sArtikelKommentar);
                    dto.setNLagerstand(lagerstand);
                    dto.setNLagerstandSperrlager(lagerstandSperrlager);
                    dto.setNInFertigung(inFertigung);

                    // Sollmenge zaehlt nur beim ersten eintrag
                    if (i == 0) {
                        dto.setNMenge(sollmat.getN_menge());
                    } else {
                        dto.setNMenge(new BigDecimal(0));
                    }

                    if (sollmat.getFlrartikel().getFlrartikelklasse() != null) {
                        dto.setSArtikelklasse(sollmat.getFlrartikel().getFlrartikelklasse().getC_nr());
                    } else {
                        dto.setSArtikelklasse("");
                    }

                    if (artikelDto.getFarbcodeIId() != null) {
                        dto.setSFarbcode(
                                getArtikelFac().farbcodeFindByPrimaryKey(artikelDto.getFarbcodeIId()).getCNr());
                    }
                    dto.setSBezeichnung(artikelDto.getArtikelsprDto().getCBez());
                    dto.setSZusatzBezeichnung(artikelDto.getArtikelsprDto().getCZbez());
                    dto.setSZusatzBezeichnung2(artikelDto.getArtikelsprDto().getCZbez2());
                    dto.setSEinheit(sollmat.getFlrartikel().getEinheit_c_nr());

                    dto.setBNurZurInfo(Helper.short2Boolean(artikelDto.getbNurzurinfo()));

                    // Material
                    if (artikelDto.getMaterialIId() != null) {
                        MaterialDto materialDto = getMaterialFac()
                                .materialFindByPrimaryKey(artikelDto.getMaterialIId(), theClientDto);
                        dto.setSMaterial(materialDto.getBezeichnung());
                    }
                    // Staerke/Hoehe
                    if (artikelDto.getGeometrieDto() != null) {
                        if (artikelDto.getGeometrieDto().getFHoehe() != null) {
                            dto.setDHoehe(artikelDto.getGeometrieDto().getFHoehe());
                        }
                        if (artikelDto.getGeometrieDto().getFBreite() != null) {
                            dto.setDBreite(artikelDto.getGeometrieDto().getFBreite());
                        }
                        if (artikelDto.getGeometrieDto().getFTiefe() != null) {
                            dto.setDTiefe(artikelDto.getGeometrieDto().getFTiefe());
                        }
                    }

                    // Verpackung
                    if (artikelDto.getVerpackungDto() != null) {
                        dto.setSBauform(artikelDto.getVerpackungDto().getCBauform());
                        dto.setSVerpackungsart(artikelDto.getVerpackungDto().getCVerpackungsart());
                    }
                    // Gewicht
                    dto.setDGewichtkg(artikelDto.getFGewichtkg());

                    dto.setSRevision(artikelDto.getCRevision());
                    dto.setSIndex(artikelDto.getCIndex());

                    // Montage Rasterstehend
                    if (artikelDto.getMontageDto() != null
                            && artikelDto.getMontageDto().getFRasterstehend() != null) {
                        dto.setDRasterstehend(artikelDto.getMontageDto().getFRasterstehend().doubleValue());
                    }

                    if (Helper.short2boolean(artikelDto.getBSeriennrtragend())
                            || Helper.short2boolean(artikelDto.getBChargennrtragend())) {
                        List<SeriennrChargennrMitMengeDto> snrChnrDtos = getLagerFac()
                                .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS,
                                        mat[i].getIId());
                        if (snrChnrDtos != null) {
                            String snrchnr = "";
                            for (int s = 0; s < snrChnrDtos.size(); s++) {

                                SeriennrChargennrMitMengeDto snrChnrDto = snrChnrDtos.get(s);

                                if (dto.getNAusgabe().doubleValue() < 0) {
                                    snrchnr += "-";
                                }

                                snrchnr += Helper.formatZahl(snrChnrDto.getNMenge(), 4, theClientDto.getLocUi())
                                        + " ";
                                snrchnr += snrChnrDto.getCSeriennrChargennr() + "; ";

                            }
                            dto.setSSnrChnr(snrchnr);
                        }
                    }

                    // offene Bestellmenge
                    dto.setBdAnzahlBestellt(getArtikelbestelltFac().getAnzahlBestellt(artikelDto.getIId()));

                    String sIdent;
                    if (sollmat.getFlrartikel().getArtikelart_c_nr()
                            .equals(ArtikelFac.ARTIKELART_HANDARTIKEL)) {
                        sIdent = "";
                    } else {
                        sIdent = sollmat.getFlrartikel().getC_nr();
                    }
                    dto.setSIdent(sIdent);

                    LagerDto lagerDto = getLagerFac().lagerFindByPrimaryKey(lagerIId);

                    dto.setSLager(lagerDto.getCNr());

                    String sLagerort = getLagerFac()
                            .getLagerplaezteEinesArtikels(sollmat.getFlrartikel().getI_id(), lagerDto.getIId());

                    dto.setSLagerort(sLagerort);

                    if (sollmat.getMontageart_i_id() != null) {
                        MontageartDto montageartDto = getStuecklisteFac()
                                .montageartFindByPrimaryKey(sollmat.getMontageart_i_id(), theClientDto);
                        dto.setSMontageart(montageartDto.getCBez());
                    }

                    // Stuecklistepositionskommentar
                    if (sollmat.getFlrlos().getStueckliste_i_id() != null) {
                        try {
                            StuecklistepositionDto[] stuecklistepositionDto = getStuecklisteFac()
                                    .stuecklistepositionFindByStuecklisteIIdArtikelIId(
                                            sollmat.getFlrlos().getStueckliste_i_id(), artikelDto.getIId(),
                                            theClientDto);

                            StringBuffer sbKommentarStuecklistepos = new StringBuffer();
                            // wenn ein Artikel mehrfach vorkommt und ich ja
                            // nicht entscheiden kann, an
                            // welcher Stelle ich bin, alle Kommentar
                            // aneinanderhaengen
                            for (int k = 0; k < stuecklistepositionDto.length; k++) {
                                sbKommentarStuecklistepos.append(stuecklistepositionDto[0].getCKommentar());

                            }
                            if (sbKommentarStuecklistepos.length() > 0) {
                                dto.setSKommentarStueckliste(sbKommentarStuecklistepos.toString());
                            }
                        } catch (EJBExceptionLP e) {
                            // ok
                        }
                    }

                    // verdichten nach ident
                    Iterator<Integer> it = listVerdichtet.keySet().iterator();
                    boolean bGefunden = false;

                    if (bVerdichtetNachIdent) {

                        while (it.hasNext()) {
                            Object key = it.next();

                            ReportLosAusgabelisteDto temp = (ReportLosAusgabelisteDto) listVerdichtet.get(key);
                            if ((temp.getSLager() == null && lagerDto.getCNr() == null)
                                    || (temp.getSLager() != null && lagerDto.getCNr() != null)) {
                                if ((temp.getSLager() == null && lagerDto.getCNr() == null)
                                        || (temp.getSLager().equals(lagerDto.getCNr()))) {
                                    if (temp.getSIdent().equals(sIdent) && !temp.getSIdent().equals("")) {
                                        bGefunden = true;
                                        dto.setNMenge(dto.getNMenge().add(temp.getNMenge()));
                                        dto.setNAusgabe(dto.getNAusgabe().add(temp.getNAusgabe()));
                                        // PJ 14410
                                        if (temp.getSSnrChnr() != null) {

                                            dto.setSSnrChnr(dto.getSSnrChnr() + (temp.getSSnrChnr()));

                                        }
                                        listVerdichtet.put((Integer) key, dto);

                                        continue;
                                    }
                                }
                            }
                        }
                    }
                    if (bGefunden == false) {
                        listVerdichtet.put(mat[i].getIId(), dto);
                    }

                }

            }
        }
        // Sortieren, dazu brauch ich einen anderen container-typ
        LinkedList<ReportLosAusgabelisteDto> listVerdichtetUndSortiert = new LinkedList<ReportLosAusgabelisteDto>();
        for (Iterator<Integer> iter = listVerdichtet.keySet().iterator(); iter.hasNext();) {
            listVerdichtetUndSortiert.add(listVerdichtet.get(iter.next()));
        }
        Collections.sort(listVerdichtetUndSortiert,
                new ComparatorAusgabeListe(iSortierung.intValue(), bVorrangigNachFarbcodeSortiert));

        dataLokal = new Object[listVerdichtet.size()][AUSG_SPALTENANZAHL];
        int i = 0;
        for (Iterator<ReportLosAusgabelisteDto> iter = listVerdichtetUndSortiert.iterator(); iter
                .hasNext(); i++) {
            ReportLosAusgabelisteDto item = (ReportLosAusgabelisteDto) iter.next();
            dataLokal[i][AUSG_ARTIKELKLASSE] = item.getSArtikelklasse();
            dataLokal[i][AUSG_NUR_ZUR_INFO] = item.getBNurZurInfo();
            dataLokal[i][AUSG_AUSGABE] = item.getNAusgabe();
            dataLokal[i][AUSG_BEZEICHNUNG] = item.getSBezeichnung();
            dataLokal[i][AUSG_ZUSATZBEZEICHNUNG] = item.getSZusatzBezeichnung();
            dataLokal[i][AUSG_ZUSATZBEZEICHNUNG2] = item.getSZusatzBezeichnung2();
            dataLokal[i][AUSG_EINHEIT] = item.getSEinheit();
            dataLokal[i][AUSG_IDENT] = item.getSIdent();
            dataLokal[i][AUSG_LAGER] = item.getSLager();
            dataLokal[i][AUSG_LAGERORT] = item.getSLagerort();
            dataLokal[i][AUSG_MENGE] = item.getNMenge();
            dataLokal[i][AUSG_MONTAGEART] = item.getSMontageart();
            dataLokal[i][AUSG_SCHALE] = item.getISchale();
            dataLokal[i][AUSG_SNRCHNR] = item.getSSnrChnr();
            dataLokal[i][AUSG_ARTIKELBILD] = item.getArtikelbild();
            dataLokal[i][AUSG_KOMMENTAR] = item.getSKommentar();
            dataLokal[i][AUSG_LAGERSTAND] = item.getNLagerstand();
            dataLokal[i][AUSG_LAGERSTAND_SPERRLAGER] = item.getNLagerstandSperrlager();

            dataLokal[i][AUSG_REVISION] = item.getSRevision();
            dataLokal[i][AUSG_INDEX] = item.getSIndex();

            // CK: Farbcode einfuegen
            dataLokal[i][AUSG_FARBCODE] = item.getSFarbcode();
            if (item.getDHoehe() != null && item.getDHoehe() != 0) {
                dataLokal[i][AUSG_HOEHE] = new Double(item.getDHoehe());
            }
            if (item.getDBreite() != null && item.getDBreite() != 0) {
                dataLokal[i][AUSG_BREITE] = new Double(item.getDBreite());
            }
            if (item.getDTiefe() != null && item.getDTiefe() != 0) {
                dataLokal[i][AUSG_TIEFE] = new Double(item.getDTiefe());
            }
            dataLokal[i][AUSG_MATERIAL] = item.getSMaterial();

            // Verpackung
            if (item.getSBauform() != null) {
                dataLokal[i][AUSG_BAUFORM] = item.getSBauform();
            }
            if (item.getSVerpackungsart() != null) {
                dataLokal[i][AUSG_VERPACKUNGSART] = item.getSVerpackungsart();
            }
            // Gewicht
            if (item.getDGewichtkg() != null && item.getDGewichtkg() != 0) {
                dataLokal[i][AUSG_GEWICHTKG] = item.getDGewichtkg();
            }
            // Montage Rasterstehend
            if (item.getDRasterstehend() != null && item.getDRasterstehend() != 0) {
                dataLokal[i][AUSG_RASTERSTEHEND] = item.getDRasterstehend();
            }
            dataLokal[i][AUSG_BESTELLT] = item.getBdAnzahlBestellt();
            dataLokal[i][AUSG_IN_FERTIGUNG] = item.getNInFertigung();
            dataLokal[i][AUSG_STUECKLISTE_KOMMENTAR] = item.getSKommentarStueckliste();
        }

    } catch (Exception t) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER, t);
    } finally {
        closeSession(session);
    }
    return dataLokal;
}

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

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printLosstatistik(java.sql.Timestamp tVon, java.sql.Timestamp tBis, Integer losIId,
        Integer stuecklisteIId, Integer auftragIId, boolean bArbeitsplanSortiertNachAG, boolean bVerdichtet,
        java.sql.Timestamp tStichtag, TheClientDto theClientDto) {

    this.useCase = UC_LOSSTATISTIK;
    this.index = -1;
    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = factory.openSession();

    PersonalDto[] personalDtos = null;/*w w w .ja va2 s  .c om*/
    MaschineDto[] maschineDtos = null;
    try {
        personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(), true);
        maschineDtos = getZeiterfassungFac().maschineFindByMandantCNr(theClientDto.getMandant());
    } catch (RemoteException ex1) {
        throwEJBExceptionLPRespectOld(ex1);
    }

    Map<String, Object> mapParameter = new TreeMap<String, Object>();

    Criteria c = session.createCriteria(FLRLosReport.class);
    c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
    c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
            new String[] { LocaleFac.STATUS_ANGELEGT, LocaleFac.STATUS_STORNIERT })));
    if (stuecklisteIId != null) {
        c.add(Restrictions.eq(FertigungFac.FLR_LOS_STUECKLISTE_I_ID, stuecklisteIId));

        StuecklisteDto stuecklisteDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(stuecklisteIId,
                theClientDto);
        mapParameter.put("P_STUECKLISTE", stuecklisteDto.getArtikelDto().formatArtikelbezeichnung());

    }
    if (losIId != null) {
        c.add(Restrictions.eq("i_id", losIId));
    }
    if (auftragIId != null) {
        c.createAlias("flrauftrag", "a").add(Restrictions.eq("a.i_id", auftragIId));

        try {
            AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(auftragIId);
            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                    theClientDto);
            mapParameter.put("P_AUFTRAG", auftragDto.getCNr());
            mapParameter.put("P_AUFTRAGPROJEKT", auftragDto.getCBezProjektbezeichnung());
            mapParameter.put("P_AUFTRAGKUNDE", kundeDto.getPartnerDto().formatAnrede());

            mapParameter.put("P_BEARBEITER",
                    getPersonalFac().getPersonRpt(auftragDto.getPersonalIIdAnlegen(), theClientDto));
            if (auftragDto.getPersonalIIdVertreter() != null) {
                mapParameter.put("P_VERTRETER",
                        getPersonalFac().getPersonRpt(auftragDto.getPersonalIIdVertreter(), theClientDto));
            }

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

    }
    if (tStichtag != null) {
        mapParameter.put("P_STICHTAG", tStichtag);// new
        // Timestamp(tStichtag.getTime()));
        tStichtag = Helper.cutTimestamp(new Timestamp(tStichtag.getTime() + 24 * 3600000));
    }

    if (losIId == null && auftragIId == null) {

        if (tVon != null) {
            c.add(Restrictions.or(Restrictions.ge(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tVon),
                    Restrictions.ge(FertigungFac.FLR_LOS_T_ERLEDIGT, tVon)));
            mapParameter.put("P_VON", tVon);
        }
        if (tBis != null) {
            c.add(Restrictions.or(Restrictions.lt(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tBis),
                    Restrictions.lt(FertigungFac.FLR_LOS_T_ERLEDIGT, tBis)));
            mapParameter.put("P_BIS", new Timestamp(tBis.getTime() - 3600000));
        }

        if (tStichtag != null) {
            c.add(Restrictions.or(Restrictions.lt(FertigungFac.FLR_LOSREPORT_T_ANLEGEN, tStichtag),
                    Restrictions.lt(FertigungFac.FLR_LOSREPORT_T_ANLEGEN, tStichtag)));
            c.add(Restrictions.or(Restrictions.ge(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tStichtag),
                    Restrictions.ge(FertigungFac.FLR_LOS_T_ERLEDIGT, tStichtag)));
        }

    }
    c.addOrder(Order.asc("c_nr"));

    List<?> results = c.list();
    ArrayList<LosStatistikDto> al = new ArrayList<LosStatistikDto>();

    Iterator<?> resultListIterator = results.iterator();
    while (resultListIterator.hasNext()) {
        FLRLosReport los = (FLRLosReport) resultListIterator.next();

        try {

            LosDto losDto = getFertigungFac().losFindByPrimaryKey(los.getI_id());

            BigDecimal abgeliefert = new BigDecimal(0);
            for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                abgeliefert = abgeliefert.add(item.getN_menge());
            }

            // VKpreis
            BigDecimal vkPreis = null;

            if (los.getFlrauftragposition() != null) {
                vkPreis = los.getFlrauftragposition()
                        .getN_nettogesamtpreisplusversteckteraufschlagminusrabatte();
            } else {

                if (los.getFlrstueckliste() != null) {

                    Integer kundeIId = null;

                    if (los.getFlrauftrag() != null) {
                        kundeIId = los.getFlrauftrag().getFlrkunde().getI_id();
                    }
                    if (kundeIId == null && los.getFlrkunde() != null) {
                        kundeIId = los.getFlrkunde().getI_id();
                    }

                    if (kundeIId != null) {
                        KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kundeIId, theClientDto);

                        MwstsatzDto mwstsatzDtoAktuell = getMandantFac()
                                .mwstsatzFindByMwstsatzbezIIdAktuellster(kundeDto.getMwstsatzbezIId(),
                                        theClientDto);

                        VkpreisfindungDto vkpreisfindungDto = getVkPreisfindungFac().verkaufspreisfindung(
                                los.getFlrstueckliste().getArtikel_i_id(), kundeIId, losDto.getNLosgroesse(),
                                losDto.getTProduktionsende(),
                                kundeDto.getVkpfArtikelpreislisteIIdStdpreisliste(),
                                mwstsatzDtoAktuell.getIId(), theClientDto.getSMandantenwaehrung(),
                                theClientDto);

                        VerkaufspreisDto kundenVKPreisDto = Helper.getVkpreisBerechnet(vkpreisfindungDto);
                        if (kundenVKPreisDto != null) {
                            vkPreis = kundenVKPreisDto.nettopreis;
                        }
                    } else {
                        VkPreisfindungEinzelverkaufspreisDto vkpreisDto = getVkPreisfindungFac()
                                .getArtikeleinzelverkaufspreis(los.getFlrstueckliste().getArtikel_i_id(), null,
                                        theClientDto.getSMandantenwaehrung(), theClientDto);
                        if (vkpreisDto != null && vkpreisDto.getNVerkaufspreisbasis() != null) {
                            vkPreis = vkpreisDto.getNVerkaufspreisbasis();
                        }
                    }

                }
            }

            // Zuerst Material
            Session session2 = factory.openSession();
            Criteria cSoll = session.createCriteria(FLRLossollmaterial.class);
            cSoll.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLMATERIAL_LOS_I_ID, los.getI_id()));
            cSoll.createAlias("flrartikel", "a");
            cSoll.addOrder(Order.asc("a.c_nr"));
            List<?> resultsSoll = cSoll.list();
            Iterator<?> resultListIteratorSoll = resultsSoll.iterator();
            while (resultListIteratorSoll.hasNext()) {
                FLRLossollmaterial sollmat = (FLRLossollmaterial) resultListIteratorSoll.next();
                if (bVerdichtet == false && sollmat.getIstmaterialset().size() > 0) {
                    int i = 0;
                    for (Iterator<?> iter = sollmat.getIstmaterialset().iterator(); iter.hasNext();) {
                        FLRLosistmaterial item = (FLRLosistmaterial) iter.next();
                        LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                        losStatistikDto.setArtikelnummer(sollmat.getFlrartikel().getC_nr());
                        ArtikelDto artikelDto = getArtikelFac()
                                .artikelFindByPrimaryKeySmall(sollmat.getFlrartikel().getI_id(), theClientDto);
                        losStatistikDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());

                        Timestamp tsBuchungszeit = null;

                        List<SeriennrChargennrMitMengeDto> snrDtos = getLagerFac()
                                .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS,
                                        item.getI_id());

                        for (int k = 0; k < snrDtos.size(); k++) {

                            LagerbewegungDto bewDto = getLagerFac().getLetzteintrag(LocaleFac.BELEGART_LOS,
                                    item.getI_id(), snrDtos.get(k).getCSeriennrChargennr());
                            tsBuchungszeit = bewDto.getTBuchungszeit();
                            break;
                        }

                        losStatistikDto.setBuchungszeit(tsBuchungszeit);

                        if (i == 0) {
                            losStatistikDto.setSollmenge(sollmat.getN_menge());
                            losStatistikDto.setSollpreis(sollmat.getN_sollpreis());
                        } else {
                            losStatistikDto.setSollmenge(new BigDecimal(0));
                            losStatistikDto.setSollpreis(new BigDecimal(0));
                        }

                        losStatistikDto.setBMaterial(true);
                        losStatistikDto.setIstpreis(getFertigungFac()
                                .getAusgegebeneMengePreis(sollmat.getI_id(), null, theClientDto));
                        losStatistikDto.setAbgelieferteMenge(abgeliefert);
                        losStatistikDto.setVkpreisStueckliste(vkPreis);

                        BigDecimal istmenge = new BigDecimal(0);

                        if (Helper.short2boolean(item.getB_abgang()) == true) {
                            istmenge = istmenge.add(item.getN_menge());
                        } else {
                            istmenge = istmenge.subtract(item.getN_menge());
                        }

                        losStatistikDto.setIstmenge(istmenge);

                        if (tStichtag == null) {

                            al.add(losStatistikDto);
                            i++;
                        } else {
                            if (tsBuchungszeit == null) {
                                al.add(losStatistikDto);
                                i++;
                            } else {
                                if (tsBuchungszeit.before(tStichtag)) {
                                    al.add(losStatistikDto);
                                    i++;
                                }
                            }

                        }

                    }
                } else {

                    LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                    losStatistikDto.setArtikelnummer(sollmat.getFlrartikel().getC_nr());
                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKeySmall(sollmat.getFlrartikel().getI_id(), theClientDto);
                    losStatistikDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());
                    losStatistikDto.setSollmenge(sollmat.getN_menge());
                    losStatistikDto.setSollpreis(sollmat.getN_sollpreis());
                    losStatistikDto.setBMaterial(true);
                    losStatistikDto.setIstpreis(
                            getFertigungFac().getAusgegebeneMengePreis(sollmat.getI_id(), null, theClientDto));
                    losStatistikDto.setAbgelieferteMenge(abgeliefert);
                    losStatistikDto.setVkpreisStueckliste(vkPreis);

                    BigDecimal istmenge = new BigDecimal(0);
                    for (Iterator<?> iter = sollmat.getIstmaterialset().iterator(); iter.hasNext();) {
                        FLRLosistmaterial item = (FLRLosistmaterial) iter.next();

                        if (tStichtag != null) {

                            Timestamp tsBuchungszeit = null;

                            List<SeriennrChargennrMitMengeDto> snrDtos = getLagerFac()
                                    .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS,
                                            item.getI_id());

                            for (int k = 0; k < snrDtos.size(); k++) {

                                LagerbewegungDto bewDto = getLagerFac().getLetzteintrag(LocaleFac.BELEGART_LOS,
                                        item.getI_id(), snrDtos.get(k).getCSeriennrChargennr());
                                tsBuchungszeit = bewDto.getTBuchungszeit();
                                break;
                            }

                            if (tsBuchungszeit.after(tStichtag)) {
                                continue;
                            }

                        }

                        if (Helper.short2boolean(item.getB_abgang()) == true) {
                            istmenge = istmenge.add(item.getN_menge());
                        } else {
                            istmenge = istmenge.subtract(item.getN_menge());
                        }
                    }
                    losStatistikDto.setIstmenge(istmenge);

                    al.add(losStatistikDto);
                }
            }
            session2.close();

            LossollarbeitsplanDto[] lossollarbeitsplanDtos = getFertigungFac()
                    .lossollarbeitsplanFindByLosIId(los.getI_id());
            // PJ14351 Nach AG sortieren
            if (bArbeitsplanSortiertNachAG == true) {

                // Nach Fertigungsgruppe sortieren
                for (int k = lossollarbeitsplanDtos.length - 1; k > 0; --k) {
                    for (int j = 0; j < k; ++j) {
                        Integer a1 = lossollarbeitsplanDtos[j].getIArbeitsgangnummer();
                        Integer a2 = lossollarbeitsplanDtos[j + 1].getIArbeitsgangnummer();
                        if (a1.intValue() > a2.intValue()) {
                            LossollarbeitsplanDto temp = lossollarbeitsplanDtos[j];
                            lossollarbeitsplanDtos[j] = lossollarbeitsplanDtos[j + 1];
                            lossollarbeitsplanDtos[j + 1] = temp;
                        }
                    }
                }
            }

            ArrayList<LosStatistikDto> hmSoll = new ArrayList<LosStatistikDto>();

            // Zuerst Maschinenzeiten
            for (int i = 0; i < lossollarbeitsplanDtos.length; i++) {
                if (lossollarbeitsplanDtos[i].getMaschineIId() != null) {
                    Integer artikelIId = lossollarbeitsplanDtos[i].getArtikelIIdTaetigkeit();
                    BigDecimal sollzeit = lossollarbeitsplanDtos[i].getNGesamtzeit();
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(artikelIId,
                            theClientDto);

                    // Schon vorhanden?
                    boolean bGefunden = false;
                    for (int j = 0; j < hmSoll.size(); j++) {
                        LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);
                        if (losStatistikDto.getArtikelnummer().equals(artikelDto.getCNr())) {
                            if (lossollarbeitsplanDtos[i].getMaschineIId()
                                    .equals(losStatistikDto.getMaschineIId())) {
                                losStatistikDto.setSollmenge(losStatistikDto.getSollmenge().add(sollzeit));
                                bGefunden = true;
                                hmSoll.set(j, losStatistikDto);
                            }
                        }
                    }
                    if (!bGefunden) {
                        LosStatistikDto losStatistikMaschineDto = new LosStatistikDto(losDto);
                        losStatistikMaschineDto.setArtikelnummer(artikelDto.getCNr());
                        losStatistikMaschineDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());
                        losStatistikMaschineDto.setSollmenge(sollzeit);
                        losStatistikMaschineDto.setBMaterial(false);
                        losStatistikMaschineDto.setBIstPerson(false);

                        losStatistikMaschineDto.setAbgelieferteMenge(abgeliefert);
                        losStatistikMaschineDto.setVkpreisStueckliste(vkPreis);

                        losStatistikMaschineDto.setSollpreis(getZeiterfassungFac()
                                .getMaschinenKostenZumZeitpunkt(lossollarbeitsplanDtos[i].getMaschineIId(),
                                        Helper.cutTimestamp(new Timestamp(System.currentTimeMillis()))));
                        MaschineDto maschineDto = getZeiterfassungFac()
                                .maschineFindByPrimaryKey(lossollarbeitsplanDtos[i].getMaschineIId());

                        String maschinenname = "M:";
                        if (maschineDto.getCIdentifikationsnr() != null) {
                            maschinenname += maschineDto.getCIdentifikationsnr() + " ";
                        }
                        maschinenname += maschineDto.getCBez();

                        losStatistikMaschineDto.setPersonMaschine(maschinenname);
                        losStatistikMaschineDto.setMaschineIId(maschineDto.getIId());

                        hmSoll.add(losStatistikMaschineDto);
                    }
                }
            }
            // Dann Personalzeiten
            for (int i = 0; i < lossollarbeitsplanDtos.length; i++) {

                if (!Helper.short2boolean(lossollarbeitsplanDtos[i].getBNurmaschinenzeit())) {

                    Integer artikelIId = lossollarbeitsplanDtos[i].getArtikelIIdTaetigkeit();
                    BigDecimal sollzeit = lossollarbeitsplanDtos[i].getNGesamtzeit();
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(artikelIId,
                            theClientDto);

                    // Schon vorhanden?
                    boolean bGefunden = false;
                    for (int j = 0; j < hmSoll.size(); j++) {
                        LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);
                        if (losStatistikDto.getArtikelnummer().equals(artikelDto.getCNr())) {

                            if (losStatistikDto.getMaschineIId() == null) {
                                losStatistikDto.setSollmenge(losStatistikDto.getSollmenge().add(sollzeit));
                                hmSoll.set(j, losStatistikDto);
                                bGefunden = true;
                            }

                        }

                    }

                    if (!bGefunden) {
                        LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                        losStatistikDto.setArtikelnummer(artikelDto.getCNr());
                        losStatistikDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());
                        losStatistikDto.setSollmenge(sollzeit);
                        losStatistikDto.setBMaterial(false);
                        losStatistikDto.setBIstPerson(true);
                        losStatistikDto.setAbgelieferteMenge(abgeliefert);
                        losStatistikDto.setVkpreisStueckliste(vkPreis);
                        ArtikellieferantDto artikellieferantDto = getArtikelFac().getArtikelEinkaufspreis(
                                artikelDto.getIId(), new BigDecimal(1), theClientDto.getSMandantenwaehrung(),
                                theClientDto);
                        if (artikellieferantDto != null && artikellieferantDto.getLief1Preis() != null) {
                            losStatistikDto.setSollpreis(artikellieferantDto.getLief1Preis());
                        } else {
                            losStatistikDto.setSollpreis(new BigDecimal(0));
                        }
                        hmSoll.add(losStatistikDto);

                    }
                }
            }
            // Dann Zeiten

            AuftragzeitenDto[] maschinenzeitenDtos = getZeiterfassungFac()
                    .getAllMaschinenzeitenEinesBeleges(los.getI_id(), null, null, tStichtag, theClientDto);

            AuftragzeitenDto[] personalzeitenDtos = getZeiterfassungFac().getAllZeitenEinesBeleges(
                    LocaleFac.BELEGART_LOS, los.getI_id(), null, null, null, tStichtag, true, false,
                    theClientDto);

            for (int i = 0; i < personalzeitenDtos.length; i++) {

                boolean bGefunden = false;
                for (int j = 0; j < hmSoll.size(); j++) {
                    LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);

                    if (losStatistikDto.getMaschineIId() == null) {

                        if (losStatistikDto.getArtikelnummer().equals(personalzeitenDtos[i].getSArtikelcnr())) {
                            bGefunden = true;

                        }
                    }
                }

                if (bGefunden == false) {
                    LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                    losStatistikDto.setArtikelnummer(personalzeitenDtos[i].getSArtikelcnr());
                    losStatistikDto.setArtikelbezeichnung(personalzeitenDtos[i].getSArtikelbezeichnung());
                    losStatistikDto.setSollmenge(new BigDecimal(0));
                    losStatistikDto.setSollpreis(new BigDecimal(0));
                    losStatistikDto.setAbgelieferteMenge(abgeliefert);
                    losStatistikDto.setVkpreisStueckliste(vkPreis);
                    hmSoll.add(losStatistikDto);

                }
            }

            for (int i = 0; i < maschinenzeitenDtos.length; i++) {
                boolean bGefunden = false;

                if (tStichtag != null && maschinenzeitenDtos[i].getTsEnde() != null
                        && tStichtag.before(maschinenzeitenDtos[i].getTsEnde())) {
                    continue;
                }

                for (int j = 0; j < hmSoll.size(); j++) {
                    LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);

                    if (losStatistikDto.getMaschineIId() != null && losStatistikDto.getMaschineIId()
                            .equals(maschinenzeitenDtos[i].getIPersonalMaschinenId())) {

                        if (losStatistikDto.getArtikelnummer()
                                .equals(maschinenzeitenDtos[i].getSArtikelcnr())) {
                            bGefunden = true;

                        }
                    }
                }

                if (bGefunden == false) {
                    LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                    losStatistikDto.setArtikelnummer(maschinenzeitenDtos[i].getSArtikelcnr());
                    losStatistikDto.setArtikelbezeichnung(maschinenzeitenDtos[i].getSArtikelbezeichnung());
                    losStatistikDto.setMaschineIId(maschinenzeitenDtos[i].getIPersonalMaschinenId());
                    losStatistikDto.setSollmenge(new BigDecimal(0));
                    losStatistikDto.setSollpreis(new BigDecimal(0));
                    losStatistikDto.setAbgelieferteMenge(abgeliefert);
                    losStatistikDto.setVkpreisStueckliste(vkPreis);

                    hmSoll.add(losStatistikDto);

                }

            }

            for (int k = 0; k < hmSoll.size(); k++) {
                LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(k);

                losStatistikDto.setAbgelieferteMenge(abgeliefert);

                int iPos = al.size();
                al.add(losStatistikDto);
                // Personen
                if (losStatistikDto.getMaschineIId() == null) {
                    for (int i = 0; i < personalDtos.length; i++) {
                        PersonalDto personalDto = personalDtos[i];

                        BigDecimal bdgesamtzeit = new BigDecimal(0);
                        BigDecimal bdgesamtkosten = new BigDecimal(0);
                        String person = "";
                        for (int j = 0; j < personalzeitenDtos.length; j++) {
                            AuftragzeitenDto azDto = personalzeitenDtos[j];
                            if (azDto != null) {
                                if (personalDto.getIId().equals(azDto.getIPersonalMaschinenId())
                                        && azDto.getSArtikelcnr().equals(losStatistikDto.getArtikelnummer())) {
                                    bdgesamtzeit = bdgesamtzeit.add(new BigDecimal(azDto.getDdDauer()));
                                    bdgesamtkosten = bdgesamtkosten.add(azDto.getBdKosten());
                                    person = azDto.getSPersonalMaschinenname();
                                    personalzeitenDtos[j] = null;
                                }
                            }
                        }
                        if (bdgesamtzeit.doubleValue() != 0 || bdgesamtkosten.doubleValue() != 0) {

                            LosStatistikDto losStatistikPersonDto = new LosStatistikDto(losDto);
                            losStatistikPersonDto.setPersonMaschine(person);
                            losStatistikPersonDto.setBMaterial(false);
                            losStatistikPersonDto.setAbgelieferteMenge(abgeliefert);
                            losStatistikPersonDto.setVkpreisStueckliste(vkPreis);

                            losStatistikPersonDto.setIstmenge(bdgesamtzeit);
                            if (bdgesamtzeit.doubleValue() != 0) {
                                losStatistikPersonDto.setIstpreis(
                                        bdgesamtkosten.divide(bdgesamtzeit, 4, BigDecimal.ROUND_HALF_EVEN));
                            } else {
                                losStatistikPersonDto.setIstpreis(new BigDecimal(0));
                            }
                            al.add(losStatistikPersonDto);

                        }

                    }
                }
                // Maschinen
                if (losStatistikDto.getMaschineIId() != null) {
                    for (int i = 0; i < maschineDtos.length; i++) {
                        MaschineDto maschineDto = maschineDtos[i];

                        BigDecimal bdgesamtzeit = new BigDecimal(0);
                        BigDecimal bdgesamtkosten = new BigDecimal(0);
                        for (int j = 0; j < maschinenzeitenDtos.length; j++) {

                            if (tStichtag != null && maschinenzeitenDtos[j].getTsEnde() != null
                                    && tStichtag.before(maschinenzeitenDtos[j].getTsEnde())) {
                                continue;
                            }

                            AuftragzeitenDto azDto = maschinenzeitenDtos[j];
                            if (maschineDto.getIId().equals(azDto.getIPersonalMaschinenId())
                                    && azDto.getSArtikelcnr().equals(losStatistikDto.getArtikelnummer())) {
                                if (losStatistikDto.getMaschineIId().equals(azDto.getIPersonalMaschinenId())) {
                                    bdgesamtzeit = bdgesamtzeit.add(new BigDecimal(azDto.getDdDauer()));
                                    bdgesamtkosten = bdgesamtkosten.add(azDto.getBdKosten());
                                }

                            }
                        }
                        if (bdgesamtzeit.doubleValue() != 0 || bdgesamtkosten.doubleValue() != 0) {

                            BigDecimal kosten = bdgesamtkosten.divide(bdgesamtzeit, 4,
                                    BigDecimal.ROUND_HALF_EVEN);

                            if (losStatistikDto.getIstmenge() != null) {
                                losStatistikDto.setIstmenge(losStatistikDto.getIstmenge().add(bdgesamtzeit));
                            } else {
                                losStatistikDto.setIstmenge(bdgesamtzeit);
                            }

                            if (losStatistikDto.getIstpreis() != null) {
                                losStatistikDto.setIstpreis(losStatistikDto.getIstpreis().add(kosten));
                            } else {
                                losStatistikDto.setIstpreis(kosten);
                            }
                            al.set(iPos, losStatistikDto);
                        }

                    }
                }
            }

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

    }
    session.close();

    data = new Object[al.size()][23];
    for (int i = 0; i < al.size(); i++) {
        LosStatistikDto losStatistikDto = (LosStatistikDto) al.get(i);
        data[i][LOSSTATISTIK_GRUPPIERUNG] = losStatistikDto.getLosDto().getCNr();

        if (losStatistikDto.getLosDto().getTManuellerledigt() != null) {
            data[i][LOSSTATISTIK_ERLEDIGUNGSDATUM] = losStatistikDto.getLosDto().getTManuellerledigt();
        } else {
            data[i][LOSSTATISTIK_ERLEDIGUNGSDATUM] = losStatistikDto.getLosDto().getTErledigt();
        }

        data[i][LOSSTATISTIK_BEWERTUNG] = losStatistikDto.getLosDto().getFBewertung();
        data[i][LOSSTATISTIK_GEPLANTESSOLLMATERIAL] = losStatistikDto.getLosDto().getNSollmaterial();
        data[i][LOSSTATISTIK_GRUPPIERUNGBEZEICHNUNG] = losStatistikDto.getLosDto().getCProjekt();
        data[i][LOSSTATISTIK_GRUPPIERUNGERLEDIGT] = losStatistikDto.getLosDto().getTErledigt();
        data[i][LOSSTATISTIK_GRUPPIERUNGAUSGABE] = losStatistikDto.getLosDto().getTAusgabe();
        data[i][LOSSTATISTIK_GRUPPIERUNABGELIEFERTEMENGE] = losStatistikDto.getAbgelieferteMenge();
        data[i][LOSSTATISTIK_GRUPPIERUNGLOSGROESSE] = losStatistikDto.getLosDto().getNLosgroesse();
        data[i][LOSSTATISTIK_GRUPPIERUNVKPREIS] = losStatistikDto.getVkpreisStueckliste();
        data[i][LOSSTATISTIK_BUCHUNGSZEIT] = losStatistikDto.getBuchungszeit();

        if (losStatistikDto.getLosDto().getStuecklisteIId() != null) {
            data[i][LOSSTATISTIK_GRUPPIERUNGSTKLARTIKEL] = getStuecklisteFac()
                    .stuecklisteFindByPrimaryKey(losStatistikDto.getLosDto().getStuecklisteIId(), theClientDto)
                    .getArtikelDto().formatArtikelbezeichnung();
        }

        if (losStatistikDto.getLosDto().getAuftragIId() != null) {
            AuftragDto auftragDto = getAuftragFac()
                    .auftragFindByPrimaryKey(losStatistikDto.getLosDto().getAuftragIId());
            if (auftragDto.getKundeIIdAuftragsadresse() != null) {
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);
                data[i][LOSSTATISTIK_GRUPPIERUNGKUNDE] = kundeDto.getPartnerDto().formatAnrede();
            }
        }

        data[i][LOSSTATISTIK_ISTMENGE] = losStatistikDto.getIstmenge();
        data[i][LOSSTATISTIK_ISTPREIS] = losStatistikDto.getIstpreis();
        data[i][LOSSTATISTIK_PERSONALMASCHINE] = losStatistikDto.getPersonMaschine();
        data[i][LOSSTATISTIK_ISTPERSON] = new Boolean(losStatistikDto.isBIstPerson());
        data[i][LOSSTATISTIK_SOLLMENGE] = losStatistikDto.getSollmenge();
        data[i][LOSSTATISTIK_SOLLPREIS] = losStatistikDto.getSollpreis();
        data[i][LOSSTATISTIK_ARTIKELNUMMER] = losStatistikDto.getArtikelnummer();
        data[i][LOSSTATISTIK_ARTIKELBEZEICHNUNG] = losStatistikDto.getArtikelbezeichnung();
        data[i][LOSSTATISTIK_UNTERGRUPPEMATERIAL] = new Boolean(losStatistikDto.isBMaterial());
    }

    initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_LOSSTATISTIK,
            theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
    return getReportPrint();
}

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

License:Open Source License

/**
 * Daten fuer eine Bewegungsvorschau erstellen
 * //www .  j  a  va  2s .c o  m
 * @param artikelDto
 *            ArtikelDto
 * @param bInternebestellungMiteinbeziehen
 *            boolean
 * @param alTheoretischeZusatzeintraege
 *            Optional. Hier koennen der Bewegungsvorschau "kuenstlich"
 *            weitere Eintraege hinzugefuegt werden.
 * @param cNrUserI
 *            String
 * @return ArrayList
 * @throws EJBExceptionLP
 */
private ArrayList<BewegungsvorschauDto> getBewegungsvorschau(ArtikelDto artikelDto,
        boolean bInternebestellungMiteinbeziehen, ArrayList<BewegungsvorschauDto> alTheoretischeZusatzeintraege,
        boolean bTermineVorHeuteAufHeute, TheClientDto theClientDto, ArrayList<Integer> arLosIId)
        throws EJBExceptionLP {
    ArrayList<BewegungsvorschauDto> bewegungsvorschau = new ArrayList<BewegungsvorschauDto>();
    // Zusatzeintraege hinzufuegen
    if (alTheoretischeZusatzeintraege != null) {
        // hier nur Eintraege dieses Artikels beruecksichtigen
        for (Iterator<?> iter = alTheoretischeZusatzeintraege.iterator(); iter.hasNext();) {
            BewegungsvorschauDto item = (BewegungsvorschauDto) iter.next();
            if (artikelDto.getIId().equals(item.getArtikelIId())) {
                bewegungsvorschau.add(item);
            }
        }
    }

    Session session = null;
    try {
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        // ------------------------------------------------------------------
        // ----
        // Bestelltliste
        // ------------------------------------------------------------------
        // ----
        Criteria cBestellt = session.createCriteria(FLRArtikelbestellt.class);
        // Filter nach Artikel
        cBestellt.createAlias(ArtikelbestelltFac.FLR_ARTIKELBESTELLT_FLRARTIKEL, "a")
                .add(Restrictions.eq("a.i_id", artikelDto.getIId()));
        // Sortierung nach Liefertermin
        cBestellt.addOrder(Order.asc(ArtikelbestelltFac.FLR_ARTIKELBESTELLT_D_LIEFERTERMIN));
        // Query ausfuehren
        List<?> listBestellt = cBestellt.list();
        for (Iterator<?> iter = listBestellt.iterator(); iter.hasNext();) {
            FLRArtikelbestellt item = (FLRArtikelbestellt) iter.next();
            if (item.getC_belegartnr().equals(LocaleFac.BELEGART_BESTELLUNG)) {
                BestellpositionDto bestpos = getBestellpositionFac()
                        .bestellpositionFindByPrimaryKeyOhneExc(item.getI_belegartpositionid());
                if (bestpos != null) { // Bestelltliste koennte inkonsistent
                    // sein.
                    BestellungDto bestellung = getBestellungFac()
                            .bestellungFindByPrimaryKey(bestpos.getBestellungIId());
                    // wenn die Bestellung "meinem" Mandanten gehoert
                    if (!bestellung.getStatusCNr().equals(LocaleFac.STATUS_STORNIERT)) {
                        // if (bestellung.getTManuellGeliefert() == null) {
                        if (bestpos.getBestellpositionstatusCNr() != null
                                && !bestpos.getBestellpositionstatusCNr().equals(LocaleFac.STATUS_ERLEDIGT)) {
                            if (bestellung.getMandantCNr().equals(theClientDto.getMandant())) {
                                // Bewegungsvorschaueintrag erzeugen
                                BewegungsvorschauDto dto = new BewegungsvorschauDto();
                                dto.setArtikelIId(item.getFlrartikel().getI_id());
                                dto.setCBelegartCNr(LocaleFac.BELEGART_BESTELLUNG);
                                dto.setCProjekt(bestellung.getCBez());
                                dto.setIBelegIId(bestellung.getIId());
                                dto.setIBelegPositionIId(item.getI_belegartpositionid());
                                dto.setNMenge(item.getN_menge());
                                dto.setTLiefertermin(new Timestamp(item.getT_liefertermin().getTime()));
                                dto.setTABTerminBestellung(bestpos.getTAuftragsbestaetigungstermin());
                                dto.setCBelegnummer(bestellung.getCNr());
                                // Lieferant holen
                                LieferantDto lieferantDto = getLieferantFac().lieferantFindByPrimaryKey(
                                        bestellung.getLieferantIIdBestelladresse(), theClientDto);
                                dto.setPartnerDto(lieferantDto.getPartnerDto());
                                bewegungsvorschau.add(dto);
                            }
                        }
                        // }
                    }
                } else {
                    // Eintrag in der Bestelltliste, zu dem es gar keine
                    // Bestellposition gibt
                    // -> loeschen.
                    getArtikelbestelltFac().removeArtikelbestellt(LocaleFac.BELEGART_BESTELLUNG,
                            item.getI_belegartpositionid());
                }
            }
        }
        // ------------------------------------------------------------------
        // ----
        // Reservierungsliste
        // ------------------------------------------------------------------
        // ----
        Criteria cReservierung = session.createCriteria(FLRArtikelreservierung.class);
        // Filter nach Artikel
        cReservierung.createAlias(ArtikelbestelltFac.FLR_ARTIKELBESTELLT_FLRARTIKEL, "a")
                .add(Restrictions.eq("a.i_id", artikelDto.getIId()));
        // Sortierung nach Liefertermin
        cReservierung.addOrder(Order.asc(ReservierungFac.FLR_ARTIKELRESERVIERUNG_D_LIEFERTERMIN));
        // Query ausfuehren
        List<?> listReservierung = cReservierung.list();
        for (Iterator<?> iter = listReservierung.iterator(); iter.hasNext();) {
            FLRArtikelreservierung item = (FLRArtikelreservierung) iter.next();
            // --------------------------------------------------------------
            // ------
            // Auftragsreservierung
            // --------------------------------------------------------------
            // ------
            if (item.getC_belegartnr().equals(LocaleFac.BELEGART_AUFTRAG)) {
                AuftragpositionDto aufpos = getAuftragpositionFac()
                        .auftragpositionFindByPrimaryKeyOhneExc(item.getI_belegartpositionid());
                if (aufpos != null) {
                    AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(aufpos.getBelegIId());
                    if (auftragDto.getMandantCNr().equals(theClientDto.getMandant())) {
                        // Bewegungsvorschaueintrag erzeugen
                        BewegungsvorschauDto dto = new BewegungsvorschauDto();
                        dto.setArtikelIId(item.getFlrartikel().getI_id());
                        dto.setCBelegartCNr(LocaleFac.BELEGART_AUFTRAG);
                        dto.setCProjekt(auftragDto.getCBezProjektbezeichnung());
                        dto.setProjektIId(auftragDto.getProjektIId());
                        dto.setIBelegIId(auftragDto.getIId());
                        dto.setIBelegPositionIId(item.getI_belegartpositionid());
                        dto.setNMenge(item.getN_menge().negate());
                        // Termine vor heute werden auf heute umgerechnet
                        Timestamp tsTermin = new Timestamp(item.getT_liefertermin().getTime());
                        if (tsTermin.before(getTimestamp()) && bTermineVorHeuteAufHeute) {
                            tsTermin = Helper.cutTimestamp(getTimestamp());
                        }
                        dto.setTLiefertermin(tsTermin);
                        dto.setCBelegnummer(auftragDto.getCNr());
                        // Kunde holen
                        KundeDto kundeDto = getKundeFac()
                                .kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(), theClientDto);
                        dto.setPartnerDto(kundeDto.getPartnerDto());
                        dto.setKundeDto(kundeDto);
                        bewegungsvorschau.add(dto);
                    }
                } else {
                    // es wurde eine Auftragsreservierung gefunden, zu der
                    // es keine Auftragsposition gibt.
                    // -> loeschen.
                    getReservierungFac().removeArtikelreservierung(LocaleFac.BELEGART_AUFTRAG,
                            item.getI_belegartpositionid());
                }
            }
            // Losreservierung
            else if (item.getC_belegartnr().equals(LocaleFac.BELEGART_LOS)) {
                LossollmaterialDto losmat = getFertigungFac()
                        .lossollmaterialFindByPrimaryKeyOhneExc(item.getI_belegartpositionid());
                if (losmat != null) {
                    LosDto losDto = getFertigungFac().losFindByPrimaryKey(losmat.getLosIId());
                    if (losDto.getMandantCNr().equals(theClientDto.getMandant())) {

                        if (arLosIId != null) {

                            // Nur bestimmte Lose beruecksichtigen
                            boolean bGefunden = false;
                            for (int i = 0; i < arLosIId.size(); i++) {

                                if (losDto.getIId().equals(arLosIId.get(i))) {
                                    bGefunden = true;
                                    break;
                                }

                            }

                            if (bGefunden == false) {
                                // auslassen
                                continue;
                            }

                        }

                        // Bewegungsvorschaueintrag erzeugen
                        BewegungsvorschauDto dto = new BewegungsvorschauDto();
                        dto.setArtikelIId(item.getFlrartikel().getI_id());
                        dto.setCBelegartCNr(LocaleFac.BELEGART_LOS);
                        dto.setCProjekt(losDto.getCProjekt());

                        dto.setIBelegIId(losDto.getIId());
                        dto.setIBelegPositionIId(item.getI_belegartpositionid());
                        dto.setNMenge(item.getN_menge().negate());
                        // Termine vor heute werden auf heute umgerechnet
                        Timestamp tsTermin = new Timestamp(item.getT_liefertermin().getTime());
                        if (tsTermin.before(getTimestamp()) && bTermineVorHeuteAufHeute) {
                            tsTermin = Helper.cutTimestamp(getTimestamp());
                        }
                        dto.setTLiefertermin(tsTermin);
                        dto.setCBelegnummer(losDto.getCNr());
                        // wenn das Los auftragsbezogen ist, dann hol ich
                        // auch den Kunden
                        if (losDto.getAuftragpositionIId() != null || losDto.getAuftragIId() != null) {

                            Integer auftragIId = losDto.getAuftragIId();
                            if (auftragIId == null) {
                                AuftragpositionDto aufposDto = getAuftragpositionFac()
                                        .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                                auftragIId = aufposDto.getBelegIId();
                            }

                            // den finde ich ueber die Auftragsposition

                            AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(auftragIId);

                            dto.setProjektIId(auftragDto.getProjektIId());

                            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(
                                    auftragDto.getKundeIIdAuftragsadresse(), theClientDto);
                            dto.setPartnerDto(kundeDto.getPartnerDto());
                        }
                        bewegungsvorschau.add(dto);
                    }
                } else {
                    // es wurde eine Auftragsreservierung gefunden, zu der
                    // es keine Auftragsposition gibt.
                    // -> loeschen.
                    getReservierungFac().removeArtikelreservierung(LocaleFac.BELEGART_LOS,
                            item.getI_belegartpositionid());
                }
            } else if (item.getC_belegartnr().equals(LocaleFac.BELEGART_KUECHE)) {
                Speiseplanposition speiseplanposition = em.find(Speiseplanposition.class,
                        item.getI_belegartpositionid());
                if (speiseplanposition != null) {
                    SpeiseplanpositionDto speiseplanpositionDto = SpeiseplanpositionDtoAssembler
                            .createDto(speiseplanposition);

                    // Bewegungsvorschaueintrag erzeugen
                    BewegungsvorschauDto dto = new BewegungsvorschauDto();
                    dto.setArtikelIId(item.getFlrartikel().getI_id());
                    dto.setCBelegartCNr(LocaleFac.BELEGART_KUECHE);

                    SpeiseplanDto speiseplanDto = null;
                    try {
                        speiseplanDto = getKuecheFac()
                                .speiseplanFindByPrimaryKey(speiseplanpositionDto.getSpeiseplanIId());
                        dto.setCBelegnummer("K");

                        // Projekt= Speisekassa

                        KassaartikelDto speisekassaDto = getKuecheFac()
                                .kassaartikelFindByPrimaryKey(speiseplanDto.getKassaartikelIId());

                        dto.setCProjekt(speisekassaDto.getCBez());

                        // Kunde = Stuecklistebezeichnung
                        /*
                         * StuecklisteDto stuecklisteDto =
                         * getStuecklisteFac() .stuecklisteFindByPrimaryKey(
                         * speiseplanDto.getStuecklisteIId(), theClientDto);
                         */

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

                    dto.setIBelegIId(speiseplanDto.getIId());
                    dto.setIBelegPositionIId(item.getI_belegartpositionid());
                    dto.setNMenge(item.getN_menge().negate());
                    // Termine vor heute werden auf heute umgerechnet
                    Timestamp tsTermin = new Timestamp(item.getT_liefertermin().getTime());
                    if (tsTermin.before(getTimestamp()) && bTermineVorHeuteAufHeute) {
                        tsTermin = Helper.cutTimestamp(getTimestamp());
                    }
                    dto.setTLiefertermin(tsTermin);

                    bewegungsvorschau.add(dto);

                } else {
                    getReservierungFac().removeArtikelreservierung(LocaleFac.BELEGART_KUECHE,
                            item.getI_belegartpositionid());
                }

            }
        }
        // ------------------------------------------------------------------
        // ----
        // Fehlmengen
        // ------------------------------------------------------------------
        // ----
        Criteria cFehlmenge = session.createCriteria(FLRFehlmenge.class);
        // Filter nach Artikel
        cFehlmenge.add(Restrictions.eq(ArtikelFac.FLR_FEHLMENGE_ARTIKEL_I_ID, artikelDto.getIId()));
        // Sortierung nach Liefertermin
        cFehlmenge.addOrder(Order.asc(ArtikelFac.FLR_FEHLMENGE_T_LIEFERTERMIN));
        List<?> listFehlmenge = cFehlmenge.list();
        for (Iterator<?> iter = listFehlmenge.iterator(); iter.hasNext();) {
            FLRFehlmenge item = (FLRFehlmenge) iter.next();
            // kontrollieren, ob das los auch von diesem mandanten ist
            if (item.getFlrlossollmaterial() != null && item.getFlrlossollmaterial().getFlrlos()
                    .getMandant_c_nr().equals(theClientDto.getMandant())) {
                // Los holen
                LosDto losDto = getFertigungFac()
                        .losFindByPrimaryKey(item.getFlrlossollmaterial().getFlrlos().getI_id());

                if (arLosIId != null) {

                    // Nur bestimmte Lose beruecksichtigen
                    boolean bGefunden = false;
                    for (int i = 0; i < arLosIId.size(); i++) {

                        if (losDto.getIId().equals(arLosIId.get(i))) {
                            bGefunden = true;
                            break;
                        }

                    }

                    if (bGefunden == false) {
                        // auslassen
                        continue;
                    }

                }

                // Bewegungsvorschaueintrag erzeugen
                BewegungsvorschauDto dto = new BewegungsvorschauDto();
                dto.setArtikelIId(item.getFlrartikel().getI_id());
                dto.setCBelegartCNr(LocaleFac.BELEGART_LOS);
                dto.setIBelegIId(losDto.getIId());
                dto.setIBelegPositionIId(item.getFlrlossollmaterial().getI_id());
                dto.setNMenge(item.getN_menge().negate());
                // Termine vor heute werden auf heute umgerechnet
                Timestamp tsTermin = new Timestamp(item.getT_liefertermin().getTime());
                if (tsTermin.before(getTimestamp())) {
                    tsTermin = Helper.cutTimestamp(getTimestamp());
                }
                dto.setTLiefertermin(tsTermin);
                dto.setCBelegnummer(item.getFlrlossollmaterial().getFlrlos().getC_nr());
                // wenn das Los auftragsbezogen ist, dann hol ich auch den
                // Kunden
                if (losDto.getAuftragpositionIId() != null) {
                    // den finde ich ueber die Auftragsposition
                    AuftragpositionDto aufposDto = getAuftragpositionFac()
                            .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                    AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(aufposDto.getBelegIId());

                    dto.setProjektIId(auftragDto.getProjektIId());

                    KundeDto kundeDto = getKundeFac()
                            .kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(), theClientDto);
                    dto.setPartnerDto(kundeDto.getPartnerDto());
                }
                bewegungsvorschau.add(dto);
            }
        }
        // ------------------------------------------------------------------
        // ----
        // noch erwartete Losablieferungen
        // ------------------------------------------------------------------
        // ----
        Criteria cAblieferung = session.createCriteria(FLRLos.class);
        // Filter nach Mandant
        cAblieferung.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
        // OHNE STORNIERTE
        cAblieferung.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
                new String[] { FertigungFac.STATUS_STORNIERT, FertigungFac.STATUS_ERLEDIGT })));
        // Filter nach Artikel
        cAblieferung.createCriteria(FertigungFac.FLR_LOS_FLRSTUECKLISTE)
                .createCriteria(StuecklisteFac.FLR_STUECKLISTE_FLRARTIKEL)
                .add(Restrictions.eq("i_id", artikelDto.getIId()));
        // Sortierung nach Liefertermin (=Produktionsende)
        cAblieferung.addOrder(Order.asc(FertigungFac.FLR_LOS_T_PRODUKTIONSENDE));
        // Query ausfuehren
        List<?> listAblieferung = cAblieferung.list();
        for (Iterator<?> iter = listAblieferung.iterator(); iter.hasNext();) {
            FLRLos los = (FLRLos) iter.next();
            BigDecimal bdOffen = los.getN_losgroesse();
            // von der Losgroesse die bisherigen Ablieferungen subtrahieren
            for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                FLRLosablieferung item2 = (FLRLosablieferung) iter2.next();
                bdOffen = bdOffen.subtract(item2.getN_menge());
            }
            if (bdOffen.compareTo(new BigDecimal(0)) > 0) {
                BewegungsvorschauDto dto = new BewegungsvorschauDto();
                dto.setArtikelIId(los.getFlrstueckliste().getFlrartikel().getI_id());
                dto.setCBelegartCNr(LocaleFac.BELEGART_LOSABLIEFERUNG);
                dto.setIBelegIId(los.getI_id());
                dto.setIBelegPositionIId(null);
                dto.setNMenge(bdOffen);
                dto.setTLiefertermin(new Timestamp(los.getT_produktionsende().getTime()));
                dto.setCBelegnummer(los.getC_nr());
                LosDto losDto = getFertigungFac().losFindByPrimaryKey(los.getI_id());
                // wenn das Los auftragsbezogen ist, dann hol ich auch den
                // Kunden
                if (losDto.getAuftragpositionIId() != null) {
                    // den finde ich ueber die Auftragsposition
                    AuftragpositionDto aufposDto = getAuftragpositionFac()
                            .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                    AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(aufposDto.getBelegIId());
                    KundeDto kundeDto = getKundeFac()
                            .kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(), theClientDto);
                    dto.setPartnerDto(kundeDto.getPartnerDto());
                }
                bewegungsvorschau.add(dto);
            }
        }
        // Interne Bestellung miteinbeziehen
        if (bInternebestellungMiteinbeziehen) {
            Criteria cIB = session.createCriteria(FLRInternebestellung.class);
            // Filter nach Mandant
            cIB.add(Restrictions.eq(FertigungFac.FLR_INTERNE_BESTELLUNG_MANDANT_C_NR,
                    theClientDto.getMandant())).
            // Filter nach Artikel
                    createCriteria(FertigungFac.FLR_INTERNE_BESTELLUNG_FLRSTUECKLISTE)
                    .createCriteria(StuecklisteFac.FLR_STUECKLISTE_FLRARTIKEL)
                    .add(Restrictions.eq("i_id", artikelDto.getIId()));
            // Sortierung nach Liefertermin (=Produktionsende)
            cIB.addOrder(Order.asc(FertigungFac.FLR_INTERNE_BESTELLUNG_T_LIEFERTERMIN));
            List<?> listIB = cIB.list();
            for (Iterator<?> iter = listIB.iterator(); iter.hasNext();) {
                FLRInternebestellung ib = (FLRInternebestellung) iter.next();
                BewegungsvorschauDto dto = new BewegungsvorschauDto();
                dto.setArtikelIId(ib.getFlrstueckliste().getFlrartikel().getI_id());
                dto.setCBelegartCNr(ib.getBelegart_c_nr());
                dto.setIBelegIId(ib.getI_belegiid());
                dto.setIBelegPositionIId(ib.getI_belegpositioniid());
                dto.setNMenge(ib.getN_menge());
                dto.setTLiefertermin(new Timestamp(ib.getT_liefertermin().getTime()));
                bewegungsvorschau.add(dto);
            }
        }
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    } finally {
        closeSession(session);
    }
    return bewegungsvorschau;
}

From source file:com.lp.server.finanz.ejbfac.FibuExportFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
private List<BuchungsjournalExportDatevBuchung> getBuchungen(Date von, Date bis, boolean mitAutoEB,
        boolean mitManEB, boolean mitAutoB, TheClientDto theClientDto) throws RemoteException, EJBExceptionLP {
    String mandant = theClientDto.getMandant();
    ParametermandantDto pMitlaufendesKonto = getParameterFac().getMandantparameter(mandant,
            ParameterFac.KATEGORIE_FINANZ, ParameterFac.PARAMETER_EXPORT_DATEV_MITLAUFENDES_KONTO);
    String durchlaufKonto = pMitlaufendesKonto.getCWert();
    ParametermandantDto pKontoklassenOhneUst = getParameterFac().getMandantparameter(mandant,
            ParameterFac.KATEGORIE_FINANZ, ParameterFac.PARAMETER_EXPORT_DATEV_KONTOKLASSEN_OHNE_BU_SCHLUESSEL);
    List<String> kontoklassenOhneUst = Arrays.asList(pKontoklassenOhneUst.getCWert().split(","));

    FinanzamtDto[] finanzaemter = getFinanzFac().finanzamtFindAll(theClientDto);
    List<Integer> mitlaufendeKonten = new ArrayList<Integer>();
    Map<Integer, Integer> mwstKonten = new HashMap<Integer, Integer>();
    for (FinanzamtDto amt : finanzaemter) {
        SteuerkategorieDto[] stkDtos = getFinanzServiceFac()
                .steuerkategorieFindByFinanzamtIId(amt.getPartnerIId(), theClientDto);
        for (SteuerkategorieDto stkat : stkDtos) {
            if (stkat.getKontoIIdForderungen() != null)
                mitlaufendeKonten.add(stkat.getKontoIIdForderungen());
            if (stkat.getKontoIIdVerbindlichkeiten() != null)
                mitlaufendeKonten.add(stkat.getKontoIIdVerbindlichkeiten());

            SteuerkategoriekontoDto[] stkks = getFinanzServiceFac().steuerkategoriekontoFindAll(stkat.getIId());
            for (SteuerkategoriekontoDto stkk : stkks) {
                if (mwstKonten.containsKey(stkk.getKontoIIdEk()))
                    mwstKonten.put(stkk.getKontoIIdEk(), null);
                else
                    mwstKonten.put(stkk.getKontoIIdEk(), stkk.getMwstsatzbezIId());

                if (mwstKonten.containsKey(stkk.getKontoIIdVk()))
                    mwstKonten.put(stkk.getKontoIIdVk(), null);
                else
                    mwstKonten.put(stkk.getKontoIIdVk(), stkk.getMwstsatzbezIId());

                if (mwstKonten.containsKey(stkk.getKontoIIdEinfuhrUst()))
                    mwstKonten.put(stkk.getKontoIIdEinfuhrUst(), null);
                else
                    mwstKonten.put(stkk.getKontoIIdEinfuhrUst(), stkk.getMwstsatzbezIId());
                //gibt es fuer ein Konto mehrere zugewiesene MwstSaetze, null in die Map schreiben
                //so weiss man, dass das Konto entweder nur einen MwstSatz haben kann oder aber
                //wenn vorhanden in der Map aber null, dann MwstSatz berechnen.
            }//from   w  ww . j a va 2s  .co m
        }
    }
    List<BuchungsjournalExportDatevBuchung> buchungen = new ArrayList<BuchungsjournalExportDatevBuchung>();
    Session session = FLRSessionFactory.getFactory().openSession();
    Criteria c = session.createCriteria(FLRFinanzBuchung.class);
    c.createAlias("flrkostenstelle", "ks");
    if (!mitAutoB)
        c.add(Restrictions.like("b_autombuchung", 0));
    if (!mitAutoEB)
        c.add(Restrictions.like("b_autombuchungeb", 0));
    if (!mitManEB)
        c.add(Restrictions.not(Restrictions.like("buchungsart_c_nr", FinanzFac.BUCHUNGSART_EROEFFNUNG)));
    c.add(Restrictions.ge("d_buchungsdatum", von)).add(Restrictions.le("d_buchungsdatum", bis))
            .add(Restrictions.like("ks.mandant_c_nr", mandant)).addOrder(Order.asc("d_buchungsdatum"))
            .addOrder(Order.asc("c_belegnummer"));
    Iterator<?> iter = c.list().iterator();
    while (iter.hasNext()) {
        FLRFinanzBuchung hvBuchung = (FLRFinanzBuchung) iter.next();
        @SuppressWarnings("unchecked")
        List<FLRFinanzBuchungDetail> haben = session.createCriteria(FLRFinanzBuchungDetail.class)
                .createAlias("flrbuchung", "b").add(Restrictions.eq("buchung_i_id", hvBuchung.getI_id()))
                .add(Restrictions.or(
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.HabenBuchung),
                                Restrictions.gt("n_betrag", BigDecimal.ZERO)),
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.SollBuchung),
                                Restrictions.lt("n_betrag", BigDecimal.ZERO))))
                .add(Restrictions.or(Restrictions.eq("b.buchungsart_c_nr", FinanzFac.BUCHUNGSART_EROEFFNUNG),
                        Restrictions.not(Restrictions.in("konto_i_id", mitlaufendeKonten))))
                .addOrder(Order.asc("i_id")).list();
        @SuppressWarnings("unchecked")
        List<FLRFinanzBuchungDetail> soll = session.createCriteria(FLRFinanzBuchungDetail.class)
                .createAlias("flrbuchung", "b").add(Restrictions.eq("buchung_i_id", hvBuchung.getI_id()))
                .add(Restrictions.or(
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.SollBuchung),
                                Restrictions.gt("n_betrag", BigDecimal.ZERO)),
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.HabenBuchung),
                                Restrictions.lt("n_betrag", BigDecimal.ZERO))))
                .add(Restrictions.or(Restrictions.eq("b.buchungsart_c_nr", FinanzFac.BUCHUNGSART_EROEFFNUNG),
                        Restrictions.not(Restrictions.in("konto_i_id", mitlaufendeKonten))))
                .addOrder(Order.asc("i_id")).list();

        String gegenkontoCNr;
        FLRFinanzKonto flrGegenkonto = null;
        List<FLRFinanzBuchungDetail> zuBuchen;
        String uid = null;
        boolean buSchluesselErlaubt = true;
        boolean buSchluesselGanzeBuchung = true;
        if (soll.size() == 1) {
            flrGegenkonto = soll.get(0).getFlrkonto();
            gegenkontoCNr = flrGegenkonto.getC_nr();
            uid = getUIDZuKonto(flrGegenkonto, theClientDto);
            zuBuchen = haben;
        } else if (haben.size() == 1) {
            gegenkontoCNr = haben.get(0).getFlrkonto().getC_nr();
            flrGegenkonto = soll.get(0).getFlrkonto();
            uid = getUIDZuKonto(flrGegenkonto, theClientDto);
            zuBuchen = soll;
        } else {
            zuBuchen = soll;
            zuBuchen.addAll(haben);
            gegenkontoCNr = durchlaufKonto;
        }
        if (flrGegenkonto != null
                && flrGegenkonto.getKontotyp_c_nr().equals(FinanzServiceFac.KONTOTYP_SACHKONTO)) {
            for (String klassen : kontoklassenOhneUst) {
                if (!klassen.isEmpty() && flrGegenkonto.getC_nr().startsWith(klassen)) {
                    buSchluesselGanzeBuchung = false;
                    break;
                }
            }
        }

        //         zuBuchen = getBuchungenKorrekteUst(zuBuchen, mwstKonten);

        for (int i = 0; i < zuBuchen.size(); i++) {
            FLRFinanzBuchungDetail b = zuBuchen.get(i);
            FLRFinanzKonto konto = b.getFlrkonto();
            buSchluesselErlaubt = true;
            if (konto.getKontotyp_c_nr().equals(FinanzServiceFac.KONTOTYP_SACHKONTO)) {
                for (String klassen : kontoklassenOhneUst) {
                    if (!klassen.isEmpty() && konto.getC_nr().startsWith(klassen)) {
                        buSchluesselErlaubt = false;
                        break;
                    }
                }
            }

            Integer fibuCode = 0;
            BigDecimal umsatz = null;
            if (mwstKonten.containsKey(b.getKonto_i_id())) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_KONTIERUNG_ZUGEORDNET,
                        "Fehler! keine Mwst-Buchung erwartet!",
                        (hvBuchung.getFlrfbbelegart() == null ? hvBuchung.getC_text()
                                : hvBuchung.getFlrfbbelegart().getC_nr()) + " " + hvBuchung.getC_belegnummer());
                //               System.out.println("Fehler! keine Mwst-Buchung erwartet! " + hvBuchung.getC_belegnummer() + ", id = " + hvBuchung.getI_id());
                //               break;
            } else {
                if (zuBuchen.size() > i + 1) {
                    FLRFinanzBuchungDetail mwstBuchung = zuBuchen.get(i + 1);
                    if (mwstKonten.containsKey(mwstBuchung.getKonto_i_id())) {
                        Integer mwstIId = mwstKonten.get(mwstBuchung.getKonto_i_id());
                        MwstsatzDto mwstDto;
                        if (mwstIId != null) {
                            mwstDto = getMandantFac().mwstsatzFindZuDatum(mwstIId,
                                    new Timestamp(hvBuchung.getD_buchungsdatum().getTime()));
                        } else {
                            mwstDto = getMandantFac().getMwstSatzVonBruttoBetragUndUst(mandant,
                                    new Timestamp(hvBuchung.getD_buchungsdatum().getTime()), b.getN_betrag(),
                                    mwstBuchung.getN_betrag());
                        }
                        fibuCode = mwstDto.getIFibumwstcode();
                        if (fibuCode == null) {
                            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FINANZ_EXPORT_KEIN_MWSTCODE, "",
                                    mwstDto.getMwstsatzbezDto().getCBezeichnung());
                        }
                        umsatz = b.getN_betrag().add(mwstBuchung.getN_betrag()).abs();
                        i++;
                    }
                }
            }
            BuchungsjournalExportDatevBuchung datevBuchung = new BuchungsjournalExportDatevBuchung();
            datevBuchung.setUmsatz(umsatz == null ? b.getN_betrag().abs() : umsatz);
            boolean negativ = b.getN_betrag().signum() < 0;
            datevBuchung.setSoll(negativ != b.getBuchungdetailart_c_nr().equals(BuchenFac.SollBuchung)); //XOR
            datevBuchung.setKonto(b.getFlrkonto().getC_nr());
            datevBuchung.setGegenkonto(gegenkontoCNr);
            if (hvBuchung.getT_storniert() != null) {
                fibuCode += 20;
            }
            if (buSchluesselErlaubt && buSchluesselGanzeBuchung)
                datevBuchung.setBuSchluessel(fibuCode == 0 ? "" : fibuCode.toString());
            datevBuchung.setBelegdatum(hvBuchung.getD_buchungsdatum());
            datevBuchung.setBeleg(hvBuchung.getC_belegnummer());
            datevBuchung.setBuchungstext(hvBuchung.getC_text());
            datevBuchung.setUid(uid == null ? getUIDZuKonto(b.getFlrkonto(), theClientDto) : uid);
            buchungen.add(datevBuchung);
        }
    }

    return buchungen;
}

From source file:com.lp.server.finanz.ejbfac.FibuExportFacBean.java

License:Open Source License

private FLRRechnung[] getVerbuchbareRechnungen(java.sql.Date dStichtag, TheClientDto theClientDto)
        throws EJBExceptionLP {
    Session session = null;//from  w  w w  .j  av a  2 s . co  m
    try {
        pruefeAufAngelegte(dStichtag, theClientDto, RechnungFac.RECHNUNGTYP_RECHNUNG);
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRRechnung.class);
        // nur Rechnungen
        c.createCriteria(RechnungFac.FLR_RECHNUNG_FLRRECHNUNGART).add(Restrictions
                .eq(RechnungFac.FLR_RECHNUNGART_RECHNUNGTYP_C_NR, RechnungFac.RECHNUNGTYP_RECHNUNG));
        // Filter nach Mandant
        c.add(Restrictions.eq(RechnungFac.FLR_RECHNUNG_MANDANT_C_NR, theClientDto.getMandant()));
        // Noch nicht verbuchte
        c.add(Restrictions.isNull(RechnungFac.FLR_RECHNUNG_T_FIBUUEBERNAHME));
        // Stichtag
        c.add(Restrictions.le(RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, dStichtag));
        // Und nach status
        Collection<String> coll = new LinkedList<String>();
        coll.add(RechnungFac.STATUS_BEZAHLT);
        coll.add(RechnungFac.STATUS_OFFEN);
        coll.add(RechnungFac.STATUS_TEILBEZAHLT);
        coll.add(RechnungFac.STATUS_VERBUCHT);
        c.add(Restrictions.in(RechnungFac.FLR_RECHNUNG_STATUS_C_NR, coll));
        c.addOrder(Property.forName("c_nr").asc());
        // zu exportierende Belege holen
        List<?> list = c.list();
        FLRRechnung[] reArray = new FLRRechnung[list.size()];
        int i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLRRechnung re = (FLRRechnung) iter.next();
            reArray[i] = re;
        }
        return reArray;
    } finally {
        if (session != null) {
            session.close();
        }
    }
}

From source file:com.lp.server.finanz.ejbfac.FibuExportFacBean.java

License:Open Source License

private void pruefeAufAngelegte(Date dStichtag, TheClientDto theClientDto, String sRechnungstyp)
        throws EJBExceptionLP {
    Session session = null;/*from   ww w  . j  a v a2  s . co m*/
    try {
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRRechnung.class);
        // nur Rechnungen
        c.createCriteria(RechnungFac.FLR_RECHNUNG_FLRRECHNUNGART)
                .add(Restrictions.eq(RechnungFac.FLR_RECHNUNGART_RECHNUNGTYP_C_NR, sRechnungstyp));
        // Filter nach Mandant
        c.add(Restrictions.eq(RechnungFac.FLR_RECHNUNG_MANDANT_C_NR, theClientDto.getMandant()));
        // Noch nicht verbuchte
        c.add(Restrictions.isNull(RechnungFac.FLR_RECHNUNG_T_FIBUUEBERNAHME));
        // Stichtag
        c.add(Restrictions.le(RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, dStichtag));
        // Und nach status
        Collection<String> coll = new LinkedList<String>();
        // Zuerst schauen, ob es noch angelegte gibt, in diesem fall muss
        // der export abgebrochen werden
        coll.add(RechnungFac.STATUS_ANGELEGT);
        c.add(Restrictions.in(RechnungFac.FLR_RECHNUNG_STATUS_C_NR, coll));
        List<?> listAngelegte = c.list();
        if (!listAngelegte.isEmpty()) {
            StringBuffer sb = new StringBuffer();
            for (Iterator<?> iter = listAngelegte.iterator(); iter.hasNext();) {
                FLRRechnung re = (FLRRechnung) iter.next();
                sb.append(re.getC_nr());
                sb.append(" an ").append(re.getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1());
                sb.append("\n");
            }
            EJBExceptionLP ex = new EJBExceptionLP(
                    EJBExceptionLP.FEHLER_FINANZ_EXPORT_BELEG_IST_NOCH_NICHT_AKTIVIERT,
                    new Exception("noch nicht aktivierte Belege"));
            // Kunden holen
            ArrayList<Object> a = new ArrayList<Object>();
            a.add(sb.toString());
            ex.setAlInfoForTheClient(a);
            throw ex;
        }
    } finally {
        if (session != null) {
            session.close();
        }
    }
}

From source file:com.lp.server.finanz.ejbfac.FibuExportFacBean.java

License:Open Source License

private FLRRechnung[] getVerbuchbareGutschriften(java.sql.Date dStichtag, TheClientDto theClientDto)
        throws EJBExceptionLP {
    Session session = null;//from  w  w  w . j  a v a  2s  . c  om
    try {
        pruefeAufAngelegte(dStichtag, theClientDto, RechnungFac.RECHNUNGTYP_GUTSCHRIFT);
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRRechnung.class);
        // nur Rechnungen
        c.createCriteria(RechnungFac.FLR_RECHNUNG_FLRRECHNUNGART).add(Restrictions
                .eq(RechnungFac.FLR_RECHNUNGART_RECHNUNGTYP_C_NR, RechnungFac.RECHNUNGTYP_GUTSCHRIFT));
        // Filter nach Mandant
        c.add(Restrictions.eq(RechnungFac.FLR_RECHNUNG_MANDANT_C_NR, theClientDto.getMandant()));
        // Noch nicht verbuchte
        c.add(Restrictions.isNull(RechnungFac.FLR_RECHNUNG_T_FIBUUEBERNAHME));
        // Stichtag
        c.add(Restrictions.le(RechnungFac.FLR_RECHNUNG_D_BELEGDATUM, dStichtag));
        // Und nach status
        Collection<String> coll = new LinkedList<String>();
        coll.add(RechnungFac.STATUS_BEZAHLT);
        coll.add(RechnungFac.STATUS_OFFEN);
        coll.add(RechnungFac.STATUS_TEILBEZAHLT);
        coll.add(RechnungFac.STATUS_VERBUCHT);
        c.add(Restrictions.in(RechnungFac.FLR_RECHNUNG_STATUS_C_NR, coll));
        // zu exportierende Belege holen
        List<?> list = c.list();
        FLRRechnung[] reArray = new FLRRechnung[list.size()];
        int i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLRRechnung re = (FLRRechnung) iter.next();
            reArray[i] = re;
        }
        return reArray;
    } finally {
        if (session != null) {
            session.close();
        }
    }
}