Example usage for org.hibernate.criterion Restrictions gt

List of usage examples for org.hibernate.criterion Restrictions gt

Introduction

In this page you can find the example usage for org.hibernate.criterion Restrictions gt.

Prototype

public static SimpleExpression gt(String propertyName, Object value) 

Source Link

Document

Apply a "greater than" constraint to the named property

Usage

From source file:com.lp.server.artikel.ejbfac.InventurFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public void invturprotokollZumStichtagZuruecknehmen(Integer inventurIId, java.sql.Date tAbStichtag,
        TheClientDto theClientDto) {//w w  w.j  a v a 2 s.  com

    InventurDto inventurDto = inventurFindByPrimaryKey(inventurIId, theClientDto);

    if (Helper.short2boolean(inventurDto.getBInventurdurchgefuehrt()) == false) {

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

        org.hibernate.Criteria crit = session.createCriteria(FLRInventurprotokoll.class);
        crit.add(Restrictions.gt("t_zeitpunkt", tAbStichtag));
        crit.createAlias("flrinventurliste", "il").createAlias("flrinventur", "i");
        crit.add(Restrictions.eq("i.i_id", inventurIId));

        List<?> results = crit.list();
        Iterator<?> resultListIteratorInventur = results.iterator();
        int row = 0;
        while (resultListIteratorInventur.hasNext()) {
            FLRInventurprotokoll flrInventurprotokoll = (FLRInventurprotokoll) resultListIteratorInventur
                    .next();

            if (flrInventurprotokoll.getN_korrekturmenge().doubleValue() < 0) {
                try {
                    getLagerFac().bucheAb(LocaleFac.BELEGART_INVENTUR, inventurIId,
                            flrInventurprotokoll.getFlrinventurliste().getI_id(),
                            flrInventurprotokoll.getFlrinventurliste().getFlrartikel().getI_id(),
                            new BigDecimal(0), flrInventurprotokoll.getN_inventurpreis(),
                            flrInventurprotokoll.getFlrinventurliste().getFlrlager().getI_id(),
                            flrInventurprotokoll.getFlrinventurliste().getC_seriennrchargennr(),
                            inventurDto.getTInventurdatum(), theClientDto);
                } catch (Throwable e) {
                    // Auslassen
                    continue;
                }

            } else if (flrInventurprotokoll.getN_korrekturmenge().doubleValue() > 0) {
                try {
                    getLagerFac().bucheZu(LocaleFac.BELEGART_INVENTUR, inventurIId,
                            flrInventurprotokoll.getFlrinventurliste().getI_id(),
                            flrInventurprotokoll.getFlrinventurliste().getFlrartikel().getI_id(),
                            new BigDecimal(0), flrInventurprotokoll.getN_inventurpreis(),
                            flrInventurprotokoll.getFlrinventurliste().getFlrlager().getI_id(),
                            flrInventurprotokoll.getFlrinventurliste().getC_seriennrchargennr(),
                            inventurDto.getTInventurdatum(), theClientDto, null, true);
                } catch (RemoteException e) {
                    // Auslassen
                    continue;
                }

            }

            Integer inventurlisteIId = flrInventurprotokoll.getFlrinventurliste().getI_id();
            getInventurFac().removeInventurprotokoll(flrInventurprotokoll.getI_id());

            InventurlisteDto ilDto = new InventurlisteDto();
            ilDto.setIId(inventurlisteIId);

            try {
                getInventurFac().removeInventurliste(ilDto, theClientDto);
            } catch (RemoteException e) {
                throwEJBExceptionLPRespectOld(e);
            }
        }
    }

}

From source file:com.lp.server.artikel.ejbfac.InventurFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public void inventurpreiseAufEkPreisSetzen(Integer inventurIId, TheClientDto theClientDto) {

    InventurDto inventurDto = inventurFindByPrimaryKey(inventurIId, theClientDto);

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

    org.hibernate.Criteria crit = session.createCriteria(FLRInventurstand.class);
    crit.add(Restrictions.eq("inventur_i_id", inventurIId));

    List<?> results = crit.list();
    Iterator<?> resultListIteratorInventur = results.iterator();
    int row = 0;//w  w w. j av  a  2s.co m
    while (resultListIteratorInventur.hasNext()) {
        FLRInventurstand flrInventurstand = (FLRInventurstand) resultListIteratorInventur.next();

        row++;
        System.out.println(row + " von " + results.size());

        java.math.BigDecimal inventurpeis = new BigDecimal(0);

        Session sessionZugang = FLRSessionFactory.getFactory().openSession();
        org.hibernate.Criteria critZugang = sessionZugang.createCriteria(FLRLagerbewegung.class);
        critZugang.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_ARTIKEL_I_ID,
                flrInventurstand.getFlrartikel().getI_id()));
        critZugang.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_B_ABGANG, Helper.boolean2Short(false)));
        critZugang.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_B_HISTORIE, Helper.boolean2Short(false)));
        critZugang.add(Restrictions.gt(LagerFac.FLR_LAGERBEWEGUNG_N_MENGE, new BigDecimal(0)));
        critZugang.add(
                Restrictions.gt(LagerFac.FLR_LAGERBEWEGUNG_T_BUCHUNGSZEIT, inventurDto.getTInventurdatum()));

        String[] arten = new String[2];
        arten[0] = LocaleFac.BELEGART_LOSABLIEFERUNG;
        arten[1] = LocaleFac.BELEGART_BESTELLUNG;
        critZugang.add(Restrictions.in(LagerFac.FLR_LAGERBEWEGUNG_C_BELEGARTNR, arten));
        critZugang.addOrder(Order.asc(LagerFac.FLR_LAGERBEWEGUNG_T_BUCHUNGSZEIT));

        critZugang.setMaxResults(1);
        List<?> resultList = critZugang.list();

        if (resultList.size() > 0) {
            Iterator<?> resultListIterator = resultList.iterator();
            FLRLagerbewegung lagerbewegung = (FLRLagerbewegung) resultListIterator.next();
            inventurpeis = lagerbewegung.getN_einstandspreis();
        } else {
            // EK-Preis
            ArtikellieferantDto alDto;
            try {
                alDto = getArtikelFac().getArtikelEinkaufspreis(flrInventurstand.getFlrartikel().getI_id(),
                        new BigDecimal(1), theClientDto.getSMandantenwaehrung(), theClientDto);
                if (alDto != null && alDto.getNNettopreis() != null
                        && alDto.getNNettopreis().doubleValue() != 0) {
                    inventurpeis = alDto.getNNettopreis();
                } else {
                    continue;
                }
            } catch (RemoteException e) {
                throwEJBExceptionLPRespectOld(e);
            }

        }
        sessionZugang.close();
        // Updaten

        InventurstandDto inventurstandDto = inventurstandFindByPrimaryKey(flrInventurstand.getI_id());
        inventurstandDto.setNInventurpreis(inventurpeis);
        try {
            getInventurFac().updateInventurstand(inventurstandDto);
        } catch (RemoteException e) {
            throwEJBExceptionLPRespectOld(e);
        }

    }

    InventurDto dto = inventurFindByPrimaryKey(inventurIId, theClientDto);

    dto.setBAbwertungdurchgefuehrt(Helper.boolean2Short(false));
    dto.setTAbwertungdurchgefuehrt(null);

    getInventurFac().updateInventur(dto, theClientDto);

}

From source file:com.lp.server.artikel.ejbfac.LagerFacBean.java

License:Open Source License

/**
 * Holt alle Lagerbewegungsdatensaetzte einer Belegart und einer
 * Belegartposition, ausser vollstaendig verbrauchten Lagerbewegungen. Wenn
 * eine Seriennummer angegeben wird, dann wird diese mitberuecksichtigt.
 * //w ww . j ava2  s  .  c o m
 * @param belegartCNr
 *            Rechnung
 * @param belegartIId
 *            6785
 * @param artikelIId
 *            Id des Artikels
 * @param cSnrChnr
 *            f54653
 * @throws EJBExceptionLP
 *             belegartCNr == null || belegartpositionIId == null
 * @return LagerbewegungDto[]
 */

public boolean pruefeObSnrChnrAufBelegGebuchtWurde(String belegartCNr, Integer belegartIId, Integer artikelIId,
        String cSnrChnr) {

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

    org.hibernate.Criteria crit = session.createCriteria(FLRLagerbewegung.class)
            .createAlias(LagerFac.FLR_LAGERBEWEGUNG_FLRARTIKEL, "a");
    crit.add(Restrictions.eq("a.i_id", artikelIId));
    crit.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_B_HISTORIE, Helper.boolean2Short(false)));
    crit.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_B_ABGANG, Helper.boolean2Short(false)));
    crit.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_C_SERIENNRCHARGENNR, cSnrChnr));
    crit.add(Restrictions.gt(LagerFac.FLR_LAGERBEWEGUNG_N_MENGE, new BigDecimal(0)));
    List<?> resultList = crit.list();

    if (resultList.size() > 0) {

        session.close();
        return true;
    } else {

        session.close();
        return false;
    }

}

From source file:com.lp.server.artikel.ejbfac.LagerFacBean.java

License:Open Source License

/**
 * Gibt das Datum der Letzten Zugangsbuchung zurueck
 * //  ww w.jav a 2  s. c o m
 * @param artikelIId
 *            4711
 * @param bAbgang
 *            Zu/Abgang
 * @throws EJBExceptionLP
 *             artikelIId == null
 * @return java.sql.Timestamp Timestamp der Letzten Buchung
 */
public java.sql.Timestamp getDatumLetzterZugangsOderAbgangsbuchung(Integer artikelIId, boolean bAbgang)
        throws EJBExceptionLP {
    if (artikelIId == null) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                new Exception("artikelIId == null"));
    }
    java.sql.Timestamp tsZeit = null;
    Session session = FLRSessionFactory.getFactory().openSession();

    org.hibernate.Criteria crit = session.createCriteria(FLRLagerbewegung.class);
    crit.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_ARTIKEL_I_ID, artikelIId));
    crit.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_B_ABGANG, Helper.boolean2Short(bAbgang)));
    crit.add(Restrictions.gt(LagerFac.FLR_LAGERBEWEGUNG_N_MENGE, new BigDecimal(0)));
    crit.addOrder(Order.desc(LagerFac.FLR_LAGERBEWEGUNG_T_BUCHUNGSZEIT));
    crit.setMaxResults(1);
    List<?> resultList = crit.list();

    if (resultList.size() > 0) {
        Iterator<?> resultListIterator = resultList.iterator();
        FLRLagerbewegung lagerbewegung = (FLRLagerbewegung) resultListIterator.next();
        tsZeit = new Timestamp(lagerbewegung.getT_buchungszeit().getTime());
    }
    session.close();
    return tsZeit;

}

From source file:com.lp.server.artikel.ejbfac.LagerFacBean.java

License:Open Source License

public Integer getLetzteWEP_IID(Integer artikelIId) {
    if (artikelIId == null) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                new Exception("artikelIId == null"));
    }//ww  w.j  a v a  2s  . c  om

    Integer wepIId = null;

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

    org.hibernate.Criteria crit = session.createCriteria(FLRLagerbewegung.class);
    crit.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_ARTIKEL_I_ID, artikelIId));
    crit.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_C_BELEGARTNR, LocaleFac.BELEGART_BESTELLUNG));
    crit.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_B_ABGANG, Helper.boolean2Short(false)));
    crit.add(Restrictions.eq(LagerFac.FLR_LAGERBEWEGUNG_B_HISTORIE, Helper.boolean2Short(false)));
    crit.add(Restrictions.gt(LagerFac.FLR_LAGERBEWEGUNG_N_MENGE, new BigDecimal(0)));
    crit.addOrder(Order.desc(LagerFac.FLR_LAGERBEWEGUNG_T_BUCHUNGSZEIT));
    crit.setMaxResults(1);
    List<?> resultList = crit.list();

    if (resultList.size() > 0) {
        Iterator<?> resultListIterator = resultList.iterator();
        FLRLagerbewegung lagerbewegung = (FLRLagerbewegung) resultListIterator.next();
        wepIId = lagerbewegung.getI_belegartpositionid();
    }
    session.close();
    return wepIId;

}

From source file:com.lp.server.auftrag.ejbfac.AuftragFacBean.java

License:Open Source License

/**
 * Hier wird der Auftragsnettowert fuer eine Hibernate Liste von offenen
 * Auftraegen bestimmt (Status Offen oder Teilerledigt). <br>
 * Dabei werden alle Auftragswerte in Mandantenwaehrung beruecksichtigt.
 * /*from  w  w  w  .  jav a2  s.c  o  m*/
 * @param listFLRAuftragFuerUebersichtI
 *            Liste von FLRAuftragFuerUebersicht Objekten
 * @param sessionI
 *            die aktive Hibernate Session
 * @param theClientDto
 *            der aktuelle Benutzer
 * @return BigDecimal der offene Auftragsnettowert
 * @throws Throwable
 *             Ausnahme
 */
private BigDecimal berechneAuftragsnettowertOffen(List<?> listFLRAuftragFuerUebersichtI, Session sessionI,
        TheClientDto theClientDto) throws Throwable {
    BigDecimal nSummeAuftragsnettowert = new BigDecimal(0);

    if (listFLRAuftragFuerUebersichtI != null) {
        Iterator<?> it = listFLRAuftragFuerUebersichtI.iterator();

        while (it.hasNext()) {
            BigDecimal nBeitragDiesesAuftrags = new BigDecimal(0);

            FLRAuftragFuerUebersicht flrauftrag = (FLRAuftragFuerUebersicht) it.next();

            // wir befinden uns innerhalb einer Hibernate Session
            Criteria critAuftragposition = sessionI.createCriteria(FLRAuftragpositionFuerUebersicht.class);

            critAuftragposition.add(
                    Restrictions.eq(AuftragpositionFac.FLR_AUFTRAGPOSITION_AUFTRAG_I_ID, flrauftrag.getI_id()));
            critAuftragposition
                    .add(Restrictions.isNotNull(AuftragpositionFac.FLR_AUFTRAGPOSITION_N_OFFENEMENGE));
            critAuftragposition.add(
                    Restrictions.gt(AuftragpositionFac.FLR_AUFTRAGPOSITION_N_OFFENEMENGE, new BigDecimal(0)));

            List<?> listPositionen = critAuftragposition.list();
            Iterator<?> it2 = listPositionen.iterator();

            while (it2.hasNext()) {
                FLRAuftragpositionFuerUebersicht flrauftragposition = (FLRAuftragpositionFuerUebersicht) it2
                        .next();

                BigDecimal bdBeitragDieserPosition = flrauftragposition
                        .getN_nettogesamtpreisplusversteckteraufschlagminusrabatte()
                        .multiply(flrauftragposition.getN_offenemenge());

                nBeitragDiesesAuftrags = nBeitragDiesesAuftrags.add(bdBeitragDieserPosition);
            }

            // Umrechnen des Beitrags in Mandantenwaehrung
            Double ddWechselkursReziprok = flrauftrag.getF_wechselkursmandantwaehrungzuauftragswaehrung();

            if (ddWechselkursReziprok != null && ddWechselkursReziprok.doubleValue() != 1) {
                ddWechselkursReziprok = new Double(1 / ddWechselkursReziprok.doubleValue());

                nBeitragDiesesAuftrags = nBeitragDiesesAuftrags
                        .multiply(new BigDecimal(ddWechselkursReziprok.doubleValue()));
            }

            nBeitragDiesesAuftrags = Helper.rundeKaufmaennisch(nBeitragDiesesAuftrags, 4);
            checkNumberFormat(nBeitragDiesesAuftrags);

            nSummeAuftragsnettowert = nSummeAuftragsnettowert.add(nBeitragDiesesAuftrags);
        }
    }

    return nSummeAuftragsnettowert;
}

From source file:com.lp.server.bestellung.ejbfac.BestellvorschlagFacBean.java

License:Open Source License

public BestellungDto[] erstelleAbrufbestellungenAusBV(BestellvorschlagDto[] bestellvorschlagDto,
        TheClientDto theClientDto) throws EJBExceptionLP, RemoteException {
    Session session = FLRSessionFactory.getFactory().openSession();
    try {// w w w  .  ja v a 2 s  .  c  o m
        ArrayList<Integer> alUeberlieferteBestellungIId = new ArrayList<Integer>();
        HashMap<Integer, Integer> hmAbrufeZuRahmen = new HashMap<Integer, Integer>();
        for (int i = 0; i < bestellvorschlagDto.length; i++) {
            boolean bUebergeleitet = false;
            if (bestellvorschlagDto[i].getILieferantId() != null) {
                BigDecimal bdZuBestellendeMenge = bestellvorschlagDto[i].getNZubestellendeMenge();
                Criteria besPos = session.createCriteria(FLRBestellposition.class);
                Criteria best = besPos.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRBESTELLUNG);
                Criteria artikel = besPos.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRARTIKEL);
                // Filter auf den Mandanten
                best.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_MANDANT_C_NR, theClientDto.getMandant()));
                // nur Rahmenbestellungen.
                best.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_BESTELLUNGART_C_NR,
                        BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR));
                // Einschraenkung nach Status Offen, Erledigt
                Collection<String> cStati = new LinkedList<String>();
                cStati.add(BestellungFac.BESTELLSTATUS_TEILERLEDIGT);
                cStati.add(BestellungFac.BESTELLSTATUS_BESTAETIGT);
                cStati.add(BestellungFac.BESTELLSTATUS_OFFEN);
                best.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGSTATUS_C_NR, cStati));
                best.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_LIEFERANT_I_ID_BESTELLADRESSE,
                        bestellvorschlagDto[i].getILieferantId()));
                besPos.add(Restrictions.gt(BestellpositionFac.FLR_BESTELLPOSITION_N_OFFENEMENGE,
                        new BigDecimal(0)));
                artikel.add(
                        Restrictions.eq(ArtikelFac.FLR_ARTIKEL_I_ID, bestellvorschlagDto[i].getIArtikelId()));
                // Sortierung damit die aelteren Rahmen zuerst abgerufen
                // werden
                best.addOrder(Order.desc(BestellungFac.FLR_BESTELLUNG_T_LIEFERTERMIN));
                // Query ausfuehren
                List<?> besposList = besPos.list();
                Iterator<?> besposListIterator = besposList.iterator();
                boolean bMengeGenuegt = false;
                ArrayList<Integer> alVerwendeteBesPosIId = new ArrayList<Integer>();
                while (besposListIterator.hasNext() && !bMengeGenuegt) {
                    FLRBestellposition bespos = (FLRBestellposition) besposListIterator.next();
                    if (bdZuBestellendeMenge.compareTo(bespos.getN_offenemenge()) < 0) {
                        bMengeGenuegt = true;
                    } else {
                        bdZuBestellendeMenge = bdZuBestellendeMenge.subtract(bespos.getN_offenemenge());
                    }
                    alVerwendeteBesPosIId.add(bespos.getI_id());
                }
                // Jetzt haben wir eine Liste aller Rahmenpositionen die
                // verwendet werden sollen.
                BigDecimal bdBereitsBestellteMenge = new BigDecimal(0);
                for (int y = 0; y < alVerwendeteBesPosIId.size(); y++) {
                    BestellpositionDto besPosDto = getBestellpositionFac()
                            .bestellpositionFindByPrimaryKey(alVerwendeteBesPosIId.get(y));
                    BestellungDto abrufBestellungDto = null;
                    if (hmAbrufeZuRahmen.containsKey(besPosDto.getBelegIId())) {
                        abrufBestellungDto = getBestellungFac()
                                .bestellungFindByPrimaryKey(hmAbrufeZuRahmen.get(besPosDto.getBelegIId()));
                    }
                    BestellungDto rahmenBestellungDto = getBestellungFac()
                            .bestellungFindByPrimaryKey(besPosDto.getBelegIId());
                    boolean bAbrufvorhanden = false;
                    // wenn wir bereits durch einen anderen Bestellvorschlag
                    // einen Abruf fuer diesen Lieferanten mit diesem
                    // Liefertermin angelegt haben
                    if (abrufBestellungDto != null) {
                        if (abrufBestellungDto.getDLiefertermin()
                                .equals(bestellvorschlagDto[i].getTLiefertermin())) {
                            bAbrufvorhanden = true;
                        }
                    }
                    if (!bAbrufvorhanden) {
                        // Wir haben fuer diese Bestellung noch keinen Abruf
                        // und legen diesen an
                        MandantDto mandantDto = getMandantFac()
                                .mandantFindByPrimaryKey(theClientDto.getMandant(), theClientDto);

                        // Wechselkurs ist immer der aktuelle
                        BigDecimal wechselkurs = getLocaleFac().getWechselkurs2(
                                rahmenBestellungDto.getWaehrungCNr(), mandantDto.getWaehrungCNr(),
                                theClientDto);
                        abrufBestellungDto = new BestellungDto();
                        abrufBestellungDto.setFWechselkursmandantwaehrungzubelegwaehrung(
                                new Double(wechselkurs.doubleValue()));
                        abrufBestellungDto
                                .setPersonalIIdAnforderer(rahmenBestellungDto.getPersonalIIdAnforderer());
                        abrufBestellungDto.setPersonalIIdAendern(theClientDto.getIDPersonal());
                        abrufBestellungDto.setPersonalIIdAnlegen(theClientDto.getIDPersonal());
                        abrufBestellungDto.setZahlungszielIId(rahmenBestellungDto.getZahlungszielIId());
                        abrufBestellungDto.setBelegartCNr(LocaleFac.BELEGART_BESTELLUNG);
                        abrufBestellungDto
                                .setBestellungartCNr(BestellungFac.BESTELLUNGART_ABRUFBESTELLUNG_C_NR);
                        abrufBestellungDto.setStatusCNr(BestellungFac.BESTELLSTATUS_ANGELEGT);
                        abrufBestellungDto.setIBestellungIIdRahmenbestellung(rahmenBestellungDto.getIId());
                        abrufBestellungDto
                                .setBTeillieferungMoeglich(rahmenBestellungDto.getBTeillieferungMoeglich());
                        abrufBestellungDto.setDBelegdatum(this.getDate());
                        abrufBestellungDto.setDLiefertermin(bestellvorschlagDto[i].getTLiefertermin());
                        abrufBestellungDto.setKostenstelleIId(rahmenBestellungDto.getKostenstelleIId());
                        abrufBestellungDto.setLieferantIIdBestelladresse(
                                rahmenBestellungDto.getLieferantIIdBestelladresse());
                        abrufBestellungDto.setLieferantIIdRechnungsadresse(
                                rahmenBestellungDto.getLieferantIIdRechnungsadresse());
                        abrufBestellungDto.setSpediteurIId(rahmenBestellungDto.getSpediteurIId());
                        abrufBestellungDto.setMandantCNr(mandantDto.getCNr());
                        abrufBestellungDto.setLieferartIId(rahmenBestellungDto.getLieferartIId());
                        abrufBestellungDto.setWaehrungCNr(rahmenBestellungDto.getWaehrungCNr());
                        abrufBestellungDto
                                .setFAllgemeinerRabattsatz(rahmenBestellungDto.getFAllgemeinerRabattsatz());
                        Integer iAbrufBEstellungIId = getBestellungFac().createBestellung(abrufBestellungDto,
                                theClientDto);
                        abrufBestellungDto = getBestellungFac().bestellungFindByPrimaryKey(iAbrufBEstellungIId);
                        hmAbrufeZuRahmen.put(besPosDto.getBelegIId(), abrufBestellungDto.getIId());
                    }
                    // Bestellung wurde nun angelgt oder war bereits
                    // vorhanden
                    // Jetzt die Position anlegen oder updaten
                    BestellpositionDto[] vorhandeneAbrufe = getBestellpositionFac()
                            .bestellpositionFindByBestellung(abrufBestellungDto.getIId(), theClientDto);
                    BestellpositionDto abrufBestellpositionDto = null;
                    for (int x = 0; x < vorhandeneAbrufe.length; x++) {
                        if (bestellvorschlagDto[i].getIArtikelId()
                                .equals(vorhandeneAbrufe[x].getArtikelIId())) {
                            abrufBestellpositionDto = vorhandeneAbrufe[x];
                        }
                    }
                    BigDecimal bdbenoetigteMenge = bestellvorschlagDto[i].getNZubestellendeMenge()
                            .subtract(bdBereitsBestellteMenge);
                    BigDecimal bdAbrufmenge;
                    if (bdbenoetigteMenge.compareTo(besPosDto.getNOffeneMenge()) > 0) {
                        if (y == alVerwendeteBesPosIId.size() - 1) {
                            // Letzte Pos, also wird ueberliefert
                            bdAbrufmenge = bdbenoetigteMenge;
                            if (!alUeberlieferteBestellungIId.contains(besPosDto.getBelegIId())) {
                                alUeberlieferteBestellungIId.add(besPosDto.getBelegIId());
                            }
                        } else {
                            bdAbrufmenge = besPosDto.getNOffeneMenge();
                        }
                    } else {
                        bdAbrufmenge = bdbenoetigteMenge;
                    }

                    if (abrufBestellpositionDto == null) {
                        abrufBestellpositionDto = new BestellpositionDto();
                        abrufBestellpositionDto.setNMenge(bdAbrufmenge);
                        bdbenoetigteMenge = bdbenoetigteMenge.subtract(bdAbrufmenge);
                        ArtikelDto artikelDto = getArtikelFac()
                                .artikelFindByPrimaryKey(bestellvorschlagDto[i].getIArtikelId(), theClientDto);
                        abrufBestellpositionDto.setIBestellpositionIIdRahmenposition(besPosDto.getIId());
                        abrufBestellpositionDto.setArtikelIId(bestellvorschlagDto[i].getIArtikelId());
                        abrufBestellpositionDto.setBDrucken(Helper.boolean2Short(false));
                        abrufBestellpositionDto.setPositionsartCNr(BestellpositionFac.BESTELLPOSITIONART_IDENT);
                        abrufBestellpositionDto
                                .setBestellpositionstatusCNr(BestellpositionFac.BESTELLPOSITIONSTATUS_OFFEN);
                        abrufBestellpositionDto.setBestellungIId(abrufBestellungDto.getIId());
                        abrufBestellpositionDto.setCBez(artikelDto.getArtikelsprDto().getCBez());
                        // bestellpositionDto.setISort(new Integer(j++));
                        abrufBestellpositionDto.setEinheitCNr(artikelDto.getEinheitCNr());
                        abrufBestellpositionDto.setNNettoeinzelpreis(besPosDto.getNNettoeinzelpreis());
                        abrufBestellpositionDto.setNNettogesamtpreis(besPosDto.getNNettogesamtpreis());
                        abrufBestellpositionDto.setNRabattbetrag(besPosDto.getNRabattbetrag());
                        abrufBestellpositionDto.setDRabattsatz(besPosDto.getDRabattsatz());
                        abrufBestellpositionDto.setNMaterialzuschlag(besPosDto.getNMaterialzuschlag());
                        abrufBestellpositionDto
                                .setBNettopreisuebersteuert(besPosDto.getBNettopreisuebersteuert());
                        abrufBestellpositionDto
                                .setTUebersteuerterLiefertermin(bestellvorschlagDto[i].getTLiefertermin());
                        getBestellpositionFac().createAbrufbestellposition(abrufBestellpositionDto,
                                BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_PREIS_UNVERAENDERT, null,
                                theClientDto);
                    } else {
                        BigDecimal bdMenge = bdAbrufmenge.add(abrufBestellpositionDto.getNMenge());
                        abrufBestellpositionDto.setNMenge(bdMenge);
                        bdbenoetigteMenge = bdbenoetigteMenge.subtract(bdMenge);
                        getBestellpositionFac().updateAbrufbestellposition(abrufBestellpositionDto,
                                BestellpositionFac.PREISPFLEGEARTIKELLIEFERANT_PREIS_UNVERAENDERT, null,
                                theClientDto);

                    }
                    bUebergeleitet = true;
                }
                if (bUebergeleitet) {
                    this.removeBestellvorschlag(bestellvorschlagDto[i]);
                }
            }
        }
        BestellungDto[] toReturn = new BestellungDto[alUeberlieferteBestellungIId.size()];
        for (int x = 0; x < alUeberlieferteBestellungIId.size(); x++) {
            toReturn[x] = getBestellungFac().bestellungFindByPrimaryKey(alUeberlieferteBestellungIId.get(x));
        }
        return toReturn;
    } catch (Exception e) {
        throw new EJBExceptionLP(e);
    } finally {
        session.close();
    }
}

From source file:com.lp.server.eingangsrechnung.ejbfac.EingangsrechnungReportFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printOffene(TheClientDto theClientDto, int iSort, Integer lieferantIId, Date dStichtag,
        boolean bStichtagIstFreigabeDatum, boolean bZusatzkosten, boolean mitNichtZugeordnetenBelegen) {
    this.useCase = UC_OFFENE;

    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = null;/*from w  w  w . j  ava 2  s.c  o m*/
    try {
        Map<Integer, ZahlungszielDto> mZahlungsziel = getMandantFac()
                .zahlungszielFindAllByMandantAsDto(theClientDto.getMandant(), theClientDto);

        session = factory.openSession();

        List<Integer> lieferantenIIds = new ArrayList<Integer>();
        if (lieferantIId != null) {
            lieferantenIIds.add(lieferantIId);
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT) {
            Iterator<?> iter = session.createCriteria(FLRLieferant.class).createAlias("flrpartner", "p")
                    .addOrder(Order.asc("p.c_name1nachnamefirmazeile1"))
                    .add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()))

                    .list().iterator();
            while (iter.hasNext()) {
                lieferantenIIds.add(((FLRLieferant) iter.next()).getI_id());
            }
        } else {
            lieferantenIIds.add(null);
        }

        List<Object[]> dataList = new ArrayList<Object[]>();

        for (Integer liefIId : lieferantenIIds) {
            Criteria crit = session.createCriteria(FLREingangsrechnungReport.class);
            // Filter nach Mandant
            crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));

            Collection<String> cStati = new LinkedList<String>();
            cStati.add(EingangsrechnungFac.STATUS_TEILBEZAHLT);
            cStati.add(EingangsrechnungFac.STATUS_ANGELEGT);
            cStati.add(EingangsrechnungFac.STATUS_ERLEDIGT);
            crit.add(Restrictions.in("status_c_nr", cStati));

            if (bZusatzkosten) {
                crit.add(Restrictions.eq(EingangsrechnungFac.FLR_ER_EINGANGSRECHNUNGART_C_NR,
                        EingangsrechnungFac.EINGANGSRECHNUNGART_ZUSATZKOSTEN));
            } else {
                crit.add(Restrictions.not(Restrictions.eq(EingangsrechnungFac.FLR_ER_EINGANGSRECHNUNGART_C_NR,
                        EingangsrechnungFac.EINGANGSRECHNUNGART_ZUSATZKOSTEN)));
            }

            if (liefIId != null) {
                crit.add(Restrictions.eq("lieferant_i_id", liefIId));
            }
            if (bStichtagIstFreigabeDatum) {
                crit.add(Restrictions.le("t_freigabedatum", dStichtag));
            } else {
                crit.add(Restrictions.le("t_belegdatum", dStichtag));
            }
            crit.add(Restrictions.or(Restrictions.gt("t_bezahltdatum", dStichtag),
                    Restrictions.isNull("t_bezahltdatum")));
            crit.add(Restrictions.or(Restrictions.gt("t_manuellerledigt", dStichtag),
                    Restrictions.isNull("t_manuellerledigt")));

            if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_RECHNUNGSNUMMER) {
                crit.addOrder(Order.asc("c_nr"));
            } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT) {
                crit.addOrder(Order.asc("c_nr"));
            } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT) {
                crit.addOrder(Order.asc("t_faelligkeit")).addOrder(Order.asc("c_nr")); // Inerhalb wird immer nach
                // Rechnungsnummer sortiert
            } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT_SKONTO1) {
                crit.addOrder(Order.asc("t_faelligkeit_skonto1")).addOrder(Order.asc("c_nr"));
            } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT_SKONTO2) {
                crit.addOrder(Order.asc("t_faelligkeit_skonto2")).addOrder(Order.asc("c_nr"));
            }
            if (iSort != EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT) {
                mitNichtZugeordnetenBelegen = false;
            }
            List<?> resultList = crit.list();

            Iterator<?> resultListIterator = resultList.iterator();
            int row = 0;

            Object[][] tempData = new Object[resultList.size()][OFFENE_ANZAHL_FELDER];

            if (mitNichtZugeordnetenBelegen) {
                LieferantDto liefDto = getLieferantFac().lieferantFindByPrimaryKey(liefIId, theClientDto);

                if (liefDto.getKontoIIdKreditorenkonto() != null) {
                    // TODO: nur FLRFinanzBuchungDetail holen
                    Query query = session.createQuery(
                            "SELECT buchungdetail from FLRFinanzBuchungDetail buchungdetail LEFT OUTER JOIN buchungdetail.flrbuchung AS buchung"
                                    + " WHERE"
                                    + BuchungDetailQueryBuilder.buildNurOffeneBuchungDetails("buchungdetail")
                                    + "AND"
                                    + BuchungDetailQueryBuilder.buildNichtZuordenbareVonKonto("buchungdetail",
                                            "buchung", liefDto.getKontoIIdKreditorenkonto())
                                    + (dStichtag == null ? ""
                                            : ("AND buchung.d_buchungsdatum<='"
                                                    + Helper.formatDateWithSlashes(dStichtag) + "'")));

                    @SuppressWarnings("unchecked")
                    List<FLRFinanzBuchungDetail> bdList = query.list();
                    if (bdList.size() > 0) {
                        if (tempData.length < 1) {
                            tempData = new Object[1][OFFENE_ANZAHL_FELDER];
                            String sFirma = liefDto.getPartnerDto().formatFixTitelName1Name2();
                            tempData[0][OFFENE_FELD_FIRMA] = sFirma;
                            tempData[0][OFFENE_FELD_KREDITORENNR] = getFinanzFac()
                                    .kontoFindByPrimaryKeySmall(liefDto.getKontoIIdKreditorenkonto()).getCNr();
                        }
                        tempData[0][OFFENE_SUBREPORT_OFFENE_BUCHUNGEN] = FinanzSubreportGenerator
                                .createBuchungsdetailSubreport(bdList, false);
                    }
                }

            }
            while (resultListIterator.hasNext()) {
                FLREingangsrechnungReport er = (FLREingangsrechnungReport) resultListIterator.next();
                EingangsrechnungDto erDto = getEingangsrechnungFac()
                        .eingangsrechnungFindByPrimaryKey(er.getI_id());
                LieferantDto liefDto = getLieferantFac().lieferantFindByPrimaryKey(erDto.getLieferantIId(),
                        theClientDto);

                String sErCNr = erDto.getCNr();
                String sFirma = liefDto.getPartnerDto().formatFixTitelName1Name2();
                ZahlungszielDto zzDto = mZahlungsziel.get(erDto.getZahlungszielIId());
                tempData[row][OFFENE_FELD_ER_C_NR] = sErCNr;
                tempData[row][OFFENE_FELD_FIRMA] = sFirma;
                tempData[row][OFFENE_FELD_ERDATUM] = er.getT_belegdatum();
                tempData[row][OFFENE_FELD_MAHNDATUM] = erDto.getTMahndatum();
                tempData[row][OFFENE_FELD_KREDITORENNR] = liefDto.getKontoIIdKreditorenkonto() != null
                        ? getFinanzFac().kontoFindByPrimaryKeySmall(liefDto.getKontoIIdKreditorenkonto())
                                .getCNr()
                        : null;
                tempData[row][OFFENE_FELD_MAHNSTUFE] = er.getMahnstufe_i_id();
                tempData[row][OFFENE_FELD_FREIGABEDATUM] = er.getT_freigabedatum();
                tempData[row][OFFENE_FELD_WERT] = erDto.getNBetrag();
                tempData[row][OFFENE_FELD_LIEFERANTENRECHNUNGSNUMMER] = erDto.getCLieferantenrechnungsnummer();
                tempData[row][OFFENE_FELD_TEXT] = erDto.getCText();
                if (zzDto != null) {
                    tempData[row][OFFENE_FELD_ZAHLUNGSZIEL] = zzDto.getCBez();
                    tempData[row][OFFENE_FELD_SKONTOTAGE1] = zzDto.getSkontoAnzahlTage1();
                    tempData[row][OFFENE_FELD_SKONTOTAGE2] = zzDto.getSkontoAnzahlTage2();
                    tempData[row][OFFENE_FELD_SKONTOPROZENT1] = zzDto.getSkontoProzentsatz1();
                    tempData[row][OFFENE_FELD_SKONTOPROZENT2] = zzDto.getSkontoProzentsatz2();
                    tempData[row][OFFENE_FELD_NETTOTAGE] = zzDto.getAnzahlZieltageFuerNetto();
                    if (erDto.getDFreigabedatum() != null) {
                        if (zzDto.getAnzahlZieltageFuerNetto() != null) {
                            tempData[row][OFFENE_FELD_FAELLIGKEIT] = er.getT_faelligkeit();
                        }
                        if (zzDto.getSkontoAnzahlTage1() != null) {
                            tempData[row][OFFENE_FELD_FAELLIGKEIT_SKONTO1] = er.getT_faelligkeit_skonto1();
                        }
                        if (zzDto.getSkontoAnzahlTage2() != null) {
                            tempData[row][OFFENE_FELD_FAELLIGKEIT_SKONTO2] = er.getT_faelligkeit_skonto2();
                        }
                    }
                }

                // datum der letzten zahlung bis zum stichtag ermitteln
                EingangsrechnungzahlungDto[] zahlungen = getEingangsrechnungFac()
                        .eingangsrechnungzahlungFindByEingangsrechnungIId(er.getI_id());
                java.sql.Date dZahldatum = null;
                for (int i = 0; i < zahlungen.length; i++) {
                    if ((dZahldatum == null || zahlungen[i].getTZahldatum().after(dZahldatum))
                            && !zahlungen[i].getTZahldatum().after(dStichtag)) {
                        dZahldatum = new Date(zahlungen[i].getTZahldatum().getTime());
                    }
                }
                tempData[row][OFFENE_FELD_ZAHLDATUM] = dZahldatum;
                // Zahlungsbetrag bis zum Stichtag ermitteln
                BigDecimal bdBezahltFw = new BigDecimal(0);
                BigDecimal bdBezahltKursBelegdatum = new BigDecimal(0);
                for (int i = 0; i < zahlungen.length; i++) {
                    if (!zahlungen[i].getTZahldatum().after(dStichtag)) {
                        bdBezahltFw = bdBezahltFw.add(zahlungen[i].getNBetragfw());
                        bdBezahltKursBelegdatum = bdBezahltKursBelegdatum
                                .add(zahlungen[i].getNBetragfw().multiply(erDto.getNKurs()));
                    }
                }

                tempData[row][OFFENE_FELD_BETRAG] = getLocaleFac().rechneUmInAndereWaehrungZuDatum(bdBezahltFw,
                        erDto.getWaehrungCNr(), theClientDto.getSMandantenwaehrung(),
                        // new Date(System.currentTimeMillis()),
                        dStichtag, theClientDto);
                tempData[row][OFFENE_FELD_BETRAG_KURS_BELEGDATUM] = bdBezahltKursBelegdatum;
                tempData[row][OFFENE_FELD_OFFEN] = getLocaleFac().rechneUmInAndereWaehrungZuDatum(
                        erDto.getNBetragfw().subtract(bdBezahltFw), erDto.getWaehrungCNr(),
                        theClientDto.getSMandantenwaehrung(),
                        // new Date(System.currentTimeMillis()),
                        dStichtag, theClientDto);
                tempData[row][OFFENE_FELD_OFFEN_KURS_BELEGDATUM] = erDto.getNBetrag()
                        .subtract(bdBezahltKursBelegdatum);

                tempData[row][OFFENE_FELD_BETRAG_FW] = bdBezahltFw;
                tempData[row][OFFENE_FELD_OFFEN_FW] = erDto.getNBetragfw().subtract(bdBezahltFw);
                tempData[row][OFFENE_FELD_ERWAEHRUNG] = erDto.getWaehrungCNr();
                tempData[row][OFFENE_FELD_WERT_FW] = erDto.getNBetragfw();
                tempData[row][OFFENE_FELD_ERKURS] = erDto.getNKurs();
                WechselkursDto wkDto = getLocaleFac().getKursZuDatum(erDto.getWaehrungCNr(),
                        theClientDto.getSMandantenwaehrung(), dStichtag, theClientDto);
                tempData[row][OFFENE_FELD_KURS_STICHTAG] = wkDto.getNKurs()
                        .setScale(LocaleFac.ANZAHL_NACHKOMMASTELLEN_WECHSELKURS, RoundingMode.HALF_EVEN);
                row++;
            }
            dataList.addAll(Arrays.asList(tempData));
        }

        data = dataList.toArray(new Object[0][]);
        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        mapParameter.put("P_DATUM", dStichtag);
        mapParameter.put("P_STICHTAGISTFREIGABEDATUM", new Boolean(bStichtagIstFreigabeDatum));
        mapParameter.put("P_ZUSATZKOSTEN", new Boolean(bZusatzkosten));
        String sSortierung = null;
        if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT) {
            sSortierung = "Lieferant";
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_RECHNUNGSNUMMER) {
            sSortierung = "Rechnungsnummer";
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT) {
            sSortierung = getTextRespectUISpr("lp.faelligkeit", theClientDto.getMandant(),
                    theClientDto.getLocUi());
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT_SKONTO1) {
            sSortierung = getTextRespectUISpr("er.faelligkeitskonto1", theClientDto.getMandant(),
                    theClientDto.getLocUi());
        } else if (iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_FAELLIGKEIT_SKONTO2) {
            sSortierung = getTextRespectUISpr("er.faelligkeitskonto2", theClientDto.getMandant(),
                    theClientDto.getLocUi());
        }
        mapParameter.put("P_SORTIERUNGNACHLIEFERANT",
                new Boolean(iSort == EingangsrechnungReportFac.REPORT_OFFENE_SORT_LIEFERANT));
        mapParameter.put(LPReport.P_SORTIERUNG, sSortierung);

        String sZessionstext = null;
        sZessionstext = getParameterFac().parametermandantFindByPrimaryKey(ParameterFac.PARAMETER_ZESSIONSTEXT,
                ParameterFac.KATEGORIE_ALLGEMEIN, theClientDto.getMandant()).getCWert();
        if (sZessionstext != null) {
            mapParameter.put("P_ZESSIONSTEXT", sZessionstext);
        }
        mapParameter.put("P_MANDANTENWAEHRUNG", theClientDto.getSMandantenwaehrung());
        initJRDS(mapParameter, EingangsrechnungReportFac.REPORT_MODUL,
                EingangsrechnungReportFac.REPORT_EINGANGSRECHNUNG_OFFENE, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
        return null;
    } finally {
        closeSession(session);
    }
}

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

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printHalbfertigfabrikatsinventur(java.sql.Timestamp tsStichtag, int iSortierung,
        boolean bVerdichtet, Integer partnerIIdFertigungsort, TheClientDto theClientDto) throws EJBExceptionLP {
    Session session = null;/*from w w w.  j  a va 2  s .  c  om*/
    try {
        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        if (tsStichtag != null) {
            mapParameter.put("P_STICHTAG", tsStichtag);
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tsStichtag.getTime());
            c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);
            tsStichtag = new java.sql.Timestamp(c.getTimeInMillis());
            tsStichtag = Helper.cutTimestamp(tsStichtag);
        }

        this.useCase = UC_HALBFERTIGFABRIKATSINVENTUR;
        this.index = -1;
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRLosReport.class);
        c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
        // c.add(Restrictions.eq("i_id", 99579));

        if (partnerIIdFertigungsort != null) {
            c.add(Restrictions.eq(FertigungFac.FLR_LOSREPORT_PARTNER_I_ID_FERTIGUNGSORT,
                    partnerIIdFertigungsort));
        }

        if (tsStichtag == null) {
            c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
                    new String[] { FertigungFac.STATUS_STORNIERT, FertigungFac.STATUS_ERLEDIGT,
                            FertigungFac.STATUS_ANGELEGT, FertigungFac.STATUS_GESTOPPT })));
        } else {
            c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
                    new String[] { FertigungFac.STATUS_STORNIERT, FertigungFac.STATUS_GESTOPPT })));

            c.add(Restrictions.or(Restrictions.gt(FertigungFac.FLR_LOS_T_ERLEDIGT, tsStichtag),
                    Restrictions.isNull(FertigungFac.FLR_LOS_T_ERLEDIGT)));

            c.add(Restrictions.or(Restrictions.gt(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tsStichtag),
                    Restrictions.isNull(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT)));

            c.add(Restrictions.le(FertigungFac.FLR_LOS_T_AUSGABE, tsStichtag));
        }

        // Sortierung nach Losnummer
        c.addOrder(Order.asc(FertigungFac.FLR_LOS_C_NR));
        List<?> list = c.list();

        ArrayList<Object[]> alDaten = new ArrayList<Object[]>();

        int i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLRLosReport item = (FLRLosReport) iter.next();

            Object[] zeile = new Object[17];

            zeile[HF_LOSNUMMER] = item.getC_nr();
            zeile[HF_LOSGROESSE] = item.getN_losgroesse();

            if (item.getFlrstueckliste() != null) {
                zeile[HF_ARTIKELNUMMER] = item.getFlrstueckliste().getFlrartikel().getC_nr();
                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                        item.getFlrstueckliste().getFlrartikel().getI_id(), theClientDto);
                zeile[HF_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
                ;
            } else {
                zeile[HF_ARTIKELNUMMER] = getTextRespectUISpr("fert.materialliste", theClientDto.getMandant(),
                        theClientDto.getLocUi());
                zeile[HF_BEZEICHNUNG] = item.getC_projekt();
            }

            LosablieferungDto[] losablieferungDtos = getFertigungFac()
                    .losablieferungFindByLosIId(item.getI_id(), true, theClientDto);
            BigDecimal bdAbgeliefert = new BigDecimal(0.0000);
            for (int j = 0; j < losablieferungDtos.length; j++) {

                if (tsStichtag == null) {
                    bdAbgeliefert = bdAbgeliefert.add(losablieferungDtos[j].getNMenge());
                } else {
                    if (tsStichtag.after(losablieferungDtos[j].getTAendern())) {
                        bdAbgeliefert = bdAbgeliefert.add(losablieferungDtos[j].getNMenge());
                    }
                }

            }
            zeile[HF_ERLEDIGT] = bdAbgeliefert;

            // Nun eine Zeile pro Position

            // Ausgegebenes Material
            LossollmaterialDto[] sollmat = getFertigungFac().lossollmaterialFindByLosIId(item.getI_id());

            for (int j = 0; j < sollmat.length; j++) {
                BigDecimal bdMenge = getFertigungFac().getAusgegebeneMenge(sollmat[j].getIId(), tsStichtag,
                        theClientDto);
                zeile[HF_POSITION_AUSGEGEBEN] = bdMenge;

                // Einkaufspreis des ersten Lieferanten hinzufuegen
                ArtikellieferantDto dto = getArtikelFac().getArtikelEinkaufspreis(sollmat[j].getArtikelIId(),
                        null, new BigDecimal(1), theClientDto.getSMandantenwaehrung(),
                        new java.sql.Date(sollmat[j].getTAendern().getTime()), theClientDto);
                if (dto != null) {
                    zeile[HF_POSITION_EKPREIS] = dto.getLief1Preis();
                }

                // CK:2008-12-23 Wegen Beistellteilen ist die Verfaelschung
                // des Gestehungspreises falsch
                // es muss immer der Gestehungspreis zum ausgabezeitpunkt
                // verwendet werden.
                BigDecimal bdPreis = getFertigungFac().getAusgegebeneMengePreis(sollmat[j].getIId(), tsStichtag,
                        theClientDto);
                zeile[HF_POSITION_PREIS] = bdPreis;

                BigDecimal sollsatzmenge = new BigDecimal(0);

                if (item.getN_losgroesse().doubleValue() != 0) {
                    sollsatzmenge = sollmat[j].getNMenge().divide(item.getN_losgroesse(),
                            BigDecimal.ROUND_HALF_EVEN);
                }

                BigDecimal theoretischabgeliefert = sollsatzmenge.multiply(bdAbgeliefert);

                if (theoretischabgeliefert.doubleValue() > bdMenge.doubleValue()) {
                    theoretischabgeliefert = bdMenge;
                }

                zeile[HF_POSITION_ABGELIFERT] = theoretischabgeliefert;
                zeile[HF_POSITION_OFFEN] = bdMenge.subtract(theoretischabgeliefert);

                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(sollmat[j].getArtikelIId(),
                        theClientDto);
                zeile[HF_POSITION_ARTIKELNUMMMER] = artikelDto.getCNr();
                zeile[HF_POSITION_BEZEICHNUNG] = artikelDto.formatBezeichnung();

                if (bVerdichtet) {
                    if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_ARTIKELNR) {
                        boolean bGefunden = false;
                        for (int k = 0; k < alDaten.size(); k++) {
                            Object[] zeileTemp = (Object[]) alDaten.get(k);

                            if (zeileTemp[HF_POSITION_ARTIKELNUMMMER]
                                    .equals(zeile[HF_POSITION_ARTIKELNUMMMER])) {
                                bGefunden = true;

                                zeileTemp[HF_LOSNUMMER] = "";
                                zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                        .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                        .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                // Neuen Preis berechnen

                                BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                        .add(neuerPreis.multiply(neueOffen));

                                if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                    zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                            BigDecimal.ROUND_HALF_EVEN);
                                } else {
                                    zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                }

                                zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                alDaten.set(k, zeileTemp);
                            }

                        }

                        if (bGefunden == false) {
                            alDaten.add(zeile);
                        }

                    } else if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_LOSNR) {
                        boolean bGefunden = false;
                        for (int k = 0; k < alDaten.size(); k++) {
                            Object[] zeileTemp = (Object[]) alDaten.get(k);

                            if (zeileTemp[HF_LOSNUMMER].equals(zeile[HF_LOSNUMMER])) {
                                bGefunden = true;

                                zeileTemp[HF_POSITION_ARTIKELNUMMMER] = "";
                                zeileTemp[HF_POSITION_BEZEICHNUNG] = "";

                                zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                        .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                        .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                // Neuen Preis berechnen

                                BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                        .add(neuerPreis.multiply(neueOffen));

                                if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                    zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                            BigDecimal.ROUND_HALF_EVEN);
                                } else {
                                    zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                }

                                zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                alDaten.set(k, zeileTemp);
                            }

                        }

                        if (bGefunden == false) {
                            alDaten.add(zeile);
                        }

                    }
                } else {

                    alDaten.add(zeile);
                }
                zeile = new Object[17];
                zeile[HF_LOSNUMMER] = item.getC_nr();
            }

            // Verbrauchte Arbeitszeit
            LossollarbeitsplanDto[] lossollarbeitsplanDto = getFertigungFac()
                    .lossollarbeitsplanFindByLosIId(item.getI_id());
            for (int j = 0; j < lossollarbeitsplanDto.length; j++) {
                AuftragzeitenDto[] zeiten = getZeiterfassungFac().getAllZeitenEinesBeleges(
                        LocaleFac.BELEGART_LOS, item.getI_id(), null, null, null, tsStichtag, false, false,
                        theClientDto);

                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(
                        lossollarbeitsplanDto[j].getArtikelIIdTaetigkeit(), theClientDto);
                zeile[HF_POSITION_ARTIKELNUMMMER] = artikelDto.getCNr();
                zeile[HF_POSITION_BEZEICHNUNG] = artikelDto.formatBezeichnung();

                BigDecimal bdArbeitszeitwert = new BigDecimal(0);
                BigDecimal bdIstZeit = new BigDecimal(0);

                for (int k = 0; k < zeiten.length; k++) {
                    if (artikelDto.getIId().equals(zeiten[k].getArtikelIId())) {

                        bdArbeitszeitwert = bdArbeitszeitwert.add(zeiten[k].getBdKosten());
                        bdIstZeit = bdIstZeit.add(new BigDecimal(zeiten[k].getDdDauer().doubleValue()));
                    }
                }
                BigDecimal sollsatzmenge = new BigDecimal(0);

                if (item.getN_losgroesse().doubleValue() != 0) {

                    sollsatzmenge = lossollarbeitsplanDto[j].getNGesamtzeit().divide(item.getN_losgroesse(),
                            BigDecimal.ROUND_HALF_EVEN);
                }

                if (Helper.short2boolean(lossollarbeitsplanDto[j].getBNurmaschinenzeit())) {
                    zeile[HF_POSITION_AUSGEGEBEN] = new BigDecimal(0);
                } else {
                    zeile[HF_POSITION_AUSGEGEBEN] = lossollarbeitsplanDto[j].getNGesamtzeit();
                }

                BigDecimal theoretischabgeliefert = sollsatzmenge.multiply(bdAbgeliefert);

                BigDecimal restist = bdIstZeit.subtract(theoretischabgeliefert);

                if (restist.doubleValue() <= 0) {
                    restist = new BigDecimal(0);
                }

                if (theoretischabgeliefert.doubleValue() > bdIstZeit.doubleValue()) {
                    theoretischabgeliefert = bdIstZeit;
                }
                zeile[HF_POSITION_ABGELIFERT] = theoretischabgeliefert;
                zeile[HF_POSITION_OFFEN] = restist;

                if (bdIstZeit.doubleValue() != 0) {
                    zeile[HF_POSITION_PREIS] = bdArbeitszeitwert.divide(bdIstZeit, BigDecimal.ROUND_HALF_EVEN);
                } else {
                    zeile[HF_POSITION_PREIS] = new BigDecimal(0);
                }

                AuftragzeitenDto[] maschinenzeiten = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(
                        item.getI_id(), lossollarbeitsplanDto[j].getIId(), null, tsStichtag, theClientDto);

                BigDecimal bdArbeitszeitwertMaschine = new BigDecimal(0);
                BigDecimal bdIstZeitMaschine = new BigDecimal(0);

                for (int k = 0; k < maschinenzeiten.length; k++) {

                    bdArbeitszeitwertMaschine = bdArbeitszeitwertMaschine.add(maschinenzeiten[k].getBdKosten());
                    bdIstZeitMaschine = bdIstZeitMaschine
                            .add(new BigDecimal(maschinenzeiten[k].getDdDauer().doubleValue()));

                }

                if (lossollarbeitsplanDto[j].getMaschineIId() == null) {
                    zeile[HF_POSITION_AUSGEGEBEN_MASCHINE] = new BigDecimal(0);
                } else {
                    zeile[HF_POSITION_AUSGEGEBEN_MASCHINE] = lossollarbeitsplanDto[j].getNGesamtzeit();
                }

                theoretischabgeliefert = sollsatzmenge.multiply(bdAbgeliefert);
                BigDecimal restistMaschine = bdIstZeitMaschine.subtract(theoretischabgeliefert);

                if (restistMaschine.doubleValue() <= 0) {
                    restistMaschine = new BigDecimal(0);
                }

                if (theoretischabgeliefert.doubleValue() > bdIstZeitMaschine.doubleValue()) {
                    theoretischabgeliefert = bdIstZeitMaschine;
                }
                zeile[HF_POSITION_ABGELIFERT_MASCHINE] = theoretischabgeliefert;
                zeile[HF_POSITION_OFFEN_MASCHINE] = restistMaschine;

                if (bdIstZeitMaschine.doubleValue() != 0) {
                    zeile[HF_POSITION_PREIS_MASCHINE] = bdArbeitszeitwertMaschine.divide(bdIstZeitMaschine,
                            BigDecimal.ROUND_HALF_EVEN);
                } else {
                    zeile[HF_POSITION_PREIS_MASCHINE] = new BigDecimal(0);
                }

                if (bVerdichtet) {
                    if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_ARTIKELNR) {
                        boolean bGefunden = false;
                        for (int k = 0; k < alDaten.size(); k++) {
                            Object[] zeileTemp = (Object[]) alDaten.get(k);

                            if (zeileTemp[HF_POSITION_ARTIKELNUMMMER]
                                    .equals(zeile[HF_POSITION_ARTIKELNUMMMER])) {
                                bGefunden = true;

                                zeileTemp[HF_LOSNUMMER] = "";
                                zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                        .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                        .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                // Neuen Preis berechnen

                                BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                        .add(neuerPreis.multiply(neueOffen));

                                if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                    zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                            BigDecimal.ROUND_HALF_EVEN);
                                } else {
                                    zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                }

                                zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                alDaten.set(k, zeileTemp);
                            }

                        }

                        if (bGefunden == false) {
                            alDaten.add(zeile);
                        }

                    } else if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_LOSNR) {
                        boolean bGefunden = false;
                        for (int k = 0; k < alDaten.size(); k++) {
                            Object[] zeileTemp = (Object[]) alDaten.get(k);

                            if (zeileTemp[HF_LOSNUMMER].equals(zeile[HF_LOSNUMMER])) {
                                bGefunden = true;

                                zeileTemp[HF_POSITION_ARTIKELNUMMMER] = "";
                                zeileTemp[HF_POSITION_BEZEICHNUNG] = "";
                                zeileTemp[HF_POSITION_AUSGEGEBEN] = ((BigDecimal) zeileTemp[HF_POSITION_AUSGEGEBEN])
                                        .add((BigDecimal) zeile[HF_POSITION_AUSGEGEBEN]);
                                zeileTemp[HF_POSITION_ABGELIFERT] = ((BigDecimal) zeileTemp[HF_POSITION_ABGELIFERT])
                                        .add((BigDecimal) zeile[HF_POSITION_ABGELIFERT]);

                                // Neuen Preis berechnen

                                BigDecimal alterPreis = (BigDecimal) zeileTemp[HF_POSITION_PREIS];
                                BigDecimal alteOffen = (BigDecimal) zeileTemp[HF_POSITION_OFFEN];

                                BigDecimal neuerPreis = (BigDecimal) zeile[HF_POSITION_PREIS];
                                BigDecimal neueOffen = (BigDecimal) zeile[HF_POSITION_OFFEN];

                                BigDecimal wertNeu = alterPreis.multiply(alteOffen)
                                        .add(neuerPreis.multiply(neueOffen));

                                if (neueOffen.add(alteOffen).doubleValue() != 0) {
                                    zeileTemp[HF_POSITION_PREIS] = wertNeu.divide(neueOffen.add(alteOffen), 4,
                                            BigDecimal.ROUND_HALF_EVEN);
                                } else {
                                    zeileTemp[HF_POSITION_PREIS] = new BigDecimal(0);
                                }

                                zeileTemp[HF_POSITION_OFFEN] = neueOffen.add(alteOffen);

                                alDaten.set(k, zeileTemp);
                            }

                        }

                        if (bGefunden == false) {
                            alDaten.add(zeile);
                        }

                    }
                } else {

                    alDaten.add(zeile);
                }

                zeile = new Object[17];
                zeile[HF_LOSNUMMER] = item.getC_nr();

            }

        }
        mapParameter.put(LPReport.P_WAEHRUNG, theClientDto.getSMandantenwaehrung());
        mapParameter.put("P_VERDICHTET", new Boolean(bVerdichtet));

        if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_LOSNR) {
            // Sortierng nach Losnr
            data = new Object[alDaten.size()][17];
            data = (Object[][]) alDaten.toArray(data);

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL,
                    FertigungReportFac.REPORT_HALBFERTIGFABRIKATSINVENTUR, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);
        } else if (iSortierung == FertigungReportFac.HF_OPTION_SORTIERUNG_ARTIKELNR) {

            // Sortieren nach Identnr
            for (int k = alDaten.size() - 1; k > 0; --k) {
                for (int j = 0; j < k; ++j) {
                    Object[] a1 = (Object[]) alDaten.get(j);
                    Object[] a2 = (Object[]) alDaten.get(j + 1);

                    if (((String) a1[HF_POSITION_ARTIKELNUMMMER])
                            .compareTo((String) a2[HF_POSITION_ARTIKELNUMMMER]) > 0) {
                        alDaten.set(j, a2);
                        alDaten.set(j + 1, a1);
                    }
                }
            }
            data = new Object[alDaten.size()][17];
            data = (Object[][]) alDaten.toArray(data);

            initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL,
                    FertigungReportFac.REPORT_HALBFERTIGFABRIKATSINVENTUR_IDENT, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);

        }
        return getReportPrint();
    } catch (RemoteException t) {
        throwEJBExceptionLPRespectOld(t);
    } finally {
        closeSession(session);
    }
    return getReportPrint();
}

From source file:com.lp.server.finanz.ejbfac.FibuExportFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
private List<BuchungsjournalExportDatevBuchung> getBuchungen(Date von, Date bis, boolean mitAutoEB,
        boolean mitManEB, boolean mitAutoB, TheClientDto theClientDto) throws RemoteException, EJBExceptionLP {
    String mandant = theClientDto.getMandant();
    ParametermandantDto pMitlaufendesKonto = getParameterFac().getMandantparameter(mandant,
            ParameterFac.KATEGORIE_FINANZ, ParameterFac.PARAMETER_EXPORT_DATEV_MITLAUFENDES_KONTO);
    String durchlaufKonto = pMitlaufendesKonto.getCWert();
    ParametermandantDto pKontoklassenOhneUst = getParameterFac().getMandantparameter(mandant,
            ParameterFac.KATEGORIE_FINANZ, ParameterFac.PARAMETER_EXPORT_DATEV_KONTOKLASSEN_OHNE_BU_SCHLUESSEL);
    List<String> kontoklassenOhneUst = Arrays.asList(pKontoklassenOhneUst.getCWert().split(","));

    FinanzamtDto[] finanzaemter = getFinanzFac().finanzamtFindAll(theClientDto);
    List<Integer> mitlaufendeKonten = new ArrayList<Integer>();
    Map<Integer, Integer> mwstKonten = new HashMap<Integer, Integer>();
    for (FinanzamtDto amt : finanzaemter) {
        SteuerkategorieDto[] stkDtos = getFinanzServiceFac()
                .steuerkategorieFindByFinanzamtIId(amt.getPartnerIId(), theClientDto);
        for (SteuerkategorieDto stkat : stkDtos) {
            if (stkat.getKontoIIdForderungen() != null)
                mitlaufendeKonten.add(stkat.getKontoIIdForderungen());
            if (stkat.getKontoIIdVerbindlichkeiten() != null)
                mitlaufendeKonten.add(stkat.getKontoIIdVerbindlichkeiten());

            SteuerkategoriekontoDto[] stkks = getFinanzServiceFac().steuerkategoriekontoFindAll(stkat.getIId());
            for (SteuerkategoriekontoDto stkk : stkks) {
                if (mwstKonten.containsKey(stkk.getKontoIIdEk()))
                    mwstKonten.put(stkk.getKontoIIdEk(), null);
                else
                    mwstKonten.put(stkk.getKontoIIdEk(), stkk.getMwstsatzbezIId());

                if (mwstKonten.containsKey(stkk.getKontoIIdVk()))
                    mwstKonten.put(stkk.getKontoIIdVk(), null);
                else
                    mwstKonten.put(stkk.getKontoIIdVk(), stkk.getMwstsatzbezIId());

                if (mwstKonten.containsKey(stkk.getKontoIIdEinfuhrUst()))
                    mwstKonten.put(stkk.getKontoIIdEinfuhrUst(), null);
                else
                    mwstKonten.put(stkk.getKontoIIdEinfuhrUst(), stkk.getMwstsatzbezIId());
                //gibt es fuer ein Konto mehrere zugewiesene MwstSaetze, null in die Map schreiben
                //so weiss man, dass das Konto entweder nur einen MwstSatz haben kann oder aber
                //wenn vorhanden in der Map aber null, dann MwstSatz berechnen.
            }/*from   w ww.  java  2  s .  c  o m*/
        }
    }
    List<BuchungsjournalExportDatevBuchung> buchungen = new ArrayList<BuchungsjournalExportDatevBuchung>();
    Session session = FLRSessionFactory.getFactory().openSession();
    Criteria c = session.createCriteria(FLRFinanzBuchung.class);
    c.createAlias("flrkostenstelle", "ks");
    if (!mitAutoB)
        c.add(Restrictions.like("b_autombuchung", 0));
    if (!mitAutoEB)
        c.add(Restrictions.like("b_autombuchungeb", 0));
    if (!mitManEB)
        c.add(Restrictions.not(Restrictions.like("buchungsart_c_nr", FinanzFac.BUCHUNGSART_EROEFFNUNG)));
    c.add(Restrictions.ge("d_buchungsdatum", von)).add(Restrictions.le("d_buchungsdatum", bis))
            .add(Restrictions.like("ks.mandant_c_nr", mandant)).addOrder(Order.asc("d_buchungsdatum"))
            .addOrder(Order.asc("c_belegnummer"));
    Iterator<?> iter = c.list().iterator();
    while (iter.hasNext()) {
        FLRFinanzBuchung hvBuchung = (FLRFinanzBuchung) iter.next();
        @SuppressWarnings("unchecked")
        List<FLRFinanzBuchungDetail> haben = session.createCriteria(FLRFinanzBuchungDetail.class)
                .createAlias("flrbuchung", "b").add(Restrictions.eq("buchung_i_id", hvBuchung.getI_id()))
                .add(Restrictions.or(
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.HabenBuchung),
                                Restrictions.gt("n_betrag", BigDecimal.ZERO)),
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.SollBuchung),
                                Restrictions.lt("n_betrag", BigDecimal.ZERO))))
                .add(Restrictions.or(Restrictions.eq("b.buchungsart_c_nr", FinanzFac.BUCHUNGSART_EROEFFNUNG),
                        Restrictions.not(Restrictions.in("konto_i_id", mitlaufendeKonten))))
                .addOrder(Order.asc("i_id")).list();
        @SuppressWarnings("unchecked")
        List<FLRFinanzBuchungDetail> soll = session.createCriteria(FLRFinanzBuchungDetail.class)
                .createAlias("flrbuchung", "b").add(Restrictions.eq("buchung_i_id", hvBuchung.getI_id()))
                .add(Restrictions.or(
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.SollBuchung),
                                Restrictions.gt("n_betrag", BigDecimal.ZERO)),
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.HabenBuchung),
                                Restrictions.lt("n_betrag", BigDecimal.ZERO))))
                .add(Restrictions.or(Restrictions.eq("b.buchungsart_c_nr", FinanzFac.BUCHUNGSART_EROEFFNUNG),
                        Restrictions.not(Restrictions.in("konto_i_id", mitlaufendeKonten))))
                .addOrder(Order.asc("i_id")).list();

        String gegenkontoCNr;
        FLRFinanzKonto flrGegenkonto = null;
        List<FLRFinanzBuchungDetail> zuBuchen;
        String uid = null;
        boolean buSchluesselErlaubt = true;
        boolean buSchluesselGanzeBuchung = true;
        if (soll.size() == 1) {
            flrGegenkonto = soll.get(0).getFlrkonto();
            gegenkontoCNr = flrGegenkonto.getC_nr();
            uid = getUIDZuKonto(flrGegenkonto, theClientDto);
            zuBuchen = haben;
        } else if (haben.size() == 1) {
            gegenkontoCNr = haben.get(0).getFlrkonto().getC_nr();
            flrGegenkonto = soll.get(0).getFlrkonto();
            uid = getUIDZuKonto(flrGegenkonto, theClientDto);
            zuBuchen = soll;
        } else {
            zuBuchen = soll;
            zuBuchen.addAll(haben);
            gegenkontoCNr = durchlaufKonto;
        }
        if (flrGegenkonto != null
                && flrGegenkonto.getKontotyp_c_nr().equals(FinanzServiceFac.KONTOTYP_SACHKONTO)) {
            for (String klassen : kontoklassenOhneUst) {
                if (!klassen.isEmpty() && flrGegenkonto.getC_nr().startsWith(klassen)) {
                    buSchluesselGanzeBuchung = false;
                    break;
                }
            }
        }

        //         zuBuchen = getBuchungenKorrekteUst(zuBuchen, mwstKonten);

        for (int i = 0; i < zuBuchen.size(); i++) {
            FLRFinanzBuchungDetail b = zuBuchen.get(i);
            FLRFinanzKonto konto = b.getFlrkonto();
            buSchluesselErlaubt = true;
            if (konto.getKontotyp_c_nr().equals(FinanzServiceFac.KONTOTYP_SACHKONTO)) {
                for (String klassen : kontoklassenOhneUst) {
                    if (!klassen.isEmpty() && konto.getC_nr().startsWith(klassen)) {
                        buSchluesselErlaubt = false;
                        break;
                    }
                }
            }

            Integer fibuCode = 0;
            BigDecimal umsatz = null;
            if (mwstKonten.containsKey(b.getKonto_i_id())) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_KONTIERUNG_ZUGEORDNET,
                        "Fehler! keine Mwst-Buchung erwartet!",
                        (hvBuchung.getFlrfbbelegart() == null ? hvBuchung.getC_text()
                                : hvBuchung.getFlrfbbelegart().getC_nr()) + " " + hvBuchung.getC_belegnummer());
                //               System.out.println("Fehler! keine Mwst-Buchung erwartet! " + hvBuchung.getC_belegnummer() + ", id = " + hvBuchung.getI_id());
                //               break;
            } else {
                if (zuBuchen.size() > i + 1) {
                    FLRFinanzBuchungDetail mwstBuchung = zuBuchen.get(i + 1);
                    if (mwstKonten.containsKey(mwstBuchung.getKonto_i_id())) {
                        Integer mwstIId = mwstKonten.get(mwstBuchung.getKonto_i_id());
                        MwstsatzDto mwstDto;
                        if (mwstIId != null) {
                            mwstDto = getMandantFac().mwstsatzFindZuDatum(mwstIId,
                                    new Timestamp(hvBuchung.getD_buchungsdatum().getTime()));
                        } else {
                            mwstDto = getMandantFac().getMwstSatzVonBruttoBetragUndUst(mandant,
                                    new Timestamp(hvBuchung.getD_buchungsdatum().getTime()), b.getN_betrag(),
                                    mwstBuchung.getN_betrag());
                        }
                        fibuCode = mwstDto.getIFibumwstcode();
                        if (fibuCode == null) {
                            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FINANZ_EXPORT_KEIN_MWSTCODE, "",
                                    mwstDto.getMwstsatzbezDto().getCBezeichnung());
                        }
                        umsatz = b.getN_betrag().add(mwstBuchung.getN_betrag()).abs();
                        i++;
                    }
                }
            }
            BuchungsjournalExportDatevBuchung datevBuchung = new BuchungsjournalExportDatevBuchung();
            datevBuchung.setUmsatz(umsatz == null ? b.getN_betrag().abs() : umsatz);
            boolean negativ = b.getN_betrag().signum() < 0;
            datevBuchung.setSoll(negativ != b.getBuchungdetailart_c_nr().equals(BuchenFac.SollBuchung)); //XOR
            datevBuchung.setKonto(b.getFlrkonto().getC_nr());
            datevBuchung.setGegenkonto(gegenkontoCNr);
            if (hvBuchung.getT_storniert() != null) {
                fibuCode += 20;
            }
            if (buSchluesselErlaubt && buSchluesselGanzeBuchung)
                datevBuchung.setBuSchluessel(fibuCode == 0 ? "" : fibuCode.toString());
            datevBuchung.setBelegdatum(hvBuchung.getD_buchungsdatum());
            datevBuchung.setBeleg(hvBuchung.getC_belegnummer());
            datevBuchung.setBuchungstext(hvBuchung.getC_text());
            datevBuchung.setUid(uid == null ? getUIDZuKonto(b.getFlrkonto(), theClientDto) : uid);
            buchungen.add(datevBuchung);
        }
    }

    return buchungen;
}