Example usage for org.hibernate.criterion Restrictions and

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

Introduction

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

Prototype

public static LogicalExpression and(Criterion lhs, Criterion rhs) 

Source Link

Document

Return the conjuction of two expressions

Usage

From source file:com.jubination.model.dao.ClientDAOImpl.java

@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
public List<TempClient> readBackupEntityByNumberAndDate(String number, String date) {
    System.out.println(/* w ww.  j av  a 2  s  . c  o m*/
            "READ TEMP CLIENT TODAY WITH SAME NUMBER:::::::::::::::::::::::::::::::::::::::::::::::CHECK");
    session = getSessionFactory().getCurrentSession();
    return session.createCriteria(TempClient.class).add(Restrictions.and(Restrictions.eq("phoneNumber", number),
            Restrictions.ilike("dateCreation", date, MatchMode.START))).list();

}

From source file:com.jubination.model.dao.ClientDAOImpl.java

@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
public Object fetchInnerEntities(String param, String type) {
    List<Lead> list = null;
    if (param.equals("Lead")) {
        if (type.equals("NotificationOn")) {
            session = getSessionFactory().getCurrentSession();
            list = (List<Lead>) session.createCriteria(Lead.class).add(Restrictions.isNotNull("followUpDate"))
                    .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY).list();
        }//ww w.ja v  a  2  s  .  c om

        if (type.equals("Pending")) {
            session = getSessionFactory().getCurrentSession();
            list = (List<Lead>) session.createCriteria(Lead.class).add(Restrictions.ge("count", 1))
                    .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY).list();

        }

    } else if (param.equals("Number")) {
        session = getSessionFactory().getCurrentSession();
        list = (List<Lead>) session.createCriteria(Lead.class).createAlias("client", "c")
                .add(Restrictions.eq("c.phoneNumber", type))
                .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY).list();

    } else if (param.equals("MissedAppointmentStatusToday")) {
        session = getSessionFactory().getCurrentSession();
        list = (List<Lead>) session.createCriteria(Lead.class)
                .add(Restrictions.and(Restrictions.like("missedAppointmentStatus", type, MatchMode.ANYWHERE),
                        Restrictions.eq("appointmentDate",
                                new SimpleDateFormat("yyyy-MM-dd").format(new Date()))))
                .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY).list();

    } else if (param.equals("ActiveSourceLeads")) {
        session = getSessionFactory().getCurrentSession();
        list = (List<Lead>) session.createCriteria(Lead.class, "l").createAlias("client", "c")
                .add(Restrictions.and(Restrictions.ge("l.count", 1), Restrictions.eq("c.source", type)))
                .setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY).list();

    }
    if (list != null) {
        for (Lead lead : list) {
            if (lead != null) {
                if (lead.getBeneficiaries() != null) {
                    lead.getBeneficiaries().size();
                }
            }
        }
    }
    System.out.println("READ LEAD WITH A STATUS :::::::::::::::::::::::::::::::::::::::::::::::CHECK");
    return (T) list;
}

From source file:com.jubination.model.dao.ClientDAOImpl.java

@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
public List<Object> fetchFreshCallEntity(String fromDate, String toDate) {
    List list = null;/*from   w  ww .  j  a  va 2  s.com*/
    session = getSessionFactory().getCurrentSession();
    Criteria criteria = session.createCriteria(Client.class, "client").add(Restrictions.and(
            Restrictions.ge("client.dateCreation", fromDate), Restrictions.le("client.dateCreation", toDate)));
    criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    list = criteria.list();
    for (Client c : (List<Client>) list) {
        c.getLead().size();
        for (Lead l : c.getLead()) {
            l.getCall().size();
        }
    }

    System.out.println(
            "IMPORTANT:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::" + list.size());
    return list;
}

From source file:com.jubinationre.model.dao.CallAPIMessageDAOImpl.java

public Object getByProperty(Object entity, String listType) {
    List<CallAPIMessage> list = new ArrayList<CallAPIMessage>();
    switch (listType) {
    case "Number":
        String number = (String) entity;
        try {/* w  w w  .j a v  a2 s  .com*/
            session = getSessionFactory().openSession();
            session.beginTransaction();
            Criteria criteria = session.createCriteria(CallAPIMessage.class, "call");
            criteria.add(Restrictions.eq("CallTo", number));
            list = criteria.list();
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.println("Error in building CallAPIMessage and its properties at CallAPIDAO " + e);
            e.printStackTrace();
        }

        break;
    case "OrderId":
        Long orderId = (Long) entity;
        try {
            session = getSessionFactory().openSession();
            session.beginTransaction();
            list.add((CallAPIMessage) session.get(CallAPIMessage.class, (Long) orderId));
            session.getTransaction().commit();
        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.println("Error in building CallAPIMessage and its properties at CallAPIDAO " + e);
            e.printStackTrace();

        }

        break;
    case "Sid":
        String sid = (String) entity;
        try {
            session = getSessionFactory().openSession();
            session.beginTransaction();
            Criteria criteria = session.createCriteria(CallAPIMessage.class, "call");
            criteria.add(Restrictions.eq("Sid", sid));
            list = criteria.list();
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.println("Error in deleting Items and its properties at ItemsDAO " + e);
            e.printStackTrace();
        }
        break;
    case "DateCreated":
        String dateCreated = (String) entity;
        try {
            session = getSessionFactory().openSession();
            session.beginTransaction();
            Criteria criteria = session.createCriteria(CallAPIMessage.class, "call");
            criteria.add(Restrictions.like("DateCreated", dateCreated, MatchMode.START));
            list = criteria.list();
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.println("Error in deleting Items and its properties at ItemsDAO " + e);
            e.printStackTrace();
        }
        break;
    case "PendingOnDate":
        String pendingOnDate = (String) entity;
        try {
            session = getSessionFactory().openSession();
            session.beginTransaction();
            Criteria criteria = session.createCriteria(CallAPIMessage.class, "call");
            criteria.add(Restrictions.or(
                    Restrictions.and(Restrictions.like("DateCreated", pendingOnDate, MatchMode.START),
                            Restrictions.like("TrackStatus", "did not", MatchMode.ANYWHERE)),
                    Restrictions.and(Restrictions.like("DateCreated", pendingOnDate, MatchMode.START),
                            Restrictions.like("TrackStatus", "Pressed 2", MatchMode.START)),
                    Restrictions.and(Restrictions.like("DateCreated", pendingOnDate, MatchMode.START),
                            Restrictions.like("Status", "failed", MatchMode.START)),
                    Restrictions.and(Restrictions.like("DateCreated", pendingOnDate, MatchMode.START),
                            Restrictions.like("Status", "no-answer", MatchMode.START))));
            list = criteria.list();
            session.getTransaction().commit();

        } catch (Exception e) {
            session.getTransaction().rollback();
            System.out.println("Error in deleting Items and its properties at ItemsDAO " + e);
            e.printStackTrace();
        }
        break;
    default:
        System.err.println("Not a valid option");
        break;
    }
    return list;
}

From source file:com.klistret.cmdb.utility.hibernate.XPathCriteria.java

License:Open Source License

/**
 * //w w w. j a  va2s  . c o  m
 * @param predicate
 * @return
 */
protected Criterion getRestriction(Expr predicate, HibernateStep context) {
    logger.debug("Adding restrictions by predicate to context [{}]", context);

    switch (predicate.getType()) {
    case Or:
        /**
         * Recursively breaks down the OrExpr by translating on the first
         * and second operands
         */
        if (((OrExpr) predicate).getOperands().size() != 2)
            throw new ApplicationException(
                    String.format("OrExpr expression [%s] expects 2 operands", predicate));

        return Restrictions.or(getRestriction(((OrExpr) predicate).getOperands().get(0), context),
                getRestriction(((OrExpr) predicate).getOperands().get(1), context));
    case And:
        /**
         * Recursively breaks down the AndExpr by translating on the first
         * and second operands
         */
        if (((AndExpr) predicate).getOperands().size() != 2)
            throw new ApplicationException(
                    String.format("AndExpr expression [%s] expects 2 operands", predicate));

        return Restrictions.and(getRestriction(((AndExpr) predicate).getOperands().get(0), context),
                getRestriction(((AndExpr) predicate).getOperands().get(1), context));
    case Comparison:
        /**
         * Find the literal
         */
        LiteralExpr literal = getLiteralOperand(((ComparisonExpr) predicate).getOperands());

        /**
         * Find the relative path making a Hibernate relative path
         */
        RelativePathExpr rpe = getRelativePathOperand(((ComparisonExpr) predicate).getOperands());
        HibernateRelativePath hRPath = process(rpe, context);
        build(hRPath);

        HibernateStep last = hRPath.getLastHibernateStep();

        /**
         * Property name with alias prefix
         */
        String alias = last.getPrevious() == null ? aliasCache.get(context.getPath())
                : aliasCache.get(last.getPrevious().getPath());
        String propertyName = alias == null ? last.getName() : String.format("%s.%s", alias, last.getName());

        /**
         * Paths with XML properties (always the last step if present)
         * return a XPath restriction.
         */
        if (hRPath.hasXML()) {
            if (!hRPath.isTruncated())
                throw new ApplicationException(String.format(
                        "Predicate relative path ending in an XML property [%s] must be truncated", last));

            /**
             * Last Hibernate step of the Hibernate path marks the property
             * which the restriction acts on.
             */
            StepExpr step = (StepExpr) last.getStep();

            /**
             * A new XPath is created from the last step downwards till the
             * step prior to the ending step.
             */
            String xpath = null;
            for (int depth = step.getDepth(); depth < step.getRelativePath().getDepth() - 1; depth++) {
                Expr expr = step.getRelativePath().getExpr(depth);
                xpath = xpath == null ? expr.getXPath() : String.format("%s/%s", xpath, expr.getXPath());
            }

            Step ending = (Step) step.getRelativePath().getLastExpr();

            /**
             * A new comparison is generated
             */
            List<Expr> operands = new ArrayList<Expr>();
            operands.add(ending);
            operands.add(literal);

            xpath = String.format("%s[%s]", xpath,
                    ComparisonExpr.getXPath(((ComparisonExpr) predicate).getOperator(), operands, false));
            xpath = String.format("%s%s", context.getBaseExpression().getProlog(), xpath);

            PathExpression other = new PathExpression(xpath);
            return new XPathRestriction(propertyName, (Step) other.getRelativePath().getFirstExpr());
        }

        if (((StepExpr) last.getStep()).hasPredicates())
            throw new ApplicationException(String.format(
                    "Comparisons against Hibernate properties may not have an underlying step [] with predicates",
                    last.getStep()));

        logger.debug("Predicate is comparison [{}] against property [{}]",
                ((ComparisonExpr) predicate).getOperator().name(), propertyName);

        switch (((ComparisonExpr) predicate).getOperator()) {
        case ValueEquals:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.eq(propertyName, literal.getValue().getJavaValue());
        case ValueGreaterThan:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.gt(propertyName, literal.getValue().getJavaValue());
        case ValueGreaterThanOrEquals:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.ge(propertyName, literal.getValue().getJavaValue());
        case ValueLessThan:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.lt(propertyName, literal.getValue().getJavaValue());
        case ValueLessThanOrEquals:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.le(propertyName, literal.getValue().getJavaValue());
        case ValueNotEquals:
            logger.debug("Value: {}", literal.getValue().getJavaValue());
            return Restrictions.ne(propertyName, literal.getValue().getJavaValue());
        case GeneralEquals:
            /**
             * If atomic (not a sequence) then the 'in' restriction is not
             * usable (defaults to 'eq' restriction) since the argument is
             * an array of objects.
             */
            if (literal.isAtomic()) {
                logger.debug("Value: {}", literal.getValue().getJavaValue());
                return Restrictions.eq(propertyName, literal.getValue().getJavaValue());
            }

            logger.debug("Values: {}", literal.getValues());

            Object[] javaValues = new Object[literal.getValues().length];
            for (int index = 0; index < literal.getValues().length; index++)
                javaValues[index] = ((com.klistret.cmdb.utility.saxon.Value) literal.getValues()[index])
                        .getJavaValue();

            return Restrictions.in(propertyName, javaValues);
        case Matches:
            if (((ComparisonExpr) predicate).getOperands().size() != 2)
                throw new ApplicationException(
                        String.format("Matches function [%s] expects 2 operands", predicate));

            logger.debug("Value: {}", literal.getValue().getText());
            return Restrictions.ilike(propertyName, literal.getValue().getText(), MatchMode.EXACT);
        case Exists:
            if (((ComparisonExpr) predicate).getOperands().size() != 1)
                throw new ApplicationException(
                        String.format("Exists function [%s] expects only 1 operand", predicate));

            return Restrictions.isNotNull(propertyName);
        case Empty:
            if (((ComparisonExpr) predicate).getOperands().size() != 1)
                throw new ApplicationException(
                        String.format("Empty function [%s] expects only 1 operand", predicate));

            return Restrictions.isNull(propertyName);
        default:
            throw new ApplicationException(
                    String.format("Unexpected comparison operator [%s] handling predicates",
                            ((ComparisonExpr) predicate).getOperator()));
        }

    default:
        throw new ApplicationException(String.format("Unexpected expr [%s] type for predicate", predicate));
    }
}

From source file:com.liferay.portal.workflow.jbpm.dao.CustomSession.java

License:Open Source License

protected void addSearchByUserRolesCriterion(Criteria criteria, Boolean searchByUserRoles,
        ServiceContext serviceContext) throws SystemException {

    if (searchByUserRoles == null) {
        return;/*  w  w w  .j  a  v a 2s .  c o m*/
    }

    Criteria assigneesCriteria = criteria.createCriteria("assignees");

    if (!searchByUserRoles) {
        assigneesCriteria.add(Restrictions.eq("assigneeClassName", User.class.getName()));
        assigneesCriteria.add(Restrictions.eq("assigneeClassPK", serviceContext.getUserId()));

        return;
    }

    List<Long> roleIds = RoleRetrievalUtil.getRoleIds(serviceContext);

    List<UserGroupRole> userGroupRoles = UserGroupRoleLocalServiceUtil
            .getUserGroupRoles(serviceContext.getUserId());

    if (userGroupRoles.isEmpty()) {
        assigneesCriteria.add(Restrictions.eq("assigneeClassName", Role.class.getName()));
        assigneesCriteria.add(Restrictions.in("assigneeClassPK", roleIds.toArray(new Long[roleIds.size()])));
    } else {
        Junction junction = Restrictions.disjunction();

        junction.add(Restrictions.and(Restrictions.eq("assigneeClassName", Role.class.getName()),
                Restrictions.in("assigneeClassPK", roleIds.toArray(new Long[roleIds.size()]))));

        for (UserGroupRole userGroupRole : userGroupRoles) {
            junction.add(Restrictions.and(Restrictions.eq("groupId", userGroupRole.getGroupId()),
                    Restrictions.and(Restrictions.eq("assigneeClassName", Role.class.getName()),
                            Restrictions.eq("assigneeClassPK", userGroupRole.getRoleId()))));
        }

        assigneesCriteria.add(junction);
    }
}

From source file:com.lm.lic.manager.hibernate.RequestForLicenseDAO.java

public Integer findNumIsvGoodSales(String isvId, String store, Date startDate, Date endDate) {
    Integer numSales = 0;//from   ww w  .  j a v a 2 s .c  om
    try {
        Long lisvid = Long.parseLong(isvId);
        Criteria criteria = getSession().createCriteria(RequestForLicense.class);

        Criterion isvIdCrit = Restrictions.eq("isv.id", lisvid);
        Criterion requestorCrit = Restrictions.eq("requestor", store);

        LogicalExpression andExp = Restrictions.and(isvIdCrit, requestorCrit);
        criteria.add(andExp);

        addDateRangeRestrictions(TIME_REQUESTED, startDate, endDate, criteria);

        criteria.setProjection(Projections.rowCount());
        numSales = (Integer) criteria.list().get(0);
    } catch (RuntimeException re) {
        log.error("find by property name failed", re);
        throw re;
    }
    return numSales;
}

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

License:Open Source License

/**
 * Alle offenen Bestellungen fuer einen bestimmten Mandanten drucken.
 * // w  w  w.  j  av 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.fertigung.ejbfac.FertigungReportFacBean.java

License:Open Source License

public JasperPrintLP printFertigungsbegleitschein(Integer losIId, Boolean bStammtVonSchnellanlage,
        TheClientDto theClientDto) throws EJBExceptionLP {
    Session session = null;/*from w ww .j a v a  2s.  co  m*/
    try {
        this.useCase = UC_FERTIGUNGSBEGLEITSCHEIN;
        this.index = -1;
        // Los holen
        LosDto losDto = getFertigungFac().losFindByPrimaryKey(losIId);
        if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ANGELEGT)) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_NOCH_NICHT_AUSGEGEBEN, "");
        } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_STORNIERT)) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_STORNIERT, "");
        } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT)) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_BEREITS_ERLEDIGT, "");
        }

        // Hole Parameter UNTERDRUECKE_ARTIKELNR_NULLTAETIGKEIT
        String artikelnrZuUnterdruecken = null;
        ParametermandantDto parameterNulltaetigkeit = getParameterFac().getMandantparameter(
                theClientDto.getMandant(), ParameterFac.KATEGORIE_ALLGEMEIN,
                ParameterFac.PARAMETER_UNTERDRUECKE_ARTIKELNR_NULLTAETIGKEIT);
        if (parameterNulltaetigkeit.getCWert() != null && !parameterNulltaetigkeit.getCWert().equals("")
                && !parameterNulltaetigkeit.getCWert().equals(" ")) {
            artikelnrZuUnterdruecken = parameterNulltaetigkeit.getCWert();
        }

        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        Criteria c = session.createCriteria(FLRLossollarbeitsplan.class);
        if (artikelnrZuUnterdruecken != null) {
            c.createAlias(FertigungFac.FLR_LOSSOLLARBEITSPLAN_FLRARTIKEL, "a");
            c.add(Restrictions.not(
                    Restrictions.and(Restrictions.isNotNull(FertigungFac.FLR_LOSSOLLARBEITSPLAN_MASCHINE_I_ID),
                            Restrictions.eq("a.c_nr", artikelnrZuUnterdruecken))));
        }
        c.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLARBEITSPLAN_LOS_I_ID, losIId));
        // Sortierung nach Arbeitsgang
        c.addOrder(Order.asc(FertigungFac.FLR_LOSSOLLARBEITSPLAN_I_ARBEITSGANGNUMMER));
        c.addOrder(Order.asc(FertigungFac.FLR_LOSSOLLARBEITSPLAN_I_UNTERARBEITSGANG));
        List<?> list = c.list();

        int iSizeMaterial = 0;
        ParametermandantDto parameterMaterial = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_FERTIGUNGSBEGLEITSCHEIN_MIT_MATERIAL);
        short iMaterial = Short.parseShort(parameterMaterial.getCWert());
        boolean bMitMaterial = Helper.short2boolean(iMaterial);
        if (bMitMaterial) {
            // Hier Material einfuegen
            Object[][] material = getDataAusgabeListe(new Integer[] { losIId }, Helper.SORTIERUNG_NACH_IDENT,
                    true, false, null, theClientDto);

            if (material == null) {
                iSizeMaterial = 0;
            } else {
                iSizeMaterial = material.length;
            }

            data = new Object[list.size() + material.length][BEGL_SPALTENANZAHL];
            for (int i = 0; i < iSizeMaterial; i++) {
                data[i][BEGL_IST_MATERIAL] = new Boolean(true);
                data[i][BEGL_MATERIAL_ARTIKELKLASSE] = material[i][AUSG_ARTIKELKLASSE];
                data[i][BEGL_MATERIAL_AUSGABE] = material[i][AUSG_AUSGABE];
                data[i][BEGL_MATERIAL_BEZEICHNUNG] = material[i][AUSG_BEZEICHNUNG];
                data[i][BEGL_MATERIAL_EINHEIT] = material[i][AUSG_EINHEIT];
                data[i][BEGL_MATERIAL_FARBCODE] = material[i][AUSG_FARBCODE];
                data[i][BEGL_MATERIAL_IDENT] = material[i][AUSG_IDENT];
                data[i][BEGL_MATERIAL_LAGER] = material[i][AUSG_LAGER];
                data[i][BEGL_MATERIAL_LAGERORT] = material[i][AUSG_LAGERORT];
                data[i][BEGL_MATERIAL_MENGE] = material[i][AUSG_MENGE];
                data[i][BEGL_MATERIAL_MONTAGEART] = material[i][AUSG_MONTAGEART];
                data[i][BEGL_MATERIAL_SCHALE] = material[i][AUSG_SCHALE];
                data[i][BEGL_MATERIAL_ZUSATZBEZEICHNUNG] = material[i][AUSG_ZUSATZBEZEICHNUNG];
                data[i][BEGL_MATERIAL_ZUSATZBEZEICHNUNG2] = material[i][AUSG_ZUSATZBEZEICHNUNG2];
                data[i][BEGL_MATERIAL_HOEHE] = material[i][AUSG_HOEHE];
                data[i][BEGL_MATERIAL_BREITE] = material[i][AUSG_BREITE];
                data[i][BEGL_MATERIAL_TIEFE] = material[i][AUSG_TIEFE];
                data[i][BEGL_MATERIAL_MATERIAL] = material[i][AUSG_MATERIAL];
                data[i][BEGL_BAUFORM] = material[i][AUSG_BAUFORM];
                data[i][BEGL_VERPACKUNGSART] = material[i][AUSG_VERPACKUNGSART];
                data[i][BEGL_GEWICHTKG] = material[i][AUSG_GEWICHTKG];
                data[i][BEGL_MATERIAL_REVISION] = material[i][AUSG_REVISION];
                data[i][BEGL_MATERIAL_INDEX] = material[i][AUSG_INDEX];
                data[i][BEGL_NURZURINFORMATION] = material[i][AUSG_NUR_ZUR_INFO];

            }

        } else {
            data = new Object[list.size()][BEGL_SPALTENANZAHL];
        }

        int i = 0;
        for (Iterator<?> iter = list.iterator(); iter.hasNext(); i++) {
            FLRLossollarbeitsplan item = (FLRLossollarbeitsplan) iter.next();
            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(item.getFlrartikel().getI_id(),
                    theClientDto);
            data[i + iSizeMaterial][BEGL_IST_MATERIAL] = new Boolean(false);
            data[i + iSizeMaterial][BEGL_IDENT] = artikelDto.getCNr();
            data[i + iSizeMaterial][BEGL_NURZURINFORMATION] = Helper.short2Boolean(artikelDto.getbNurzurinfo());
            data[i + iSizeMaterial][BEGL_BEZEICHNUNG] = artikelDto.getArtikelsprDto().getCBez();
            data[i + iSizeMaterial][BEGL_ZUSATZBEZEICHNUNG] = artikelDto.getArtikelsprDto().getCZbez();
            data[i + iSizeMaterial][BEGL_ZUSATZBEZEICHNUNG2] = artikelDto.getArtikelsprDto().getCZbez2();
            data[i + iSizeMaterial][BEGL_ARBEITSGANG] = item.getI_arbeitsgangsnummer();
            data[i + iSizeMaterial][BEGL_UNTERARBEITSGANG] = item.getI_unterarbeitsgang();
            data[i + iSizeMaterial][BEGL_AGART] = item.getAgart_c_nr();
            data[i + iSizeMaterial][BEGL_AUFSPANNUNG] = item.getI_aufspannung();
            data[i + iSizeMaterial][BEGL_MATERIAL_REVISION] = artikelDto.getCRevision();
            data[i + iSizeMaterial][BEGL_MATERIAL_INDEX] = artikelDto.getCIndex();
            data[i + iSizeMaterial][BEGL_FERTIG] = Helper.short2Boolean(item.getB_fertig());

            // Ein Mandantenparameter entscheidet, ob auch die Sollzeiten
            // gedruckt werden
            ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_FERTIGUNG,
                    ParameterFac.FERTIGUNG_FERTIGUNGSBEGLEITSCHEIN_MIT_SOLLDATEN);
            short iValue = Short.parseShort(parameter.getCWert());
            boolean bDruckeSolldaten = Helper.short2boolean(iValue);
            if (bDruckeSolldaten) {
                data[i + iSizeMaterial][BEGL_RUESTZEIT] = item.getL_ruestzeit()
                        .divide(new BigDecimal(1000 * 60), 4, BigDecimal.ROUND_HALF_EVEN);
                data[i + iSizeMaterial][BEGL_STUECKZEIT] = item.getL_stueckzeit()
                        .divide(new BigDecimal(1000 * 60), 4, BigDecimal.ROUND_HALF_EVEN);
                data[i + iSizeMaterial][BEGL_GESAMTZEIT] = item.getN_gesamtzeit();
            }
            LossollarbeitsplanDto l = getFertigungFac().lossollarbeitsplanFindByPrimaryKey(item.getI_id());
            StringBuffer sKommentar = new StringBuffer();
            if (l.getCKomentar() != null) {
                sKommentar.append(l.getCKomentar() + "\n");
            }
            if (l.getXText() != null) {
                sKommentar.append(l.getXText());
            }
            data[i + iSizeMaterial][BEGL_KOMMENTAR] = sKommentar.toString();
            // Maschinenzeiterfassung
            if (l.getMaschineIId() != null) {
                MaschineDto maschineDto = getZeiterfassungFac().maschineFindByPrimaryKey(l.getMaschineIId());
                data[i + iSizeMaterial][BEGL_MASCHINE] = maschineDto.getCIdentifikationsnr();
                data[i + iSizeMaterial][BEGL_MASCHINE_BEZEICHNUNG] = maschineDto.getCBez();
            }

            if (l.getLossollmaterialIId() != null) {
                LossollmaterialDto posDto = getFertigungFac()
                        .lossollmaterialFindByPrimaryKey(l.getLossollmaterialIId());
                ArtikelDto artikelDtoFremdmaterial = getArtikelFac()
                        .artikelFindByPrimaryKeySmall(posDto.getArtikelIId(), theClientDto);
                data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKEL] = artikelDtoFremdmaterial.getCNr();
                if (artikelDtoFremdmaterial.getArtikelsprDto() != null) {
                    data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKELBEZEICHNUNG] = artikelDtoFremdmaterial
                            .getArtikelsprDto().getCBez();
                    data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKELKURZBEZEICHNUNG] = artikelDtoFremdmaterial
                            .getArtikelsprDto().getCKbez();
                    data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKELZUSATZBEZEICHNUNG] = artikelDtoFremdmaterial
                            .getArtikelsprDto().getCZbez();
                    data[i + iSizeMaterial][BEGL_FREMDMATERIAL_ARTIKELZUSATZBEZEICHNUNG2] = artikelDtoFremdmaterial
                            .getArtikelsprDto().getCZbez2();
                }
                data[i + iSizeMaterial][BEGL_FREMDMATERIAL_SOLLMENGE] = posDto.getNMenge();

                LoslagerentnahmeDto[] laeger = getFertigungFac()
                        .loslagerentnahmeFindByLosIId(posDto.getLosIId());
                if (laeger.length > 0) {
                    ArtikellagerplaetzeDto artikellagerplaetzeDto = getLagerFac()
                            .artikellagerplaetzeFindByArtikelIIdLagerIId(artikelDtoFremdmaterial.getIId(),
                                    laeger[0].getLagerIId());
                    if (artikellagerplaetzeDto != null && artikellagerplaetzeDto.getLagerplatzDto() != null) {
                        data[i + iSizeMaterial][BEGL_FREMDMATERIAL_LAGERORT] = artikellagerplaetzeDto
                                .getLagerplatzDto().getCLagerplatz();
                    }
                }

            }

        }
        Map<String, Object> mapParameter = new TreeMap<String, Object>();
        mapParameter.put("P_ANGELEGT", new java.util.Date(losDto.getTAnlegen().getTime()));
        String sAuftragsnummer;
        String sInternerKommentar = null;
        String sKunde;
        String sKundeLieferadresse;
        Timestamp dLiefertermin;
        String sLieferart;
        String sAbteilung = null;
        String sSpediteur = null;
        Boolean bPoenale = Boolean.FALSE;
        Boolean bRoHs = Boolean.FALSE;
        if (losDto.getAuftragIId() != null) {
            // Auftrag holen
            AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());
            sAuftragsnummer = auftragDto.getCNr();
            sLieferart = getLocaleFac().lieferartFindByIIdLocaleOhneExc(auftragDto.getLieferartIId(),
                    theClientDto.getLocUi(), theClientDto);

            if (auftragDto.getSpediteurIId() != null) {
                sSpediteur = getMandantFac().spediteurFindByPrimaryKey(auftragDto.getSpediteurIId())
                        .getCNamedesspediteurs();
            }

            bPoenale = Helper.short2Boolean(auftragDto.getBPoenale());
            bRoHs = Helper.short2Boolean(auftragDto.getBRoHs());
            // Internen Kommentar aus dem Auftrag, abhaengig von einem
            // Mandantenparameter
            ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_FERTIGUNG,
                    ParameterFac.PARAMETER_KOMMENTAR_AM_FERTIGUNGSBEGLEITSCHEIN);
            short iValue = Short.parseShort(parameter.getCWert());
            boolean bDruckeKommentar = Helper.short2boolean(iValue);
            if (bDruckeKommentar) {
                sInternerKommentar = auftragDto.getXInternerkommentar();
            }
            // Kunde holen
            KundeDto kundeDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                    theClientDto);

            sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();

            KundeDto kundeDtoLieferadresse = getKundeFac()
                    .kundeFindByPrimaryKey(auftragDto.getKundeIIdLieferadresse(), theClientDto);
            sKundeLieferadresse = kundeDtoLieferadresse.getPartnerDto().getCName1nachnamefirmazeile1();

            sAbteilung = kundeDto.getPartnerDto().getCName3vorname2abteilung();

            if (losDto.getAuftragpositionIId() != null) {
                AuftragpositionDto aufposDto = getAuftragpositionFac()
                        .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId());
                if (aufposDto.getTUebersteuerbarerLiefertermin() != null) {
                    dLiefertermin = aufposDto.getTUebersteuerbarerLiefertermin();
                } else {
                    dLiefertermin = auftragDto.getDLiefertermin();
                }
            } else {
                dLiefertermin = auftragDto.getDLiefertermin();
            }
        } else {
            sAuftragsnummer = "";

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

                sKunde = kundeDto.getPartnerDto().getCName1nachnamefirmazeile1();
            } else {
                sKunde = "";
            }

            sKundeLieferadresse = "";
            dLiefertermin = null;
            sLieferart = "";
            sSpediteur = "";
        }

        mapParameter.put("P_AUFTRAGNUMMER", sAuftragsnummer);
        mapParameter.put("P_AUFTRAG_INTERNERKOMMENTAR", sInternerKommentar);
        mapParameter.put("P_AUFTRAG_KUNDE_ABTEILUNG", sAbteilung);
        mapParameter.put("P_LIEFERART", sLieferart);
        mapParameter.put("P_SPEDITEUR", sSpediteur);
        mapParameter.put("P_POENALE", bPoenale);
        mapParameter.put("P_ROHS", bRoHs);
        KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(losDto.getKostenstelleIId());
        mapParameter.put("P_KOSTENSTELLENUMMER", kstDto.getCNr());
        mapParameter.put("P_KUNDE", sKunde);
        mapParameter.put("P_KUNDE_LIEFERADRESSE", sKundeLieferadresse);
        mapParameter.put("P_LOSGROESSE", losDto.getNLosgroesse());

        mapParameter.put("P_LOSKLASSEN", getLosLosKlassenAlsString(losDto.getIId()));

        mapParameter.put("P_LOSNUMMER", losDto.getCNr());
        mapParameter.put("P_PRODUKTIONSBEGINN", losDto.getTProduktionsbeginn());
        mapParameter.put("P_PRODUKTIONSENDE", losDto.getTProduktionsende());
        GregorianCalendar gc = new GregorianCalendar();
        gc.setTime(losDto.getTProduktionsende());
        mapParameter.put("P_PRODUKTIONSENDE_KW", new Integer(gc.get(Calendar.WEEK_OF_YEAR)));

        mapParameter.put("P_LIEFERTERMIN", dLiefertermin);

        // Fertigungsort
        if (losDto.getPartnerIIdFertigungsort() != null) {
            PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(losDto.getPartnerIIdFertigungsort(),
                    theClientDto);
            mapParameter.put("P_FERTIGUNGSORT", partnerDto.formatTitelAnrede());
        }

        // Erstlos
        mapParameter.put("P_ERSTLOS", new Boolean(istErstlos(losDto, theClientDto)));

        boolean bDruckeUeberschriftMaterial = false;
        if (bMitMaterial == true && iSizeMaterial > 0) {
            bDruckeUeberschriftMaterial = true;
        }

        mapParameter.put("P_DRUCKEUEBERSCHRIFTMATERIAL", new Boolean(bDruckeUeberschriftMaterial));

        ArrayList<Object> images = new ArrayList<Object>();
        String sLosStuecklisteArtikelKommentar = "";
        // Bild einfuegen
        String sMengenEinheit = "";
        if (losDto.getStuecklisteIId() != null) {
            StuecklisteDto stuecklisteDto = getStuecklisteFac()
                    .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
            // Einheit
            if (stuecklisteDto.getArtikelDto() != null) {
                if (stuecklisteDto.getArtikelDto().getEinheitCNr() != null) {
                    sMengenEinheit = stuecklisteDto.getArtikelDto().getEinheitCNr();
                }
            }

            // Sperren
            String sperren = getArtikelFac().getArtikelsperrenText(stuecklisteDto.getArtikelIId());

            mapParameter.put("P_STUECKLISTESPERRSTATUS", sperren);

            // Abmessungen
            GeometrieDto geometrieDto = stuecklisteDto.getArtikelDto().getGeometrieDto();
            if (geometrieDto != null) {
                mapParameter.put(P_ARTIKEL_BREITE, geometrieDto.getFBreite());
                mapParameter.put(P_ARTIKEL_HOEHE, geometrieDto.getFHoehe());
                mapParameter.put(P_ARTIKEL_TIEFE, geometrieDto.getFTiefe());
            }
            // Bauform
            VerpackungDto verpackungDto = stuecklisteDto.getArtikelDto().getVerpackungDto();
            if (verpackungDto != null) {
                mapParameter.put("P_ARTIKEL_BAUFORM", verpackungDto.getCBauform());
                mapParameter.put("P_ARTIKEL_VERPACKUNGSART", verpackungDto.getCVerpackungsart());
            }

            mapParameter.put("P_INDEX", stuecklisteDto.getArtikelDto().getCIndex());
            mapParameter.put("P_REVISION", stuecklisteDto.getArtikelDto().getCRevision());

            ArtikelkommentarDto[] artikelkommentarDto = getArtikelkommentarFac()
                    .artikelkommentardruckFindByArtikelIIdBelegartCNr(stuecklisteDto.getArtikelIId(),
                            LocaleFac.BELEGART_LOS, theClientDto.getLocUiAsString(), theClientDto);

            if (artikelkommentarDto != null && artikelkommentarDto.length > 0) {

                for (int j = 0; j < artikelkommentarDto.length; j++) {
                    if (artikelkommentarDto[j].getArtikelkommentarsprDto() != null) {
                        // Text Kommentar
                        if (artikelkommentarDto[j].getDatenformatCNr().trim()
                                .indexOf(MediaFac.DATENFORMAT_MIMETYPEART_TEXT) != -1) {
                            if (sLosStuecklisteArtikelKommentar == "") {
                                sLosStuecklisteArtikelKommentar += artikelkommentarDto[j]
                                        .getArtikelkommentarsprDto().getXKommentar();
                            } else {
                                sLosStuecklisteArtikelKommentar += "\n"
                                        + artikelkommentarDto[j].getArtikelkommentarsprDto().getXKommentar();
                            }
                        } else if (artikelkommentarDto[j].getDatenformatCNr()
                                .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_JPEG)
                                || artikelkommentarDto[j].getDatenformatCNr()
                                        .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_PNG)
                                || artikelkommentarDto[j].getDatenformatCNr()
                                        .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_GIF)) {
                            byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();
                            if (bild != null) {
                                java.awt.Image myImage = Helper.byteArrayToImage(bild);
                                images.add(myImage);
                            }
                        } else if (artikelkommentarDto[j].getDatenformatCNr()
                                .equals(MediaFac.DATENFORMAT_MIMETYPE_IMAGE_TIFF)) {

                            byte[] bild = artikelkommentarDto[j].getArtikelkommentarsprDto().getOMedia();

                            java.awt.Image[] tiffs = Helper.tiffToImageArray(bild);
                            if (tiffs != null) {
                                for (int k = 0; k < tiffs.length; k++) {
                                    images.add(tiffs[k]);
                                }
                            }

                        }
                    }
                }
            }
        }
        mapParameter.put("P_MENGENEINHEIT", sMengenEinheit);
        mapParameter.put("P_PROJEKT", losDto.getCProjekt());
        mapParameter.put("P_LOSKOMMENTAR", losDto.getCKommentar());
        mapParameter.put("P_LOSLANGTEXT", losDto.getXText());

        FertigungsgruppeDto fertGruppeDto = getStuecklisteFac()
                .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId());
        mapParameter.put("P_FERTIGUNGSGRUPPE", fertGruppeDto.getCBez());

        // Materialliste?
        if (losDto.getStuecklisteIId() != null) {
            StuecklisteDto stkDto = getStuecklisteFac().stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(),
                    theClientDto);

            if (sLosStuecklisteArtikelKommentar != "") {
                mapParameter.put("P_STUECKLISTEARTIKELKOMMENTAR",
                        Helper.formatStyledTextForJasper(sLosStuecklisteArtikelKommentar));
            }

            mapParameter.put("P_STUECKLISTEBEZEICHNUNG", stkDto.getArtikelDto().getArtikelsprDto().getCBez());

            mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG",
                    stkDto.getArtikelDto().getArtikelsprDto().getCZbez());
            mapParameter.put("P_STUECKLISTEZUSATZBEZEICHNUNG2",
                    stkDto.getArtikelDto().getArtikelsprDto().getCZbez2());

            mapParameter.put("P_STUECKLISTEKURZBEZEICHNUNG",
                    stkDto.getArtikelDto().getArtikelsprDto().getCKbez());
            mapParameter.put("P_STUECKLISTEREFERENZNUMMER", stkDto.getArtikelDto().getCReferenznr());

            mapParameter.put("P_STUECKLISTENUMMER", stkDto.getArtikelDto().getCNr());

            mapParameter.put("P_STUECKLISTE_GEWICHTKG", stkDto.getArtikelDto().getFGewichtkg());

            if (stkDto.getArtikelDto().getVerpackungDto() != null) {
                mapParameter.put("P_STUECKLISTE_BAUFORM",
                        stkDto.getArtikelDto().getVerpackungDto().getCBauform());
                mapParameter.put("P_STUECKLISTE_VERPACKUNGSART",
                        stkDto.getArtikelDto().getVerpackungDto().getCVerpackungsart());
            }

            if (stkDto.getArtikelDto().getGeometrieDto() != null) {
                mapParameter.put("P_STUECKLISTE_BREITETEXT",
                        stkDto.getArtikelDto().getGeometrieDto().getCBreitetext());
                mapParameter.put("P_STUECKLISTE_BREITE", stkDto.getArtikelDto().getGeometrieDto().getFBreite());
                mapParameter.put("P_STUECKLISTE_HOEHE", stkDto.getArtikelDto().getGeometrieDto().getFHoehe());
                mapParameter.put("P_STUECKLISTE_TIEFE", stkDto.getArtikelDto().getGeometrieDto().getFTiefe());
            }

            // Stuecklisteneigenschaften
            StuecklisteeigenschaftDto[] stuecklisteeigenschaftDtos = getStuecklisteFac()
                    .stuecklisteeigenschaftFindByStuecklisteIId(losDto.getStuecklisteIId());
            ArrayList<Object[]> al = new ArrayList<Object[]>();
            for (int j = 0; j < stuecklisteeigenschaftDtos.length; j++) {
                StuecklisteeigenschaftDto dto = stuecklisteeigenschaftDtos[j];

                Object[] o = new Object[2];
                String sStklEigenschaftArt = dto.getStuecklisteeigenschaftartDto().getCBez();
                o[0] = sStklEigenschaftArt;
                o[1] = dto.getCBez();
                al.add(o);

                // Index und Materialplatz auch einzeln an Report uebergeben
                if (sStklEigenschaftArt.equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_INDEX)) {
                    mapParameter.put(P_STUECKLISTENEIGENSCHAFT_INDEX, dto.getCBez());
                }
                if (sStklEigenschaftArt
                        .equals(StuecklisteReportFac.REPORT_STUECKLISTE_EIGENSCHAFTEN_MATERIALPLATZ)) {
                    mapParameter.put(P_STUECKLISTENEIGENSCHAFT_MATERIALPLATZ, dto.getCBez());
                }

            }

            if (stuecklisteeigenschaftDtos.length > 0) {
                String[] fieldnames = new String[] { "F_EIGENSCHAFTART", "F_BEZEICHNUNG" };
                Object[][] dataSub = new Object[al.size()][fieldnames.length];
                dataSub = (Object[][]) al.toArray(dataSub);

                mapParameter.put("DATENSUBREPORT", new LPDatenSubreport(dataSub, fieldnames));
            }

        } else {
            mapParameter.put("P_STUECKLISTEBEZEICHNUNG", losDto.getCProjekt());
            mapParameter.put("P_STUECKLISTENUMMER", getTextRespectUISpr("fert.materialliste",
                    theClientDto.getMandant(), theClientDto.getLocUi()));
        }

        mapParameter.put("P_SCHNELLANLAGE", bStammtVonSchnellanlage);

        // Formularnummer anhaengen, wenn vorhanden
        String report = FertigungReportFac.REPORT_FERTIGUNGSBEGLEITSCHEIN;

        if (fertGruppeDto.getIFormularnummer() != null) {
            report = report.replace(".", fertGruppeDto.getIFormularnummer() + ".");
        }

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

        JasperPrintLP print = getReportPrint();
        Integer cachedReportvariante = theClientDto.getReportvarianteIId();
        if (images != null) {
            for (int k = 0; k < images.size(); k++) {
                mapParameter = new HashMap<String, Object>();
                mapParameter.put("P_BILD", images.get(k));
                this.useCase = UC_GANZSEITIGESBILD;
                this.index = -1;
                data = new Object[1][1];
                data[0][0] = images.get(k);
                theClientDto.setReportvarianteIId(cachedReportvariante);
                initJRDS(mapParameter, REPORT_MODUL_ALLGEMEIN, REPORT_GANZSEITIGESBILD,
                        theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
                print = Helper.addReport2Report(print, getReportPrint().getPrint());
            }
        }
        return print;
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
        return null;
    } finally {
        closeSession(session);
    }
}

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.
            }// w  w  w. j a v a2  s .  c o m
        }
    }
    List<BuchungsjournalExportDatevBuchung> buchungen = new ArrayList<BuchungsjournalExportDatevBuchung>();
    Session session = FLRSessionFactory.getFactory().openSession();
    Criteria c = session.createCriteria(FLRFinanzBuchung.class);
    c.createAlias("flrkostenstelle", "ks");
    if (!mitAutoB)
        c.add(Restrictions.like("b_autombuchung", 0));
    if (!mitAutoEB)
        c.add(Restrictions.like("b_autombuchungeb", 0));
    if (!mitManEB)
        c.add(Restrictions.not(Restrictions.like("buchungsart_c_nr", FinanzFac.BUCHUNGSART_EROEFFNUNG)));
    c.add(Restrictions.ge("d_buchungsdatum", von)).add(Restrictions.le("d_buchungsdatum", bis))
            .add(Restrictions.like("ks.mandant_c_nr", mandant)).addOrder(Order.asc("d_buchungsdatum"))
            .addOrder(Order.asc("c_belegnummer"));
    Iterator<?> iter = c.list().iterator();
    while (iter.hasNext()) {
        FLRFinanzBuchung hvBuchung = (FLRFinanzBuchung) iter.next();
        @SuppressWarnings("unchecked")
        List<FLRFinanzBuchungDetail> haben = session.createCriteria(FLRFinanzBuchungDetail.class)
                .createAlias("flrbuchung", "b").add(Restrictions.eq("buchung_i_id", hvBuchung.getI_id()))
                .add(Restrictions.or(
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.HabenBuchung),
                                Restrictions.gt("n_betrag", BigDecimal.ZERO)),
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.SollBuchung),
                                Restrictions.lt("n_betrag", BigDecimal.ZERO))))
                .add(Restrictions.or(Restrictions.eq("b.buchungsart_c_nr", FinanzFac.BUCHUNGSART_EROEFFNUNG),
                        Restrictions.not(Restrictions.in("konto_i_id", mitlaufendeKonten))))
                .addOrder(Order.asc("i_id")).list();
        @SuppressWarnings("unchecked")
        List<FLRFinanzBuchungDetail> soll = session.createCriteria(FLRFinanzBuchungDetail.class)
                .createAlias("flrbuchung", "b").add(Restrictions.eq("buchung_i_id", hvBuchung.getI_id()))
                .add(Restrictions.or(
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.SollBuchung),
                                Restrictions.gt("n_betrag", BigDecimal.ZERO)),
                        Restrictions.and(Restrictions.like("buchungdetailart_c_nr", BuchenFac.HabenBuchung),
                                Restrictions.lt("n_betrag", BigDecimal.ZERO))))
                .add(Restrictions.or(Restrictions.eq("b.buchungsart_c_nr", FinanzFac.BUCHUNGSART_EROEFFNUNG),
                        Restrictions.not(Restrictions.in("konto_i_id", mitlaufendeKonten))))
                .addOrder(Order.asc("i_id")).list();

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

        //         zuBuchen = getBuchungenKorrekteUst(zuBuchen, mwstKonten);

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

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

    return buchungen;
}