Example usage for org.hibernate.criterion Restrictions or

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

Introduction

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

Prototype

public static LogicalExpression or(Criterion lhs, Criterion rhs) 

Source Link

Document

Return the disjuction of two expressions

Usage

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

License:Open Source License

/**
 * Alle offenen Bestellungen fuer einen bestimmten Mandanten drucken.
 * //from w  ww  . jav a 2  s .  c  om
 * @param krit
 *            die Filter- und Sortierkriterien
 * @param dStichtag
 *            Date
 * @param bSortierungNachLiefertermin
 *            Boolean
 * @param artikelklasseIId
 *            Integer
 * @param artikelgruppeIId
 *            Integer
 * @param artikelCNrVon
 *            String
 * @param artikelCNrBis
 *            String
 * @param projektCBezeichnung
 *            String
 * @param auftragIId
 *            Integer
 * @param theClientDto
 *            der aktuelle Benutzer
 * @throws EJBExceptionLP
 *             Ausnahme
 * @return JasperPrint der Druck
 */
@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printBestellungOffene(ReportJournalKriterienDto krit, Date dStichtag,
        Boolean bSortierungNachLiefertermin, Integer artikelklasseIId, Integer artikelgruppeIId,
        String artikelCNrVon, String artikelCNrBis, String projektCBezeichnung, Integer auftragIId,
        Integer iArt, boolean bNurAngelegte, boolean bNurOffeneMengenAnfuehren, Integer[] projekte,
        TheClientDto theClientDto) throws EJBExceptionLP {
    useCase = UC_OFFENE;
    int iAnzahlZeilen = 0;

    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = null;
    // vom Stichtag die Uhrzeit abschneiden
    dStichtag = Helper.cutDate(dStichtag);

    // die dem Report uebergeben
    HashMap<String, Object> parameter = new HashMap<String, Object>();
    parameter.put("P_STICHTAG", Helper.formatDatum(dStichtag, theClientDto.getLocUi()));
    dStichtag = Helper.addiereTageZuDatum(dStichtag, 1);

    session = factory.openSession();

    boolean darfEinkaufspreisSehen = getTheJudgeFac().hatRecht(RechteFac.RECHT_LP_DARF_PREISE_SEHEN_EINKAUF,
            theClientDto);
    boolean bProjektklammer = getMandantFac().darfAnwenderAufZusatzfunktionZugreifen(
            MandantFac.ZUSATZFUNKTION_PROJEKTKLAMMER, theClientDto.getMandant());
    // Hiberante Criteria fuer alle Tabellen ausgehend von meiner
    // Haupttabelle anlegen,
    // nach denen ich filtern und sortieren kann
    Criteria crit = session.createCriteria(FLRBestellung.class);

    // Einschraenkung auf den aktuellen Mandanten
    crit.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_MANDANT_C_NR, theClientDto.getMandant()));

    // Einschraenkung nach Status Offen, Erledigt
    Collection<String> cStati = new LinkedList<String>();
    cStati.add(BestellungFac.BESTELLSTATUS_ANGELEGT);
    if (bNurAngelegte == false) {
        cStati.add(BestellungFac.BESTELLSTATUS_OFFEN);
        cStati.add(BestellungFac.BESTELLSTATUS_BESTAETIGT);
        cStati.add(BestellungFac.BESTELLSTATUS_ERLEDIGT);
    }
    crit.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGSTATUS_C_NR, cStati));

    // Das Belegdatum muss vor dem Stichtag liegen
    crit.add(Restrictions.le(BestellungFac.FLR_BESTELLUNG_T_BELEGDATUM, dStichtag));

    /**
     * @todo MB->MB hier sollte auch das erledigt-datum ziehen, das gibts
     *       aber in der BS nicht :-(
     */

    crit.add(Restrictions.or(Restrictions.ge(BestellungFac.FLR_BESTELLUNG_T_MANUELLGELIEFERT, dStichtag),
            Restrictions.isNull(BestellungFac.FLR_BESTELLUNG_T_MANUELLGELIEFERT)));

    // Das Belegdatum muss vor dem Stichtag liegen
    crit.add(Restrictions.le(BestellungFac.FLR_BESTELLUNG_T_BELEGDATUM, dStichtag));
    // Filter nach Projektbezeichnung
    if (projektCBezeichnung != null) {
        crit.add(Restrictions.ilike(BestellungFac.FLR_BESTELLUNG_C_BEZPROJEKTBEZEICHNUNG,
                "%" + projektCBezeichnung + "%"));
    }

    // Projektklammer
    if (projekte != null && projekte.length > 0) {
        crit.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_PROJEKT_I_ID, projekte));

        String text = "";
        for (int i = 0; i < projekte.length; i++) {

            try {
                ProjektDto pDto = getProjektFac().projektFindByPrimaryKey(projekte[i]);

                text += pDto.getCNr() + ", ";
            } catch (RemoteException e) {
                throwEJBExceptionLPRespectOld(e);
            }

        }

        parameter.put("P_PROJEKTE", text);

    }

    // Filter nach Auftrag
    if (auftragIId != null) {
        crit.add(Restrictions.like(BestellungFac.FLR_BESTELLUNG_AUFTRAG_I_ID, auftragIId));
    }
    // Einschraenkung nach einer bestimmten Kostenstelle
    if (krit.kostenstelleIId != null) {
        crit.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_KOSTENSTELLE_I_ID, krit.kostenstelleIId));
    }

    // Einschraenkung nach einem bestimmten Lieferanten
    if (krit.lieferantIId != null) {
        crit.add(
                Restrictions.eq(BestellungFac.FLR_BESTELLUNG_LIEFERANT_I_ID_BESTELLADRESSE, krit.lieferantIId));
    }
    // Filter nach Bestellungsart
    Collection<String> cArt = null;
    if (iArt != null) {
        if (iArt == 1) {
            // Ohne Rahmenbestellungen
            cArt = new LinkedList<String>();
            cArt.add(BestellungFac.BESTELLUNGART_FREIE_BESTELLUNG_C_NR);
            cArt.add(BestellungFac.BESTELLUNGART_ABRUFBESTELLUNG_C_NR);
            cArt.add(BestellungFac.BESTELLUNGART_LEIHBESTELLUNG_C_NR);
            crit.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGART_C_NR, cArt));
        } else if (iArt == 2) {
            // Nur Rahmenbestellungen
            cArt = new LinkedList<String>();
            cArt.add(BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR);
            crit.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGART_C_NR, cArt));
        }
    }

    // Sortierung nach Kostenstelle ist immer die erste Sortierung
    if (krit.bSortiereNachKostenstelle) {
        crit.createCriteria(BestellungFac.FLR_BESTELLUNG_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
    }
    // Sortierung nach Kunde, eventuell innerhalb der Kostenstelle
    if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
        crit.createCriteria(BestellungFac.FLR_BESTELLUNG_FLRLIEFERANT).createCriteria(LieferantFac.FLR_PARTNER)
                .addOrder(Order.asc(PartnerFac.FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1));

    }
    // Sortierung nach Projekt, eventuell innerhalb der Kostenstelle
    else if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PROJEKT) {

        if (bProjektklammer == true) {

            crit.createAlias(BestellungFac.FLR_BESTELLUNG_FLRPROJEKT, "p");

            crit.addOrder(Order.asc("p.c_nr"));
        } else {
            crit.addOrder(Order.asc(BestellungFac.FLR_BESTELLUNG_C_BEZPROJEKTBEZEICHNUNG));
        }

    }
    // Sortierung nach Bestellungart, eventuell innerhalb der
    // Kostenstelle
    // else if (krit.iSortierung ==
    // ReportJournalKriterienDto.KRIT_SORT_NACH_ART) {
    // crit.addOrder(Order
    // .asc(BestellungFac.FLR_BESTELLUNG_BESTELLUNGART_C_NR));
    // }

    // Sortierung nach Liefertermin (optional)
    if (bSortierungNachLiefertermin != null && bSortierungNachLiefertermin.booleanValue()) {
        crit.addOrder(Order.asc(BestellungFac.FLR_BESTELLUNG_T_LIEFERTERMIN));
    }

    // es wird in jedem Fall nach der Belegnummer sortiert
    crit.addOrder(Order.asc("c_nr"));

    List<?> list = crit.list();
    Iterator<?> it = list.iterator();

    ArrayList<FLRBestellung> bestellung = new ArrayList<FLRBestellung>();
    while (it.hasNext()) {
        FLRBestellung flrbestellung = (FLRBestellung) it.next();
        session = factory.openSession();
        Criteria crit1 = session.createCriteria(FLRBestellposition.class);
        Criteria crit1Bestellung = crit1.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRBESTELLUNG);
        // nur Positionen der aktuellen Bestellung.
        crit1Bestellung.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_I_ID, flrbestellung.getI_id()));
        // keine erledigten Positionen.
        crit1.add(Restrictions.ne(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONSTATUS_C_NR,
                BestellpositionFac.BESTELLPOSITIONSTATUS_ERLEDIGT));
        // keine geliferten Positionen.
        crit1.add(Restrictions.ne(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONSTATUS_C_NR,
                BestellpositionFac.BESTELLPOSITIONSTATUS_GELIEFERT));
        // Der Liefertermin muss vor dem Stichtag liegen
        crit1.add(Restrictions.or(Restrictions.and(
                // Wenn der AB-Termin
                // eingegeben ist, zieht
                // der
                Restrictions.isNotNull(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN),
                Restrictions
                        .le(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN, dStichtag)),
                Restrictions.and(
                        // sonst der
                        // uebersteuerte
                        // Liefertermin
                        Restrictions
                                .isNull(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN),
                        Restrictions.le(BestellpositionFac.FLR_BESTELLPOSITION_T_UEBERSTEUERTERLIEFERTERMIN,
                                dStichtag))));

        if (artikelklasseIId != null || artikelgruppeIId != null || artikelCNrVon != null
                || artikelCNrBis != null) {
            // Wenn nach Artikelklassen/Gruppen gefiltert wird, dann
            // kommen nur Ident-Positionen
            crit1.add(Restrictions.eq(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONART_C_NR,
                    BestellpositionFac.BESTELLPOSITIONART_IDENT));
            Criteria critArtikel = crit1.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRARTIKEL);
            if (artikelklasseIId != null) {
                critArtikel.createCriteria(ArtikelFac.FLR_ARTIKEL_FLRARTIKELKLASSE)
                        .add(Restrictions.eq("i_id", artikelklasseIId));
            }
            if (artikelgruppeIId != null) {
                critArtikel.createCriteria(ArtikelFac.FLR_ARTIKEL_FLRARTIKELGRUPPE)
                        .add(Restrictions.eq("i_id", artikelgruppeIId));
            }
            if (artikelCNrVon != null) {
                critArtikel.add(Restrictions.ge(ArtikelFac.FLR_ARTIKEL_C_NR, artikelCNrVon));
            }
            if (artikelCNrBis != null) {
                critArtikel.add(Restrictions.le(ArtikelFac.FLR_ARTIKEL_C_NR, artikelCNrBis));
            }
        }
        List<?> resultList = crit1.list();
        // Wenn die Bestellung anzuzeigende Positionen enthaelt, dann in
        // die Liste aufnehmen.
        if (resultList.size() > 0) {
            bestellung.add(flrbestellung);
            iAnzahlZeilen++;
        }
        for (Iterator<?> iter = resultList.iterator(); iter.hasNext();) {
            FLRBestellposition item = (FLRBestellposition) iter.next();
            if (item.getN_menge() != null) {
                bestellung.add(null);
                iAnzahlZeilen++;
            }
        }
    }

    data = new Object[iAnzahlZeilen][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ANZAHL_SPALTEN];

    int i = 0;
    while (i < iAnzahlZeilen) {
        FLRBestellung flrbestellung = null;
        if (bestellung.get(i) != null) {
            flrbestellung = (FLRBestellung) bestellung.get(i);
            data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGCNR] = flrbestellung.getC_nr();
            data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGARTCNR] = flrbestellung
                    .getBestellungart_c_nr();

            if (bProjektklammer && flrbestellung.getProjekt_i_id() != null) {
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_PROJEKT] = flrbestellung.getFlrprojekt()
                        .getC_nr();
            } else {
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_PROJEKT] = flrbestellung
                        .getC_bezprojektbezeichnung();
            }

            data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGLIEFERANT] = flrbestellung
                    .getFlrlieferant().getFlrpartner().getC_name1nachnamefirmazeile1();

            // PJ 14752

            String sortierstring = "";
            if (krit.bSortiereNachKostenstelle == true) {
                sortierstring = Helper.fitString2Length(flrbestellung.getFlrkostenstelle().getC_nr(), 80, ' ');
            }
            if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_IDENT) {
                sortierstring += Helper.fitString2Length(
                        flrbestellung.getFlrlieferant().getFlrpartner().getC_name1nachnamefirmazeile1(), 80,
                        ' ') + Helper.fitString2Length("", 80, ' ');
            }
            if (bSortierungNachLiefertermin == true) {
                sortierstring += Helper.fitString2Length(flrbestellung.getT_liefertermin() + "", 15, ' ');
            }
            data[i][REPORT_BESTELLUNG_OFFENE_SORTIERKRITERIUM] = sortierstring;

            data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGDATUM] = Helper
                    .formatDatum(flrbestellung.getT_belegdatum(), theClientDto.getLocUi());
            if (flrbestellung.getFlrkostenstelle() != null) {
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_KOSTENSTELLECNR] = flrbestellung
                        .getFlrkostenstelle().getC_nr();
            }
            i++;
        }
        session = factory.openSession();
        Criteria crit1 = session.createCriteria(FLRBestellpositionReport.class);
        // Keine erledigten Positionen.
        crit1.add(Restrictions.ne(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONSTATUS_C_NR,
                BestellpositionFac.BESTELLPOSITIONSTATUS_ERLEDIGT));
        crit1.add(Restrictions.ne(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONSTATUS_C_NR,
                BestellpositionFac.BESTELLPOSITIONSTATUS_GELIEFERT));

        // Der Liefertermin muss vor dem Stichtag liegen
        crit1.add(Restrictions.or(Restrictions.and(
                // Wenn der AB-Termin
                // eingegeben ist, zieht
                // der
                Restrictions.isNotNull(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN),
                Restrictions
                        .le(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN, dStichtag)),
                Restrictions.and(
                        // sonst der
                        // uebersteuerte
                        // Liefertermin
                        Restrictions
                                .isNull(BestellpositionFac.FLR_BESTELLPOSITION_T_AUFTRAGSBESTAETIGUNGSTERMIN),
                        Restrictions.le(BestellpositionFac.FLR_BESTELLPOSITION_T_UEBERSTEUERTERLIEFERTERMIN,
                                dStichtag))));

        // Nur Positionen der aktuellen Bestellung.
        Criteria crit1Bestellung = crit1.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRBESTELLUNG);
        crit1Bestellung.add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_I_ID, flrbestellung.getI_id()));
        if (artikelklasseIId != null || artikelgruppeIId != null || artikelCNrVon != null
                || artikelCNrBis != null) {
            // Wenn nach Artikelklassen/Gruppen gefiltert wird, dann
            // kommen nur Ident-Positionen
            crit1.add(Restrictions.eq(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONART_C_NR,
                    BestellpositionFac.BESTELLPOSITIONART_IDENT));
            Criteria critArtikel = crit1.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRARTIKEL);
            if (artikelklasseIId != null) {
                critArtikel.createCriteria(ArtikelFac.FLR_ARTIKEL_FLRARTIKELKLASSE)
                        .add(Restrictions.eq("i_id", artikelklasseIId));
            }
            if (artikelgruppeIId != null) {
                critArtikel.createCriteria(ArtikelFac.FLR_ARTIKEL_FLRARTIKELGRUPPE)
                        .add(Restrictions.eq("i_id", artikelgruppeIId));
            }
            if (artikelCNrVon != null) {
                critArtikel.add(Restrictions.ge(ArtikelFac.FLR_ARTIKEL_C_NR, artikelCNrVon));
            }
            if (artikelCNrBis != null) {
                critArtikel.add(Restrictions.le(ArtikelFac.FLR_ARTIKEL_C_NR, artikelCNrBis));
            }
        }

        List<?> resultList = crit1.list();
        for (Iterator<?> iter = resultList.iterator(); iter.hasNext();) {
            FLRBestellpositionReport item = (FLRBestellpositionReport) iter.next();
            if (item.getN_menge() != null) {
                String artikelCNr = null;
                /**
                 * @todo das ist nicht sehr sauber ...
                 */
                if (item.getFlrartikel().getC_nr().startsWith("~")) {
                    artikelCNr = BestellungReportFac.REPORT_VORKALKULATION_ZEICHEN_FUER_HANDEINGABE;
                } else {
                    artikelCNr = item.getFlrartikel().getC_nr();
                }
                Criteria critWep = session.createCriteria(FLRWareneingangspositionen.class);
                critWep.createCriteria("flrbestellposition").add(Restrictions.eq("i_id", item.getI_id()));
                List<?> wepResultList = critWep.list();
                Iterator<?> wepResultListIterator = wepResultList.iterator();

                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGCNR] = flrbestellung.getC_nr();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGARTCNR] = flrbestellung
                        .getBestellungart_c_nr();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_PROJEKT] = flrbestellung
                        .getC_bezprojektbezeichnung();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGLIEFERANT] = flrbestellung
                        .getFlrlieferant().getFlrpartner().getC_name1nachnamefirmazeile1();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELCNR] = artikelCNr;

                // SP903
                if (item.getPosition_i_id_artikelset() != null) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_SETARTIKEL_TYP] = ArtikelFac.SETARTIKEL_TYP_POSITION;
                } else {

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

                    sessionSet = factory.openSession();
                    Criteria critSet = sessionSet.createCriteria(FLRBestellpositionReport.class);
                    critSet.add(Restrictions.eq("position_i_id_artikelset", item.getI_id()));

                    int iZeilen = critSet.list().size();

                    if (iZeilen > 0) {
                        data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_SETARTIKEL_TYP] = ArtikelFac.SETARTIKEL_TYP_KOPF;
                    }
                    sessionSet.close();

                }

                // PJ 14752

                String sortierstring = "";
                if (krit.bSortiereNachKostenstelle == true) {
                    sortierstring = Helper.fitString2Length(flrbestellung.getFlrkostenstelle().getC_nr(), 80,
                            ' ');
                }

                if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_IDENT) {
                    sortierstring += Helper
                            .fitString2Length(flrbestellung.getFlrlieferant().getFlrpartner()
                                    .getC_name1nachnamefirmazeile1(), 80, ' ')
                            + Helper.fitString2Length(artikelCNr, 80, ' ');
                }

                if (bSortierungNachLiefertermin == true) {
                    sortierstring += Helper.fitString2Length(flrbestellung.getT_liefertermin() + "", 15, ' ');
                }

                data[i][REPORT_BESTELLUNG_OFFENE_SORTIERKRITERIUM] = sortierstring;

                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELMENGE] = item.getN_menge();
                BigDecimal bdOffeneLiefermenge = new BigDecimal(0);
                if (BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR
                        .equals(flrbestellung.getBestellungart_c_nr())) {
                    try {
                        BestellpositionDto[] abrufPos = getBestellpositionFac()
                                .bestellpositionFindByBestellpositionIIdRahmenposition(item.getI_id(),
                                        theClientDto);
                        for (int y = 0; y < abrufPos.length; y++) {
                            bdOffeneLiefermenge = bdOffeneLiefermenge
                                    .add(getBestellpositionFac().berechneOffeneMenge(abrufPos[y]));
                        }
                    } catch (RemoteException e) {
                    }
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_OFFENELIEFERUNGEN] = bdOffeneLiefermenge;

                } else {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_OFFENELIEFERUNGEN] = null;
                }
                StringBuffer sbArtikelInfo = new StringBuffer();
                if (item.getC_bezeichnung() != null) {
                    sbArtikelInfo.append(item.getC_bezeichnung());
                } else {
                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKey(item.getFlrartikel().getI_id(), theClientDto);

                    if (artikelDto.getArtikelsprDto() != null) {
                        if (artikelDto.getArtikelsprDto().getCBez() != null) {
                            sbArtikelInfo.append(artikelDto.getArtikelsprDto().getCBez());
                        }
                    }
                }
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELBEZ] = sbArtikelInfo.toString();

                // der Preis wird in Mandantenwaehrung angezeigt, es
                // gilt der hinterlegte Wechselkurs
                BigDecimal bdPreisinmandantenwaehrung = item.getN_nettogesamtpreis();
                BigDecimal wechselkursmandantwaehrungzuauftragswaehrung = null;
                if (!flrbestellung.getWaehrung_c_nr_bestellwaehrung()
                        .equals(theClientDto.getSMandantenwaehrung())) {
                    wechselkursmandantwaehrungzuauftragswaehrung = new BigDecimal(
                            flrbestellung.getF_wechselkursmandantwaehrungbestellungswaehrung().doubleValue());
                    bdPreisinmandantenwaehrung = getBetragMalWechselkurs(bdPreisinmandantenwaehrung,
                            Helper.getKehrwert(wechselkursmandantwaehrungzuauftragswaehrung));
                }
                if (darfEinkaufspreisSehen) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELPREIS] = bdPreisinmandantenwaehrung;
                } else {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELPREIS] = null;
                }

                if (item.getEinheit_c_nr() != null) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELEINHEIT] = item
                            .getEinheit_c_nr().trim();
                }
                if (item.getT_auftragsbestaetigungstermin() != null) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ABTERMIN] = Helper
                            .formatDatum(item.getT_auftragsbestaetigungstermin(), theClientDto.getLocUi());
                }

                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ABNUMMER] = item.getC_abnummer();
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ABKOMMENTAR] = item.getC_abkommentar();

                if (item.getT_uebersteuerterliefertermin() != null) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGLIEFERTERMIN] = Helper
                            .formatDatum(item.getT_uebersteuerterliefertermin(), theClientDto.getLocUi());
                } else {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_BESTELLUNGLIEFERTERMIN] = Helper
                            .formatDatum(item.getFlrbestellung().getT_liefertermin(), theClientDto.getLocUi());
                }
                BigDecimal noffeneMenge = item.getN_menge();
                BigDecimal ngeliferteMenge = new BigDecimal(0);
                if (flrbestellung.getBestellungart_c_nr()
                        .equals(BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR)) {
                    noffeneMenge = item.getN_offenemenge();
                    while (wepResultListIterator.hasNext()) {
                        FLRWareneingangspositionen waren = (FLRWareneingangspositionen) wepResultListIterator
                                .next();
                        ngeliferteMenge = ngeliferteMenge.add(waren.getN_geliefertemenge());
                    }

                } else {
                    while (wepResultListIterator.hasNext()) {
                        FLRWareneingangspositionen waren = (FLRWareneingangspositionen) wepResultListIterator
                                .next();
                        noffeneMenge = noffeneMenge.subtract(waren.getN_geliefertemenge());
                    }
                }
                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELGELIFERTEMENGE] = ngeliferteMenge;

                data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELOFFENEMENGE] = noffeneMenge;
                if (darfEinkaufspreisSehen) {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELOFFENEWERT] = noffeneMenge
                            .multiply(bdPreisinmandantenwaehrung);
                } else {
                    data[i][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELOFFENEWERT] = null;
                }
                i++;
            }
        }
    }

    closeSession(session);

    // PJ 15254
    if (bNurOffeneMengenAnfuehren) {
        ArrayList alTemp = new ArrayList();

        for (int k = 0; k < data.length; k++) {
            BigDecimal bdOffeneMenge = (BigDecimal) data[k][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ARTIKELOFFENEMENGE];
            if (bdOffeneMenge != null && bdOffeneMenge.doubleValue() > 0) {
                alTemp.add(data[k]);
            }
        }
        Object[][] returnArray = new Object[alTemp
                .size()][BestellungReportFac.REPORT_BESTELLUNG_OFFENE_ANZAHL_SPALTEN];
        data = (Object[][]) alTemp.toArray(returnArray);
    }

    // PJ 14752 Manuell nachsortieren (in Besprechung mit AD+WH besprochen)

    if (krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_IDENT) {

        for (int k = data.length - 1; k > 0; --k) {
            for (int j = 0; j < k; ++j) {
                Object[] o = data[j];
                Object[] o1 = data[j + 1];

                String s = (String) o[REPORT_BESTELLUNG_OFFENE_SORTIERKRITERIUM];
                String s1 = (String) o1[REPORT_BESTELLUNG_OFFENE_SORTIERKRITERIUM];

                if (s.toUpperCase().compareTo(s1.toUpperCase()) > 0) {
                    data[j] = o1;
                    data[j + 1] = o;
                }
            }
        }

    }

    parameter.put(LPReport.P_SORTIERUNG, buildSortierungBestellungOffene(krit, theClientDto));
    parameter.put(LPReport.P_FILTER, buildFilterBestellungOffene(krit, artikelklasseIId, artikelgruppeIId,
            artikelCNrVon, artikelCNrBis, projektCBezeichnung, theClientDto));

    parameter.put(LPReport.P_SORTIERENACHLIEFERANT,
            new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER));
    parameter.put("P_SORTIERENACHBESTELLUNGART",
            new Boolean(krit.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_ART));
    parameter.put("P_TITLE",
            getTextRespectUISpr("bes.print.offene", theClientDto.getMandant(), theClientDto.getLocUi()));
    parameter.put(P_MANDANTWAEHRUNG, theClientDto.getSMandantenwaehrung());

    initJRDS(parameter, BestellungReportFac.REPORT_MODUL, BestellungReportFac.REPORT_BESTELLUNG_JOURNAL_OFFENE,
            theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
    return getReportPrint();
}

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

License:Open Source License

/**
 * erstellt Liefermahnungen, ABMahnungen oder beides ruft dazu die Methoden
 * echteLiefermahnungen() und (oder) echteABMahnungen() auf
 * ------------------/*ww w  .ja  va  2  s  .c  om*/
 * ----------------------------------------------------------
 * 
 * @param echteLiefermahnung
 *            boolean
 * @param echteABMahnungen
 *            boolean
 * @param theClientDto
 *            String
 * @throws EJBExceptionLP
 * @return Integer
 *         ----------------------------------------------------------
 *         -----------------
 */
@TransactionAttribute(TransactionAttributeType.NEVER)
private Integer createMahnungen(boolean echteLiefermahnung, boolean echteABMahnungen, boolean liefererinnerung,
        TheClientDto theClientDto) throws EJBExceptionLP {

    Session session = null;
    try {
        // Mahnstufen des Mandanten holen
        BSMahnstufeDto bsmahnstufeDto[] = this.bsmahnstufeFindByMandantCNr(theClientDto.getMandant(),
                theClientDto);
        if (bsmahnstufeDto == null || bsmahnstufeDto.length == 0) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FINANZ_KEINE_MAHNSTUFEN_EINGETRAGEN, "");
        }

        // mahnlaufIId generieren wird fuer Liefermahnung und ABMahnung
        // gebraucht
        Integer bsmahnlaufIId = null;
        BSMahnlaufDto bsmahnlaufDto = null;
        bsmahnlaufIId = context.getBusinessObject(BSMahnwesenFac.class).createBSMahnlauf(bsmahnlaufDto,
                theClientDto);
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria crit = session.createCriteria(FLRBestellpositionReport.class);

        // folgende Positionsarten werden ignoriert.
        Collection<String> cPositionsarten = new LinkedList<String>();
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_BETRIFFT);
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_SEITENUMBRUCH);
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_LEERZEILE);
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_TEXTBAUSTEIN);
        cPositionsarten.add(BestellpositionFac.BESTELLPOSITIONART_TEXTEINGABE);
        crit.add(Restrictions.not(Restrictions
                .in(BestellpositionFac.FLR_BESTELLPOSITION_BESTELLPOSITIONART_C_NR, cPositionsarten)));

        // PJ 16536
        String queryString = "SELECT artgru_i_id FROM FLRMahngruppe m"
                + " WHERE m.flrartikelgruppe.mandant_c_nr ='" + theClientDto.getMandant() + "'";

        Session session2 = FLRSessionFactory.getFactory().openSession();
        org.hibernate.Query query = session2.createQuery(queryString);
        List<?> results = query.list();
        Iterator<?> resultListIterator = results.iterator();

        Integer[] ids = new Integer[results.size()];
        int row = 0;
        while (resultListIterator.hasNext()) {
            Integer artgruIId = (Integer) resultListIterator.next();
            ids[row] = artgruIId;
            row++;
        }
        session2.close();
        if (ids.length > 0) {
            crit.createAlias("flrartikel", "a");
            crit.createAlias("a.flrartikelgruppe", "ag");

            crit.add(Restrictions.in("ag.i_id", ids));
        }

        Criteria critBestellung = crit.createCriteria(BestellpositionFac.FLR_BESTELLPOSITION_FLRBESTELLUNG);
        // nach mandanten filtern
        critBestellung
                .add(Restrictions.eq(BestellungFac.FLR_BESTELLUNG_MANDANT_C_NR, theClientDto.getMandant()));
        // PJ 15165
        critBestellung.add(Restrictions.or(Restrictions.isNull(BestellungFac.FLR_BESTELLUNG_T_MAHNSPERREBIS),
                Restrictions.lt(BestellungFac.FLR_BESTELLUNG_T_MAHNSPERREBIS,
                        Helper.cutTimestamp(new Timestamp(System.currentTimeMillis())))));

        // nach Stati filtern
        Collection<String> cStati = new LinkedList<String>();
        cStati.add(BestellungFac.BESTELLSTATUS_OFFEN);
        cStati.add(BestellungFac.BESTELLSTATUS_BESTAETIGT);
        // SK added BESTELLSTATUS_TEILERLEDIGT
        cStati.add(BestellungFac.BESTELLSTATUS_TEILERLEDIGT);
        critBestellung.add(Restrictions.in(BestellungFac.FLR_BESTELLUNG_BESTELLUNGSTATUS_C_NR, cStati));
        List<?> list = crit.list();

        for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
            FLRBestellpositionReport flrbespos = (FLRBestellpositionReport) iter.next();
            /**
             * nur Liefermahnungen deren Status bestaetigt ist oder deren
             * Liefertermin vor heute ist
             */
            if (echteLiefermahnung == true && !(BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR
                    .equals(flrbespos.getFlrbestellung().getBestellungart_c_nr()))) {
                BSMahnungDto[] bsmahnungdto = getBSMahnwesenFac()
                        .bsmahnungFindByBestellpositionIIdOhneExc(flrbespos.getI_id(), theClientDto);
                if (bsmahnungdto.length > 0) {

                    Integer latest = 0;
                    for (int y = 0; y < bsmahnungdto.length; y++) {
                        if (bsmahnungdto[y].getMahnstufeIId() > latest) {
                            latest = bsmahnungdto[y].getMahnstufeIId();
                        }
                    }
                    for (int i = 0; i < bsmahnstufeDto.length; i++) {
                        if (latest.equals(bsmahnstufeDto[i].getIId())) {
                            echteLiefermahnungen(flrbespos, bsmahnlaufIId, bsmahnstufeDto[i], theClientDto);
                        }
                    }
                } else {
                    echteLiefermahnungen(flrbespos, bsmahnlaufIId, null, theClientDto);
                }
            }

            // lt. WH
            boolean bEchteLiefermahnungVorhanden = false;
            BSMahnungDto[] bsmahnungdto = getBSMahnwesenFac()
                    .bsmahnungFindByBestellpositionIIdOhneExc(flrbespos.getI_id(), theClientDto);
            if (bsmahnungdto.length > 0) {
                for (int y = 0; y < bsmahnungdto.length; y++) {
                    if (bsmahnungdto[y].getMahnstufeIId() > 0) {
                        bEchteLiefermahnungVorhanden = true;
                    }
                }
            }

            if (bEchteLiefermahnungVorhanden == false) {

                /**
                 * nur ABMahnungen deren Status offen ist ausser der
                 * Liefertermin ist vor heute dann ist es eine Liefermahnung
                 */
                if (echteABMahnungen == true) {
                    // hier wird mahnstufe 0 uebergeben
                    for (int i = 0; i < bsmahnstufeDto.length; i++) {
                        if (bsmahnstufeDto[i].getIId().equals(new Integer(BSMahnwesenFac.MAHNSTUFE_0))) {
                            echteABMahnungen(flrbespos, bsmahnstufeDto[i], bsmahnlaufIId, theClientDto);
                        }
                    }
                }

                // lt. WH
                boolean bABLiefermahnungVorhanden = false;
                bsmahnungdto = getBSMahnwesenFac().bsmahnungFindByBestellpositionIIdOhneExc(flrbespos.getI_id(),
                        theClientDto);
                if (bsmahnungdto.length > 0) {
                    for (int y = 0; y < bsmahnungdto.length; y++) {
                        if (bsmahnungdto[y].getMahnstufeIId() == 0) {
                            bABLiefermahnungVorhanden = true;
                        }
                    }
                }

                if (bABLiefermahnungVorhanden == false) {

                    // lt. WH Liefererinnerung ist wie echte
                    // Liefermahnung,
                    // jedoch
                    // nur mit Mahnstufe -1
                    if (liefererinnerung == true && !(BestellungFac.BESTELLUNGART_RAHMENBESTELLUNG_C_NR
                            .equals(flrbespos.getFlrbestellung().getBestellungart_c_nr()))) {

                        if (flrbespos.getT_lieferterminbestaetigt() == null) {

                            // hier wird mahnstufe -1 uebergeben
                            for (int i = 0; i < bsmahnstufeDto.length; i++) {
                                if (bsmahnstufeDto[i].getIId()
                                        .equals(new Integer(BSMahnwesenFac.MAHNSTUFE_MINUS1))) {

                                    liefererinnerungen(flrbespos, bsmahnlaufIId, bsmahnstufeDto[i],
                                            theClientDto);

                                }
                            }
                        }
                    }
                }
            }

        }
        return bsmahnlaufIId;
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
        return null;
    } finally {
        closeSession(session);
    }
}

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;//  ww w.  j  ava  2s.co  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.FertigungFacBean.java

License:Open Source License

public LossollarbeitsplanDto[] getAlleOffenenZeiternFuerStueckrueckmeldung(Integer personalIId,
        TheClientDto theClientDto) {//from   w w  w. j a v a  2  s.  co m

    ArrayList<LossollarbeitsplanDto> alDaten = new ArrayList<LossollarbeitsplanDto>();
    HashMap ids = new HashMap();
    try {

        Integer taetigkeitIId_Kommt = getZeiterfassungFac()
                .taetigkeitFindByCNr(ZeiterfassungFac.TAETIGKEIT_KOMMT, theClientDto).getIId();
        Integer taetigkeitIId_Geht = getZeiterfassungFac()
                .taetigkeitFindByCNr(ZeiterfassungFac.TAETIGKEIT_GEHT, theClientDto).getIId();

        Session session = FLRSessionFactory.getFactory().openSession();
        org.hibernate.Criteria liste = session.createCriteria(FLRZeitdaten.class);
        liste.add(Expression.eq(ZeiterfassungFac.FLR_ZEITDATEN_PERSONAL_I_ID, personalIId));

        liste.add(Restrictions.or(
                Expression.eq(ZeiterfassungFac.FLR_ZEITDATEN_TAETIGKEIT_I_ID, taetigkeitIId_Kommt),
                Expression.eq(ZeiterfassungFac.FLR_ZEITDATEN_TAETIGKEIT_I_ID, taetigkeitIId_Geht)));
        liste.add(Expression.lt(ZeiterfassungFac.FLR_ZEITDATEN_T_ZEIT,
                new Timestamp(System.currentTimeMillis())));

        liste.add(
                Expression.eq(ZeiterfassungFac.FLR_ZEITDATEN_B_AUTOMATIKBUCHUNG, Helper.boolean2Short(false)));

        liste.addOrder(Order.desc(ZeiterfassungFac.FLR_ZEITDATEN_T_ZEIT));
        liste.setMaxResults(1);
        List<?> letztesKommt = liste.list();

        Iterator it = letztesKommt.iterator();

        Timestamp tVon = Helper.cutTimestamp(new Timestamp(System.currentTimeMillis()));

        if (it.hasNext()) {
            tVon = new Timestamp(((FLRZeitdaten) it.next()).getT_zeit().getTime());
        }

        boolean bTheoretischeIstZeit = false;

        try {
            ParametermandantDto parameterIstZeit = (ParametermandantDto) getParameterFac().getMandantparameter(
                    theClientDto.getMandant(), ParameterFac.KATEGORIE_PERSONAL,
                    ParameterFac.PARAMETER_THEORETISCHE_IST_ZEIT_RECHNUNG);

            bTheoretischeIstZeit = ((Boolean) parameterIstZeit.getCWertAsObject());

        } catch (RemoteException ex5) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex5);
        }

        ZeitdatenDto[] dtos = getZeiterfassungFac().zeitdatenFindZeitdatenEinesTagesUndEinerPerson(personalIId,
                tVon, new Timestamp(System.currentTimeMillis()));

        boolean bRuestenSchonVorhanden = false;

        for (int i = dtos.length - 1; i >= 0; i--) {
            if (dtos[i].getCBelegartnr() != null && dtos[i].getIBelegartid() != null) {

                if (dtos[i].getCBelegartnr().equals(LocaleFac.BELEGART_LOS)
                        && dtos[i].getIBelegartpositionid() != null) {

                    try {
                        Lossollarbeitsplan lossollarbeitsplan = em.find(Lossollarbeitsplan.class,
                                dtos[i].getIBelegartpositionid());
                        if (lossollarbeitsplan != null) {
                            if (!Helper.short2boolean(lossollarbeitsplan.getBNurmaschinenzeit())
                                    && !Helper.short2boolean(lossollarbeitsplan.getBFertig())) {
                                LossollarbeitsplanDto sollDto = assembleLossollarbeitsplanDto(
                                        lossollarbeitsplan);

                                // PJ 16233
                                if (bTheoretischeIstZeit) {
                                    if (!ids.containsKey(sollDto.getIId())) {
                                        // PJ 16035 Ruesten nur das letzte
                                        if (sollDto.getAgartCNr() == null) {
                                            if (bRuestenSchonVorhanden == false) {
                                                bRuestenSchonVorhanden = true;
                                                alDaten.add(sollDto);
                                                ids.put(sollDto.getIId(), sollDto.getIId());
                                            }
                                        } else {
                                            alDaten.add(sollDto);
                                            ids.put(sollDto.getIId(), sollDto.getIId());
                                        }

                                    }
                                } else {
                                    alDaten.add(sollDto);
                                }
                            }
                        }

                    } catch (NoResultException fe) {
                        // keiner da
                    }
                }
            }
        }

        // nun nach Losnr und AG sortieren
        // Nach Fertigungsgruppe sortieren
        for (int k = alDaten.size() - 1; k > 0; --k) {
            for (int j = 0; j < k; ++j) {
                LossollarbeitsplanDto a1 = (LossollarbeitsplanDto) alDaten.get(j);
                LossollarbeitsplanDto a2 = (LossollarbeitsplanDto) alDaten.get(j + 1);

                LosDto l1 = losFindByPrimaryKey(a1.getLosIId());
                LosDto l2 = losFindByPrimaryKey(a2.getLosIId());

                String s1 = l1.getCNr();

                if (a1.getIUnterarbeitsgang() != null) {
                    s1 += Helper.fitString2LengthAlignRight(a1.getIUnterarbeitsgang() + "", 10, ' ');
                } else {
                    s1 += Helper.fitString2LengthAlignRight("", 10, ' ');
                }
                s1 += Helper.fitString2LengthAlignRight(a1.getIArbeitsgangnummer() + "", 10, ' ');

                String s2 = l2.getCNr();
                if (a2.getIUnterarbeitsgang() != null) {
                    s2 += Helper.fitString2LengthAlignRight(a2.getIUnterarbeitsgang() + "", 10, ' ');
                } else {
                    s2 += Helper.fitString2LengthAlignRight("", 10, ' ');
                }
                s2 += Helper.fitString2LengthAlignRight(a2.getIArbeitsgangnummer() + "", 10, ' ');

                if (s1.compareTo(s2) > 0) {
                    alDaten.set(j, a2);
                    alDaten.set(j + 1, a1);
                }
            }

        }

    } catch (RemoteException e) {
        throwEJBExceptionLPRespectOld(e);
    }

    LossollarbeitsplanDto[] returnArray = new LossollarbeitsplanDto[alDaten.size()];
    return (LossollarbeitsplanDto[]) alDaten.toArray(returnArray);
}

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   www .ja  va  2  s  .  c  o  m
    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.fertigung.ejbfac.FertigungReportFacBean.java

License:Open Source License

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printLosstatistik(java.sql.Timestamp tVon, java.sql.Timestamp tBis, Integer losIId,
        Integer stuecklisteIId, Integer auftragIId, boolean bArbeitsplanSortiertNachAG, boolean bVerdichtet,
        java.sql.Timestamp tStichtag, TheClientDto theClientDto) {

    this.useCase = UC_LOSSTATISTIK;
    this.index = -1;
    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = factory.openSession();

    PersonalDto[] personalDtos = null;//from   w ww .j  a  va 2 s  . c o m
    MaschineDto[] maschineDtos = null;
    try {
        personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(), true);
        maschineDtos = getZeiterfassungFac().maschineFindByMandantCNr(theClientDto.getMandant());
    } catch (RemoteException ex1) {
        throwEJBExceptionLPRespectOld(ex1);
    }

    Map<String, Object> mapParameter = new TreeMap<String, Object>();

    Criteria c = session.createCriteria(FLRLosReport.class);
    c.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
    c.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR,
            new String[] { LocaleFac.STATUS_ANGELEGT, LocaleFac.STATUS_STORNIERT })));
    if (stuecklisteIId != null) {
        c.add(Restrictions.eq(FertigungFac.FLR_LOS_STUECKLISTE_I_ID, stuecklisteIId));

        StuecklisteDto stuecklisteDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(stuecklisteIId,
                theClientDto);
        mapParameter.put("P_STUECKLISTE", stuecklisteDto.getArtikelDto().formatArtikelbezeichnung());

    }
    if (losIId != null) {
        c.add(Restrictions.eq("i_id", losIId));
    }
    if (auftragIId != null) {
        c.createAlias("flrauftrag", "a").add(Restrictions.eq("a.i_id", auftragIId));

        try {
            AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(auftragIId);
            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                    theClientDto);
            mapParameter.put("P_AUFTRAG", auftragDto.getCNr());
            mapParameter.put("P_AUFTRAGPROJEKT", auftragDto.getCBezProjektbezeichnung());
            mapParameter.put("P_AUFTRAGKUNDE", kundeDto.getPartnerDto().formatAnrede());

            mapParameter.put("P_BEARBEITER",
                    getPersonalFac().getPersonRpt(auftragDto.getPersonalIIdAnlegen(), theClientDto));
            if (auftragDto.getPersonalIIdVertreter() != null) {
                mapParameter.put("P_VERTRETER",
                        getPersonalFac().getPersonRpt(auftragDto.getPersonalIIdVertreter(), theClientDto));
            }

        } catch (RemoteException ex2) {
            throwEJBExceptionLPRespectOld(ex2);
        }

    }
    if (tStichtag != null) {
        mapParameter.put("P_STICHTAG", tStichtag);// new
        // Timestamp(tStichtag.getTime()));
        tStichtag = Helper.cutTimestamp(new Timestamp(tStichtag.getTime() + 24 * 3600000));
    }

    if (losIId == null && auftragIId == null) {

        if (tVon != null) {
            c.add(Restrictions.or(Restrictions.ge(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tVon),
                    Restrictions.ge(FertigungFac.FLR_LOS_T_ERLEDIGT, tVon)));
            mapParameter.put("P_VON", tVon);
        }
        if (tBis != null) {
            c.add(Restrictions.or(Restrictions.lt(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tBis),
                    Restrictions.lt(FertigungFac.FLR_LOS_T_ERLEDIGT, tBis)));
            mapParameter.put("P_BIS", new Timestamp(tBis.getTime() - 3600000));
        }

        if (tStichtag != null) {
            c.add(Restrictions.or(Restrictions.lt(FertigungFac.FLR_LOSREPORT_T_ANLEGEN, tStichtag),
                    Restrictions.lt(FertigungFac.FLR_LOSREPORT_T_ANLEGEN, tStichtag)));
            c.add(Restrictions.or(Restrictions.ge(FertigungFac.FLR_LOSREPORT_T_MANUELLERLEDIGT, tStichtag),
                    Restrictions.ge(FertigungFac.FLR_LOS_T_ERLEDIGT, tStichtag)));
        }

    }
    c.addOrder(Order.asc("c_nr"));

    List<?> results = c.list();
    ArrayList<LosStatistikDto> al = new ArrayList<LosStatistikDto>();

    Iterator<?> resultListIterator = results.iterator();
    while (resultListIterator.hasNext()) {
        FLRLosReport los = (FLRLosReport) resultListIterator.next();

        try {

            LosDto losDto = getFertigungFac().losFindByPrimaryKey(los.getI_id());

            BigDecimal abgeliefert = new BigDecimal(0);
            for (Iterator<?> iter2 = los.getAblieferungset().iterator(); iter2.hasNext();) {
                FLRLosablieferung item = (FLRLosablieferung) iter2.next();
                abgeliefert = abgeliefert.add(item.getN_menge());
            }

            // VKpreis
            BigDecimal vkPreis = null;

            if (los.getFlrauftragposition() != null) {
                vkPreis = los.getFlrauftragposition()
                        .getN_nettogesamtpreisplusversteckteraufschlagminusrabatte();
            } else {

                if (los.getFlrstueckliste() != null) {

                    Integer kundeIId = null;

                    if (los.getFlrauftrag() != null) {
                        kundeIId = los.getFlrauftrag().getFlrkunde().getI_id();
                    }
                    if (kundeIId == null && los.getFlrkunde() != null) {
                        kundeIId = los.getFlrkunde().getI_id();
                    }

                    if (kundeIId != null) {
                        KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(kundeIId, theClientDto);

                        MwstsatzDto mwstsatzDtoAktuell = getMandantFac()
                                .mwstsatzFindByMwstsatzbezIIdAktuellster(kundeDto.getMwstsatzbezIId(),
                                        theClientDto);

                        VkpreisfindungDto vkpreisfindungDto = getVkPreisfindungFac().verkaufspreisfindung(
                                los.getFlrstueckliste().getArtikel_i_id(), kundeIId, losDto.getNLosgroesse(),
                                losDto.getTProduktionsende(),
                                kundeDto.getVkpfArtikelpreislisteIIdStdpreisliste(),
                                mwstsatzDtoAktuell.getIId(), theClientDto.getSMandantenwaehrung(),
                                theClientDto);

                        VerkaufspreisDto kundenVKPreisDto = Helper.getVkpreisBerechnet(vkpreisfindungDto);
                        if (kundenVKPreisDto != null) {
                            vkPreis = kundenVKPreisDto.nettopreis;
                        }
                    } else {
                        VkPreisfindungEinzelverkaufspreisDto vkpreisDto = getVkPreisfindungFac()
                                .getArtikeleinzelverkaufspreis(los.getFlrstueckliste().getArtikel_i_id(), null,
                                        theClientDto.getSMandantenwaehrung(), theClientDto);
                        if (vkpreisDto != null && vkpreisDto.getNVerkaufspreisbasis() != null) {
                            vkPreis = vkpreisDto.getNVerkaufspreisbasis();
                        }
                    }

                }
            }

            // Zuerst Material
            Session session2 = factory.openSession();
            Criteria cSoll = session.createCriteria(FLRLossollmaterial.class);
            cSoll.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLMATERIAL_LOS_I_ID, los.getI_id()));
            cSoll.createAlias("flrartikel", "a");
            cSoll.addOrder(Order.asc("a.c_nr"));
            List<?> resultsSoll = cSoll.list();
            Iterator<?> resultListIteratorSoll = resultsSoll.iterator();
            while (resultListIteratorSoll.hasNext()) {
                FLRLossollmaterial sollmat = (FLRLossollmaterial) resultListIteratorSoll.next();
                if (bVerdichtet == false && sollmat.getIstmaterialset().size() > 0) {
                    int i = 0;
                    for (Iterator<?> iter = sollmat.getIstmaterialset().iterator(); iter.hasNext();) {
                        FLRLosistmaterial item = (FLRLosistmaterial) iter.next();
                        LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                        losStatistikDto.setArtikelnummer(sollmat.getFlrartikel().getC_nr());
                        ArtikelDto artikelDto = getArtikelFac()
                                .artikelFindByPrimaryKeySmall(sollmat.getFlrartikel().getI_id(), theClientDto);
                        losStatistikDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());

                        Timestamp tsBuchungszeit = null;

                        List<SeriennrChargennrMitMengeDto> snrDtos = getLagerFac()
                                .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS,
                                        item.getI_id());

                        for (int k = 0; k < snrDtos.size(); k++) {

                            LagerbewegungDto bewDto = getLagerFac().getLetzteintrag(LocaleFac.BELEGART_LOS,
                                    item.getI_id(), snrDtos.get(k).getCSeriennrChargennr());
                            tsBuchungszeit = bewDto.getTBuchungszeit();
                            break;
                        }

                        losStatistikDto.setBuchungszeit(tsBuchungszeit);

                        if (i == 0) {
                            losStatistikDto.setSollmenge(sollmat.getN_menge());
                            losStatistikDto.setSollpreis(sollmat.getN_sollpreis());
                        } else {
                            losStatistikDto.setSollmenge(new BigDecimal(0));
                            losStatistikDto.setSollpreis(new BigDecimal(0));
                        }

                        losStatistikDto.setBMaterial(true);
                        losStatistikDto.setIstpreis(getFertigungFac()
                                .getAusgegebeneMengePreis(sollmat.getI_id(), null, theClientDto));
                        losStatistikDto.setAbgelieferteMenge(abgeliefert);
                        losStatistikDto.setVkpreisStueckliste(vkPreis);

                        BigDecimal istmenge = new BigDecimal(0);

                        if (Helper.short2boolean(item.getB_abgang()) == true) {
                            istmenge = istmenge.add(item.getN_menge());
                        } else {
                            istmenge = istmenge.subtract(item.getN_menge());
                        }

                        losStatistikDto.setIstmenge(istmenge);

                        if (tStichtag == null) {

                            al.add(losStatistikDto);
                            i++;
                        } else {
                            if (tsBuchungszeit == null) {
                                al.add(losStatistikDto);
                                i++;
                            } else {
                                if (tsBuchungszeit.before(tStichtag)) {
                                    al.add(losStatistikDto);
                                    i++;
                                }
                            }

                        }

                    }
                } else {

                    LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                    losStatistikDto.setArtikelnummer(sollmat.getFlrartikel().getC_nr());
                    ArtikelDto artikelDto = getArtikelFac()
                            .artikelFindByPrimaryKeySmall(sollmat.getFlrartikel().getI_id(), theClientDto);
                    losStatistikDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());
                    losStatistikDto.setSollmenge(sollmat.getN_menge());
                    losStatistikDto.setSollpreis(sollmat.getN_sollpreis());
                    losStatistikDto.setBMaterial(true);
                    losStatistikDto.setIstpreis(
                            getFertigungFac().getAusgegebeneMengePreis(sollmat.getI_id(), null, theClientDto));
                    losStatistikDto.setAbgelieferteMenge(abgeliefert);
                    losStatistikDto.setVkpreisStueckliste(vkPreis);

                    BigDecimal istmenge = new BigDecimal(0);
                    for (Iterator<?> iter = sollmat.getIstmaterialset().iterator(); iter.hasNext();) {
                        FLRLosistmaterial item = (FLRLosistmaterial) iter.next();

                        if (tStichtag != null) {

                            Timestamp tsBuchungszeit = null;

                            List<SeriennrChargennrMitMengeDto> snrDtos = getLagerFac()
                                    .getAllSeriennrchargennrEinerBelegartposition(LocaleFac.BELEGART_LOS,
                                            item.getI_id());

                            for (int k = 0; k < snrDtos.size(); k++) {

                                LagerbewegungDto bewDto = getLagerFac().getLetzteintrag(LocaleFac.BELEGART_LOS,
                                        item.getI_id(), snrDtos.get(k).getCSeriennrChargennr());
                                tsBuchungszeit = bewDto.getTBuchungszeit();
                                break;
                            }

                            if (tsBuchungszeit.after(tStichtag)) {
                                continue;
                            }

                        }

                        if (Helper.short2boolean(item.getB_abgang()) == true) {
                            istmenge = istmenge.add(item.getN_menge());
                        } else {
                            istmenge = istmenge.subtract(item.getN_menge());
                        }
                    }
                    losStatistikDto.setIstmenge(istmenge);

                    al.add(losStatistikDto);
                }
            }
            session2.close();

            LossollarbeitsplanDto[] lossollarbeitsplanDtos = getFertigungFac()
                    .lossollarbeitsplanFindByLosIId(los.getI_id());
            // PJ14351 Nach AG sortieren
            if (bArbeitsplanSortiertNachAG == true) {

                // Nach Fertigungsgruppe sortieren
                for (int k = lossollarbeitsplanDtos.length - 1; k > 0; --k) {
                    for (int j = 0; j < k; ++j) {
                        Integer a1 = lossollarbeitsplanDtos[j].getIArbeitsgangnummer();
                        Integer a2 = lossollarbeitsplanDtos[j + 1].getIArbeitsgangnummer();
                        if (a1.intValue() > a2.intValue()) {
                            LossollarbeitsplanDto temp = lossollarbeitsplanDtos[j];
                            lossollarbeitsplanDtos[j] = lossollarbeitsplanDtos[j + 1];
                            lossollarbeitsplanDtos[j + 1] = temp;
                        }
                    }
                }
            }

            ArrayList<LosStatistikDto> hmSoll = new ArrayList<LosStatistikDto>();

            // Zuerst Maschinenzeiten
            for (int i = 0; i < lossollarbeitsplanDtos.length; i++) {
                if (lossollarbeitsplanDtos[i].getMaschineIId() != null) {
                    Integer artikelIId = lossollarbeitsplanDtos[i].getArtikelIIdTaetigkeit();
                    BigDecimal sollzeit = lossollarbeitsplanDtos[i].getNGesamtzeit();
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(artikelIId,
                            theClientDto);

                    // Schon vorhanden?
                    boolean bGefunden = false;
                    for (int j = 0; j < hmSoll.size(); j++) {
                        LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);
                        if (losStatistikDto.getArtikelnummer().equals(artikelDto.getCNr())) {
                            if (lossollarbeitsplanDtos[i].getMaschineIId()
                                    .equals(losStatistikDto.getMaschineIId())) {
                                losStatistikDto.setSollmenge(losStatistikDto.getSollmenge().add(sollzeit));
                                bGefunden = true;
                                hmSoll.set(j, losStatistikDto);
                            }
                        }
                    }
                    if (!bGefunden) {
                        LosStatistikDto losStatistikMaschineDto = new LosStatistikDto(losDto);
                        losStatistikMaschineDto.setArtikelnummer(artikelDto.getCNr());
                        losStatistikMaschineDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());
                        losStatistikMaschineDto.setSollmenge(sollzeit);
                        losStatistikMaschineDto.setBMaterial(false);
                        losStatistikMaschineDto.setBIstPerson(false);

                        losStatistikMaschineDto.setAbgelieferteMenge(abgeliefert);
                        losStatistikMaschineDto.setVkpreisStueckliste(vkPreis);

                        losStatistikMaschineDto.setSollpreis(getZeiterfassungFac()
                                .getMaschinenKostenZumZeitpunkt(lossollarbeitsplanDtos[i].getMaschineIId(),
                                        Helper.cutTimestamp(new Timestamp(System.currentTimeMillis()))));
                        MaschineDto maschineDto = getZeiterfassungFac()
                                .maschineFindByPrimaryKey(lossollarbeitsplanDtos[i].getMaschineIId());

                        String maschinenname = "M:";
                        if (maschineDto.getCIdentifikationsnr() != null) {
                            maschinenname += maschineDto.getCIdentifikationsnr() + " ";
                        }
                        maschinenname += maschineDto.getCBez();

                        losStatistikMaschineDto.setPersonMaschine(maschinenname);
                        losStatistikMaschineDto.setMaschineIId(maschineDto.getIId());

                        hmSoll.add(losStatistikMaschineDto);
                    }
                }
            }
            // Dann Personalzeiten
            for (int i = 0; i < lossollarbeitsplanDtos.length; i++) {

                if (!Helper.short2boolean(lossollarbeitsplanDtos[i].getBNurmaschinenzeit())) {

                    Integer artikelIId = lossollarbeitsplanDtos[i].getArtikelIIdTaetigkeit();
                    BigDecimal sollzeit = lossollarbeitsplanDtos[i].getNGesamtzeit();
                    ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(artikelIId,
                            theClientDto);

                    // Schon vorhanden?
                    boolean bGefunden = false;
                    for (int j = 0; j < hmSoll.size(); j++) {
                        LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);
                        if (losStatistikDto.getArtikelnummer().equals(artikelDto.getCNr())) {

                            if (losStatistikDto.getMaschineIId() == null) {
                                losStatistikDto.setSollmenge(losStatistikDto.getSollmenge().add(sollzeit));
                                hmSoll.set(j, losStatistikDto);
                                bGefunden = true;
                            }

                        }

                    }

                    if (!bGefunden) {
                        LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                        losStatistikDto.setArtikelnummer(artikelDto.getCNr());
                        losStatistikDto.setArtikelbezeichnung(artikelDto.formatBezeichnung());
                        losStatistikDto.setSollmenge(sollzeit);
                        losStatistikDto.setBMaterial(false);
                        losStatistikDto.setBIstPerson(true);
                        losStatistikDto.setAbgelieferteMenge(abgeliefert);
                        losStatistikDto.setVkpreisStueckliste(vkPreis);
                        ArtikellieferantDto artikellieferantDto = getArtikelFac().getArtikelEinkaufspreis(
                                artikelDto.getIId(), new BigDecimal(1), theClientDto.getSMandantenwaehrung(),
                                theClientDto);
                        if (artikellieferantDto != null && artikellieferantDto.getLief1Preis() != null) {
                            losStatistikDto.setSollpreis(artikellieferantDto.getLief1Preis());
                        } else {
                            losStatistikDto.setSollpreis(new BigDecimal(0));
                        }
                        hmSoll.add(losStatistikDto);

                    }
                }
            }
            // Dann Zeiten

            AuftragzeitenDto[] maschinenzeitenDtos = getZeiterfassungFac()
                    .getAllMaschinenzeitenEinesBeleges(los.getI_id(), null, null, tStichtag, theClientDto);

            AuftragzeitenDto[] personalzeitenDtos = getZeiterfassungFac().getAllZeitenEinesBeleges(
                    LocaleFac.BELEGART_LOS, los.getI_id(), null, null, null, tStichtag, true, false,
                    theClientDto);

            for (int i = 0; i < personalzeitenDtos.length; i++) {

                boolean bGefunden = false;
                for (int j = 0; j < hmSoll.size(); j++) {
                    LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);

                    if (losStatistikDto.getMaschineIId() == null) {

                        if (losStatistikDto.getArtikelnummer().equals(personalzeitenDtos[i].getSArtikelcnr())) {
                            bGefunden = true;

                        }
                    }
                }

                if (bGefunden == false) {
                    LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                    losStatistikDto.setArtikelnummer(personalzeitenDtos[i].getSArtikelcnr());
                    losStatistikDto.setArtikelbezeichnung(personalzeitenDtos[i].getSArtikelbezeichnung());
                    losStatistikDto.setSollmenge(new BigDecimal(0));
                    losStatistikDto.setSollpreis(new BigDecimal(0));
                    losStatistikDto.setAbgelieferteMenge(abgeliefert);
                    losStatistikDto.setVkpreisStueckliste(vkPreis);
                    hmSoll.add(losStatistikDto);

                }
            }

            for (int i = 0; i < maschinenzeitenDtos.length; i++) {
                boolean bGefunden = false;

                if (tStichtag != null && maschinenzeitenDtos[i].getTsEnde() != null
                        && tStichtag.before(maschinenzeitenDtos[i].getTsEnde())) {
                    continue;
                }

                for (int j = 0; j < hmSoll.size(); j++) {
                    LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(j);

                    if (losStatistikDto.getMaschineIId() != null && losStatistikDto.getMaschineIId()
                            .equals(maschinenzeitenDtos[i].getIPersonalMaschinenId())) {

                        if (losStatistikDto.getArtikelnummer()
                                .equals(maschinenzeitenDtos[i].getSArtikelcnr())) {
                            bGefunden = true;

                        }
                    }
                }

                if (bGefunden == false) {
                    LosStatistikDto losStatistikDto = new LosStatistikDto(losDto);
                    losStatistikDto.setArtikelnummer(maschinenzeitenDtos[i].getSArtikelcnr());
                    losStatistikDto.setArtikelbezeichnung(maschinenzeitenDtos[i].getSArtikelbezeichnung());
                    losStatistikDto.setMaschineIId(maschinenzeitenDtos[i].getIPersonalMaschinenId());
                    losStatistikDto.setSollmenge(new BigDecimal(0));
                    losStatistikDto.setSollpreis(new BigDecimal(0));
                    losStatistikDto.setAbgelieferteMenge(abgeliefert);
                    losStatistikDto.setVkpreisStueckliste(vkPreis);

                    hmSoll.add(losStatistikDto);

                }

            }

            for (int k = 0; k < hmSoll.size(); k++) {
                LosStatistikDto losStatistikDto = (LosStatistikDto) hmSoll.get(k);

                losStatistikDto.setAbgelieferteMenge(abgeliefert);

                int iPos = al.size();
                al.add(losStatistikDto);
                // Personen
                if (losStatistikDto.getMaschineIId() == null) {
                    for (int i = 0; i < personalDtos.length; i++) {
                        PersonalDto personalDto = personalDtos[i];

                        BigDecimal bdgesamtzeit = new BigDecimal(0);
                        BigDecimal bdgesamtkosten = new BigDecimal(0);
                        String person = "";
                        for (int j = 0; j < personalzeitenDtos.length; j++) {
                            AuftragzeitenDto azDto = personalzeitenDtos[j];
                            if (azDto != null) {
                                if (personalDto.getIId().equals(azDto.getIPersonalMaschinenId())
                                        && azDto.getSArtikelcnr().equals(losStatistikDto.getArtikelnummer())) {
                                    bdgesamtzeit = bdgesamtzeit.add(new BigDecimal(azDto.getDdDauer()));
                                    bdgesamtkosten = bdgesamtkosten.add(azDto.getBdKosten());
                                    person = azDto.getSPersonalMaschinenname();
                                    personalzeitenDtos[j] = null;
                                }
                            }
                        }
                        if (bdgesamtzeit.doubleValue() != 0 || bdgesamtkosten.doubleValue() != 0) {

                            LosStatistikDto losStatistikPersonDto = new LosStatistikDto(losDto);
                            losStatistikPersonDto.setPersonMaschine(person);
                            losStatistikPersonDto.setBMaterial(false);
                            losStatistikPersonDto.setAbgelieferteMenge(abgeliefert);
                            losStatistikPersonDto.setVkpreisStueckliste(vkPreis);

                            losStatistikPersonDto.setIstmenge(bdgesamtzeit);
                            if (bdgesamtzeit.doubleValue() != 0) {
                                losStatistikPersonDto.setIstpreis(
                                        bdgesamtkosten.divide(bdgesamtzeit, 4, BigDecimal.ROUND_HALF_EVEN));
                            } else {
                                losStatistikPersonDto.setIstpreis(new BigDecimal(0));
                            }
                            al.add(losStatistikPersonDto);

                        }

                    }
                }
                // Maschinen
                if (losStatistikDto.getMaschineIId() != null) {
                    for (int i = 0; i < maschineDtos.length; i++) {
                        MaschineDto maschineDto = maschineDtos[i];

                        BigDecimal bdgesamtzeit = new BigDecimal(0);
                        BigDecimal bdgesamtkosten = new BigDecimal(0);
                        for (int j = 0; j < maschinenzeitenDtos.length; j++) {

                            if (tStichtag != null && maschinenzeitenDtos[j].getTsEnde() != null
                                    && tStichtag.before(maschinenzeitenDtos[j].getTsEnde())) {
                                continue;
                            }

                            AuftragzeitenDto azDto = maschinenzeitenDtos[j];
                            if (maschineDto.getIId().equals(azDto.getIPersonalMaschinenId())
                                    && azDto.getSArtikelcnr().equals(losStatistikDto.getArtikelnummer())) {
                                if (losStatistikDto.getMaschineIId().equals(azDto.getIPersonalMaschinenId())) {
                                    bdgesamtzeit = bdgesamtzeit.add(new BigDecimal(azDto.getDdDauer()));
                                    bdgesamtkosten = bdgesamtkosten.add(azDto.getBdKosten());
                                }

                            }
                        }
                        if (bdgesamtzeit.doubleValue() != 0 || bdgesamtkosten.doubleValue() != 0) {

                            BigDecimal kosten = bdgesamtkosten.divide(bdgesamtzeit, 4,
                                    BigDecimal.ROUND_HALF_EVEN);

                            if (losStatistikDto.getIstmenge() != null) {
                                losStatistikDto.setIstmenge(losStatistikDto.getIstmenge().add(bdgesamtzeit));
                            } else {
                                losStatistikDto.setIstmenge(bdgesamtzeit);
                            }

                            if (losStatistikDto.getIstpreis() != null) {
                                losStatistikDto.setIstpreis(losStatistikDto.getIstpreis().add(kosten));
                            } else {
                                losStatistikDto.setIstpreis(kosten);
                            }
                            al.set(iPos, losStatistikDto);
                        }

                    }
                }
            }

        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
        }

    }
    session.close();

    data = new Object[al.size()][23];
    for (int i = 0; i < al.size(); i++) {
        LosStatistikDto losStatistikDto = (LosStatistikDto) al.get(i);
        data[i][LOSSTATISTIK_GRUPPIERUNG] = losStatistikDto.getLosDto().getCNr();

        if (losStatistikDto.getLosDto().getTManuellerledigt() != null) {
            data[i][LOSSTATISTIK_ERLEDIGUNGSDATUM] = losStatistikDto.getLosDto().getTManuellerledigt();
        } else {
            data[i][LOSSTATISTIK_ERLEDIGUNGSDATUM] = losStatistikDto.getLosDto().getTErledigt();
        }

        data[i][LOSSTATISTIK_BEWERTUNG] = losStatistikDto.getLosDto().getFBewertung();
        data[i][LOSSTATISTIK_GEPLANTESSOLLMATERIAL] = losStatistikDto.getLosDto().getNSollmaterial();
        data[i][LOSSTATISTIK_GRUPPIERUNGBEZEICHNUNG] = losStatistikDto.getLosDto().getCProjekt();
        data[i][LOSSTATISTIK_GRUPPIERUNGERLEDIGT] = losStatistikDto.getLosDto().getTErledigt();
        data[i][LOSSTATISTIK_GRUPPIERUNGAUSGABE] = losStatistikDto.getLosDto().getTAusgabe();
        data[i][LOSSTATISTIK_GRUPPIERUNABGELIEFERTEMENGE] = losStatistikDto.getAbgelieferteMenge();
        data[i][LOSSTATISTIK_GRUPPIERUNGLOSGROESSE] = losStatistikDto.getLosDto().getNLosgroesse();
        data[i][LOSSTATISTIK_GRUPPIERUNVKPREIS] = losStatistikDto.getVkpreisStueckliste();
        data[i][LOSSTATISTIK_BUCHUNGSZEIT] = losStatistikDto.getBuchungszeit();

        if (losStatistikDto.getLosDto().getStuecklisteIId() != null) {
            data[i][LOSSTATISTIK_GRUPPIERUNGSTKLARTIKEL] = getStuecklisteFac()
                    .stuecklisteFindByPrimaryKey(losStatistikDto.getLosDto().getStuecklisteIId(), theClientDto)
                    .getArtikelDto().formatArtikelbezeichnung();
        }

        if (losStatistikDto.getLosDto().getAuftragIId() != null) {
            AuftragDto auftragDto = getAuftragFac()
                    .auftragFindByPrimaryKey(losStatistikDto.getLosDto().getAuftragIId());
            if (auftragDto.getKundeIIdAuftragsadresse() != null) {
                KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                        theClientDto);
                data[i][LOSSTATISTIK_GRUPPIERUNGKUNDE] = kundeDto.getPartnerDto().formatAnrede();
            }
        }

        data[i][LOSSTATISTIK_ISTMENGE] = losStatistikDto.getIstmenge();
        data[i][LOSSTATISTIK_ISTPREIS] = losStatistikDto.getIstpreis();
        data[i][LOSSTATISTIK_PERSONALMASCHINE] = losStatistikDto.getPersonMaschine();
        data[i][LOSSTATISTIK_ISTPERSON] = new Boolean(losStatistikDto.isBIstPerson());
        data[i][LOSSTATISTIK_SOLLMENGE] = losStatistikDto.getSollmenge();
        data[i][LOSSTATISTIK_SOLLPREIS] = losStatistikDto.getSollpreis();
        data[i][LOSSTATISTIK_ARTIKELNUMMER] = losStatistikDto.getArtikelnummer();
        data[i][LOSSTATISTIK_ARTIKELBEZEICHNUNG] = losStatistikDto.getArtikelbezeichnung();
        data[i][LOSSTATISTIK_UNTERGRUPPEMATERIAL] = new Boolean(losStatistikDto.isBMaterial());
    }

    initJRDS(mapParameter, FertigungReportFac.REPORT_MODUL, FertigungReportFac.REPORT_LOSSTATISTIK,
            theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
    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. ja  v  a2 s. com*/
        }
    }
    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;
}

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

License:Open Source License

/**
 * Buchungsjournal drucken./*from w ww.  j  av a  2s  .  co m*/
 * 
 * @param theClientDto
 *            String
 * @param buchungsjournalIId
 *            Integer
 * @return JasperPrint
 * @throws EJBExceptionLP
 */
public JasperPrintLP printBuchungsjournal(TheClientDto theClientDto, Integer buchungsjournalIId, Date dVon,
        Date dBis, boolean storniert, boolean bDatumsfilterIstBuchungsdatum, String text, String belegnummer,
        BigDecimal betrag) throws EJBExceptionLP {
    Session session = null;
    try {
        this.useCase = UC_BUCHUNGSJOURNAL;
        this.index = -1;

        Map<String, Object> mapParameter = new TreeMap<String, Object>();

        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRFinanzBuchungDetail.class);

        Timestamp help = new Timestamp(dVon.getTime());

        c.createAlias("flrbuchung", "s");

        String datumsfilter = "s.d_buchungsdatum";
        if (!bDatumsfilterIstBuchungsdatum) {
            datumsfilter = "t_anlegen";
        }
        c.add(Restrictions.ge(datumsfilter, Helper.cutTimestamp(help)));

        if (text != null) {
            c.add(Restrictions.ilike("s." + FinanzFac.FLR_BUCHUNG_C_TEXT, "%" + text + "%"));
            mapParameter.put("P_TEXT", text);

        }

        if (belegnummer != null) {

            String trennzeichen = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_ALLGEMEIN, ParameterFac.PARAMETER_BELEGNUMMERNFORMAT_TRENNZEICHEN)
                    .getCWert();
            Integer stellenBelegnummer = new Integer(getParameterFac()
                    .getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_ALLGEMEIN,
                            ParameterFac.PARAMETER_BELEGNUMMERNFORMAT_STELLEN_BELEGNUMMER)
                    .getCWert());

            String sValue = belegnummer;
            sValue = sValue.replaceAll("%", "");

            sValue = Helper.fitString2LengthAlignRight(sValue, stellenBelegnummer, '0');

            sValue = "%" + trennzeichen + sValue;

            c.add(Restrictions.like("s." + FinanzFac.FLR_BUCHUNG_C_BELEGNUMMER, sValue));
        }

        if (betrag != null) {

            Integer toleranzBetragsuche = new Integer(getParameterFac()
                    .getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_FINANZ,
                            ParameterFac.PARAMETER_TOLERANZ_BETRAGSUCHE)
                    .getCWert());

            BigDecimal value1 = betrag.subtract(
                    new BigDecimal(betrag.doubleValue() * ((double) toleranzBetragsuche / (double) 100))).abs();
            BigDecimal value2 = betrag
                    .add(new BigDecimal(betrag.doubleValue() * ((double) toleranzBetragsuche / (double) 100)))
                    .abs();

            c.add(Restrictions.or(Restrictions.between(FinanzFac.FLR_BUCHUNGDETAIL_N_BETRAG, value1, value2),
                    Restrictions.between(FinanzFac.FLR_BUCHUNGDETAIL_N_BETRAG, value2.negate(),
                            value1.negate())));

            mapParameter.put("P_TOLERANZ_BETRAGSSUCHE", toleranzBetragsuche);
            mapParameter.put("P_BETRAG", betrag);

        }

        help = new Timestamp(dBis.getTime() + 24 * 3600000);

        c.add(Restrictions.lt(datumsfilter, Helper.cutTimestamp(help)));

        if (storniert != true) {
            c.add(Restrictions.isNull("s.t_storniert"));
        } else {
            // Skip
        }

        c.createAlias("s.flrkostenstelle", "k");
        c.add(Restrictions.eq("k.mandant_c_nr", theClientDto.getMandant()));

        List<?> list = c.list();
        data = new Object[list.size()][REPORT_BUCHUNGSJOURNAL_ANZAHL_SPALTEN];
        int i = 0;

        for (Iterator<?> iter = list.iterator(); iter.hasNext();) {
            FLRFinanzBuchungDetail b = (FLRFinanzBuchungDetail) iter.next();
            data[i][REPORT_BUCHUNGSJOURNAL_AUSZUG] = b.getI_auszug();
            data[i][REPORT_BUCHUNGSJOURNAL_BELEGNUMMER] = b.getFlrbuchung().getC_belegnummer();
            data[i][REPORT_BUCHUNGSJOURNAL_BUCHUNGSART] = b.getFlrbuchung().getBuchungsart_c_nr();
            data[i][REPORT_BUCHUNGSJOURNAL_BUCHUNGSDATUM] = b.getFlrbuchung().getD_buchungsdatum();
            if (b.getFlrgegenkonto() != null) {
                data[i][REPORT_BUCHUNGSJOURNAL_GEGENKONTONUMMER] = b.getFlrgegenkonto().getC_nr();
            }
            data[i][REPORT_BUCHUNGSJOURNAL_BETRAG] = b.getN_betrag();
            data[i][REPORT_BUCHUNGSJOURNAL_KONTONUMMER] = b.getFlrkonto().getC_nr();
            data[i][REPORT_BUCHUNGSJOURNAL_KOSTENSTELLENUMMER] = b.getFlrbuchung().getFlrkostenstelle()
                    .getC_nr();
            data[i][REPORT_BUCHUNGSJOURNAL_TEXT] = b.getFlrbuchung().getC_text();
            data[i][REPORT_BUCHUNGSJOURNAL_UST] = b.getN_ust();

            if (b.getFlrbuchung().getT_storniert() == null) {
                data[i][REPORT_BUCHUNGSJOURNAL_STORNIERT] = new Boolean(false);
            } else {
                data[i][REPORT_BUCHUNGSJOURNAL_STORNIERT] = new Boolean(true);
            }

            if (b.getBuchungdetailart_c_nr().equals("SOLL           ")) {
                data[i][REPORT_BUCHUNGSJOURNAL_SOLL] = b.getN_betrag();
                data[i][REPORT_BUCHUNGSJOURNAL_HABEN] = null;
            } else if (b.getBuchungdetailart_c_nr().equals("HABEN          ")) {
                data[i][REPORT_BUCHUNGSJOURNAL_HABEN] = b.getN_betrag();
                data[i][REPORT_BUCHUNGSJOURNAL_SOLL] = null;
            } else {
                data[i][REPORT_BUCHUNGSJOURNAL_SOLL] = null;
                data[i][REPORT_BUCHUNGSJOURNAL_HABEN] = null;
            }

            data[i][REPORT_BUCHUNGSJOURNAL_BUCHUNGSJOURNALDATUM] = b.getT_anlegen();

            data[i][REPORT_BUCHUNGSJOURNAL_WER] = getPersonalFac()
                    .personalFindByPrimaryKeySmall(b.getFlrbuchung().getPersonal_i_id_anlegen())
                    .getCKurzzeichen();

            i++;
        }
        MandantDto mandantDto = getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(),
                theClientDto);

        mapParameter.put(LPReport.P_WAEHRUNG, mandantDto.getWaehrungCNr());
        mapParameter.put("P_VON", dVon);
        mapParameter.put("P_MITSTORNIERTEN", new Boolean(storniert));
        mapParameter.put("P_DATUMSFILTER_IST_BUCHUNGSDATUM", new Boolean(bDatumsfilterIstBuchungsdatum));
        mapParameter.put("P_BIS", dBis);
        initJRDS(mapParameter, FinanzReportFac.REPORT_MODUL, FinanzReportFac.REPORT_BUCHUNGSJOURNAL,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
        return null;
    } finally {
        closeSession(session);
    }
}

From source file:com.lp.server.lieferschein.ejbfac.LieferscheinReportFacBean.java

License:Open Source License

/**
 * Alle offenen Lieferscheine fuer einen bestimmten Mandanten drucken.
 * //w  w w  .ja  v  a  2 s  .  c  om
 * @param reportJournalKriterienDtoI
 *            die Filter- und Sortierkriterien
 * @param theClientDto
 *            der aktuelle Benutzer
 * @throws EJBExceptionLP
 *             Ausnahme
 * @return JasperPrint der Druck
 */

@TransactionAttribute(TransactionAttributeType.NEVER)
public JasperPrintLP printLieferscheinOffene(ReportJournalKriterienDto reportJournalKriterienDtoI, Integer iArt,
        boolean bMitDetails, TheClientDto theClientDto) throws EJBExceptionLP {
    if (reportJournalKriterienDtoI == null) {
        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL,
                new Exception("reportJournalKriterienDtoI == null"));
    }
    JasperPrintLP oPrintO = null;
    cAktuellerReport = LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE;
    int iIndex = 0;
    ArrayList<FLRLieferschein> oZeilen = new ArrayList();
    SessionFactory factory = FLRSessionFactory.getFactory();
    Session session = null;
    try {
        session = factory.openSession();
        // Hiberante Criteria fuer alle Tabellen ausgehend von meiner
        // Haupttabelle anlegen,
        // nach denen ich filtern und sortieren kann
        Criteria crit = session.createCriteria(FLRLieferschein.class);
        // Einschraenkung auf den aktuellen Mandanten
        crit.add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));
        // Einschraenkung nach Status Offen
        crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_LIEFERSCHEINSTATUS_STATUS_C_NR,
                LieferscheinFac.LSSTATUS_GELIEFERT));
        if (iArt != null) {
            if (iArt == 1) {
                crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_B_VERRECHENBAR,
                        Helper.boolean2Short(true)));
            } else if (iArt == 2) {
                crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_B_VERRECHENBAR,
                        Helper.boolean2Short(false)));
            }
        }
        // Einschraenkung nach einer bestimmten Kostenstelle
        if (reportJournalKriterienDtoI.kostenstelleIId != null) {
            crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_KOSTENSTELLE_I_ID,
                    reportJournalKriterienDtoI.kostenstelleIId));
        }

        // Einschraenkung nach einem bestimmten Kunden
        if (reportJournalKriterienDtoI.kundeIId != null) {
            crit.add(Restrictions.eq(LieferscheinFac.FLR_LIEFERSCHEIN_KUNDE_I_ID_LIEFERADRESSE,
                    reportJournalKriterienDtoI.kundeIId));
        }

        // Einschraenkung nach Belegdatum von - bis
        String sVon = null;
        String sBis = null;

        if (reportJournalKriterienDtoI.dVon != null) {
            crit.add(Restrictions.ge(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM,
                    reportJournalKriterienDtoI.dVon));
            sVon = Helper.formatDatum(reportJournalKriterienDtoI.dVon, theClientDto.getLocUi());
        }

        if (reportJournalKriterienDtoI.dBis != null) {
            crit.add(Restrictions.le(LieferscheinFac.FLR_LIEFERSCHEIN_D_BELEGDATUM,
                    reportJournalKriterienDtoI.dBis));
            sBis = Helper.formatDatum(reportJournalKriterienDtoI.dBis, theClientDto.getLocUi());
        }

        // Einschraenkung nach Belegnummer von - bis
        LpBelegnummerFormat f = getBelegnummerGeneratorObj().getBelegnummernFormat(theClientDto.getMandant());

        Integer iGeschaeftsjahr = getParameterFac().getGeschaeftsjahr(theClientDto.getMandant());

        String sMandantKuerzel = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_ALLGEMEIN, ParameterFac.PARAMETER_BELEGNUMMER_MANDANTKENNUNG).getCWert();

        if (reportJournalKriterienDtoI.sBelegnummerVon != null) {
            sVon = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                    reportJournalKriterienDtoI.sBelegnummerVon);
            crit.add(Restrictions.ge("c_nr", sVon));
        }

        if (reportJournalKriterienDtoI.sBelegnummerBis != null) {
            sBis = HelperServer.getBelegnummernFilterForHibernateCriterias(f, iGeschaeftsjahr, sMandantKuerzel,
                    reportJournalKriterienDtoI.sBelegnummerBis);
            crit.add(Restrictions.le("c_nr", sBis));
        }

        // Sortierung nach Kostenstelle ist immer die erste Sortierung
        if (reportJournalKriterienDtoI.bSortiereNachKostenstelle) {
            crit.createCriteria(LieferscheinFac.FLR_LIEFERSCHEIN_FLRKOSTENSTELLE).addOrder(Order.asc("c_nr"));
        }

        // Sortierung nach Kunde, eventuell innerhalb der Kostenstelle
        if (reportJournalKriterienDtoI.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
            crit.createCriteria(LieferscheinFac.FLR_LIEFERSCHEIN_FLRKUNDE).createCriteria(KundeFac.FLR_PARTNER)
                    .addOrder(Order.asc(PartnerFac.FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1));
        }

        // es wird in jedem Fall nach der Belegnummer sortiert
        crit.addOrder(Order.asc("c_nr"));
        List<?> list = crit.list();
        Iterator<?> it = list.iterator();
        while (it.hasNext()) {
            FLRLieferschein flrlieferschein = (FLRLieferschein) it.next();
            oZeilen.add(flrlieferschein);
            session = factory.openSession();
            Criteria critPosition = session.createCriteria(FLRLieferscheinposition.class);
            critPosition.add(Restrictions.eq(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_FLRLIEFERSCHEIN,
                    flrlieferschein));
            critPosition.add(Restrictions.or(
                    Restrictions.isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE),
                    Restrictions.eq(
                            LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_LIEFERSCHEINPOSITIONART_C_NR,
                            LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_TEXTEINGABE)));
            // critPosition
            // .add(Restrictions
            // .isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE));
            List<?> posList = critPosition.list();
            for (Iterator<?> ipos = posList.iterator(); ipos.hasNext();) {
                FLRLieferscheinposition item = (FLRLieferscheinposition) ipos.next();
                iIndex++;
            }
            iIndex++;
        }
        data = new Object[iIndex][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ANZAHL_ZEILEN]; // Anzahl
        // der
        // Spalten
        // in
        // der
        // Gruppe
        Iterator<?> itZeilen = oZeilen.iterator();
        int i = 0;
        while (itZeilen.hasNext()) {
            FLRLieferschein flrlieferschein = (FLRLieferschein) itZeilen.next();
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                    .getC_nr();
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINKUNDE] = flrlieferschein
                    .getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1();
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_KOSTENSTELLECNR] = flrlieferschein
                    .getFlrkostenstelle().getC_nr();
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ANLAGEDATUM] = flrlieferschein
                    .getD_belegdatum(); // todo
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERTERMIN] = flrlieferschein
                    .getT_liefertermin();
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ZAHLUNGSZIEL] = getMandantFac()
                    .zahlungszielFindByIIdLocaleOhneExc(flrlieferschein.getZahlungsziel_i_id(),
                            theClientDto.getLocMandant(), theClientDto);
            if (flrlieferschein.getFlrauftrag() != null) {
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAGSNUMMER] = flrlieferschein
                        .getFlrauftrag().getC_nr();
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAG_PROJEKT] = flrlieferschein
                        .getFlrauftrag().getC_bez();
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_BESTELLNUMMER] = flrlieferschein
                        .getFlrauftrag().getC_bestellnummer();
            } else {
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAGSNUMMER] = null;
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_AUFTRAG_PROJEKT] = null;
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_BESTELLNUMMER] = null;
            }
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERART] = getLocaleFac()
                    .lieferartFindByIIdLocaleOhneExc(flrlieferschein.getLieferart_i_id(),
                            theClientDto.getLocMandant(), theClientDto);

            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERARTORT] = flrlieferschein
                    .getC_lieferartort();
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_VERRECHENBAR] = Helper
                    .short2Boolean(flrlieferschein.getB_verrechenbar());
            if (flrlieferschein.getFlrziellager() != null) {
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ZIELLAGER] = flrlieferschein
                        .getFlrziellager().getC_nr();
            }
            if (flrlieferschein.getFlrlager() != null) {
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ABLAGER] = flrlieferschein
                        .getFlrlager().getC_nr();
            }

            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_RECHNUNGSADRESSE] = flrlieferschein
                    .getFlrkunderechnungsadresse().getFlrpartner().getC_name1nachnamefirmazeile1();

            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_VERRECHENBAR] = Helper
                    .short2Boolean(flrlieferschein.getB_verrechenbar());

            if (flrlieferschein.getSpediteur_i_id() != null) {
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_SPEDITEUR] = getMandantFac()
                        .spediteurFindByPrimaryKey(flrlieferschein.getSpediteur_i_id()).getCNamedesspediteurs();
            } else {
                data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_SPEDITEUR] = null;
            }
            data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_PROJEKTBEZEICHNUNG] = flrlieferschein
                    .getC_bez_projektbezeichnung();
            session = factory.openSession();
            Criteria critPosition = session.createCriteria(FLRLieferscheinposition.class);
            critPosition.add(Restrictions.eq(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_FLRLIEFERSCHEIN,
                    flrlieferschein));

            critPosition.add(Restrictions.or(
                    Restrictions.isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE),
                    Restrictions.eq(
                            LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_LIEFERSCHEINPOSITIONART_C_NR,
                            LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_TEXTEINGABE)));

            // critPosition
            // .add(Restrictions
            // .isNotNull(LieferscheinpositionFac.FLR_LIEFERSCHEINPOSITION_N_MENGE));
            List<?> posList = critPosition.list();
            boolean darfVerkaufspreisSehen = getTheJudgeFac()
                    .hatRecht(RechteFac.RECHT_LP_DARF_PREISE_SEHEN_VERKAUF, theClientDto);

            for (Iterator<?> ipos = posList.iterator(); ipos.hasNext();) {
                FLRLieferscheinposition item = (FLRLieferscheinposition) ipos.next();
                i++;// in die naechste Zeile vorruecken
                // nur mengenbehaftete Positionen beruecksichtigen
                if (item.getN_menge() != null) {
                    String artikelCNr = null;
                    // TODO boeser Workaround ... PJ 4400
                    if (item.getFlrartikel().getC_nr().startsWith("~")) {
                        artikelCNr = AngebotReportFac.REPORT_VORKALKULATION_ZEICHEN_FUER_HANDEINGABE;
                    } else {
                        artikelCNr = item.getFlrartikel().getC_nr();
                    }
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELCNR] = artikelCNr;
                    String cArtikelBezeichnung = "";

                    if (item.getPositionsart_c_nr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)
                            || item.getPositionsart_c_nr()
                                    .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_HANDEINGABE)) {
                        cArtikelBezeichnung = getArtikelFac().baueArtikelBezeichnungMehrzeiligOhneExc(
                                item.getFlrartikel().getI_id(), item.getPositionsart_c_nr(), item.getC_bez(),
                                item.getC_zbez(), false, null, theClientDto);
                    }

                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELBEZEICHNUNG] = cArtikelBezeichnung;
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELMENGE] = item.getN_menge();
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELEINHEIT] = item
                            .getEinheit_c_nr() == null ? null : item.getEinheit_c_nr().trim();

                    if (darfVerkaufspreisSehen) {
                        // Positionspreise sind in Belegwaehrung abgelegt
                        BigDecimal nPreisInBelegwaehrung = item
                                .getN_nettogesamtpreisplusversteckteraufschlagminusrabatt();

                        nPreisInBelegwaehrung = getBetragMalWechselkurs(nPreisInBelegwaehrung,
                                Helper.getKehrwert(new BigDecimal(
                                        flrlieferschein.getF_wechselkursmandantwaehrungzulieferscheinwaehrung()
                                                .doubleValue())));

                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELNETTOGESAMTPREISPLUSVERSTECKTERAUFSCHLAGMINUSRABATT] = nPreisInBelegwaehrung;
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERWERT] = item
                                .getN_menge().multiply(nPreisInBelegwaehrung);
                    } else {
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELNETTOGESAMTPREISPLUSVERSTECKTERAUFSCHLAGMINUSRABATT] = null;
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERWERT] = null;
                    }

                    // Grundlage ist der positionsbezogene Gestehungspreis
                    // des Artikels.
                    BigDecimal bdGestehungspreis = Helper.getBigDecimalNull();

                    if (item.getPositionsart_c_nr()
                            .equals(LieferscheinpositionFac.LIEFERSCHEINPOSITIONSART_IDENT)) {
                        try {
                            BigDecimal bdGestehungswert = getLieferscheinFac()
                                    .berechneGestehungswertEinerLieferscheinposition(item.getI_id(),
                                            theClientDto);

                            // Gestehungspreis bezogen auf 1 Stueck wird
                            // gemittelt
                            bdGestehungspreis = bdGestehungswert.divide(item.getN_menge(), 4,
                                    BigDecimal.ROUND_HALF_EVEN);
                            bdGestehungspreis = Helper.rundeKaufmaennisch(bdGestehungspreis, 4);
                        } catch (Throwable t) {
                            // dieser Fall sollte nicht auftreten, bitte als
                            // moeglichen Fehler pruefen!
                        }
                    }

                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELGESTEHUNGSPREIS] = bdGestehungspreis;
                    if (darfVerkaufspreisSehen) {
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERDB] = item
                                .getN_menge().multiply(bdGestehungspreis);
                    } else {
                        data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_ARTIKELOFFENERDB] = null;
                    }
                    // die Positionen brauchen alle Attribute, nach denen im
                    // Report gruppiert wird
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                            .getC_nr();
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_KOSTENSTELLECNR] = flrlieferschein
                            .getFlrkostenstelle().getC_nr();
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINKUNDE] = flrlieferschein
                            .getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1();
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                            .getC_nr(); // fuer die Gruppierung
                } else if (item.getPositionsart_c_nr().equals(LocaleFac.POSITIONSART_TEXTEINGABE)) {
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_TEXTEINGABE] = item
                            .getC_textinhalt();
                    // die Positionen brauchen alle Attribute, nach denen im
                    // Report gruppiert wird
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                            .getC_nr();
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_KOSTENSTELLECNR] = flrlieferschein
                            .getFlrkostenstelle().getC_nr();
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINKUNDE] = flrlieferschein
                            .getFlrkunde().getFlrpartner().getC_name1nachnamefirmazeile1();
                    data[i][LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE_LIEFERSCHEINCNR] = flrlieferschein
                            .getC_nr(); // fuer die Gruppierung
                }
            }
            i++; // in die naechste Zeile vorruecken
        }
        // Erstellung des Report
        HashMap parameter = new HashMap<Object, Object>();
        // die Parameter dem Report uebergeben
        parameter.put(LPReport.P_SORTIERUNG,
                buildSortierungLieferscheinOffene(reportJournalKriterienDtoI, theClientDto));
        parameter.put(LPReport.P_FILTER,
                buildFilterLieferscheinOffene(reportJournalKriterienDtoI, theClientDto));
        // die Parameter zur Bildung von Zwischensummen uebergeben
        if (reportJournalKriterienDtoI.bSortiereNachKostenstelle) {
            parameter.put(LPReport.P_SORTIERENACHKOSTENSTELLE, new Boolean(true));
        } else {
            parameter.put(LPReport.P_SORTIERENACHKOSTENSTELLE, new Boolean(false));
        }
        if (reportJournalKriterienDtoI.iSortierung == ReportJournalKriterienDto.KRIT_SORT_NACH_PARTNER) {
            parameter.put(LPReport.P_SORTIERENACHKUNDE, new Boolean(true));
        } else {
            parameter.put(LPReport.P_SORTIERENACHKUNDE, new Boolean(false));
        }
        parameter.put("P_LIEFERSCHEINWAEHRUNG", theClientDto.getSMandantenwaehrung());
        parameter.put("P_DETAILS", new Boolean(bMitDetails));

        initJRDS(parameter, LieferscheinReportFac.REPORT_MODUL,
                LieferscheinReportFac.REPORT_LIEFERSCHEIN_OFFENE, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);

        oPrintO = getReportPrint();
    } catch (RemoteException re) {
        throwEJBExceptionLPRespectOld(re);
    } finally {
        closeSession(session);
    }
    return oPrintO;
}

From source file:com.lp.server.personal.ejbfac.ZeiterfassungReportFacBean.java

License:Open Source License

public JasperPrintLP printMaschinenliste(java.sql.Timestamp tStichtag, boolean bMitVersteckten,
        TheClientDto theClientDto) {/*from  w ww. j a  va 2  s. c om*/
    sAktuellerReport = ZeiterfassungReportFac.REPORT_MASCHINENLISTE;

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

    org.hibernate.Criteria crit = session
            .createCriteria(com.lp.server.personal.fastlanereader.generated.FLRMaschine.class)
            .add(Restrictions.eq("mandant_c_nr", theClientDto.getMandant()));
    if (bMitVersteckten == false) {
        crit.add(Restrictions.eq(ZeiterfassungFac.FLR_MASCHINE_B_VERSTECKT, Helper.boolean2Short(false)));
    }
    if (tStichtag != null) {
        crit.add(Restrictions.or(Restrictions.le(ZeiterfassungFac.FLR_MASCHINE_T_KAUFDATUM, tStichtag),
                Restrictions.isNull(ZeiterfassungFac.FLR_MASCHINE_T_KAUFDATUM)));
    }

    crit.createAlias(ZeiterfassungFac.FLR_MASCHINE_FLR_MASCHINENGRUPPE, "m").addOrder(Order.asc("m.c_bez"));
    crit.addOrder(Order.asc(ZeiterfassungFac.FLR_MASCHINE_C_INVENTARNUMMER));

    List<?> resultList = crit.list();

    data = new Object[resultList.size()][10];

    Iterator<?> resultListIterator = resultList.iterator();
    int row = 0;
    while (resultListIterator.hasNext()) {
        FLRMaschine flrmaschine = (FLRMaschine) resultListIterator.next();

        data[row][REPORT_MASCHINENLISTE_INVENTARNUMMER] = flrmaschine.getC_inventarnummer();
        data[row][REPORT_MASCHINENLISTE_BEZEICHNUNG] = flrmaschine.getC_bez();
        data[row][REPORT_MASCHINENLISTE_IDENTIFIKATIONSNUMMER] = flrmaschine.getC_identifikationsnr();
        data[row][REPORT_MASCHINENLISTE_KAUFDATUM] = flrmaschine.getT_kaufdatum();
        data[row][REPORT_MASCHINENLISTE_VERFUEGBARKEIT] = flrmaschine.getF_verfuegbarkeitinprozent();
        data[row][REPORT_MASCHINENLISTE_AUTOENDE] = new Boolean(
                Helper.short2Boolean(flrmaschine.getB_autoendebeigeht()));

        data[row][REPORT_MASCHINENLISTE_KOSTEN_ZUM_ZEITPUNKT] = getZeiterfassungFac()
                .getMaschinenKostenZumZeitpunkt(flrmaschine.getI_id(),
                        new Timestamp(System.currentTimeMillis()));

        data[row][REPORT_MASCHINENLISTE_MASCHINENGRUPPE] = flrmaschine.getFlrmaschinengruppe().getC_bez();

        Session s2 = FLRSessionFactory.getFactory().openSession();
        Query query2 = session.createQuery("FROM FLRMaschinenzeitdaten m WHERE m.maschine_i_id="
                + flrmaschine.getI_id() + " ORDER BY m.t_von DESC");
        query2.setMaxResults(1);
        List<?> resultListSub = query2.list();

        String starter = "";
        Timestamp tUm = null;

        if (resultListSub.size() > 0) {
            FLRMaschinenzeitdaten m = (FLRMaschinenzeitdaten) resultListSub.iterator().next();

            starter = m.getFlrpersonal_gestartet().getFlrpartner().getC_name1nachnamefirmazeile1();

            if (m.getFlrpersonal_gestartet().getFlrpartner().getC_name2vornamefirmazeile2() != null) {
                starter += " " + m.getFlrpersonal_gestartet().getFlrpartner().getC_name2vornamefirmazeile2();
            }
            tUm = new Timestamp(m.getT_von().getTime());
        }
        data[row][REPORT_MASCHINENLISTE_ZULETZT_GESTARTET_VON] = starter;
        data[row][REPORT_MASCHINENLISTE_ZULETZT_GESTARTET_UM] = tUm;

        row++;
    }

    HashMap<String, Object> parameter = new HashMap<String, Object>();
    parameter.put("T_STICHTAG", tStichtag);
    initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_MASCHINENLISTE,
            theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
    return getReportPrint();

}