Example usage for java.math BigDecimal doubleValue

List of usage examples for java.math BigDecimal doubleValue

Introduction

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

Prototype

@Override
public double doubleValue() 

Source Link

Document

Converts this BigDecimal to a double .

Usage

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private TreeMap<String, Object[]> add2TreeMap(TreeMap<String, Object[]> tm, String key, Object[] zeile) {

    if (tm.containsKey(key)) {
        Object[] zeileVorhanden = tm.get(key);
        BigDecimal bdMenge = (BigDecimal) zeileVorhanden[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE];
        bdMenge = bdMenge.add(/*  w  ww.  ja  v a  2s.c om*/
                (BigDecimal) zeile[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE]);
        zeileVorhanden[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdMenge;

        BigDecimal bdSollMenge = (BigDecimal) zeileVorhanden[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE];
        bdSollMenge = bdSollMenge.add(
                (BigDecimal) zeile[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE]);
        zeileVorhanden[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = bdSollMenge;
        if (bdMenge.doubleValue() == 0 && bdSollMenge.doubleValue() == 0) {
            tm.remove(key);
        } else {
            tm.put(key, zeileVorhanden);
        }

    } else {
        tm.put(key, zeile);
    }

    return tm;
}

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

public LosablieferungDto updateLosablieferung(LosablieferungDto losablieferungDto,
        boolean bMaterialZurueckbuchen, TheClientDto theClientDto) throws EJBExceptionLP {

    // losstatus pruefen

    LosDto losDto = losFindByPrimaryKey(losablieferungDto.getLosIId());
    if (losDto.getStatusCNr().equals(FertigungFac.STATUS_STORNIERT)) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_STORNIERT, "");
    } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT)) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_BEREITS_ERLEDIGT, "");
    } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ANGELEGT)) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_NOCH_NICHT_AUSGEGEBEN, "");
    } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_GESTOPPT)) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_GESTOPPT, "");
    }/*from  ww w . ja  va2  s .c  om*/

    Losablieferung laVorher = em.find(Losablieferung.class, losablieferungDto.getIId());

    // Los updaten, wenn Mengenreduktion
    if (losablieferungDto.getNMenge().doubleValue() > 0
            && losablieferungDto.getNMenge().doubleValue() < laVorher.getNMenge().doubleValue()) {

        Losablieferung losablieferung = em.find(Losablieferung.class, losablieferungDto.getIId());
        setLosablieferungFromLosablieferungDto(losablieferung, losablieferungDto);

        try {
            bucheLosAblieferungAufLager(losablieferungDto, losDto, theClientDto);
        } catch (RemoteException e) {
            throwEJBExceptionLPRespectOld(e);
        }

        // Material zurueckbuchen
        if (bMaterialZurueckbuchen) {
            LosablieferungDto[] dtos = losablieferungFindByLosIId(losDto.getIId(), false, theClientDto);
            BigDecimal bdGesamtAbgeliefert = new BigDecimal(0.00);
            for (int i = 0; i < dtos.length; i++) {
                LosablieferungDto losablieferungenDto = dtos[i];
                bdGesamtAbgeliefert = bdGesamtAbgeliefert.add(losablieferungenDto.getNMenge());
            }

            LossollmaterialDto[] sollmatDtos = lossollmaterialFindByLosIId(losDto.getIId());
            for (int i = 0; i < sollmatDtos.length; i++) {
                LossollmaterialDto sollmatDto = sollmatDtos[i];

                if (sollmatDto.getNMenge().doubleValue() != 0) {
                    BigDecimal sollsatzgroesse = sollmatDto.getNMenge()
                            .divide(sollmatDto.getNMenge(), 6, BigDecimal.ROUND_HALF_EVEN)
                            .multiply(bdGesamtAbgeliefert);

                    // Wenn nachtraegliche position, dann auslassen
                    if (Helper.short2boolean(sollmatDto.getBNachtraeglich()) == false) {
                        LosistmaterialDto[] losistmaterialDtos = losistmaterialFindByLossollmaterialIId(
                                sollmatDto.getIId());

                        BigDecimal istMaterialPlusNachtraeglich = new BigDecimal(0);

                        for (int j = 0; j < losistmaterialDtos.length; j++) {
                            LosistmaterialDto istmaterialDto = losistmaterialDtos[j];
                            // wenn Lagerzugang, der wird ausgelassen
                            if (Helper.short2boolean(istmaterialDto.getBAbgang())) {
                                istMaterialPlusNachtraeglich = istMaterialPlusNachtraeglich
                                        .add(istmaterialDto.getNMenge());
                            }

                        }

                        // Wenn ausgegebenes Material grosser als
                        // Sollsatzgroesse
                        if (istMaterialPlusNachtraeglich.doubleValue() > sollsatzgroesse.doubleValue()) {
                            BigDecimal zuReduzieren = Helper.rundeKaufmaennisch(
                                    istMaterialPlusNachtraeglich.subtract(sollsatzgroesse), 4);

                            for (int j = losistmaterialDtos.length; j > 0; j--) {
                                if (zuReduzieren.doubleValue() > 0) {
                                    LosistmaterialDto istmaterialDto = losistmaterialDtos[j - 1];

                                    // wenn Lagerzugang, der wird
                                    // ausgelassen
                                    if (Helper.short2boolean(istmaterialDto.getBAbgang())) {

                                        LagerbewegungDto lagerbewegungDto = getLagerFac().getLetzteintrag(
                                                LocaleFac.BELEGART_LOS, istmaterialDto.getIId(), null);

                                        BigDecimal nMengeAbsolut = new BigDecimal(0);

                                        if (zuReduzieren.doubleValue() >= istmaterialDto.getNMenge()
                                                .doubleValue()) {
                                            nMengeAbsolut = istmaterialDto.getNMenge().subtract(zuReduzieren);

                                            nMengeAbsolut = new BigDecimal(0);
                                        } else {
                                            nMengeAbsolut = istmaterialDto.getNMenge().subtract(zuReduzieren);
                                            zuReduzieren = new BigDecimal(0);

                                        }

                                        // Korrekturbuchung
                                        // Belegdatum wird nicht auf
                                        // heute
                                        // gesetzt lt. WH 20090115
                                        getLagerFac().bucheAb(LocaleFac.BELEGART_LOS, losDto.getIId(),
                                                istmaterialDto.getIId(), sollmatDto.getArtikelIId(),
                                                nMengeAbsolut, lagerbewegungDto.getNVerkaufspreis(),
                                                istmaterialDto.getLagerIId(), (String) null,
                                                losablieferungDto.getTAendern(), theClientDto);

                                        // Losistmaterial updaten
                                        updateLosistmaterialMenge(istmaterialDto.getIId(), nMengeAbsolut,
                                                theClientDto);

                                        zuReduzieren = zuReduzieren.subtract(istmaterialDto.getNMenge());

                                    }
                                }
                            }

                        }
                    }
                }
            }

        }

        LosablieferungDto[] dtos = losablieferungFindByLosIId(losDto.getIId(), false, theClientDto);
        // Wenn es die letzte Ablieferung ist, nur die letzte neu berechnen,
        // ansonsten alle
        if (dtos[dtos.length - 1].getIId().equals(losablieferungDto.getIId())) {
            aktualisiereNachtraeglichPreiseAllerLosablieferungen(losDto.getIId(), theClientDto, true);
        } else {
            aktualisiereNachtraeglichPreiseAllerLosablieferungen(losDto.getIId(), theClientDto, false);
        }

    } else {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_UPDATE_LOSABLIEFERUNG_FEHLER_MENGE,
                new Exception("Menge neu muss > 0 und kleiner der alten Menge sein."));
    }

    return losablieferungDto;

}

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

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

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

        BigDecimal summeAblieferungen = new BigDecimal(0);

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

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

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

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

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

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

private BigDecimal getErledigterMaterialwertEinerSollpositionNEU(BigDecimal bdLosgroesse,
        BigDecimal bdErledigteMenge, TheClientDto theClientDto, LosDto losDto, BigDecimal bdAusgegeben,
        BigDecimal gesamtpreis, BigDecimal sollmenge) {

    // wenn volle menge erledigt oder sogar mehr oder Los=erledigt
    if (bdLosgroesse.compareTo(bdErledigteMenge) <= 0
            || losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT)) {
        // dann alles
        return gesamtpreis;
    } else {// w w  w  .j  a v  a2 s.c o  m
        // Sollsatzgroesse berechnen
        BigDecimal bdSollsatzgroesse = sollmenge.multiply(bdErledigteMenge).divide(bdLosgroesse, 6,
                BigDecimal.ROUND_HALF_EVEN);
        // weniger oder gleich wie sollmenge ausgegeben
        if (bdAusgegeben.compareTo(bdSollsatzgroesse) <= 0) {
            // dann alles
            return gesamtpreis;
        }
        // wenn mehr ausgegeben
        else {

            BigDecimal bdEinzelpreis = new BigDecimal(0);

            if (bdAusgegeben.doubleValue() > 0) {
                bdEinzelpreis = gesamtpreis.divide(bdAusgegeben, 4, BigDecimal.ROUND_HALF_EVEN);
            }

            // dann mit sollsatzgroesse
            return bdSollsatzgroesse.multiply(bdEinzelpreis);
        }
    }
}

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

@TransactionTimeout(6000)
public void perAuftragsnummerLoseAbliefern(Integer auftragIId, TheClientDto theClientDto) {
    // Alle/*from   ww  w.  j a v  a2 s  .  c o  m*/
    try {

        AuftragpositionDto[] dtos = getAuftragpositionFac().auftragpositionFindByAuftragOffeneMenge(auftragIId);
        ArrayList<Object> alGehtNicht = new ArrayList<Object>();
        for (int i = 0; i < dtos.length; i++) {
            AuftragpositionDto auftragpositionDto = dtos[i];

            if (auftragpositionDto.getArtikelIId() != null) {
                StuecklisteDto stuecklisteDto = getStuecklisteFac()
                        .stuecklisteFindByMandantCNrArtikelIIdOhneExc(auftragpositionDto.getArtikelIId(),
                                theClientDto);
                if (stuecklisteDto != null
                        && Helper.short2boolean(stuecklisteDto.getBMaterialbuchungbeiablieferung()) == true) {
                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKey(stuecklisteDto.getArtikelIId(), theClientDto);

                    BigDecimal nMengeOffen = auftragpositionDto.getNOffeneMenge();

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

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

                    String[] stati = new String[2];
                    stati[0] = FertigungFac.STATUS_IN_PRODUKTION;
                    stati[1] = FertigungFac.STATUS_TEILERLEDIGT;
                    crit.add(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR, stati));
                    crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));
                    crit.add(Restrictions.eq(FertigungFac.FLR_LOS_STUECKLISTE_I_ID, stuecklisteDto.getIId()));

                    crit.addOrder(Order.asc("c_nr"));

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

                    while (resultListIterator.hasNext() && nMengeOffen.doubleValue() > 0) {
                        FLRLosReport flrLos = (FLRLosReport) resultListIterator.next();

                        BigDecimal bdOffenLos = flrLos.getN_losgroesse()
                                .subtract(getFertigungFac().getErledigteMenge(flrLos.getI_id(), theClientDto));
                        if (bdOffenLos.doubleValue() > 0) {

                            boolean bErledigt = false;

                            LosablieferungDto losablieferungDto = new LosablieferungDto();
                            losablieferungDto.setLosIId(flrLos.getI_id());

                            if (bdOffenLos.doubleValue() >= nMengeOffen.doubleValue()) {
                                losablieferungDto.setNMenge(nMengeOffen);
                                if (bdOffenLos.doubleValue() == nMengeOffen.doubleValue()) {
                                    bErledigt = true;
                                }
                                nMengeOffen = new BigDecimal(0);

                            } else {
                                losablieferungDto.setNMenge(bdOffenLos);
                                nMengeOffen = nMengeOffen.subtract(bdOffenLos);
                                bErledigt = true;
                            }
                            // Materialbuchen
                            bucheMaterialAufLos(losFindByPrimaryKey(flrLos.getI_id()),
                                    losablieferungDto.getNMenge(), false, false, true, theClientDto, null,
                                    false);

                            // Sind sollsatzgroeszen unterschritten?
                            // Sollsatzgroessen pruefen
                            pruefePositionenMitSollsatzgroesseUnterschreitung(flrLos.getI_id(),
                                    losablieferungDto.getNMenge(), theClientDto);

                            createLosablieferung(losablieferungDto, theClientDto, bErledigt);

                        }
                    }

                    if (nMengeOffen.doubleValue() > 0) {
                        alGehtNicht.add(artikelDto.formatArtikelbezeichnung() + " "
                                + Helper.formatZahl(nMengeOffen, 4, theClientDto.getLocUi()) + " "
                                + artikelDto.getEinheitCNr());
                    }

                }
            }

        }

        if (alGehtNicht.size() > 0) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_ABLIEFERN_PER_AUFTRAGSNUMMER_NICHT_MOEGLICH,
                    alGehtNicht, new Exception("Zuwenig offene Lose"));

        }

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

}

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

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public BigDecimal getAusgegebeneMengePreis(Integer lossollmaterialIId, java.sql.Timestamp tStichtag,
        TheClientDto theClientDto) throws EJBExceptionLP {
    try {/*from  w  w  w .  j  a va  2  s.  c  o  m*/
        BigDecimal bdMenge = new BigDecimal(0);
        BigDecimal bdWert = new BigDecimal(0);
        LosistmaterialDto[] losist = losistmaterialFindByLossollmaterialIId(lossollmaterialIId);
        for (int i = 0; i < losist.length; i++) {

            BigDecimal bdAusgegeben = getLagerFac().getMengeEinerBelegposition(LocaleFac.BELEGART_LOS,
                    losist[i].getIId(), tStichtag);

            if (Helper.short2boolean(losist[i].getBAbgang())) {

                BigDecimal bdPreis = getLagerFac().getGemittelterGestehungspreisEinerAbgangsposition(
                        LocaleFac.BELEGART_LOS, losist[i].getIId());
                bdMenge = bdMenge.add(bdAusgegeben);
                bdWert = bdWert.add(bdPreis.multiply(bdAusgegeben));
            } else {
                BigDecimal bdPreis = getLagerFac().getGemittelterEinstandspreisEinerZugangsposition(
                        LocaleFac.BELEGART_LOS, losist[i].getIId());
                bdMenge = bdMenge.subtract(bdAusgegeben);
                bdWert = bdWert.subtract(bdPreis.multiply(bdAusgegeben));
            }
        }
        if (bdMenge.doubleValue() == 0) {
            return bdMenge;
        } else {
            return bdWert.divide(bdMenge, BigDecimal.ROUND_HALF_EVEN);
        }
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
        return null;
    }
}

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

private void erstelleLossollmaterial(Integer losIId, Integer stuecklisteIId, BigDecimal bdPositionsMenge,
        Integer lagerIId_Hauptlager, boolean bFlachdruecken, int iEbene, TheClientDto theClientDto) {
    iEbene++;/*from  w w  w  . j a va2  s .c  o m*/
    try {
        StuecklistepositionDto[] stkPos = getStuecklisteFac()
                .stuecklistepositionFindByStuecklisteIId(stuecklisteIId, theClientDto);

        StuecklisteDto stklDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(stuecklisteIId, theClientDto);

        for (int i = 0; i < stkPos.length; i++) {
            // alle stuecklistenpositionen ins los uebernehmen

            LossollmaterialDto losMatDto = new LossollmaterialDto();
            losMatDto.setArtikelIId(stkPos[i].getArtikelIId());
            losMatDto.setBNachtraeglich(Helper.boolean2Short(false));
            losMatDto.setCKommentar(stkPos[i].getCKommentar());
            losMatDto.setCPosition(stkPos[i].getCPosition());
            losMatDto.setFDimension1(stkPos[i].getFDimension1());
            losMatDto.setFDimension2(stkPos[i].getFDimension2());
            losMatDto.setFDimension3(stkPos[i].getFDimension3());
            losMatDto.setILfdnummer(stkPos[i].getILfdnummer());
            losMatDto.setIBeginnterminoffset(stkPos[i].getIBeginnterminoffset());
            losMatDto.setISort(stkPos[i].getISort());
            losMatDto.setLosIId(losIId);
            losMatDto.setMontageartIId(stkPos[i].getMontageartIId());
            // Einheit umrechnen
            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(stkPos[i].getArtikelIId(),
                    theClientDto);
            losMatDto.setEinheitCNr(artikelDto.getEinheitCNr());
            BigDecimal bdFaktor = getSystemFac().rechneUmInAndereEinheit(new BigDecimal(1),
                    artikelDto.getEinheitCNr(), stkPos[i].getEinheitCNr(), stkPos[i].getIId(), theClientDto);

            // nun die Dimensionen
            BigDecimal bdDimProdukt = new BigDecimal(1);
            EinheitDto einheitDto = getSystemFac().einheitFindByPrimaryKey(stkPos[i].getEinheitCNr(),
                    theClientDto);
            if (einheitDto.getIDimension().intValue() >= 1) {
                if (stkPos[i].getFDimension1() != null) {
                    bdDimProdukt = bdDimProdukt
                            .multiply(new BigDecimal(stkPos[i].getFDimension1().floatValue()));
                }
            }
            if (einheitDto.getIDimension().intValue() >= 2) {
                if (stkPos[i].getFDimension2() != null) {
                    bdDimProdukt = bdDimProdukt
                            .multiply(new BigDecimal(stkPos[i].getFDimension2().floatValue()));
                }
            }
            if (einheitDto.getIDimension().intValue() >= 3) {
                if (stkPos[i].getFDimension3() != null) {
                    bdDimProdukt = bdDimProdukt
                            .multiply(new BigDecimal(stkPos[i].getFDimension3().floatValue()));
                }
            }
            // verschnitt
            BigDecimal bdMenge = Helper.berechneMengeInklusiveVerschnitt(stkPos[i].getNMenge(),
                    artikelDto.getFVerschnittfaktor(), artikelDto.getFVerschnittbasis(), bdPositionsMenge);

            // endgueltige Menge berechnen
            if (bdFaktor.doubleValue() != 0) {

                bdMenge = bdMenge.divide(bdFaktor, BigDecimal.ROUND_HALF_EVEN);

                BigDecimal losSollMenge = bdMenge.multiply(bdDimProdukt).multiply(bdPositionsMenge).divide(
                        new BigDecimal(stklDto.getIErfassungsfaktor().doubleValue()),
                        BigDecimal.ROUND_HALF_EVEN);

                if (losSollMenge.doubleValue() < 0.001 && losSollMenge.doubleValue() > 0.000001) {
                    losSollMenge = new BigDecimal("0.001");
                    losSollMenge = losSollMenge.setScale(3, BigDecimal.ROUND_HALF_EVEN);
                } else {
                    losSollMenge = losSollMenge.setScale(3, BigDecimal.ROUND_HALF_EVEN);
                }

                losMatDto.setNMenge(losSollMenge);

            }

            BigDecimal bdSollpreis = getLagerFac().getGemittelterGestehungspreisEinesLagers(
                    stkPos[i].getArtikelIId(), lagerIId_Hauptlager, theClientDto);
            losMatDto.setNSollpreis(bdSollpreis);
            // Datensatz speichern

            // Wenn Unterstueckliste und Hilfsstueckliste:

            StuecklisteDto stuecklisteDto = getStuecklisteFac()
                    .stuecklisteFindByMandantCNrArtikelIIdOhneExc(stkPos[i].getArtikelIId(), theClientDto);

            if (stuecklisteDto != null && stuecklisteDto.getArtikelIId() == 3376) {
                int u = 0;

            }

            if (stuecklisteDto != null && stuecklisteDto.getStuecklisteartCNr()
                    .equals(StuecklisteFac.STUECKLISTEART_HILFSSTUECKLISTE) && bFlachdruecken == true) {
                if (iEbene < 10) {
                    erstelleLossollmaterial(losIId, stuecklisteDto.getIId(), losMatDto.getNMenge(),
                            lagerIId_Hauptlager, true, iEbene, theClientDto);

                }

            } else {

                LossollmaterialDto lossollmaterialDto = createLossollmaterial(losMatDto, theClientDto);

                Integer iOriginal_IId = new Integer(lossollmaterialDto.getIId());

                // Ersatztypen anlegen
                PosersatzDto[] posersatzDtos = getStuecklisteFac()
                        .posersatzFindByStuecklistepositionIId(stkPos[i].getIId());
                if (iEbene < 10) {
                    for (int k = 0; k < posersatzDtos.length; k++) {

                        losMatDto.setArtikelIId(posersatzDtos[k].getArtikelIIdErsatz());
                        losMatDto.setNMenge(new BigDecimal(0));
                        losMatDto.setLossollmaterialIIdOriginal(iOriginal_IId);
                        createLossollmaterial(losMatDto, theClientDto);

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

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

public AuftragNachkalkulationDto getWerteAusUnterlosen(LosDto losDto, BigDecimal bdMenge,
        AuftragNachkalkulationDto abNachkalkulationDto, TheClientDto theClientDto) {

    LossollmaterialDto[] sollmat = lossollmaterialFindByLosIId(losDto.getIId());

    try {//from w w  w.  j  a v a2s.c om

        BigDecimal bdWert = new BigDecimal(0);
        for (int i = 0; i < sollmat.length; i++) {
            LossollmaterialDto lossollmaterialDto = sollmat[i];
            LosistmaterialDto[] istMatDtos = losistmaterialFindByLossollmaterialIId(
                    lossollmaterialDto.getIId());

            for (int j = 0; j < istMatDtos.length; j++) {
                LosistmaterialDto istMatDto = istMatDtos[j];
                Query query = em.createNamedQuery("LagerbewegungfindByBelegartCNrBelegartPositionIId");
                query.setParameter(1, LocaleFac.BELEGART_LOS);
                query.setParameter(2, istMatDto.getIId());
                Collection cl = query.getResultList();

                Iterator it = cl.iterator();

                while (it.hasNext()) {
                    Lagerbewegung l = (Lagerbewegung) it.next();

                    LagerabgangursprungDto[] dtos = getLagerFac()
                            .lagerabgangursprungFindByLagerbewegungIIdBuchung(l.getIIdBuchung());

                    for (int m = 0; m < dtos.length; m++) {
                        // nun die Ursprungsbuchungen suchen
                        Session session2 = FLRSessionFactory.getFactory().openSession();
                        String sQuery2 = "from FLRLagerbewegung lagerbewegung WHERE lagerbewegung.i_id_buchung="
                                + dtos[m].getILagerbewegungidursprung()
                                + " order by lagerbewegung.t_buchungszeit DESC";
                        org.hibernate.Query ursrungsbuchung = session2.createQuery(sQuery2);
                        ursrungsbuchung.setMaxResults(1);

                        java.util.List resultList2 = ursrungsbuchung.list();

                        Iterator itUrsprung = resultList2.iterator();

                        while (itUrsprung.hasNext()) {
                            com.lp.server.artikel.fastlanereader.generated.FLRLagerbewegung lagerbewegung_ursprung = (com.lp.server.artikel.fastlanereader.generated.FLRLagerbewegung) itUrsprung
                                    .next();

                            // Wenn diese aus einer Losablieferung kommt
                            if (lagerbewegung_ursprung.getC_belegartnr()
                                    .equals(LocaleFac.BELEGART_LOSABLIEFERUNG)) {

                                LosablieferungDto laDto = losablieferungFindByPrimaryKey(
                                        lagerbewegung_ursprung.getI_belegartpositionid(), true, theClientDto);

                                LosDto losDtoUnterlos = losFindByPrimaryKey(laDto.getLosIId());
                                BigDecimal sollsatzgroesse = lossollmaterialDto.getNMenge()
                                        .divide(losDto.getNLosgroesse(), 4, BigDecimal.ROUND_HALF_EVEN);

                                abNachkalkulationDto.setBdGestehungswertmaterialist(
                                        abNachkalkulationDto.getBdGestehungswertmaterialist().subtract(
                                                laDto.getNArbeitszeitwertdetailliert().multiply(bdMenge)));
                                abNachkalkulationDto.setBdGestehungswertarbeitist(
                                        abNachkalkulationDto.getBdGestehungswertarbeitist()
                                                .add(laDto.getNArbeitszeitwertdetailliert().multiply(bdMenge)));

                                BigDecimal bdGesamtAbgeliefert = getErledigteMenge(laDto.getLosIId(),
                                        theClientDto);
                                Double dPers = getZeiterfassungFac().getSummeZeitenEinesBeleges(
                                        LocaleFac.BELEGART_LOS, losDtoUnterlos.getIId(), null, null, null, null,
                                        theClientDto);

                                BigDecimal arbeitszeitsoll = new BigDecimal(0);

                                BigDecimal maschinenzeitsoll = new BigDecimal(0);
                                LossollarbeitsplanDto[] sollarbeitsplanDtos = getFertigungFac()
                                        .lossollarbeitsplanFindByLosIId(losDtoUnterlos.getIId());

                                for (int u = 0; u < sollarbeitsplanDtos.length; u++) {
                                    LossollarbeitsplanDto sollarbeitsplanDto = sollarbeitsplanDtos[u];

                                    BigDecimal menge = sollarbeitsplanDto.getNGesamtzeit()
                                            .divide(losDtoUnterlos.getNLosgroesse(), 4,
                                                    BigDecimal.ROUND_HALF_EVEN)
                                            .multiply(bdMenge);
                                    /*
                                     * ArtikelDto artikelDto =
                                     * getArtikelFac()
                                     * .artikelFindByPrimaryKeySmall(
                                     * sollarbeitsplanDto
                                     * .getArtikelIIdTaetigkeit(),
                                     * theClientDto);
                                     * 
                                     * myLogger.warn("Los:" +
                                     * losDto.getCNr() + " Unterlos:" +
                                     * losDtoUnterlos.getCNr() + " AZ:" +
                                     * artikelDto.getCNr() + " Zeit:" +
                                     * Helper.rundeKaufmaennisch( menge,
                                     * 4));
                                     */

                                    if (sollarbeitsplanDto.getMaschineIId() == null) {
                                        arbeitszeitsoll = arbeitszeitsoll.add(menge);
                                    } else {
                                        maschinenzeitsoll = maschinenzeitsoll.add(menge);
                                        if (!Helper.short2boolean(sollarbeitsplanDto.getBNurmaschinenzeit())) {
                                            arbeitszeitsoll = arbeitszeitsoll.add(menge);
                                        }

                                    }
                                }

                                abNachkalkulationDto
                                        .setDdArbeitszeitsoll(abNachkalkulationDto.getDdArbeitszeitsoll()
                                                + arbeitszeitsoll.doubleValue());
                                abNachkalkulationDto
                                        .setDdMaschinenzeitsoll(abNachkalkulationDto.getDdMaschinenzeitsoll()
                                                + maschinenzeitsoll.doubleValue());

                                // Zeit duch die Gesamtablieferungen
                                // dividieren und mal bMenge
                                dPers = dPers / bdGesamtAbgeliefert.doubleValue() * bdMenge.doubleValue();
                                abNachkalkulationDto.setDdArbeitszeitist(
                                        abNachkalkulationDto.getDdArbeitszeitist() + dPers);

                                Double dMasch = getZeiterfassungFac().getSummeMaschinenZeitenEinesBeleges(
                                        losDtoUnterlos.getIId(), null, null, theClientDto);

                                dMasch = dMasch / bdGesamtAbgeliefert.doubleValue() * bdMenge.doubleValue();
                                abNachkalkulationDto.setDdMaschinenzeitist(
                                        abNachkalkulationDto.getDdMaschinenzeitist() + dMasch);

                                /*
                                 * System.out.println("Los: " +
                                 * losDto.getCNr() + " Stueckliste: " +
                                 * stklDto.getArtikelDto().getCNr() +
                                 * " UnterlosLos: " +
                                 * losDtoUnterlos.getCNr() + " Artikel: " +
                                 * aDto.getCNr() + " Menge:" + bdMenge);
                                 */

                                abNachkalkulationDto = getWerteAusUnterlosen(losDtoUnterlos,
                                        sollsatzgroesse.multiply(bdMenge), abNachkalkulationDto, theClientDto);

                            }

                        }

                        session2.close();
                    }

                }

            }

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

    }
    return abNachkalkulationDto;
}