com.lp.server.eingangsrechnung.ejbfac.ZahlungsvorschlagFacBean.java Source code

Java tutorial

Introduction

Here is the source code for com.lp.server.eingangsrechnung.ejbfac.ZahlungsvorschlagFacBean.java

Source

/*******************************************************************************
 * 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.eingangsrechnung.ejbfac;

import com.lp.server.eingangsrechnung.ejb.*;
import com.lp.server.eingangsrechnung.service.*;
import com.lp.server.system.service.*;
import com.lp.server.util.*;
import com.lp.util.*;
import java.util.*;

import org.hibernate.*;
import com.lp.server.util.fastlanereader.*;
import com.lp.server.eingangsrechnung.fastlanereader.generated.*;
import org.hibernate.criterion.*;
import com.lp.server.system.pkgenerator.PKConst;
import java.rmi.*;
import java.sql.Date;
import java.math.*;
import com.lp.server.finanz.service.*;
import com.lp.server.eingangsrechnung.bl.*;

import javax.ejb.Stateless;
import javax.persistence.EntityExistsException;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless
public class ZahlungsvorschlagFacBean extends Facade implements ZahlungsvorschlagFac {
    @PersistenceContext
    private EntityManager em;

    public Integer createZahlungsvorschlag(ZahlungsvorschlagkriterienDto krit, TheClientDto theClientDto)
            throws EJBExceptionLP {
        Integer iZViid = null;
        Session session = null;
        try {
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLREingangsrechnungReport.class);
            // Es werden alle offenen ERs dieses Mandanten ausgewertet.
            // 1. Filter nach Mandant
            c.add(Restrictions.eq(EingangsrechnungFac.FLR_ER_MANDANT_C_NR, theClientDto.getMandant()));
            // 2. Filter nach Status
            Collection<String> collStati = new LinkedList<String>();
            collStati.add(EingangsrechnungFac.STATUS_ANGELEGT);
            collStati.add(EingangsrechnungFac.STATUS_TEILBEZAHLT);
            c.add(Restrictions.in(EingangsrechnungFac.FLR_ER_STATUS_C_NR, collStati));
            // Abfragen
            List<?> list = c.list();
            if (list.size() > 0) {
                // wenn da welche daherkommen, mach ich einen neuen lauf
                ZahlungsvorschlaglaufDto zvlaufDto = new ZahlungsvorschlaglaufDto();
                zvlaufDto.setBankverbindungIId(krit.getBankvertbindungIId());
                zvlaufDto.setBMitskonto(Helper.boolean2Short(krit.isBMitSkonto()));
                zvlaufDto.setISkontoueberziehungsfristintagen(krit.getISkontoUeberziehungsfristInTagen());
                zvlaufDto.setMandantCNr(theClientDto.getMandant());
                zvlaufDto.setTNaechsterzahlungslauf(krit.getDNaechsterZahlungslauf());
                zvlaufDto.setTZahlungsstichtag(krit.getDZahlungsstichtag());
                iZViid = createZahlungsvorschlaglauf(zvlaufDto, theClientDto);
                // Zahlungsziele cachen
                final Map<Integer, ZahlungszielDto> mZahlungsziele = (Map<Integer, ZahlungszielDto>) getMandantFac()
                        .zahlungszielFindAllByMandantAsDto(theClientDto.getMandant(), theClientDto);
                for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
                    FLREingangsrechnungReport e = (FLREingangsrechnungReport) iter.next();
                    // Offenen Werte ermitteln
                    BigDecimal bdBruttowertFW = e.getN_betragfw();
                    BigDecimal bdBruttooffenFW = bdBruttowertFW
                            .subtract(getEingangsrechnungFac().getBezahltBetragFw(e.getI_id(), null));
                    // Wenn noch was offen ist
                    if (bdBruttooffenFW.compareTo(new BigDecimal(0)) > 0) {
                        // Faelligkeitsdatum berechnen
                        // das ist grundsaetzlich Freigabedatum + Zahlungsziel (sofern definiert)
                        java.util.Date dFaellig = e.getT_freigabedatum();
                        // Netto faellig - ebenfalls plus Zahlungsziel (sofern definiert)
                        java.util.Date dFaelligNetto = e.getT_freigabedatum();
                        int iZielTage = 0;
                        BigDecimal bdAngewandterSkontoSatz = new BigDecimal(0);
                        if (e.getZahlungsziel_i_id() != null) {
                            ZahlungszielDto zzDto = mZahlungsziele.get(e.getZahlungsziel_i_id());
                            // mit Skonto zahlen
                            if (krit.isBMitSkonto()) {
                                // Skontoueberziehungstage einrechnen
                                dFaellig = Helper.addiereTageZuDatum(dFaellig,
                                        krit.getISkontoUeberziehungsfristInTagen());
                                boolean bSkontoGehtSichAus = false;

                                // schaun, ob sich der erste Skonto noch ausgeht
                                if (zzDto.getSkontoAnzahlTage1() != null && zzDto.getSkontoProzentsatz1() != null) {
                                    // Bei diesem Datum waere mit Skonto1 zu zahlen
                                    java.util.Date dFaelligBeiSkonto1 = Helper.addiereTageZuDatum(dFaellig,
                                            zzDto.getSkontoAnzahlTage1());
                                    // wenn das spaetestens heute ist -> anwenden
                                    if (dFaelligBeiSkonto1.compareTo(Helper.cutDate(getDate())) >= 0) {
                                        bSkontoGehtSichAus = true;
                                        bdAngewandterSkontoSatz = zzDto.getSkontoProzentsatz1();
                                        iZielTage = zzDto.getSkontoAnzahlTage1();
                                    }
                                }
                                // wenn nicht, dann schaun, ob sich der zweite ausgeht
                                if (!bSkontoGehtSichAus && zzDto.getSkontoAnzahlTage2() != null
                                        && zzDto.getSkontoProzentsatz2() != null) {
                                    // Bei diesem Datum waere mit Skonto2 zu zahlen
                                    java.util.Date dFaelligBeiSkonto2 = Helper.addiereTageZuDatum(dFaellig,
                                            zzDto.getSkontoAnzahlTage2());
                                    // wenn das spaetestens heute ist -> anwenden
                                    if (dFaelligBeiSkonto2.compareTo(Helper.cutDate(getDate())) >= 0) {
                                        bSkontoGehtSichAus = true;
                                        bdAngewandterSkontoSatz = zzDto.getSkontoProzentsatz2();
                                        iZielTage = zzDto.getSkontoAnzahlTage2();
                                    }
                                }
                                // wenn auch das nicht gegangen ist, muss sowieso netto gezahlt werden
                                if (!bSkontoGehtSichAus && zzDto.getAnzahlZieltageFuerNetto() != null) {
                                    iZielTage = zzDto.getAnzahlZieltageFuerNetto();
                                }
                            }
                            // nicht mit Skonto zahlen -> nettotage
                            else {
                                if (zzDto.getAnzahlZieltageFuerNetto() != null) {
                                    iZielTage = zzDto.getAnzahlZieltageFuerNetto();
                                }
                            }
                            // Nettofaelligkeitsdatum
                            if (zzDto.getAnzahlZieltageFuerNetto() != null) {
                                dFaelligNetto = Helper.addiereTageZuDatum(dFaelligNetto,
                                        zzDto.getAnzahlZieltageFuerNetto());
                            }
                        }
                        // Zieltage addieren
                        dFaellig = Helper.addiereTageZuDatum(dFaellig, iZielTage);
                        // wenn vor dem naechsten Zahlungslauf faellig, dann speichern
                        if (dFaellig.before(krit.getDNaechsterZahlungslauf())) {
                            // vorher noch den Skontosatz anwenden
                            BigDecimal bdMultiplikator = new BigDecimal(1)
                                    .subtract(bdAngewandterSkontoSatz.movePointLeft(2));
                            bdBruttooffenFW = bdBruttooffenFW.multiply(bdMultiplikator)
                                    .setScale(FinanzFac.NACHKOMMASTELLEN, RoundingMode.HALF_UP);
                            // Dto zusammenbauen
                            ZahlungsvorschlagDto zvDto = new ZahlungsvorschlagDto();
                            zvDto.setBBezahlen(Helper.boolean2Short(true));
                            zvDto.setEingangsrechnungIId(e.getI_id());
                            zvDto.setNAngewandterskontosatz(bdAngewandterSkontoSatz);
                            zvDto.setNOffen(bdBruttooffenFW);
                            zvDto.setTFaellig(new java.sql.Date(dFaellig.getTime())); // in sql-date umwandeln
                            zvDto.setZahlungsvorschlaglaufIId(iZViid);
                            // Eintrag speichern
                            createZahlungsvorschlag(zvDto);
                        }
                    }
                }
            }
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
            return null;
        } finally {
            if (session != null) {
                session.close();
            }
        }
        return iZViid;
    }

    /**
     * Einen ganzen Zahlungsvorschlaglauf loeschen.
     * @param zahlungsvorschlaglaufIId Integer
     * @param theClientDto String
     * @throws EJBExceptionLP
     */
    public void removeZahlungsvorschlaglauf(Integer zahlungsvorschlaglaufIId, TheClientDto theClientDto)
            throws EJBExceptionLP {
        myLogger.warn(theClientDto.getIDUser(), "removeZahlungsvorschlaglauf:" + zahlungsvorschlaglaufIId);
        Session session = null;
        try {
            // Zuerst alle zugehoerigen Eintraege suchen.
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRZahlungsvorschlag.class);
            c.add(Restrictions.eq(EingangsrechnungFac.FLR_ZV_ZAHLUNGSVORSCHLAGLAUF_I_ID, zahlungsvorschlaglaufIId));
            List<?> list = c.list();
            // und alle loeschen.
            for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
                FLRZahlungsvorschlag zv = (FLRZahlungsvorschlag) iter.next();
                removeZahlungsvorschlag(zv.getI_id());
            }
            //  jetzt den Kopfdatensatz loeschen.
            removeZahlungsvorschlaglauf(zahlungsvorschlaglaufIId);
        } finally {
            if (session != null) {
                session.close();
            }
        }
    }

    private Integer createZahlungsvorschlaglauf(ZahlungsvorschlaglaufDto zahlungsvorschlaglaufDto,
            TheClientDto theClientDto) throws EJBExceptionLP {
        // PK generieren
        Integer iId = getPKGeneratorObj().getNextPrimaryKey(PKConst.PK_ZAHLUNGSVORSCHLAGLAUF);
        zahlungsvorschlaglaufDto.setIId(iId);
        // Anleger
        zahlungsvorschlaglaufDto.setPersonalIIdAnlegen(theClientDto.getIDPersonal());
        try {
            Zahlungsvorschlaglauf zahlungsvorschlaglauf = new Zahlungsvorschlaglauf(
                    zahlungsvorschlaglaufDto.getIId(), zahlungsvorschlaglaufDto.getMandantCNr(),
                    zahlungsvorschlaglaufDto.getTZahlungsstichtag(),
                    zahlungsvorschlaglaufDto.getTNaechsterzahlungslauf(), zahlungsvorschlaglaufDto.getBMitskonto(),
                    zahlungsvorschlaglaufDto.getISkontoueberziehungsfristintagen(),
                    zahlungsvorschlaglaufDto.getBankverbindungIId(),
                    zahlungsvorschlaglaufDto.getPersonalIIdAnlegen());
            em.persist(zahlungsvorschlaglauf);
            em.flush();
            zahlungsvorschlaglaufDto.setTAnlegen(zahlungsvorschlaglauf.getTAnlegen());
            setZahlungsvorschlaglaufFromZahlungsvorschlaglaufDto(zahlungsvorschlaglauf, zahlungsvorschlaglaufDto);
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
        return iId;
    }

    private void removeZahlungsvorschlaglauf(Integer iId) throws EJBExceptionLP {
        //   try {
        Zahlungsvorschlaglauf toRemove = em.find(Zahlungsvorschlaglauf.class, iId);
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        //   }
        //   catch (RemoveException e) {
        //    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, e);
        //  }
    }

    public ZahlungsvorschlaglaufDto zahlungsvorschlaglaufFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        //    try {
        Zahlungsvorschlaglauf zahlungsvorschlaglauf = em.find(Zahlungsvorschlaglauf.class, iId);
        if (zahlungsvorschlaglauf == null) { // @ToDo null Pruefung?
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZahlungsvorschlaglaufDto(zahlungsvorschlaglauf);
        //{ 
        //     throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, null);
        //}
        // }
        //  catch (javax.ejb.ObjectNotFoundException e) {
        //     throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
        //     }
        //     catch (FinderException e) {
        //       throw new EJBExceptionLP(EJBExceptionLP.FEHLER, e);
        //     }
    }

    private void setZahlungsvorschlaglaufFromZahlungsvorschlaglaufDto(Zahlungsvorschlaglauf zahlungsvorschlaglauf,
            ZahlungsvorschlaglaufDto zahlungsvorschlaglaufDto) {
        zahlungsvorschlaglauf.setMandantCNr(zahlungsvorschlaglaufDto.getMandantCNr());
        zahlungsvorschlaglauf.setTAnlegen(zahlungsvorschlaglaufDto.getTAnlegen());
        zahlungsvorschlaglauf.setTZahlungsstichtag(zahlungsvorschlaglaufDto.getTZahlungsstichtag());
        zahlungsvorschlaglauf.setTNaechsterzahlungslauf(zahlungsvorschlaglaufDto.getTNaechsterzahlungslauf());
        zahlungsvorschlaglauf.setBMitskonto(zahlungsvorschlaglaufDto.getBMitskonto());
        zahlungsvorschlaglauf.setISkontoueberziehungsfristintagen(
                zahlungsvorschlaglaufDto.getISkontoueberziehungsfristintagen());
        zahlungsvorschlaglauf.setBankverbindungIId(zahlungsvorschlaglaufDto.getBankverbindungIId());
        zahlungsvorschlaglauf.setPersonalIIdAnlegen(zahlungsvorschlaglaufDto.getPersonalIIdAnlegen());
        em.merge(zahlungsvorschlaglauf);
        em.flush();
    }

    private ZahlungsvorschlaglaufDto assembleZahlungsvorschlaglaufDto(Zahlungsvorschlaglauf zahlungsvorschlaglauf) {
        return ZahlungsvorschlaglaufDtoAssembler.createDto(zahlungsvorschlaglauf);
    }

    private void createZahlungsvorschlag(ZahlungsvorschlagDto zahlungsvorschlagDto) throws EJBExceptionLP {
        // PK generieren
        Integer iId = getPKGeneratorObj().getNextPrimaryKey(PKConst.PK_ZAHLUNGSVORSCHLAG);
        zahlungsvorschlagDto.setIId(iId);
        try {
            Zahlungsvorschlag zahlungsvorschlag = new Zahlungsvorschlag(zahlungsvorschlagDto.getIId(),
                    zahlungsvorschlagDto.getZahlungsvorschlaglaufIId(),
                    zahlungsvorschlagDto.getEingangsrechnungIId(), zahlungsvorschlagDto.getBBezahlen(),
                    zahlungsvorschlagDto.getTFaellig(), zahlungsvorschlagDto.getNAngewandterskontosatz(),
                    zahlungsvorschlagDto.getNOffen());
            em.persist(zahlungsvorschlag);
            em.flush();
            setZahlungsvorschlagFromZahlungsvorschlagDto(zahlungsvorschlag, zahlungsvorschlagDto);
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    private void removeZahlungsvorschlag(Integer iId) throws EJBExceptionLP {
        // try {
        Zahlungsvorschlag toRemove = em.find(Zahlungsvorschlag.class, iId);
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        //   }
        //   catch (RemoveException e) {
        //    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, e);
        //  }
    }

    public ZahlungsvorschlagDto zahlungsvorschlagFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        //    try {
        Zahlungsvorschlag zahlungsvorschlag = em.find(Zahlungsvorschlag.class, iId);
        if (zahlungsvorschlag == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZahlungsvorschlagDto(zahlungsvorschlag);
        //{ 
        //   throw new EJBExceptionLP(EJBExceptionLP.FEHLER, null);
        //}
        //  }
        //  catch (javax.ejb.ObjectNotFoundException e) {
        //   throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
        //     }
        //     catch (FinderException e) {
        //       throw new EJBExceptionLP(EJBExceptionLP.FEHLER, e);
        //     }
    }

    public ZahlungsvorschlagDto[] zahlungsvorschlagFindByZahlungsvorschlaglaufIId(Integer zahlungsvorschlaglaufIId)
            throws EJBExceptionLP {
        //    try {
        Query query = em.createNamedQuery("ZahlungsvorschlagfindByZahlungsvorschlaglaufIId");
        query.setParameter(1, zahlungsvorschlaglaufIId);
        Collection<?> zahlungsvorschlag = query.getResultList();
        //if(zahlungsvorschlag.isEmpty()){
        //   throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, null);
        //}
        return assembleZahlungsvorschlagDtos(zahlungsvorschlag);
        //{ 
        //    throw new EJBExceptionLP(EJBExceptionLP.FEHLER, null);
        //}
        //  }
        //  catch (javax.ejb.ObjectNotFoundException e) {
        //    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
        //     }
        //     catch (FinderException e) {
        //       throw new EJBExceptionLP(EJBExceptionLP.FEHLER, e);
        //     }
    }

    private void setZahlungsvorschlagFromZahlungsvorschlagDto(Zahlungsvorschlag zahlungsvorschlag,
            ZahlungsvorschlagDto zahlungsvorschlagDto) {
        zahlungsvorschlag.setZahlungsvorschlaglaufIId(zahlungsvorschlagDto.getZahlungsvorschlaglaufIId());
        zahlungsvorschlag.setEingangsrechnungIId(zahlungsvorschlagDto.getEingangsrechnungIId());
        zahlungsvorschlag.setBBezahlen(zahlungsvorschlagDto.getBBezahlen());
        zahlungsvorschlag.setTFaellig(zahlungsvorschlagDto.getTFaellig());
        zahlungsvorschlag.setNAngewandterskontosatz(zahlungsvorschlagDto.getNAngewandterskontosatz());
        zahlungsvorschlag.setNOffen(zahlungsvorschlagDto.getNOffen());
        em.merge(zahlungsvorschlag);
        em.flush();
    }

    private ZahlungsvorschlagDto assembleZahlungsvorschlagDto(Zahlungsvorschlag zahlungsvorschlag) {
        return ZahlungsvorschlagDtoAssembler.createDto(zahlungsvorschlag);
    }

    private ZahlungsvorschlagDto[] assembleZahlungsvorschlagDtos(Collection<?> zahlungsvorschlags) {
        List<ZahlungsvorschlagDto> list = new ArrayList<ZahlungsvorschlagDto>();
        if (zahlungsvorschlags != null) {
            Iterator<?> iterator = zahlungsvorschlags.iterator();
            while (iterator.hasNext()) {
                Zahlungsvorschlag zahlungsvorschlag = (Zahlungsvorschlag) iterator.next();
                list.add(assembleZahlungsvorschlagDto(zahlungsvorschlag));
            }
        }
        ZahlungsvorschlagDto[] returnArray = new ZahlungsvorschlagDto[list.size()];
        return (ZahlungsvorschlagDto[]) list.toArray(returnArray);
    }

    /**
     * Flag "Bezahlen" auf diesem Datensatz invertieren.
     *
     * @param zahlungsvorschlagIId Integer
     * @param theClientDto String
     * @throws EJBExceptionLP
     */
    public void toggleZahlungsvorschlagBBezahlen(Integer zahlungsvorschlagIId, TheClientDto theClientDto)
            throws EJBExceptionLP {
        //    try {
        Zahlungsvorschlag zv = em.find(Zahlungsvorschlag.class, zahlungsvorschlagIId);
        if (zv == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        zv.setBBezahlen(Helper.boolean2Short(!Helper.short2Boolean(zv.getBBezahlen())));
        // }
        //  catch (javax.ejb.ObjectNotFoundException e) {
        //    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
        //     }
        //     catch (FinderException e) {
        //       throw new EJBExceptionLP(EJBExceptionLP.FEHLER, e);
        //     }
    }

    public BigDecimal getGesamtwertEinesZahlungsvorschlaglaufsInMandantenwaehrung(Integer zahlungsvorschlagleufIId,
            TheClientDto theClientDto) throws EJBExceptionLP {
        BigDecimal bdWert = new BigDecimal(0);
        Session session = null;
        try {
            SessionFactory factory = FLRSessionFactory.getFactory();
            session = factory.openSession();
            Criteria c = session.createCriteria(FLRZahlungsvorschlag.class);
            // Filter nach ZV Lauf
            c.add(Restrictions.eq(EingangsrechnungFac.FLR_ZV_ZAHLUNGSVORSCHLAGLAUF_I_ID, zahlungsvorschlagleufIId));
            // Filter B_BEZAHLEN = true
            c.add(Restrictions.eq(EingangsrechnungFac.FLR_ZV_B_BEZAHLEN, Helper.boolean2Short(true)));
            // Abfragen
            List<?> list = c.list();
            for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
                FLRZahlungsvorschlag zv = (FLRZahlungsvorschlag) iter.next();
                BigDecimal bdWertZV = getLocaleFac().rechneUmInAndereWaehrungZuDatum(zv.getN_offen(),
                        zv.getFlreingangsrechnungreport().getWaehrung_c_nr(), theClientDto.getSMandantenwaehrung(),
                        new Date(System.currentTimeMillis()), theClientDto);
                bdWert = bdWert.add(bdWertZV);
            }
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
            return null;
        } finally {
            if (session != null) {
                session.close();
            }
        }
        return bdWert;
    }

    public String exportiereZahlungsvorschlaglauf(Integer zahlungsvorschlagleufIId, TheClientDto theClientDto)
            throws EJBExceptionLP {
        ZahlungsvorschlagExportFormatter em = ZahlungsvorschlagExportFormatterFactory
                .getZahlungsvorschlagExportFormatter(getExportFormat(theClientDto), theClientDto);
        return exportiereZV(em, zahlungsvorschlagleufIId, theClientDto);
    }

    private String exportiereZV(ZahlungsvorschlagExportFormatter em, Integer zahlungsvorschlagleufIId,
            TheClientDto theClientDto) throws EJBExceptionLP {
        StringBuffer sExport = new StringBuffer();
        ZahlungsvorschlaglaufDto zvLauf = zahlungsvorschlaglaufFindByPrimaryKey(zahlungsvorschlagleufIId);
        ZahlungsvorschlagDto[] zv = zahlungsvorschlagFindByZahlungsvorschlaglaufIId(zahlungsvorschlagleufIId);
        //    sExport.append(em.exportiereUeberschriftPersonenkonten(theClientDto));
        if (zv == null || zv.length == 0) {
            return null;
        }
        sExport.append(em.exportiereDaten(zvLauf, zv, theClientDto));
        return sExport.toString();
    }

    private int getExportFormat(TheClientDto theClientDto) throws EJBExceptionLP {
        return ZahlungsvorschlagFac.FORMAT_CSV;
    }

    public ZahlungsvorschlagDto updateZahlungsvorschlag(ZahlungsvorschlagDto zahlungsvorschlagDto,
            TheClientDto theClientDto) throws EJBExceptionLP {
        if (zahlungsvorschlagDto != null) {
            Integer iId = zahlungsvorschlagDto.getIId();
            //      try {
            Zahlungsvorschlag zahlungsvorschlag = em.find(Zahlungsvorschlag.class, iId);
            if (zahlungsvorschlag == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER, "");
            }
            setZahlungsvorschlagFromZahlungsvorschlagDto(zahlungsvorschlag, zahlungsvorschlagDto);
        }
        //   catch (javax.ejb.ObjectNotFoundException e) {
        //     throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_UPDATE, e);
        //       }
        //       catch (FinderException e) {
        //         throw new EJBExceptionLP(EJBExceptionLP.FEHLER, e);
        //       }
        // }
        return zahlungsvorschlagDto;
    }
}