Example usage for org.hibernate.criterion Restrictions isNull

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

Introduction

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

Prototype

public static Criterion isNull(String propertyName) 

Source Link

Document

Apply an "is null" constraint to the named property

Usage

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

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public KapazitaetsvorschauDto getKapazitaetsvorschau(TheClientDto theClientDto) throws EJBExceptionLP {
    KapazitaetsvorschauDto kapDto = null;
    Session session = null;/*  w  ww.  ja  v  a  2 s  .  co  m*/
    try {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printAlle(ReportJournalKriterienDto krit, boolean bNurAngelegte,
        Integer fertigungsgruppeIId, TheClientDto theClientDto) throws EJBExceptionLP {
    Session session = null;//from   ww  w  . j a v a  2s  .  co m
    try {
        this.useCase = UC_ALLE;
        this.index = -1;
        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        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()));
        if (krit.kostenstelleIId != null) {
            c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_KOSTENSTELLE_I_ID, krit.kostenstelleIId));
        }
        if (bNurAngelegte) {
            c.add(Restrictions.eq(FertigungFac.FLR_LOS_STATUS_C_NR, LocaleFac.STATUS_ANGELEGT));
        }
        if (fertigungsgruppeIId != null) {
            c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_FERTIGUNGSGRUPPE_I_ID, fertigungsgruppeIId));

            FertigungsgruppeDto fertigungsgruppeDto = getStuecklisteFac()
                    .fertigungsgruppeFindByPrimaryKey(fertigungsgruppeIId);
            mapParameter.put("P_FERTIGUNGSGRUPPE", fertigungsgruppeDto.getCBez());
        }

        String sVon = null;
        String sBis = null;
        if (krit.dVon != null) {
            c.add(Restrictions.ge(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, krit.dVon));
            sVon = Helper.formatDatum(krit.dVon, theClientDto.getLocUi());
        }
        if (krit.dBis != null) {
            c.add(Restrictions.le(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, krit.dBis));
            sBis = Helper.formatDatum(krit.dBis, theClientDto.getLocUi());
        }
        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 (krit.sBelegnummerVon != null) {
            sVon = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                    krit.sBelegnummerVon);
            c.add(Restrictions.ge(FertigungFac.FLR_LOS_C_NR, sVon));
        }
        if (krit.sBelegnummerBis != null) {
            sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                    krit.sBelegnummerBis);
            c.add(Restrictions.le(FertigungFac.FLR_LOS_C_NR, sBis));
        }
        if (krit.bSortiereNachKostenstelle) {
            c.createCriteria(FertigungFac.FLR_LOSREPORT_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
        }
        // if (krit.iSortierung ==
        // ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
        // c.createCriteria(FertigungFac.FLR_ER_FLRLIEFERANT).createCriteria(
        // LieferantFac.
        // FLR_PARTNER).addOrder(Order.asc(PartnerFac.
        // FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1));
        // }
        if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
            c.createCriteria(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG)
                    .createCriteria(AuftragFac.FLR_AUFTRAG_FLRKUNDE).createCriteria(KundeFac.FLR_PARTNER)
                    .addOrder(Order.asc(PartnerFac.FLR_PARTNER_C_NAME1NACHNAMEFIRMAZEILE1));
        }
        if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_BELEGNUMMER) {
            c.addOrder(Order.asc(FertigungFac.FLR_LOS_C_NR));
        }
        List<Object> list = c.list();
        if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
            Criteria c2 = session.createCriteria(FLRLosReport.class);
            c2.add(Restrictions.isNull(FertigungFac.FLR_LOSREPORT_FLRAUFTRAG));
            c2.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
            if (krit.kostenstelleIId != null) {
                c2.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_KOSTENSTELLE_I_ID, krit.kostenstelleIId));
            }
            if (bNurAngelegte) {
                c2.add(Restrictions.eq(FertigungFac.FLR_LOS_STATUS_C_NR, LocaleFac.STATUS_ANGELEGT));
            }
            if (fertigungsgruppeIId != null) {
                c2.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_FERTIGUNGSGRUPPE_I_ID, fertigungsgruppeIId));
            }
            if (krit.dVon != null) {
                c2.add(Restrictions.ge(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, krit.dVon));
            }
            if (krit.dBis != null) {
                c2.add(Restrictions.le(FertigungFac.FLR_LOS_T_PRODUKTIONSBEGINN, krit.dBis));
            }
            List<?> list2 = c2.list();
            Iterator<?> iter2 = list2.iterator();
            while (iter2.hasNext()) {
                list.add(iter2.next());
            }
        }

        data = new Object[list.size()][ALLE_FELDANZAHL];
        int i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLRLosReport los = (FLRLosReport) iter.next();
            LossollarbeitsplanDto[] sollaz = getFertigungFac().lossollarbeitsplanFindByLosIId(los.getI_id());
            BigDecimal bdArbeitszeitIstmenge = new BigDecimal(0);
            BigDecimal bdArbeitszeitSollmenge = new BigDecimal(0);
            BigDecimal bdArbeitszeitIstpreis = new BigDecimal(0);
            BigDecimal bdArbeitszeitSollpreis = new BigDecimal(0);
            for (int j = 0; j < sollaz.length; j++) {
                bdArbeitszeitSollmenge = bdArbeitszeitSollmenge.add(sollaz[j].getNGesamtzeit());
                ArtikellieferantDto artikellieferantDto = getArtikelFac().getArtikelEinkaufspreis(
                        sollaz[j].getArtikelIIdTaetigkeit(), new BigDecimal(1),
                        theClientDto.getSMandantenwaehrung(), theClientDto);
                BigDecimal bdEinzelpreis;
                if (artikellieferantDto != null) {
                    bdEinzelpreis = artikellieferantDto.getNEinzelpreis();
                } else {
                    bdEinzelpreis = new BigDecimal(0);
                }
                bdArbeitszeitSollpreis = bdArbeitszeitSollpreis
                        .add(sollaz[j].getNGesamtzeit().multiply(bdEinzelpreis));
            }
            AuftragzeitenDto[] zeiten = getZeiterfassungFac().getAllZeitenEinesBeleges(LocaleFac.BELEGART_LOS,
                    los.getI_id(), null, null, null, null, false, false, theClientDto);
            for (int j = 0; j < zeiten.length; j++) {
                bdArbeitszeitIstmenge = bdArbeitszeitIstmenge
                        .add(new BigDecimal(zeiten[j].getDdDauer().doubleValue()));
                bdArbeitszeitIstpreis = bdArbeitszeitIstpreis.add(zeiten[j].getBdKosten());
            }
            data[i][ALLE_ARBEITSZEITISTMENGE] = bdArbeitszeitIstmenge;
            data[i][ALLE_ARBEITSZEITISTPREIS] = bdArbeitszeitIstpreis;
            data[i][ALLE_ARBEITSZEITSOLLMENGE] = bdArbeitszeitSollmenge;
            data[i][ALLE_ARBEITSZEITSOLLPREIS] = bdArbeitszeitSollpreis;
            if (los.getFlrstueckliste() != null) {
                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                        los.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                data[i][ALLE_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                if (artikelDto.getArtikelsprDto().getCZbez() != null) {
                    data[i][ALLE_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
                } else {
                    data[i][ALLE_ZUSATZBEZEICHNUNG] = "";
                }
                data[i][ALLE_IDENT] = los.getFlrstueckliste().getFlrartikel().getC_nr();
                data[i][ALLE_OFFENERAHMENRESERVIERUNGEN] = getReservierungFac()
                        .getAnzahlRahmenreservierungen(artikelDto.getIId(), theClientDto);
            } else {
                data[i][ALLE_BEZEICHNUNG] = los.getC_projekt();
                data[i][ALLE_BEZEICHNUNG] = null;
                data[i][ALLE_IDENT] = getTextRespectUISpr("fert.materialliste", theClientDto.getMandant(),
                        theClientDto.getLocUi());
                data[i][ALLE_OFFENERAHMENRESERVIERUNGEN] = new BigDecimal(0);
            }
            data[i][ALLE_LOSNUMMER] = los.getC_nr();
            LossollmaterialDto[] sollmat = getFertigungFac().lossollmaterialFindByLosIId(los.getI_id());
            BigDecimal bdMaterialIstmenge = new BigDecimal(0);
            BigDecimal bdMaterialSollmenge = new BigDecimal(0);
            BigDecimal bdMaterialIstpreis = new BigDecimal(0);
            BigDecimal bdMaterialSollpreis = new BigDecimal(0);
            for (int j = 0; j < sollmat.length; j++) {
                BigDecimal bdAusgegebeneMenge = getFertigungFac().getAusgegebeneMenge(sollmat[j].getIId(), null,
                        theClientDto);
                bdMaterialIstmenge = bdMaterialIstmenge.add(bdAusgegebeneMenge);
                bdMaterialSollmenge = bdMaterialSollmenge.add(sollmat[j].getNMenge());
                bdMaterialIstpreis = bdMaterialIstpreis.add(bdAusgegebeneMenge.multiply(
                        getFertigungFac().getAusgegebeneMengePreis(sollmat[j].getIId(), null, theClientDto)));
                bdMaterialSollpreis = bdMaterialSollpreis
                        .add(sollmat[j].getNMenge().multiply(sollmat[j].getNSollpreis()));
            }
            data[i][ALLE_MATERIALISTMENGE] = bdMaterialIstmenge;
            data[i][ALLE_MATERIALISTPREIS] = bdMaterialIstpreis;
            data[i][ALLE_MATERIALSOLLMENGE] = bdMaterialSollmenge;
            data[i][ALLE_MATERIALSOLLPREIS] = bdMaterialSollpreis;
            data[i][ALLE_BEGINNTERMIN] = los.getT_produktionsbeginn();
            data[i][ALLE_LOSGROESSE] = los.getN_losgroesse();
            if (los.getFlrauftrag() != null) {
                data[i][ALLE_AUFTRAGLIEFERTERMIN] = los.getFlrauftrag().getT_liefertermin();
                data[i][ALLE_AUFTRAGSNUMMER] = los.getFlrauftrag().getC_nr();
                if (los.getFlrauftrag().getFlrkunde() != null) {
                    if (los.getFlrauftrag().getFlrkunde().getFlrpartner() != null) {
                        data[i][ALLE_KUNDE] = los.getFlrauftrag().getFlrkunde().getFlrpartner()
                                .getC_name1nachnamefirmazeile1();
                    } else {
                        data[i][ALLE_KUNDE] = "";
                    }
                } else {
                    data[i][ALLE_KUNDE] = "";
                }
            } else {
                data[i][ALLE_AUFTRAGSNUMMER] = "";
                data[i][ALLE_AUFTRAGLIEFERTERMIN] = null;
            }
            if (los.getFlrfertigungsgruppe() != null) {
                data[i][ALLE_FERTIGUNGSGRUPPE] = los.getFlrfertigungsgruppe().getC_bez();
            } else {
                data[i][ALLE_FERTIGUNGSGRUPPE] = "";
            }
        }

        StringBuffer sSortierung = new StringBuffer();
        // Sortierung nach Kostenstelle
        sSortierung.append(
                getTextRespectUISpr("lp.sortierungnach", theClientDto.getMandant(), theClientDto.getLocUi())
                        + ": ");
        mapParameter.put(LPReport.P_SORTIERENACHKOSTENSTELLE, new Boolean(krit.bSortiereNachKostenstelle));
        if (krit.bSortiereNachKostenstelle) {
            sSortierung.append(
                    getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()));
            sSortierung.append(", ");
        }
        // Sortieung nach Kunde
        mapParameter.put(LPReport.P_SORTIERENACHKUNDE,
                new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER));
        if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
            sSortierung.append(
                    getTextRespectUISpr("lp.kunde", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_BELEGNUMMER) {
            sSortierung.append(
                    getTextRespectUISpr("lp.losnr", theClientDto.getMandant(), theClientDto.getLocUi()));
        }
        StringBuffer sFilter = new StringBuffer();
        sFilter.append(
                getTextRespectUISpr("lp.filter", theClientDto.getMandant(), theClientDto.getLocUi()) + ": ");
        if (bNurAngelegte) {
            sFilter.append(getTextRespectUISpr("lp.nichtausgegebene", theClientDto.getMandant(),
                    theClientDto.getLocUi()) + ", ");
        }
        if (sVon != null) {
            sFilter.append(getTextRespectUISpr("lp.von", theClientDto.getMandant(), theClientDto.getLocUi()));
            sFilter.append(" " + sVon + " ");
        }
        if (sBis != null) {
            sFilter.append(getTextRespectUISpr("lp.bis", theClientDto.getMandant(), theClientDto.getLocUi()));
            sFilter.append(" " + sBis + " ");
        }
        if (krit.kostenstelleIId != null) {
            if (sFilter.length() > 0) {
                sFilter.append(", ");
            }
            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(krit.kostenstelleIId);
            sFilter.append(
                    getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()));
            sFilter.append(" ");
            sFilter.append(kstDto.getCNr());
        }
        mapParameter.put(LPReport.P_SORTIERUNG, sSortierung.toString());
        mapParameter.put("P_VON", krit.dVon);
        mapParameter.put("P_BIS", krit.dBis);
        mapParameter.put(LPReport.P_FILTER, sFilter.toString());
        initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_ALLE,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    } catch (RemoteException t) {
        throwEJBExceptionLPRespectOld(t);
        return null;
    } 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;/*ww w  .jav  a2  s .  c om*/
    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.finanz.ejbfac.BuchenFacBean.java

License:Open Source License

/**
 * Ermittelt die BuchungDetail-Ids jener BuchungDetail die als offene Posten
 * betrachtet werden//  w  w  w.  ja  va2s  .c om
 * 
 * @param kontoIId
 *            die optional gesetzte (sonst null) KontoIId
 * @param kontotypCNr
 *            der betreffende Kontotyp (Debitor, Kreditor oder auch
 *            Sachkonten (&auml;hm))
 * @param geschaeftsjahr
 * @param theClientDto
 * @return eine (leere) Liste der noch offenen BuchungsDetails-IIds
 */
public List<Integer> getOffenePosten(Integer kontoIId, String kontotypCNr, int geschaeftsjahr,
        TheClientDto theClientDto) {
    Timestamp[] tVonbis = getDatumbereichPeriodeGJ(geschaeftsjahr, -1, theClientDto);

    List<Integer> opDetails = new ArrayList<Integer>();
    Session session = null;
    try {
        session = FLRSessionFactory.getFactory().openSession();
        org.hibernate.Criteria crit = session.createCriteria(FLRFinanzBuchungDetail.class);
        crit.createAlias("flrkonto", "k");
        crit.createAlias("flrbuchung", "b");
        crit.add(Restrictions.isNull("b.t_storniert"));
        crit.add(Restrictions.lt("b.d_buchungsdatum", tVonbis[1]));
        crit.add(Restrictions.eq("b.geschaeftsjahr_i_geschaeftsjahr", geschaeftsjahr));
        if (kontoIId != null)
            crit.add(Restrictions.eq("k.i_id", kontoIId));
        else
            crit.add(Restrictions.eq("k.kontotyp_c_nr", kontotypCNr));
        crit.addOrder(Order.asc("k.c_nr"));
        crit.addOrder(Order.asc("i_ausziffern"));
        crit.addOrder(Order.asc("b.c_belegnummer"));

        List<FLRFinanzBuchungDetail> results = crit.list();

        String belegnummer = "";
        String azk = "";

        List<Integer> groupedOpDetails = new ArrayList<Integer>();

        BigDecimal saldo = BigDecimal.ZERO;
        for (FLRFinanzBuchungDetail buchungDetail : results) {
            String t = "";
            if (buchungDetail.getI_ausziffern() != null) {
                // ausziffern hat Vorrang vor Belegnummer
                t = buchungDetail.getI_ausziffern().toString();
            } else {
                if (buchungDetail.getFlrbuchung().getFlrfbbelegart() != null)
                    t += buchungDetail.getFlrbuchung().getFlrfbbelegart().getC_kbez();
                t += buchungDetail.getFlrbuchung().getC_belegnummer();
            }

            if (buchungDetail.getI_ausziffern() == null ? !belegnummer.equals(t) : !azk.equals(t)) {
                if (groupedOpDetails.size() > 0 && saldo.signum() != 0) {
                    opDetails.addAll(groupedOpDetails);
                }
                groupedOpDetails = new ArrayList<Integer>();
                saldo = BigDecimal.ZERO;
                if (buchungDetail.getI_ausziffern() == null)
                    belegnummer = t;
                else
                    azk = t;
            }

            if (BuchenFac.HabenBuchung.equals(buchungDetail.getBuchungdetailart_c_nr())) {
                saldo = saldo.add(buchungDetail.getN_betrag());
            } else {
                saldo = saldo.subtract(buchungDetail.getN_betrag());
            }

            groupedOpDetails.add(buchungDetail.getI_id());
        }

        if (groupedOpDetails.size() > 0 && saldo.signum() != 0) {
            opDetails.addAll(groupedOpDetails);
        }
    } finally {
        if (session != null)
            session.close();
    }

    return opDetails;
}

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

License:Open Source License

private FLREingangsrechnung[] getVerbuchbareEingangsrechnungen(java.sql.Date dStichtag,
        TheClientDto theClientDto) throws EJBExceptionLP {
    Session session = null;/*from w  w  w .  ja  v a 2s .com*/
    try {
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLREingangsrechnung.class);
        // Filter nach Mandant
        c.add(Restrictions.eq(EingangsrechnungFac.FLR_ER_MANDANT_C_NR, theClientDto.getMandant()));
        // Noch nicht verbuchte
        c.add(Restrictions.isNull(EingangsrechnungFac.FLR_ER_T_FIBUUEBERNAHME));
        // Keine stornierten
        c.add(Restrictions.not(
                Restrictions.eq(EingangsrechnungFac.FLR_ER_STATUS_C_NR, EingangsrechnungFac.STATUS_STORNIERT)));
        // PJ 15286 Ohne Eingangsrechnungen mit Betrag = 0
        c.add(Restrictions.not(Restrictions.eq(EingangsrechnungFac.FLR_ER_N_BETRAG, new BigDecimal(0))));
        // Stichtag
        c.add(Restrictions.le(EingangsrechnungFac.FLR_ER_D_BELEGDATUM, dStichtag));
        c.addOrder(Order.asc(EingangsrechnungFac.FLR_ER_C_NR));
        List<?> list = c.list();
        FLREingangsrechnung[] erArray = new FLREingangsrechnung[list.size()];
        int i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLREingangsrechnung er = (FLREingangsrechnung) iter.next();
            erArray[i] = er;
        }
        return erArray;
    } finally {
        if (session != null) {
            session.close();
        }
    }
}

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;//w  ww .ja  v  a2s .  c  om
    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;/* ww  w  .  j  a  va  2s .c o  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  ww  . j  a  v  a  2 s . co m
    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();
        }
    }
}

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

License:Open Source License

/**
 * Buchungsjournal drucken.// w  ww .j  av  a 2  s. com
 * 
 * @param theClientDto
 *            String
 * @param buchungsjournalIId
 *            Integer
 * @return JasperPrint
 * @throws EJBExceptionLP
 */
public JasperPrintLP printBuchungsjournal(TheClientDto theClientDto, Integer buchungsjournalIId, Date dVon,
        Date dBis, boolean storniert, boolean bDatumsfilterIstBuchungsdatum, String text, String belegnummer,
        BigDecimal betrag) throws EJBExceptionLP {
    Session session = null;
    try {
        this.useCase = UC_BUCHUNGSJOURNAL;
        this.index = -1;

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

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

        Timestamp help = new Timestamp(dVon.getTime());

        c.createAlias("flrbuchung", "s");

        String datumsfilter = "s.d_buchungsdatum";
        if (!bDatumsfilterIstBuchungsdatum) {
            datumsfilter = "t_anlegen";
        }
        c.add(Restrictions.ge(datumsfilter, Helper.cutTimestamp(help)));

        if (text != null) {
            c.add(Restrictions.ilike("s." + FinanzFac.FLR_BUCHUNG_C_TEXT, "%" + text + "%"));
            mapParameter.put("P_TEXT", text);

        }

        if (belegnummer != null) {

            String trennzeichen = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_ALLGEMEIN, ParameterFac.PARAMETER_BELEGNUMMERNFORMAT_TRENNZEICHEN)
                    .getCWert();
            Integer stellenBelegnummer = new Integer(getParameterFac()
                    .getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_ALLGEMEIN,
                            ParameterFac.PARAMETER_BELEGNUMMERNFORMAT_STELLEN_BELEGNUMMER)
                    .getCWert());

            String sValue = belegnummer;
            sValue = sValue.replaceAll("%", "");

            sValue = Helper.fitString2LengthAlignRight(sValue, stellenBelegnummer, '0');

            sValue = "%" + trennzeichen + sValue;

            c.add(Restrictions.like("s." + FinanzFac.FLR_BUCHUNG_C_BELEGNUMMER, sValue));
        }

        if (betrag != null) {

            Integer toleranzBetragsuche = new Integer(getParameterFac()
                    .getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_FINANZ,
                            ParameterFac.PARAMETER_TOLERANZ_BETRAGSUCHE)
                    .getCWert());

            BigDecimal value1 = betrag.subtract(
                    new BigDecimal(betrag.doubleValue() * ((double) toleranzBetragsuche / (double) 100))).abs();
            BigDecimal value2 = betrag
                    .add(new BigDecimal(betrag.doubleValue() * ((double) toleranzBetragsuche / (double) 100)))
                    .abs();

            c.add(Restrictions.or(Restrictions.between(FinanzFac.FLR_BUCHUNGDETAIL_N_BETRAG, value1, value2),
                    Restrictions.between(FinanzFac.FLR_BUCHUNGDETAIL_N_BETRAG, value2.negate(),
                            value1.negate())));

            mapParameter.put("P_TOLERANZ_BETRAGSSUCHE", toleranzBetragsuche);
            mapParameter.put("P_BETRAG", betrag);

        }

        help = new Timestamp(dBis.getTime() + 24 * 3600000);

        c.add(Restrictions.lt(datumsfilter, Helper.cutTimestamp(help)));

        if (storniert != true) {
            c.add(Restrictions.isNull("s.t_storniert"));
        } else {
            // Skip
        }

        c.createAlias("s.flrkostenstelle", "k");
        c.add(Restrictions.eq("k.mandant_c_nr", theClientDto.getMandant()));

        List<?> list = c.list();
        data = new Object[list.size()][REPORT_BUCHUNGSJOURNAL_ANZAHL_SPALTEN];
        int i = 0;

        for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
            FLRFinanzBuchungDetail b = (FLRFinanzBuchungDetail) iter.next();
            data[i][REPORT_BUCHUNGSJOURNAL_AUSZUG] = b.getI_auszug();
            data[i][REPORT_BUCHUNGSJOURNAL_BELEGNUMMER] = b.getFlrbuchung().getC_belegnummer();
            data[i][REPORT_BUCHUNGSJOURNAL_BUCHUNGSART] = b.getFlrbuchung().getBuchungsart_c_nr();
            data[i][REPORT_BUCHUNGSJOURNAL_BUCHUNGSDATUM] = b.getFlrbuchung().getD_buchungsdatum();
            if (b.getFlrgegenkonto() != null) {
                data[i][REPORT_BUCHUNGSJOURNAL_GEGENKONTONUMMER] = b.getFlrgegenkonto().getC_nr();
            }
            data[i][REPORT_BUCHUNGSJOURNAL_BETRAG] = b.getN_betrag();
            data[i][REPORT_BUCHUNGSJOURNAL_KONTONUMMER] = b.getFlrkonto().getC_nr();
            data[i][REPORT_BUCHUNGSJOURNAL_KOSTENSTELLENUMMER] = b.getFlrbuchung().getFlrkostenstelle()
                    .getC_nr();
            data[i][REPORT_BUCHUNGSJOURNAL_TEXT] = b.getFlrbuchung().getC_text();
            data[i][REPORT_BUCHUNGSJOURNAL_UST] = b.getN_ust();

            if (b.getFlrbuchung().getT_storniert() == null) {
                data[i][REPORT_BUCHUNGSJOURNAL_STORNIERT] = new Boolean(false);
            } else {
                data[i][REPORT_BUCHUNGSJOURNAL_STORNIERT] = new Boolean(true);
            }

            if (b.getBuchungdetailart_c_nr().equals("SOLL           ")) {
                data[i][REPORT_BUCHUNGSJOURNAL_SOLL] = b.getN_betrag();
                data[i][REPORT_BUCHUNGSJOURNAL_HABEN] = null;
            } else if (b.getBuchungdetailart_c_nr().equals("HABEN          ")) {
                data[i][REPORT_BUCHUNGSJOURNAL_HABEN] = b.getN_betrag();
                data[i][REPORT_BUCHUNGSJOURNAL_SOLL] = null;
            } else {
                data[i][REPORT_BUCHUNGSJOURNAL_SOLL] = null;
                data[i][REPORT_BUCHUNGSJOURNAL_HABEN] = null;
            }

            data[i][REPORT_BUCHUNGSJOURNAL_BUCHUNGSJOURNALDATUM] = b.getT_anlegen();

            data[i][REPORT_BUCHUNGSJOURNAL_WER] = getPersonalFac()
                    .personalFindByPrimaryKeySmall(b.getFlrbuchung().getPersonal_i_id_anlegen())
                    .getCKurzzeichen();

            i++;
        }
        MandantDto mandantDto = getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(),
                theClientDto);

        mapParameter.put(LPReport.P_WAEHRUNG, mandantDto.getWaehrungCNr());
        mapParameter.put("P_VON", dVon);
        mapParameter.put("P_MITSTORNIERTEN", new Boolean(storniert));
        mapParameter.put("P_DATUMSFILTER_IST_BUCHUNGSDATUM", new Boolean(bDatumsfilterIstBuchungsdatum));
        mapParameter.put("P_BIS", dBis);
        initJRDS(mapParameter, FinanzReportFac.REPORT_MODUL, FinanzReportFac.REPORT_BUCHUNGSJOURNAL,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
        return null;
    } finally {
        closeSession(session);
    }
}

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

License:Open Source License

public JasperPrintLP[] printSammelmahnung(Integer mahnlaufIId, Boolean bMitLogo, TheClientDto theClientDto)
        throws EJBExceptionLP {
    Session session = null;//from w w  w. ja  va2s.  com
    try {
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria crit = session.createCriteria(FLRFinanzMahnung.class);
        crit.add(Restrictions.eq(FinanzFac.FLR_MAHNUNG_MAHNLAUF_I_ID, mahnlaufIId));
        crit.add(Restrictions.isNull(FinanzFac.FLR_MAHNUNG_T_GEDRUCKT));
        List<?> list = crit.list();
        HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
        // alle kundenId's in eine hashmap -> quasi distinct
        for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
            FLRFinanzMahnung item = (FLRFinanzMahnung) iter.next();
            if (!item.getFlrrechnungreport().getStatus_c_nr().equals(RechnungFac.STATUS_STORNIERT)) {
                hm.put(item.getFlrrechnungreport().getFlrkunde().getI_id(),
                        item.getFlrrechnungreport().getFlrkunde().getI_id());
            }
        }
        // Reports generieren
        Collection<JasperPrintLP> c = new LinkedList<JasperPrintLP>();
        for (Iterator<Integer> iter = hm.keySet().iterator(); iter.hasNext();) {
            Integer kundeIId = (Integer) iter.next();
            JasperPrintLP print = printSammelmahnung(mahnlaufIId, kundeIId, bMitLogo, theClientDto);
            // Kunden-ID fuer den Client setzen.
            print.putAdditionalInformation(JasperPrintLP.KEY_KUNDE_I_ID, kundeIId);
            c.add(print);
        }
        JasperPrintLP[] prints = new JasperPrintLP[c.size()];
        int i = 0;
        for (Iterator<JasperPrintLP> iter = c.iterator(); iter.hasNext(); i++) {
            JasperPrintLP item = iter.next();
            prints[i] = item;
        }
        return prints;
    } finally {
        closeSession(session);
    }
}