List of usage examples for java.math BigDecimal ROUND_HALF_EVEN
int ROUND_HALF_EVEN
To view the source code for java.math BigDecimal ROUND_HALF_EVEN.
Click Source Link
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 . ja va 2s . c om*/ 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
@TransactionTimeout(1000) public void aktualisiereNachtraeglichPreiseAllerLosablieferungen(Integer losIId, TheClientDto theClientDto, boolean bNurLetztenMaterialwertNeuBerechnen) throws EJBExceptionLP { LosDto losDto = losFindByPrimaryKey(losIId); try {//ww w .j ava 2s . co m 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; } // AZ-Werte aktualisieren if (bSollGleichIstzeiten) { aktualisiereAZAllerLosablieferungenWennSollIstGleichIst(losIId, theClientDto); } else { aktualisiereAZAllerLosablieferungen(losIId, theClientDto); } // Preise berechnen: // -------------------------------------------------------------- // --------- // 1. der inklusive aller bisherigen ablieferungen erledigte // Materialwert if (bNurLetztenMaterialwertNeuBerechnen == false) { materialwertAllerLosablieferungenNeuBerechnen(losDto, theClientDto); } // PJ 14807 boolean bAblieferpreisIstDurchschnitspreis = false; ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_ABLIEFERUNGSPREIS_IST_DURCHSCHNITTSPREIS); bAblieferpreisIstDurchschnitspreis = ((Boolean) parameter.getCWertAsObject()); BigDecimal bdMaterialwertGesamt = getErledigterMaterialwertNEU(losDto, theClientDto); // -------------------------------------------------------------- // --------- // nun der detaillierte Arbeitszeitwert (mit Beruecksichtigung // der Unterlose) // 1. der inklusive aller bisherigen ablieferungen erledigte // Arbeitszeitwert BigDecimal bdArbeitszeitwertAusUnterlosenGesamt = getErledigterArbeitszeitwertAusUnterlosen(losDto, theClientDto); // PJ14807 BigDecimal bdAzWertDurchschnitt = new BigDecimal(0); BigDecimal bdMatWertDurchschnitt = new BigDecimal(0); if (bAblieferpreisIstDurchschnitspreis == true) { BigDecimal bdGesamtkosten = new BigDecimal(0); // Maschinenzeiten AuftragzeitenDto[] zeitenMaschine = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(losIId, null, null, null, theClientDto); for (int j = 0; j < zeitenMaschine.length; j++) { bdGesamtkosten = bdGesamtkosten.add(zeitenMaschine[j].getBdKosten()); } // "normale" Zeiten AuftragzeitenDto[] zeitenMann = getZeiterfassungFac().getAllZeitenEinesBeleges( LocaleFac.BELEGART_LOS, losIId, null, null, null, null, false, false, theClientDto); for (int j = 0; j < zeitenMann.length; j++) { bdGesamtkosten = bdGesamtkosten.add(zeitenMann[j].getBdKosten()); } bdGesamtkosten = bdGesamtkosten.add(bdArbeitszeitwertAusUnterlosenGesamt); BigDecimal bdAbgeliefertGesamt = getErledigteMenge(losDto.getIId(), theClientDto); if (bdAbgeliefertGesamt.doubleValue() > 0) { bdAzWertDurchschnitt = bdGesamtkosten.divide(bdAbgeliefertGesamt, 4, BigDecimal.ROUND_HALF_EVEN); bdMatWertDurchschnitt = bdMaterialwertGesamt.divide(bdAbgeliefertGesamt, 4, BigDecimal.ROUND_HALF_EVEN); } } Query query = em.createNamedQuery("LosablieferungfindByLosIId"); query.setParameter(1, losIId); Collection<?> losablieferungs = query.getResultList(); LosablieferungDto[] losabDtos = assembleLosablieferungDtosOhneSnrs(losablieferungs); for (Iterator<?> iter = losablieferungs.iterator(); iter.hasNext();) { Losablieferung losablieferung = (Losablieferung) iter.next(); // 2. bisher erledigte duerfen aber nicht mehr beruecksichtigt // werden -> subtrahieren // Diese werden durch die "Assemblierung" neu geladen (es // koennten sich Werte geaendert haben), das Find faellt aber // weg BigDecimal bdMaterialwert = bdMaterialwertGesamt; if (bAblieferpreisIstDurchschnitspreis == false) { if (bNurLetztenMaterialwertNeuBerechnen == true && iter.hasNext() == false) { // Ausser die betroffene Ablieferung selbst for (int i = 0; i < losabDtos.length; i++) { if (!losablieferung.getIId().equals(losabDtos[i].getIId())) { bdMaterialwert = bdMaterialwert.subtract( losabDtos[i].getNMaterialwert().multiply(losabDtos[i].getNMenge())); } } // 3. Nach Division durch die Menge der neuen // Ablieferung // hab // ich den Einzelwert losablieferung.setNMaterialwert( bdMaterialwert.divide(losablieferung.getNMenge(), 4, BigDecimal.ROUND_HALF_EVEN)); } // ---------------------------------------------------------- // ---- // --------- // Gestehungspreis: ist die Summe aus Materialwert und // Arbeitszeitwert losablieferung.setNGestehungspreis( losablieferung.getNMaterialwert().add(losablieferung.getNArbeitszeitwert())); BigDecimal bdArbeitszeitwertAusUnterlosen = bdArbeitszeitwertAusUnterlosenGesamt; // 2. bisher erledigte duerfen aber nicht mehr // beruecksichtigt // werden -> subtrahieren for (int i = 0; i < losabDtos.length; i++) { if (!losablieferung.getIId().equals(losabDtos[i].getIId())) { bdArbeitszeitwertAusUnterlosen = bdArbeitszeitwertAusUnterlosen.subtract(losabDtos[i] .getNArbeitszeitwertdetailliert().multiply(losabDtos[i].getNMenge())); } } // 3. Nach Division durch die Menge der neuen Ablieferung // hab // ich den Einzelwert BigDecimal bdAZWertAusUnterlosen = bdArbeitszeitwertAusUnterlosen .divide(losablieferung.getNMenge(), 4, BigDecimal.ROUND_HALF_EVEN); // 4. Dazu kommt noch der AZ-Wert aus diesem Los losablieferung.setNArbeitszeitwertdetailliert( bdAZWertAusUnterlosen.add(losablieferung.getNArbeitszeitwert())); // ---------------------------------------------------------- // ---- // --------- // nun der detaillierte Materialwert // der ist einfach die Differenz zwischen Gestehungspreis // und // Detailliertem Arbeitszeitwert losablieferung.setNMaterialwertdetailliert(losablieferung.getNGestehungspreis() .subtract(losablieferung.getNArbeitszeitwertdetailliert())); } else { losablieferung.setNMaterialwertdetailliert(bdMatWertDurchschnitt); losablieferung.setNMaterialwert(bdMatWertDurchschnitt); losablieferung.setNArbeitszeitwertdetailliert(bdAzWertDurchschnitt); losablieferung.setNArbeitszeitwert(bdAzWertDurchschnitt); losablieferung.setNGestehungspreis(bdMatWertDurchschnitt.add(bdAzWertDurchschnitt)); } // speichern if (bNurLetztenMaterialwertNeuBerechnen == false || (bNurLetztenMaterialwertNeuBerechnen == true && iter.hasNext() == false)) { losablieferung.setTAendern(losablieferung.getTAendern()); losablieferung.setBGestehungspreisneuberechnen(Helper.boolean2Short(false)); LosablieferungDto loaDot = assembleLosablieferungDto(losablieferung); // auch in Lagerbewegung aendern bucheLosAblieferungAufLager(loaDot, losDto, theClientDto); } } } catch (RemoteException ex1) { throwEJBExceptionLPRespectOld(ex1); } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
private void materialwertAllerLosablieferungenNeuBerechnen(LosDto losDto, TheClientDto theClientDto) { Query query = em.createNamedQuery("LosablieferungfindByLosIId"); query.setParameter(1, losDto.getIId()); Collection<?> losablieferungs = query.getResultList(); LossollmaterialDto[] losmat = lossollmaterialFindByLosIId(losDto.getIId()); BigDecimal bdAbgeliefertGesamt = getErledigteMenge(losDto.getIId(), theClientDto); BigDecimal bdVorherigerWertDerAblieferung = new BigDecimal(0); boolean bErledigt = false; if (losDto.getStatusCNr().equals(LocaleFac.STATUS_ERLEDIGT) || bdAbgeliefertGesamt.doubleValue() >= losDto.getNLosgroesse().doubleValue()) { bErledigt = true;/* w w w. j ava 2s . c om*/ } HashMap<Integer, LagerbewegungDto[]> hmLagerbewegungen = new HashMap<Integer, LagerbewegungDto[]>(); for (int i = 0; i < losmat.length; i++) { BigDecimal bdPreis = getAusgegebeneMengePreis(losmat[i].getIId(), null, theClientDto); LosistmaterialDto[] istmatDtos = losistmaterialFindByLossollmaterialIId(losmat[i].getIId()); ArrayList al = new ArrayList(); for (int j = 0; j < istmatDtos.length; j++) { List<SeriennrChargennrMitMengeDto> snrDtos = getLagerFac() .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS, istmatDtos[j].getIId()); for (int k = 0; k < snrDtos.size(); k++) { LagerbewegungDto bewDto = getLagerFac().getLetzteintrag(LocaleFac.BELEGART_LOS, istmatDtos[j].getIId(), snrDtos.get(k).getCSeriennrChargennr()); bewDto.setNGestehungspreis(bdPreis); al.add(bewDto); } } LagerbewegungDto[] returnArray = new LagerbewegungDto[al.size()]; hmLagerbewegungen.put(losmat[i].getIId(), (LagerbewegungDto[]) al.toArray(returnArray)); } BigDecimal abgeliefert = new BigDecimal(0); int iAblieferung = 0; for (Iterator<?> iter = losablieferungs.iterator(); iter.hasNext();) { Losablieferung losablieferung = (Losablieferung) iter.next(); iAblieferung++; abgeliefert = abgeliefert.add(losablieferung.getNMenge()); BigDecimal bdWertIstProAblieferung = new BigDecimal(0.0000); for (int i = 0; i < losmat.length; i++) { // Sollsatzgroesse der Position BigDecimal ssg = losmat[i].getNMenge() .divide(losDto.getNLosgroesse(), 4, BigDecimal.ROUND_HALF_EVEN).multiply(abgeliefert); BigDecimal bdMengeIst = new BigDecimal(0.0000); BigDecimal bdWertIstProPosition = new BigDecimal(0.0000); if (hmLagerbewegungen.containsKey(losmat[i].getIId())) { LagerbewegungDto[] bewDtos = (LagerbewegungDto[]) hmLagerbewegungen.get(losmat[i].getIId()); if (bewDtos != null) { for (int l = 0; l < bewDtos.length; l++) { if (bErledigt && iter.hasNext() == false) { if (Helper.short2boolean(bewDtos[l].getBAbgang())) { bdMengeIst = bdMengeIst.add(bewDtos[l].getNMenge()); bdWertIstProPosition = bdWertIstProPosition .add(bewDtos[l].getNGestehungspreis().multiply(bewDtos[l].getNMenge())); } else { bdMengeIst = bdMengeIst.subtract(bewDtos[l].getNMenge()); bdWertIstProPosition = bdWertIstProPosition.subtract( bewDtos[l].getNEinstandspreis().multiply(bewDtos[l].getNMenge())); } } else { if (losablieferung.getTAendern().getTime() >= bewDtos[l].getTBuchungszeit() .getTime()) { if (bdMengeIst.abs().add(bewDtos[l].getNMenge()).doubleValue() > ssg.abs() .doubleValue()) { BigDecimal mengeSSg = null; if (bdMengeIst.abs().doubleValue() < ssg.abs().doubleValue()) { mengeSSg = ssg.subtract(bdMengeIst); } else { mengeSSg = new BigDecimal(0); } bdMengeIst = bdMengeIst.add(bewDtos[l].getNMenge()); if (Helper.short2boolean(bewDtos[l].getBAbgang())) { bdWertIstProPosition = bdWertIstProPosition .add(bewDtos[l].getNGestehungspreis().multiply(mengeSSg)); } else { bdWertIstProPosition = bdWertIstProPosition .add(bewDtos[l].getNEinstandspreis().multiply(mengeSSg)); } } else { bdMengeIst = bdMengeIst.add(bewDtos[l].getNMenge()); if (Helper.short2boolean(bewDtos[l].getBAbgang())) { bdWertIstProPosition = bdWertIstProPosition.add(bewDtos[l] .getNGestehungspreis().multiply(bewDtos[l].getNMenge())); } else { bdWertIstProPosition = bdWertIstProPosition.subtract(bewDtos[l] .getNEinstandspreis().multiply(bewDtos[l].getNMenge())); } } } } System.out.println(bewDtos[l].getIIdBuchung() + ":" + bdWertIstProPosition); } System.out.println(losmat[i].getArtikelIId() + ":" + bdWertIstProPosition); bdWertIstProAblieferung = bdWertIstProAblieferung.add(bdWertIstProPosition); } } } losablieferung.setNMaterialwert(bdWertIstProAblieferung.subtract(bdVorherigerWertDerAblieferung) .divide(losablieferung.getNMenge(), 4, BigDecimal.ROUND_HALF_EVEN)); em.merge(losablieferung); em.flush(); bdVorherigerWertDerAblieferung = bdWertIstProAblieferung; } }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
private void aktualisiereAZAllerLosablieferungenWennSollIstGleichIst(Integer losIId, TheClientDto theClientDto) {/*from w w w . j av a2s. co m*/ LosDto losDto = losFindByPrimaryKey(losIId); try { BigDecimal faktorFuerIstGleichSoll = new BigDecimal(0); BigDecimal erlMenge = getFertigungFac().getErledigteMenge(losIId, theClientDto); if (erlMenge.doubleValue() > 0) { if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT) || losDto.getNLosgroesse().doubleValue() <= erlMenge.doubleValue()) { faktorFuerIstGleichSoll = new BigDecimal(1); } else { if (losDto.getNLosgroesse().doubleValue() > 0) { faktorFuerIstGleichSoll = erlMenge.divide(losDto.getNLosgroesse(), 4, BigDecimal.ROUND_HALF_EVEN); } } String sMandantWaehrung = theClientDto.getSMandantenwaehrung(); // Sollzeiten LossollarbeitsplanDto[] soll = lossollarbeitsplanFindByLosIId(losDto.getIId()); BigDecimal bdGesamtkosten = new BigDecimal(0.0000); // Gesamtkosten berechnen for (int i = 0; i < soll.length; i++) { // Kosten holen BigDecimal kosten = new BigDecimal(0.0000); if (soll[i].getMaschineIId() != null) { kosten = getZeiterfassungFac() .getMaschinenKostenZumZeitpunkt(soll[i].getMaschineIId(), Helper.cutTimestamp(new Timestamp(System.currentTimeMillis()))) .multiply(soll[i].getNGesamtzeit()).multiply(faktorFuerIstGleichSoll); } ArtikellieferantDto artlief = getArtikelFac().getArtikelEinkaufspreis( soll[i].getArtikelIIdTaetigkeit(), new BigDecimal(1), sMandantWaehrung, theClientDto); if (artlief != null && artlief.getLief1Preis() != null) { BigDecimal bdSollpreis = artlief.getLief1Preis(); kosten = kosten.add( soll[i].getNGesamtzeit().multiply(bdSollpreis).multiply(faktorFuerIstGleichSoll)); } bdGesamtkosten = bdGesamtkosten.add(kosten); } LosablieferungDto[] losablieferungDtos = losablieferungFindByLosIId(losIId, false, theClientDto); BigDecimal kostenProStueck = bdGesamtkosten.divide(erlMenge, 4, BigDecimal.ROUND_HALF_EVEN); for (int i = 0; i < losablieferungDtos.length; i++) { LosablieferungDto losablieferungDto = losablieferungDtos[i]; // try { Losablieferung losablieferung = em.find(Losablieferung.class, losablieferungDto.getIId()); if (losablieferung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } losablieferung.setNArbeitszeitwert(kostenProStueck); losablieferung.setNArbeitszeitwertdetailliert(kostenProStueck); // } // catch (FinderException ex) { // throw new // EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } } } } catch (RemoteException ex1) { throwEJBExceptionLPRespectOld(ex1); } }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
private void aktualisiereAZAllerLosablieferungen(Integer losIId, TheClientDto theClientDto) { LosDto losDto = losFindByPrimaryKey(losIId); try {//from w ww. j a v a2 s . c o m // Sollzeiten LossollarbeitsplanDto[] soll = lossollarbeitsplanFindByLosIId(losDto.getIId()); int SOLL = 0; int IST = 1; int WERT = 2; // Sollzeiten nach Artikel verdichten HashMap<Integer, Object[]> listSollVerdichtet = new HashMap<Integer, Object[]>(); for (int i = 0; i < soll.length; i++) { if (listSollVerdichtet.containsKey(soll[i].getArtikelIIdTaetigkeit())) { Object[] oTemp = listSollVerdichtet.get(soll[i].getArtikelIIdTaetigkeit()); BigDecimal sollZeit = soll[i].getNGesamtzeit(); if (soll[i].getMaschineIId() != null) { sollZeit = sollZeit.multiply(new BigDecimal(2)); } oTemp[SOLL] = ((BigDecimal) oTemp[SOLL]).add(sollZeit); oTemp[IST] = new BigDecimal(0.00); oTemp[WERT] = new BigDecimal(0.00); listSollVerdichtet.put(soll[i].getArtikelIIdTaetigkeit(), oTemp); } else { Object[] oZeile = new Object[3]; BigDecimal sollZeit = soll[i].getNGesamtzeit(); if (soll[i].getMaschineIId() != null) { sollZeit = sollZeit.multiply(new BigDecimal(2)); } oZeile[SOLL] = sollZeit; oZeile[IST] = new BigDecimal(0.00); oZeile[WERT] = new BigDecimal(0.00); listSollVerdichtet.put(soll[i].getArtikelIIdTaetigkeit(), oZeile); } } // Maschinenzeiten AuftragzeitenDto[] zeitenMaschine = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(losIId, null, null, null, theClientDto); // "normale" Zeiten AuftragzeitenDto[] zeitenMann = getZeiterfassungFac().getAllZeitenEinesBeleges(LocaleFac.BELEGART_LOS, losIId, null, null, null, null, false, false, theClientDto); LosablieferungDto[] losablieferungDtos = losablieferungFindByLosIIdOhneNeuberechnungUndOhneSnrChnr( losIId, theClientDto); boolean bErledigtOderUeberliefert = false; BigDecimal bdGesamtAbgeliefert = new BigDecimal(0.00); for (int i = 0; i < losablieferungDtos.length; i++) { LosablieferungDto losablieferungDto = losablieferungDtos[i]; bdGesamtAbgeliefert = bdGesamtAbgeliefert.add(losablieferungDto.getNMenge()); } if (losDto.getStatusCNr().equals(LocaleFac.STATUS_ERLEDIGT) || bdGesamtAbgeliefert.doubleValue() >= losDto.getNLosgroesse().doubleValue()) { bErledigtOderUeberliefert = true; } BigDecimal bdKostenGesamt = new BigDecimal(0.00); BigDecimal bdVerbrauchteKostenGesamt = new BigDecimal(0.00); HashMap<Integer, BigDecimal> hmUeberigeZeitderVorhergehendenAblieferung = new HashMap(); HashMap bdUeberigeKostenderVorhergehendenAblieferung = new HashMap<Object, BigDecimal>(); for (int i = 0; i < losablieferungDtos.length; i++) { LosablieferungDto losablieferungDto = losablieferungDtos[i]; HashMap<Integer, Object[]> hmAblieferung = new HashMap<Integer, Object[]>(); Iterator<?> it = listSollVerdichtet.keySet().iterator(); while (it.hasNext()) { Integer key = (Integer) it.next(); Object[] oNew = new Object[3]; Object[] oVorhanden = listSollVerdichtet.get(key); oNew[SOLL] = oVorhanden[SOLL]; oNew[IST] = oVorhanden[IST]; oNew[WERT] = oVorhanden[WERT]; hmAblieferung.put(key, oNew); } for (int j = 0; j < zeitenMaschine.length; j++) { BigDecimal bdIst = new BigDecimal(0.00); if (zeitenMaschine[j].getTsEnde() != null) { if (i == 0 && i == losablieferungDtos.length - 1) { if (zeitenMaschine[j].getTsEnde().before(losablieferungDto.getTAendern()) || zeitenMaschine[j].getTsEnde().after(losablieferungDtos[0].getTAendern())) { bdIst = bdIst.add(new BigDecimal(zeitenMaschine[j].getDdDauer().doubleValue())); } } else if (i == 0) { if (zeitenMaschine[j].getTsEnde().before(losablieferungDto.getTAendern())) { bdIst = bdIst.add(new BigDecimal(zeitenMaschine[j].getDdDauer().doubleValue())); } } else if (i == losablieferungDtos.length - 1) { if (zeitenMaschine[j].getTsEnde().after(losablieferungDtos[i - 1].getTAendern())) { bdIst = bdIst.add(new BigDecimal(zeitenMaschine[j].getDdDauer().doubleValue())); } } else { if (zeitenMaschine[j].getTsEnde().after(losablieferungDtos[i - 1].getTAendern()) && zeitenMaschine[j].getTsEnde().before(losablieferungDto.getTAendern())) { bdIst = bdIst.add(new BigDecimal(zeitenMaschine[j].getDdDauer().doubleValue())); } } } if (bdIst.doubleValue() > 0) { bdKostenGesamt = bdKostenGesamt.add(zeitenMaschine[j].getBdKosten()); if (hmAblieferung.containsKey(zeitenMaschine[j].getArtikelIId())) { Object[] oZeile = hmAblieferung.get(zeitenMaschine[j].getArtikelIId()); oZeile[IST] = ((BigDecimal) oZeile[IST]).add(bdIst); oZeile[WERT] = ((BigDecimal) oZeile[WERT]).add(zeitenMaschine[j].getBdKosten()); hmAblieferung.put(zeitenMaschine[j].getArtikelIId(), oZeile); } else { Object[] oZeile = new Object[3]; oZeile[SOLL] = new BigDecimal(0.00); oZeile[IST] = bdIst; oZeile[WERT] = zeitenMaschine[j].getBdKosten(); hmAblieferung.put(zeitenMaschine[j].getArtikelIId(), oZeile); } } } // Zeiten Mann for (int j = 0; j < zeitenMann.length; j++) { BigDecimal bdIst = new BigDecimal(0.00); if (zeitenMann[j].getTsEnde() != null) { if (i == 0 && i == losablieferungDtos.length - 1) { if (zeitenMann[j].getTsEnde().before(losablieferungDto.getTAendern()) || zeitenMann[j].getTsEnde().after(losablieferungDtos[0].getTAendern())) { bdIst = bdIst.add(new BigDecimal(zeitenMann[j].getDdDauer().doubleValue())); } } else if (i == 0) { if (zeitenMann[j].getTsEnde().before(losablieferungDto.getTAendern())) { bdIst = bdIst.add(new BigDecimal(zeitenMann[j].getDdDauer().doubleValue())); } } else if (i == losablieferungDtos.length - 1) { if (zeitenMann[j].getTsEnde().after(losablieferungDtos[i - 1].getTAendern())) { bdIst = bdIst.add(new BigDecimal(zeitenMann[j].getDdDauer().doubleValue())); } } else { if (zeitenMann[j].getTsEnde().after(losablieferungDtos[i - 1].getTAendern()) && zeitenMann[j].getTsEnde().before(losablieferungDto.getTAendern())) { bdIst = bdIst.add(new BigDecimal(zeitenMann[j].getDdDauer().doubleValue())); } } } if (bdIst.doubleValue() > 0) { bdKostenGesamt = bdKostenGesamt.add(zeitenMann[j].getBdKosten()); if (hmAblieferung.containsKey(zeitenMann[j].getArtikelIId())) { Object[] oZeile = hmAblieferung.get(zeitenMann[j].getArtikelIId()); oZeile[IST] = ((BigDecimal) oZeile[IST]).add(bdIst); oZeile[WERT] = ((BigDecimal) oZeile[WERT]).add(zeitenMann[j].getBdKosten()); hmAblieferung.put(zeitenMann[j].getArtikelIId(), oZeile); } else { Object[] oZeile = new Object[3]; oZeile[SOLL] = new BigDecimal(0.00); oZeile[IST] = bdIst; oZeile[WERT] = zeitenMann[j].getBdKosten(); hmAblieferung.put(zeitenMann[j].getArtikelIId(), oZeile); } } } Iterator<?> itTemp = hmAblieferung.keySet().iterator(); BigDecimal azWertDerAblieferung = new BigDecimal(0.00); while (itTemp.hasNext()) { Integer key = (Integer) itTemp.next(); Object[] oZeile = hmAblieferung.get(key); // Sollsatzgroesze ermitteln BigDecimal bdIstAblieferung = (BigDecimal) oZeile[IST]; // Vorherige uebrige Zeit dazuzaehlen if (hmUeberigeZeitderVorhergehendenAblieferung.containsKey(key)) { bdIstAblieferung = bdIstAblieferung .add((BigDecimal) hmUeberigeZeitderVorhergehendenAblieferung.get(key)); } BigDecimal bdSollAblieferung = (BigDecimal) oZeile[SOLL]; BigDecimal bdKostenAblieferung = (BigDecimal) oZeile[WERT]; if (bdUeberigeKostenderVorhergehendenAblieferung.containsKey(key)) { bdKostenAblieferung = bdKostenAblieferung .add((BigDecimal) bdUeberigeKostenderVorhergehendenAblieferung.get(key)); } if (bdSollAblieferung.doubleValue() != 0) { // Sollsatzgroesse ermitteln BigDecimal sollsatzgroesse = bdSollAblieferung .divide(losDto.getNLosgroesse(), 4, BigDecimal.ROUND_HALF_EVEN) .multiply(losablieferungDto.getNMenge()); BigDecimal maxSollsatzKosten = bdSollAblieferung.multiply(losablieferungDto.getNMenge()); BigDecimal tatsaechlicheKosten = null; if (bdKostenAblieferung.doubleValue() > maxSollsatzKosten.doubleValue()) { tatsaechlicheKosten = maxSollsatzKosten; } else { tatsaechlicheKosten = bdKostenAblieferung; } azWertDerAblieferung = azWertDerAblieferung.add(tatsaechlicheKosten); if (bdKostenAblieferung.doubleValue() > azWertDerAblieferung.doubleValue()) { bdUeberigeKostenderVorhergehendenAblieferung.put(key, bdKostenAblieferung.subtract(azWertDerAblieferung)); } } else { azWertDerAblieferung = azWertDerAblieferung.add(bdKostenAblieferung); } System.out.println(azWertDerAblieferung); } bdVerbrauchteKostenGesamt = bdVerbrauchteKostenGesamt.add(azWertDerAblieferung); // Wenn ERLEDIGT oder Ueberliefert //Den Rest hinzufuegen if (bErledigtOderUeberliefert && i == losablieferungDtos.length - 1) { BigDecimal restKosten = bdKostenGesamt.subtract(bdVerbrauchteKostenGesamt); azWertDerAblieferung = azWertDerAblieferung.add(restKosten); } if (losablieferungDto.getNMenge().doubleValue() != 0) { azWertDerAblieferung = azWertDerAblieferung.divide(losablieferungDto.getNMenge(), 4, BigDecimal.ROUND_HALF_EVEN); } Losablieferung losablieferung = em.find(Losablieferung.class, losablieferungDto.getIId()); if (losablieferung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } losablieferung.setNArbeitszeitwert(azWertDerAblieferung); losablieferung.setNArbeitszeitwertdetailliert(azWertDerAblieferung); } } catch (RemoteException ex1) { throwEJBExceptionLPRespectOld(ex1); } }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
private void bucheNegativesollmengenAufLager(LosDto losDto, BigDecimal bdGesamtAbgeliefert, TheClientDto theClientDto) {//from w ww.java2 s .c o m Query query = em.createNamedQuery("LossollmaterialfindByLosIId"); query.setParameter(1, losDto.getIId()); Collection<?> cl = query.getResultList(); LossollmaterialDto[] sollmat = assembleLossollmaterialDtos(cl); Integer lagerIId = null; ParametermandantDto parametermandantDto; try { parametermandantDto = getParameterFac().getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_NEGATIVE_SOLLMENGEN_BUCHEN_AUF_ZIELLAGER); if (((java.lang.Boolean) parametermandantDto.getCWertAsObject()).booleanValue() == true) { lagerIId = losDto.getLagerIIdZiel(); } else { // Laeger des Loses LoslagerentnahmeDto[] laeger = loslagerentnahmeFindByLosIId(losDto.getIId()); lagerIId = laeger[0].getLagerIId(); } } catch (RemoteException e) { throwEJBExceptionLPRespectOld(e); } for (int i = 0; i < sollmat.length; i++) { LossollmaterialDto sollmatZeile = sollmat[i]; if (sollmatZeile.getNMenge().doubleValue() < 0) { // Sollsatzgroesse BigDecimal ssg = sollmatZeile.getNMenge().abs().divide(losDto.getNLosgroesse(), 10, BigDecimal.ROUND_HALF_EVEN); BigDecimal soll = bdGesamtAbgeliefert.multiply(ssg); BigDecimal ausgegeben = getAusgegebeneMenge(sollmatZeile.getIId(), null, theClientDto).abs(); BigDecimal mengeNeu = soll.subtract(ausgegeben); if (mengeNeu.doubleValue() > 0) { LosistmaterialDto istmat = new LosistmaterialDto(); istmat.setLagerIId(lagerIId); istmat.setLossollmaterialIId(sollmat[i].getIId()); istmat.setNMenge(mengeNeu.abs()); istmat.setBAbgang(Helper.boolean2Short(false)); createLosistmaterial(istmat, null, theClientDto); } } } }
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, ""); }/* www .ja v a 2s. co m*/ 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
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 {/*from ww w. j av a 2s . c om*/ // 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
/** * Ist-Arbeitszeit fuer eine Ablieferung pro abgelieferter Einheit * bestimmen./*from ww w . ja va2 s .c o m*/ * * @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
public AuftragNachkalkulationDto getWerteAusUnterlosen(LosDto losDto, BigDecimal bdMenge, AuftragNachkalkulationDto abNachkalkulationDto, TheClientDto theClientDto) { LossollmaterialDto[] sollmat = lossollmaterialFindByLosIId(losDto.getIId()); try {/*from ww w.ja va 2 s. c o m*/ 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; }