Java tutorial
/******************************************************************************* * HELIUM V, Open Source ERP software for sustained success * at small and medium-sized enterprises. * Copyright (C) 2004 - 2014 HELIUM V IT-Solutions GmbH * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published * by the Free Software Foundation, either version 3 of theLicense, or * (at your option) any later version. * * According to sec. 7 of the GNU Affero General Public License, version 3, * the terms of the AGPL are supplemented with the following terms: * * "HELIUM V" and "HELIUM 5" are registered trademarks of * HELIUM V IT-Solutions GmbH. The licensing of the program under the * AGPL does not imply a trademark license. Therefore any rights, title and * interest in our trademarks remain entirely with us. If you want to propagate * modified versions of the Program under the name "HELIUM V" or "HELIUM 5", * you may only do so if you have a written permission by HELIUM V IT-Solutions * GmbH (to acquire a permission please contact HELIUM V IT-Solutions * at trademark@heliumv.com). * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Contact: developers@heliumv.com ******************************************************************************/ package com.lp.server.bestellung.ejbfac; import java.math.BigDecimal; import java.rmi.RemoteException; import java.sql.Date; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.ejb.Stateless; import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; import javax.persistence.EntityExistsException; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.PersistenceContext; import javax.persistence.Query; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import com.lp.server.anfrage.service.AnfrageDto; import com.lp.server.anfrage.service.AnfrageFac; import com.lp.server.anfrage.service.AnfrageServiceFac; import com.lp.server.anfrage.service.AnfragepositionDto; import com.lp.server.anfrage.service.AnfragepositionFac; import com.lp.server.anfrage.service.AnfragepositionlieferdatenDto; import com.lp.server.artikel.ejb.Artikel; import com.lp.server.artikel.service.ArtikelDto; import com.lp.server.artikel.service.ArtikelFac; import com.lp.server.artikel.service.ArtikellieferantDto; import com.lp.server.bestellung.ejb.Bestellposition; import com.lp.server.bestellung.ejb.Bestellung; import com.lp.server.bestellung.ejb.Wareneingang; import com.lp.server.bestellung.fastlanereader.generated.FLRBestellung; import com.lp.server.bestellung.service.BestellpositionDto; import com.lp.server.bestellung.service.BestellpositionFac; import com.lp.server.bestellung.service.BestellungDto; import com.lp.server.bestellung.service.BestellungDtoAssembler; import com.lp.server.bestellung.service.BestellungFac; import com.lp.server.bestellung.service.BestellungtextDto; import com.lp.server.bestellung.service.ImportMonatsbestellungDto; import com.lp.server.bestellung.service.WareneingangDto; import com.lp.server.bestellung.service.WareneingangspositionDto; import com.lp.server.eingangsrechnung.service.EingangsrechnungDto; import com.lp.server.eingangsrechnung.service.EingangsrechnungFac; import com.lp.server.partner.ejb.Lieferant; import com.lp.server.partner.ejb.Partner; import com.lp.server.partner.service.LieferantDto; import com.lp.server.system.ejbfac.BelegAktivierungController; import com.lp.server.system.ejbfac.IAktivierbar; import com.lp.server.system.pkgenerator.PKConst; import com.lp.server.system.pkgenerator.format.LpBelegnummer; import com.lp.server.system.pkgenerator.format.LpBelegnummerFormat; import com.lp.server.system.service.LocaleFac; import com.lp.server.system.service.MediaFac; import com.lp.server.system.service.MwstsatzDto; import com.lp.server.system.service.ParameterFac; import com.lp.server.system.service.ParametermandantDto; import com.lp.server.system.service.TheClientDto; import com.lp.server.util.Facade; import com.lp.server.util.Validator; import com.lp.server.util.fastlanereader.FLRSessionFactory; import com.lp.util.EJBExceptionLP; import com.lp.util.EJBExceptionLPwoRollback; import com.lp.util.Helper; @Stateless public class BestellungFacBean extends Facade implements BestellungFac, IAktivierbar { @PersistenceContext private EntityManager em; /** * Ueberpruefung der BestellungDto; darf nicht null sein * * @param bestellungDtoI * BestellungDto * @param theClientDto * String */ private void checkBestellungDto(BestellungDto bestellungDtoI, TheClientDto theClientDto) { if (bestellungDtoI == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, new Exception("bestellungDto == null")); } } public Integer createBestellung(BestellungDto bestellungDtoI, TheClientDto theClientDto) throws EJBExceptionLP { checkBestellungDto(bestellungDtoI, theClientDto); if (bestellungDtoI.getIId() != null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, new Exception("bestellungDto.getIId() != null")); } Integer pk = null; try { LpBelegnummerFormat f = getBelegnummerGeneratorObj() .getBelegnummernFormat(bestellungDtoI.getMandantCNr()); Integer iGeschaeftsjahr = getParameterFac().getGeschaeftsjahr(bestellungDtoI.getMandantCNr(), bestellungDtoI.getDBelegdatum()); LpBelegnummer bnr = getBelegnummerGeneratorObj().getNextBelegNr(iGeschaeftsjahr, PKConst.PK_BESTELLUNG, bestellungDtoI.getMandantCNr(), theClientDto); pk = bnr.getPrimaryKey(); String bestellungsnummer = f.format(bnr); bestellungDtoI.setIId(pk); // not null-Felder setzen if (bestellungDtoI.getDBelegdatum() == null) { bestellungDtoI.setDBelegdatum(getDate()); } if (bestellungDtoI.getDLiefertermin() == null) { Timestamp t = getTimestamp(); bestellungDtoI.setDLiefertermin(t); } if (bestellungDtoI.getBelegartCNr() == null) { bestellungDtoI.setBelegartCNr(LocaleFac.BELEGART_BESTELLUNG); } if (bestellungDtoI.getBPoenale() == null) { bestellungDtoI.setBPoenale(Helper.boolean2Short(false)); } if (bestellungDtoI.getStatusCNr() == null) { // eine neue Bestellung ist "angelegt" bestellungDtoI.setStatusCNr(BestellungFac.BESTELLSTATUS_ANGELEGT); } // den Lieferantenrabatt uebernehmen, falls er noch nicht gesetzt // wurde. LieferantDto lieferantDto = getLieferantFac() .lieferantFindByPrimaryKey(bestellungDtoI.getLieferantIIdBestelladresse(), theClientDto); if (lieferantDto.getNRabatt() != null) { bestellungDtoI.setFAllgemeinerRabattsatz(lieferantDto.getNRabatt().doubleValue()); } if (bestellungDtoI.getPersonalIIdAnlegen() == null) { bestellungDtoI.setPersonalIIdAnlegen(theClientDto.getIDPersonal()); } if (bestellungDtoI.getPersonalIIdAendern() == null) { bestellungDtoI.setPersonalIIdAendern(theClientDto.getIDPersonal()); } // anlegen Bestellung bestellung = new Bestellung(bestellungDtoI.getIId(), bestellungsnummer, bestellungDtoI.getMandantCNr(), bestellungDtoI.getBelegartCNr(), bestellungDtoI.getDBelegdatum(), bestellungDtoI.getDLiefertermin(), bestellungDtoI.getBTeillieferungMoeglich(), bestellungDtoI.getPersonalIIdAnlegen(), bestellungDtoI.getPersonalIIdAnlegen(), bestellungDtoI.getLieferartIId(), bestellungDtoI.getZahlungszielIId(), bestellungDtoI.getSpediteurIId(), bestellungDtoI.getBPoenale()); em.persist(bestellung); em.flush(); setBestellungFromBestellungDto(bestellung, bestellungDtoI); } catch (EntityExistsException ex) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, ex); } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } return pk; } public void setzeVersandzeitpunktAufJetzt(Integer iBestellungIId, String sDrucktyp) { if (iBestellungIId != null) { Bestellung bestellung = em.find(Bestellung.class, iBestellungIId); bestellung.setTVersandzeitpunkt(new Timestamp(System.currentTimeMillis())); bestellung.setCVersandtype(sDrucktyp); em.merge(bestellung); em.flush(); } } public void updateBestellungMahnstufe(Integer bestellungIId, Integer mahnstufeNeu, TheClientDto theClientDto) { BestellungDto bestellung = bestellungFindByPrimaryKey(bestellungIId); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } bestellung.setIMahnstufeIId(mahnstufeNeu); updateBestellung(bestellung, theClientDto); } public void updateBestellung(BestellungDto bestellungDtoI, TheClientDto theClientDto) throws EJBExceptionLP { updateBestellung(bestellungDtoI, theClientDto, true); } public void updateBestellung(BestellungDto bestellungDtoI, TheClientDto theClientDto, boolean pruefeKorrekterStatus) throws EJBExceptionLP { checkBestellungDto(bestellungDtoI, theClientDto); // merken fuer Liefertermin setzen (siehe ende von updateBestellung) BestellungDto bsDtoOld = bestellungFindByPrimaryKey(bestellungDtoI.getIId()); try { // Informationen des aktuellen Benutzers setzen bestellungDtoI.setPersonalIIdAendern(theClientDto.getIDPersonal()); bestellungDtoI.setTAendern(getTimestamp()); Bestellung bestellung = em.find(Bestellung.class, bestellungDtoI.getIId()); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } // bestellung.setTAendern(bestellungDtoI.getTAendern()); // bestellung.setPersonalIIdAendern(bestellungDtoI // .getPersonalIIdAendern()); setBestellungFromBestellungDto(bestellung, bestellungDtoI); BestellungDto bsDtoNew = bestellungFindByPrimaryKey(bestellungDtoI.getIId()); // updaten des Datums der bestellpositionen if (!Helper.cutTimestamp(bsDtoOld.getDLiefertermin()) .equals(Helper.cutTimestamp(bsDtoNew.getDLiefertermin()))) { BestellpositionDto aBSPOSDto[] = getBestellpositionFac() .bestellpositionFindByBestellung(bestellungDtoI.getIId(), theClientDto); for (int i = 0; i < aBSPOSDto.length; i++) { // Bestelltliste aktualsisiert getBestellpositionFac().updateBestellpositionBeiLieferterminAenderung(aBSPOSDto[i].getIId(), theClientDto); getArtikelbestelltFac().aktualisiereBestelltListe(aBSPOSDto[i].getIId(), theClientDto); } } if (!pruefeKorrekterStatus) return; String sKorrekterStatus = getRichtigenBestellStatus(bestellungDtoI.getIId(), false, theClientDto); if (!bsDtoNew.getStatusCNr().equals(sKorrekterStatus)) { // Der neue Status stimmt nicht mit dem errechneten ueberein String sAlterStatus = bestellungDtoI.getStatusCNr(); bestellungDtoI.setStatusCNr(sKorrekterStatus); bestellung = em.find(Bestellung.class, bestellungDtoI.getIId()); setBestellungFromBestellungDto(bestellung, bestellungDtoI); ArrayList<Object> al = new ArrayList<Object>(); al.add(sAlterStatus.trim()); al.add(sKorrekterStatus.trim()); al.add(bestellungDtoI.getCNr()); EJBExceptionLPwoRollback exception = new EJBExceptionLPwoRollback( EJBExceptionLP.FEHLER_BESTELLUNG_FALSCHER_STATUS, ""); exception.setAlInfoForTheClient(al); throw exception; } } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } } public void setAuftragIIdInBestellung(BestellungDto bestellungDto, TheClientDto theClientDto) { if (bestellungDto.getIId() != null) { BestellungDto bestellung = bestellungFindByPrimaryKey(bestellungDto.getIId()); bestellung.setAuftragIId(bestellungDto.getAuftragIId()); updateBestellung(bestellungDto, theClientDto, false); } } public BestellungDto bestellungFindByPrimaryKey(Integer iIdBSI) throws EJBExceptionLP { // Preconditions. if (iIdBSI == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER, new Exception("iId == null")); } BestellungDto bestellungDto = null; // try { Bestellung bestellung = em.find(Bestellung.class, iIdBSI); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } bestellungDto = assembleBestellungDto(bestellung); // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } return bestellungDto; } public BestellungDto bestellungFindByCNrMandantCNr(String cNr, String mandantCNr) { Query query = em.createNamedQuery("BestellungfindByCNrMandantCNr"); query.setParameter(1, cNr); query.setParameter(2, mandantCNr); try { Bestellung bestellung = (Bestellung) query.getSingleResult(); return assembleBestellungDto(bestellung); } catch (NoResultException ex) { return null; } } /** * Diese Methode holt alle Bestellungen, bei denen die Lieferadresse der * übergebeben PartnerIId zugeordnet ist * * @param partnerIId * Integer * @param cNrMandantI * String * @return BestellungDto[] * @throws EJBExceptionLP * @throws RemoteException */ public BestellungDto[] bestellungFindByLieferadressePartnerIIdMandantCNr(Integer partnerIId, String cNrMandantI) throws EJBExceptionLP, RemoteException { BestellungDto[] bestellungDtos = null; // try { Query query = em.createNamedQuery("BestellungfindByLieferadressepartnerIIdMandantCNr"); query.setParameter(1, partnerIId); query.setParameter(2, cNrMandantI); Collection<?> cl = query.getResultList(); // if(cl.isEmpty()){ // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // null); // } bestellungDtos = assembleBestellungDtos(cl); // } // catch (ObjectNotFoundException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } return bestellungDtos; } public BestellungDto[] bestellungFindByLieferadressePartnerIIdMandantCNrOhneExc(Integer partnerIId, String cNrMandantI) throws RemoteException { BestellungDto[] bestellungDtos = null; try { Query query = em.createNamedQuery("BestellungfindByLieferadressepartnerIIdMandantCNr"); query.setParameter(1, partnerIId); query.setParameter(2, cNrMandantI); Collection<?> cl = query.getResultList(); // if(cl.isEmpty()){ // throw new EJBExceptionLP(EJBExceptionLP.FEHLER, null); // } bestellungDtos = assembleBestellungDtos(cl); // catch (ObjectNotFoundException ex) { // myLogger.warn("partnerIID: " + partnerIId, ex); // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex); } catch (Throwable t) { myLogger.warn("bestellungFindByLieferadressePartnerIIdMandantCNrOhneExc", t); } return bestellungDtos; } public BestellungDto[] bestellungFindByAnsprechpartnerIIdMandantCNr(Integer iAnsprechpartnerIId, String cNrMandantI) throws EJBExceptionLP { BestellungDto[] bestellungDtos = null; // try { Query query = em.createNamedQuery("BestellungfindByAnsprechpartnerIIdMandantCNr"); query.setParameter(1, iAnsprechpartnerIId); query.setParameter(2, cNrMandantI); Collection<?> cl = query.getResultList(); // if (cl.isEmpty()) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, null); // } bestellungDtos = assembleBestellungDtos(cl); // } // catch (ObjectNotFoundException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex); // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex); // } return bestellungDtos; } public BestellungDto[] bestellungFindByAnsprechpartnerIIdMandantCNrOhneExc(Integer iAnsprechpartnerIId, String cNrMandantI) { try { Query query = em.createNamedQuery("BestellungfindByAnsprechpartnerIIdMandantCNr"); query.setParameter(1, iAnsprechpartnerIId); query.setParameter(2, cNrMandantI); return assembleBestellungDtos(query.getResultList()); } catch (Throwable th) { return null; } } public BestellungDto[] bestellungFindByLieferantIIdBestelladresseMandantCNr(Integer lieferantIId, String cNrMandantI) throws EJBExceptionLP, RemoteException { BestellungDto[] bestellungDtos = null; // try { Query query = em.createNamedQuery("BestellungfindByLieferantIIdBestelladresseMandantCNr"); query.setParameter(1, lieferantIId); query.setParameter(2, cNrMandantI); Collection<?> cl = query.getResultList(); // if (cl.isEmpty()) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, null); // } bestellungDtos = assembleBestellungDtos(cl); // } // catch (ObjectNotFoundException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex); // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex); // } return bestellungDtos; } public BestellungDto[] bestellungFindByLieferantIIdBestelladresseMandantCNrOhneExc(Integer lieferantIId, String cNrMandantI) { BestellungDto[] bestellungDtos = null; try { Query query = em.createNamedQuery("BestellungfindByLieferantIIdBestelladresseMandantCNr"); query.setParameter(1, lieferantIId); query.setParameter(2, cNrMandantI); bestellungDtos = assembleBestellungDtos(query.getResultList()); } catch (Throwable th) { return null; } return bestellungDtos; } public BestellungDto[] bestellungFindByLieferantIIdRechnungsadresseMandantCNr(Integer lieferantIId, String cNrMandantI) throws EJBExceptionLP, RemoteException { BestellungDto[] bestellungDtos = null; // try { Query query = em.createNamedQuery("BestellungfindByLieferantIIdRechnungsadresseMandantCNr"); query.setParameter(1, lieferantIId); query.setParameter(2, cNrMandantI); Collection<?> cl = query.getResultList(); // if(cl.isEmpty()){ // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, null); // } bestellungDtos = assembleBestellungDtos(cl); // } // catch (ObjectNotFoundException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex); // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex); // } return bestellungDtos; } public BestellungDto[] bestellungFindByLieferantIIdRechnungsadresseMandantCNrOhneExc(Integer lieferantIId, String cNrMandantI) { BestellungDto[] bestellungDtos = null; try { Query query = em.createNamedQuery("BestellungfindByLieferantIIdRechnungsadresseMandantCNr"); query.setParameter(1, lieferantIId); query.setParameter(2, cNrMandantI); bestellungDtos = assembleBestellungDtos(query.getResultList()); } catch (Throwable th) { return null; } return bestellungDtos; } private void setBestellungFromBestellungDto(Bestellung bestellung, BestellungDto bestellungDto) { bestellung.setMandantCNr(bestellungDto.getMandantCNr()); bestellung.setBestellungartCNr(bestellungDto.getBestellungartCNr()); bestellung.setBestellungstatusCNr(bestellungDto.getStatusCNr()); bestellung.setBelegartCNr(bestellungDto.getBelegartCNr()); bestellung.setTBelegdatum(bestellungDto.getDBelegdatum()); bestellung.setLieferantIIdBestelladresse(bestellungDto.getLieferantIIdBestelladresse()); bestellung.setAnsprechpartnerIId(bestellungDto.getAnsprechpartnerIId()); bestellung.setPersonalIIdAnforderer(bestellungDto.getPersonalIIdAnforderer()); bestellung.setLieferantIIdRechnungsadresse(bestellungDto.getLieferantIIdRechnungsadresse()); bestellung.setCBezprojektbezeichnung(bestellungDto.getCBez()); bestellung.setWaehrungCNrBestellungswaehrung(bestellungDto.getWaehrungCNr()); bestellung.setFWechselkursmandantwaehrungbestellungswaehrung( bestellungDto.getFWechselkursmandantwaehrungzubelegwaehrung()); bestellung.setTLiefertermin(bestellungDto.getDLiefertermin()); bestellung.setKostenstelleIId(bestellungDto.getKostenstelleIId()); bestellung.setBTeillieferungmoeglich(bestellungDto.getBTeillieferungMoeglich()); bestellung.setILeihtage(bestellungDto.getILeihtage()); bestellung.setFAllgemeinerrabattsatz(bestellungDto.getFAllgemeinerRabattsatz()); bestellung.setLieferartIId(bestellungDto.getLieferartIId()); bestellung.setZahlungszielIId(bestellungDto.getZahlungszielIId()); bestellung.setSpediteurIId(bestellungDto.getSpediteurIId()); bestellung.setNBestellwert(bestellungDto.getNBestellwert()); bestellung.setAnfrageIId(bestellungDto.getAnfrageIId()); bestellung.setBestellungtextIIdKopftext(bestellungDto.getBestelltextIIdKopftext()); bestellung.setCKopftextuebersteuert(bestellungDto.getCKopftextUebersteuert()); bestellung.setBestellungtextIIdFusstext(bestellungDto.getBestelltextIIdFusstext()); bestellung.setCFusstextuebersteuert(bestellungDto.getCFusstextUebersteuert()); bestellung.setTGedruckt(bestellungDto.getTGedruckt()); bestellung.setPersonalIIdStorniert(bestellungDto.getPersonalIIdStorniert()); bestellung.setTStorniert(bestellungDto.getTStorniert()); bestellung.setBestellungIIdRahmenbestellung(bestellungDto.getIBestellungIIdRahmenbestellung()); bestellung.setXInternerkommentar(bestellungDto.getXInternerKommentar()); bestellung.setXExternerkommentar(bestellungDto.getXExternerKommentar()); bestellung.setPartnerIIdLieferadresse(bestellungDto.getPartnerIIdLieferadresse()); bestellung.setTMahnsperrebis(bestellungDto.getTMahnsperreBis()); bestellung.setTManuellgeliefert(bestellungDto.getTManuellGeliefert()); bestellung.setAuftragIId(bestellungDto.getAuftragIId()); bestellung.setMahnstufeIId(bestellungDto.getIMahnstufeIId()); bestellung.setTAenderungsbestellung(bestellungDto.getTAenderungsbestellung()); bestellung.setTVersandzeitpunkt(bestellungDto.getTVersandzeitpunkt()); // Wenn Versandzeitpunkt zurueckgesetzt wird, dann auch den // Versandstatus zuruechsetzen if (bestellungDto.getTVersandzeitpunkt() == null) { bestellung.setCVersandtype(null); } bestellung.setAnsprechpartnerIIdLieferadresse(bestellungDto.getAnsprechpartnerIIdLieferadresse()); bestellung.setPartnerIIdAbholadresse(bestellungDto.getPartnerIIdAbholadresse()); bestellung.setAnsprechpartnerIIdAbholadresse(bestellungDto.getAnsprechpartnerIIdAbholadresse()); bestellung.setBPoenale(bestellungDto.getBPoenale()); bestellung.setCLieferantenangebot(bestellungDto.getCLieferantenangebot()); bestellung.setCLieferartort(bestellungDto.getCLieferartort()); bestellung.setProjektIId(bestellungDto.getProjektIId()); em.merge(bestellung); em.flush(); } private BestellungDto assembleBestellungDto(Bestellung bestellung) { return BestellungDtoAssembler.createDto(bestellung); } private BestellungDto[] assembleBestellungDtos(Collection<?> bestellungs) { List<BestellungDto> list = new ArrayList<BestellungDto>(); if (bestellungs != null) { Iterator<?> iterator = bestellungs.iterator(); while (iterator.hasNext()) { Bestellung bestellung = (Bestellung) iterator.next(); list.add(assembleBestellungDto(bestellung)); } } BestellungDto[] returnArray = new BestellungDto[list.size()]; return list.toArray(returnArray); } /** * @deprecated MB. * * Betellungen duerfen nur in bestimmten Stati geaendert werden. <br> * Nachdem eine Bestellung geaendert wurde, befindet sie sich im * Status ANGELEGT. * * @param iIdBestellungI * PK der Bestellung * @param theClientDto * String * @throws EJBExceptionLP */ public void pruefeUndSetzeBestellungstatusBeiAenderung(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP { Bestellung bestellung = null; // try { bestellung = em.find(Bestellung.class, iIdBestellungI); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } String sStatus = bestellung.getBestellungstatusCNr(); if (sStatus.equals(BestellungFac.BESTELLSTATUS_OFFEN)) { bestellung.setBestellungstatusCNr(BestellungFac.BESTELLSTATUS_ANGELEGT); bestellung.setNBestellwert(null); } bestellung.setTAendern(getTimestamp()); bestellung.setPersonalIIdAendern(theClientDto.getIDPersonal()); } public void aktiviereBestellung(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { Validator.notNull(iIdBestellungI, "iIdBestellungI"); pruefeAktivierbar(iIdBestellungI, theClientDto); //Wert berechnen berechneBeleg(iIdBestellungI, theClientDto); //und Status aendern aktiviereBeleg(iIdBestellungI, theClientDto); } @Override public void pruefeAktivierbar(Integer iid, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { BestellungDto bestellung = bestellungFindByPrimaryKey(iid); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } // Ohne Positionen darf der Beleg nicht aktiviert werden. if (getBestellpositionFac().getAnzahlBestellpositionen(iid) == 0) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BELEG_HAT_KEINE_POSITIONEN, ""); } BestellpositionDto[] aPositionDtos = getBestellpositionFac().bestellpositionFindByBestellung(iid, theClientDto); boolean bHatMengenbehaftetePositionen = false; for (int i = 0; i < aPositionDtos.length; i++) { if (aPositionDtos[i].getNMenge() != null) { bHatMengenbehaftetePositionen = true; } } if (bHatMengenbehaftetePositionen == false) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BESTELLUNG_HAT_KEINE_MENGENPOSITIONEN, new Exception("FEHLER_BESTELLUNG_HAT_KEINE_MENGENPOSITIONEN")); } } @Override public void aktiviereBeleg(Integer iid, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { BestellungDto bestellung = bestellungFindByPrimaryKey(iid); if (BestellungFac.BESTELLSTATUS_ANGELEGT.equals(bestellung.getStatusCNr())) { bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_OFFEN); bestellung.setTGedruckt(getTimestamp()); updateBestellung(bestellung, theClientDto, false); } } @Override public void berechneBeleg(Integer iid, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { Bestellung oBestellung = em.find(Bestellung.class, iid); if (!BestellungFac.BESTELLSTATUS_ANGELEGT.equals(oBestellung.getBestellungstatusCNr())) return; oBestellung.setNBestellwert(berechneNettowertGesamt(oBestellung.getIId(), theClientDto)); // Berechnung in // Bestellwaehrung // nach den Berechnungen! ParametermandantDto paramDto = getParameterFac().parametermandantFindByPrimaryKey( ParameterFac.PARAMETER_LIEFERANTEN_AUTOMATISCH_SORTIEREN, ParameterFac.KATEGORIE_BESTELLUNG, theClientDto.getMandant()); Boolean bLieferantSortieren = false; if (paramDto != null) { if ((Boolean) paramDto.getCWertAsObject()) { bLieferantSortieren = true; } } if (bLieferantSortieren) { // Jetzt den Lieferanten als ersten der Artikel setzen BestellpositionDto[] besPos = getBestellpositionFac() .bestellpositionFindByBestellung(oBestellung.getIId(), theClientDto); for (int i = 0; i < besPos.length; i++) { if (besPos[i].getPositionsartCNr().equals(BestellpositionFac.BESTELLPOSITIONART_IDENT)) { ArtikellieferantDto[] artLief = getArtikelFac() .artikellieferantFindByArtikelIId(besPos[i].getArtikelIId(), theClientDto); if (artLief.length > 0) { if (!artLief[0].getLieferantIId().equals(oBestellung.getLieferantIIdBestelladresse())) { Integer artLiefBestIId = null; for (int y = 1; y < artLief.length; y++) { if (artLief[y].getLieferantIId() .equals(oBestellung.getLieferantIIdBestelladresse())) { artLiefBestIId = artLief[y].getIId(); } } if (artLiefBestIId != null) { getArtikelFac().vertauscheArtikellieferanten(artLiefBestIId, artLief[0].getIId()); } } } } } } } public BigDecimal berechneBestellwertGesamt(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP { BigDecimal bestellwert = new BigDecimal(0); // Bestellung holen BestellungDto besDto = bestellungFindByPrimaryKey(iIdBestellungI); // alle Positionen dieser Bestellung BestellpositionDto[] aBesPosDto = null; try { aBesPosDto = getBestellpositionFac().bestellpositionFindByBestellung(iIdBestellungI, theClientDto); for (int xaBesPosDto = 0; xaBesPosDto < aBesPosDto.length; xaBesPosDto++) { BestellpositionDto pos = aBesPosDto[xaBesPosDto]; // alle positiven mengenbehafteten Positionen beruecksichtigen if (pos.getNMenge() != null && pos.getNMenge().doubleValue() > 0 && pos.getPositioniIdArtikelset() == null) { BigDecimal menge = pos.getNMenge(); // Grundlage ist der NettogesamtwertMinusRabatt der Position // in Bestellwaehrung BigDecimal wertDerPosition = menge.multiply(pos.getNNettogesamtpreis()); bestellwert = bestellwert.add(wertDerPosition); } } // jetzt den allgemeinen rabatt wegrechnen BigDecimal bdAllgemeinerRabattsatzFaktor; if (besDto.getFAllgemeinerRabattsatz() != null) { bdAllgemeinerRabattsatzFaktor = new BigDecimal(100) .subtract(new BigDecimal(besDto.getFAllgemeinerRabattsatz())).movePointLeft(2); } else { bdAllgemeinerRabattsatzFaktor = new BigDecimal(1); } bestellwert = bestellwert.multiply(bdAllgemeinerRabattsatzFaktor); } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } return bestellwert; } public BigDecimal berechneEinkaufswertIst(Integer iIdBestellungI, String sArtikelartI, TheClientDto theClientDto) { BigDecimal bdEKwertIstO = Helper.getBigDecimalNull(); BestellpositionDto[] aBestellpositionDtos = null; try { aBestellpositionDtos = getBestellpositionFac().bestellpositionFindByBestellung(iIdBestellungI, theClientDto); } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } for (int i = 0; i < aBestellpositionDtos.length; i++) { // alle mengenbehafteten Positionen beruecksichtigen if (aBestellpositionDtos[i].getNMenge() != null && aBestellpositionDtos[i].getArtikelIId() != null) { // PJ 15859 if (aBestellpositionDtos[i].getPositioniIdArtikelset() == null) { ArtikelDto oArtikelDto = getArtikelFac() .artikelFindByPrimaryKey(aBestellpositionDtos[i].getArtikelIId(), theClientDto); BigDecimal bdBeitragDieserPosition = aBestellpositionDtos[i].getNMenge() .multiply(aBestellpositionDtos[i].getNNettogesamtPreisminusRabatte()); // je nach Artikelart beruecksichtigen if (sArtikelartI.equals(ArtikelFac.ARTIKELART_ARBEITSZEIT)) { if (oArtikelDto.getArtikelartCNr().equals(ArtikelFac.ARTIKELART_ARBEITSZEIT)) { bdEKwertIstO = bdEKwertIstO.add(bdBeitragDieserPosition); } } else { if (!oArtikelDto.getArtikelartCNr().equals(ArtikelFac.ARTIKELART_ARBEITSZEIT)) { bdEKwertIstO = bdEKwertIstO.add(bdBeitragDieserPosition); } } } } } return bdEKwertIstO; } public BigDecimal berechneNettowertGesamt(Integer iIdBestellungI, TheClientDto theClientDto) { BigDecimal bestellwert = new BigDecimal(0); // die aktuelle Bestellung BestellungDto besDto = bestellungFindByPrimaryKey(iIdBestellungI); String sBesStatus = besDto.getStatusCNr(); if (sBesStatus.equals(BestellungFac.BESTELLSTATUS_ANGELEGT)) { // Step 1: Wenn der Gesamtauftragswert NULL und der Status ANGELEGT // ist, // dann den Wert aus den Positionen berechnen bestellwert = berechneBestellwertGesamt(iIdBestellungI, theClientDto); } else if (sBesStatus.equals(BestellungFac.BESTELLSTATUS_STORNIERT)) { // Step 2: Wenn der status STORNIERT ist, 0 zurueckgeben obwohl der // Bestellwert noch in der Tabelle steht bestellwert = new BigDecimal(0); } else if (sBesStatus.equals(BestellungFac.BESTELLSTATUS_OFFEN) || sBesStatus.equals(BestellungFac.BESTELLSTATUS_BESTAETIGT) || sBesStatus.equals(BestellungFac.BESTELLSTATUS_GELIEFERT) || sBesStatus.equals(BestellungFac.BESTELLSTATUS_ERLEDIGT)) { // Step 3: Wenn der status OFFEN, BESTAETIGT oder GELIEFERT ist, // den Bestellwert aus der Tabelle holen if (besDto.getNBestellwert() != null) { bestellwert = berechneBestellwertGesamt(iIdBestellungI, theClientDto); } } // Step 4: Der Wert muss in unsere Datenbank passen, fuer decimal(9) // gilt 15,4 bestellwert = Helper.rundeKaufmaennisch(bestellwert, 4); checkNumberFormat(bestellwert); return bestellwert; } /** * @deprecated MB. * * Wenn der allgemeine Rabatt in den Konditionen geaendert * wurde, dann werden im Anschluss die davon abhaengigen Werte * neu berechnet. * @param iIdBestellungI * PK der Bestellung * @param theClientDto * der aktuelle Benutzer * @throws EJBExceptionLP * Ausnahme */ public void updateBestellungKonditionen(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP { try { BestellpositionDto[] aPosition = getBestellpositionFac().bestellpositionFindByBestellung(iIdBestellungI, theClientDto); // fuer jede Position den allg Rabatt neu beruecksichtigen for (int i = 0; i < aPosition.length; i++) { getBestellpositionFac().befuelleZusaetzlichePreisfelder(aPosition[i].getIId()); } Bestellung oBestellung = em.find(Bestellung.class, iIdBestellungI); if (oBestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } if (!oBestellung.getBestellungstatusCNr().equals(BestellungFac.BESTELLSTATUS_ANGELEGT)) { oBestellung.setNBestellwert(berechneNettowertGesamt(iIdBestellungI, theClientDto)); } oBestellung.setTAendern(getTimestamp()); oBestellung.setPersonalIIdAendern(theClientDto.getIDPersonal()); } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } } /** * Eine Bestellung kann manuell freigegeben werden. <br> * Bestellung muss sich im Status 'Angelegt' befinden. * * @param iIdBestellungI * PK der Bestellung * @param theClientDto * der aktuelle Benutzer * @throws EJBExceptionLP * Ausnahme */ public void manuellFreigeben(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP { if (iIdBestellungI == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL, new Exception("iIdBestellungI == null")); } Bestellung oBestellung = em.find(Bestellung.class, iIdBestellungI); if (oBestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } if (oBestellung.getBestellungstatusCNr().equals(BestellungFac.BESTELLSTATUS_ANGELEGT)) { oBestellung.setBestellungstatusCNr(BestellungFac.BESTELLSTATUS_OFFEN); oBestellung.setTAendern(getTimestamp()); oBestellung.setPersonalIIdAendern(theClientDto.getIDPersonal()); } else { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_STATUS, new Exception("Bestellung kann nicht manuell freigegeben werden, Status : " + oBestellung.getBestellungstatusCNr())); } } /** * Eine Bestellung kann manuell erledigt werden. <br> * Bestellung muss sich im Status 'Geliefert' befinden. * * @param iIdBestellungI * PK der Bestellung * @param theClientDto * der aktuelle Benutzer * @throws EJBExceptionLP * Ausnahme * @throws RemoteException */ public void manuellErledigen(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { if (iIdBestellungI == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL, new Exception("iIdBestellungI == null")); } BestellungDto bestellung = bestellungFindByPrimaryKey(iIdBestellungI); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } if (Helper.isOneOf(bestellung.getStatusCNr(), BestellungFac.BESTELLSTATUS_OFFEN, BestellungFac.BESTELLSTATUS_BESTAETIGT, BestellungFac.BESTELLSTATUS_GELIEFERT)) { bestellung.setIPersonalIIdManuellGeliefert(theClientDto.getIDPersonal()); bestellung.setTManuellGeliefert(getTimestamp()); bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_ERLEDIGT); BestellpositionDto[] positionen = getBestellpositionFac() .bestellpositionFindByBestellung(iIdBestellungI, theClientDto); for (BestellpositionDto pos : positionen) { if (Helper.isOneOf(pos.getBestellpositionstatusCNr(), BestellpositionFac.BESTELLPOSITIONSTATUS_OFFEN, BestellpositionFac.BESTELLPOSITIONSTATUS_BESTAETIGT) || bestellung.getStatusCNr().equals(BestellungFac.BESTELLSTATUS_GELIEFERT)) { try { getBestellpositionFac().manuellAufVollstaendigGeliefertSetzen(pos.getIId(), theClientDto); } catch (RemoteException e) { throwEJBExceptionLPRespectOld(e); } } if (Helper.isOneOf(pos.getBestellpositionstatusCNr(), BestellpositionFac.BESTELLPOSITIONSTATUS_GELIEFERT, BestellpositionFac.BESTELLPOSITIONSTATUS_TEILGELIEFERT)) { try { WareneingangspositionDto[] weposDtos = getWareneingangFac() .wareneingangspositionFindByBestellpositionIId(pos.getIId()); for (int i = 0; i < weposDtos.length; i++) { WareneingangspositionDto weposDto = weposDtos[i]; if (weposDto.getBPreiseErfasst().booleanValue() == false) { ArrayList<Object> al = new ArrayList<Object>(); al.add(getWareneingangFac() .wareneingangFindByPrimaryKey(weposDto.getWareneingangIId()) .getCLieferscheinnr()); al.add(getBestellpositionFac().getPositionNummer(pos.getIId(), theClientDto) + ""); throw new EJBExceptionLP( EJBExceptionLP.FEHLER_BESTELLUNG_WEPOS_PREIS_NOCH_NICHT_ERFASST, al, new Exception("FEHLER_BESTELLUNG_WEPOS_PREIS_NOCH_NICHT_ERFASST")); } } } catch (RemoteException e) { throwEJBExceptionLPRespectOld(e); } } } updateBestellung(bestellung, theClientDto, false); } else { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_STATUS, new Exception( "Bestellung kann nicht manuell erledigt werden, Status : " + bestellung.getStatusCNr())); } } /** * Storno einer Bestellung aufheben. * * @param iIdBestellungI * PK der Bestellung * @param theClientDto * der aktuelle Benutzer * @throws EJBExceptionLP * Ausnahme */ public void stornoAufheben(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP { if (iIdBestellungI == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL, new Exception("iIdBestellungI == null")); } BestellungDto bestellung = bestellungFindByPrimaryKey(iIdBestellungI); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } if (bestellung.getStatusCNr().equals(BestellungFac.BESTELLSTATUS_STORNIERT)) { bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_ANGELEGT); bestellung.setTStorniert(null); bestellung.setPersonalIIdStorniert(null); updateBestellung(bestellung, theClientDto, false); } else { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_STATUS, new Exception( "Storno der Bestellung kann nicht aufgehoben werden, Status : " + bestellung.getStatusCNr())); } } /** * Eine Bestellung stornieren. * * @param iIdBestellungI * PK der Bestellung * @param theClientDto * der aktuelle Benutzer * @throws EJBExceptionLP * Ausnahme */ public void stornieren(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP { if (iIdBestellungI == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL, new Exception("iIdBestellungI == null")); } try { BestellungDto bestellung = bestellungFindByPrimaryKey(iIdBestellungI); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } if (bestellung.getStatusCNr().equals(BestellungFac.BESTELLSTATUS_ANGELEGT)) { bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_STORNIERT); bestellung.setTStorniert(getTimestamp()); bestellung.setPersonalIIdStorniert(theClientDto.getIDPersonal()); // die Bestellwerte und Positionen bleiben beim Stornieren // erhalten BestellpositionDto[] oBestellpositionen = getBestellpositionFac() .bestellpositionFindByBestellung(iIdBestellungI, theClientDto); for (int i = 0; i < oBestellpositionen.length; i++) { // PJ 14905 Rahmenmengen korrigieren if (bestellung.getBestellungartCNr().equals(BestellungFac.BESTELLUNGART_ABRUFBESTELLUNG_C_NR)) { if (oBestellpositionen[i].getIBestellpositionIIdRahmenposition() != null) { BigDecimal nAbrufmenge = oBestellpositionen[i].getNMenge(); Bestellposition rahmenposition = em.find(Bestellposition.class, oBestellpositionen[i].getIBestellpositionIIdRahmenposition()); if (rahmenposition != null) { rahmenposition.setNOffenemenge(rahmenposition.getNOffenemenge().add(nAbrufmenge)); } } } getArtikelbestelltFac().aktualisiereBestelltListe(oBestellpositionen[i].getIId(), theClientDto); } updateBestellung(bestellung, theClientDto, false); } else { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_STATUS, new Exception( "Bestellung kann nicht storniert werden, Status : " + bestellung.getStatusCNr())); } } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } } private void importiereBestellung(ArrayList<ImportMonatsbestellungDto> importBestellung, TheClientDto theClientDto) { // PJ17902 // Belegdatum und Lieferant kommen aus der 1.Zeile und gelten fuer den // Rest des Import-Files // Es wird immer eine neue Bestellung pro Datei angelegt BestellungDto bsdto = createBestellungDto(importBestellung.get(0).getLieferantIId(), theClientDto.getMandant(), theClientDto.getIDPersonal()); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(importBestellung.get(0).getWeDatum().getTime()); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); bsdto.setDBelegdatum(new java.sql.Date(cal.getTime().getTime())); bsdto.setDLiefertermin(new Timestamp(cal.getTimeInMillis())); bsdto.setCBez("Bestellungsimport " + Helper.formatDatumZeit(new java.sql.Date(System.currentTimeMillis()), theClientDto.getLocUi()) + " " + getPersonalFac().personalFindByPrimaryKey(theClientDto.getIDPersonal(), theClientDto) .getCKurzzeichen()); Integer bestellungIId = null; try { bestellungIId = getBestellungFac().createBestellung(bsdto, theClientDto); } catch (EJBExceptionLP e) { throw new EJBExceptionLP(e); } catch (RemoteException e) { throw new EJBExceptionLP(e); } for (int i = 0; i < importBestellung.size(); i++) { // Position anlegen //SP1768 if (importBestellung.get(i).getMenge() == null || importBestellung.get(i).getMenge().doubleValue() == 0) { continue; } try { BestellpositionDto bspos = createBestellPositionDto(bestellungIId, importBestellung.get(i).getLieferantIId(), importBestellung.get(i).getArtikelIId(), importBestellung.get(i).getMenge(), theClientDto); getBestellpositionFac().createBestellposition(bspos, theClientDto, null, null); } catch (EJBExceptionLP e) { throw new EJBExceptionLP(e); } catch (RemoteException e) { throw new EJBExceptionLP(e); } } } public void importiereMonatsbestellung(ArrayList<ImportMonatsbestellungDto> importMonatbestellung, TheClientDto theClientDto) { // letzte Bestellung des Lieferanten suchen und nachsehen, ob diese in // diesem Monat bereits vorhanden ist. // PJ 17876 Integer iMonatsbestellungsart = 0; try { ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_BESTELLUNG, ParameterFac.PARAMETER_MONATSBESTELLUNGSART); iMonatsbestellungsart = (Integer) parameter.getCWertAsObject(); } catch (RemoteException e2) { throwEJBExceptionLPRespectOld(e2); } if (iMonatsbestellungsart == 2) { importiereBestellung(importMonatbestellung, theClientDto); return; } for (int i = 0; i < importMonatbestellung.size(); i++) { SessionFactory factory = FLRSessionFactory.getFactory(); Session session = factory.openSession(); Criteria c = session.createCriteria(FLRBestellung.class); c.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_LIEFERANT_I_ID_BESTELLADRESSE, importMonatbestellung.get(i).getLieferantIId())); Calendar cal = Calendar.getInstance(); cal.setTimeInMillis(importMonatbestellung.get(i).getWeDatum().getTime()); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); cal.set(Calendar.MILLISECOND, 999); c.add(Restrictions.le(BestellungFac.FLR_BESTELLUNG_T_BELEGDATUM, cal.getTime())); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); SimpleDateFormat dateformat = new SimpleDateFormat("MMMM", theClientDto.getLocUi()); dateformat.format(cal.getTime()); String projektTextMonatsbestellung = "Monatsbestellung " + dateformat.format(cal.getTime()) + " " + cal.get(Calendar.YEAR); c.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_C_BEZPROJEKTBEZEICHNUNG, projektTextMonatsbestellung)); c.add(Restrictions.ge(BestellungFac.FLR_BESTELLUNG_T_BELEGDATUM, cal.getTime())); // String[] s = new String[2]; s[0] = BestellungFac.BESTELLSTATUS_ERLEDIGT; s[1] = BestellungFac.BESTELLSTATUS_STORNIERT; c.add(Restrictions.not(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGSTATUS_C_NR, s))); c.addOrder(Order.desc(BestellungFac.FLR_BESTELLUNG_T_BELEGDATUM)); c.setMaxResults(1); List<?> list = c.list(); Integer bestellungIId = null; if (list.size() > 0) { FLRBestellung b = (FLRBestellung) list.iterator().next(); bestellungIId = b.getI_id(); } Lieferant lieferant = em.find(Lieferant.class, importMonatbestellung.get(i).getLieferantIId()); Partner partner = em.find(Partner.class, lieferant.getPartnerIId()); if (bestellungIId == null) { BestellungDto bsdto = createBestellungDto(importMonatbestellung.get(i).getLieferantIId(), theClientDto.getMandant(), theClientDto.getIDPersonal()); try { BestellungtextDto bsText = getBestellungServiceFac().bestellungtextFindByMandantLocaleCNr( theClientDto.getMandant(), partner.getLocaleCNrKommunikation(), MediaFac.MEDIAART_KOPFTEXT, theClientDto); if (bsText != null) { bsdto.setBestelltextIIdKopftext(bsText.getIId()); } bsText = getBestellungServiceFac().bestellungtextFindByMandantLocaleCNr( theClientDto.getMandant(), partner.getLocaleCNrKommunikation(), MediaFac.MEDIAART_FUSSTEXT, theClientDto); if (bsText != null) { bsdto.setBestelltextIIdFusstext(bsText.getIId()); } } catch (RemoteException e1) { throwEJBExceptionLPRespectOld(e1); } bsdto.setDBelegdatum(new Date(cal.getTimeInMillis()));// bsdto.setDLiefertermin(new Timestamp(cal.getTimeInMillis())); bsdto.setCBez(projektTextMonatsbestellung); try { bestellungIId = getBestellungFac().createBestellung(bsdto, theClientDto); } catch (EJBExceptionLP e) { throw new EJBExceptionLP(e); } catch (RemoteException e) { throw new EJBExceptionLP(e); } } // Position anlegen try { BestellpositionDto bspos = createBestellPositionDto(bestellungIId, importMonatbestellung.get(i).getLieferantIId(), importMonatbestellung.get(i).getArtikelIId(), importMonatbestellung.get(i).getMenge(), theClientDto); Integer bsPosIId = getBestellpositionFac().createBestellposition(bspos, theClientDto, null, null); // Wareneingang zu Verladedatum anlegen, wenn noch nicht // vorhanden if (iMonatsbestellungsart == 0) { Timestamp tVerladedatum = new java.sql.Timestamp( importMonatbestellung.get(i).getWeDatum().getTime()); Query query = em.createNamedQuery("WareneingangfindByBestellungIIdTWareneingangsdatum"); query.setParameter(1, bestellungIId); query.setParameter(2, tVerladedatum); Collection<?> col = query.getResultList(); Integer wareneingangId = null; if (col.size() > 0) { Wareneingang we = (Wareneingang) col.iterator().next(); wareneingangId = we.getIId(); } else { WareneingangDto wedto = new WareneingangDto(); wedto.setBestellungIId(bestellungIId); wedto.setCLieferscheinnr(importMonatbestellung.get(i).getLieferscheinnr()); wedto.setTLieferscheindatum(tVerladedatum); wedto.setTWareneingangsdatum(tVerladedatum); wedto.setLagerIId(lieferant.getLagerIIdZubuchungslager()); wedto.setNWechselkurs(new BigDecimal(1)); try { wareneingangId = getWareneingangFac().createWareneingang(wedto, theClientDto); } catch (RemoteException e) { throw new EJBExceptionLP(e); } } try { WareneingangspositionDto weposDto = new WareneingangspositionDto(); weposDto.setBestellpositionIId(bsPosIId); weposDto.setNGeliefertemenge(importMonatbestellung.get(i).getMenge()); weposDto.setPersonalIIdAendern(theClientDto.getIDPersonal()); weposDto.setPersonalIIdAnlegen(theClientDto.getIDPersonal()); weposDto.setTAendern(new Timestamp(System.currentTimeMillis())); weposDto.setTAnlegen(weposDto.getTAendern()); weposDto.setWareneingangIId(wareneingangId); BigDecimal nGeliefertpreis = bspos.getNNettogesamtpreis(); weposDto.setNGelieferterpreis(nGeliefertpreis); getWareneingangFac().createWareneingangsposition(weposDto, theClientDto); getBestellungFac().aktiviereBestellung(bestellungIId, theClientDto); getBestellpositionFac().manuellAufVollstaendigGeliefertSetzen(bsPosIId, theClientDto); } catch (EJBExceptionLP e) { throw new EJBExceptionLP(e); } catch (RemoteException e) { throw new EJBExceptionLP(e); } } } catch (EJBExceptionLP e) { throw new EJBExceptionLP(e); } catch (RemoteException e) { throw new EJBExceptionLP(e); } session.close(); } } // private Integer getIntegerParameter(String mandantCnr, String kategorie, // String parameter) { // ParametermandantDto p; // try { // p = getParameterFac().getMandantparameter(mandantCnr, kategorie, // parameter); // } catch (Exception e) { // return null; // } // return new Integer(p.getCWert()); // } public BestellungDto createBestellungDto(Integer lieferantIId, String mandantCNr, Integer personalId) { BestellungDto bsdto = new BestellungDto(); Lieferant lieferant = em.find(Lieferant.class, lieferantIId); bsdto.setBestellungartCNr(BestellungFac.BESTELLUNGART_FREIE_BESTELLUNG_C_NR); bsdto.setStatusCNr(BestellungFac.BESTELLSTATUS_ANGELEGT); bsdto.setBTeillieferungMoeglich(Helper.boolean2Short(false)); // TODO: Wechselkurs fuer Bestellung bsdto.setFWechselkursmandantwaehrungzubelegwaehrung(new Double(1)); bsdto.setFAllgemeinerRabattsatz(new Double(0)); bsdto.setLieferantIIdBestelladresse(lieferantIId); bsdto.setLieferantIIdRechnungsadresse(lieferantIId); bsdto.setLieferartIId(lieferant.getLieferartIId()); bsdto.setMandantCNr(mandantCNr); bsdto.setPersonalIIdAendern(personalId); bsdto.setPersonalIIdAnlegen(personalId); bsdto.setPersonalIIdAnforderer(personalId); bsdto.setSpediteurIId(lieferant.getSpediteurIId()); bsdto.setTAendern(getTimestamp()); bsdto.setTAnlegen(getTimestamp()); bsdto.setZahlungszielIId(lieferant.getZahlungszielIId()); bsdto.setKostenstelleIId(lieferant.getKostenstelleIId()); bsdto.setWaehrungCNr(lieferant.getWaehrungCNr()); bsdto.setLieferartIId(lieferant.getLieferartIId()); bsdto.setZahlungszielIId(lieferant.getZahlungszielIId()); bsdto.setSpediteurIId(lieferant.getSpediteurIId()); bsdto.setLieferartIId(lieferant.getLieferartIId()); return bsdto; } public BestellpositionDto createBestellPositionDto(Integer bsId, Integer lieferantId, Integer artikelIId, BigDecimal menge, TheClientDto theClientDto) { BestellpositionDto bspos = new BestellpositionDto(); bspos.setArtikelIId(artikelIId); Artikel artikel = em.find(Artikel.class, artikelIId); bspos.setBestellungIId(bsId); bspos.setPositionsartCNr(BestellpositionFac.BESTELLPOSITIONART_IDENT); bspos.setNMenge(menge); bspos.setEinheitCNr(artikel.getEinheitCNr()); ArtikellieferantDto artikellieferantDto = getArtikelFac().getArtikelEinkaufspreis(artikel.getIId(), lieferantId, bspos.getNMenge(), theClientDto.getSMandantenwaehrung(), null, theClientDto); if (artikellieferantDto == null) { bspos.setNNettoeinzelpreis(new BigDecimal(0)); bspos.setNNettogesamtpreis(new BigDecimal(0)); bspos.setDRabattsatz(new Double(0)); } else { bspos.setNNettoeinzelpreis(artikellieferantDto.getNEinzelpreis()); bspos.setNNettogesamtpreis(artikellieferantDto.getNNettopreis()); bspos.setDRabattsatz(artikellieferantDto.getFRabatt()); } bspos.setNRabattbetrag( Helper.getProzentWert(bspos.getNNettogesamtpreis(), new BigDecimal(bspos.getDRabattsatz()), 2)); bspos.setBArtikelbezeichnunguebersteuert(Helper.boolean2Short(false)); bspos.setBNettopreisuebersteuert(Helper.boolean2Short(false)); bspos.setBRabattsatzUebersteuert(Helper.boolean2Short(false)); bspos.setNMaterialzuschlag(new BigDecimal(0)); return bspos; } public Integer erzeugeBestellungAusAnfrage(Integer iIdAnfrageI, TheClientDto theClientDto) throws EJBExceptionLP { AnfrageFac anfrageFac = getAnfrageFac(); AnfragepositionFac anfrageposFac = getAnfragepositionFac(); BestellungFac bestellungFac = getBestellungFac(); BestellpositionFac bestellposFac = getBestellpositionFac(); AnfrageDto oAnfrageBasis = null; Integer iIdBestellung = null; try { oAnfrageBasis = anfrageFac.anfrageFindByPrimaryKey(iIdAnfrageI, theClientDto); BestellungDto bestellungDto = new BestellungDto(); // befuellen des Dto bestellungDto.setMandantCNr(theClientDto.getMandant()); bestellungDto.setPersonalIIdAnforderer(theClientDto.getIDPersonal()); bestellungDto.setBestellungartCNr(BestellungFac.BESTELLUNGART_FREIE_BESTELLUNG_C_NR); bestellungDto.setStatusCNr(BestellungFac.BESTELLSTATUS_ANGELEGT); bestellungDto.setBelegartCNr(LocaleFac.BELEGART_BESTELLUNG); // heutiges Datum bestellungDto.setDBelegdatum(Helper.cutDate(getDate())); bestellungDto.setLieferantIIdBestelladresse(oAnfrageBasis.getLieferantIIdAnfrageadresse()); bestellungDto.setAnsprechpartnerIId(oAnfrageBasis.getAnsprechpartnerIIdLieferant()); // SP1759 LieferantDto lfDto = getLieferantFac() .lieferantFindByPrimaryKey(bestellungDto.getLieferantIIdBestelladresse(), theClientDto); if (lfDto.getPartnerIIdRechnungsadresse() != null) { LieferantDto lfDtoRA = getLieferantFac().lieferantFindByiIdPartnercNrMandantOhneExc( lfDto.getPartnerIIdRechnungsadresse(), theClientDto.getMandant(), theClientDto); if (lfDtoRA != null) { bestellungDto.setLieferantIIdRechnungsadresse(lfDtoRA.getIId()); } } bestellungDto.setCBez(oAnfrageBasis.getCBez()); bestellungDto.setProjektIId(oAnfrageBasis.getProjektIId()); bestellungDto.setWaehrungCNr(oAnfrageBasis.getWaehrungCNr()); bestellungDto.setFWechselkursmandantwaehrungzubelegwaehrung( oAnfrageBasis.getFWechselkursmandantwaehrungzubelegwaehrung()); bestellungDto.setKostenstelleIId(oAnfrageBasis.getKostenstelleIId()); bestellungDto.setBTeillieferungMoeglich(new Short((short) 0)); bestellungDto.setFAllgemeinerRabattsatz(oAnfrageBasis.getFAllgemeinerRabattsatz().doubleValue()); bestellungDto.setLieferartIId(oAnfrageBasis.getLieferartIId()); bestellungDto.setZahlungszielIId(oAnfrageBasis.getZahlungszielIId()); bestellungDto.setSpediteurIId(oAnfrageBasis.getSpediteurIId()); bestellungDto.setAnfrageIId(oAnfrageBasis.getIId()); // diese neue Bestellung abspeichern iIdBestellung = bestellungFac.createBestellung(bestellungDto, theClientDto); bestellungDto.setIId(iIdBestellung); // positionen anlegen AnfragepositionDto[] anfragepos = anfrageposFac.anfragepositionFindByAnfrage(iIdAnfrageI, theClientDto); for (int i = 0; i < anfragepos.length; i++) { AnfragepositionDto anfragepos2 = anfragepos[i]; BestellpositionDto besposDto = new BestellpositionDto(); besposDto.setBestellungIId(iIdBestellung); besposDto.setBNettopreisuebersteuert(Helper.boolean2Short(false)); if (anfragepos2.getPositionsartCNr().equals(BestellpositionFac.BESTELLPOSITIONART_HANDEINGABE) || anfragepos2.getPositionsartCNr().equals(BestellpositionFac.BESTELLPOSITIONART_IDENT)) { // Lieferdaten holen, wenn Lieferdaten vorhanden AnfragepositionlieferdatenDto anfposlieferdatenDto = anfrageposFac .anfragepositionlieferdatenFindByAnfragepositionIIdOhneExc(anfragepos2.getIId()); besposDto.setPositionsartCNr(anfragepos2.getPositionsartCNr()); besposDto.setBestellpositionstatusCNr(BestellpositionFac.BESTELLPOSITIONSTATUS_OFFEN); besposDto.setArtikelIId(anfragepos2.getArtikelIId()); if (anfragepos2.getArtikelIId() != null && Helper.short2boolean(anfragepos2.getBArtikelbezeichnunguebersteuert()) == false) { ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(anfragepos2.getArtikelIId(), theClientDto); besposDto.setCBez(artikelDto.getArtikelsprDto().getCBez()); } else { besposDto.setCBez(anfragepos2.getCBez()); besposDto.setCZusatzbez(anfragepos2.getCZusatzbez()); } besposDto.setBArtikelbezeichnunguebersteuert(anfragepos2.getBArtikelbezeichnunguebersteuert()); besposDto.setXTextinhalt(anfragepos2.getXTextinhalt()); besposDto.setMediastandardIId(anfragepos2.getMediastandardIId()); besposDto.setEinheitCNr(anfragepos2.getEinheitCNr()); besposDto.setDRabattsatz(new Double(0)); besposDto.setNRabattbetrag(new BigDecimal(0)); besposDto.setNMaterialzuschlag(new BigDecimal(0)); if (anfposlieferdatenDto != null && Helper.short2boolean(anfposlieferdatenDto.getBErfasst()) == true) { besposDto.setNMenge(anfposlieferdatenDto.getNAnliefermenge()); besposDto.setNNettoeinzelpreis(anfposlieferdatenDto.getNNettogesamtpreisminusrabatt()); besposDto.setNNettogesamtpreis(anfposlieferdatenDto.getNNettogesamtpreisminusrabatt()); } else { besposDto.setNMenge(anfragepos2.getNMenge()); besposDto.setNNettoeinzelpreis(anfragepos2.getNRichtpreis()); besposDto.setNNettogesamtpreis(anfragepos2.getNRichtpreis()); } bestellposFac.createBestellposition(besposDto, theClientDto, BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_EINZELPREIS_RUECKPFLEGEN, null); // den allgemeinen Rabatt fuer alle Positionen // beruecksichtigen und das // zusaetzliche Preisfeld befuellen updateBestellungKonditionen(iIdBestellung, theClientDto); } else if (anfragepos2.getPositionsartCNr() .equals(BestellpositionFac.BESTELLPOSITIONART_BETRIFFT)) { besposDto.setCBez(anfragepos2.getCBez()); besposDto.setPositionsartCNr(anfragepos2.getPositionsartCNr()); besposDto.setXTextinhalt(anfragepos2.getXTextinhalt()); besposDto.setBestellpositionstatusCNr(BestellpositionFac.BESTELLPOSITIONSTATUS_OFFEN); besposDto.setMediastandardIId(anfragepos2.getMediastandardIId()); bestellposFac.createBestellposition(besposDto, theClientDto, BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_PREIS_UNVERAENDERT, null); } else if (anfragepos2.getPositionsartCNr() .equals(BestellpositionFac.BESTELLPOSITIONART_LEERZEILE)) { besposDto.setPositionsartCNr(anfragepos2.getPositionsartCNr()); besposDto.setBestellpositionstatusCNr(BestellpositionFac.BESTELLPOSITIONSTATUS_OFFEN); besposDto.setMediastandardIId(anfragepos2.getMediastandardIId()); bestellposFac.createBestellposition(besposDto, theClientDto, BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_PREIS_UNVERAENDERT, null); } else if (anfragepos2.getPositionsartCNr() .equals(BestellpositionFac.BESTELLPOSITIONART_SEITENUMBRUCH)) { besposDto.setPositionsartCNr(anfragepos2.getPositionsartCNr()); besposDto.setBestellpositionstatusCNr(BestellpositionFac.BESTELLPOSITIONSTATUS_OFFEN); besposDto.setMediastandardIId(anfragepos2.getMediastandardIId()); bestellposFac.createBestellposition(besposDto, theClientDto, BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_PREIS_UNVERAENDERT, null); } else if (anfragepos2.getPositionsartCNr() .equals(BestellpositionFac.BESTELLPOSITIONART_TEXTBAUSTEIN)) { besposDto.setPositionsartCNr(anfragepos2.getPositionsartCNr()); besposDto.setBestellpositionstatusCNr(BestellpositionFac.BESTELLPOSITIONSTATUS_OFFEN); besposDto.setMediastandardIId(anfragepos2.getMediastandardIId()); bestellposFac.createBestellposition(besposDto, theClientDto, BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_PREIS_UNVERAENDERT, null); } else if (anfragepos2.getPositionsartCNr() .equals(BestellpositionFac.BESTELLPOSITIONART_TEXTEINGABE)) { besposDto.setPositionsartCNr(anfragepos2.getPositionsartCNr()); besposDto.setXTextinhalt(anfragepos2.getXTextinhalt()); besposDto.setBestellpositionstatusCNr(BestellpositionFac.BESTELLPOSITIONSTATUS_OFFEN); besposDto.setMediastandardIId(anfragepos2.getMediastandardIId()); bestellposFac.createBestellposition(besposDto, theClientDto, BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_PREIS_UNVERAENDERT, null); } } // setzen des Anfragestatus von offen auf erledigt getAnfrageFac().setzeAnfragestatus(AnfrageServiceFac.ANFRAGESTATUS_ERLEDIGT, iIdAnfrageI, theClientDto); } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } return iIdBestellung; } /** * Eine Anfrage kann in 0..n Bestellungen aufscheinen. Hole alle * Bestellungen zu einer Anfrage. * * @param iIdAnfrageI * PK der Anfrage * @param theClientDto * der aktuelle Benutzer * @return BestellungDto[] die Bestellungen * @throws EJBExceptionLP * Ausnahme */ public BestellungDto[] bestellungFindByAnfrage(Integer iIdAnfrageI, TheClientDto theClientDto) throws EJBExceptionLP { if (iIdAnfrageI == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL, new Exception("iIdAnfrageI == null")); } BestellungDto[] aBestellungDtos = null; // try { Query query = em.createNamedQuery("BestellungfindByAnfrage"); query.setParameter(1, iIdAnfrageI); Collection<?> cl = query.getResultList(); // if (cl.isEmpty()) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // null); // } aBestellungDtos = assembleBestellungDtos(cl); // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } return aBestellungDtos; } /** * Den Status einer Bestellung von 'geliefert' auf 'offen' setzen. <br> * Diese Aktion ist nur moeglich, wenn der 'geliefert' Status manuell * gesetzt wurde. * * @param iIdBestellungI * Integer * @param theClientDto * String * @throws EJBExceptionLP * @throws RemoteException */ public void erledigenAufheben(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { myLogger.logData(iIdBestellungI); BestellungDto bestellung = bestellungFindByPrimaryKey(iIdBestellungI); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } BestellpositionDto[] positionen = getBestellpositionFac().bestellpositionFindByBestellung(iIdBestellungI, theClientDto); boolean bHatIdentsOderHandeingaben = false; for (BestellpositionDto pos : positionen) { if (pos.getTManuellvollstaendiggeliefert() != null) { try { getBestellpositionFac().manuellErledigungAufheben(pos.getIId(), theClientDto); } catch (RemoteException e) { } } String sPositionsart = pos.getPositionsartCNr(); if (BestellpositionFac.BESTELLPOSITIONART_HANDEINGABE.equals(sPositionsart) || BestellpositionFac.BESTELLPOSITIONART_IDENT.equals(sPositionsart)) { bHatIdentsOderHandeingaben = true; } } if (bHatIdentsOderHandeingaben) { bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_OFFEN); } else { bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_ANGELEGT); } bestellung.setIPersonalIIdManuellGeliefert(null); bestellung.setTManuellGeliefert(null); updateBestellung(bestellung, theClientDto); } /** * @deprecated MB. * * Den Wechselkurs zwischen Bestellungswaehrung und * Mandantwaehrung fuer eine bestimmte Bestellung bestimmen. * @param iIdBestellungI * PK der Bestellung * @param theClientDto * der aktuelle Benutzer * @return Double der Wechselkurs * @throws EJBExceptionLP * Ausnahme */ public Double getWechselkursBestellungswaehrungZuMandantwaehrung(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP { // checkBestellungIId(iIdBestellungI); Bestellung bestellung = null; // try { bestellung = em.find(Bestellung.class, iIdBestellungI); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } Double ddWechselkursReziprok = bestellung.getFWechselkursmandantwaehrungbestellungswaehrung(); if (ddWechselkursReziprok != null) { ddWechselkursReziprok = new Double(1 / ddWechselkursReziprok.doubleValue()); } return ddWechselkursReziprok; } /** * liefert zu einer RahmenbestellungId alle Abrufbestellungen zurück * * @param iIdRahmenBestellungI * Integer * @param theClientDto * String * @return BestellungDto[] */ public BestellungDto[] abrufBestellungenfindByRahmenbestellung(Integer iIdRahmenBestellungI, TheClientDto theClientDto) { if (iIdRahmenBestellungI == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL, new Exception("iIdRahmenBestellungI == null")); } BestellungDto[] aBestellungDtos = null; // try { Query query = em.createNamedQuery("BestellungfindByRahmenbestellung"); query.setParameter(1, iIdRahmenBestellungI); Collection<?> cl = query.getResultList(); // if (cl.isEmpty()) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, null); // } aBestellungDtos = assembleBestellungDtos(cl); // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex); // } return aBestellungDtos; } /** * * @param iBestellungId * Integer * @return BestellungDto */ public BestellungDto bestellungFindByPrimaryKeyOhneExc(Integer iBestellungId) { BestellungDto bestellungDto = null; // try { Bestellung bestellung = em.find(Bestellung.class, iBestellungId); if (bestellung == null) { myLogger.warn("iBestellungId=" + iBestellungId); } bestellungDto = assembleBestellungDto(bestellung); return bestellungDto; } public BestellungDto bestellungFindByPrimaryKeyWithNull(Integer iBestellungId) { Bestellung bestellung = em.find(Bestellung.class, iBestellungId); return bestellung == null ? null : assembleBestellungDto(bestellung); } // /** // * // * @param bestellungDtoI BestellungDto // * @param theClientDto String // * @throws EJBExceptionLP // */ // public void updateRahmenbestellung(BestellungDto bestellungDtoI, // TheClientDto theClientDto) // throws EJBExceptionLP { // // //merken fuer liefertermin setzen (siehe ende von updateBestellung) // BestellungDto besDto = new BestellungDto(); // besDto = bestellungFindByPrimaryKey(bestellungDtoI.getIId()); // checkBestellungDto(bestellungDtoI, theClientDto); // // try { // // Informationen des aktuellen Benutzers setzen // if (theClientDto != null) { // bestellungDtoI.setPersonalIIdAendern(theClientDto.getIDPersonal()); // // Timestamp t = new Timestamp(System.currentTimeMillis()); // bestellungDtoI.setTAendern(t); // } // // Bestellung bestellung = em.find(Bestellung.class, // bestellungDtoI.getIId()); // if (bestellung == null) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // null); // } // //zwischenspeichern der vorigen Bestelldaten // String sStatus = bestellung.getBestellungstatusCNr(); // // setBestellungFromBestellungDto(bestellung, bestellungDtoI); // // //updaten des Datums der bestellpositionen // if (besDto.getDLiefertermin() != // bestellungFindByPrimaryKey(bestellungDtoI.getIId()). // getDLiefertermin()) { // BestellpositionDto besposDto[] = getBestellpositionFac(). // bestellpositionFindByBestellung(bestellungDtoI.getIId(), theClientDto); // // for (int i = 0; i < besposDto.length; i++) { // // Bestelltliste aktualsisiert // getBestellpositionFac().updateBestellpositionBeiLieferterminAenderung( // besposDto[ // i].getIId(), theClientDto); // getArtikelbestelltFac().aktualisiereBestelltListe(bestellungDtoI.getIId(), // theClientDto); // } // } // } // catch (RemoteException ex) { // throwEJBExceptionLPRespectOld(ex); // } // // catch (FinderException ex) { // // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // // } // // } // /** // * @deprecated MB. // * // * updated eine Bestellung ohne weitere Aktionen zb. Statusaenderung // * erfolgt hier nicht // * @param bestellungDto BestellungDto // * @param theClientDto String // * @throws EJBExceptionLP // */ // public void updateBestellungOhneWeitereAktionen(BestellungDto // bestellungDto, // TheClientDto theClientDto) // throws EJBExceptionLP { // // try { // Bestellung bestellung = em.find(Bestellung.class, // bestellungDto.getIId()); // if (bestellung == null) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // null); // } // // setBestellungFromBestellungDto(bestellung, bestellungDto); // // myLogger.exit("Die Bestellung wurde aktualisiert, Status: " + // bestellung.getBestellungstatusCNr()); // // } // // catch (FinderException ex) { // // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // // } // // } /** * findet alle bestellungen eines mandanten und speziellen status * * @param theClientDto * String * @param bsStatus * String * @return BestellungDto[] * @throws EJBExceptionLP */ public BestellungDto[] findBestellungByMandantCNrAndBestellstatus(TheClientDto theClientDto, String bsStatus) throws EJBExceptionLP { BestellungDto bestellungDto[] = null; if (theClientDto == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER, new Exception("theClientDto == null")); } if (bsStatus == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER, new Exception("bsStatus == null")); } // try { Query query = em.createNamedQuery("BestellungfindByMandantCNr"); query.setParameter(1, theClientDto.getMandant()); query.setParameter(2, bsStatus); Collection<?> cl = query.getResultList(); // if (cl.isEmpty()) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // null); // } bestellungDto = assembleBestellungDtos(cl); // } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } return bestellungDto; } public void setzeBSMahnsperre(Integer bestellungIId, java.sql.Date tmahnsperre, TheClientDto theClientDto) throws EJBExceptionLP { BestellungDto bestellung = bestellungFindByPrimaryKey(bestellungIId); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ""); } bestellung.setTMahnsperreBis(tmahnsperre); updateBestellung(bestellung, theClientDto); } public Boolean isBSErledigt(Integer iIdBestellungI, TheClientDto theClientDto) { // muss geliefert sein boolean bErledigt = isBSGeliefert(iIdBestellungI, theClientDto).booleanValue(); if (bErledigt) { BestellpositionDto[] aBSPOS = null; try { aBSPOS = getBestellpositionFac().bestellpositionFindByBestellung(iIdBestellungI, theClientDto); for (int xBSPOS = 0; xBSPOS < aBSPOS.length; xBSPOS++) { if (aBSPOS[xBSPOS].getPositionsartCNr().equals(BestellpositionFac.BESTELLPOSITIONART_IDENT) || aBSPOS[xBSPOS].getPositionsartCNr() .equals(BestellpositionFac.BESTELLPOSITIONART_HANDEINGABE)) { // --Kandidat fuer Erledigtstatusbestimmung WareneingangspositionDto[] wepos = getWareneingangFac() .wareneingangspositionFindByBestellpositionIId(aBSPOS[xBSPOS].getIId()); int xWEPOS = 0; int nWEPOS = wepos.length; bErledigt = true; while (xWEPOS < nWEPOS && bErledigt) { if (wepos[xWEPOS].getNGelieferterpreis() == null) { bErledigt = false; break; } xWEPOS++; } } if (!bErledigt) { break; } } } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } } return new Boolean(bErledigt); } public Boolean isBSGeliefert(Integer iIdBestellungI, TheClientDto theClientDto) { boolean bIsGeliefert = true; try { BestellpositionDto[] aBSPOS = getBestellpositionFac().bestellpositionFindByBestellung(iIdBestellungI, theClientDto); BigDecimal bdNull = new BigDecimal(0); for (int xBSPOS = 0; xBSPOS < aBSPOS.length; xBSPOS++) { if (aBSPOS[xBSPOS].getPositionsartCNr().equals(BestellpositionFac.BESTELLPOSITIONART_IDENT) || aBSPOS[xBSPOS].getPositionsartCNr() .equals(BestellpositionFac.BESTELLPOSITIONART_HANDEINGABE)) { if (getBestellpositionFac().berechneOffeneMenge(aBSPOS[xBSPOS]).compareTo(bdNull) != 0) { if (!aBSPOS[xBSPOS].getBestellpositionstatusCNr() .equals(BestellpositionFac.BESTELLPOSITIONSTATUS_ERLEDIGT)) { // --BSPOS hat offene Menge bIsGeliefert = false; } } else { aBSPOS[xBSPOS] .setBestellpositionstatusCNr(BestellpositionFac.BESTELLPOSITIONSTATUS_ERLEDIGT); getBestellpositionFac().updateBestellpositionOhneWeitereAktion(aBSPOS[xBSPOS], theClientDto); } if ((getBestellpositionFac().berechneOffeneMenge(aBSPOS[xBSPOS]).compareTo(bdNull) < 0)) { bIsGeliefert = true; } } } } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } return new Boolean(bIsGeliefert); } /** * refresh, wenn noetig den BS Status. * * @param iIdBSI * Integer * @param theClientDto * WareneingangspositionDto refreshBSStatusAndBestelltListe */ public void refreshBSStatusAndBestelltListe(Integer iIdBSI, TheClientDto theClientDto) { BestellungDto bs = bestellungFindByPrimaryKey(iIdBSI); if ((isBSGeliefert(iIdBSI, theClientDto).booleanValue())) { // --Status: geliefert: alle BSPOS sind (ueber)geliefert bs.setStatusCNr(BestellungFac.BESTELLSTATUS_GELIEFERT); updateBestellung(bs, theClientDto); } else { // --Status: offen bs.setStatusCNr(BestellungFac.BESTELLSTATUS_OFFEN); updateBestellung(bs, theClientDto); } bs = bestellungFindByPrimaryKey(iIdBSI); updateBestellung(bs, theClientDto); } public Integer erzeugeBestellungAusBestellung(Integer iIdBestellungI, TheClientDto theClientDto) throws EJBExceptionLP { if (iIdBestellungI == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, new Exception("iIdBestellungI == null")); } BestellungDto bestellungBasisDto = null; try { bestellungBasisDto = getBestellungFac().bestellungFindByPrimaryKey(iIdBestellungI); } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } Integer iIdBestellungKopie = null; try { BestellungDto bestellungDto = (BestellungDto) bestellungBasisDto.clone(); bestellungDto .setFWechselkursmandantwaehrungzubelegwaehrung(new Double(getLocaleFac() .getWechselkurs2( getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(), theClientDto) .getWaehrungCNr(), bestellungDto.getWaehrungCNr(), theClientDto) .doubleValue())); // SP 1833 bestellungDto.setTAenderungsbestellung(null); // +14 tage ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_BESTELLUNG, ParameterFac.PARAMETER_OFFSET_LIEFERZEIT_IN_TAGEN); Integer iOffsetLFZeit = new Integer(parameter.getCWert()); long lLFTermin = System.currentTimeMillis() + (iOffsetLFZeit.intValue() * 24 * 60 * 60 * 1000); bestellungDto.setDBelegdatum(new java.sql.Date(System.currentTimeMillis())); bestellungDto.setDLiefertermin(new java.sql.Timestamp(lLFTermin)); iIdBestellungKopie = createBestellung(bestellungDto, theClientDto); // alle Positionen kopieren BestellpositionDto[] aBSpositionBasis = getBestellpositionFac() .bestellpositionFindByBestellung(iIdBestellungI, theClientDto); for (int i = 0; i < aBSpositionBasis.length; i++) { BestellpositionDto bstellpositionDto = (BestellpositionDto) aBSpositionBasis[i].clone(); bstellpositionDto.setBestellpositionstatusCNr(BestellpositionFac.BESTELLPOSITIONSTATUS_OFFEN); bstellpositionDto.setNMenge(aBSpositionBasis[i].getNMenge()); bstellpositionDto.setTUebersteuerterLiefertermin(null); // SP1733 bstellpositionDto.setIBestellpositionIIdRahmenposition( aBSpositionBasis[i].getIBestellpositionIIdRahmenposition()); bstellpositionDto.setTAuftragsbestaetigungstermin(null); bstellpositionDto.setCABNummer(null); bstellpositionDto.setCABKommentar(null); bstellpositionDto.setTAbursprungstermin(null); bstellpositionDto.setBestellungIId(iIdBestellungKopie); if (bestellungDto.getBestellungartCNr().equals(BESTELLUNGART_RAHMENBESTELLUNG_C_NR)) bstellpositionDto.setNOffeneMenge(bstellpositionDto.getNMenge()); if (bstellpositionDto.getIBestellpositionIIdRahmenposition() != null) { getBestellpositionFac().createAbrufbestellposition(bstellpositionDto, BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_PREIS_UNVERAENDERT, null, theClientDto); } else { getBestellpositionFac().createBestellposition(bstellpositionDto, theClientDto, BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_PREIS_UNVERAENDERT, null); } } } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } return iIdBestellungKopie; } public void versucheBestellungAufErledigtZuSetzen(Integer bestellungIIdI, TheClientDto theClientDto) throws EJBExceptionLP { int iOffenePositionen = 0; int iGeliefertePositionen = 0; int iBestaetigtePositionen = 0; try { BestellungDto bestellung = bestellungFindByPrimaryKey(bestellungIIdI); if (bestellung == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, ""); } if (Helper.isOneOf(bestellung.getStatusCNr(), BestellungFac.BESTELLSTATUS_OFFEN, BestellungFac.BESTELLSTATUS_GELIEFERT, BestellungFac.BESTELLSTATUS_BESTAETIGT, BestellungFac.BESTELLSTATUS_ERLEDIGT)) { // Stati der Positionen bestimmen BestellpositionDto[] besPos = getBestellpositionFac() .bestellpositionFindByBestellung(bestellungIIdI, theClientDto); for (int i = 0; i < besPos.length; i++) { if (besPos[i].getNMenge() != null) { if (besPos[i].getBestellpositionstatusCNr() .equals(BestellpositionFac.BESTELLPOSITIONSTATUS_ERLEDIGT)) { // ok } else if (besPos[i].getBestellpositionstatusCNr() .equals(BestellpositionFac.BESTELLPOSITIONSTATUS_GELIEFERT)) { iGeliefertePositionen++; } else if (besPos[i].getBestellpositionstatusCNr() .equals(BestellpositionFac.BESTELLPOSITIONSTATUS_BESTAETIGT)) { iBestaetigtePositionen++; } else { iOffenePositionen++; } } } // Daraus kann der Status bestimmt werden if (iBestaetigtePositionen == 0 && iOffenePositionen == 0 && iGeliefertePositionen == 0) { bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_ERLEDIGT); } else if (iOffenePositionen == 0 && iBestaetigtePositionen == 0) { bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_GELIEFERT); } else if (iBestaetigtePositionen != 0) { bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_BESTAETIGT); } else { bestellung.setStatusCNr(BestellungFac.BESTELLSTATUS_OFFEN); } updateBestellung(bestellung, theClientDto, false); } } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } } public ArrayList<Integer> getAngelegtenBestellungen(Integer lieferantIId, TheClientDto theClientDto) { Session session = null; ArrayList<Integer> a = new ArrayList<Integer>(); try { SessionFactory factory = FLRSessionFactory.getFactory(); session = factory.openSession(); Criteria c = session.createCriteria(FLRBestellung.class); // Filter auf Mandant c.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_MANDANT_C_NR, theClientDto.getMandant())); if (lieferantIId != null) { c.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_LIEFERANT_I_ID_BESTELLADRESSE, lieferantIId)); } // Filter nach Status: nur angelegte c.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_BESTELLUNGSTATUS_C_NR, BestellungFac.BESTELLSTATUS_ANGELEGT)); // nach RE-Nummer sortieren c.addOrder(Order.asc("c_nr")); // Query ausfuehren List<?> list = c.list(); for (Iterator<?> iter = list.iterator(); iter.hasNext();) { FLRBestellung item = (FLRBestellung) iter.next(); a.add(item.getI_id()); } } finally { if (session != null) { session.close(); } } return a; } public Integer erzeugeEingangsrechnungAusBestellung(Integer iIdBestellungI, EingangsrechnungDto eingangsrechnungDtoI, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { BestellungDto bestellungBasisDto = null; Calendar cal = Calendar.getInstance(); try { bestellungBasisDto = getBestellungFac().bestellungFindByPrimaryKey(iIdBestellungI); } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } Integer iIdEingangsrechnung = null; // Holen der Daten aus der Bestellung EingangsrechnungDto eingangsrechnungDto = bestellungBasisDto.cloneAsEingangsrechnungDto(); LieferantDto lieferantDto = getLieferantFac() .lieferantFindByPrimaryKey(eingangsrechnungDto.getLieferantIId(), theClientDto); MwstsatzDto mwst = getMandantFac().mwstsatzFindByPrimaryKey(lieferantDto.getMwstsatzbezIId(), theClientDto); eingangsrechnungDto.setNUstBetrag(Helper.getMehrwertsteuerBetrag(eingangsrechnungDto.getNBetrag(), mwst.getFMwstsatz().doubleValue())); eingangsrechnungDto .setNUstBetragfw(eingangsrechnungDto.getNUstBetrag().multiply(eingangsrechnungDto.getNKurs())); eingangsrechnungDto.setEingangsrechnungartCNr(EingangsrechnungFac.EINGANGSRECHNUNGART_EINGANGSRECHNUNG); eingangsrechnungDto.setDBelegdatum(Helper.cutDate(new Date(cal.getTimeInMillis()))); eingangsrechnungDto.setDFreigabedatum(Helper.cutDate(new Date(cal.getTimeInMillis()))); // Vom Benutzer uebersteuerte Werte eintragen if (eingangsrechnungDtoI != null) { if (eingangsrechnungDtoI.getEingangsrechnungartCNr() != null) { eingangsrechnungDto.setEingangsrechnungartCNr(eingangsrechnungDtoI.getEingangsrechnungartCNr()); } if (eingangsrechnungDtoI.getDBelegdatum() != null) { eingangsrechnungDto.setDBelegdatum(eingangsrechnungDtoI.getDBelegdatum()); } if (eingangsrechnungDtoI.getDFreigabedatum() != null) { eingangsrechnungDto.setDFreigabedatum(eingangsrechnungDtoI.getDFreigabedatum()); } if (eingangsrechnungDtoI.getNUstBetrag() != null) { eingangsrechnungDto.setNUstBetrag(eingangsrechnungDtoI.getNUstBetrag()); } if (eingangsrechnungDtoI.getNUstBetragfw() != null) { eingangsrechnungDto.setNUstBetragfw(eingangsrechnungDtoI.getNUstBetragfw()); } if (eingangsrechnungDtoI.getNBetrag() != null) { eingangsrechnungDto.setNBetrag(eingangsrechnungDtoI.getNBetrag()); } if (eingangsrechnungDtoI.getNBetragfw() != null) { eingangsrechnungDto.setNBetragfw(eingangsrechnungDtoI.getNBetragfw()); } } iIdEingangsrechnung = getEingangsrechnungFac().createEingangsrechnung(eingangsrechnungDto, theClientDto) .getIId(); return iIdEingangsrechnung; } public BestellungDto[] bestellungenFindAll() { Query query = em.createNamedQuery("BestellungfindAll"); Collection<?> cl = query.getResultList(); BestellungDto[] besDto = assembleBestellungDtos(cl); return besDto; } @TransactionAttribute(TransactionAttributeType.NEVER) public String checkBestellStati(TheClientDto theClientDto) { BestellungDto[] besDto = getBestellungFac().bestellungenFindAll(); StringBuffer sErrors = new StringBuffer(); int counter = 0; for (int i = 0; i < besDto.length; i++) { if (besDto[i].getCNr().equals("2013/000147")) { String sRichtigerStatus = null; try { sRichtigerStatus = getRichtigenBestellStatus(besDto[i].getIId(), true, theClientDto); } catch (Exception e) { e.printStackTrace(); } if (!besDto[i].getStatusCNr().equals(sRichtigerStatus)) { // merken und Ausgeben counter++; String actError = getTimestamp().toString() + " " + counter + " Bestellung " + besDto[i].getCNr() + " in Status " + besDto[i].getStatusCNr().trim() + " statt " + sRichtigerStatus.trim() + "\n"; sErrors.append(actError); System.out.println(actError); besDto[i].setStatusCNr(sRichtigerStatus); try { getBestellungFac().updateBestellung(besDto[i], theClientDto); } catch (Exception e) { String sError = "\n" + "Fehler beim Update der vorherigen Bestellung " + e.getLocalizedMessage() + "\n"; sErrors.append(sError); } } } } return sErrors.toString(); } public String getRichtigenBestellStatus(Integer bestellungIId, boolean bRekursiv, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { // Long lStart = System.currentTimeMillis(); // Zuerst schaun ob manuell erledigt BestellungDto bestellungDto = bestellungFindByPrimaryKey(bestellungIId); if (bestellungDto.getTManuellGeliefert() != null) { return BESTELLSTATUS_ERLEDIGT; } // Pruefen ob storniert if (bestellungDto.getTStorniert() != null) { return BESTELLSTATUS_STORNIERT; } // Pruefen ob Angelegt if (bestellungDto.getTGedruckt() == null) { return BESTELLSTATUS_ANGELEGT; } // Fuer die naechsten Pruefungen brauchen wir die Positionen der // Bestellung BestellpositionDto[] besPosDto; try { besPosDto = getBestellpositionFac().bestellpositionFindByBestellung(bestellungDto.getIId(), theClientDto); } catch (Exception e) { besPosDto = null; } boolean bIsBestaetigt = true; boolean bIsGeliefert = true; boolean bIsAbgerufen = true; for (int i = 0; i < besPosDto.length; i++) { if (besPosDto[i].getTAuftragsbestaetigungstermin() == null) { // Nur Ident und Handeingaben werden beruecksichtigt if (besPosDto[i].getPositionsartCNr().equals(BestellpositionFac.BESTELLPOSITIONART_IDENT) || besPosDto[i].getPositionsartCNr() .equals(BestellpositionFac.BESTELLPOSITIONART_HANDEINGABE)) { bIsBestaetigt = false; } } BigDecimal bdOffeneMenge = besPosDto[i].getNOffeneMenge(); if (bdOffeneMenge == null) { // Wenn offene Menge NULL dann noch komplett offen bdOffeneMenge = besPosDto[i].getNMenge(); } if (bdOffeneMenge != null) { if (new BigDecimal(0).compareTo(bdOffeneMenge) < 0 && besPosDto[i].getTManuellvollstaendiggeliefert() == null) { bIsGeliefert = false; } } } if (bestellungDto.getBestellungartCNr().equals(BESTELLUNGART_RAHMENBESTELLUNG_C_NR)) { BestellungDto[] abrufDto = abrufBestellungenfindByRahmenbestellung(bestellungDto.getIId(), theClientDto); if (abrufDto.length == 0) { bIsAbgerufen = false; } else { for (int i = 0; i < abrufDto.length; i++) { String sStatus = ""; if (bRekursiv) { // Rekursion wird maximal 1x aufgerufen, da eine // Abrufbestellung keine Rahmenbestellung sein kann // Dadurch bRekursiv bei diesem Aufruf egal sStatus = getRichtigenBestellStatus(abrufDto[i].getIId(), bRekursiv, theClientDto); } else { sStatus = abrufDto[i].getStatusCNr(); } if (!sStatus.equals(BESTELLSTATUS_GELIEFERT) && !sStatus.equals(BESTELLSTATUS_ERLEDIGT) && !sStatus.equals(BESTELLSTATUS_STORNIERT)) { bIsAbgerufen = false; } } // Wenn alle Abrufe Erledigt oder Geliefert sind ueberpruefen ob // die nicht erledigten Positionen des Rahmens komplett // abgerufen wurden if (bIsAbgerufen) { for (int i = 0; i < besPosDto.length; i++) { // Wenn Bestellposition nicht erledigt alle // Abrufpositionen holen BigDecimal bdOffeneMenge = besPosDto[i].getNOffeneMenge(); if (bdOffeneMenge == null) { // Wenn offene Menge NULL dann noch komplett offen bdOffeneMenge = besPosDto[i].getNMenge(); } if (bdOffeneMenge != null) { if (new BigDecimal(0).compareTo(bdOffeneMenge) < 0 && besPosDto[i].getTManuellvollstaendiggeliefert() == null) { BestellpositionDto[] abrufePosDto = getBestellpositionFac() .bestellpositionFindByBestellpositionIIdRahmenposition( besPosDto[i].getIId(), theClientDto); BigDecimal bdPosMenge = besPosDto[i].getNMenge(); if (bdPosMenge != null) { for (int y = 0; y < abrufePosDto.length; y++) { if (abrufePosDto[y].getNMenge() != null) { if (!BESTELLSTATUS_STORNIERT.equals(getRichtigenBestellStatus( abrufePosDto[y].getBestellungIId(), bRekursiv, theClientDto))) { bdPosMenge = bdPosMenge.subtract(abrufePosDto[y].getNMenge()); } } } // Wenn die Menge aller Abrufe kleiner als // Rahmenmenge ist dann ist nicht abgerufen if (new BigDecimal(0).compareTo(bdPosMenge) < 0) { bIsAbgerufen = false; } } } } } } } } else { // Eine nicht Rahmenbestellung kann nicht abgerufen sein bIsAbgerufen = false; } // Wenn nicht geliefert abgerufen oder bestaetigt dann Offen if (!bIsBestaetigt && !bIsGeliefert && !bIsAbgerufen) { return BESTELLSTATUS_OFFEN; } if (!bIsGeliefert) { // Wenn die Bestellung jetzt noch nicht geliefert ist kann sie nur // noch im Status bestaetigt oder abgerufen sein sein if (bIsAbgerufen) { // Wenn sie abgerufen ist kann sie nicht mehr bestaetigt sein return BESTELLSTATUS_ABGERUFEN; } else { // Die Bestellung kann hier nur noch bestaetigt sein return BESTELLSTATUS_BESTAETIGT; } } else { // Jetzt pruefen ob erledigt, wenn nicht ist sie geliefert // erledigt kann eine Bestellung hier nur sein wenn alle Preise // erfasst sind boolean bPreiseErfasst = true; WareneingangDto[] weDto = getWareneingangFac().wareneingangFindByBestellungIId(bestellungDto.getIId()); // Es muss Wareneingaenge geben da es sonst vorher schon zu einem // return gekommen waere for (int i = 0; i < weDto.length; i++) { WareneingangspositionDto[] wePosDto = getWareneingangFac() .wareneingangspositionFindByWareneingangIId(weDto[i].getIId()); if (wePosDto != null) { for (int y = 0; y < wePosDto.length; y++) { if (!wePosDto[y].getBPreiseErfasst()) { bPreiseErfasst = false; } } } } if (bPreiseErfasst) { // Long lEnd = System.currentTimeMillis(); // System.out.println(lEnd - lStart); return BESTELLSTATUS_ERLEDIGT; } else { return BESTELLSTATUS_GELIEFERT; } } } // public String getRichtigenBestellStatus(Integer bestellungIId,boolean // bRekursiv, TheClientDto theClientDto) throws EJBExceptionLP, // RemoteException{ // // Long lStart = System.currentTimeMillis(); // //Zuerst schaun ob manuell erledigt // BestellungDto bestellungDto = bestellungFindByPrimaryKey(bestellungIId); // if(bestellungDto.getTManuellGeliefert()!=null){ // return BESTELLSTATUS_ERLEDIGT; // } // //Pruefen ob storniert // if(bestellungDto.getTStorniert()!=null){ // return BESTELLSTATUS_STORNIERT; // } // //Pruefen ob Angelegt // if(bestellungDto.getTGedruckt()==null){ // return BESTELLSTATUS_ANGELEGT; // } // //Fuer die naechsten Pruefungen brauchen wir die Positionen der // Bestellung // BestellpositionDto[] besPosDto; // try { // besPosDto = // getBestellpositionFac().bestellpositionFindByBestellung(bestellungDto. // getIId(), theClientDto); // } catch (Exception e) { // besPosDto = null; // } // boolean bIsBestaetigt = true; // boolean bIsGeliefert = true; // boolean bIsAbgerufen = true; // for(int i=0;i<besPosDto.length;i++){ // if(besPosDto[i].getTAuftragsbestaetigungstermin()==null){ // bIsBestaetigt = false; // } // if(!bestellungDto.getBelegartCNr().equals( // BESTELLUNGART_RAHMENBESTELLUNG_C_NR)){ // //Bei Rahmenbestellungen trifft geliefert wenn erst durch die abrufe zu // BigDecimal bdOffeneMenge = besPosDto[i].getNOffeneMenge(); // if(bdOffeneMenge==null){ // //Wenn offene Menge NULL dann noch komplett offen // bdOffeneMenge = besPosDto[i].getNMenge(); // } // if(bdOffeneMenge!=null){ // if(new BigDecimal(0).compareTo(bdOffeneMenge) < 0 && // besPosDto[i].getTManuellvollstaendiggeliefert()==null){ // bIsGeliefert = false; // } // } // } // } // if(bestellungDto.getBestellungartCNr().equals( // BESTELLUNGART_RAHMENBESTELLUNG_C_NR)){ // BestellungDto[] abrufDto = // abrufBestellungenfindByRahmenbestellung(bestellungDto.getIId(), // theClientDto); // if(abrufDto.length == 0){ // bIsAbgerufen = false; // } else { // for(int i=0;i<abrufDto.length;i++){ // String sStatus =""; // if(bRekursiv){ // //Rekursion wird maximal 1x aufgerufen, da eine Abrufbestellung keine // Rahmenbestellung sein kann // //Dadurch bRekursiv bei diesem Aufruf egal // sStatus = // getRichtigenBestellStatus(abrufDto[i].getIId(),bRekursiv,theClientDto); // } else { // sStatus = abrufDto[i].getBestellungsstatusCNr(); // } // if(!sStatus.equals(BESTELLSTATUS_GELIEFERT) && // !sStatus.equals(BESTELLSTATUS_ERLEDIGT) && // !sStatus.equals(BESTELLSTATUS_STORNIERT) && // !sStatus.equals(BESTELLSTATUS_ANGELEGT)){ // bIsAbgerufen = false; // } // } // //Wenn alle Abrufe Erledigt oder Geliefert sind ueberpruefen ob die nicht // erledigten Positionen des Rahmens komplett abgerufen wurden // if(bIsAbgerufen){ // for(int i=0;i<besPosDto.length;i++){ // //Wenn Bestellposition nicht erledigt alle Abrufpositionen holen // BigDecimal bdOffeneMenge = besPosDto[i].getNOffeneMenge(); // if(bdOffeneMenge==null){ // //Wenn offene Menge NULL dann noch komplett offen // bdOffeneMenge = besPosDto[i].getNMenge(); // } // if(bdOffeneMenge!=null){ // if(/*new BigDecimal(0).compareTo(bdOffeneMenge) < 0 && */ // besPosDto[i].getTManuellvollstaendiggeliefert()==null){ // BestellpositionDto[] abrufePosDto = // getBestellpositionFac(). // bestellpositionFindByBestellpositionIIdRahmenposition // (besPosDto[i].getIId(),theClientDto); // BigDecimal bdPosMenge = besPosDto[i].getNMenge(); // if(bdPosMenge!=null){ // for(int y=0;y<abrufePosDto.length;y++){ // String sAbrufStatus = // getRichtigenBestellStatus(abrufePosDto[y].getBestellungIId(), true, // theClientDto); // //Die Mengen von angelegten und stornierten abrufen werden nicht // beruecksichtigt // if(!sAbrufStatus.equals(BESTELLSTATUS_STORNIERT) && // !sAbrufStatus.equals(BESTELLSTATUS_ANGELEGT)){ // if(abrufePosDto[y].getNMenge()!=null){ // bdPosMenge = bdPosMenge.subtract(abrufePosDto[y].getNMenge()); // } // } // } // //Wenn die Menge aller Abrufe kleiner als Rahmenmenge ist dann ist nicht // abgerufen // if(new BigDecimal(0).compareTo(bdPosMenge) < 0){ // bIsAbgerufen = false; // //Nicht abgerufen kann auch nicht geliefert sein // bIsGeliefert = false; // } // } // } // } // } // } // } // } else { // //Eine nicht Rahmenbestellung kann nicht abgerufen sein // bIsAbgerufen = false; // } // //Wenn nicht geliefert abgerufen oder bestaetigt dann Offen // if(!bIsBestaetigt && !bIsGeliefert && !bIsAbgerufen){ // return BESTELLSTATUS_OFFEN; // } // if(!bIsGeliefert){ // //Wenn die Bestellung jetzt noch nicht geliefert ist kann sie nur noch im // Status bestaetigt oder abgerufen sein sein // if(bIsAbgerufen){ // //Wenn sie abgerufen ist kann sie nicht mehr bestaetigt sein // return BESTELLSTATUS_ABGERUFEN; // } else { // //Die Bestellung kann hier nur noch bestaetigt sein // return BESTELLSTATUS_BESTAETIGT; // } // } else { // //Jetzt pruefen ob erledigt, wenn nicht ist sie geliefert // //erledigt kann eine Bestellung hier nur sein wenn alle Preise erfasst // sind // boolean bPreiseErfasst = true; // WareneingangDto[] weDto = // getWareneingangFac().wareneingangFindByBestellungIId(bestellungDto.getIId( // )); // //Es muss Wareneingaenge geben da es sonst vorher schon zu einem return // gekommen waere // for(int i=0;i<weDto.length;i++){ // WareneingangspositionDto[] wePosDto = // getWareneingangFac().wareneingangspositionFindByWareneingangIId(weDto[i]. // getIId()); // if(wePosDto!=null){ // for(int y=0;y<wePosDto.length;y++){ // if(!wePosDto[y].getBPreiseErfasst()){ // bPreiseErfasst = false; // } // } // } // } // if(bPreiseErfasst){ // // Long lEnd = System.currentTimeMillis(); // // System.out.println(lEnd - lStart); // return BESTELLSTATUS_ERLEDIGT; // } else { // return BESTELLSTATUS_GELIEFERT; // } // } // } @Override public BestellungDto[] bestellungFindByAuftragIId(Integer auftragIId) { if (auftragIId == null) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER, new Exception("iId == null")); } Query query = em.createNamedQuery(Bestellung.BestellungFindByAuftragIId); query.setParameter(1, auftragIId); Collection<?> list = query.getResultList(); return list == null ? null : assembleBestellungDtos(list); } @Override public void aktiviereBelegControlled(Integer iid, Timestamp t, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { new BelegAktivierungController(this).aktiviereBelegControlled(iid, t, theClientDto); } @Override public Timestamp berechneBelegControlled(Integer iid, TheClientDto theClientDto) throws EJBExceptionLP, RemoteException { return new BelegAktivierungController(this).berechneBelegControlled(iid, theClientDto); } @Override public boolean hatAenderungenNach(Integer iid, Timestamp t) throws EJBExceptionLP, RemoteException { BestellungDto b = bestellungFindByPrimaryKey(iid); if (b.getTAendern() != null && b.getTAendern().after(t)) return true; if (b.getTManuellerledigt() != null && b.getTManuellerledigt().after(t)) return true; if (b.getTManuellGeliefert() != null && b.getTManuellGeliefert().after(t)) return true; if (b.getTStorniert() != null && b.getTStorniert().after(t)) return true; BestellpositionDto[] pos = getBestellpositionFac().bestellpositionFindByBestellung(iid, null); for (BestellpositionDto p : pos) { if (p.getTAbterminAendern() != null && p.getTAbterminAendern().after(t)) return true; if (p.getTManuellvollstaendiggeliefert() != null && p.getTManuellvollstaendiggeliefert().after(t)) return true; } return false; } }