List of usage examples for java.math BigDecimal compareTo
@Override public int compareTo(BigDecimal val)
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
/** * Ist-Arbeitszeit fuer eine Ablieferung pro abgelieferter Einheit * bestimmen./*from w w w.j a v a 2 s.co 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
@TransactionAttribute(TransactionAttributeType.NEVER) public KapazitaetsvorschauDto getKapazitaetsvorschau(TheClientDto theClientDto) throws EJBExceptionLP { KapazitaetsvorschauDto kapDto = null; Session session = null;//from www.j a v a2s . 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
@TransactionTimeout(5000) public TreeMap<String, Object[]> aktualisiereLoseAusStueckliste(Integer stuecklisteIId, TheClientDto theClientDto) {/* w ww.j ava2 s . co m*/ TreeMap<String, Object[]> tmAktualisierteLose = new TreeMap<String, Object[]>(); ParametermandantDto parameter = null; try { parameter = getParameterFac().getMandantparameter(theClientDto.getSMandantenwaehrung(), ParameterFac.KATEGORIE_STUECKLISTE, ParameterFac.PARAMETER_BEI_LOS_AKTUALISIERUNG_MATERIAL_NACHBUCHEN); } catch (RemoteException e1) { throwEJBExceptionLPRespectOld(e1); } boolean bMaterialNachbuchen = (Boolean) parameter.getCWertAsObject(); Session session = FLRSessionFactory.getFactory().openSession(); String queryString = "SELECT l FROM FLRLosReport l WHERE l.status_c_nr IN ('" + LocaleFac.STATUS_ANGELEGT + "','" + LocaleFac.STATUS_AUSGEGEBEN + "','" + LocaleFac.STATUS_IN_PRODUKTION + "') AND l.mandant_c_nr='" + theClientDto.getMandant() + "' AND l.stueckliste_i_id IS NOT NULL "; if (stuecklisteIId != null) { queryString += " AND l.stueckliste_i_id=" + stuecklisteIId; } org.hibernate.Query query = session.createQuery(queryString); List<?> results = query.list(); Iterator<?> resultListIterator = results.iterator(); while (resultListIterator.hasNext()) { FLRLosReport los = (FLRLosReport) resultListIterator.next(); if (los.getStatus_c_nr().equals(LocaleFac.STATUS_ANGELEGT)) { aktualisiereSollArbeitsplanAusStueckliste(los.getI_id(), theClientDto); aktualisiereSollMaterialAusStueckliste(los.getI_id(), theClientDto); } else { LoslagerentnahmeDto[] laeger = loslagerentnahmeFindByLosIId(los.getI_id()); aktualisiereSollArbeitsplanAusStueckliste(los.getI_id(), theClientDto); // Alle stuecklistenpositionen holen + Hilfsstueckliste und dann // verdichten HashMap<Integer, StuecklistepositionDto> hmStuecklistenposition = getFertigungFac() .holeAlleLossollmaterialFuerStuecklistenAktualisierung(los.getStueckliste_i_id(), los.getN_losgroesse(), 0, null, theClientDto); LossollmaterialDto[] sollmatDtos = lossollmaterialFindByLosIId(los.getI_id()); for (int i = 0; i < sollmatDtos.length; i++) { try { if (!Helper.short2boolean(sollmatDtos[i].getBNachtraeglich())) { // War vor SP2000 --> && // sollmatDtos[i].getNMenge().doubleValue() > 0 LosistmaterialDto[] istmaterialDtos = losistmaterialFindByLossollmaterialIId( sollmatDtos[i].getIId()); BigDecimal bdAusgegeben = getAusgegebeneMenge(sollmatDtos[i].getIId(), null, theClientDto); ArtikelDto artikelDto = getArtikelFac() .artikelFindByPrimaryKeySmall(sollmatDtos[i].getArtikelIId(), theClientDto); Object[] oZeileReport = new Object[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ANZAHL_SPALTEN]; oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_LOSNUMMER] = los .getC_nr(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ARTIKELNUMMER] = artikelDto .getCNr(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_EINHEIT] = artikelDto .getEinheitCNr(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = sollmatDtos[i] .getNMenge(); if (artikelDto.getArtikelsprDto() != null) { oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEZEICHNUNG] = artikelDto .getArtikelsprDto().getCBez(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ZUSATZBEZEICHNUNG] = artikelDto .getArtikelsprDto().getCZbez(); } if (hmStuecklistenposition.containsKey(sollmatDtos[i].getArtikelIId())) { // Mengen abziehen StuecklistepositionDto stklPos = hmStuecklistenposition .get(sollmatDtos[i].getArtikelIId()); sollmatDtos[i].setNMenge(stklPos.getNMenge()); Lossollmaterial sollmatBean = em.find(Lossollmaterial.class, sollmatDtos[i].getIId()); BigDecimal diffSollmenge = stklPos.getNMenge().subtract(sollmatBean.getNMenge()); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = diffSollmenge; sollmatBean.setNMenge(stklPos.getNMenge()); sollmatBean.setIBeginnterminoffset(stklPos.getIBeginnterminoffset()); BigDecimal diff = bdAusgegeben.subtract(sollmatDtos[i].getNMenge()); if (diff.doubleValue() == 0 && diffSollmenge.doubleValue() != 0) { oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal( 0); tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); } else { if (bMaterialNachbuchen == true || (bMaterialNachbuchen == false && Helper .short2boolean(artikelDto.getBLagerbewirtschaftet()) == false)) { if (Helper.short2boolean(artikelDto.getBSeriennrtragend()) || Helper.short2boolean(artikelDto.getBChargennrtragend())) { sollmatDtos[i] = null; oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal( 0); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEMERKUNG] = "Der Artikel ist SNR/CNR behaftet und wurde nicht ber\u00FCcksichtigt."; tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); continue; } if (diff.doubleValue() > 0) { for (int j = 0; j < istmaterialDtos.length; j++) { if (diff.doubleValue() > 0) { BigDecimal istmenge = istmaterialDtos[j].getNMenge(); BigDecimal bdMengeNeu = null; if (diff.doubleValue() > istmenge.doubleValue()) { bdMengeNeu = new BigDecimal(0); diff = diff.subtract(istmenge); } else { bdMengeNeu = istmenge.subtract(diff); diff = new BigDecimal(0); } updateLosistmaterialMenge(istmaterialDtos[j].getIId(), bdMengeNeu, theClientDto); } } BigDecimal bdAusgegebenNachher = getAusgegebeneMenge( sollmatDtos[i].getIId(), null, theClientDto); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdAusgegebenNachher .subtract(bdAusgegeben); tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); } else { BigDecimal bdAbzubuchendeMenge = diff.abs(); for (int j = 0; j < laeger.length; j++) { // wenn noch was abzubuchen ist // (Menge > // 0) if (bdAbzubuchendeMenge.compareTo(new BigDecimal(0)) == 1) { BigDecimal bdLagerstand = null; if (Helper .short2boolean(artikelDto.getBLagerbewirtschaftet())) { bdLagerstand = getLagerFac().getLagerstand( artikelDto.getIId(), laeger[j].getLagerIId(), theClientDto); } else { bdLagerstand = new BigDecimal(999999999); } // wenn ein lagerstand da // ist if (bdLagerstand.compareTo(new BigDecimal(0)) == 1) { BigDecimal bdMengeVonLager; if (bdLagerstand.compareTo(bdAbzubuchendeMenge) == 1) { // wenn mehr als // ausreichend // auf // lager bdMengeVonLager = bdAbzubuchendeMenge; } else { // dann nur den // lagerstand // entnehmen bdMengeVonLager = bdLagerstand; } LosistmaterialDto istmat = new LosistmaterialDto(); istmat.setLagerIId(laeger[j].getLagerIId()); istmat.setLossollmaterialIId(sollmatDtos[i].getIId()); istmat.setNMenge(bdMengeVonLager); if (sollmatDtos[i].getNMenge().doubleValue() > 0) { istmat.setBAbgang(Helper.boolean2Short(true)); } else { istmat.setBAbgang(Helper.boolean2Short(false)); } // ist-wert anlegen und // lagerbuchung // durchfuehren createLosistmaterial(istmat, null, theClientDto); // menge reduzieren bdAbzubuchendeMenge = bdAbzubuchendeMenge .subtract(bdMengeVonLager); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdMengeVonLager; tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); } else { oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal( 0); tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); } } } } } } hmStuecklistenposition.remove(sollmatDtos[i].getArtikelIId()); getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS, sollmatDtos[i].getIId(), false, theClientDto); } else { // Los-Sollmaterial loeschen verknuepfungZuBestellpositionUndArbeitsplanLoeschen(sollmatDtos[i].getIId()); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = sollmatDtos[i] .getNMenge().multiply(new BigDecimal(-1)); if (bMaterialNachbuchen == true || istmaterialDtos.length == 0 || (bMaterialNachbuchen == false && Helper .short2boolean(artikelDto.getBLagerbewirtschaftet()) == false)) { for (int j = 0; j < istmaterialDtos.length; j++) { removeLosistmaterial(istmaterialDtos[j], theClientDto); } removeLossollmaterial(sollmatDtos[i], theClientDto); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdAusgegeben .multiply(new BigDecimal(-1)); tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); } else { sollmatDtos[i].setNMenge(new BigDecimal(0)); updateLossollmaterial(sollmatDtos[i], theClientDto); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal( 0); tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); } getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS, sollmatDtos[i].getIId(), false, theClientDto); sollmatDtos[i] = null; } } } catch (RemoteException e) { throwEJBExceptionLPRespectOld(e); } } // Nun alle uebrigen Sollmaterial=0 loeschen for (int i = 0; i < sollmatDtos.length; i++) { if (sollmatDtos[i] != null && !Helper.short2boolean(sollmatDtos[i].getBNachtraeglich()) && sollmatDtos[i].getNMenge().doubleValue() == 0) { // Los-Sollmaterial loeschen LosistmaterialDto[] istmaterialDtos = losistmaterialFindByLossollmaterialIId( sollmatDtos[i].getIId()); boolean bAlleIstMaterialSindNull = true; for (int z = 0; z < istmaterialDtos.length; z++) { if (istmaterialDtos[z].getNMenge().doubleValue() != 0) { bAlleIstMaterialSindNull = false; } } ArtikelDto artikelDto = getArtikelFac() .artikelFindByPrimaryKeySmall(sollmatDtos[i].getArtikelIId(), theClientDto); if (bMaterialNachbuchen == true || bAlleIstMaterialSindNull == true || (bMaterialNachbuchen == false && Helper.short2boolean(artikelDto.getBLagerbewirtschaftet()) == false)) { BigDecimal bdAusgegeben = getAusgegebeneMenge(sollmatDtos[i].getIId(), null, theClientDto); for (int j = 0; j < istmaterialDtos.length; j++) { removeLosistmaterial(istmaterialDtos[j], theClientDto); } verknuepfungZuBestellpositionUndArbeitsplanLoeschen(sollmatDtos[i].getIId()); removeLossollmaterial(sollmatDtos[i], theClientDto); if (bdAusgegeben.doubleValue() != 0) { Object[] oZeileReport = new Object[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ANZAHL_SPALTEN]; oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_LOSNUMMER] = los .getC_nr(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ARTIKELNUMMER] = artikelDto .getCNr(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_EINHEIT] = artikelDto .getEinheitCNr(); if (artikelDto.getArtikelsprDto() != null) { oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEZEICHNUNG] = artikelDto .getArtikelsprDto().getCBez(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ZUSATZBEZEICHNUNG] = artikelDto .getArtikelsprDto().getCZbez(); } oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdAusgegeben .multiply(new BigDecimal(-1)); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = new BigDecimal( 0); tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); } } } } // Alle noch nicht verbrauchten neu eintragen Iterator it = hmStuecklistenposition.keySet().iterator(); while (it.hasNext()) { try { LagerDto lagerDtoMandant = getLagerFac().getHauptlagerDesMandanten(theClientDto); Integer artikelIId = (Integer) it.next(); StuecklistepositionDto stklPos = hmStuecklistenposition.get(artikelIId); BigDecimal bdAbzubuchendeMenge = stklPos.getNMenge(); ArtikelDto artikelDto = getArtikelFac() .artikelFindByPrimaryKeySmall(stklPos.getArtikelIId(), theClientDto); Object[] oZeileReport = new Object[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ANZAHL_SPALTEN]; oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_LOSNUMMER] = los .getC_nr(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ARTIKELNUMMER] = artikelDto .getCNr(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_EINHEIT] = artikelDto .getEinheitCNr(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_SOLLMENGE] = stklPos .getNMenge(); if (artikelDto.getArtikelsprDto() != null) { oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEZEICHNUNG] = artikelDto .getArtikelsprDto().getCBez(); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_ZUSATZBEZEICHNUNG] = artikelDto .getArtikelsprDto().getCZbez(); } LossollmaterialDto losMatDto = new LossollmaterialDto(); losMatDto.setArtikelIId(stklPos.getArtikelIId()); losMatDto.setBNachtraeglich(Helper.boolean2Short(false)); losMatDto.setCKommentar(stklPos.getCKommentar()); losMatDto.setCPosition(stklPos.getCPosition()); losMatDto.setFDimension1(stklPos.getFDimension1()); losMatDto.setFDimension2(stklPos.getFDimension2()); losMatDto.setFDimension3(stklPos.getFDimension3()); losMatDto.setILfdnummer(stklPos.getILfdnummer()); losMatDto.setEinheitCNr(stklPos.getEinheitCNr()); losMatDto.setLosIId(los.getI_id()); losMatDto.setMontageartIId(stklPos.getMontageartIId()); losMatDto.setNMenge(stklPos.getNMenge()); losMatDto.setISort(new Integer(0)); BigDecimal bdSollpreis = getLagerFac().getGemittelterGestehungspreisEinesLagers( stklPos.getArtikelIId(), lagerDtoMandant.getIId(), theClientDto); losMatDto.setNSollpreis(bdSollpreis); Integer sollmatIId = createLossollmaterial(losMatDto, theClientDto).getIId(); if (bMaterialNachbuchen == true || (bMaterialNachbuchen == false && Helper.short2boolean(artikelDto.getBLagerbewirtschaftet()) == false)) { if (Helper.short2boolean(artikelDto.getBSeriennrtragend()) || Helper.short2boolean(artikelDto.getBChargennrtragend())) { oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_BEMERKUNG] = "Der Artikel ist SNR/CNR behaftet und wurde nicht ber\u00FCcksichtigt."; tmAktualisierteLose.put(los.getC_nr() + artikelDto.getCNr(), oZeileReport); continue; } for (int j = 0; j < laeger.length; j++) { // wenn noch was abzubuchen ist // (Menge > // 0) if (bdAbzubuchendeMenge.compareTo(new BigDecimal(0)) == 1) { BigDecimal bdLagerstand = null; if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) { bdLagerstand = getLagerFac().getLagerstand(artikelDto.getIId(), laeger[j].getLagerIId(), theClientDto); } else { bdLagerstand = new BigDecimal(999999999); } // wenn ein lagerstand da ist if (bdLagerstand.compareTo(new BigDecimal(0)) == 1) { BigDecimal bdMengeVonLager; if (bdLagerstand.compareTo(bdAbzubuchendeMenge) == 1) { // wenn mehr als // ausreichend // auf // lager bdMengeVonLager = bdAbzubuchendeMenge; } else { // dann nur den // lagerstand // entnehmen bdMengeVonLager = bdLagerstand; } LosistmaterialDto istmat = new LosistmaterialDto(); istmat.setLagerIId(laeger[j].getLagerIId()); istmat.setLossollmaterialIId(sollmatIId); istmat.setNMenge(bdMengeVonLager); if (stklPos.getNMenge().doubleValue() > 0) { istmat.setBAbgang(Helper.boolean2Short(true)); } else { istmat.setBAbgang(Helper.boolean2Short(false)); } // ist-wert anlegen und // lagerbuchung // durchfuehren createLosistmaterial(istmat, null, theClientDto); // menge reduzieren bdAbzubuchendeMenge = bdAbzubuchendeMenge.subtract(bdMengeVonLager); oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = bdMengeVonLager; tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); } } } } else { oZeileReport[StuecklisteReportFac.REPORT_STUECKLISTE_LOSEAKTUALISIERT_KORREKTUR_AUSGABEMENGE] = new BigDecimal( 0); tmAktualisierteLose = add2TreeMap(tmAktualisierteLose, los.getC_nr() + artikelDto.getCNr(), oZeileReport); } getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS, losMatDto.getIId(), false, theClientDto); } catch (RemoteException e) { throwEJBExceptionLPRespectOld(e); } } // Los aktualisieren Los losUpd = em.find(Los.class, los.getI_id()); losUpd.setTAktualisierungstueckliste(getTimestamp()); } } return tmAktualisierteLose; }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
public void bucheMaterialAufLos(LosDto losDto, BigDecimal menge, boolean bHandausgabe, boolean bNurFehlmengenAnlegenUndReservierungenLoeschen, boolean bUnterstuecklistenAbbuchen, TheClientDto theClientDto, ArrayList<BucheSerienChnrAufLosDto> bucheSerienChnrAufLosDtos, boolean throwExceptionWhenCreate) { try {/*from w ww . ja v a2 s . c o m*/ Query query = em.createNamedQuery("LossollmaterialfindByLosIId"); query.setParameter(1, losDto.getIId()); Collection<?> cl = query.getResultList(); // if (cl.isEmpty()) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, null); // } LossollmaterialDto[] sollmat = assembleLossollmaterialDtos(cl); LosablieferungDto[] dtos = losablieferungFindByLosIId(losDto.getIId(), false, theClientDto); BigDecimal bdBereitsabgeliefert = new BigDecimal(0); for (int i = 0; i < dtos.length; i++) { bdBereitsabgeliefert = bdBereitsabgeliefert.add(dtos[i].getNMenge()); } // PJ18216 boolean bNichtLagerbewSofortAusgeben = false; try { ParametermandantDto parameterM = getParameterFac().getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_NICHT_LAGERBEWIRTSCHAFTETE_SOFORT_AUSGEBEN); bNichtLagerbewSofortAusgeben = ((Boolean) parameterM.getCWertAsObject()).booleanValue(); } catch (RemoteException ex) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex); } // Laeger des Loses LoslagerentnahmeDto[] laeger = loslagerentnahmeFindByLosIId(losDto.getIId()); // nun vom lager abbuchen for (int i = 0; i < sollmat.length; i++) { ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(sollmat[i].getArtikelIId(), theClientDto); // seriennummerntragende werden jetzt gar nicht gebucht if (!bNurFehlmengenAnlegenUndReservierungenLoeschen) { if (!bHandausgabe || (bHandausgabe == true && bNichtLagerbewSofortAusgeben == true)) { // PJ18216 if (bHandausgabe == true && bNichtLagerbewSofortAusgeben == true) { if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) { continue; } } StuecklisteDto stuecklisteDto = getStuecklisteFac() .stuecklisteFindByMandantCNrArtikelIIdOhneExc(artikelDto.getIId(), theClientDto); if (bUnterstuecklistenAbbuchen == false && stuecklisteDto != null) { } else { BigDecimal bdAbzubuchendeMenge = new BigDecimal(0.0000); if (menge == null) { bdAbzubuchendeMenge = sollmat[i].getNMenge(); } else { if (losDto.getNLosgroesse().doubleValue() != 0) { BigDecimal sollsatzGroesse = sollmat[i].getNMenge() .divide(losDto.getNLosgroesse(), 10, BigDecimal.ROUND_HALF_EVEN); sollsatzGroesse = Helper.rundeKaufmaennisch(sollsatzGroesse, 3); BigDecimal bdBereitsausgegeben = getAusgegebeneMenge(sollmat[i].getIId(), null, theClientDto); BigDecimal bdGesamtmenge = Helper.rundeKaufmaennisch( bdBereitsabgeliefert.add(menge).multiply(sollsatzGroesse), 4); if (bdGesamtmenge.subtract(bdBereitsausgegeben).doubleValue() > 0) { bdAbzubuchendeMenge = bdGesamtmenge.subtract(bdBereitsausgegeben); } else { if (bdGesamtmenge.doubleValue() < 0) { bdAbzubuchendeMenge = bdGesamtmenge.subtract(bdBereitsausgegeben).abs(); } } } } // wg. PJ 15370 if (sollmat[i].getNMenge().doubleValue() > 0) { if (!Helper.short2boolean(artikelDto.getBSeriennrtragend()) && !Helper.short2boolean(artikelDto.getBChargennrtragend())) { for (int j = 0; j < laeger.length; j++) { // wenn noch was abzubuchen ist (Menge > // 0) if (bdAbzubuchendeMenge.compareTo(new BigDecimal(0)) == 1) { BigDecimal bdLagerstand = null; if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) { // PJ18290 boolean bImmerAusreichendVerfuegbar = false; try { ParametermandantDto parameterM = getParameterFac() .getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_ARTIKEL, ParameterFac.PARAMETER_LAGER_IMMER_AUSREICHEND_VERFUEGBAR); bImmerAusreichendVerfuegbar = ((Boolean) parameterM .getCWertAsObject()).booleanValue(); } catch (RemoteException ex) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex); } if (bImmerAusreichendVerfuegbar == true) { bdLagerstand = new BigDecimal(999999999); } else { bdLagerstand = getLagerFac().getLagerstand(artikelDto.getIId(), laeger[j].getLagerIId(), theClientDto); } } else { bdLagerstand = new BigDecimal(999999999); } // wenn ein lagerstand da ist if (bdLagerstand.compareTo(new BigDecimal(0)) == 1) { BigDecimal bdMengeVonLager; if (bdLagerstand.compareTo(bdAbzubuchendeMenge) == 1) { // wenn mehr als ausreichend // auf // lager bdMengeVonLager = bdAbzubuchendeMenge; } else { // dann nur den lagerstand // entnehmen bdMengeVonLager = bdLagerstand; } LosistmaterialDto istmat = new LosistmaterialDto(); istmat.setLagerIId(laeger[j].getLagerIId()); istmat.setLossollmaterialIId(sollmat[i].getIId()); istmat.setNMenge(bdMengeVonLager); if (sollmat[i].getNMenge().doubleValue() > 0) { istmat.setBAbgang(Helper.boolean2Short(true)); } else { istmat.setBAbgang(Helper.boolean2Short(false)); } // ist-wert anlegen und // lagerbuchung // durchfuehren createLosistmaterial(istmat, null, theClientDto); // menge reduzieren bdAbzubuchendeMenge = bdAbzubuchendeMenge.subtract(bdMengeVonLager); } } } } else { if (bucheSerienChnrAufLosDtos != null) { for (int j = 0; j < bucheSerienChnrAufLosDtos.size(); j++) { BucheSerienChnrAufLosDto dtoTemp = bucheSerienChnrAufLosDtos.get(j); if (dtoTemp.getLossollmaterialIId().equals(sollmat[i].getIId())) { LosistmaterialDto istmat = new LosistmaterialDto(); istmat.setLagerIId(dtoTemp.getLagerIId()); istmat.setLossollmaterialIId(dtoTemp.getLossollmaterialIId()); istmat.setNMenge(dtoTemp.getNMenge()); if (sollmat[i].getNMenge().doubleValue() > 0) { istmat.setBAbgang(Helper.boolean2Short(true)); } else { istmat.setBAbgang(Helper.boolean2Short(false)); } // ist-wert anlegen und // lagerbuchung // durchfuehren createLosistmaterial(istmat, dtoTemp.getCSeriennrChargennr(), theClientDto); } } } } } } } } // Reservierung loeschen removeReservierung(artikelDto, sollmat[i].getIId()); // Fehlmenge anlegen getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS, sollmat[i].getIId(), throwExceptionWhenCreate, theClientDto); } } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex); // } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } }
From source file:ca.oson.json.Oson.java
private <E, R> BigDecimal json2BigDecimalDefault(FieldData objectDTO) { E value = (E) objectDTO.valueToProcess; Class<R> returnType = objectDTO.returnType; boolean required = objectDTO.required(); Long min = objectDTO.getMin(); Long max = objectDTO.getMax(); boolean json2Java = objectDTO.json2Java; if (getDefaultType() == JSON_INCLUDE.DEFAULT || required) { BigDecimal defaultValue = (BigDecimal) objectDTO.getDefaultValue(); if (defaultValue != null) { if (min != null && defaultValue.compareTo(new BigDecimal(min)) < 0) { return new BigDecimal(min); }/* w w w. jav a 2 s. co m*/ if (max != null && defaultValue.compareTo(new BigDecimal(max)) > 0) { return new BigDecimal(max); } return defaultValue; } if (min != null && DefaultValue.bigDecimal.compareTo(new BigDecimal(min)) < 0) { return new BigDecimal(min); } return DefaultValue.bigDecimal; } return null; }
From source file:com.turborep.turbotracker.vendor.controller.VendorInvoiceBillController.java
@RequestMapping(value = "/addVendorInvoiceFromPO", method = RequestMethod.POST) public @ResponseBody Vebill addVendorInvoiceFromPO( @RequestParam(value = "recDateIdPO", required = false) String recDateIdPO, @RequestParam(value = "datePO", required = false) String datePO, @RequestParam(value = "duePO", required = false) String duePO, @RequestParam(value = "shipviaPO", required = false) Integer shipviaPO, @RequestParam(value = "vendorInvoicePO", required = false) String vendorInvoicePO, @RequestParam(value = "apacctPO", required = false) Integer apacctPO, @RequestParam(value = "postdatePO", required = false) String postdatePO, @RequestParam(value = "postDate1PO", required = false) String postDate1PO, @RequestParam(value = "shipDatePO", required = false) String shipDatePO, @RequestParam(value = "proPO", required = false) String proPO, @RequestParam(value = "subtotalGeneralId", required = false) BigDecimal subtotalGeneralId, @RequestParam(value = "freightGeneralId", required = false) BigDecimal freightGeneralId, @RequestParam(value = "taxGeneralId", required = false) BigDecimal taxGeneralId, @RequestParam(value = "totalGeneralId", required = false) BigDecimal totalGeneralId, @RequestParam(value = "balDuePO", required = false) BigDecimal balDuePO, @RequestParam(value = "vepoId", required = false) Integer vepoId, @RequestParam(value = "veBillIdPO", required = false) Integer veBillIdPO, @RequestParam(value = "prMasterIDPO", required = false) Integer prMasterIDPO, @RequestParam(value = "rxMasterIDPayablePO", required = false) Integer rxMasterIDPayablePO, @RequestParam(value = "buttonValue", required = false) String buttonValue, @RequestParam(value = "updatePO", required = false) String updatePO, @RequestParam(value = "reason", required = false) String reason, @RequestParam(value = "coFiscalPeriodId", required = false) Integer periodId, @RequestParam(value = "coFiscalYearId", required = false) Integer yearId, @RequestParam(value = "joreleasedetid", required = false) Integer joreleasedetid, @RequestParam(value = "operatorStatus", required = false) String operatorStatus, @RequestParam(value = "gridData", required = false) String gridData, @RequestParam(value = "delData[]", required = false) ArrayList<String> delData, ModelMap theModel, HttpSession theSession, HttpServletResponse theResponse, HttpServletRequest theRequest) throws IOException, JobException, ParseException, BankingException, CompanyException, MessagingException {//from w ww .j a v a2 s . c o m Vebill aVebill = new Vebill(); String result = null; Integer insertStatus = 0; logger.info("updatePO Status : " + updatePO + "REason" + reason); Vebilldetail vebilDetail = new Vebilldetail(); System.out.println("check vendor invoice bill contr"); UserBean aUserBean; aUserBean = (UserBean) theSession.getAttribute(SessionConstants.USER); try { if (recDateIdPO != null && recDateIdPO != "") { aVebill.setReceiveDate(DateUtils.parseDate(recDateIdPO.trim(), new String[] { "MM/dd/yyyy" })); } if (datePO != null && datePO != "") { aVebill.setBillDate(DateUtils.parseDate(datePO.trim(), new String[] { "MM/dd/yyyy" })); } if (duePO != null && duePO != "") { aVebill.setDueDate(DateUtils.parseDate(duePO.trim(), new String[] { "MM/dd/yyyy" })); } if (shipDatePO != null && shipDatePO != "") { aVebill.setShipDate(DateUtils.parseDate(shipDatePO.trim(), new String[] { "MM/dd/yyyy" })); } aVebill.setVeShipViaId(shipviaPO); aVebill.setApaccountId(apacctPO); aVebill.setInvoiceNumber(vendorInvoicePO); if (joreleasedetid != null) aVebill.setJoReleaseDetailId(joreleasedetid); if (rxMasterIDPayablePO != null) aVebill.setRxMasterId(rxMasterIDPayablePO); /*if(postdatePO != null && "on".equalsIgnoreCase(postdatePO)) { aVebill.setUsePostDate(true); if (postDate1PO != null && postDate1PO != "") { aVebill.setPostDate(DateUtils.parseDate(postDate1PO.trim(), new String[] { "MM/dd/yyyy" })); } } else { aVebill.setUsePostDate(false); if (postDate1PO != null && postDate1PO != "") { aVebill.setPostDate(DateUtils.parseDate(postDate1PO.trim(), new String[] { "MM/dd/yyyy" })); } }*/ aVebill.setTrackingNumber(proPO); aVebill.setReason(reason); aVebill.setBillAmount(subtotalGeneralId.add(freightGeneralId).add(taxGeneralId)); aVebill.setFreightAmount(freightGeneralId); aVebill.setTaxAmount(taxGeneralId); aVebill.setVePoid(vepoId); if ("Void".equalsIgnoreCase(buttonValue)) aVebill.setTransactionStatus(-1); else if ("Acct. HOLD".equalsIgnoreCase(buttonValue)) aVebill.setTransactionStatus(0); else if ("Open".equalsIgnoreCase(buttonValue)) aVebill.setTransactionStatus(1); else if ("Pmt. HOLD".equalsIgnoreCase(buttonValue)) aVebill.setTransactionStatus(-2); else aVebill.setTransactionStatus(2); aVebill.setAppliedAmount(new BigDecimal(0.00)); //aVebill.setFreightAmount(new BigDecimal(0.00)); //aVebill.setVePoid(1); aVebill.setApplied(false); aVebill.setVoid_(false); /*if(veBillIdPO != null && veBillIdPO != 0) aVebill.setVeBillId(veBillIdPO);*/ // Vebill theVebill = new Vebill(); // theVebill = vendorService.getVeBill(vepoId); aVebill.setCreatedById(aUserBean.getUserId()); aVebill.setCreatedOn(new Date()); /* * Added by Simon * Reason for Adding ID#573 for differentiating purchases. */ ArrayList<Prmaster> prMaster = new ArrayList<Prmaster>(); if (veBillIdPO == null || veBillIdPO == 0) { if (vepoId != null && vepoId != 0) { Vepo testvepo = itsJobService.getVepo(vepoId); if (testvepo != null && testvepo.getJoReleaseId() != null && testvepo.getJoReleaseId() != 0) { JoReleaseDetail thejoreleaseDetail = new JoReleaseDetail(); thejoreleaseDetail.setJoReleaseId(testvepo.getJoReleaseId()); thejoreleaseDetail.setShipDate(aVebill.getShipDate()); thejoreleaseDetail.setVendorInvoiceDate(aVebill.getBillDate()); thejoreleaseDetail.setVendorInvoiceAmount(aVebill.getBillAmount()); JoRelease thejorelease = itsJobService.getJoRelease(testvepo.getJoReleaseId()); if (thejorelease != null && thejorelease.getJoMasterId() != null && thejorelease.getJoMasterId() != 0) { thejoreleaseDetail.setJoMasterId(thejorelease.getJoMasterId()); } Integer joReleaseDetailID = itsJobService.addJoReleaseDetail(thejoreleaseDetail); aVebill.setJoReleaseDetailId(joReleaseDetailID); } } Integer veBillid = vendorService.insertVebill(aVebill); if (veBillid != null && veBillid != 0) aVebill.setVeBillId(veBillid); else aVebill.setVeBillId(veBillIdPO); if (delData != null) { for (String detailID : delData) { Vebilldetail aVebilldetail = new Vebilldetail(); System.out.println("delData[i]" + detailID); Integer vebillDetailID = JobUtil.ConvertintoInteger(detailID); aVebilldetail.setVeBillDetailId(vebillDetailID); aVebilldetail.setVeBillId(aVebill.getVeBillId()); vendorService.saveVebillDetail(aVebilldetail, "delete"); } } if (veBillIdPO == null || veBillIdPO == 0) { //insertStatus = vendorService.insertVebillDetail(veBillid,vepoId,aUserBean.getUserId()); JsonParser parser = new JsonParser(); if (gridData != null) { System.out.println("gridData" + gridData); JsonElement ele = parser.parse(gridData); JsonArray array = ele.getAsJsonArray(); System.out.println("array length==>" + array.size()); for (int ki = 0; ki < array.size() - 1; ki++) { JsonElement ele1 = array.get(ki); Prmaster master = new Prmaster(); JsonObject obj = ele1.getAsJsonObject(); String desc = obj.get("description").getAsString(); String note = obj.get("note").getAsString(); master.setItemCode(note); BigDecimal quantityOrder = obj.get("quantityOrdered").getAsBigDecimal(); Integer prMasterID = obj.get("prMasterId").getAsInt(); master.setPrMasterId(prMasterID); BigDecimal priceMultiplier = obj.get("priceMultiplier").getAsBigDecimal(); String unitCost_String = obj.get("unitCost").getAsString().replaceAll("\\$", ""); unitCost_String = unitCost_String.replaceAll(",", ""); BigDecimal unitCost = JobUtil.ConvertintoBigDecimal(unitCost_String); String quantityBilled_String = obj.get("quantityBilled").getAsString().replaceAll("\\$", ""); quantityBilled_String = quantityBilled_String.replaceAll(",", ""); BigDecimal quantityBilled = JobUtil.ConvertintoBigDecimal(quantityBilled_String); master.setLastCost(quantityBilled); Integer veBillDetailId = null; if (obj.get("veBillDetailId") != null && obj.get("veBillDetailId").getAsString() != "" && obj.get("veBillDetailId").getAsString().length() > 0) { veBillDetailId = obj.get("veBillDetailId").getAsInt(); } String Oper = "add"; if (veBillDetailId != null) { Oper = "edit"; } Integer vePODetailId = null; if (obj.get("vePodetailId") != null && obj.get("vePodetailId").getAsString() != "" && obj.get("vePodetailId").getAsString().length() > 0) { vePODetailId = obj.get("vePodetailId").getAsInt(); } Vebilldetail aVebilldetail = new Vebilldetail(); aVebilldetail.setVeBillDetailId(veBillDetailId); aVebilldetail.setDescription(desc); aVebilldetail.setNote(note); aVebilldetail.setQuantityBilled(quantityOrder); aVebilldetail.setPriceMultiplier(priceMultiplier); aVebilldetail.setUnitCost(unitCost); aVebilldetail.setVePodetailId(vePODetailId); aVebilldetail.setPrMasterId(prMasterID); aVebilldetail.setVeBillId(aVebill.getVeBillId()); if (obj.get("taxable").getAsString().equals("Yes")) aVebilldetail.setTaxable(true); else aVebilldetail.setTaxable(false); vendorService.saveVebillDetail(aVebilldetail, Oper); master.setInitialCost(freightGeneralId); prMaster.add(master); } } if ((prMaster.size() == 0) && (freightGeneralId.compareTo(BigDecimal.ZERO) != 0)) { Prmaster master = new Prmaster(); master.setInitialCost(freightGeneralId); prMaster.add(master); } prMaster.trimToSize(); vendorService.insertVebillHistory(aVebill.getVeBillId(), vepoId, aUserBean.getUserId()); vendorService.updateveBillHistory(aVebill.getVeBillId()); if (updatePO.equalsIgnoreCase("yes")) { vendorService.updateVepoStatus(vepoId, 2); } if (operatorStatus.equals("close")) { /* *Modified Signature by Simon *Reason for Modifying ID#573 for differentiating purchases */ itsGltransactionService.recieveVendorBill(prMaster, aVebill, insertStatus, yearId, periodId, aUserBean.getFullName()); } } } else { //update the edited vendor invoice if (!reason.equals("")) { // vendorService.rollbackupdatePrMaster(veBillIdPO); } aVebill.setVeBillId(veBillIdPO); System.out.println("delData" + delData); //functionality for delete the grid columns if (delData != null) { for (String detailID : delData) { Vebilldetail aVebilldetail = new Vebilldetail(); System.out.println("delData[i]" + detailID); Integer vebillDetailID = JobUtil.ConvertintoInteger(detailID); aVebilldetail.setVeBillDetailId(vebillDetailID); aVebilldetail.setVeBillId(aVebill.getVeBillId()); vendorService.saveVebillDetail(aVebilldetail, "delete"); } } JsonParser parser = new JsonParser(); if (gridData != null) { System.out.println("gridData" + gridData); JsonElement ele = parser.parse(gridData); JsonArray array = ele.getAsJsonArray(); System.out.println("array length==>" + array.size()); for (int ki = 0; ki < array.size() - 1; ki++) { JsonElement ele1 = array.get(ki); Prmaster master = new Prmaster(); JsonObject obj = ele1.getAsJsonObject(); String desc = obj.get("description").getAsString(); String note = obj.get("note").getAsString(); master.setItemCode(note); BigDecimal quantityOrder = obj.get("quantityOrdered").getAsBigDecimal(); Integer prMasterID = obj.get("prMasterId").getAsInt(); master.setPrMasterId(prMasterID); BigDecimal priceMultiplier = obj.get("priceMultiplier").getAsBigDecimal(); String unitCost_String = obj.get("unitCost").getAsString().replaceAll("\\$", ""); unitCost_String = unitCost_String.replaceAll(",", ""); BigDecimal unitCost = JobUtil.ConvertintoBigDecimal(unitCost_String); String quantityBilled_String = obj.get("quantityBilled").getAsString().replaceAll("\\$", ""); quantityBilled_String = quantityBilled_String.replaceAll(",", ""); BigDecimal quantityBilled = JobUtil.ConvertintoBigDecimal(quantityBilled_String); master.setLastCost(quantityBilled); Integer veBillDetailId = null; if (obj.get("veBillDetailId") != null && obj.get("veBillDetailId").getAsString() != "" && obj.get("veBillDetailId").getAsString().length() > 0) { veBillDetailId = obj.get("veBillDetailId").getAsInt(); } String Oper = "add"; if (veBillDetailId != null) { Oper = "edit"; } Integer vePODetailId = null; if (obj.get("vePodetailId") != null && obj.get("vePodetailId").getAsString() != "" && obj.get("vePodetailId").getAsString().length() > 0) { vePODetailId = obj.get("vePodetailId").getAsInt(); } Vebilldetail aVebilldetail = new Vebilldetail(); aVebilldetail.setVeBillDetailId(veBillDetailId); aVebilldetail.setDescription(desc); aVebilldetail.setNote(note); aVebilldetail.setQuantityBilled(quantityOrder); aVebilldetail.setPriceMultiplier(priceMultiplier); aVebilldetail.setUnitCost(unitCost); aVebilldetail.setVePodetailId(vePODetailId); aVebilldetail.setPrMasterId(prMasterID); aVebilldetail.setVeBillId(veBillIdPO); if (obj.get("taxable").getAsString().equals("Yes")) aVebilldetail.setTaxable(true); else aVebilldetail.setTaxable(false); vendorService.saveVebillDetail(aVebilldetail, Oper); master.setInitialCost(freightGeneralId); prMaster.add(master); } } if (prMaster.size() == 0) { Prmaster master = new Prmaster(); master.setInitialCost(freightGeneralId); prMaster.add(master); } prMaster.trimToSize(); if (!reason.equals("")) { Coledgersource aColedgersource = itsGltransactionService.getColedgersourceDetail("VB"); GlRollback glRollback = new GlRollback(); glRollback.setVeBillID(aVebill.getVeBillId()); glRollback.setCoLedgerSourceID(aColedgersource.getCoLedgerSourceId()); glRollback.setPeriodID(periodId); glRollback.setYearID(yearId); glRollback.setTransactionDate(aVebill.getBillDate()); itsGltransactionService.rollBackGlTransaction(glRollback); //vendorService.rollbackupdatePrMaster(veBillIdPO); } aVebill.setChangedById(aUserBean.getUserId()); aVebill.setChangedOn(new Date()); vendorService.insertVebill(aVebill); vendorService.updateveBillHistory(veBillIdPO); if (operatorStatus != null) if (veBillIdPO != null && veBillIdPO != 0 && operatorStatus.equals("close") && !buttonValue.equals("Void")) itsGltransactionService.recieveVendorBill(prMaster, aVebill, 0, yearId, periodId, aUserBean.getFullName()); } // throw new VendorException("Testing Exception"); } catch (VendorException e) { logger.error(e.getMessage()); theResponse.sendError(e.getItsErrorStatusCode(), e.getMessage()); theResponse.sendError(e.getItsErrorStatusCode(), e.getMessage()); Transactionmonitor transObj = new Transactionmonitor(); SendQuoteMail sendMail = new SendQuoteMail(); transObj.setHeadermsg("Transaction Log << " + e.getMessage() + " >>"); transObj.setTrackingId("<b>Invoice No:</b>" + aVebill.getInvoiceNumber() + "<br><b>RxMasterID:</b>" + aVebill.getRxMasterId()); transObj.setTimetotriggerd(new Date()); transObj.setJobStatus("Outside"); transObj.setUsername(aUserBean.getFullName() + "[" + aUserBean.getUserId() + "]"); StringWriter errors = new StringWriter(); e.printStackTrace(new PrintWriter(errors)); transObj.setDescription("Message :: " + errors.toString()); sendMail.sendTransactionInfo(transObj, theRequest); } /* Commented by Jenith on 2014-09-11 11:52 * catch (FinancePostingException e){ logger.error(e.getMessage()); theResponse.sendError(e.getItsErrorStatusCode(), e.getMessage()); } catch (ProductException e) { logger.error(e.getMessage()); }*/ return aVebill; }
From source file:ca.oson.json.Oson.java
private <E, R> String bigDecimal2Json(FieldData objectDTO) { if (objectDTO == null || objectDTO.json2Java) { return null; }//from w ww . ja v a2 s . co m E value = (E) objectDTO.valueToProcess; Class<R> returnType = objectDTO.returnType; if (value != null && value.toString().trim().length() > 0) { BigDecimal valueToProcess = null; String valueToReturn = null; if (value instanceof BigDecimal) { valueToProcess = (BigDecimal) value; } else { try { valueToProcess = new BigDecimal(value.toString().trim()); } catch (Exception ex) { } } if (valueToProcess != null) { try { Function function = objectDTO.getSerializer(); if (function != null) { try { if (function instanceof DataMapper2JsonFunction) { DataMapper classData = new DataMapper(returnType, value, objectDTO.classMapper, objectDTO.level, getPrettyIndentation()); return ((DataMapper2JsonFunction) function).apply(classData); } else if (function instanceof BigDecimal2JsonFunction) { return ((BigDecimal2JsonFunction) function).apply(valueToProcess); } else { Object returnedValue = null; if (function instanceof FieldData2JsonFunction) { FieldData2JsonFunction f = (FieldData2JsonFunction) function; FieldData fieldData = objectDTO.clone(); returnedValue = f.apply(fieldData); } else { returnedValue = function.apply(value); } if (returnedValue instanceof Optional) { returnedValue = ObjectUtil.unwrap(returnedValue); } if (returnedValue == null) { return null; } else if (returnedValue instanceof BigDecimal) { valueToProcess = (BigDecimal) returnedValue; } else { objectDTO.valueToProcess = returnedValue; return object2String(objectDTO); } } } catch (Exception e) { } } if (valueToProcess != null) { Long min = objectDTO.getMin(); Long max = objectDTO.getMax(); if (min != null && valueToProcess.compareTo(new BigDecimal(min)) < 0) { valueToProcess = new BigDecimal(min); } if (max != null && valueToProcess.compareTo(new BigDecimal(max)) > 0) { valueToProcess = new BigDecimal(max); } Integer precision = objectDTO.getPrecision(); Integer scale = objectDTO.getScale(); if (precision != null && precision < valueToProcess.precision()) { valueToProcess = (BigDecimal) NumberUtil.setPrecision(valueToProcess, precision, getRoundingMode()); if (scale != null) { valueToProcess = valueToProcess.setScale(scale, getRoundingMode()); } } else if (scale != null) { valueToProcess = valueToProcess.setScale(scale, getRoundingMode()); } return NumberUtil.appendingFloatingZero(NumberUtil.toPlainString(valueToProcess), this.isAppendingFloatingZero()); } } catch (Exception ex) { ex.printStackTrace(); } } } return bigDecimal2JsonDefault(objectDTO); }
From source file:ca.oson.json.Oson.java
private <E, R> BigDecimal json2BigDecimal(FieldData objectDTO) { if (objectDTO == null || !objectDTO.json2Java) { return null; }//from w w w .jav a 2 s . c o m E value = (E) objectDTO.valueToProcess; Class<R> returnType = objectDTO.returnType; if (value != null && value.toString().trim().length() > 0) { String valueToProcess = value.toString().trim(); BigDecimal valueToReturn = null; try { Function function = objectDTO.getDeserializer(); if (function != null) { try { Object returnedValue = null; if (function instanceof Json2DataMapperFunction) { DataMapper classData = new DataMapper(returnType, value, objectDTO.classMapper, objectDTO.level, getPrettyIndentation()); returnedValue = ((Json2DataMapperFunction) function).apply(classData); } else if (function instanceof Json2FieldDataFunction) { Json2FieldDataFunction f = (Json2FieldDataFunction) function; FieldData fieldData = objectDTO.clone(); returnedValue = f.apply(fieldData); } else if (function instanceof Json2BigDecimalFunction) { return ((Json2BigDecimalFunction) function).apply(valueToProcess); } else { returnedValue = function.apply(valueToProcess); } if (returnedValue instanceof Optional) { returnedValue = ObjectUtil.unwrap(returnedValue); } if (returnedValue == null) { return null; } else if (Number.class.isAssignableFrom(returnedValue.getClass()) || returnedValue.getClass().isPrimitive()) { if (returnedValue instanceof BigDecimal) { valueToReturn = (BigDecimal) returnedValue; } else if (returnedValue instanceof String) { valueToReturn = new BigDecimal((String) returnedValue); } else if (returnedValue instanceof Integer) { valueToReturn = new BigDecimal((Integer) returnedValue); } else if (returnedValue instanceof Long) { valueToReturn = new BigDecimal((Long) returnedValue); } else if (returnedValue instanceof Short) { valueToReturn = new BigDecimal((Short) returnedValue); } else if (returnedValue instanceof Double) { valueToReturn = new BigDecimal((Double) returnedValue); } else if (returnedValue instanceof Float) { valueToReturn = new BigDecimal((Float) returnedValue); } else if (returnedValue instanceof BigInteger) { valueToReturn = new BigDecimal((BigInteger) returnedValue); } else if (returnedValue instanceof Byte) { valueToReturn = new BigDecimal((Byte) returnedValue); } else if (returnedValue instanceof AtomicInteger) { valueToReturn = new BigDecimal(((AtomicInteger) returnedValue).intValue()); } else if (returnedValue instanceof AtomicLong) { valueToReturn = new BigDecimal(((AtomicLong) returnedValue).longValue()); } else { valueToReturn = new BigDecimal(((Number) returnedValue).doubleValue()); } } else if (returnedValue instanceof Character) { char c = (Character) returnedValue; valueToReturn = new BigDecimal(Character.getNumericValue((Character) returnedValue)); } else if (returnedValue instanceof Boolean) { if ((Boolean) returnedValue) valueToReturn = new BigDecimal(1); else valueToReturn = new BigDecimal(0); } else if (Enum.class.isAssignableFrom(returnedValue.getClass())) { valueToReturn = new BigDecimal((Integer) ((Enum) returnedValue).ordinal()); } else if (Date.class.isAssignableFrom(returnedValue.getClass())) { valueToReturn = new BigDecimal(((Date) returnedValue).getTime()); } else { valueToReturn = new BigDecimal((returnedValue.toString())); } return valueToReturn; } catch (Exception e) { e.printStackTrace(); } } else { valueToReturn = new BigDecimal(valueToProcess); } if (valueToReturn != null) { Long min = objectDTO.getMin(); Long max = objectDTO.getMax(); if (min != null && valueToReturn.compareTo(new BigDecimal(min)) < 0) { return new BigDecimal(min); } if (max != null && valueToReturn.compareTo(new BigDecimal(max)) > 0) { valueToReturn = new BigDecimal(max); } Integer precision = objectDTO.getPrecision(); if (precision != null && precision < valueToReturn.precision()) { valueToReturn = (BigDecimal) NumberUtil.setPrecision(valueToReturn, precision, getRoundingMode()); } Integer scale = objectDTO.getScale(); if (scale != null) { valueToReturn = valueToReturn.setScale(scale, getRoundingMode()); } return valueToReturn; } } catch (Exception ex) { //ex.printStackTrace(); } } return json2BigDecimalDefault(objectDTO); }
From source file:it.govpay.core.business.Rendicontazioni.java
public String downloadRendicontazioni(boolean deep) throws GovPayException { boolean errori = false; List<String> response = new ArrayList<String>(); try {//from w w w . jav a 2 s .c om GpThreadLocal.get().log("rendicontazioni.acquisizione"); DominiBD dominiBD = new DominiBD(this); StazioniBD stazioniBD = new StazioniBD(this); List<Stazione> lstStazioni = stazioniBD.getStazioni(); PspBD pspBD = new PspBD(this); List<Psp> lstPsp = pspBD.getPsp(); closeConnection(); for (Stazione stazione : lstStazioni) { List<TipoIdRendicontazione> flussiDaAcquisire = new ArrayList<TipoIdRendicontazione>(); setupConnection(GpThreadLocal.get().getTransactionId()); Intermediario intermediario = stazione.getIntermediario(this); NodoClient client = new NodoClient(intermediario, this); closeConnection(); if (deep) { DominioFilter filter = dominiBD.newFilter(); filter.setCodStazione(stazione.getCodStazione()); List<Dominio> lstDomini = dominiBD.findAll(filter); for (Dominio dominio : lstDomini) { List<String> sids = new ArrayList<String>(); for (Psp psp : lstPsp) { if (sids.contains(psp.getCodPsp())) continue; sids.add(psp.getCodPsp()); log.debug("Acquisizione dei flussi di rendicontazione dal psp [" + psp.getCodPsp() + "] per il dominio [" + dominio.getCodDominio() + "] in corso."); flussiDaAcquisire.addAll(chiediListaFr(client, psp, stazione, dominio)); } } } else { log.debug("Acquisizione dei flussi di rendicontazione per la stazione [" + stazione.getCodStazione() + "] in corso."); flussiDaAcquisire.addAll(chiediListaFr(client, null, stazione, null)); } // Scarto i flussi gia acquisiti setupConnection(GpThreadLocal.get().getTransactionId()); FrBD frBD = new FrBD(this); for (TipoIdRendicontazione idRendicontazione : flussiDaAcquisire) { if (frBD.exists(idRendicontazione.getIdentificativoFlusso())) flussiDaAcquisire.remove(idRendicontazione); } closeConnection(); for (TipoIdRendicontazione idRendicontazione : flussiDaAcquisire) { log.debug("Acquisizione flusso di rendicontazione " + idRendicontazione.getIdentificativoFlusso()); boolean hasFrAnomalia = false; String idTransaction2 = null; try { idTransaction2 = GpThreadLocal.get().openTransaction(); GpThreadLocal.get().getContext().getRequest() .addGenericProperty(new Property("codStazione", stazione.getCodStazione())); GpThreadLocal.get().getContext().getRequest().addGenericProperty( new Property("idFlusso", idRendicontazione.getIdentificativoFlusso())); GpThreadLocal.get().setupNodoClient(stazione.getCodStazione(), null, Azione.nodoChiediFlussoRendicontazione); NodoChiediFlussoRendicontazione richiestaFlusso = new NodoChiediFlussoRendicontazione(); richiestaFlusso.setIdentificativoIntermediarioPA( stazione.getIntermediario(this).getCodIntermediario()); richiestaFlusso.setIdentificativoStazioneIntermediarioPA(stazione.getCodStazione()); richiestaFlusso.setPassword(stazione.getPassword()); richiestaFlusso.setIdentificativoFlusso(idRendicontazione.getIdentificativoFlusso()); NodoChiediFlussoRendicontazioneRisposta risposta; try { risposta = client.nodoChiediFlussoRendicontazione(richiestaFlusso, stazione.getIntermediario(this).getDenominazione()); } catch (Exception e) { // Errore nella richiesta. Loggo e continuo con il prossimo flusso response.add(idRendicontazione.getIdentificativoFlusso() + "#Richiesta al nodo fallita: " + e + "."); log.error("Richiesta flusso rendicontazione [" + idRendicontazione.getIdentificativoFlusso() + "] fallita: " + e); GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoFail", e.getMessage()); errori = true; continue; } if (risposta.getFault() != null) { // Errore nella richiesta. Loggo e continuo con il prossimo flusso response.add(idRendicontazione.getIdentificativoFlusso() + "#Richiesta al nodo fallita: " + risposta.getFault().getFaultCode() + " " + risposta.getFault().getFaultString() + "."); log.error("Richiesta flusso rendicontazione [" + idRendicontazione.getIdentificativoFlusso() + "] fallita: " + risposta.getFault().getFaultCode() + " " + risposta.getFault().getFaultString()); GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoKo", risposta.getFault().getFaultCode(), risposta.getFault().getFaultString(), risposta.getFault().getDescription()); } else { byte[] tracciato = null; try { ByteArrayOutputStream output = new ByteArrayOutputStream(); DataHandler dh = risposta.getXmlRendicontazione(); dh.writeTo(output); tracciato = output.toByteArray(); } catch (IOException e) { response.add(idRendicontazione.getIdentificativoFlusso() + "#Lettura del flusso fallita: " + e + "."); log.error("Errore durante la lettura del flusso di rendicontazione", e); GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoFail", "Lettura del flusso fallita: " + e); errori = true; continue; } CtFlussoRiversamento flussoRendicontazione = null; try { flussoRendicontazione = JaxbUtils.toFR(tracciato); } catch (Exception e) { response.add(idRendicontazione.getIdentificativoFlusso() + "#Parsing del flusso fallita: " + e + "."); log.error("Errore durante il parsing del flusso di rendicontazione", e); GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoFail", "Errore durante il parsing del flusso di rendicontazione: " + e); errori = true; continue; } log.info("Ricevuto flusso rendicontazione per " + flussoRendicontazione.getDatiSingoliPagamenti().size() + " singoli pagamenti"); setupConnection(GpThreadLocal.get().getTransactionId()); GpThreadLocal.get().log("rendicontazioni.acquisizioneFlusso"); GpThreadLocal.get().getContext().getRequest().addGenericProperty(new Property("trn", flussoRendicontazione.getIdentificativoUnivocoRegolamento())); Fr fr = new Fr(); fr.setCodBicRiversamento(flussoRendicontazione.getCodiceBicBancaDiRiversamento()); fr.setCodFlusso(idRendicontazione.getIdentificativoFlusso()); fr.setIur(flussoRendicontazione.getIdentificativoUnivocoRegolamento()); fr.setDataAcquisizione(new Date()); fr.setDataFlusso(flussoRendicontazione.getDataOraFlusso()); fr.setDataRegolamento(flussoRendicontazione.getDataRegolamento()); fr.setNumeroPagamenti(flussoRendicontazione.getNumeroTotalePagamenti().longValue()); fr.setImportoTotalePagamenti(flussoRendicontazione.getImportoTotalePagamenti()); fr.setXml(tracciato); String codPsp = null, codDominio = null; try { codPsp = idRendicontazione.getIdentificativoFlusso().substring(10, idRendicontazione.getIdentificativoFlusso().indexOf("-", 10)); fr.setCodPsp(codPsp); log.debug("Identificativo PSP estratto dall'identificativo flusso: " + codPsp); AnagraficaManager.getPsp(this, codPsp); GpThreadLocal.get().getContext().getRequest() .addGenericProperty(new Property("codPsp", codPsp)); } catch (Exception e) { GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoPspNonCensito", codPsp == null ? "null" : codPsp); GpThreadLocal.get().getContext().getRequest().addGenericProperty( new Property("codPsp", codPsp == null ? "null" : codPsp)); fr.addAnomalia("007108", "L'identificativo PSP [" + codPsp + "] ricavato dal codice flusso non riferisce un PSP censito"); } Dominio dominio = null; try { codDominio = flussoRendicontazione.getIstitutoRicevente() .getIdentificativoUnivocoRicevente().getCodiceIdentificativoUnivoco(); fr.setCodDominio(codDominio); GpThreadLocal.get().getContext().getRequest() .addGenericProperty(new Property("codDominio", codDominio)); dominio = AnagraficaManager.getDominio(this, codDominio); } catch (Exception e) { if (codDominio == null) { codDominio = "????"; GpThreadLocal.get().getContext().getRequest() .addGenericProperty(new Property("codDominio", "null")); } GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoDominioNonCensito"); fr.addAnomalia("007109", "L'indentificativo ricevente [" + codDominio + "] del flusso non riferisce un Dominio censito"); } BigDecimal totaleImportiRendicontati = BigDecimal.ZERO; PagamentiBD pagamentiBD = new PagamentiBD(this); VersamentiBD versamentiBD = new VersamentiBD(this); IuvBD iuvBD = new IuvBD(this); for (CtDatiSingoliPagamenti dsp : flussoRendicontazione.getDatiSingoliPagamenti()) { String iur = dsp.getIdentificativoUnivocoRiscossione(); String iuv = dsp.getIdentificativoUnivocoVersamento(); BigDecimal importoRendicontato = dsp.getSingoloImportoPagato(); log.debug("Rendicontato (Esito " + dsp.getCodiceEsitoSingoloPagamento() + ") per un importo di (" + dsp.getSingoloImportoPagato() + ") [CodDominio: " + codDominio + "] [Iuv: " + dsp.getIdentificativoUnivocoVersamento() + "][Iur: " + iur + "]"); it.govpay.bd.model.Rendicontazione rendicontazione = new it.govpay.bd.model.Rendicontazione(); // Gestisco un codice esito non supportato try { rendicontazione.setEsito( EsitoRendicontazione.toEnum(dsp.getCodiceEsitoSingoloPagamento())); } catch (Exception e) { GpThreadLocal.get().log("rendicontazioni.esitoSconosciuto", iuv, iur, dsp.getCodiceEsitoSingoloPagamento() == null ? "null" : dsp.getCodiceEsitoSingoloPagamento()); rendicontazione.addAnomalia("007110", "Codice esito [" + dsp.getCodiceEsitoSingoloPagamento() + "] sconosciuto"); } rendicontazione.setData(dsp.getDataEsitoSingoloPagamento()); rendicontazione.setIur(dsp.getIdentificativoUnivocoRiscossione()); rendicontazione.setIuv(dsp.getIdentificativoUnivocoVersamento()); rendicontazione.setImporto(dsp.getSingoloImportoPagato()); totaleImportiRendicontati = totaleImportiRendicontati.add(importoRendicontato); // Cerco il pagamento riferito it.govpay.bd.model.Pagamento pagamento = null; try { pagamento = pagamentiBD.getPagamento(codDominio, iuv, iur); // Pagamento trovato. Faccio i controlli semantici rendicontazione.setIdPagamento(pagamento.getId()); // Verifico l'importo if (rendicontazione.getEsito().equals(EsitoRendicontazione.REVOCATO)) { if (pagamento.getImportoRevocato() .compareTo(importoRendicontato.abs()) != 0) { GpThreadLocal.get().log("rendicontazioni.importoStornoErrato", iuv, iur); log.info("Revoca [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: " + iur + "] rendicontato con errore: l'importo rendicontato [" + importoRendicontato.doubleValue() + "] non corrisponde a quanto stornato [" + pagamento.getImportoRevocato().doubleValue() + "]"); rendicontazione.addAnomalia("007112", "L'importo rendicontato [" + importoRendicontato.doubleValue() + "] non corrisponde a quanto stornato [" + pagamento.getImportoRevocato().doubleValue() + "]"); } // Verifico che il pagamento non sia gia' rendicontato if (pagamento.isPagamentoRendicontato(this)) { GpThreadLocal.get().log("rendicontazioni.giaStornato", iuv, iur); log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: " + iur + "] rendicontato con errore: storno gia' rendicontato da altri flussi"); rendicontazione.addAnomalia("007113", "Lo storno riferito dalla rendicontazione risulta gia' rendicontato da altri flussi"); } } else { if (pagamento.getImportoPagato().compareTo(importoRendicontato) != 0) { GpThreadLocal.get().log("rendicontazioni.importoErrato", iuv, iur); log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: " + iur + "] rendicontato con errore: l'importo rendicontato [" + importoRendicontato.doubleValue() + "] non corrisponde a quanto pagato [" + pagamento.getImportoPagato().doubleValue() + "]"); rendicontazione.addAnomalia("007104", "L'importo rendicontato [" + importoRendicontato.doubleValue() + "] non corrisponde a quanto pagato [" + pagamento.getImportoPagato().doubleValue() + "]"); } // Verifico che il pagamento non sia gia' rendicontato if (pagamento.isPagamentoRendicontato(this)) { GpThreadLocal.get().log("rendicontazioni.giaRendicontato", iuv, iur); log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: " + iur + "] rendicontato con errore: pagamento gia' rendicontato da altri flussi"); rendicontazione.addAnomalia("007103", "Il pagamento riferito dalla rendicontazione risulta gia' rendicontato da altri flussi"); } } } catch (NotFoundException e) { // Pagamento non trovato. Devo capire se ce' un errore. // Controllo che sia per uno IUV generato da noi if (!isInterno(dominio, iuv)) { rendicontazione.setStato(StatoRendicontazione.ALTRO_INTERMEDIARIO); continue; } // Controllo se e' un pagamento senza RPT if (rendicontazione.getEsito() .equals(EsitoRendicontazione.ESEGUITO_SENZA_RPT)) { //Recupero il versamento, internamente o dall'applicazione esterna it.govpay.bd.model.Versamento versamento = null; String erroreVerifica = null; String codApplicazione = null; try { try { it.govpay.model.Iuv iuvModel = iuvBD.getIuv(dominio.getId(), iuv); versamento = versamentiBD.getVersamento( iuvModel.getIdApplicazione(), iuvModel.getCodVersamentoEnte()); } catch (NotFoundException nfe) { codApplicazione = it.govpay.bd.GovpayConfig.getInstance() .getDefaultCustomIuvGenerator().getCodApplicazione(dominio, iuv, dominio.getApplicazioneDefault(this)); if (codApplicazione == null) { response.add(idRendicontazione.getIdentificativoFlusso() + "#Acquisizione flusso fallita. Impossibile individuare l'applicativo gestore del versamento per acquisirne i dati [Dominio:" + codDominio + " Iuv:" + iuv + "]."); log.error( "Errore durante il processamento del flusso di Rendicontazione [Flusso:" + idRendicontazione.getIdentificativoFlusso() + "]: Impossibile individuare l'applicativo gestore del versamento per acquisirne i dati [Dominio:" + codDominio + " Iuv:" + iuv + "]. Flusso non acquisito."); GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoKo", idRendicontazione.getIdentificativoFlusso(), "Impossibile individuare l'applicativo gestore del versamento per acquisirne i dati [Dominio:" + codDominio + " Iuv:" + iuv + "]. Flusso non acquisito."); throw new GovPayException(EsitoOperazione.INTERNAL, "Impossibile individuare l'applicativo gestore del versamento per acquisirne i dati [Dominio:" + codDominio + " Iuv:" + iuv + "]. Flusso non acquisito."); } versamento = VersamentoUtils.acquisisciVersamento( AnagraficaManager.getApplicazione(this, codApplicazione), null, null, null, codDominio, iuv, this); } } catch (VersamentoScadutoException e1) { erroreVerifica = "Versamento non acquisito dall'applicazione gestrice perche' SCADUTO."; } catch (VersamentoAnnullatoException e1) { erroreVerifica = "Versamento non acquisito dall'applicazione gestrice perche' ANNULLATO."; } catch (VersamentoDuplicatoException e1) { erroreVerifica = "Versamento non acquisito dall'applicazione gestrice perche' DUPLICATO."; } catch (VersamentoSconosciutoException e1) { erroreVerifica = "Versamento non acquisito dall'applicazione gestrice perche' SCONOSCIUTO."; } catch (ClientException ce) { response.add(idRendicontazione.getIdentificativoFlusso() + "#Acquisizione flusso fallita. Riscontrato errore nell'acquisizione del versamento dall'applicazione gestrice [Transazione: " + idTransaction2 + "]."); log.error( "Errore durante il processamento del flusso di Rendicontazione [Flusso:" + idRendicontazione.getIdentificativoFlusso() + "]: impossibile acquisire i dati del versamento [Dominio:" + codDominio + " Iuv:" + iuv + "]. Flusso non acquisito."); GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoKo", idRendicontazione.getIdentificativoFlusso(), "Impossibile acquisire i dati di un versamento dall'applicativo gestore [Applicazione:" + codApplicazione + " Dominio:" + codDominio + " Iuv:" + iuv + "]. Flusso non acquisito."); throw new GovPayException(ce); } if (versamento == null) { // non ho trovato il versamento GpThreadLocal.get().log("rendicontazioni.senzaRptNoVersamento", iuv, iur); log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: " + iur + "] rendicontato con errore: Pagamento senza RPT di versamento sconosciuto."); rendicontazione.addAnomalia("007111", "Il versamento risulta sconosciuto: " + erroreVerifica); continue; } else { if (versamento.getSingoliVersamenti(this).size() != 1) { // Un pagamento senza rpt DEVE riferire un pagamento tipo 3 con un solo singolo versamento GpThreadLocal.get().log( "rendicontazioni.senzaRptVersamentoMalformato", iuv, iur); log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: " + iur + "] rendicontato con errore: Pagamento senza RPT di versamento sconosciuto."); rendicontazione.addAnomalia("007114", "Il versamento presenta piu' singoli versamenti"); continue; } // Trovato versamento. Creo il pagamento senza rpt pagamento = new it.govpay.bd.model.Pagamento(); pagamento.setCodDominio(codDominio); pagamento.setDataAcquisizione(rendicontazione.getData()); pagamento.setDataPagamento(rendicontazione.getData()); pagamento.setImportoPagato(rendicontazione.getImporto()); pagamento.setIur(rendicontazione.getIur()); pagamento.setIuv(rendicontazione.getIuv()); pagamento.setCodDominio(fr.getCodDominio()); pagamento.setSingoloVersamento( versamento.getSingoliVersamenti(this).get(0)); rendicontazione.setPagamento(pagamento); rendicontazione.setPagamentoDaCreare(true); continue; } } GpThreadLocal.get().log("rendicontazioni.noPagamento", iuv, iur); log.info("Pagamento [Dominio:" + codDominio + " Iuv:" + iuv + " Iur: " + iur + "] rendicontato con errore: il pagamento non risulta presente in base dati."); rendicontazione.addAnomalia("007101", "Il pagamento riferito dalla rendicontazione non risulta presente in base dati."); continue; } catch (MultipleResultException e) { // Individuati piu' pagamenti riferiti dalla rendicontazione GpThreadLocal.get().log("rendicontazioni.poliPagamento", iuv, iur); log.info("Pagamento rendicontato duplicato: [CodDominio: " + codDominio + "] [Iuv: " + iuv + "] [Iur: " + iur + "]"); rendicontazione.addAnomalia("007102", "La rendicontazione riferisce piu di un pagamento gestito."); } finally { if (!StatoRendicontazione.ALTRO_INTERMEDIARIO.equals(rendicontazione.getStato()) && rendicontazione.getAnomalie().isEmpty()) { rendicontazione.setStato(StatoRendicontazione.OK); } else if (!StatoRendicontazione.ALTRO_INTERMEDIARIO .equals(rendicontazione.getStato()) && !rendicontazione.getAnomalie().isEmpty()) { rendicontazione.setStato(StatoRendicontazione.ANOMALA); hasFrAnomalia = true; } fr.addRendicontazione(rendicontazione); } } // Singole rendicontazioni elaborate. // Controlli di quadratura generali if (totaleImportiRendicontati .compareTo(flussoRendicontazione.getImportoTotalePagamenti()) != 0) { GpThreadLocal.get().log("rendicontazioni.importoTotaleErrato"); log.info("La somma degli importi rendicontati [" + totaleImportiRendicontati + "] non corrisponde al totale indicato nella testata del flusso [" + flussoRendicontazione.getImportoTotalePagamenti() + "]"); fr.addAnomalia("007106", "La somma degli importi rendicontati [" + totaleImportiRendicontati + "] non corrisponde al totale indicato nella testata del flusso [" + flussoRendicontazione.getImportoTotalePagamenti() + "]"); } try { if (flussoRendicontazione.getDatiSingoliPagamenti().size() != flussoRendicontazione .getNumeroTotalePagamenti().longValueExact()) { GpThreadLocal.get().log("rendicontazioni.numeroRendicontazioniErrato"); log.info("Il numero di pagamenti rendicontati [" + flussoRendicontazione.getDatiSingoliPagamenti().size() + "] non corrisponde al totale indicato nella testata del flusso [" + flussoRendicontazione.getNumeroTotalePagamenti().longValueExact() + "]"); fr.addAnomalia("007107", "Il numero di pagamenti rendicontati [" + flussoRendicontazione.getDatiSingoliPagamenti().size() + "] non corrisponde al totale indicato nella testata del flusso [" + flussoRendicontazione.getNumeroTotalePagamenti().longValueExact() + "]"); } } catch (Exception e) { GpThreadLocal.get().log("rendicontazioni.numeroRendicontazioniErrato"); log.info("Il numero di pagamenti rendicontati [" + flussoRendicontazione.getDatiSingoliPagamenti().size() + "] non corrisponde al totale indicato nella testata del flusso [????]"); fr.addAnomalia("007107", "Il numero di pagamenti rendicontati [" + flussoRendicontazione.getDatiSingoliPagamenti().size() + "] non corrisponde al totale indicato nella testata del flusso [????]"); } // Decido lo stato del FR if (fr.getAnomalie().isEmpty()) { fr.setStato(StatoFr.ACCETTATA); } else { fr.setStato(StatoFr.ANOMALA); hasFrAnomalia = true; } // Procedo al salvataggio RendicontazioniBD rendicontazioniBD = new RendicontazioniBD(this); // Tutte le operazioni di salvataggio devono essere in transazione. setAutoCommit(false); frBD.insertFr(fr); for (Rendicontazione r : fr.getRendicontazioni(this)) { r.setIdFr(fr.getId()); // controllo se c'e' un pagamento da creare relativo alla rendicontazione // deve anche essere creato il pagamento. if (r.isPagamentoDaCreare()) { pagamentiBD.insertPagamento(r.getPagamento(this)); r.setIdPagamento(r.getPagamento(this).getId()); } rendicontazioniBD.insert(r); } this.commit(); if (!hasFrAnomalia) { log.info("Flusso di rendicontazione acquisito senza anomalie."); GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoOk"); } else { log.info("Flusso di rendicontazione acquisito con anomalie."); GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussoOkAnomalia"); } } } catch (GovPayException ce) { log.error("Flusso di rendicontazione non acquisito", ce); errori = true; } finally { GpThreadLocal.get().closeTransaction(idTransaction2); } } } } catch (Exception e) { GpThreadLocal.get().log("rendicontazioni.acquisizioneFlussiFail", e.getMessage()); throw new GovPayException(e); } finally { try { if (isClosed()) setupConnection(GpThreadLocal.get().getTransactionId()); } catch (Exception e) { log.error("Errore nel ripristino della connessione", e); } } GpThreadLocal.get().log("rendicontazioni.acquisizioneOk"); String rspTxt = ""; if (errori) rspTxt = "WARNING#Processo di acquisizione completato parzialmente: uno o piu' flussi non sono stati acquisiti.|"; else rspTxt = "OK#Processo di acquisizione completato con successo|"; if (response.isEmpty()) { return rspTxt + "Processo di acquisizione completato con successo. #Nessun flusso acquisito."; } else { return rspTxt + StringUtils.join(response, "|"); } }