com.lp.server.personal.ejbfac.ZeiterfassungReportFacBean.java Source code

Java tutorial

Introduction

Here is the source code for com.lp.server.personal.ejbfac.ZeiterfassungReportFacBean.java

Source

/*******************************************************************************
 * HELIUM V, Open Source ERP software for sustained success
 * at small and medium-sized enterprises.
 * Copyright (C) 2004 - 2014 HELIUM V IT-Solutions GmbH
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published 
 * by the Free Software Foundation, either version 3 of theLicense, or 
 * (at your option) any later version.
 * 
 * According to sec. 7 of the GNU Affero General Public License, version 3, 
 * the terms of the AGPL are supplemented with the following terms:
 * 
 * "HELIUM V" and "HELIUM 5" are registered trademarks of 
 * HELIUM V IT-Solutions GmbH. The licensing of the program under the 
 * AGPL does not imply a trademark license. Therefore any rights, title and
 * interest in our trademarks remain entirely with us. If you want to propagate
 * modified versions of the Program under the name "HELIUM V" or "HELIUM 5",
 * you may only do so if you have a written permission by HELIUM V IT-Solutions 
 * GmbH (to acquire a permission please contact HELIUM V IT-Solutions
 * at trademark@heliumv.com).
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * Contact: developers@heliumv.com
 ******************************************************************************/
package com.lp.server.personal.ejbfac;

import java.math.BigDecimal;
import java.rmi.RemoteException;
import java.sql.Timestamp;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.TreeMap;

import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.interceptor.Interceptors;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRField;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.lp.server.angebot.service.AngebotDto;
import com.lp.server.artikel.service.ArtikelDto;
import com.lp.server.artikel.service.BelegInfos;
import com.lp.server.auftrag.service.AuftragDto;
import com.lp.server.auftrag.service.AuftragpositionDto;
import com.lp.server.auftrag.service.AuftragzeitenDto;
import com.lp.server.fertigung.fastlanereader.generated.FLRLossollarbeitsplan;
import com.lp.server.fertigung.service.LosDto;
import com.lp.server.fertigung.service.LossollarbeitsplanDto;
import com.lp.server.partner.service.KundeDto;
import com.lp.server.partner.service.PartnerDto;
import com.lp.server.partner.service.PartnerFac;
import com.lp.server.personal.fastlanereader.ZeitdatenHandler;
import com.lp.server.personal.fastlanereader.generated.FLRMaschine;
import com.lp.server.personal.fastlanereader.generated.FLRMaschinenzeitdaten;
import com.lp.server.personal.fastlanereader.generated.FLRReise;
import com.lp.server.personal.fastlanereader.generated.FLRSonderzeiten;
import com.lp.server.personal.fastlanereader.generated.FLRTelefonzeiten;
import com.lp.server.personal.fastlanereader.generated.FLRZeitdaten;
import com.lp.server.personal.fastlanereader.generated.FLRZeitdatenLos;
import com.lp.server.personal.service.ArbeitszeitstatistikDto;
import com.lp.server.personal.service.BetriebskalenderDto;
import com.lp.server.personal.service.DiaetentagessatzDto;
import com.lp.server.personal.service.FahrzeugDto;
import com.lp.server.personal.service.MaschineDto;
import com.lp.server.personal.service.MaschinenerfolgReportDto;
import com.lp.server.personal.service.MaschinengruppeDto;
import com.lp.server.personal.service.MaschinenzeitdatenDto;
import com.lp.server.personal.service.PersonalDto;
import com.lp.server.personal.service.PersonalgehaltDto;
import com.lp.server.personal.service.ReiseDto;
import com.lp.server.personal.service.ReiseKomplettDto;
import com.lp.server.personal.service.SonderzeitenDto;
import com.lp.server.personal.service.TaetigkeitDto;
import com.lp.server.personal.service.TelefonzeitenDto;
import com.lp.server.personal.service.ZeitdatenDto;
import com.lp.server.personal.service.ZeiterfassungFac;
import com.lp.server.personal.service.ZeiterfassungFacAll;
import com.lp.server.personal.service.ZeiterfassungReportFac;
import com.lp.server.personal.service.ZeitmodelltagDto;
import com.lp.server.personal.service.ZeitstiftDto;
import com.lp.server.stueckliste.service.StuecklisteDto;
import com.lp.server.stueckliste.service.StuecklisteFac;
import com.lp.server.system.ejb.Belegart;
import com.lp.server.system.service.KostenstelleDto;
import com.lp.server.system.service.LocaleFac;
import com.lp.server.system.service.MandantDto;
import com.lp.server.system.service.ParameterFac;
import com.lp.server.system.service.ParametermandantDto;
import com.lp.server.system.service.TheClientDto;
import com.lp.server.util.HelperServer;
import com.lp.server.util.LPReport;
import com.lp.server.util.fastlanereader.FLRSessionFactory;
import com.lp.server.util.report.JasperPrintLP;
import com.lp.server.util.report.TimingInterceptor;
import com.lp.util.EJBExceptionLP;
import com.lp.util.Helper;
import com.lp.util.LPDatenSubreport;

@Stateless
@Interceptors(TimingInterceptor.class)
@TransactionAttribute(TransactionAttributeType.NEVER)
public class ZeiterfassungReportFacBean extends LPReport implements ZeiterfassungReportFac, JRDataSource {

    @PersistenceContext
    private EntityManager em;

    private String sAktuellerReport = null;
    private Object[][] data = null;

    private static int REPORT_ZESTIFTE_KENNUNG = 0;
    private static int REPORT_ZESTIFTE_MEHRFACHSTIFT = 1;
    private static int REPORT_ZESTIFTE_PERSONAL = 2;

    private static int REPORT_MASCHINENPRODUKTIVITAET_BELEG = 0;
    private static int REPORT_MASCHINENPRODUKTIVITAET_VON = 1;
    private static int REPORT_MASCHINENPRODUKTIVITAET_AUFTRAG = 2;
    private static int REPORT_MASCHINENPRODUKTIVITAET_PROJEKT = 3;
    private static int REPORT_MASCHINENPRODUKTIVITAET_STUECKLISTE = 4;
    private static int REPORT_MASCHINENPRODUKTIVITAET_STKLBEZEICHNUNG = 5;
    private static int REPORT_MASCHINENPRODUKTIVITAET_KUNDE = 6;
    private static int REPORT_MASCHINENPRODUKTIVITAET_KOSTEN = 7;
    private static int REPORT_MASCHINENPRODUKTIVITAET_BIS = 8;
    private static int REPORT_MASCHINENPRODUKTIVITAET_DAUER = 9;

    private static int REPORT_MASCHINENLISTE_INVENTARNUMMER = 0;
    private static int REPORT_MASCHINENLISTE_IDENTIFIKATIONSNUMMER = 1;
    private static int REPORT_MASCHINENLISTE_BEZEICHNUNG = 2;
    private static int REPORT_MASCHINENLISTE_KAUFDATUM = 3;
    private static int REPORT_MASCHINENLISTE_VERFUEGBARKEIT = 4;
    private static int REPORT_MASCHINENLISTE_AUTOENDE = 5;
    private static int REPORT_MASCHINENLISTE_MASCHINENGRUPPE = 6;
    private static int REPORT_MASCHINENLISTE_ZULETZT_GESTARTET_VON = 7;
    private static int REPORT_MASCHINENLISTE_ZULETZT_GESTARTET_UM = 8;
    private static int REPORT_MASCHINENLISTE_KOSTEN_ZUM_ZEITPUNKT = 9;

    private static int REPORT_MASCHINENZEITDATEN_VON = 0;
    private static int REPORT_MASCHINENZEITDATEN_BIS = 1;
    private static int REPORT_MASCHINENZEITDATEN_DAUER = 2;
    private static int REPORT_MASCHINENZEITDATEN_LOS = 3;
    private static int REPORT_MASCHINENZEITDATEN_PROJEKTBEZEICHNUNG = 4;
    private static int REPORT_MASCHINENZEITDATEN_KUNDE = 5;
    private static int REPORT_MASCHINENZEITDATEN_LOSARTIKELNR = 6;
    private static int REPORT_MASCHINENZEITDATEN_LOSARTIKELBEZ = 7;
    private static int REPORT_MASCHINENZEITDATEN_LOS_AG = 8;
    private static int REPORT_MASCHINENZEITDATEN_LOS_UAG = 9;
    private static int REPORT_MASCHINENZEITDATEN_ANZAHL_SPALTEN = 10;

    private static int REPORT_REISEZEITEN_TAG = 0;
    private static int REPORT_REISEZEITEN_BEGINN = 1;
    private static int REPORT_REISEZEITEN_ENDE = 2;
    private static int REPORT_REISEZEITEN_KOMMENTAR = 3;
    private static int REPORT_REISEZEITEN_PARTNER = 4;
    private static int REPORT_REISEZEITEN_ENTFERNUNG = 5;
    private static int REPORT_REISEZEITEN_LAND = 6;
    private static int REPORT_REISEZEITEN_SPESEN = 7;
    private static int REPORT_REISEZEITEN_DIAETEN = 8;
    private static int REPORT_REISEZEITEN_AUSLAND = 9;
    private static int REPORT_REISEZEITEN_ZAEHLER = 10;
    private static int REPORT_REISEZEITEN_ECHTESENDE = 12;
    private static int REPORT_REISEZEITEN_TAGESSATZ = 13;
    private static int REPORT_REISEZEITEN_STUNDENSATZ = 14;
    private static int REPORT_REISEZEITEN_MINDESTSATZ = 15;
    private static int REPORT_REISEZEITEN_ABSTUNDEN = 16;
    private static int REPORT_REISEZEITEN_FAHRZEUG = 17;
    private static int REPORT_REISEZEITEN_KENNZEICHEN = 18;
    private static int REPORT_REISEZEITEN_ANZAHL_SPALTEN = 19;

    private static int REPORT_FAHRTENBUCH_TAG = 0;
    private static int REPORT_FAHRTENBUCH_DATUM = 1;
    private static int REPORT_FAHRTENBUCH_KMBEGINN = 2;
    private static int REPORT_FAHRTENBUCH_KMENDE = 3;
    private static int REPORT_FAHRTENBUCH_STRECKE = 4;
    private static int REPORT_FAHRTENBUCH_KUNDE = 5;

    private static int REPORT_FAHRZEUGE_FAHRZEUG = 0;
    private static int REPORT_FAHRZEUGE_KENNZEICHEN = 1;
    private static int REPORT_FAHRZEUGE_KOSTEN = 2;
    private static int REPORT_FAHRZEUGE_BEGINN = 3;
    private static int REPORT_FAHRZEUGE_ENDE = 4;
    private static int REPORT_FAHRZEUGE_PARTNER = 5;
    private static int REPORT_FAHRZEUGE_LAND = 6;
    private static int REPORT_FAHRZEUGE_STRECKE = 7;
    private static int REPORT_FAHRZEUGE_PERSON = 8;
    private static int REPORT_FAHRZEUGE_ANZAHL_SPALTEN = 9;

    private static int REPORT_ARBEITSZEITSTATISTIK_KUNDE = 0;
    private static int REPORT_ARBEITSZEITSTATISTIK_ARTIKELNUMMER = 1;
    private static int REPORT_ARBEITSZEITSTATISTIK_BEZEICHNUNG = 2;
    private static int REPORT_ARBEITSZEITSTATISTIK_PERSON = 3;
    private static int REPORT_ARBEITSZEITSTATISTIK_BELEG = 4;
    private static int REPORT_ARBEITSZEITSTATISTIK_DAUER = 5;
    private static int REPORT_ARBEITSZEITSTATISTIK_KOSTEN = 6;
    private static int REPORT_ARBEITSZEITSTATISTIK_ARTIKELGRUPPE = 7;
    private static int REPORT_ARBEITSZEITSTATISTIK_ARTIKELKLASSE = 8;
    private static int REPORT_ARBEITSZEITSTATISTIK_GRUPPIERUNG = 9;
    private static int REPORT_ARBEITSZEITSTATISTIK_PROJEKT = 10;
    private static int REPORT_ARBEITSZEITSTATISTIK_PERSON_KOSTENSTELLE = 11;
    private static int REPORT_ARBEITSZEITSTATISTIK_BEMERKUNG = 12;
    private static int REPORT_ARBEITSZEITSTATISTIK_KOMMENTAR = 13;
    private static int REPORT_ARBEITSZEITSTATISTIK_FERTIGUNGSGRUPPE = 14;
    private static int REPORT_ARBEITSZEITSTATISTIK_VERTRETER = 15;
    private static int REPORT_ARBEITSZEITSTATISTIK_VON = 16;
    private static int REPORT_ARBEITSZEITSTATISTIK_BIS = 17;
    private static int REPORT_ARBEITSZEITSTATISTIK_ANZAHL_SPALTEN = 19;

    private static int REPORT_AUFTRAGSZEITSTATISTIK_PERSON = 0;
    private static int REPORT_AUFTRAGSZEITSTATISTIK_SUBREPORT_AUFTRAEGE = 1;
    private static int REPORT_AUFTRAGSZEITSTATISTIK_NICHT_ZUORDENBAR = 2;
    private static int REPORT_AUFTRAGSZEITSTATISTIK_SONDERZEITEN = 3;
    private static int REPORT_AUFTRAGSZEITSTATISTIK_ANZAHL_SPALTEN = 4;

    private static int REPORT_MITARBEITERUEBERSICHT_NAME = 0;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG01 = 1;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG02 = 2;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG03 = 3;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG04 = 4;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG05 = 5;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG06 = 6;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG07 = 7;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG08 = 8;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG09 = 9;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG10 = 10;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG11 = 11;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG12 = 12;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG13 = 13;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG14 = 14;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG15 = 15;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG16 = 16;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG17 = 17;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG18 = 18;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG19 = 19;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG20 = 20;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG21 = 21;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG22 = 22;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG23 = 23;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG24 = 24;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG25 = 25;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG26 = 26;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG27 = 27;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG28 = 28;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG29 = 29;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG30 = 30;
    private static int REPORT_MITARBEITERUEBERSICHT_TAG31 = 31;
    private static int REPORT_MITARBEITERUEBERSICHT_ANWESENHEITSUMME = 32;
    private static int REPORT_MITARBEITERUEBERSICHT_KALK_JAHRESISTSTUNDEN = 33;
    private static int REPORT_MITARBEITERUEBERSICHT_ANZAHL_SPALTEN = 34;

    private static int REPORT_ZEITDATEN_PERSONALNR = 0;
    private static int REPORT_ZEITDATEN_NAME = 1;
    private static int REPORT_ZEITDATEN_ZEIT = 2;
    private static int REPORT_ZEITDATEN_TAETIGKEIT = 3;
    private static int REPORT_ZEITDATEN_AUFTRAG = 4;
    private static int REPORT_ZEITDATEN_PROJEKTBEZEICHNUNG = 5;
    private static int REPORT_ZEITDATEN_TAGESSUMME = 6;
    private static int REPORT_ZEITDATEN_MASCHINE = 7;
    private static int REPORT_ZEITDATEN_POSITION = 8;
    private static int REPORT_ZEITDATEN_BUCHUNGSART = 9;
    private static int REPORT_ZEITDATEN_BEMERKUNG = 10;
    private static int REPORT_ZEITDATEN_GUTSTK = 11;
    private static int REPORT_ZEITDATEN_SCHLECHTSTK = 12;
    private static int REPORT_ZEITDATEN_KUNDE = 13;
    private static int REPORT_ZEITDATEN_DAUER = 14;
    private static int REPORT_ZEITDATEN_KOMMENTAR = 15;
    private static int REPORT_ZEITDATEN_QUELLE = 16;
    private static int REPORT_ZEITDATEN_TAETIGKEIT_SONDERZEIT = 17;
    private static int REPORT_ZEITDATEN_DAUER_SONDERZEIT = 18;
    private static int REPORT_ZEITDATEN_DATUM_SONDERZEIT = 19;
    private static int REPORT_ZEITDATEN_ARTIKELBEZEICHNUNG = 20;
    private static int REPORT_ZEITDATEN_SOLLZEIT = 21;

    private static int REPORT_TELEFONLISTE_PERSON = 0;
    private static int REPORT_TELEFONLISTE_VON = 1;
    private static int REPORT_TELEFONLISTE_BIS = 2;
    private static int REPORT_TELEFONLISTE_PARTNER = 3;
    private static int REPORT_TELEFONLISTE_ANSPRECHPARTNER = 4;
    private static int REPORT_TELEFONLISTE_KOMMENTAREXTERN = 5;
    private static int REPORT_TELEFONLISTE_KOMMENTARINTERN = 6;
    private static int REPORT_TELEFONLISTE_DAUER = 7;
    private static int REPORT_TELEFONLISTE_LKZ_PARTNER = 8;
    private static int REPORT_TELEFONLISTE_GRUPPIERUNG = 9;

    private static int REPORT_MASCHINENBELEGUNG_INVENTARNUMMER = 0;
    private static int REPORT_MASCHINENBELEGUNG_IDENTIFIKATIONSNUMMER = 1;
    private static int REPORT_MASCHINENBELEGUNG_BEZEICHNUNG = 2;
    private static int REPORT_MASCHINENBELEGUNG_DATUM = 3;
    private static int REPORT_MASCHINENBELEGUNG_LOSNUMMER = 4;
    private static int REPORT_MASCHINENBELEGUNG_LOSGROESSE = 5;
    private static int REPORT_MASCHINENBELEGUNG_STUECKLISTE = 6;
    private static int REPORT_MASCHINENBELEGUNG_STUECKLISTEBEZEICHNUNG = 7;
    private static int REPORT_MASCHINENBELEGUNG_STUECKLISTEKURZBEZEICHNUNG = 8;
    private static int REPORT_MASCHINENBELEGUNG_STUECKLISTEZUSATZBEZEICHNUNG = 9;
    private static int REPORT_MASCHINENBELEGUNG_STUECKLISTEZUSATZBEZEICHNUNG2 = 10;
    private static int REPORT_MASCHINENBELEGUNG_PROJEKT = 11;
    private static int REPORT_MASCHINENBELEGUNG_KOMMENTAR = 12;
    private static int REPORT_MASCHINENBELEGUNG_ARBEITSGANG = 13;
    private static int REPORT_MASCHINENBELEGUNG_ARTIKEL = 14;
    private static int REPORT_MASCHINENBELEGUNG_ARTIKELBEZEICHNUNG = 15;
    private static int REPORT_MASCHINENBELEGUNG_SOLL = 16;
    private static int REPORT_MASCHINENBELEGUNG_FERTIG = 17;
    private static int REPORT_MASCHINENBELEGUNG_VERFUEGBARKEIT = 18;
    private static int REPORT_MASCHINENBELEGUNG_UNTERARBEITSGANG = 19;
    private static int REPORT_MASCHINENBELEGUNG_MASCHINENGRUPPE = 20;
    private static int REPORT_MASCHINENBELEGUNG_POSITIONSKOMMENTAR = 21;
    private static int REPORT_MASCHINENBELEGUNG_LOSENDE = 22;
    private static int REPORT_MASCHINENBELEGUNG_RUESTZEIT = 23;
    private static int REPORT_MASCHINENBELEGUNG_STUECKZEIT = 24;
    private static int REPORT_MASCHINENBELEGUNG_KUNDE_NAME = 25;
    private static int REPORT_MASCHINENBELEGUNG_KUNDE_LKZ = 26;
    private static int REPORT_MASCHINENBELEGUNG_KUNDE_PLZ = 27;
    private static int REPORT_MASCHINENBELEGUNG_KUNDE_ORT = 28;
    private static int REPORT_MASCHINENBELEGUNG_LOSKLASSEN = 29;
    private static int REPORT_MASCHINENBELEGUNG_UAG_NAECHSTER_AG_MASCHINE_BEZEICHNUNG = 30;
    private static int REPORT_MASCHINENBELEGUNG_UAG_NAECHSTER_AG_MASCHINE_IDENTIFIKATIONSNUMMER = 31;
    private static int REPORT_MASCHINENBELEGUNG_UAG_NAECHSTER_AG_MASCHINE_INVENTARNUMMER = 32;
    private static int REPORT_MASCHINENBELEGUNG_PRODUKTIONSSTOP = 33;
    private static int REPORT_MASCHINENBELEGUNG_VERSTECKT = 34;
    private static int REPORT_MASCHINENBELEGUNG_ANZAHL_SPALTEN = 35;

    private static int REPORT_MASCHINENERFOLG_PERSONALNUMMER = 0;
    private static int REPORT_MASCHINENERFOLG_VORNAME = 1;
    private static int REPORT_MASCHINENERFOLG_NACHNAME = 2;
    private static int REPORT_MASCHINENERFOLG_DATUM = 3;
    private static int REPORT_MASCHINENERFOLG_ANWESENHEITSZEIT = 4;
    private static int REPORT_MASCHINENERFOLG_INVENTARNUMMER = 5;
    private static int REPORT_MASCHINENERFOLG_BEZEICHNUNG = 6;
    private static int REPORT_MASCHINENERFOLG_MASCHINENGRUPPE = 7;
    private static int REPORT_MASCHINENERFOLG_IDENTIFIKATIONSNUMMER = 8;
    private static int REPORT_MASCHINENERFOLG_LAUFZEIT = 9;
    private static int REPORT_MASCHINENERFOLG_JAHRMONAT = 10;
    private static int REPORT_MASCHINENERFOLG_ABTEILUNG = 11;
    private static int REPORT_MASCHINENERFOLG_KOSTENSTELLE = 12;
    private static int REPORT_MASCHINENERFOLG_SORT_PERSONAL = 13;
    private static int REPORT_MASCHINENERFOLG_ANZAHL_SPALTEN = 14;

    private static int REPORT_MITARBEITEREINTEILUNG_PERSONAL = 0;
    private static int REPORT_MITARBEITEREINTEILUNG_PERSONALNUMMER = 1;
    private static int REPORT_MITARBEITEREINTEILUNG_DATUM = 2;
    private static int REPORT_MITARBEITEREINTEILUNG_LOSNUMMER = 3;
    private static int REPORT_MITARBEITEREINTEILUNG_ARBEITSGANG = 4;
    private static int REPORT_MITARBEITEREINTEILUNG_ARTIKEL = 5;
    private static int REPORT_MITARBEITEREINTEILUNG_ARTIKELBEZEICHNUNG = 6;
    private static int REPORT_MITARBEITEREINTEILUNG_FERTIG = 7;
    private static int REPORT_MITARBEITEREINTEILUNG_LAUFZEIT = 8;
    private static int REPORT_MITARBEITEREINTEILUNG_UMSPANNZEIT = 9;
    private static int REPORT_MITARBEITEREINTEILUNG_MASCHINE = 10;
    private static int REPORT_MITARBEITEREINTEILUNG_UNTERARBEITSGANG = 11;
    private static int REPORT_MITARBEITEREINTEILUNG_TAGESSOLL = 12;
    private static int REPORT_MITARBEITEREINTEILUNG_SOLL = 13;
    private static int REPORT_MITARBEITEREINTEILUNG_KOSTENSTELLE = 14;
    private static int REPORT_MITARBEITEREINTEILUNG_ABTEILUNG = 15;
    private static int REPORT_MITARBEITEREINTEILUNG_ANZAHL_SPALTEN = 16;

    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_PERSON = 0;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LOS = 1;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_KUNDE = 2;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_DAUER = 3;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_STKLNR = 4;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_STKLBEZ = 5;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LOSKLASSEN = 6;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_TAETIGKEIT = 7;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_TAETIGKEIT_BEZEICHNUNG = 8;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_AGART = 9;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_RUESTZEIT = 10;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_STUECKZEIT = 11;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_GUTSTUECK = 12;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_SCHLECHTSTUECK = 13;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LOSGROESSE = 14;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_FERTIG = 15;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_FERTIGUNGSGRUPPE = 16;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_MASCHINE_BEZ = 17;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_MASCHINE_IDENTIFIKATION = 18;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_MASCHINE_INVENTATNUMMER = 19;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_DATUM = 20;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_ARBEITSGANG = 21;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_UNTERARBEITSGANG = 22;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_RUESTEN_MITRECHNEN = 23;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LEISTUNGSFAKTOR = 24;
    private static int REPORT_PRODUKTIVITAETSTAGESSTATISTIK_ANZAHL_SPALTEN = 25;

    public JasperPrintLP printMaschinenproduktivitaet(Integer maschineIId, java.sql.Timestamp tVon,
            java.sql.Timestamp tBis, TheClientDto theClientDto) {

        sAktuellerReport = ZeiterfassungReportFac.REPORT_MASCHINENPRODUKTIVITAET;
        JasperPrintLP print = null;

        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 (maschineIId != null) {
            crit.add(Restrictions.eq("i_id", maschineIId));
        }

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

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

        while (resultListIterator.hasNext()) {

            FLRMaschine flrmaschine = (FLRMaschine) resultListIterator.next();

            try {
                MaschinenzeitdatenDto[] zeitdatenEinerMaschine = getZeiterfassungFac()
                        .getZeitdatenEinerMaschine(flrmaschine.getI_id(), tVon, tBis, theClientDto);

                MaschineDto maschineDto = getZeiterfassungFac().maschineFindByPrimaryKey(flrmaschine.getI_id());

                index = -1;
                data = new Object[zeitdatenEinerMaschine.length][10];

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

                    MaschinenzeitdatenDto maschinenzeitdatenDto = zeitdatenEinerMaschine[i];

                    try {

                        LossollarbeitsplanDto sollaDto = getFertigungFac().lossollarbeitsplanFindByPrimaryKey(
                                maschinenzeitdatenDto.getLossollarbeitsplanIId());

                        com.lp.server.fertigung.service.LosDto losDto = getFertigungFac()
                                .losFindByPrimaryKey(sollaDto.getLosIId());

                        if (losDto.getStuecklisteIId() != null) {
                            com.lp.server.stueckliste.service.StuecklisteDto stuecklisteDto = getStuecklisteFac()
                                    .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                            data[row][REPORT_MASCHINENPRODUKTIVITAET_STUECKLISTE] = stuecklisteDto.getArtikelDto()
                                    .getCNr();
                            data[row][REPORT_MASCHINENPRODUKTIVITAET_STKLBEZEICHNUNG] = stuecklisteDto
                                    .getArtikelDto().formatBezeichnung();

                        } else {
                            data[row][REPORT_MASCHINENPRODUKTIVITAET_STUECKLISTE] = "Materialliste";
                        }
                        data[row][REPORT_MASCHINENPRODUKTIVITAET_BELEG] = losDto.getCNr();
                        data[row][REPORT_MASCHINENPRODUKTIVITAET_PROJEKT] = losDto.getCProjekt();
                        if (losDto.getAuftragpositionIId() != null) {
                            Integer auftragIId = getAuftragpositionFac()
                                    .auftragpositionFindByPrimaryKey(losDto.getAuftragpositionIId()).getBelegIId();
                            com.lp.server.auftrag.service.AuftragDto auftragDto = getAuftragFac()
                                    .auftragFindByPrimaryKey(auftragIId);
                            data[row][REPORT_MASCHINENPRODUKTIVITAET_AUFTRAG] = auftragDto.getCNr();
                            data[row][REPORT_MASCHINENPRODUKTIVITAET_KUNDE] = auftragDto.getCNr();
                            com.lp.server.partner.service.KundeDto kundeDto = getKundeFac()
                                    .kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(), theClientDto);

                            data[row][REPORT_MASCHINENPRODUKTIVITAET_KUNDE] = kundeDto.getPartnerDto()
                                    .formatTitelAnrede();
                        }

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

                    long zeit = maschinenzeitdatenDto.getTVon().getTime()
                            - maschinenzeitdatenDto.getTBis().getTime();

                    BigDecimal bdKosten = getZeiterfassungFac().getMaschinenKostenZumZeitpunkt(maschineDto.getIId(),
                            maschinenzeitdatenDto.getTVon());

                    if (maschinenzeitdatenDto.getTBis() != null) {
                        long l_zeitdec = maschinenzeitdatenDto.getTBis().getTime()
                                - maschinenzeitdatenDto.getTVon().getTime();

                        Double d = Helper.time2Double(new java.sql.Time(l_zeitdec - 3600000));

                        data[row][REPORT_MASCHINENPRODUKTIVITAET_DAUER] = d;
                        data[row][REPORT_MASCHINENPRODUKTIVITAET_KOSTEN] = bdKosten
                                .multiply(new BigDecimal(d.doubleValue()));
                    }

                    row++;
                }

                HashMap<String, Object> parameter = new HashMap<String, Object>();
                parameter.put("P_MASCHINE", maschineDto.getBezeichnung());
                parameter.put("P_WAEHRUNG", theClientDto.getSMandantenwaehrung());
                parameter.put("T_VON", tVon);
                tBis.setTime(tBis.getTime() - 1000);
                parameter.put("T_BIS", tBis);

                initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL,
                        ZeiterfassungReportFac.REPORT_MASCHINENPRODUKTIVITAET, theClientDto.getMandant(),
                        theClientDto.getLocUi(), theClientDto);

                if (print != null) {

                    print = Helper.addReport2Report(print, getReportPrint().getPrint());
                } else {
                    print = getReportPrint();
                }
            } catch (RemoteException ex) {
                throwEJBExceptionLPRespectOld(ex);
            }

        }

        return print;

    }

    public JasperPrintLP printMaschinenliste(java.sql.Timestamp tStichtag, boolean bMitVersteckten,
            TheClientDto theClientDto) {
        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();

    }

    public JasperPrintLP printMaschinenbelegung(Integer maschineIId, java.sql.Timestamp tStichtag,
            boolean bMitErstemUagDesNaechstenAg, TheClientDto theClientDto) {

        sAktuellerReport = ZeiterfassungReportFac.REPORT_MASCHINENBELEGUNG;
        HashMap<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("P_STICHTAG", new Timestamp(tStichtag.getTime() - 3600000 * 24));

        Session session = FLRSessionFactory.getFactory().openSession();
        String sQuery = "SELECT l FROM FLRLossollarbeitsplan l WHERE l.flrlos.t_produktionsbeginn <='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tStichtag.getTime()))
                + "' AND l.flrlos.status_c_nr IN ('" + LocaleFac.STATUS_ANGELEGT + "','"
                + LocaleFac.STATUS_IN_PRODUKTION + "','" + LocaleFac.STATUS_GESTOPPT + "','"
                + LocaleFac.STATUS_TEILERLEDIGT + "') AND l.flrlos.mandant_c_nr='" + theClientDto.getMandant()
                + "' AND l.maschine_i_id IS NOT NULL ";

        if (maschineIId != null) {
            sQuery += " AND l.maschine_i_id=" + maschineIId;
        }

        sQuery += " ORDER BY l.flrmaschine.flrmaschinengruppe.c_bez, l.flrmaschine.c_inventarnummer,l.flrlos.t_produktionsbeginn,l.flrlos.c_nr,l.i_arbeitsgangsnummer,l.i_unterarbeitsgang ";

        Query query = session.createQuery(sQuery);
        List<?> resultList = query.list();

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

        ArrayList maschinen = new ArrayList();

        while (resultListIterator.hasNext()) {
            FLRLossollarbeitsplan flrlossollarbeitsplan = (FLRLossollarbeitsplan) resultListIterator.next();

            Timestamp tDatum = new Timestamp(flrlossollarbeitsplan.getFlrlos().getT_produktionsbeginn().getTime());

            if (flrlossollarbeitsplan.getI_maschinenversatztage() != null) {
                tDatum = Helper.addiereTageZuTimestamp(tDatum, flrlossollarbeitsplan.getI_maschinenversatztage());
            }

            if (tDatum.after(tStichtag)) {

                continue;
            }

            if (!maschinen.contains(flrlossollarbeitsplan.getFlrmaschine().getI_id())) {
                maschinen.add(flrlossollarbeitsplan.getFlrmaschine().getI_id());
            }

            row++;
        }

        ArrayList alDaten = new ArrayList();
        for (int j = 0; j < maschinen.size(); j++) {

            MaschineDto maschineDto = null;
            MaschinengruppeDto maschinengruppeDto = null;
            try {
                maschineDto = getZeiterfassungFac().maschineFindByPrimaryKey((Integer) maschinen.get(j));

                if (maschineDto.getMaschinengruppeIId() != null) {
                    maschinengruppeDto = getZeiterfassungFac()
                            .maschinengruppeFindByPrimaryKey(maschineDto.getMaschinengruppeIId());
                }

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

            int iAnzahlTage = Helper
                    .getDifferenzInTagen(Helper.cutTimestamp(new Timestamp(System.currentTimeMillis())), tStichtag);
            if (iAnzahlTage <= 0) {
                iAnzahlTage = 1;
            }
            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(System.currentTimeMillis());

            for (int i = 0; i < iAnzahlTage; i++) {

                Object[] oZeileTag = new Object[REPORT_MASCHINENBELEGUNG_ANZAHL_SPALTEN];
                oZeileTag[REPORT_MASCHINENBELEGUNG_DATUM] = Helper.cutTimestamp(new Timestamp(c.getTimeInMillis()));
                oZeileTag[REPORT_MASCHINENBELEGUNG_BEZEICHNUNG] = maschineDto.getCBez();
                oZeileTag[REPORT_MASCHINENBELEGUNG_IDENTIFIKATIONSNUMMER] = maschineDto.getCIdentifikationsnr();
                oZeileTag[REPORT_MASCHINENBELEGUNG_INVENTARNUMMER] = maschineDto.getCInventarnummer();
                oZeileTag[REPORT_MASCHINENBELEGUNG_VERSTECKT] = Helper.short2Boolean(maschineDto.getBVersteckt());
                oZeileTag[REPORT_MASCHINENBELEGUNG_VERFUEGBARKEIT] = maschineDto.getFVerfuegbarkeitinprozent();
                if (maschinengruppeDto != null) {
                    oZeileTag[REPORT_MASCHINENBELEGUNG_MASCHINENGRUPPE] = maschinengruppeDto.getCBez();
                }

                resultListIterator = resultList.iterator();

                boolean bEsGibtEinenEintrag = false;

                while (resultListIterator.hasNext()) {

                    oZeileTag = new Object[REPORT_MASCHINENBELEGUNG_ANZAHL_SPALTEN];
                    oZeileTag[REPORT_MASCHINENBELEGUNG_DATUM] = Helper
                            .cutTimestamp(new Timestamp(c.getTimeInMillis()));
                    oZeileTag[REPORT_MASCHINENBELEGUNG_BEZEICHNUNG] = maschineDto.getBezeichnung();
                    oZeileTag[REPORT_MASCHINENBELEGUNG_IDENTIFIKATIONSNUMMER] = maschineDto.getCIdentifikationsnr();
                    oZeileTag[REPORT_MASCHINENBELEGUNG_VERSTECKT] = Helper
                            .short2Boolean(maschineDto.getBVersteckt());
                    oZeileTag[REPORT_MASCHINENBELEGUNG_INVENTARNUMMER] = maschineDto.getCInventarnummer();

                    FLRLossollarbeitsplan flrlossollarbeitsplan = (FLRLossollarbeitsplan) resultListIterator.next();

                    oZeileTag[REPORT_MASCHINENBELEGUNG_VERFUEGBARKEIT] = maschineDto.getFVerfuegbarkeitinprozent();

                    if (maschinengruppeDto != null) {
                        oZeileTag[REPORT_MASCHINENBELEGUNG_MASCHINENGRUPPE] = maschinengruppeDto.getCBez();
                    }

                    Timestamp tDatum = new Timestamp(
                            flrlossollarbeitsplan.getFlrlos().getT_produktionsbeginn().getTime());

                    if (flrlossollarbeitsplan.getI_maschinenversatztage() != null) {
                        tDatum = Helper.addiereTageZuTimestamp(tDatum,
                                flrlossollarbeitsplan.getI_maschinenversatztage());
                    }

                    if (Helper.cutTimestamp(tDatum).getTime() < Helper
                            .cutTimestamp(new Timestamp(System.currentTimeMillis())).getTime()) {
                        tDatum = Helper.cutTimestamp(new Timestamp(System.currentTimeMillis()));
                    }

                    if (Helper.cutTimestamp(tDatum).getTime() == Helper
                            .cutTimestamp(new Timestamp(c.getTimeInMillis())).getTime()) {
                        if (maschinen.get(j).equals(flrlossollarbeitsplan.getFlrmaschine().getI_id())) {

                            oZeileTag[REPORT_MASCHINENBELEGUNG_LOSNUMMER] = flrlossollarbeitsplan.getFlrlos()
                                    .getC_nr();
                            oZeileTag[REPORT_MASCHINENBELEGUNG_LOSENDE] = new Timestamp(
                                    flrlossollarbeitsplan.getFlrlos().getT_produktionsende().getTime());
                            if (flrlossollarbeitsplan.getFlrlos().getT_produktionsstop() != null) {
                                oZeileTag[REPORT_MASCHINENBELEGUNG_PRODUKTIONSSTOP] = new Timestamp(
                                        flrlossollarbeitsplan.getFlrlos().getT_produktionsstop().getTime());
                            }
                            oZeileTag[REPORT_MASCHINENBELEGUNG_SOLL] = flrlossollarbeitsplan.getN_gesamtzeit();

                            BigDecimal ruestzeit = flrlossollarbeitsplan.getL_ruestzeit()
                                    .divide(new BigDecimal(3600000), 4, BigDecimal.ROUND_HALF_EVEN);

                            oZeileTag[REPORT_MASCHINENBELEGUNG_RUESTZEIT] = ruestzeit;

                            BigDecimal stueckzeit = flrlossollarbeitsplan.getL_stueckzeit()
                                    .divide(new BigDecimal(3600000), 4, BigDecimal.ROUND_HALF_EVEN);
                            oZeileTag[REPORT_MASCHINENBELEGUNG_STUECKZEIT] = stueckzeit;

                            try {

                                if (Helper.short2boolean(flrlossollarbeitsplan.getB_fertig())) {
                                    oZeileTag[REPORT_MASCHINENBELEGUNG_SOLL] = new BigDecimal(0);
                                } else {
                                    BigDecimal[] bdGutSchlechtInarbeit = getFertigungFac()
                                            .getGutSchlechtInarbeit(flrlossollarbeitsplan.getI_id(), theClientDto);

                                    BigDecimal bdOffen = bdGutSchlechtInarbeit[3];
                                    if (bdOffen != null) {
                                        oZeileTag[REPORT_MASCHINENBELEGUNG_SOLL] = ruestzeit
                                                .add(stueckzeit.multiply(bdOffen));
                                    }

                                }

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

                            oZeileTag[REPORT_MASCHINENBELEGUNG_ARBEITSGANG] = flrlossollarbeitsplan
                                    .getI_arbeitsgangsnummer();
                            oZeileTag[REPORT_MASCHINENBELEGUNG_UNTERARBEITSGANG] = flrlossollarbeitsplan
                                    .getI_unterarbeitsgang();

                            oZeileTag[REPORT_MASCHINENBELEGUNG_POSITIONSKOMMENTAR] = flrlossollarbeitsplan
                                    .getC_kommentar();
                            oZeileTag[REPORT_MASCHINENBELEGUNG_FERTIG] = Helper
                                    .short2boolean(flrlossollarbeitsplan.getB_fertig());
                            oZeileTag[REPORT_MASCHINENBELEGUNG_ARTIKEL] = flrlossollarbeitsplan.getFlrartikel()
                                    .getC_nr();

                            oZeileTag[REPORT_MASCHINENBELEGUNG_PROJEKT] = flrlossollarbeitsplan.getFlrlos()
                                    .getC_projekt();

                            if (bMitErstemUagDesNaechstenAg) {

                                // PJ 16122
                                LossollarbeitsplanDto lossollarbeitsplanDtoNaechsterHauptsarbeitsgang = getFertigungFac()
                                        .lossollarbeitsplanfindByLosIIdIArbeitsgangnummerNaechsterHauptarbeitsgang(
                                                flrlossollarbeitsplan.getLos_i_id(),
                                                flrlossollarbeitsplan.getI_arbeitsgangsnummer());

                                if (lossollarbeitsplanDtoNaechsterHauptsarbeitsgang != null
                                        && lossollarbeitsplanDtoNaechsterHauptsarbeitsgang
                                                .getMaschineIId() != null) {
                                    MaschineDto naechschterAGDto = getZeiterfassungFac().maschineFindByPrimaryKey(
                                            lossollarbeitsplanDtoNaechsterHauptsarbeitsgang.getMaschineIId());

                                    oZeileTag[REPORT_MASCHINENBELEGUNG_UAG_NAECHSTER_AG_MASCHINE_BEZEICHNUNG] = naechschterAGDto
                                            .getCBez();
                                    oZeileTag[REPORT_MASCHINENBELEGUNG_UAG_NAECHSTER_AG_MASCHINE_IDENTIFIKATIONSNUMMER] = naechschterAGDto
                                            .getCIdentifikationsnr();
                                    oZeileTag[REPORT_MASCHINENBELEGUNG_UAG_NAECHSTER_AG_MASCHINE_INVENTARNUMMER] = naechschterAGDto
                                            .getCInventarnummer();
                                }
                            }

                            Session sessionLosklasse = FLRSessionFactory.getFactory().openSession();
                            String queryLosklasse = "FROM FLRLoslosklasse l where l.los_i_id="
                                    + flrlossollarbeitsplan.getFlrlos().getI_id();

                            org.hibernate.Query loslosklasse = sessionLosklasse.createQuery(queryLosklasse);

                            List resultListLosklasse = loslosklasse.list();

                            Iterator resultListIteratorLosklasse = resultListLosklasse.iterator();

                            String losklassen = "";
                            while (resultListIteratorLosklasse.hasNext()) {
                                com.lp.server.fertigung.fastlanereader.generated.FLRLoslosklasse lk = (com.lp.server.fertigung.fastlanereader.generated.FLRLoslosklasse) resultListIteratorLosklasse
                                        .next();

                                losklassen += lk.getFlrlosklasse().getC_nr() + ",";

                            }

                            oZeileTag[REPORT_MASCHINENBELEGUNG_LOSKLASSEN] = losklassen;

                            sessionLosklasse.close();

                            try {
                                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                        flrlossollarbeitsplan.getFlrartikel().getI_id(), theClientDto);
                                if (artikelDto.getArtikelsprDto() != null) {
                                    oZeileTag[REPORT_MASCHINENBELEGUNG_ARTIKELBEZEICHNUNG] = artikelDto
                                            .getArtikelsprDto().getCBez();
                                }
                                LosDto losDto = getFertigungFac()
                                        .losFindByPrimaryKey(flrlossollarbeitsplan.getFlrlos().getI_id());
                                oZeileTag[REPORT_MASCHINENBELEGUNG_KOMMENTAR] = losDto.getCKommentar();

                                if (flrlossollarbeitsplan.getFlrlos().getFlrauftrag() != null) {
                                    oZeileTag[REPORT_MASCHINENBELEGUNG_KUNDE_NAME] = flrlossollarbeitsplan
                                            .getFlrlos().getFlrauftrag().getFlrkunde().getFlrpartner()
                                            .getC_name1nachnamefirmazeile1();

                                    if (flrlossollarbeitsplan.getFlrlos().getFlrauftrag().getFlrkunde()
                                            .getFlrpartner().getFlrlandplzort() != null) {
                                        oZeileTag[REPORT_MASCHINENBELEGUNG_KUNDE_LKZ] = flrlossollarbeitsplan
                                                .getFlrlos().getFlrauftrag().getFlrkunde().getFlrpartner()
                                                .getFlrlandplzort().getFlrland().getC_lkz();
                                        oZeileTag[REPORT_MASCHINENBELEGUNG_KUNDE_PLZ] = flrlossollarbeitsplan
                                                .getFlrlos().getFlrauftrag().getFlrkunde().getFlrpartner()
                                                .getFlrlandplzort().getC_plz();
                                        oZeileTag[REPORT_MASCHINENBELEGUNG_KUNDE_ORT] = flrlossollarbeitsplan
                                                .getFlrlos().getFlrauftrag().getFlrkunde().getFlrpartner()
                                                .getFlrlandplzort().getFlrort().getC_name();
                                    }
                                } else {
                                    if (flrlossollarbeitsplan.getFlrlos().getFlrkunde() != null) {
                                        oZeileTag[REPORT_MASCHINENBELEGUNG_KUNDE_NAME] = flrlossollarbeitsplan
                                                .getFlrlos().getFlrkunde().getFlrpartner()
                                                .getC_name1nachnamefirmazeile1();

                                        if (flrlossollarbeitsplan.getFlrlos().getFlrkunde().getFlrpartner()
                                                .getFlrlandplzort() != null) {
                                            oZeileTag[REPORT_MASCHINENBELEGUNG_KUNDE_LKZ] = flrlossollarbeitsplan
                                                    .getFlrlos().getFlrkunde().getFlrpartner().getFlrlandplzort()
                                                    .getFlrland().getC_lkz();
                                            oZeileTag[REPORT_MASCHINENBELEGUNG_KUNDE_PLZ] = flrlossollarbeitsplan
                                                    .getFlrlos().getFlrkunde().getFlrpartner().getFlrlandplzort()
                                                    .getC_plz();
                                            oZeileTag[REPORT_MASCHINENBELEGUNG_KUNDE_ORT] = flrlossollarbeitsplan
                                                    .getFlrlos().getFlrkunde().getFlrpartner().getFlrlandplzort()
                                                    .getFlrort().getC_name();
                                        }
                                    }
                                }

                                if (flrlossollarbeitsplan.getFlrlos().getFlrstueckliste() != null) {
                                    ArtikelDto artikelDtoStkl = getArtikelFac().artikelFindByPrimaryKeySmall(
                                            flrlossollarbeitsplan.getFlrlos().getFlrstueckliste().getArtikel_i_id(),
                                            theClientDto);

                                    oZeileTag[REPORT_MASCHINENBELEGUNG_STUECKLISTE] = artikelDtoStkl.getCNr();

                                    if (artikelDto.getArtikelsprDto() != null) {
                                        oZeileTag[REPORT_MASCHINENBELEGUNG_STUECKLISTEBEZEICHNUNG] = artikelDtoStkl
                                                .getArtikelsprDto().getCBez();
                                        oZeileTag[REPORT_MASCHINENBELEGUNG_STUECKLISTEKURZBEZEICHNUNG] = artikelDtoStkl
                                                .getArtikelsprDto().getCKbez();
                                        oZeileTag[REPORT_MASCHINENBELEGUNG_STUECKLISTEZUSATZBEZEICHNUNG] = artikelDtoStkl
                                                .getArtikelsprDto().getCZbez();
                                        oZeileTag[REPORT_MASCHINENBELEGUNG_STUECKLISTEZUSATZBEZEICHNUNG2] = artikelDtoStkl
                                                .getArtikelsprDto().getCZbez2();
                                    }
                                }

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

                            oZeileTag[REPORT_MASCHINENBELEGUNG_LOSGROESSE] = flrlossollarbeitsplan.getFlrlos()
                                    .getN_losgroesse();

                            alDaten.add(oZeileTag);
                            bEsGibtEinenEintrag = true;
                        }

                    }
                }

                if (bEsGibtEinenEintrag == false) {
                    alDaten.add(oZeileTag);
                }

                c.set(Calendar.DATE, c.get(Calendar.DATE) + 1);

            }

        }
        session.close();

        data = new Object[alDaten.size()][REPORT_MASCHINENBELEGUNG_ANZAHL_SPALTEN];
        data = (Object[][]) alDaten.toArray(data);

        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_MASCHINENBELEGUNG,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    public JasperPrintLP printMitarbeitereinteilung(Integer personalIId, Integer personalgruppeIId,
            java.sql.Timestamp tStichtag, Integer iOptionSortierung, String sortierung, TheClientDto theClientDto) {

        sAktuellerReport = ZeiterfassungReportFac.REPORT_MITARBEITEREINTEILUNG;
        HashMap<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("P_STICHTAG", new Timestamp(tStichtag.getTime() - 3600000 * 24));

        Session session = FLRSessionFactory.getFactory().openSession();
        String sQuery = "SELECT l FROM FLRLossollarbeitsplan l WHERE l.flrlos.t_produktionsbeginn <='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tStichtag.getTime()))
                + "' AND l.flrlos.status_c_nr IN ('" + LocaleFac.STATUS_ANGELEGT + "','"
                + LocaleFac.STATUS_IN_PRODUKTION + "','" + LocaleFac.STATUS_TEILERLEDIGT + "') ";
        if (personalIId != null) {
            sQuery += " AND l.personal_i_id_zugeordneter=" + personalIId;
        } else {
            if (personalgruppeIId != null) {
                sQuery += " AND l.flrpersonal_zugeordneter.personalgruppe_i_id=" + personalgruppeIId;
            }
        }

        PersonalDto[] personalDtos = null;

        try {

            if (personalIId != null) {
                personalDtos = new PersonalDto[1];
                personalDtos[0] = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);
            } else {

                if (personalgruppeIId != null) {
                    personalDtos = getPersonalFac().personalFindByPersonalgruppeIdMandantCNr(personalgruppeIId,
                            theClientDto.getMandant(), false);
                } else {
                    personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(), false);
                }

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

        // PJ 17333

        parameter.put("P_SORTIERUNG", sortierung);

        if (iOptionSortierung != ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_PERSONALNUMMER) {
            for (int i = personalDtos.length - 1; i > 0; --i) {
                for (int j = 0; j < i; ++j) {
                    String vergleich1 = "";
                    String vergleich2 = "";

                    String kostenstelle1 = "               ";
                    String kostenstelle2 = "               ";

                    if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_KOSTENSTELLE_NAME_VORNAME
                            || iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_KOSTENSTELLE_NAME_VORNAME) {
                        if (personalDtos[j].getKostenstelleIIdStamm() != null) {

                            KostenstelleDto kstDto = getSystemFac()
                                    .kostenstelleFindByPrimaryKey(personalDtos[j].getKostenstelleIIdStamm());
                            kostenstelle1 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                        }
                        if (personalDtos[j + 1].getKostenstelleIIdStamm() != null) {
                            KostenstelleDto kstDto = getSystemFac()
                                    .kostenstelleFindByPrimaryKey(personalDtos[j + 1].getKostenstelleIIdStamm());
                            kostenstelle2 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                        }

                        if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_KOSTENSTELLE_NAME_VORNAME) {
                            vergleich1 += kostenstelle1;
                            vergleich2 += kostenstelle2;
                        }

                    }

                    if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_NAME_VORNAME
                            || iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_KOSTENSTELLE_NAME_VORNAME) {

                        String abteilung1 = "               ";
                        String abteilung2 = "               ";

                        if (personalDtos[j].getKostenstelleIIdAbteilung() != null) {

                            KostenstelleDto kstDto = getSystemFac()
                                    .kostenstelleFindByPrimaryKey(personalDtos[j].getKostenstelleIIdAbteilung());
                            abteilung1 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                        } else {
                            abteilung1 = "               ";
                        }
                        if (personalDtos[j + 1].getKostenstelleIIdAbteilung() != null) {
                            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(
                                    personalDtos[j + 1].getKostenstelleIIdAbteilung());
                            abteilung2 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                        } else {
                            abteilung2 = "               ";
                        }
                        if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_KOSTENSTELLE_NAME_VORNAME) {
                            vergleich1 = kostenstelle1 + vergleich1;
                            vergleich2 = kostenstelle2 + vergleich2;
                        }
                        vergleich1 = abteilung1 + vergleich1;
                        vergleich2 = abteilung2 + vergleich2;

                    }

                    PartnerDto p1Dto = getPartnerFac().partnerFindByPrimaryKey(personalDtos[j].getPartnerIId(),
                            theClientDto);
                    personalDtos[j].setPartnerDto(p1Dto);
                    PartnerDto p2Dto = getPartnerFac().partnerFindByPrimaryKey(personalDtos[j + 1].getPartnerIId(),
                            theClientDto);
                    vergleich1 += Helper.fitString2Length(p1Dto.getCName1nachnamefirmazeile1(), 80, ' ');
                    vergleich2 += Helper.fitString2Length(p2Dto.getCName1nachnamefirmazeile1(), 80, ' ');

                    if (p1Dto.getCName2vornamefirmazeile2() != null) {
                        vergleich1 += p1Dto.getCName2vornamefirmazeile2();
                    }
                    if (p2Dto.getCName2vornamefirmazeile2() != null) {
                        vergleich2 += p2Dto.getCName2vornamefirmazeile2();
                    }

                    if (vergleich1.compareTo(vergleich2) > 0) {
                        PersonalDto tauschDto = personalDtos[j];
                        personalDtos[j] = personalDtos[j + 1];
                        personalDtos[j + 1] = tauschDto;
                    }

                }
            }
        }

        sQuery += " AND l.flrlos.mandant_c_nr='" + theClientDto.getMandant()
                + "' AND l.personal_i_id_zugeordneter IS NOT NULL ORDER BY l.flrmaschine.c_inventarnummer,l.flrlos.t_produktionsbeginn";

        Query query = session.createQuery(sQuery);
        List<?> resultList = query.list();

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

        java.sql.Timestamp tSpaetestesDatum = tStichtag;

        while (resultListIterator.hasNext()) {
            FLRLossollarbeitsplan flrlossollarbeitsplan = (FLRLossollarbeitsplan) resultListIterator.next();

            Timestamp tDatum = new Timestamp(flrlossollarbeitsplan.getFlrlos().getT_produktionsbeginn().getTime());

            if (flrlossollarbeitsplan.getI_maschinenversatztage() != null) {
                tDatum = Helper.addiereTageZuTimestamp(tDatum, flrlossollarbeitsplan.getI_maschinenversatztage());
            }

            if (tDatum.after(tSpaetestesDatum)) {

                tSpaetestesDatum = tDatum;
            }

            row++;
        }
        Integer tagesartIId_Feiertag = null;
        Integer tagesartIId_Halbtag = null;

        tagesartIId_Feiertag = getZeiterfassungFac()
                .tagesartFindByCNr(ZeiterfassungFac.TAGESART_FEIERTAG, theClientDto).getIId();
        tagesartIId_Halbtag = getZeiterfassungFac()
                .tagesartFindByCNr(ZeiterfassungFac.TAGESART_HALBTAG, theClientDto).getIId();

        ArrayList alDaten = new ArrayList();
        data = new Object[personalDtos.length][5];
        for (int j = 0; j < personalDtos.length; j++) {

            PersonalDto personalDto = personalDtos[j];

            personalDto.setPartnerDto(
                    getPartnerFac().partnerFindByPrimaryKey(personalDto.getPartnerIId(), theClientDto));

            int iAnzahlTage = Helper.getDifferenzInTagen(
                    Helper.cutTimestamp(new Timestamp(System.currentTimeMillis())), tSpaetestesDatum);

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(System.currentTimeMillis());

            String abteilung = "";
            if (personalDto.getKostenstelleIIdAbteilung() != null) {
                abteilung = getSystemFac().kostenstelleFindByPrimaryKey(personalDto.getKostenstelleIIdAbteilung())
                        .formatKostenstellenbezeichnung();
            }

            String kostenstelle = "";
            if (personalDto.getKostenstelleIIdStamm() != null) {
                kostenstelle = getSystemFac().kostenstelleFindByPrimaryKey(personalDto.getKostenstelleIIdStamm())
                        .formatKostenstellenbezeichnung();
            }

            for (int i = 0; i < iAnzahlTage; i++) {
                Object[] oZeileTag = new Object[REPORT_MITARBEITEREINTEILUNG_ANZAHL_SPALTEN];
                oZeileTag[REPORT_MITARBEITEREINTEILUNG_PERSONAL] = personalDto.formatAnrede();
                oZeileTag[REPORT_MITARBEITEREINTEILUNG_PERSONALNUMMER] = personalDto.getCPersonalnr();

                oZeileTag[REPORT_MITARBEITEREINTEILUNG_KOSTENSTELLE] = kostenstelle;
                oZeileTag[REPORT_MITARBEITEREINTEILUNG_ABTEILUNG] = abteilung;

                oZeileTag[REPORT_MITARBEITEREINTEILUNG_DATUM] = Helper
                        .cutTimestamp(new Timestamp(c.getTimeInMillis()));

                BigDecimal tagessoll = getZeiterfassungFac().getSollzeitEinerPersonUndEinesTages(personalDto,
                        tagesartIId_Feiertag, tagesartIId_Halbtag, new Timestamp(c.getTimeInMillis()),
                        theClientDto);

                oZeileTag[REPORT_MITARBEITEREINTEILUNG_TAGESSOLL] = tagessoll;

                resultListIterator = resultList.iterator();

                boolean bEsGibtEinenEintrag = false;
                while (resultListIterator.hasNext()) {
                    FLRLossollarbeitsplan flrlossollarbeitsplan = (FLRLossollarbeitsplan) resultListIterator.next();

                    Timestamp tDatum = new Timestamp(
                            flrlossollarbeitsplan.getFlrlos().getT_produktionsbeginn().getTime());

                    if (flrlossollarbeitsplan.getI_maschinenversatztage() != null) {
                        tDatum = Helper.addiereTageZuTimestamp(tDatum,
                                flrlossollarbeitsplan.getI_maschinenversatztage());
                    }

                    if (Helper.cutTimestamp(tDatum).getTime() < Helper
                            .cutTimestamp(new Timestamp(System.currentTimeMillis())).getTime()) {
                        tDatum = Helper.cutTimestamp(new Timestamp(System.currentTimeMillis()));
                    }

                    if (Helper.cutTimestamp(tDatum).getTime() == Helper
                            .cutTimestamp(new Timestamp(c.getTimeInMillis())).getTime()) {
                        if (personalDto.getIId().equals(flrlossollarbeitsplan.getPersonal_i_id_zugeordneter())) {
                            oZeileTag = new Object[REPORT_MITARBEITEREINTEILUNG_ANZAHL_SPALTEN];

                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_PERSONAL] = personalDto.formatAnrede();
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_KOSTENSTELLE] = kostenstelle;
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_ABTEILUNG] = abteilung;
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_PERSONALNUMMER] = personalDto.getCPersonalnr();
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_LOSNUMMER] = flrlossollarbeitsplan.getFlrlos()
                                    .getC_nr();
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_ARBEITSGANG] = flrlossollarbeitsplan
                                    .getI_arbeitsgangsnummer();
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_UNTERARBEITSGANG] = flrlossollarbeitsplan
                                    .getI_unterarbeitsgang();
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_DATUM] = Helper
                                    .cutTimestamp(new Timestamp(c.getTimeInMillis()));
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_TAGESSOLL] = tagessoll;
                            BigDecimal laufzeit = new BigDecimal(0);
                            BigDecimal umspannzeit = new BigDecimal(0);
                            if (flrlossollarbeitsplan.getAgart_c_nr() != null) {

                                if (flrlossollarbeitsplan.getAgart_c_nr().equals(StuecklisteFac.AGART_LAUFZEIT)) {
                                    laufzeit = flrlossollarbeitsplan.getN_gesamtzeit();
                                }

                                if (flrlossollarbeitsplan.getAgart_c_nr()
                                        .equals(StuecklisteFac.AGART_UMSPANNZEIT)) {
                                    umspannzeit = flrlossollarbeitsplan.getN_gesamtzeit();
                                }
                            } else {
                                oZeileTag[REPORT_MITARBEITEREINTEILUNG_SOLL] = flrlossollarbeitsplan
                                        .getN_gesamtzeit();
                            }
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_FERTIG] = Helper
                                    .short2boolean(flrlossollarbeitsplan.getB_fertig());

                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_ARTIKEL] = flrlossollarbeitsplan.getFlrartikel()
                                    .getC_nr();
                            if (flrlossollarbeitsplan.getFlrmaschine() != null) {
                                oZeileTag[REPORT_MITARBEITEREINTEILUNG_MASCHINE] = flrlossollarbeitsplan
                                        .getFlrmaschine().getC_inventarnummer();
                            }
                            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                    flrlossollarbeitsplan.getFlrartikel().getI_id(), theClientDto);

                            if (artikelDto.getArtikelsprDto() != null) {
                                oZeileTag[REPORT_MITARBEITEREINTEILUNG_ARTIKELBEZEICHNUNG] = artikelDto
                                        .getArtikelsprDto().getCBez();
                            }

                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_UMSPANNZEIT] = umspannzeit;
                            oZeileTag[REPORT_MITARBEITEREINTEILUNG_LAUFZEIT] = laufzeit;

                            alDaten.add(oZeileTag);
                            bEsGibtEinenEintrag = true;
                        }
                    }

                }

                if (bEsGibtEinenEintrag == false) {
                    alDaten.add(oZeileTag);
                }

                c.set(Calendar.DATE, c.get(Calendar.DATE) + 1);
            }

        }

        session.close();
        data = new Object[alDaten.size()][REPORT_MITARBEITEREINTEILUNG_ANZAHL_SPALTEN];
        data = (Object[][]) alDaten.toArray(data);
        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL,
                ZeiterfassungReportFac.REPORT_MITARBEITEREINTEILUNG, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    public JasperPrintLP printMaschinenzeitdaten(Integer maschineIId, java.sql.Timestamp tVon,
            java.sql.Timestamp tBis, TheClientDto theClientDto) {

        sAktuellerReport = ZeiterfassungReportFac.REPORT_MASCHINENZEITDATEN;
        HashMap<String, Object> parameter = new HashMap<String, Object>();

        MaschineDto maschineDto = null;
        MaschinenzeitdatenDto[] zeitdatenEinerMaschine = null;
        try {
            maschineDto = getZeiterfassungFac().maschineFindByPrimaryKey(maschineIId);

            zeitdatenEinerMaschine = getZeiterfassungFac().getZeitdatenEinerMaschine(maschineIId, tVon, tBis,
                    theClientDto);
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
        }

        data = new Object[zeitdatenEinerMaschine.length][REPORT_MASCHINENZEITDATEN_ANZAHL_SPALTEN];

        for (int i = 0; i < zeitdatenEinerMaschine.length; i++) {
            MaschinenzeitdatenDto zeitdatenDto = zeitdatenEinerMaschine[i];

            data[i][REPORT_MASCHINENZEITDATEN_VON] = zeitdatenDto.getTVon();
            data[i][REPORT_MASCHINENZEITDATEN_BIS] = zeitdatenDto.getTBis();

            if (zeitdatenDto.getTBis() != null) {
                long l_zeitdec = zeitdatenDto.getTBis().getTime() - zeitdatenDto.getTVon().getTime();
                data[i][REPORT_MASCHINENZEITDATEN_DAUER] = ((double) l_zeitdec) / (3600000);
            }

            try {
                LossollarbeitsplanDto sollaDto = getFertigungFac()
                        .lossollarbeitsplanFindByPrimaryKey(zeitdatenDto.getLossollarbeitsplanIId());

                data[i][REPORT_MASCHINENZEITDATEN_LOS_AG] = sollaDto.getIArbeitsgangnummer();
                data[i][REPORT_MASCHINENZEITDATEN_LOS_UAG] = sollaDto.getIUnterarbeitsgang();

                LosDto losDto = getFertigungFac().losFindByPrimaryKey(sollaDto.getLosIId());
                data[i][REPORT_MASCHINENZEITDATEN_LOS] = losDto.getCNr();

                data[i][REPORT_MASCHINENZEITDATEN_PROJEKTBEZEICHNUNG] = losDto.getCProjekt();

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

                }

                if (losDto.getStuecklisteIId() != null) {
                    StuecklisteDto stuecklisteDto = getStuecklisteFac()
                            .stuecklisteFindByPrimaryKey(losDto.getStuecklisteIId(), theClientDto);
                    data[i][REPORT_MASCHINENZEITDATEN_LOSARTIKELNR] = stuecklisteDto.getArtikelDto().getCNr();
                    data[i][REPORT_MASCHINENZEITDATEN_LOSARTIKELBEZ] = stuecklisteDto.getArtikelDto()
                            .formatBezeichnung();
                }

            } catch (RemoteException ex1) {
                throwEJBExceptionLPRespectOld(ex1);
            }
        }
        parameter.put("P_VON", tVon);
        parameter.put("P_BIS", tBis);

        parameter.put("P_MASCHINE", maschineDto.getBezeichnung());
        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_MASCHINENZEITDATEN,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();

    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printZeitdatenjournal(Integer personalIId, java.sql.Timestamp tVon,
            java.sql.Timestamp tBis, TheClientDto theClientDto) {
        sAktuellerReport = ZeiterfassungReportFac.REPORT_ZEITDATEN;
        HashMap<String, Object> parameter = new HashMap<String, Object>();
        ArrayList<Object[]> daten = new ArrayList<Object[]>();
        try {

            PersonalDto[] personalDtos = null;

            Integer tagesartIId_Feiertag = getZeiterfassungFac()
                    .tagesartFindByCNr(ZeiterfassungFac.TAGESART_FEIERTAG, theClientDto).getIId();
            Integer tagesartIId_Halbtag = getZeiterfassungFac()
                    .tagesartFindByCNr(ZeiterfassungFac.TAGESART_HALBTAG, theClientDto).getIId();
            Integer taetigkeitIId_Kommt = getZeiterfassungFac()
                    .taetigkeitFindByCNr(ZeiterfassungFac.TAETIGKEIT_KOMMT, theClientDto).getIId();
            Integer taetigkeitIId_Telefon = getZeiterfassungFac()
                    .taetigkeitFindByCNr(ZeiterfassungFac.TAETIGKEIT_TELEFON, theClientDto).getIId();

            tVon = Helper.cutTimestamp(tVon);
            tBis = Helper.cutTimestamp(tBis);
            if (personalIId != null) {
                personalDtos = new PersonalDto[1];
                personalDtos[0] = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);
            } else {
                personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(), true);
            }

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

                PersonalDto personalDto = personalDtos[i];

                personalDto.setPartnerDto(
                        getPartnerFac().partnerFindByPrimaryKey(personalDto.getPartnerIId(), theClientDto));

                Calendar cVon = Calendar.getInstance();
                cVon.setTime(tVon);

                Calendar cBis = Calendar.getInstance();
                cBis.setTime(tBis);
                cBis.set(Calendar.HOUR, 23);
                cBis.set(Calendar.MINUTE, 59);
                cBis.set(Calendar.SECOND, 59);
                cBis.set(Calendar.MILLISECOND, 999);

                while (cVon.before(cBis)) {
                    Calendar cNaechsterTag = Calendar.getInstance();
                    cNaechsterTag.setTimeInMillis(cVon.getTimeInMillis());
                    cNaechsterTag.set(Calendar.DAY_OF_MONTH, cNaechsterTag.get(Calendar.DAY_OF_MONTH) + 1);

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

                    org.hibernate.Criteria crit = session.createCriteria(FLRZeitdaten.class)
                            .createAlias(ZeiterfassungFac.FLR_ZEITDATEN_FLRPERSONAL, "p")
                            .add(Restrictions.eq("p.mandant_c_nr", theClientDto.getMandant()));
                    crit.add(Restrictions.eq("p.i_id", personalDto.getIId()));
                    crit.add(Restrictions.ge(ZeiterfassungFac.FLR_ZEITDATEN_T_ZEIT,
                            new Timestamp(cVon.getTimeInMillis())));
                    crit.add(Restrictions.lt(ZeiterfassungFac.FLR_ZEITDATEN_T_ZEIT,
                            new Timestamp(cNaechsterTag.getTimeInMillis())));
                    crit.addOrder(Order.asc(ZeiterfassungFac.FLR_ZEITDATEN_T_ZEIT));
                    List<?> resultList = crit.list();

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

                    while (resultListIterator.hasNext()) {
                        Object[] zeile = new Object[22];
                        FLRZeitdaten flrzeitdaten = (FLRZeitdaten) resultListIterator.next();

                        zeile[REPORT_ZEITDATEN_PERSONALNR] = flrzeitdaten.getFlrpersonal().getC_personalnummer();
                        zeile[REPORT_ZEITDATEN_ZEIT] = new Timestamp(flrzeitdaten.getT_zeit().getTime());

                        zeile[REPORT_ZEITDATEN_SOLLZEIT] = getZeiterfassungFac()
                                .getSollzeitEinerPersonUndEinesTages(personalDto, tagesartIId_Feiertag,
                                        tagesartIId_Halbtag, new Timestamp(flrzeitdaten.getT_zeit().getTime()),
                                        theClientDto);

                        zeile[REPORT_ZEITDATEN_BEMERKUNG] = flrzeitdaten.getC_bemerkungzubelegart();
                        zeile[REPORT_ZEITDATEN_KOMMENTAR] = flrzeitdaten.getX_kommentar();
                        zeile[REPORT_ZEITDATEN_QUELLE] = flrzeitdaten.getC_wowurdegebucht();

                        String sNurTaetigkeitGeaendert = "";
                        if (Helper.short2boolean(flrzeitdaten.getB_taetigkeitgeaendert()) == true) {
                            sNurTaetigkeitGeaendert = " B";
                        }
                        String sAutomatikbuchung = "";
                        if (Helper.short2boolean(flrzeitdaten.getB_automatikbuchung()) == true) {
                            sAutomatikbuchung = " A";
                        }

                        zeile[REPORT_ZEITDATEN_BUCHUNGSART] = ZeitdatenHandler
                                .istBuchungManipuliert(flrzeitdaten.getT_zeit(), flrzeitdaten.getT_aendern())
                                + sNurTaetigkeitGeaendert + sAutomatikbuchung;

                        String sVorname = flrzeitdaten.getFlrpersonal().getFlrpartner()
                                .getC_name2vornamefirmazeile2();
                        String sNachname = flrzeitdaten.getFlrpersonal().getFlrpartner()
                                .getC_name1nachnamefirmazeile1();
                        if (sVorname != null) {
                            sNachname = sVorname + " " + sNachname;
                        }
                        zeile[REPORT_ZEITDATEN_NAME] = sNachname;

                        try {
                            if (flrzeitdaten.getFlrtaetigkeit() != null) {

                                zeile[REPORT_ZEITDATEN_TAETIGKEIT] = getZeiterfassungFac()
                                        .taetigkeitFindByPrimaryKey(flrzeitdaten.getFlrtaetigkeit().getI_id(),
                                                theClientDto)
                                        .getBezeichnung();

                                // PJ 08/12678
                                if (flrzeitdaten.getFlrtaetigkeit().getI_id().equals(taetigkeitIId_Telefon)) {

                                    try {
                                        TelefonzeitenDto tzDto = getZeiterfassungFac()
                                                .telefonzeitenFindByPersonalIIdTVon(personalIId,
                                                        new Timestamp(flrzeitdaten.getT_zeit().getTime()));

                                        if (tzDto.getPartnerIId() != null) {

                                            PartnerDto partnerDto = getPartnerFac()
                                                    .partnerFindByPrimaryKey(tzDto.getPartnerIId(), theClientDto);
                                            zeile[REPORT_ZEITDATEN_KUNDE] = partnerDto.formatFixTitelName1Name2();
                                        }

                                        String kommentare = "";

                                        if (tzDto.getXKommentarext() != null) {
                                            kommentare = tzDto.getXKommentarext();
                                        }
                                        if (tzDto.getXKommentarint() != null) {
                                            kommentare += "/ " + tzDto.getXKommentarint();
                                        }

                                        zeile[REPORT_ZEITDATEN_KOMMENTAR] = kommentare;

                                    } catch (javax.ejb.EJBException e) {
                                        // Keine Zuordnung zu Telefonzeiten
                                        // gefunden
                                    }

                                }

                            } else {
                                ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                        flrzeitdaten.getFlrartikel().getI_id(), theClientDto);

                                zeile[REPORT_ZEITDATEN_TAETIGKEIT] = artikelDto.getCNr();
                                zeile[REPORT_ZEITDATEN_ARTIKELBEZEICHNUNG] = artikelDto.formatBezeichnung();
                            }

                            if (flrzeitdaten.getC_belegartnr() != null) {

                                BelegInfos belegInfos = getLagerFac().getBelegInfos(flrzeitdaten.getC_belegartnr(),
                                        flrzeitdaten.getI_belegartid(), flrzeitdaten.getI_belegartpositionid(),
                                        theClientDto);

                                if (flrzeitdaten.getC_belegartnr().equals(LocaleFac.BELEGART_AUFTRAG)) {
                                    zeile[REPORT_ZEITDATEN_AUFTRAG] = "AB" + belegInfos.getBelegnummer();

                                } else if (flrzeitdaten.getC_belegartnr().equals(LocaleFac.BELEGART_LOS)) {
                                    zeile[REPORT_ZEITDATEN_AUFTRAG] = "LO" + belegInfos.getBelegnummer();
                                } else if (flrzeitdaten.getC_belegartnr().equals(LocaleFac.BELEGART_ANGEBOT)) {
                                    zeile[REPORT_ZEITDATEN_AUFTRAG] = "AG" + belegInfos.getBelegnummer();
                                } else if (flrzeitdaten.getC_belegartnr().equals(LocaleFac.BELEGART_PROJEKT)) {
                                    zeile[REPORT_ZEITDATEN_AUFTRAG] = "PJ" + belegInfos.getBelegnummer();
                                } else {
                                    zeile[REPORT_ZEITDATEN_AUFTRAG] = belegInfos.getBelegnummer();
                                }

                                zeile[REPORT_ZEITDATEN_PROJEKTBEZEICHNUNG] = belegInfos.getBelegbezeichnung();
                                zeile[REPORT_ZEITDATEN_KUNDE] = belegInfos.getKundeLieferant();

                                if (flrzeitdaten.getI_belegartpositionid() != null) {
                                    if (flrzeitdaten.getC_belegartnr().equals(LocaleFac.BELEGART_AUFTRAG)) {
                                        AuftragpositionDto posDto = getAuftragpositionFac()
                                                .auftragpositionFindByPrimaryKeyOhneExc(
                                                        flrzeitdaten.getI_belegartpositionid());
                                        if (posDto != null) {

                                            if (posDto.getArtikelIId() != null) {
                                                zeile[REPORT_ZEITDATEN_POSITION] = getArtikelFac()
                                                        .artikelFindByPrimaryKey(posDto.getArtikelIId(),
                                                                theClientDto)
                                                        .formatArtikelbezeichnung();
                                            } else {
                                                zeile[REPORT_ZEITDATEN_POSITION] = posDto.getCBez();
                                            }
                                        } else {
                                            zeile[REPORT_ZEITDATEN_POSITION] = "Auftragposition nicht mehr vorhanden.";
                                        }
                                    } else if (flrzeitdaten.getC_belegartnr().equals(LocaleFac.BELEGART_LOS)) {
                                        try {
                                            LossollarbeitsplanDto posDto = getFertigungFac()
                                                    .lossollarbeitsplanFindByPrimaryKey(
                                                            flrzeitdaten.getI_belegartpositionid());
                                            zeile[REPORT_ZEITDATEN_POSITION] = getArtikelFac()
                                                    .artikelFindByPrimaryKey(posDto.getArtikelIIdTaetigkeit(),
                                                            theClientDto)
                                                    .formatArtikelbezeichnung();
                                        } catch (EJBExceptionLP ex4) {
                                            zeile[REPORT_ZEITDATEN_POSITION] = "Losposition nicht mehr vorhanden.";
                                        }

                                    } else if (flrzeitdaten.getC_belegartnr().equals(LocaleFac.BELEGART_ANGEBOT)) {
                                        try {
                                            com.lp.server.angebot.service.AngebotpositionDto posDto = getAngebotpositionFac()
                                                    .angebotpositionFindByPrimaryKey(
                                                            flrzeitdaten.getI_belegartpositionid(), theClientDto);
                                            zeile[REPORT_ZEITDATEN_POSITION] = getArtikelFac()
                                                    .artikelFindByPrimaryKey(posDto.getArtikelIId(), theClientDto)
                                                    .formatArtikelbezeichnung();
                                        } catch (EJBExceptionLP ex4) {
                                            zeile[REPORT_ZEITDATEN_POSITION] = "Angebotsposition nicht mehr vorhanden.";
                                        }

                                    }
                                }

                            }

                            // Dauer
                            if (daten.size() > 0) {
                                Object[] letzteZeile = (Object[]) daten.get(daten.size() - 1);
                                if (letzteZeile[REPORT_ZEITDATEN_ZEIT] != null
                                        && !taetigkeitIId_Kommt.equals(flrzeitdaten.getTaetigkeit_i_id())) {
                                    long l_zeitdec = flrzeitdaten.getT_zeit().getTime()
                                            - ((Timestamp) letzteZeile[REPORT_ZEITDATEN_ZEIT]).getTime();

                                    Double dauer = Helper.time2Double(new java.sql.Time(l_zeitdec - 3600000));
                                    if (daten.size() > 0) {
                                        Object[] letzte = (Object[]) daten.get(daten.size() - 1);
                                        letzte[REPORT_ZEITDATEN_DAUER] = dauer;
                                        daten.set(daten.size() - 1, letzte);
                                    }
                                }
                            }

                        } catch (RemoteException ex1) {
                            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex1);
                        }
                        daten.add(zeile);
                    }
                    SonderzeitenDto[] dtos = null;
                    try {
                        // Hier nun Sonderzeiten holen
                        dtos = getZeiterfassungFac().sonderzeitenFindByPersonalIIdDDatum(personalDto.getIId(),
                                Helper.cutTimestamp(new Timestamp(cVon.getTimeInMillis())));
                        for (int j = 0; j < dtos.length; j++) {
                            TaetigkeitDto taeitgkeitDto = getZeiterfassungFac()
                                    .taetigkeitFindByPrimaryKey(dtos[j].getTaetigkeitIId(), theClientDto);
                            Object[] neueZeile = new Object[22];
                            neueZeile[REPORT_ZEITDATEN_TAETIGKEIT_SONDERZEIT] = taeitgkeitDto.getBezeichnung();
                            neueZeile[REPORT_ZEITDATEN_PERSONALNR] = personalDto.getCPersonalnr();

                            String sVorname = personalDto.getPartnerDto().getCName2vornamefirmazeile2();
                            String sNachname = personalDto.getPartnerDto().getCName1nachnamefirmazeile1();
                            if (sVorname != null) {
                                sNachname = sVorname + " " + sNachname;
                            }
                            neueZeile[REPORT_ZEITDATEN_NAME] = sNachname;
                            neueZeile[REPORT_ZEITDATEN_DATUM_SONDERZEIT] = new Timestamp(cVon.getTimeInMillis());

                            // Dauer
                            double dauer = 0;

                            if (Helper.short2boolean(dtos[j].getBTag()) == true
                                    || Helper.short2boolean(dtos[j].getBHalbtag()) == true) {
                                ZeitmodelltagDto dto = getZeiterfassungFac().getZeitmodelltagZuDatum(
                                        personalDto.getIId(), new Timestamp(cVon.getTimeInMillis()),
                                        tagesartIId_Feiertag, tagesartIId_Halbtag, false, theClientDto);
                                if (dto != null && dto.getUSollzeit() != null) {

                                    dauer = Helper.time2Double(dto.getUSollzeit());
                                    if (Helper.short2boolean(dtos[j].getBHalbtag()) == true) {
                                        dauer = dauer / 2;
                                    }

                                }
                            } else {
                                dauer = Helper.time2Double(dtos[j].getUStunden());
                            }
                            neueZeile[REPORT_ZEITDATEN_DAUER_SONDERZEIT] = new Double(dauer);
                            daten.add(neueZeile);
                        }

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

                    if (resultList.size() > 0 || dtos.length > 0) {
                        // Letzte Zeile holen und Tagessumme eintragen
                        Object[] letzteZeile = (Object[]) daten.get(daten.size() - 1);
                        try {
                            Double d = getZeiterfassungFac().berechneTagesArbeitszeit(personalDto.getIId(),
                                    new java.sql.Date(cVon.getTimeInMillis()), theClientDto);

                            letzteZeile[REPORT_ZEITDATEN_TAGESSUMME] = d;

                        } catch (javax.ejb.EJBException ex3) {
                            letzteZeile[REPORT_ZEITDATEN_TAGESSUMME] = new Double(0);
                            letzteZeile[REPORT_ZEITDATEN_PROJEKTBEZEICHNUNG] = "Fehler in Zeitdaten";
                        } catch (EJBExceptionLP ex4) {
                            letzteZeile[REPORT_ZEITDATEN_TAGESSUMME] = new Double(0);
                            letzteZeile[REPORT_ZEITDATEN_PROJEKTBEZEICHNUNG] = "Fehler in Zeitdaten";
                        } catch (RemoteException e) {
                            throwEJBExceptionLPRespectOld(e);

                        }
                        daten.set(daten.size() - 1, letzteZeile);
                    }

                    session.close();

                    cVon.set(Calendar.DAY_OF_MONTH, cVon.get(Calendar.DAY_OF_MONTH) + 1);

                }

            }
        } catch (RemoteException ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
        }
        if (tVon != null) {
            parameter.put("P_VON", tVon);
        }
        if (tBis != null) {
            parameter.put("P_BIS", tBis);
        }

        Object[] x = daten.toArray();
        data = new Object[x.length][22];
        for (int i = 0; i < x.length; i++) {
            data[i] = (Object[]) x[i];
        }

        initJRDS(parameter, ZeiterfassungFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_ZEITDATEN,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();

    }

    public JasperPrintLP printZestiftliste(TheClientDto theClientDto) {
        sAktuellerReport = ZeiterfassungReportFac.REPORT_ZESTIFTE;
        HashMap<String, Object> parameter = new HashMap<String, Object>();

        ZeitstiftDto[] dtos = null;
        try {
            dtos = getZeiterfassungFac().zeitstiftFindByMandantCNr(theClientDto);
        } catch (RemoteException ex) {
            throwEJBExceptionLPRespectOld(ex);
        }

        data = new Object[dtos.length][3];

        for (int i = 0; i < dtos.length; i++) {
            data[i][REPORT_ZESTIFTE_KENNUNG] = dtos[i].getCNr().trim();
            data[i][REPORT_ZESTIFTE_MEHRFACHSTIFT] = new Boolean(Helper.short2Boolean(dtos[i].getBMehrfachstift()));
            if (dtos[i].getPersonalIId() != null) {

                PersonalDto personalDto = getPersonalFac().personalFindByPrimaryKey(dtos[i].getPersonalIId(),
                        theClientDto);
                data[i][REPORT_ZESTIFTE_PERSONAL] = personalDto.getPartnerDto().formatFixTitelName1Name2();

            }
        }

        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_ZESTIFTE,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    public JasperPrintLP printTelefonzeiten(Integer personalIId, Integer partnerIId, java.sql.Timestamp tVon,
            java.sql.Timestamp tBis, boolean bSortiertNachPersonal, TheClientDto theClientDto) {
        JasperPrintLP print = null;

        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(tBis.getTime());
        c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) + 1);
        tBis = Helper.cutTimestamp(new Timestamp(c.getTimeInMillis()));
        tVon = Helper.cutTimestamp(tVon);
        Integer varianteIId = theClientDto.getReportvarianteIId();
        if (bSortiertNachPersonal == true) {

            try {

                PersonalDto[] personalDtos = null;

                if (personalIId != null) {
                    personalDtos = new PersonalDto[1];
                    personalDtos[0] = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);
                } else {
                    personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(), true);
                }

                for (int i = 0; i < personalDtos.length; i++) {
                    theClientDto.setReportvarianteIId(varianteIId);
                    if (print != null) {

                        print = Helper.addReport2Report(print, erstelleTelefonzeiten(personalDtos[i].getIId(),
                                partnerIId, tVon, tBis, bSortiertNachPersonal, theClientDto).getPrint());
                    } else {
                        print = erstelleTelefonzeiten(personalDtos[i].getIId(), partnerIId, tVon, tBis,
                                bSortiertNachPersonal, theClientDto);
                    }
                }
            } catch (RemoteException ex) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
            }
        } else {
            Integer[] partner = new Integer[0];

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

            String sQuery = "SELECT distinct t.partner_i_id,p." + PartnerFac.FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1
                    + " FROM FLRTelefonzeiten as t LEFT OUTER JOIN t.flrpartner AS p " + " WHERE t.t_von>='"
                    + Helper.formatDateWithSlashes(new java.sql.Date(tVon.getTime())) + "' AND t.t_bis<='"
                    + Helper.formatDateWithSlashes(new java.sql.Date(tBis.getTime())) + "'" + " ORDER BY p."
                    + PartnerFac.FLR_PARTNER_NAME1NACHNAMEFIRMAZEILE1;

            Query inventurliste = session.createQuery(sQuery);

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

            Iterator<?> resultListIterator = resultList.iterator();
            partner = new Integer[resultList.size()];
            int row = 0;
            while (resultListIterator.hasNext()) {
                Object[] o = (Object[]) resultListIterator.next();
                partner[row] = (Integer) o[0];
                row++;
            }

            session.close();

            for (int i = 0; i < partner.length; i++) {
                theClientDto.setReportvarianteIId(varianteIId);
                if (print != null) {

                    print = Helper.addReport2Report(print, erstelleTelefonzeiten(personalIId, partner[i], tVon,
                            tBis, bSortiertNachPersonal, theClientDto).getPrint());
                } else {
                    print = erstelleTelefonzeiten(personalIId, partner[i], tVon, tBis, bSortiertNachPersonal,
                            theClientDto);
                }

            }
        }
        return print;
    }

    private JasperPrintLP erstelleTelefonzeiten(Integer personalIId, Integer partnerIId, java.sql.Timestamp tVon,
            java.sql.Timestamp tBis, boolean bSortiertNachPersonal, TheClientDto theClientDto) {
        SessionFactory factory = FLRSessionFactory.getFactory();
        Session session = factory.openSession();
        HashMap<String, Object> parameter = new HashMap<String, Object>();
        org.hibernate.Criteria crit = session.createCriteria(FLRTelefonzeiten.class)
                .createAlias(ZeiterfassungFac.FLR_TELEFONZEITEN_FLRPERSONAL, "p")
                .add(Restrictions.eq("p.mandant_c_nr", theClientDto.getMandant()));

        if (personalIId != null) {
            crit.add(Restrictions.eq(ZeiterfassungFac.FLR_TELEFONZEITEN_PERSONAL_I_ID, personalIId));
        }
        if (partnerIId != null) {
            crit.add(Restrictions.eq(ZeiterfassungFac.FLR_TELEFONZEITEN_PARTNER_I_ID, partnerIId));

            com.lp.server.partner.service.PartnerDto partnerDto = getPartnerFac()
                    .partnerFindByPrimaryKey(partnerIId, theClientDto);

            parameter.put("P_PARTNER", partnerDto.formatFixTitelName1Name2());

        } else {
            if (bSortiertNachPersonal == false && partnerIId == null) {
                crit.add(Restrictions.isNull(ZeiterfassungFac.FLR_TELEFONZEITEN_PARTNER_I_ID));
            }

        }

        if (bSortiertNachPersonal == true) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.personal", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.partner", theClientDto.getMandant(), theClientDto.getLocUi()));
        }

        crit.add(Restrictions.ge(ZeiterfassungFac.FLR_TELEFONZEITEN_T_VON, tVon));
        crit.add(Restrictions.lt(ZeiterfassungFac.FLR_TELEFONZEITEN_T_VON, tBis));

        crit.addOrder(Order.asc(ZeiterfassungFac.FLR_TELEFONZEITEN_T_VON));
        List<?> list = crit.list();
        Iterator<?> iterator = list.iterator();
        data = new Object[list.size()][10];
        int row = 0;
        while (iterator.hasNext()) {
            FLRTelefonzeiten flrTelefonzeiten = (FLRTelefonzeiten) iterator.next();

            String sVorname = flrTelefonzeiten.getFlrpersonal().getFlrpartner().getC_name2vornamefirmazeile2();
            String sNachname = flrTelefonzeiten.getFlrpersonal().getFlrpartner().getC_name1nachnamefirmazeile1();
            if (sVorname != null) {
                sNachname = sVorname + " " + sNachname;
            }
            data[row][REPORT_TELEFONLISTE_PERSON] = sNachname;

            if (flrTelefonzeiten.getFlransprechpartner() != null) {
                sVorname = flrTelefonzeiten.getFlransprechpartner().getFlrpartneransprechpartner()
                        .getC_name2vornamefirmazeile2();
                sNachname = flrTelefonzeiten.getFlransprechpartner().getFlrpartneransprechpartner()
                        .getC_name1nachnamefirmazeile1();
                if (sVorname != null) {
                    sNachname = sVorname + " " + sNachname;
                }
                data[row][REPORT_TELEFONLISTE_ANSPRECHPARTNER] = sNachname;
            }

            if (flrTelefonzeiten.getT_bis() != null) {
                java.sql.Time tTemp = new java.sql.Time(
                        flrTelefonzeiten.getT_bis().getTime() - flrTelefonzeiten.getT_von().getTime() - 3600000);
                data[row][REPORT_TELEFONLISTE_DAUER] = Helper.time2Double(tTemp);

            }

            if (flrTelefonzeiten.getFlrpartner() != null) {

                com.lp.server.partner.service.PartnerDto partnerDto = getPartnerFac()
                        .partnerFindByPrimaryKey(flrTelefonzeiten.getFlrpartner().getI_id(), theClientDto);
                data[row][REPORT_TELEFONLISTE_PARTNER] = partnerDto.formatFixTitelName1Name2();

                if (flrTelefonzeiten.getFlrpartner().getFlrlandplzort() != null) {
                    data[row][REPORT_TELEFONLISTE_LKZ_PARTNER] = flrTelefonzeiten.getFlrpartner().getFlrlandplzort()
                            .getFlrland().getC_lkz();
                }

            }

            if (bSortiertNachPersonal == true) {
                data[row][REPORT_TELEFONLISTE_GRUPPIERUNG] = personalIId;
            } else {
                if (flrTelefonzeiten.getFlrpartner() != null) {
                    data[row][REPORT_TELEFONLISTE_GRUPPIERUNG] = flrTelefonzeiten.getFlrpartner().getI_id();
                }
            }

            data[row][REPORT_TELEFONLISTE_VON] = new Timestamp(flrTelefonzeiten.getT_von().getTime());
            if (flrTelefonzeiten.getT_bis() != null) {
                data[row][REPORT_TELEFONLISTE_BIS] = new Timestamp(flrTelefonzeiten.getT_bis().getTime());
            }
            data[row][REPORT_TELEFONLISTE_KOMMENTAREXTERN] = flrTelefonzeiten.getX_kommentarext();
            data[row][REPORT_TELEFONLISTE_KOMMENTARINTERN] = flrTelefonzeiten.getX_kommentarint();

            row++;
        }

        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(tBis.getTime());
        c.set(Calendar.DAY_OF_MONTH, c.get(Calendar.DAY_OF_MONTH) - 1);
        tBis = new Timestamp(c.getTimeInMillis());

        parameter.put("P_VON", tVon);
        parameter.put("P_BIS", tBis);

        sAktuellerReport = ZeiterfassungReportFac.REPORT_TELEFONZEITEN;
        index = -1;
        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_TELEFONZEITEN,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

        return getReportPrint();
    }

    public JasperPrintLP printFahrzeuge(Integer fahrzeugIId, java.sql.Timestamp tVon, java.sql.Timestamp tBis,
            TheClientDto theClientDto) {

        tVon = Helper.cutTimestamp(tVon);
        tBis = Helper.cutTimestamp(tBis);

        if (tVon.after(tBis)) {
            java.sql.Timestamp h = tVon;
            tVon = tBis;
            tBis = h;
        }

        ArrayList<ReiseKomplettDto> alReisen = getZeiterfassungFac().holeReisenKomplett(fahrzeugIId, tVon, tBis,
                theClientDto);

        ArrayList alDaten = new ArrayList();
        for (int k = 0; k < alReisen.size(); k++) {

            ReiseKomplettDto rkDto = alReisen.get(k);

            // Kosten

            BigDecimal kmKostenKomplett = getZeiterfassungFac().getKmKostenEinerReise(rkDto, theClientDto);

            FahrzeugDto fzDto = getPersonalFac().fahrzeugFindByPrimaryKey(rkDto.getReiseEnde().getFahrzeugIId());

            TreeMap tmBeginn = rkDto.getTmReiseBeginn();
            Iterator it = tmBeginn.keySet().iterator();
            while (it.hasNext()) {
                ReiseDto rDto = (ReiseDto) tmBeginn.get(it.next());
                Object[] oZeile = new Object[REPORT_FAHRZEUGE_ANZAHL_SPALTEN];
                oZeile[REPORT_FAHRZEUGE_FAHRZEUG] = fzDto.getCBez();
                oZeile[REPORT_FAHRZEUGE_KENNZEICHEN] = fzDto.getCKennzeichen();
                oZeile[REPORT_FAHRZEUGE_BEGINN] = rDto.getTZeit();
                oZeile[REPORT_FAHRZEUGE_KOSTEN] = rkDto.getAnteiligeKostenEinesAbschnitts(rDto.getIId(),
                        kmKostenKomplett);

                try {

                    oZeile[REPORT_FAHRZEUGE_PERSON] = getPersonalFac()
                            .personalFindByPrimaryKey(rDto.getPersonalIId(), theClientDto).formatFixName1Name2();

                    oZeile[REPORT_FAHRZEUGE_LAND] = getZeiterfassungFac()
                            .diaetenFindByPrimaryKey(rDto.getDiaetenIId()).getCBez();

                } catch (RemoteException e) {
                    throwEJBExceptionLPRespectOld(e);
                }
                if (rDto.getPartnerIId() != null) {
                    oZeile[REPORT_FAHRZEUGE_PARTNER] = getPartnerFac()
                            .partnerFindByPrimaryKey(rDto.getPartnerIId(), theClientDto).formatFixName1Name2();
                }
                if (it.hasNext() == false) {
                    oZeile[REPORT_FAHRZEUGE_ENDE] = rkDto.getReiseEnde().getTZeit();
                    if (rkDto.getReiseEnde().getIKmbeginn() != null && rkDto.getReiseEnde().getIKmende() != null) {

                        oZeile[REPORT_FAHRZEUGE_STRECKE] = rkDto.getReiseEnde().getIKmende()
                                - rkDto.getReiseEnde().getIKmbeginn();
                    }
                }

                alDaten.add(oZeile);

            }

        }

        Object[][] returnArray = new Object[alDaten.size()][REPORT_FAHRZEUGE_ANZAHL_SPALTEN];
        data = (Object[][]) alDaten.toArray(returnArray);

        /*
         * try {
         * 
         * //Nun alle Reisen durchgehen
         * 
         * Integer landIIdHeimat = null; Integer partnerMandant =
         * getMandantFac().mandantFindByPrimaryKey( theClientDto.getMandant(),
         * theClientDto).getPartnerIId(); PartnerDto partnerDto =
         * getPartnerFac().partnerFindByPrimaryKey( partnerMandant,
         * theClientDto); if (partnerDto.getLandplzortDto() != null) {
         * landIIdHeimat = partnerDto.getLandplzortDto().getIlandID(); }
         * ArrayList<Object> alReiseeintraege = erstelleEinzelneReiseeintraege(
         * tVon, tBis, theClientDto, landIIdHeimat, null); data = new
         * Object[alReiseeintraege.size()][REPORT_FAHRZEUGE_ANZAHL_SPALTEN]; for
         * (int k = 0; k < alReiseeintraege.size(); k++) { Object[] o =
         * (Object[]) alReiseeintraege.get(k); data[k][REPORT_FAHRZEUGE_BEGINN]
         * = o[REPORT_REISEZEITEN_BEGINN]; data[k][REPORT_FAHRZEUGE_ENDE] =
         * o[REPORT_REISEZEITEN_ENDE]; data[k][REPORT_FAHRZEUGE_FAHRZEUG] =
         * o[REPORT_REISEZEITEN_FAHRZEUG]; data[k][REPORT_FAHRZEUGE_KENNZEICHEN]
         * = o[REPORT_REISEZEITEN_KENNZEICHEN]; data[k][REPORT_FAHRZEUGE_LAND] =
         * o[REPORT_REISEZEITEN_LAND]; data[k][REPORT_FAHRZEUGE_PARTNER] =
         * o[REPORT_REISEZEITEN_PARTNER]; // data[k][REPORT_FAHRZEUGE_KOSTEN] =
         * // o[REPORT_REISEZEITEN_SPESEN]; data[k][REPORT_FAHRZEUGE_STRECKE] =
         * o[REPORT_REISEZEITEN_ENTFERNUNG];
         * 
         * }
         * 
         * } catch (RemoteException e) { throwEJBExceptionLPRespectOld(e); }
         */

        sAktuellerReport = ZeiterfassungReportFac.REPORT_FAHRZEUGE;
        index = -1;
        HashMap<String, Object> parameter = new HashMap<String, Object>();
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(tBis.getTime());
        c.set(Calendar.DATE, c.get(Calendar.DATE) - 1);
        parameter.put("P_VON", tVon);
        parameter.put("P_BIS", new java.sql.Timestamp(c.getTimeInMillis()));
        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_FAHRZEUGE,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

        return getReportPrint();
    }

    public JasperPrintLP printReisezeiten(Integer personalIId, java.sql.Timestamp tVon, java.sql.Timestamp tBis,
            Integer iOption, boolean bPlusVersteckte, TheClientDto theClientDto) {
        if (tVon == null || tBis == null || personalIId.equals(iOption)) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                    new Exception("tVon == null || tBis == null || personalIId == iOption"));
        }
        tVon = Helper.cutTimestamp(tVon);
        tBis = Helper.cutTimestamp(tBis);

        if (tVon.after(tBis)) {
            java.sql.Timestamp h = tVon;
            tVon = tBis;
            tBis = h;
        }
        PersonalDto[] personalDtos = null;
        JasperPrintLP print = null;
        Integer landIIdHeimat = null;
        try {
            Integer partnerMandant = getMandantFac()
                    .mandantFindByPrimaryKey(theClientDto.getMandant(), theClientDto).getPartnerIId();
            PartnerDto partnerDto = getPartnerFac().partnerFindByPrimaryKey(partnerMandant, theClientDto);
            if (partnerDto.getLandplzortDto() != null) {
                landIIdHeimat = partnerDto.getLandplzortDto().getIlandID();
            }
            if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_SELEKTIERTE_PERSON) {

                if (personalIId == null) {
                    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                            new Exception("personalIId == null"));
                }

                personalDtos = new PersonalDto[1];

                personalDtos[0] = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);

            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_PERSONEN) {
                personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(),
                        bPlusVersteckte);
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_MEINE_ABTEILUNG) {
                PersonalDto personalDto = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);
                personalDtos = getPersonalFac().personalFindAllPersonenMeinerAbteilung(
                        personalDto.getKostenstelleIIdAbteilung(), theClientDto.getMandant(), bPlusVersteckte);
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_ARBEITER) {
                personalDtos = getPersonalFac().personalFindAllArbeiterEinesMandanten(theClientDto.getMandant(),
                        bPlusVersteckte);
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_ANGESTELLTE) {
                personalDtos = getPersonalFac().personalFindAllAngestellteEinesMandanten(theClientDto.getMandant(),
                        bPlusVersteckte);
            } else {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER, new Exception("OPTION NICHT VERFUEGBAR"));
            }
        } catch (RemoteException ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
        }

        for (int i = 0; i < personalDtos.length; i++) {
            PersonalDto personalDto = personalDtos[i];

            personalDto.setPartnerDto(
                    getPartnerFac().partnerFindByPrimaryKey(personalDto.getPartnerIId(), theClientDto));

            ArrayList<Object> alReiseeintraege = erstelleEinzelneReiseeintraege(tVon, tBis, theClientDto,
                    landIIdHeimat, personalDto.getIId());

            sAktuellerReport = ZeiterfassungReportFac.REPORT_REISEZEITEN;
            HashMap<String, Object> parameter = new HashMap<String, Object>();

            parameter.put("P_PERSONAL", personalDto.getPartnerDto().formatFixTitelName1Name2());
            parameter.put("P_PERSONALART", getPersonalFac()
                    .personalartFindByPrimaryKey(personalDto.getPersonalartCNr(), theClientDto).getBezeichnung());

            parameter.put("P_VON", tVon);

            parameter.put("P_WAEHRUNG", theClientDto.getSMandantenwaehrung());

            // KM-Geld
            try {
                Calendar cal = Calendar.getInstance();
                cal.setTimeInMillis(tVon.getTime());
                PersonalgehaltDto personalgehaltDto = getPersonalFac().personalgehaltFindLetztePersonalgehalt(
                        personalDto.getIId(), cal.get(Calendar.YEAR), cal.get(Calendar.MONTH));

                if (personalgehaltDto != null) {
                    parameter.put("P_KMGELD1", personalgehaltDto.getNKmgeld1());
                    parameter.put("P_KMGELD2", personalgehaltDto.getNKmgeld2());
                    parameter.put("P_KMGELD1BISKILOMETER", personalgehaltDto.getFBiskilometer().doubleValue());

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

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tBis.getTime());
            c.set(Calendar.DATE, c.get(Calendar.DATE) - 1);

            parameter.put("P_BIS", new java.sql.Timestamp(c.getTimeInMillis()));
            data = new Object[alReiseeintraege.size()][REPORT_REISEZEITEN_ANZAHL_SPALTEN];
            BigDecimal summeSpesen = new BigDecimal(0).setScale(2);
            // summeSpesen.setScale(2);

            BigDecimal summeDiaeten = new BigDecimal(0).setScale(2);
            // summeDiaeten.setScale(2);
            BigDecimal summeDiaetenAusland = new BigDecimal(0).setScale(2);
            // summeDiaetenAusland.setScale(2);

            HashMap<Timestamp, String> hmReisetage = new HashMap<Timestamp, String>();

            int iZaehler = 1;

            for (int k = 0; k < alReiseeintraege.size(); k++) {
                Object[] o = (Object[]) alReiseeintraege.get(k);
                data[k][REPORT_REISEZEITEN_BEGINN] = o[REPORT_REISEZEITEN_BEGINN];
                data[k][REPORT_REISEZEITEN_ENDE] = o[REPORT_REISEZEITEN_ENDE];
                data[k][REPORT_REISEZEITEN_FAHRZEUG] = o[REPORT_REISEZEITEN_FAHRZEUG];
                data[k][REPORT_REISEZEITEN_KENNZEICHEN] = o[REPORT_REISEZEITEN_KENNZEICHEN];

                if (o[REPORT_REISEZEITEN_BEGINN] != null && o[REPORT_REISEZEITEN_ENDE] != null) {

                    Calendar cVon = Calendar.getInstance();
                    cVon.setTimeInMillis(((Timestamp) o[REPORT_REISEZEITEN_BEGINN]).getTime());

                    Calendar cBis = Calendar.getInstance();
                    cBis.setTimeInMillis(((Timestamp) o[REPORT_REISEZEITEN_ENDE]).getTime());

                    while (cVon.get(Calendar.DAY_OF_YEAR) <= cBis.get(Calendar.DAY_OF_YEAR)) {
                        Timestamp tTag = Helper.cutTimestamp(new Timestamp(cVon.getTimeInMillis()));

                        if (!hmReisetage.containsKey(tTag)) {
                            hmReisetage.put(tTag, "");
                        }

                        cVon.set(Calendar.DAY_OF_MONTH, cVon.get(Calendar.DAY_OF_MONTH) + 1);

                    }

                }

                o[REPORT_REISEZEITEN_ZAEHLER] = new Integer(iZaehler);
                if (((Boolean) o[REPORT_REISEZEITEN_ECHTESENDE]) == true) {
                    iZaehler++;
                }

                data[k][REPORT_REISEZEITEN_ENTFERNUNG] = o[REPORT_REISEZEITEN_ENTFERNUNG];
                data[k][REPORT_REISEZEITEN_KOMMENTAR] = o[REPORT_REISEZEITEN_KOMMENTAR];
                data[k][REPORT_REISEZEITEN_LAND] = o[REPORT_REISEZEITEN_LAND];
                data[k][REPORT_REISEZEITEN_PARTNER] = o[REPORT_REISEZEITEN_PARTNER];
                data[k][REPORT_REISEZEITEN_ZAEHLER] = o[REPORT_REISEZEITEN_ZAEHLER];
                data[k][REPORT_REISEZEITEN_TAG] = o[REPORT_REISEZEITEN_TAG];
                data[k][REPORT_REISEZEITEN_SPESEN] = o[REPORT_REISEZEITEN_SPESEN];

                if (o[REPORT_REISEZEITEN_SPESEN] != null) {
                    summeSpesen = summeSpesen.add((BigDecimal) o[REPORT_REISEZEITEN_SPESEN]);
                }

                data[k][REPORT_REISEZEITEN_ABSTUNDEN] = o[REPORT_REISEZEITEN_ABSTUNDEN];
                data[k][REPORT_REISEZEITEN_STUNDENSATZ] = o[REPORT_REISEZEITEN_STUNDENSATZ];
                data[k][REPORT_REISEZEITEN_MINDESTSATZ] = o[REPORT_REISEZEITEN_MINDESTSATZ];
                data[k][REPORT_REISEZEITEN_TAGESSATZ] = o[REPORT_REISEZEITEN_TAGESSATZ];

                data[k][REPORT_REISEZEITEN_DIAETEN] = o[REPORT_REISEZEITEN_DIAETEN];
                if (o[REPORT_REISEZEITEN_DIAETEN] != null) {
                    summeDiaeten = summeDiaeten.add((BigDecimal) o[REPORT_REISEZEITEN_DIAETEN]);
                }

                data[k][REPORT_REISEZEITEN_AUSLAND] = o[REPORT_REISEZEITEN_AUSLAND];
                if (((Boolean) o[REPORT_REISEZEITEN_AUSLAND]).booleanValue() == true) {
                    summeDiaetenAusland = summeDiaetenAusland.add((BigDecimal) o[REPORT_REISEZEITEN_DIAETEN]);
                }

            }
            parameter.put("P_SUMMESPESEN", summeSpesen);
            parameter.put("P_SUMMEDIAETEN", summeDiaeten);
            parameter.put("P_SUMMEDIAETENAUSLAND", summeDiaetenAusland);
            parameter.put("P_SUMMEREISETAGE", hmReisetage.size());

            initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_REISEZEITEN,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

            if (print != null) {

                print = Helper.addReport2Report(print, getReportPrint().getPrint());
            } else {
                print = getReportPrint();
            }
        }
        return print;
    }

    private ArrayList<Object> erstelleEinzelneReiseeintraege(java.sql.Timestamp tVon, java.sql.Timestamp tBis,
            TheClientDto theClientDto, Integer landIIdHeimat, Integer personalIId) {
        ArrayList<Object> alReiseeintraege = new ArrayList<Object>();
        // Hole Alle Eintraege des gewuenschten Zeitraums
        Session session = FLRSessionFactory.getFactory().openSession();

        org.hibernate.Criteria crit = session.createCriteria(FLRReise.class);

        crit.add(Restrictions.eq(ZeiterfassungFac.FLR_REISE_PERSONAL_I_ID, personalIId));

        crit.add(Restrictions.ge(ZeiterfassungFac.FLR_REISE_T_ZEIT, tVon));
        crit.add(Restrictions.lt(ZeiterfassungFac.FLR_REISE_T_ZEIT, tBis));
        crit.addOrder(Order.asc(ZeiterfassungFac.FLR_REISE_T_ZEIT));
        List<?> resultList = crit.list();
        Iterator<?> resultListIterator = resultList.iterator();

        if (resultListIterator.hasNext()) {
            FLRReise letzterEintrag = (FLRReise) resultListIterator.next();

            // ERSTER EINTRAG
            // Hole den Reiseeintrag vor dem ersten im Zeitraum
            Session sessReiseLetztesBeginn = FLRSessionFactory.getFactory().openSession();
            org.hibernate.Criteria criteriaLetztesBeginn = sessReiseLetztesBeginn.createCriteria(FLRReise.class);
            criteriaLetztesBeginn.add(Expression.eq(ZeiterfassungFac.FLR_REISE_PERSONAL_I_ID,
                    letzterEintrag.getFlrpersonal().getI_id()));
            criteriaLetztesBeginn.add(Expression.le(ZeiterfassungFac.FLR_REISE_T_ZEIT, letzterEintrag.getT_zeit()));
            criteriaLetztesBeginn.addOrder(Order.desc(ZeiterfassungFac.FLR_REISE_T_ZEIT));
            criteriaLetztesBeginn.setMaxResults(2);
            List<?> listLetzttesBeginn = criteriaLetztesBeginn.list();
            Iterator<?> letzterEintragIterator = listLetzttesBeginn.iterator();

            if (letzterEintragIterator.hasNext()) {
                FLRReise flrAnfang = (FLRReise) letzterEintragIterator.next();
                if (letzterEintragIterator.hasNext()) {
                    FLRReise flrLetzterEintrag = (FLRReise) letzterEintragIterator.next();
                    // Wenn dieser ein Beginn-Eintrag ist
                    if (Helper.short2boolean(flrLetzterEintrag.getB_beginn()) == true) {
                        alReiseeintraege.add(befuelleReiseeintragFuerReport(flrLetzterEintrag, tVon, flrAnfang,
                                flrAnfang.getT_zeit(), landIIdHeimat, false, theClientDto));
                    }
                    // Wenn dieser ein Ende-Eintrag ist, dann ignorieren

                }
            }

            // ENDE-ERSTER EINTRAG

            while (resultListIterator.hasNext()) {
                FLRReise flrReise = (FLRReise) resultListIterator.next();
                // Wenn ENDE, dann neue Zeile hinzufuegen
                if (Helper.short2boolean(flrReise.getB_beginn()) == false) {
                    alReiseeintraege.add(befuelleReiseeintragFuerReport(letzterEintrag, letzterEintrag.getT_zeit(),
                            flrReise, flrReise.getT_zeit(), landIIdHeimat, true, theClientDto));
                } else if (Helper.short2boolean(flrReise.getB_beginn()) == true
                        && Helper.short2boolean(letzterEintrag.getB_beginn()) == true) {
                    // Wenn beginn und vorheriger eintrag beginn, dann
                    // ebenfalss neue Zeile hinzufuegen
                    alReiseeintraege.add(befuelleReiseeintragFuerReport(letzterEintrag, letzterEintrag.getT_zeit(),
                            flrReise, flrReise.getT_zeit(), landIIdHeimat, false, theClientDto));
                }
                letzterEintrag = flrReise;
            }

            if (Helper.short2boolean(letzterEintrag.getB_beginn()) == true) {
                // LETZTER EINTRAG
                // Hole den Reiseeintrag vor dem ersten im Zeitraum
                Session sessReiseLetztesEnde = FLRSessionFactory.getFactory().openSession();
                org.hibernate.Criteria criteriaLetztesEnde = sessReiseLetztesEnde.createCriteria(FLRReise.class);
                criteriaLetztesEnde.add(
                        Expression.eq(ZeiterfassungFac.FLR_REISE_PERSONAL_I_ID, letzterEintrag.getPersonal_i_id()));
                criteriaLetztesEnde
                        .add(Expression.gt(ZeiterfassungFac.FLR_REISE_T_ZEIT, letzterEintrag.getT_zeit()));
                criteriaLetztesEnde.addOrder(Order.desc(ZeiterfassungFac.FLR_REISE_T_ZEIT));
                criteriaLetztesEnde.setMaxResults(2);
                List<?> listLetzttesEnde = criteriaLetztesEnde.list();
                Iterator<?> letztesEndeIterator = listLetzttesEnde.iterator();

                if (letztesEndeIterator.hasNext()) {
                    FLRReise flrNachLetztemEintrag = (FLRReise) letztesEndeIterator.next();

                    FLRReise ende = new FLRReise();
                    ende.setB_beginn(flrNachLetztemEintrag.getB_beginn());
                    ende.setC_kommentar(flrNachLetztemEintrag.getC_kommentar());
                    ende.setFlrdiaeten(flrNachLetztemEintrag.getFlrdiaeten());
                    ende.setFlrpartner(flrNachLetztemEintrag.getFlrpartner());
                    ende.setFlrpersonal(flrNachLetztemEintrag.getFlrpersonal());
                    ende.setI_id(flrNachLetztemEintrag.getI_id());
                    ende.setPersonal_i_id(flrNachLetztemEintrag.getPersonal_i_id());
                    ende.setT_zeit(flrNachLetztemEintrag.getT_zeit());

                    Calendar c = Calendar.getInstance();
                    c.setTimeInMillis(tBis.getTime());
                    c.set(Calendar.SECOND, c.get(Calendar.SECOND) - 1);

                    alReiseeintraege.add(befuelleReiseeintragFuerReport(letzterEintrag, letzterEintrag.getT_zeit(),
                            ende, new java.sql.Date(c.getTimeInMillis()), landIIdHeimat, false, theClientDto));
                }
                sessReiseLetztesEnde.close();

            }
            // ENDE-ERSTER EINTRAG

            sessReiseLetztesBeginn.close();

        }
        session.close();
        return alReiseeintraege;
    }

    private Object[] befuelleReiseeintragFuerReport(FLRReise flrBeginn, java.util.Date tBeginn, FLRReise flrEnde,
            java.util.Date tEnde, Integer landIIdHeimat, Boolean bEchtesEnde, TheClientDto theClientDto) {
        // Kurze Tagebezeichnungen holen
        String[] kurzeWochentage = new DateFormatSymbols(theClientDto.getLocUi()).getShortWeekdays();

        Object[] oZeile = new Object[REPORT_REISEZEITEN_ANZAHL_SPALTEN];
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(tBeginn.getTime());
        oZeile[REPORT_REISEZEITEN_TAG] = kurzeWochentage[cal.get(Calendar.DAY_OF_WEEK)];
        oZeile[REPORT_REISEZEITEN_BEGINN] = new java.sql.Timestamp(tBeginn.getTime());
        oZeile[REPORT_REISEZEITEN_ENDE] = new java.sql.Timestamp(tEnde.getTime());

        oZeile[REPORT_REISEZEITEN_ECHTESENDE] = bEchtesEnde;

        oZeile[REPORT_REISEZEITEN_KOMMENTAR] = flrBeginn.getC_kommentar();
        if (Helper.short2boolean(flrBeginn.getB_beginn()) == true) {
            oZeile[REPORT_REISEZEITEN_LAND] = flrBeginn.getFlrdiaeten().getC_bez();
        }
        int iEntfernung = 0;
        if (flrEnde.getI_kmbeginn() != null && flrEnde.getI_kmende() != null) {
            iEntfernung = flrEnde.getI_kmende() - flrEnde.getI_kmbeginn();
            oZeile[REPORT_REISEZEITEN_ENTFERNUNG] = iEntfernung;
        }

        try {

            if (flrBeginn.getFlrdiaeten() == null) {
                ArrayList alInfo = new ArrayList();

                PersonalDto pDto = getPersonalFac().personalFindByPrimaryKey(flrBeginn.getPersonal_i_id(),
                        theClientDto);

                alInfo.add(pDto.formatAnrede());
                alInfo.add(flrEnde.getT_zeit());

                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_IN_REISEZEITEN, alInfo,
                        new Exception("FEHLER_IN_REISEZEITEN"));

            }

            oZeile[REPORT_REISEZEITEN_DIAETEN] = getZeiterfassungFac().berechneDiaeten(
                    flrBeginn.getFlrdiaeten().getI_id(), new Timestamp(tBeginn.getTime()),
                    new Timestamp(tEnde.getTime()), theClientDto);

            if (flrBeginn.getFlrpartner() != null) {
                com.lp.server.partner.service.PartnerDto partnerDto = getPartnerFac()
                        .partnerFindByPrimaryKey(flrBeginn.getFlrpartner().getI_id(), theClientDto);
                oZeile[REPORT_REISEZEITEN_PARTNER] = partnerDto.formatFixTitelName1Name2();
            }

            DiaetentagessatzDto[] dtos = getZeiterfassungFac().diaetentagessatzFindGueltigenTagessatzZuDatum(
                    flrBeginn.getFlrdiaeten().getI_id(), new Timestamp(flrBeginn.getT_zeit().getTime()));
            if (dtos != null && dtos.length > 0) {
                oZeile[REPORT_REISEZEITEN_STUNDENSATZ] = dtos[0].getNStundensatz();
                oZeile[REPORT_REISEZEITEN_TAGESSATZ] = dtos[0].getNTagessatz();
                oZeile[REPORT_REISEZEITEN_ABSTUNDEN] = dtos[0].getIAbstunden();
                oZeile[REPORT_REISEZEITEN_MINDESTSATZ] = dtos[0].getNMindestsatz();
            }

        } catch (RemoteException ex1) {
            throwEJBExceptionLPRespectOld(ex1);
        }
        if (flrEnde.getN_spesen() != null) {
            oZeile[REPORT_REISEZEITEN_SPESEN] = flrEnde.getN_spesen();
        } else {
            oZeile[REPORT_REISEZEITEN_SPESEN] = new BigDecimal(0);
        }

        if (flrEnde.getFlrfahrzeug() != null) {
            oZeile[REPORT_REISEZEITEN_FAHRZEUG] = flrEnde.getFlrfahrzeug().getC_bez();
            oZeile[REPORT_REISEZEITEN_KENNZEICHEN] = flrEnde.getFlrfahrzeug().getC_kennzeichen();
        } else {
            oZeile[REPORT_REISEZEITEN_FAHRZEUG] = flrEnde.getC_fahrzeug();
        }

        if (flrBeginn.getFlrdiaeten().getFlrland().getI_id().equals(landIIdHeimat)) {
            oZeile[REPORT_REISEZEITEN_AUSLAND] = new Boolean(false);
        } else {
            oZeile[REPORT_REISEZEITEN_AUSLAND] = new Boolean(true);
        }

        return oZeile;
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printAuftragszeitstatistik(java.sql.Timestamp tVon, java.sql.Timestamp tBis,
            TheClientDto theClientDto) {
        sAktuellerReport = ZeiterfassungReportFac.REPORT_AUFTRAGSZEITSTATISTIK;

        Integer tagesartIId_Feiertag = getZeiterfassungFac()
                .tagesartFindByCNr(ZeiterfassungFac.TAGESART_FEIERTAG, theClientDto).getIId();
        Integer tagesartIId_Halbtag = getZeiterfassungFac()
                .tagesartFindByCNr(ZeiterfassungFac.TAGESART_HALBTAG, theClientDto).getIId();

        HashMap<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("P_VON", tVon);

        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(tBis.getTime());
        c.set(Calendar.DATE, c.get(Calendar.DATE) - 1);

        parameter.put("P_BIS", new java.sql.Timestamp(c.getTimeInMillis()));

        String sQueryAuftragzeiten = "SELECT distinct z.c_belegartnr, z.i_belegartid FROM FLRZeitdatenLos z WHERE (z.c_belegartnr='"
                + LocaleFac.BELEGART_AUFTRAG + "' OR z.c_belegartnr='" + LocaleFac.BELEGART_LOS
                + "'  OR z.c_belegartnr='" + LocaleFac.BELEGART_ANGEBOT + "')";

        // WG MITTERNACHTSSPRUNG
        // Daten einen Tag vorher holen wg. Mitternachtssprung

        sQueryAuftragzeiten += " AND z.t_zeit>='" + Helper.formatTimestampWithSlashes(
                Helper.cutTimestamp(new Timestamp(tVon.getTime() - (3600000 * 24)))) + "'";

        sQueryAuftragzeiten += " AND z.t_zeit<'" + Helper.formatTimestampWithSlashes(tBis) + "'";

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

        org.hibernate.Query zeiten = session.createQuery(sQueryAuftragzeiten);

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

        Iterator<?> resultListAuftraege = resultList.iterator();

        TreeMap hmPersonen = new TreeMap();
        HashMap hmBereitsGezaehlteAuftraege = new HashMap();
        HashMap hmBereitsGezaehlteAngebote = new HashMap();

        HashMap hmAnwesenheitzeitenImZeitraum = new HashMap();
        HashMap hmSondezeitenImZeitraum = new HashMap();

        TreeMap tmAlleAuftraege = new TreeMap();

        Double dAnwesenheitGesamt = new Double(0);
        BigDecimal dSonderzeitGesamt = new BigDecimal(0);

        while (resultListAuftraege.hasNext()) {
            Object[] o = (Object[]) resultListAuftraege.next();
            String belegartCNr = (String) o[0];
            Integer iBelegartIId = (Integer) o[1];

            if (belegartCNr.equals(LocaleFac.BELEGART_AUFTRAG)) {
                AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKeyOhneExc(iBelegartIId);
                if (auftragDto != null) {
                    // Auftrag nur einmal zaehlen
                    if (!hmBereitsGezaehlteAuftraege.containsKey(iBelegartIId)) {

                        AuftragzeitenDto[] auftragszeitenEinesAuftragsDtos = getZeiterfassungFac()
                                .getAllZeitenEinesBeleges(LocaleFac.BELEGART_AUFTRAG, iBelegartIId, null, null,
                                        tVon, tBis, true, false, theClientDto);
                        for (int i = 0; i < auftragszeitenEinesAuftragsDtos.length; i++) {
                            AuftragzeitenDto auftragszeitDto = auftragszeitenEinesAuftragsDtos[i];
                            add2PersonalHashMap(hmPersonen, auftragszeitDto.getsPersonNachnameVorname(),
                                    "AB" + auftragDto.getCNr(), auftragszeitDto.getDdDauer());

                            add2PersonalHashMap(hmPersonen, "~GESAMTSUMME", "AB" + auftragDto.getCNr(),
                                    auftragszeitDto.getDdDauer());

                            tmAlleAuftraege.put("AB" + auftragDto.getCNr(), auftragDto);

                            if (!hmAnwesenheitzeitenImZeitraum
                                    .containsKey(auftragszeitDto.getsPersonNachnameVorname())) {

                                Double dIstGesamt = new Double(0);
                                Double dGesamt = getZeiterfassungFac().berechneArbeitszeitImZeitraum(
                                        auftragszeitDto.getIPersonalMaschinenId(),
                                        new java.sql.Date(tVon.getTime()), new java.sql.Date(tBis.getTime()),
                                        theClientDto);

                                if (dGesamt != null) {
                                    dIstGesamt = dGesamt.doubleValue();
                                }

                                hmAnwesenheitzeitenImZeitraum.put(auftragszeitDto.getsPersonNachnameVorname(),
                                        dIstGesamt);
                                dAnwesenheitGesamt += dIstGesamt;

                            }

                            if (!hmSondezeitenImZeitraum.containsKey(auftragszeitDto.getsPersonNachnameVorname())) {
                                BigDecimal bdSonder = getZeiterfassungFac()
                                        .getStundenAllerBezahltenSondertaetigkeitenImZeitraum(
                                                auftragszeitDto.getIPersonalMaschinenId(), tagesartIId_Feiertag,
                                                tagesartIId_Halbtag, tVon, tBis, theClientDto);
                                hmSondezeitenImZeitraum.put(auftragszeitDto.getsPersonNachnameVorname(), bdSonder);
                                dSonderzeitGesamt = dSonderzeitGesamt.add(bdSonder);
                            }

                        }
                        hmBereitsGezaehlteAuftraege.put(iBelegartIId, "");
                    }
                }

            } else if (belegartCNr.equals(LocaleFac.BELEGART_ANGEBOT)) {
                AngebotDto angebotDto = null;
                try {
                    angebotDto = getAngebotFac().angebotFindByPrimaryKey(iBelegartIId, theClientDto);
                } catch (RemoteException e) {
                    throwEJBExceptionLPRespectOld(e);
                }
                if (angebotDto != null) {
                    // Auftrag nur einmal zaehlen
                    if (!hmBereitsGezaehlteAngebote.containsKey(iBelegartIId)) {

                        AuftragzeitenDto[] auftragszeitenEinesAuftragsDtos = getZeiterfassungFac()
                                .getAllZeitenEinesBeleges(LocaleFac.BELEGART_ANGEBOT, iBelegartIId, null, null,
                                        tVon, tBis, true, false, theClientDto);
                        for (int i = 0; i < auftragszeitenEinesAuftragsDtos.length; i++) {
                            AuftragzeitenDto auftragszeitDto = auftragszeitenEinesAuftragsDtos[i];
                            add2PersonalHashMap(hmPersonen, auftragszeitDto.getsPersonNachnameVorname(),
                                    "AG" + angebotDto.getCNr(), auftragszeitDto.getDdDauer());

                            add2PersonalHashMap(hmPersonen, "~GESAMTSUMME", "AG" + angebotDto.getCNr(),
                                    auftragszeitDto.getDdDauer());

                            tmAlleAuftraege.put("AG" + angebotDto.getCNr(), angebotDto);

                            if (!hmAnwesenheitzeitenImZeitraum
                                    .containsKey(auftragszeitDto.getsPersonNachnameVorname())) {

                                Double dIstGesamt = new Double(0);
                                Double dGesamt = getZeiterfassungFac().berechneArbeitszeitImZeitraum(
                                        auftragszeitDto.getIPersonalMaschinenId(),
                                        new java.sql.Date(tVon.getTime()), new java.sql.Date(tBis.getTime()),
                                        theClientDto);

                                if (dGesamt != null) {
                                    dIstGesamt = dGesamt.doubleValue();
                                }

                                hmAnwesenheitzeitenImZeitraum.put(auftragszeitDto.getsPersonNachnameVorname(),
                                        dIstGesamt);
                                dAnwesenheitGesamt += dIstGesamt;

                            }

                            if (!hmSondezeitenImZeitraum.containsKey(auftragszeitDto.getsPersonNachnameVorname())) {
                                BigDecimal bdSonder = getZeiterfassungFac()
                                        .getStundenAllerBezahltenSondertaetigkeitenImZeitraum(
                                                auftragszeitDto.getIPersonalMaschinenId(), tagesartIId_Feiertag,
                                                tagesartIId_Halbtag, tVon, tBis, theClientDto);
                                hmSondezeitenImZeitraum.put(auftragszeitDto.getsPersonNachnameVorname(), bdSonder);
                                dSonderzeitGesamt = dSonderzeitGesamt.add(bdSonder);
                            }

                        }
                        hmBereitsGezaehlteAngebote.put(iBelegartIId, "");
                    }
                }

            } else {
                // Lose

                try {
                    LosDto losDto = getFertigungFac().losFindByPrimaryKey(iBelegartIId);
                    if (losDto.getAuftragIId() != null) {
                        AuftragDto auftragDtoLos = getAuftragFac().auftragFindByPrimaryKey(losDto.getAuftragIId());

                        AuftragzeitenDto[] loszeitenDtos = getZeiterfassungFac().getAllZeitenEinesBeleges(
                                LocaleFac.BELEGART_LOS, losDto.getIId(), null, null, tVon, tBis, true, false,
                                theClientDto);

                        for (int j = 0; j < loszeitenDtos.length; j++) {
                            AuftragzeitenDto loszeitDto = loszeitenDtos[j];

                            add2PersonalHashMap(hmPersonen, loszeitDto.getsPersonNachnameVorname(),
                                    "AB" + auftragDtoLos.getCNr(), loszeitDto.getDdDauer());

                            add2PersonalHashMap(hmPersonen, "~GESAMTSUMME", "AB" + auftragDtoLos.getCNr(),
                                    loszeitDto.getDdDauer());
                            tmAlleAuftraege.put("AB" + auftragDtoLos.getCNr(), auftragDtoLos);

                            if (!hmAnwesenheitzeitenImZeitraum
                                    .containsKey(loszeitDto.getsPersonNachnameVorname())) {

                                Double dIstGesamt = new Double(0);
                                Double dGesamt = getZeiterfassungFac().berechneArbeitszeitImZeitraum(
                                        loszeitDto.getIPersonalMaschinenId(), new java.sql.Date(tVon.getTime()),
                                        new java.sql.Date(tBis.getTime()), theClientDto);

                                if (dGesamt != null) {
                                    dIstGesamt = dGesamt.doubleValue();
                                }

                                hmAnwesenheitzeitenImZeitraum.put(loszeitDto.getsPersonNachnameVorname(),
                                        dIstGesamt);
                                dAnwesenheitGesamt += dIstGesamt;

                            }

                            if (!hmSondezeitenImZeitraum.containsKey(loszeitDto.getsPersonNachnameVorname())) {
                                BigDecimal bdSonder = getZeiterfassungFac()
                                        .getStundenAllerBezahltenSondertaetigkeitenImZeitraum(
                                                loszeitDto.getIPersonalMaschinenId(), tagesartIId_Feiertag,
                                                tagesartIId_Halbtag, tVon, tBis, theClientDto);
                                hmSondezeitenImZeitraum.put(loszeitDto.getsPersonNachnameVorname(), bdSonder);
                                dSonderzeitGesamt = dSonderzeitGesamt.add(bdSonder);
                            }

                        }

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

        }

        // Subreport fuer Titel

        String[] fieldnames = new String[] { "Beleg", "Kunde", "Projekt" };
        Object[][] dataSub = new Object[tmAlleAuftraege.size()][fieldnames.length];

        data = new Object[hmPersonen.size()][REPORT_AUFTRAGSZEITSTATISTIK_ANZAHL_SPALTEN];
        Iterator it = hmPersonen.keySet().iterator();
        int i = 0;
        int iVorher = 0;
        while (it.hasNext()) {
            Object person = it.next();

            data[i][REPORT_AUFTRAGSZEITSTATISTIK_PERSON] = person;

            TreeMap tm = (TreeMap) hmPersonen.get(person);

            String[] fieldnamesAuft = new String[] { "Beleg", "Dauer" };
            Object[][] dataSubAuft = new Object[tmAlleAuftraege.size()][fieldnamesAuft.length];

            Iterator itAlleAufttmAlleAuftraege = tmAlleAuftraege.keySet().iterator();
            int j = 0;

            Double dGesamteAuftragszeit = new Double(0);

            boolean bSubreportKopfInitialisiert = false;

            while (itAlleAufttmAlleAuftraege.hasNext()) {
                String auftrag = (String) itAlleAufttmAlleAuftraege.next();
                dataSubAuft[j][0] = auftrag;
                if (bSubreportKopfInitialisiert == false) {

                    String projekt = null;
                    KundeDto kdDto = null;
                    if (auftrag.startsWith("AB")) {

                        AuftragDto auftragDto = (AuftragDto) tmAlleAuftraege.get(auftrag);

                        projekt = auftragDto.getCBezProjektbezeichnung();

                        kdDto = getKundeFac().kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(),
                                theClientDto);
                    } else if (auftrag.startsWith("AG")) {
                        AngebotDto angebotDto = (AngebotDto) tmAlleAuftraege.get(auftrag);
                        kdDto = getKundeFac().kundeFindByPrimaryKey(angebotDto.getKundeIIdAngebotsadresse(),
                                theClientDto);
                        projekt = angebotDto.getCBez();
                    }

                    dataSub[j][0] = auftrag;
                    dataSub[j][1] = kdDto.getPartnerDto().getCName1nachnamefirmazeile1();
                    dataSub[j][2] = projekt;
                }
                if (tm.containsKey(auftrag)) {

                    Double dDauer = (Double) tm.get(auftrag);
                    dataSubAuft[j][1] = dDauer;
                    dGesamteAuftragszeit = dGesamteAuftragszeit + dDauer;
                }

                j++;
            }
            bSubreportKopfInitialisiert = true;

            data[i][REPORT_AUFTRAGSZEITSTATISTIK_SUBREPORT_AUFTRAEGE] = ((net.sf.jasperreports.engine.JRDataSource) new LPDatenSubreport(
                    dataSubAuft, fieldnamesAuft));

            Double dAnwesenheitszeit = (Double) hmAnwesenheitzeitenImZeitraum.get(person);

            BigDecimal bdSonderzeit = (BigDecimal) hmSondezeitenImZeitraum.get(person);

            if (person.equals("~GESAMTSUMME")) {
                dAnwesenheitszeit = dAnwesenheitGesamt;
                bdSonderzeit = dSonderzeitGesamt;
            }

            if (dAnwesenheitszeit == null) {
                dAnwesenheitszeit = new Double(0);
            }

            data[i][REPORT_AUFTRAGSZEITSTATISTIK_NICHT_ZUORDENBAR] = new BigDecimal(
                    dAnwesenheitszeit.doubleValue() - dGesamteAuftragszeit.doubleValue());
            data[i][REPORT_AUFTRAGSZEITSTATISTIK_SONDERZEITEN] = bdSonderzeit;

            i++;
        }

        parameter.put("SUBREPORT_AUFTRAEGE",
                ((net.sf.jasperreports.engine.JRDataSource) new LPDatenSubreport(dataSub, fieldnames)));

        // Subreport fuer Zeilen

        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL,
                ZeiterfassungReportFac.REPORT_AUFTRAGSZEITSTATISTIK, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    private void add2PersonalHashMap(TreeMap hmPersonen, String person, String auftragCNr, Double dDauer) {
        TreeMap hmAuftraege = null;
        if (hmPersonen.containsKey(person)) {
            hmAuftraege = (TreeMap) hmPersonen.get(person);
        } else {
            hmAuftraege = new TreeMap();
        }

        Double dDauerVorhanden = new Double(0);
        if (hmAuftraege.containsKey(auftragCNr)) {
            dDauerVorhanden = (Double) hmAuftraege.get(auftragCNr);
        }

        dDauerVorhanden = new Double(dDauerVorhanden + dDauer);

        hmAuftraege.put(auftragCNr, dDauerVorhanden);

        hmPersonen.put(person, hmAuftraege);

    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printArbeitszeitstatistik(java.sql.Timestamp tVon, java.sql.Timestamp tBis,
            int iOptionSortierung, String belegartCNr, Integer belegartIId, Integer personalIId, Integer artikelIId,
            Integer partnerIId, Integer artikelgruppeIId, Integer artikelklasseIId, boolean bVerdichtet,
            TheClientDto theClientDto) throws EJBExceptionLP, RemoteException {

        sAktuellerReport = ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK;

        if (tVon == null || tBis == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                    new Exception("tVon == null || tBis == null"));
        }
        tVon = Helper.cutTimestamp(tVon);
        tBis = Helper.cutTimestamp(tBis);

        HashMap<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("P_VON", tVon);

        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(tBis.getTime());
        c.set(Calendar.DATE, c.get(Calendar.DATE) - 1);

        parameter.put("P_BIS", new java.sql.Timestamp(c.getTimeInMillis()));

        Session session = FLRSessionFactory.getFactory().openSession();
        String queryString = "SELECT distinct z.c_belegartnr, z.i_belegartid FROM FLRZeitdaten as z"
                + " WHERE z.t_zeit>='" + Helper.formatDateWithSlashes(new java.sql.Date(tVon.getTime())) + "'"
                + " AND z.t_zeit<'" + Helper.formatDateWithSlashes(new java.sql.Date(tBis.getTime())) + "'"
                + " AND z.flrpersonal.mandant_c_nr='" + theClientDto.getMandant() + "'";

        // PJ17944
        if (belegartCNr != null && belegartCNr.equals(LocaleFac.BELEGART_AUFTRAG)) {
            if (belegartIId != null) {

                LosDto[] losDtos = getFertigungFac().losFindByAuftragIId(belegartIId);

                if (losDtos.length > 0) {

                    String in = "(";
                    for (int i = 0; i < losDtos.length; i++) {
                        in += losDtos[i].getIId();

                        if (i != losDtos.length - 1) {
                            in += ",";
                        }
                    }
                    in += ")";

                    queryString += " AND ( (z.c_belegartnr='" + belegartCNr + "' AND z.i_belegartid=" + belegartIId
                            + ") OR (z.c_belegartnr='" + LocaleFac.BELEGART_LOS + "' AND z.i_belegartid IN " + in
                            + "))";

                } else {
                    queryString += " AND z.c_belegartnr='" + belegartCNr + "'";
                    queryString += " AND z.i_belegartid=" + belegartIId;
                }

            } else {
                queryString += " AND z.c_belegartnr='" + belegartCNr + "'";
            }

        } else {
            if (belegartCNr != null) {
                queryString += " AND z.c_belegartnr='" + belegartCNr + "'";
            }
            if (belegartIId != null) {
                queryString += " AND z.i_belegartid=" + belegartIId;
            }
        }

        if (personalIId != null) {
            queryString += " AND z.personal_i_id=" + personalIId;
        }
        if (artikelIId != null) {
            queryString += " AND z.artikel_i_id=" + artikelIId;
        }
        if (artikelgruppeIId != null) {
            queryString += " AND z.flrartikel.flrartikelgruppe.i_id=" + artikelgruppeIId;
        }
        if (artikelklasseIId != null) {
            queryString += " AND z.flrartikel.flrartikelklasse.i_id=" + artikelklasseIId;
        }

        // Sortieren
        if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_ARTIKELGRUPPE) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.artikelgruppe", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_ARTIKELKLASSE) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.artikelklasse", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_AUFTRAG) {
            parameter.put("P_SORTIERUNG", getTextRespectUISpr("pers.arbeitszeitstatistik.sortierung.belegpersonal",
                    theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_PERSONAL) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.personal", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_KOSTENSTELLE) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.kostenstelle", theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_ADRESSE) {
            parameter.put("P_SORTIERUNG", getTextRespectUISpr("pers.arbeitszeitstatistik.sortierung.kundepersonal",
                    theClientDto.getMandant(), theClientDto.getLocUi()));
        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_ARTIKEL) {
            parameter.put("P_SORTIERUNG",
                    getTextRespectUISpr("lp.artikel", theClientDto.getMandant(), theClientDto.getLocUi()));
        }

        javax.persistence.Query queryBelegarten = em.createNamedQuery("BelegartfindAll");

        Collection belegarten = queryBelegarten.getResultList();

        HashMap hmBelegarten = new HashMap();

        Iterator itBel = belegarten.iterator();
        while (itBel.hasNext()) {
            Belegart b = (Belegart) itBel.next();
            hmBelegarten.put(b.getCNr(), b.getCKbez());
        }

        TreeMap<Object, ArbeitszeitstatistikDto> alleDaten = new TreeMap<Object, ArbeitszeitstatistikDto>();
        int sort = 0;

        HashMap kostenstellen = new HashMap();

        Query query = session.createQuery(queryString);
        List<?> resultList = query.list();
        Iterator<?> resultListIterator = resultList.iterator();
        while (resultListIterator.hasNext()) {
            Object[] o = (Object[]) resultListIterator.next();
            if (o[0] != null && o[1] != null) {
                try {
                    AuftragzeitenDto[] dtos = getZeiterfassungFac().getAllZeitenEinesBeleges((String) o[0],
                            (Integer) o[1], null, personalIId, tVon, tBis, true, false, theClientDto);

                    String fertigungsgruppe = "";
                    String vertreter = "";
                    if (((String) o[0]).equals(LocaleFac.BELEGART_LOS)) {
                        LosDto losDto = getFertigungFac().losFindByPrimaryKey((Integer) o[1]);
                        if (losDto.getFertigungsgruppeIId() != null) {
                            fertigungsgruppe = getStuecklisteFac()
                                    .fertigungsgruppeFindByPrimaryKey(losDto.getFertigungsgruppeIId()).getCBez();
                        }
                    } else if (((String) o[0]).equals(LocaleFac.BELEGART_AUFTRAG)) {
                        AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey((Integer) o[1]);

                        if (auftragDto.getPersonalIIdVertreter() != null) {
                            vertreter = getPersonalFac()
                                    .personalFindByPrimaryKey(auftragDto.getPersonalIIdVertreter(), theClientDto)
                                    .formatAnrede();
                        }

                    }

                    BelegInfos belegInfo = getLagerFac().getBelegInfos((String) o[0], (Integer) o[1], null,
                            theClientDto);

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

                        ArbeitszeitstatistikDto arbeitszeitstatistikDto = new ArbeitszeitstatistikDto();
                        arbeitszeitstatistikDto.setAuftragzeitenDto(dtos[i]);
                        arbeitszeitstatistikDto.setPartnerIId(belegInfo.getPartnerIId());
                        arbeitszeitstatistikDto.setsFertigungsgruppe(fertigungsgruppe);
                        arbeitszeitstatistikDto.setSVertreter(vertreter);
                        arbeitszeitstatistikDto.setSbeleg(hmBelegarten.get(o[0]) + belegInfo.getBelegnummer());
                        arbeitszeitstatistikDto.setSBelegbezeichnung(belegInfo.getBelegbezeichnung());
                        arbeitszeitstatistikDto.setSKunde(belegInfo.getKundeLieferant());

                        if (!kostenstellen.containsKey(dtos[i].getIPersonalMaschinenId())) {

                            PersonalDto personalDto = getPersonalFac()
                                    .personalFindByPrimaryKey(dtos[i].getIPersonalMaschinenId(), theClientDto);

                            if (personalDto.getKostenstelleDto_Stamm() != null) {
                                kostenstellen.put(dtos[i].getIPersonalMaschinenId(),
                                        personalDto.getKostenstelleDto_Stamm().getCNr());
                            } else {
                                kostenstellen.put(dtos[i].getIPersonalMaschinenId(), "");
                            }

                        }

                        arbeitszeitstatistikDto
                                .setSKostenstelle((String) kostenstellen.get(dtos[i].getIPersonalMaschinenId()));

                        // Wenn artikelIId NOT NULL dann herausfiltern
                        if (artikelIId != null) {
                            if (!artikelIId.equals(arbeitszeitstatistikDto.getAuftragzeitenDto().getArtikelIId())) {
                                continue;
                            }
                        }
                        // Wenn partnerIId NOT NULL dann herausfiltern
                        if (partnerIId != null) {
                            if (!partnerIId.equals(arbeitszeitstatistikDto.getPartnerIId())) {
                                continue;
                            }
                        }
                        // Wenn artikelgruppeIId NOT NULL dann herausfiltern
                        if (artikelgruppeIId != null) {
                            if (!artikelgruppeIId
                                    .equals(arbeitszeitstatistikDto.getAuftragzeitenDto().getArtikelgruppeIId())) {
                                continue;
                            }
                        }

                        // Wenn artikelgruppeIId NOT NULL dann herausfiltern
                        if (artikelklasseIId != null) {
                            if (!artikelklasseIId
                                    .equals(arbeitszeitstatistikDto.getAuftragzeitenDto().getArtikelklasseIId())) {
                                continue;
                            }
                        }

                        if (arbeitszeitstatistikDto.getAuftragzeitenDto().getArtikelgruppeIId() != null) {
                            arbeitszeitstatistikDto.setSArtikelgruppe(getArtikelFac().artgruFindByPrimaryKey(
                                    arbeitszeitstatistikDto.getAuftragzeitenDto().getArtikelgruppeIId(),
                                    theClientDto).getBezeichnung());
                        }
                        if (arbeitszeitstatistikDto.getAuftragzeitenDto().getArtikelklasseIId() != null) {
                            arbeitszeitstatistikDto.setSArtikelklasse(getArtikelFac().artklaFindByPrimaryKey(
                                    arbeitszeitstatistikDto.getAuftragzeitenDto().getArtikelklasseIId(),
                                    theClientDto).getBezeichnung());
                        }

                        if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_ARTIKELGRUPPE) {
                            arbeitszeitstatistikDto.setSGruppierung(arbeitszeitstatistikDto.getSArtikelgruppe());
                            alleDaten.put(
                                    arbeitszeitstatistikDto.getSArtikelgruppe() + dtos[i].getTsBeginn() + sort,
                                    arbeitszeitstatistikDto);
                        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_ARTIKELKLASSE) {
                            arbeitszeitstatistikDto.setSGruppierung(arbeitszeitstatistikDto.getSArtikelklasse());
                            alleDaten.put(
                                    arbeitszeitstatistikDto.getSArtikelklasse() + dtos[i].getTsBeginn() + sort,
                                    arbeitszeitstatistikDto);
                        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_ADRESSE) {
                            arbeitszeitstatistikDto.setSGruppierung(arbeitszeitstatistikDto.getSKunde() + "");
                            alleDaten
                                    .put(Helper.fitString2Length(arbeitszeitstatistikDto.getSKunde(), 80, ' ')
                                            + Helper.fitString2Length(arbeitszeitstatistikDto.getAuftragzeitenDto()
                                                    .getSPersonalMaschinenname(), 80, ' ')
                                            + dtos[i].getTsBeginn() + sort, arbeitszeitstatistikDto);
                        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_ARTIKEL) {
                            arbeitszeitstatistikDto.setSGruppierung(
                                    arbeitszeitstatistikDto.getAuftragzeitenDto().getSArtikelcnr());
                            alleDaten.put(arbeitszeitstatistikDto.getAuftragzeitenDto().getSArtikelcnr()
                                    + dtos[i].getTsBeginn() + sort, arbeitszeitstatistikDto);
                        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_KOSTENSTELLE) {
                            arbeitszeitstatistikDto.setSGruppierung(arbeitszeitstatistikDto.getSKostenstelle());
                            alleDaten.put(arbeitszeitstatistikDto.getSKostenstelle()
                                    + arbeitszeitstatistikDto.getAuftragzeitenDto().getSPersonalMaschinenname()
                                    + dtos[i].getTsBeginn() + sort, arbeitszeitstatistikDto);
                        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_PERSONAL) {
                            arbeitszeitstatistikDto.setSGruppierung(
                                    arbeitszeitstatistikDto.getAuftragzeitenDto().getSPersonalnummer());
                            alleDaten.put(arbeitszeitstatistikDto.getAuftragzeitenDto().getSPersonalMaschinenname()
                                    + dtos[i].getTsBeginn() + sort, arbeitszeitstatistikDto);
                        } else if (iOptionSortierung == ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK_OPTION_SORTIERUNG_AUFTRAG) {
                            arbeitszeitstatistikDto.setSGruppierung(arbeitszeitstatistikDto.getSbeleg());
                            alleDaten.put(arbeitszeitstatistikDto.getSbeleg()
                                    + arbeitszeitstatistikDto.getAuftragzeitenDto().getSPersonalMaschinenname()
                                    + dtos[i].getTsBeginn() + sort, arbeitszeitstatistikDto);
                        }
                        sort++;
                    }
                } catch (RemoteException ex) {
                    throwEJBExceptionLPRespectOld(ex);
                }
            }
        }

        data = new Object[alleDaten.size()][REPORT_ARBEITSZEITSTATISTIK_ANZAHL_SPALTEN];

        List<ArbeitszeitstatistikDto> tempAlleDaten = new ArrayList<ArbeitszeitstatistikDto>(alleDaten.size());
        Iterator<?> itTemp = alleDaten.keySet().iterator();
        while (itTemp.hasNext()) {
            Object k = itTemp.next();
            tempAlleDaten.add(alleDaten.get(k));
        }

        Collections.sort(tempAlleDaten, getSortGruppierungBeginnzeitComparator());

        // Iterator<?> it = alleDaten.keySet().iterator();

        Iterator<?> it = tempAlleDaten.iterator();
        int iRow = 0;
        while (it.hasNext()) {
            Object k = it.next();
            // ArbeitszeitstatistikDto dto = (ArbeitszeitstatistikDto) alleDaten
            // .get(k);
            ArbeitszeitstatistikDto dto = (ArbeitszeitstatistikDto) k;
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_ARTIKELNUMMER] = dto.getAuftragzeitenDto().getSArtikelcnr();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_BEZEICHNUNG] = dto.getAuftragzeitenDto()
                    .getSArtikelbezeichnung();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_DAUER] = new BigDecimal(dto.getAuftragzeitenDto().getDdDauer());

            data[iRow][REPORT_ARBEITSZEITSTATISTIK_VON] = dto.getAuftragzeitenDto().getTsBeginn();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_BIS] = dto.getAuftragzeitenDto().getTsEnde();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_KOSTEN] = dto.getAuftragzeitenDto().getBdKosten();

            data[iRow][REPORT_ARBEITSZEITSTATISTIK_BEMERKUNG] = dto.getAuftragzeitenDto().getSZeitbuchungtext();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_KOMMENTAR] = dto.getAuftragzeitenDto().getSKommentar();

            data[iRow][REPORT_ARBEITSZEITSTATISTIK_PERSON_KOSTENSTELLE] = dto.getSKostenstelle();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_FERTIGUNGSGRUPPE] = dto.getsFertigungsgruppe();

            if (dto.getAuftragzeitenDto().getSPersonalMaschinenname().startsWith("P:")) {
                data[iRow][REPORT_ARBEITSZEITSTATISTIK_PERSON] = dto.getAuftragzeitenDto()
                        .getSPersonalMaschinenname().substring(2);
            } else {
                data[iRow][REPORT_ARBEITSZEITSTATISTIK_PERSON] = dto.getAuftragzeitenDto()
                        .getSPersonalMaschinenname();
            }

            data[iRow][REPORT_ARBEITSZEITSTATISTIK_BELEG] = dto.getSbeleg();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_VERTRETER] = dto.getSVertreter();
            if (dto.getSBelegbezeichnung() != null)
                data[iRow][REPORT_ARBEITSZEITSTATISTIK_PROJEKT] = dto.getSBelegbezeichnung();

            data[iRow][REPORT_ARBEITSZEITSTATISTIK_KUNDE] = dto.getSKunde();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_ARTIKELGRUPPE] = dto.getSArtikelgruppe();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_ARTIKELKLASSE] = dto.getSArtikelklasse();
            data[iRow][REPORT_ARBEITSZEITSTATISTIK_GRUPPIERUNG] = dto.getSGruppierung();
            iRow++;

        }

        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);
        return getReportPrint();

    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printProduktivitaetstagesstatistik(Integer personalIId, java.sql.Timestamp tVon,
            java.sql.Timestamp tBis, Integer iOption, boolean bMitVersteckten, boolean bMonatsbetrachtung,
            Integer personalgruppeIId, TheClientDto theClientDto) {

        sAktuellerReport = ZeiterfassungReportFac.REPORT_PRODUKTIVITAETSTAGESSTATISTIK;

        ParametermandantDto parameterIstZeit;

        boolean bTheoretischeIstZeit = false;

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

            bTheoretischeIstZeit = (Boolean) parameterIstZeit.getCWertAsObject();

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

        if (tVon == null || tBis == null || personalIId == iOption) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                    new Exception("tVon == null || tBis == null || personalIId == iOption"));
        }
        tVon = Helper.cutTimestamp(tVon);
        tBis = Helper.cutTimestamp(tBis);

        if (tVon.after(tBis)) {
            java.sql.Timestamp h = tVon;
            tVon = tBis;
            tBis = h;
        }
        String sParameter_Personen = "";
        TreeMap<String, Object[]> tmDaten = new TreeMap<String, Object[]>();

        PersonalDto[] personalDtos = null;
        MandantDto mandantDto = null;
        try {
            mandantDto = getMandantFac().mandantFindByPrimaryKey(theClientDto.getMandant(), theClientDto);
        } catch (RemoteException ex2) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex2);
        }
        try {
            if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_SELEKTIERTE_PERSON) {

                if (personalIId == null) {
                    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                            new Exception("personalIId == null"));
                }

                personalDtos = new PersonalDto[1];

                personalDtos[0] = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);
                sParameter_Personen = personalDtos[0].getPartnerDto().formatAnrede();
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_PERSONEN) {
                personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(),
                        bMitVersteckten);
                sParameter_Personen = "Alle Personen";
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_MEINE_ABTEILUNG) {
                PersonalDto personalDto = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);
                personalDtos = getPersonalFac().personalFindAllPersonenMeinerAbteilung(
                        personalDto.getKostenstelleIIdAbteilung(), theClientDto.getMandant(), bMitVersteckten);
                sParameter_Personen = "Meine Abteilung";
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_ARBEITER) {
                personalDtos = getPersonalFac().personalFindAllArbeiterEinesMandanten(theClientDto.getMandant(),
                        bMitVersteckten);
                sParameter_Personen = "Alle Arbeiter";
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_ANGESTELLTE) {
                personalDtos = getPersonalFac().personalFindAllAngestellteEinesMandanten(theClientDto.getMandant(),
                        bMitVersteckten);
                sParameter_Personen = "Alle Angestellten";
            } else {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER, new Exception("OPTION NICHT VERFUEGBAR"));
            }
        } catch (RemoteException ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
        }

        HashMap<String, LPDatenSubreport> hmSubreportFuerAllePersonen = new HashMap<String, LPDatenSubreport>();

        for (int i = 0; i < personalDtos.length; i++) {
            PersonalDto personalDto = personalDtos[i];
            personalDto.setPartnerDto(
                    getPartnerFac().partnerFindByPrimaryKey(personalDto.getPartnerIId(), theClientDto));
            String person = personalDto.getCPersonalnr() + " " + personalDto.getPartnerDto().formatAnrede();
            if (personalgruppeIId != null) {
                if (!personalgruppeIId.equals(personalDto.getPersonalgruppeIId())) {
                    continue;
                }
            }

            LinkedHashMap<String, Object[]> hmSubreportMaschinenerfolg = new LinkedHashMap<String, Object[]>();

            Timestamp tBeginn = new Timestamp(tVon.getTime());

            while (tBeginn.getTime() < tBis.getTime()) {

                String sQuery = "select distinct zeitdaten.i_belegartid,zeitdaten.flrlossollarbeitsplan";

                // Hole Zeitdaten eines Tages
                javax.persistence.Query query = em
                        .createNamedQuery("ZeitdatenfindZeitdatenEinesTagesUndEinerPerson");
                query.setParameter(1, personalIId);
                query.setParameter(2, new java.sql.Timestamp(tBeginn.getTime()));
                query.setParameter(3, new java.sql.Timestamp(tBeginn.getTime() + 24 * 3600000));
                Collection<?> cl = query.getResultList();
                ZeitdatenDto[] zeitdatenDtos = getZeiterfassungFac().assembleZeitdatenDtosOhneBelegzeiten(cl);

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

                // Daten einen Tag vorher wg. Mitternachtssprung holen
                java.sql.Date dVon = new java.sql.Date(tBeginn.getTime() - (3600000 * 24));
                if (zeitdatenDtos.length > 0 && zeitdatenDtos[0].getTaetigkeitIId() != null
                        && zeitdatenDtos[0].getTaetigkeitIId().equals(taetigkeitIId_Kommt)) {
                    // Ausser die erste Taetigkeit ist ein Kommt, dann nicht
                    dVon = new java.sql.Date(tBeginn.getTime());
                }

                sQuery += " from FLRZeitdatenLos zeitdaten WHERE zeitdaten.flrpersonal.i_id=" + personalDto.getIId()
                        + "AND zeitdaten.c_belegartnr ='" + LocaleFac.BELEGART_LOS + "' AND zeitdaten.t_zeit>='"
                        + Helper.formatDateWithSlashes(new java.sql.Date(tBeginn.getTime()))
                        + "' AND zeitdaten.t_zeit<'"
                        + Helper.formatDateWithSlashes(new java.sql.Date(tBeginn.getTime() + (3600000 * 24))) + "'";

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

                org.hibernate.Query inventurliste = session.createQuery(sQuery);

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

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

                while (resultListIterator.hasNext()) {
                    Object[] o = (Object[]) resultListIterator.next();
                    Integer losIId = (Integer) o[0];

                    FLRLossollarbeitsplan flrlossollarbeitsplan = (FLRLossollarbeitsplan) o[1];

                    if (flrlossollarbeitsplan != null) {

                        Integer lossollarbeitsplanIId = flrlossollarbeitsplan.getI_id();

                        Object[] oZeile = new Object[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_ANZAHL_SPALTEN];
                        // von heute bis morgen

                        if (bTheoretischeIstZeit == false) {
                            AuftragzeitenDto[] azDtos = getZeiterfassungFac().getAllZeitenEinesBeleges(
                                    LocaleFac.BELEGART_LOS, losIId, lossollarbeitsplanIId, personalDto.getIId(),
                                    tBeginn, new Timestamp(tBeginn.getTime() + 24 * 3600000), true, false, false,
                                    theClientDto);

                            Double dDauer = 0D;
                            for (int k = 0; k < azDtos.length; k++) {
                                if (azDtos[k] != null && azDtos[k].getDdDauer() != null) {
                                    dDauer = dDauer + azDtos[k].getDdDauer().doubleValue();
                                }
                            }

                            oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_DAUER] = dDauer;
                        }

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_PERSON] = person;

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_DATUM] = tBeginn;

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LEISTUNGSFAKTOR] = 100D;
                        try {
                            Calendar c = Calendar.getInstance();
                            c.setTimeInMillis(tBeginn.getTime());
                            PersonalgehaltDto pgDto = getPersonalFac().personalgehaltFindLetztePersonalgehalt(
                                    personalDto.getIId(), c.get(Calendar.YEAR), c.get(Calendar.MONTH));
                            if (pgDto != null && pgDto.getFLeistungswert() != null) {
                                oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LEISTUNGSFAKTOR] = pgDto
                                        .getFLeistungswert();
                            }

                            // SP1450
                            if (bMonatsbetrachtung) {
                                String keySubreport = new SimpleDateFormat("MMMM", Locale.GERMAN).format(tBeginn)
                                        + " " + c.get(Calendar.YEAR);
                                if (!hmSubreportMaschinenerfolg.containsKey(keySubreport)) {

                                    Calendar cVonSubreport = Calendar.getInstance();
                                    cVonSubreport.setTimeInMillis(tBeginn.getTime());
                                    cVonSubreport.set(Calendar.DAY_OF_MONTH, 1);

                                    if (cVonSubreport.getTime().before(tVon)) {
                                        cVonSubreport.setTime(new Date(tVon.getTime()));
                                    }

                                    Calendar cBisSubreport = Calendar.getInstance();
                                    cBisSubreport.setTimeInMillis(tBeginn.getTime());
                                    cBisSubreport.set(Calendar.DAY_OF_MONTH,
                                            cBisSubreport.getActualMaximum(Calendar.DAY_OF_MONTH));

                                    if (cBisSubreport.getTime().after(tBis)) {
                                        cBisSubreport.setTime(new Date(tBis.getTime()));
                                    }

                                    // SP1723
                                    cBisSubreport.add(Calendar.DATE, 1);

                                    MaschinenerfolgReportDto reportDto = printMaschinenerfolg(personalDto.getIId(),
                                            null, new Timestamp(cVonSubreport.getTimeInMillis()),
                                            new Timestamp(cBisSubreport.getTimeInMillis()),
                                            ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_PERSONALNUMMER,
                                            "", true, theClientDto);

                                    Object[] oDaten = reportDto.getData();

                                    Object[] zeileSub = new Object[2];

                                    BigDecimal anwesenheit = new BigDecimal(0);
                                    BigDecimal laufzeit = new BigDecimal(0);
                                    for (int t = 0; t < oDaten.length; t++) {
                                        Object[] zeile = (Object[]) oDaten[t];

                                        BigDecimal laufzeitZeile = (BigDecimal) zeile[REPORT_MASCHINENERFOLG_LAUFZEIT];
                                        if (laufzeitZeile != null) {
                                            laufzeit = laufzeit.add(laufzeitZeile);
                                        }

                                        BigDecimal anwsenheitZeile = (BigDecimal) zeile[REPORT_MASCHINENERFOLG_ANWESENHEITSZEIT];
                                        if (anwsenheitZeile != null) {
                                            anwesenheit = anwesenheit.add(anwsenheitZeile);
                                        }

                                    }

                                    zeileSub[0] = anwesenheit;
                                    zeileSub[1] = laufzeit;

                                    hmSubreportMaschinenerfolg.put(keySubreport, zeileSub);

                                }
                            }

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

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LOS] = flrlossollarbeitsplan.getFlrlos()
                                .getC_nr();
                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LOSGROESSE] = flrlossollarbeitsplan.getFlrlos()
                                .getN_losgroesse();

                        BigDecimal[] gutschlecht = getFertigungFac().getGutSchlechtInarbeit(
                                flrlossollarbeitsplan.getI_id(), personalDto.getIId(), tBeginn,
                                new Timestamp(tBeginn.getTime() + 24 * 3600000), theClientDto);

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_GUTSTUECK] = gutschlecht[0];
                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_SCHLECHTSTUECK] = gutschlecht[1];

                        if (flrlossollarbeitsplan.getFlrlos().getFlrstueckliste() != null) {
                            ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                    flrlossollarbeitsplan.getFlrlos().getFlrstueckliste().getFlrartikel().getI_id(),
                                    theClientDto);

                            oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_STKLNR] = artikelDto.getCNr();
                            oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_STKLBEZ] = artikelDto.formatBezeichnung();
                        }

                        Session sessionLosklasse = factory.openSession();
                        String queryLosklasse = "FROM FLRLoslosklasse l where l.los_i_id="
                                + flrlossollarbeitsplan.getFlrlos().getI_id();

                        org.hibernate.Query loslosklasse = sessionLosklasse.createQuery(queryLosklasse);

                        List resultListLosklasse = loslosklasse.list();

                        Iterator resultListIteratorLosklasse = resultListLosklasse.iterator();

                        String losklassen = "";
                        while (resultListIteratorLosklasse.hasNext()) {
                            com.lp.server.fertigung.fastlanereader.generated.FLRLoslosklasse lk = (com.lp.server.fertigung.fastlanereader.generated.FLRLoslosklasse) resultListIteratorLosklasse
                                    .next();

                            losklassen += lk.getFlrlosklasse().getC_nr() + ",";

                        }

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LOSKLASSEN] = losklassen;

                        sessionLosklasse.close();

                        if (flrlossollarbeitsplan.getFlrlos().getFlrauftrag() != null) {
                            oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_KUNDE] = HelperServer
                                    .formatNameAusFLRPartner(flrlossollarbeitsplan.getFlrlos().getFlrauftrag()
                                            .getFlrkunde().getFlrpartner());
                        } else if (flrlossollarbeitsplan.getFlrlos().getFlrkunde() != null) {
                            oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_KUNDE] = HelperServer
                                    .formatNameAusFLRPartner(
                                            flrlossollarbeitsplan.getFlrlos().getFlrkunde().getFlrpartner());
                        }

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_RUESTZEIT] = flrlossollarbeitsplan
                                .getL_ruestzeit().divide(new BigDecimal(1000 * 60), 4, BigDecimal.ROUND_HALF_EVEN);

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_STUECKZEIT] = flrlossollarbeitsplan
                                .getL_stueckzeit().divide(new BigDecimal(1000 * 60), 4, BigDecimal.ROUND_HALF_EVEN);

                        ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKeySmall(
                                flrlossollarbeitsplan.getFlrartikel().getI_id(), theClientDto);

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_TAETIGKEIT] = artikelDto.getCNr();
                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_TAETIGKEIT_BEZEICHNUNG] = artikelDto
                                .formatBezeichnung();

                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_AGART] = flrlossollarbeitsplan.getAgart_c_nr();
                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_ARBEITSGANG] = flrlossollarbeitsplan
                                .getI_arbeitsgangsnummer();
                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_UNTERARBEITSGANG] = flrlossollarbeitsplan
                                .getI_unterarbeitsgang();
                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_FERTIG] = Helper
                                .short2Boolean(flrlossollarbeitsplan.getB_fertig());
                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_FERTIGUNGSGRUPPE] = flrlossollarbeitsplan
                                .getFlrlos().getFlrfertigungsgruppe().getC_bez();

                        if (flrlossollarbeitsplan.getFlrmaschine() != null) {
                            oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_MASCHINE_BEZ] = flrlossollarbeitsplan
                                    .getFlrmaschine().getC_bez();
                            oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_MASCHINE_IDENTIFIKATION] = flrlossollarbeitsplan
                                    .getFlrmaschine().getC_identifikationsnr();
                            oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_MASCHINE_INVENTATNUMMER] = flrlossollarbeitsplan
                                    .getFlrmaschine().getC_inventarnummer();
                        }

                        // PJ17973 Ruesten mitrechnen

                        Boolean bRuestenMitrechnen = false;

                        String sQueryRusten = "SELECT zeitdaten from FLRZeitdatenLos zeitdaten WHERE zeitdaten.c_belegartnr ='"
                                + LocaleFac.BELEGART_LOS + "' AND zeitdaten.i_belegartpositionid="
                                + flrlossollarbeitsplan.getI_id() + " ORDER BY zeitdaten.t_zeit ASC";

                        Session sessionQuery = factory.openSession();
                        org.hibernate.Query queryRusten = sessionQuery.createQuery(sQueryRusten);
                        queryRusten.setMaxResults(1);
                        List resultListRuesten = queryRusten.list();

                        Iterator resultListIteratorRuesten = resultListRuesten.iterator();
                        if (resultListIteratorRuesten.hasNext()) {
                            FLRZeitdatenLos zl = (FLRZeitdatenLos) resultListIteratorRuesten.next();

                            if (zl.getPersonal_i_id().equals(personalDto.getIId())) {
                                bRuestenMitrechnen = true;
                            }

                        }
                        oZeile[REPORT_PRODUKTIVITAETSTAGESSTATISTIK_RUESTEN_MITRECHNEN] = bRuestenMitrechnen;

                        sessionQuery.close();

                        Calendar c = Calendar.getInstance();
                        c.setTimeInMillis(tBeginn.getTime());

                        String sortString = Helper.fitString2Length(person, 100, ' ') + c.get(Calendar.YEAR) + "-"
                                + Helper.fitString2LengthAlignRight(c.get(Calendar.MONTH) + "", 2, '0') + "-"
                                + Helper.fitString2LengthAlignRight(c.get(Calendar.DAY_OF_MONTH) + "", 2, '0') + " "
                                + Helper.fitString2Length(flrlossollarbeitsplan.getFlrlos().getC_nr(), 20, ' ')
                                + Helper.fitString2Length(flrlossollarbeitsplan.getI_arbeitsgangsnummer() + "", 10,
                                        ' ')
                                + Helper.fitString2Length(flrlossollarbeitsplan.getI_unterarbeitsgang() + "", 10,
                                        ' ');
                        tmDaten.put(sortString, oZeile);

                    }

                }
                tBeginn = new Timestamp(tBeginn.getTime() + 24 * 3600000);
            }

            // Subreport
            if (bMonatsbetrachtung) {
                String[] fieldnames = new String[] { "F_MONAT", "F_ANWESENHEIT", "F_LAUFZEIT" };

                Iterator it = hmSubreportMaschinenerfolg.keySet().iterator();
                Object[][] dataSub = new Object[hmSubreportMaschinenerfolg.size()][fieldnames.length];
                int z = 0;
                while (it.hasNext()) {
                    String monat = (String) it.next();

                    Object[] temp = hmSubreportMaschinenerfolg.get(monat);

                    dataSub[z][0] = monat;
                    dataSub[z][1] = temp[0];
                    dataSub[z][2] = temp[1];
                    z++;
                }

                hmSubreportFuerAllePersonen.put(person, new LPDatenSubreport(dataSub, fieldnames));
            }

        }
        HashMap parameter = new HashMap<Object, Object>();

        parameter.put("P_SUBREPORTS_MASCHINENERFOLG", hmSubreportFuerAllePersonen);

        parameter.put("P_VON", tVon);
        parameter.put("P_BIS", new Timestamp(tBis.getTime() - 24 * 3600000));

        parameter.put("P_MONATSBETRACHTUNG", new Boolean(bMonatsbetrachtung));

        parameter.put("P_PERSONEN", sParameter_Personen);

        parameter.put("P_THEORETISCHE_ISTZEIT", new Boolean(bTheoretischeIstZeit));
        if (personalgruppeIId != null) {
            parameter.put("P_PERSONALGRUPPE",
                    getPersonalFac().personalgruppeFindByPrimaryKey(personalgruppeIId).getCBez());
        }

        Object[][] returnArray = new Object[tmDaten.size()][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_ANZAHL_SPALTEN];
        data = (Object[][]) tmDaten.values().toArray(returnArray);

        sAktuellerReport = ZeiterfassungReportFac.REPORT_PRODUKTIVITAETSTAGESSTATISTIK;

        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL,
                ZeiterfassungReportFac.REPORT_PRODUKTIVITAETSTAGESSTATISTIK, theClientDto.getMandant(),
                theClientDto.getLocUi(), theClientDto);
        return getReportPrint();
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public JasperPrintLP printMitarbeiteruebersicht(Integer personalIId, Integer iJahrVon, Integer iMonatVon,
            Integer iJahrBis, Integer iMonatBis, Integer iOption, Integer iOptionSortierung,
            boolean bPlusVersteckte, TheClientDto theClientDto) {

        sAktuellerReport = ZeiterfassungReportFac.REPORT_MITARBEITERUEBERSICHT;
        JasperPrintLP print = null;

        PersonalDto[] personalDtos = null;

        try {
            if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_SELEKTIERTE_PERSON) {

                if (personalIId == null) {
                    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                            new Exception("personalIId == null"));
                }

                personalDtos = new PersonalDto[1];

                personalDtos[0] = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);

            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_PERSONEN) {
                personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(),
                        bPlusVersteckte);
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_MEINE_ABTEILUNG) {
                PersonalDto personalDto = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);
                personalDtos = getPersonalFac().personalFindAllPersonenMeinerAbteilung(
                        personalDto.getKostenstelleIIdAbteilung(), theClientDto.getMandant(), bPlusVersteckte);
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_ARBEITER) {
                personalDtos = getPersonalFac().personalFindAllArbeiterEinesMandanten(theClientDto.getMandant(),
                        bPlusVersteckte);
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_ANGESTELLTE) {
                personalDtos = getPersonalFac().personalFindAllAngestellteEinesMandanten(theClientDto.getMandant(),
                        bPlusVersteckte);
            } else {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER, new Exception("OPTION NICHT VERFUEGBAR"));
            }

            // PJ 16763
            if (iOptionSortierung != ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_PERSONALNUMMER) {
                for (int i = personalDtos.length - 1; i > 0; --i) {
                    for (int j = 0; j < i; ++j) {
                        String vergleich1 = "";
                        String vergleich2 = "";

                        String kostenstelle1 = "               ";
                        String kostenstelle2 = "               ";

                        if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_KOSTENSTELLE_NAME_VORNAME
                                || iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_KOSTENSTELLE_NAME_VORNAME) {
                            if (personalDtos[j].getKostenstelleIIdStamm() != null) {

                                KostenstelleDto kstDto = getSystemFac()
                                        .kostenstelleFindByPrimaryKey(personalDtos[j].getKostenstelleIIdStamm());
                                kostenstelle1 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                            }
                            if (personalDtos[j + 1].getKostenstelleIIdStamm() != null) {
                                KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(
                                        personalDtos[j + 1].getKostenstelleIIdStamm());
                                kostenstelle2 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                            }

                            if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_KOSTENSTELLE_NAME_VORNAME) {
                                vergleich1 += kostenstelle1;
                                vergleich2 += kostenstelle2;
                            }

                        }

                        if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_NAME_VORNAME
                                || iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_KOSTENSTELLE_NAME_VORNAME) {

                            String abteilung1 = "               ";
                            String abteilung2 = "               ";

                            if (personalDtos[j].getKostenstelleIIdAbteilung() != null) {

                                KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(
                                        personalDtos[j].getKostenstelleIIdAbteilung());
                                abteilung1 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                            } else {
                                abteilung1 = "               ";
                            }
                            if (personalDtos[j + 1].getKostenstelleIIdAbteilung() != null) {
                                KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(
                                        personalDtos[j + 1].getKostenstelleIIdAbteilung());
                                abteilung2 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                            } else {
                                abteilung2 = "               ";
                            }
                            if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_KOSTENSTELLE_NAME_VORNAME) {
                                vergleich1 = kostenstelle1 + vergleich1;
                                vergleich2 = kostenstelle2 + vergleich2;
                            }
                            vergleich1 = abteilung1 + vergleich1;
                            vergleich2 = abteilung2 + vergleich2;

                        }

                        PartnerDto p1Dto = getPartnerFac().partnerFindByPrimaryKey(personalDtos[j].getPartnerIId(),
                                theClientDto);
                        personalDtos[j].setPartnerDto(p1Dto);
                        PartnerDto p2Dto = getPartnerFac()
                                .partnerFindByPrimaryKey(personalDtos[j + 1].getPartnerIId(), theClientDto);
                        vergleich1 += Helper.fitString2Length(p1Dto.getCName1nachnamefirmazeile1(), 80, ' ');
                        vergleich2 += Helper.fitString2Length(p2Dto.getCName1nachnamefirmazeile1(), 80, ' ');

                        if (p1Dto.getCName2vornamefirmazeile2() != null) {
                            vergleich1 += p1Dto.getCName2vornamefirmazeile2();
                        }
                        if (p2Dto.getCName2vornamefirmazeile2() != null) {
                            vergleich2 += p2Dto.getCName2vornamefirmazeile2();
                        }

                        if (vergleich1.compareTo(vergleich2) > 0) {
                            PersonalDto tauschDto = personalDtos[j];
                            personalDtos[j] = personalDtos[j + 1];
                            personalDtos[j + 1] = tauschDto;
                        }

                    }
                }
            }

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

        String[] kurzeWochentage = new DateFormatSymbols(theClientDto.getLocUi()).getShortWeekdays();

        Calendar cAktuell = Calendar.getInstance();
        cAktuell.set(Calendar.DAY_OF_MONTH, 1);
        cAktuell.set(Calendar.MONTH, iMonatVon);
        cAktuell.set(Calendar.YEAR, iJahrVon);
        cAktuell.set(Calendar.HOUR_OF_DAY, 0);
        cAktuell.set(Calendar.MINUTE, 0);
        cAktuell.set(Calendar.SECOND, 0);
        cAktuell.set(Calendar.MILLISECOND, 0);

        Calendar cEnde = Calendar.getInstance();
        cEnde.set(Calendar.MONTH, iMonatBis);
        cEnde.set(Calendar.YEAR, iJahrBis);
        cEnde.set(Calendar.DAY_OF_MONTH, cEnde.getActualMaximum(Calendar.DAY_OF_MONTH));

        while (cAktuell.before(cEnde)) {
            HashMap<String, Object> parameter = new HashMap<String, Object>();
            index = -1;
            data = new Object[personalDtos.length][REPORT_MITARBEITERUEBERSICHT_ANZAHL_SPALTEN];
            parameter.put("P_MONAT",
                    new DateFormatSymbols(theClientDto.getLocUi()).getMonths()[cAktuell.get(Calendar.MONTH)] + " "
                            + cAktuell.get(Calendar.YEAR));

            Calendar cWochentag = Calendar.getInstance();
            cWochentag.set(Calendar.DAY_OF_MONTH, 1);
            cWochentag.set(Calendar.MONTH, cAktuell.get(Calendar.MONTH));
            cWochentag.set(Calendar.YEAR, cAktuell.get(Calendar.YEAR));

            parameter.put("P_DATE", cAktuell.getTime());

            // Ueberschriften + Tagesarten
            for (int iTag = 1; iTag < Helper.ermittleAnzahlTageEinesMonats(cAktuell.get(Calendar.YEAR),
                    cAktuell.get(Calendar.MONTH)) + 1; iTag++) {
                cWochentag.set(Calendar.DAY_OF_MONTH, iTag);

                String sTag = iTag + "";
                if (iTag < 10) {
                    sTag = 0 + sTag;
                }
                parameter.put("P_TAG" + sTag, kurzeWochentage[cWochentag.get(Calendar.DAY_OF_WEEK)] + "\n" + iTag);

                try {

                    BetriebskalenderDto betriebskalenderDto = getPersonalFac()
                            .betriebskalenderFindByMandantCNrDDatum(
                                    Helper.cutTimestamp(new java.sql.Timestamp(cWochentag.getTimeInMillis())),
                                    theClientDto.getMandant(), theClientDto);

                    if (betriebskalenderDto != null) {
                        parameter.put("P_TA" + sTag, getZeiterfassungFac()
                                .tagesartFindByPrimaryKey(betriebskalenderDto.getTagesartIId(), theClientDto)
                                .getCNr().trim());
                    }
                } catch (RemoteException ex3) {
                    throwEJBExceptionLPRespectOld(ex3);
                }

            }
            // Personen
            for (int i = 0; i < personalDtos.length; i++) {
                PersonalDto personalDto = personalDtos[i];

                personalDto.setPartnerDto(
                        getPartnerFac().partnerFindByPrimaryKey(personalDto.getPartnerIId(), theClientDto));

                data[i][REPORT_MITARBEITERUEBERSICHT_NAME] = personalDto.getPartnerDto().formatFixTitelName1Name2();

                // PJ18287
                data[i][REPORT_MITARBEITERUEBERSICHT_KALK_JAHRESISTSTUNDEN] = getZeiterfassungFac()
                        .berechneKalkJahresIstStunden(personalDto.getIId(), cAktuell.get(Calendar.MONTH),
                                cAktuell.get(Calendar.YEAR), theClientDto);

                double iSummeIst = 0;
                // Je Tag eines Monats
                for (int iTag = 1; iTag < Helper.ermittleAnzahlTageEinesMonats(cAktuell.get(Calendar.YEAR),
                        cAktuell.get(Calendar.MONTH)) + 1; iTag++) {

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

                    org.hibernate.Criteria crit = session.createCriteria(FLRSonderzeiten.class);
                    crit.add(
                            Restrictions.eq(ZeiterfassungFac.FLR_SONDERZEITEN_PERSONAL_I_ID, personalDto.getIId()));
                    // Heute
                    Calendar cHeuteVon = Calendar.getInstance();
                    cHeuteVon.set(Calendar.DAY_OF_MONTH, iTag);
                    cHeuteVon.set(Calendar.MONTH, cAktuell.get(Calendar.MONTH));
                    cHeuteVon.set(Calendar.YEAR, cAktuell.get(Calendar.YEAR));
                    cHeuteVon.set(Calendar.DAY_OF_MONTH, iTag);

                    cHeuteVon.set(Calendar.HOUR_OF_DAY, 0);
                    cHeuteVon.set(Calendar.MINUTE, 0);
                    cHeuteVon.set(Calendar.SECOND, 0);
                    cHeuteVon.set(Calendar.MILLISECOND, 0);

                    crit.add(Restrictions.eq(ZeiterfassungFac.FLR_SONDERZEITEN_D_DATUM,
                            new Date(cHeuteVon.getTimeInMillis())));
                    List<?> resultList = crit.list();
                    Iterator<?> resultListIterator = resultList.iterator();
                    String taetigkeiten = "";

                    if (resultListIterator.hasNext()) {
                        FLRSonderzeiten flrzeitdaten = (FLRSonderzeiten) resultListIterator.next();
                        taetigkeiten = flrzeitdaten.getFlrtaetigkeit().getC_nr().substring(0, 2);
                    }
                    try {
                        Double d = getZeiterfassungFac().berechneTagesArbeitszeit(personalDto.getIId(),
                                new java.sql.Date(cHeuteVon.getTimeInMillis()), theClientDto);

                        if (d.doubleValue() > 0) {

                            // PJ 18278 Nur anzeigen, wenn keine Sonderzeiten
                            if (resultList.size() == 0) {

                                taetigkeiten = Helper.formatZahl(d, 1, theClientDto.getLocUi());
                            }
                            iSummeIst += d.doubleValue();
                        }
                    } catch (javax.ejb.EJBException ex1) {
                        taetigkeiten = "ERR";
                    } catch (EJBExceptionLP ex1) {
                        taetigkeiten = "ERR";
                    } catch (RemoteException ex2) {
                        throwEJBExceptionLPRespectOld(ex2);
                    }

                    session.close();
                    data[i][iTag] = taetigkeiten;
                }
                data[i][REPORT_MITARBEITERUEBERSICHT_ANWESENHEITSUMME] = new BigDecimal(iSummeIst);

            }
            cAktuell.set(Calendar.DAY_OF_MONTH, 1);
            cAktuell.set(Calendar.MONTH, cAktuell.get(Calendar.MONTH) + 1);

            parameter.put("P_SORTIERUNG",
                    getZeiterfassungFac().getParameterSortierungZeitauswertungen(iOptionSortierung, theClientDto));

            initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL,
                    ZeiterfassungReportFac.REPORT_MITARBEITERUEBERSICHT, theClientDto.getMandant(),
                    theClientDto.getLocUi(), theClientDto);

            if (print != null) {
                print = Helper.addReport2Report(print, getReportPrint().getPrint());
            } else {
                print = getReportPrint();
            }
        }
        return print;
    }

    @TransactionAttribute(TransactionAttributeType.NEVER)
    public MaschinenerfolgReportDto printMaschinenerfolg(Integer personalIId, Integer personalgruppeIId,
            java.sql.Timestamp tVon, java.sql.Timestamp tBis, Integer iOptionSortierung, String sortierung,
            boolean bMonatsbetrachtung, TheClientDto theClientDto) {

        sAktuellerReport = ZeiterfassungReportFac.REPORT_MASCHINENERFOLG;

        PersonalDto[] personalDtos = null;

        try {

            if (personalIId != null) {
                personalDtos = new PersonalDto[1];
                personalDtos[0] = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);
            } else {

                if (personalgruppeIId != null) {
                    personalDtos = getPersonalFac().personalFindByPersonalgruppeIdMandantCNr(personalgruppeIId,
                            theClientDto.getMandant(), false);
                } else {
                    personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(), false);
                }

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

        if (iOptionSortierung != ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_PERSONALNUMMER) {
            for (int i = personalDtos.length - 1; i > 0; --i) {

                if (personalDtos[i].getKostenstelleIIdAbteilung() != null) {
                    personalDtos[i].setKostenstelleDto_Abteilung(getSystemFac()
                            .kostenstelleFindByPrimaryKey(personalDtos[i].getKostenstelleIIdAbteilung()));
                }
                if (personalDtos[i].getKostenstelleIIdStamm() != null) {
                    personalDtos[i].setKostenstelleDto_Stamm(
                            getSystemFac().kostenstelleFindByPrimaryKey(personalDtos[i].getKostenstelleIIdStamm()));
                }

                for (int j = 0; j < i; ++j) {
                    String vergleich1 = "";
                    String vergleich2 = "";

                    String kostenstelle1 = "               ";
                    String kostenstelle2 = "               ";

                    if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_KOSTENSTELLE_NAME_VORNAME
                            || iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_KOSTENSTELLE_NAME_VORNAME) {
                        if (personalDtos[j].getKostenstelleIIdStamm() != null) {

                            kostenstelle1 = Helper
                                    .fitString2Length(personalDtos[j].getKostenstelleDto_Stamm().getCNr(), 15, ' ');

                        }
                        if (personalDtos[j + 1].getKostenstelleIIdStamm() != null) {
                            kostenstelle2 = Helper.fitString2Length(
                                    personalDtos[j + 1].getKostenstelleDto_Stamm().getCNr(), 15, ' ');

                        }

                        if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_KOSTENSTELLE_NAME_VORNAME) {
                            vergleich1 += kostenstelle1;
                            vergleich2 += kostenstelle2;
                        }

                    }

                    if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_NAME_VORNAME
                            || iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_KOSTENSTELLE_NAME_VORNAME) {

                        String abteilung1 = "               ";
                        String abteilung2 = "               ";

                        if (personalDtos[j].getKostenstelleIIdAbteilung() != null) {

                            KostenstelleDto kstDto = getSystemFac()
                                    .kostenstelleFindByPrimaryKey(personalDtos[j].getKostenstelleIIdAbteilung());
                            abteilung1 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                        } else {
                            abteilung1 = "               ";
                        }
                        if (personalDtos[j + 1].getKostenstelleIIdAbteilung() != null) {
                            KostenstelleDto kstDto = getSystemFac().kostenstelleFindByPrimaryKey(
                                    personalDtos[j + 1].getKostenstelleIIdAbteilung());
                            abteilung2 = Helper.fitString2Length(kstDto.getCNr(), 15, ' ');

                        } else {
                            abteilung2 = "               ";
                        }
                        if (iOptionSortierung == ZeiterfassungFacAll.REPORT_MONATSABRECHNUNG_OPTION_SORTIERUNG_ABTEILUNG_KOSTENSTELLE_NAME_VORNAME) {
                            vergleich1 = kostenstelle1 + vergleich1;
                            vergleich2 = kostenstelle2 + vergleich2;
                        }
                        vergleich1 = abteilung1 + vergleich1;
                        vergleich2 = abteilung2 + vergleich2;

                    }

                    PartnerDto p1Dto = getPartnerFac().partnerFindByPrimaryKey(personalDtos[j].getPartnerIId(),
                            theClientDto);
                    personalDtos[j].setPartnerDto(p1Dto);
                    PartnerDto p2Dto = getPartnerFac().partnerFindByPrimaryKey(personalDtos[j + 1].getPartnerIId(),
                            theClientDto);
                    vergleich1 += Helper.fitString2Length(p1Dto.getCName1nachnamefirmazeile1(), 80, ' ');
                    vergleich2 += Helper.fitString2Length(p2Dto.getCName1nachnamefirmazeile1(), 80, ' ');

                    if (p1Dto.getCName2vornamefirmazeile2() != null) {
                        vergleich1 += p1Dto.getCName2vornamefirmazeile2();
                    }
                    if (p2Dto.getCName2vornamefirmazeile2() != null) {
                        vergleich2 += p2Dto.getCName2vornamefirmazeile2();
                    }

                    if (vergleich1.compareTo(vergleich2) > 0) {
                        PersonalDto tauschDto = personalDtos[j];
                        personalDtos[j] = personalDtos[j + 1];
                        personalDtos[j + 1] = tauschDto;
                    }

                }
            }
        }

        HashMap<String, Object> parameter = new HashMap<String, Object>();
        parameter.put("P_VON", tVon);
        parameter.put("P_BIS", new Timestamp(tBis.getTime() - 24 * 3600000));
        parameter.put("P_MONATSBETRACHTUNG", new Boolean(bMonatsbetrachtung));
        parameter.put("P_SORTIERUNG", sortierung);
        if (personalgruppeIId != null) {
            parameter.put("P_PERSONALGRUPPE",
                    getPersonalFac().personalgruppeFindByPrimaryKey(personalgruppeIId).getCBez());
        }

        ArrayList alDaten = new ArrayList();

        for (int j = 0; j < personalDtos.length; j++) {

            // Daten aufloesen
            PartnerDto p1Dto = getPartnerFac().partnerFindByPrimaryKey(personalDtos[j].getPartnerIId(),
                    theClientDto);

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

            if (personalDtos[j].getKostenstelleIIdAbteilung() != null) {
                personalDtos[j].setKostenstelleDto_Abteilung(
                        getSystemFac().kostenstelleFindByPrimaryKey(personalDtos[j].getKostenstelleIIdAbteilung()));
            }
            if (personalDtos[j].getKostenstelleIIdStamm() != null) {
                personalDtos[j].setKostenstelleDto_Stamm(
                        getSystemFac().kostenstelleFindByPrimaryKey(personalDtos[j].getKostenstelleIIdStamm()));
            }

            String sQuery = "SELECT m FROM FLRMaschinenzeitdaten m WHERE m.t_von>='"
                    + Helper.formatDateWithSlashes(new java.sql.Date(tVon.getTime())) + "' AND m.t_von<'"
                    + Helper.formatDateWithSlashes(new java.sql.Date(tBis.getTime())) + "'";

            sQuery += " AND m.flrpersonal_gestartet.i_id=" + personalDtos[j].getIId();

            sQuery += " AND m.t_bis IS NOT NULL ORDER BY m.t_von ASC AND m.flrmaschine.c_inventarnummer ASC";

            Query query = session.createQuery(sQuery);
            List<?> resultList = query.list();

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

            TreeMap<Timestamp, TreeMap<String, Object[]>> tmDatum = new TreeMap<Timestamp, TreeMap<String, Object[]>>();

            while (resultListIterator.hasNext()) {
                FLRMaschinenzeitdaten flrMaschinenzeitdaten = (FLRMaschinenzeitdaten) resultListIterator.next();

                Timestamp tDatum = Helper.cutTimestamp(new Timestamp(flrMaschinenzeitdaten.getT_von().getTime()));

                TreeMap<String, Object[]> tmMaschinen = null;

                if (tmDatum.containsKey(tDatum)) {
                    tmMaschinen = tmDatum.get(tDatum);
                } else {
                    tmMaschinen = new TreeMap<String, Object[]>();
                }

                Object[] oZeile = new Object[REPORT_MASCHINENERFOLG_ANZAHL_SPALTEN];

                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(tDatum.getTime());

                long laufzeit = flrMaschinenzeitdaten.getT_bis().getTime()
                        - flrMaschinenzeitdaten.getT_von().getTime();
                BigDecimal bdLaufzeit = new BigDecimal(laufzeit / 3600000D);
                if (tmMaschinen.containsKey(flrMaschinenzeitdaten.getFlrmaschine().getC_inventarnummer())) {
                    oZeile = tmMaschinen.get(flrMaschinenzeitdaten.getFlrmaschine().getC_inventarnummer());
                    oZeile[REPORT_MASCHINENERFOLG_LAUFZEIT] = ((BigDecimal) oZeile[REPORT_MASCHINENERFOLG_LAUFZEIT])
                            .add(bdLaufzeit);
                } else {
                    oZeile = new Object[REPORT_MASCHINENERFOLG_ANZAHL_SPALTEN];

                    try {
                        Double dGesamt = getZeiterfassungFac().berechneTagesArbeitszeit(personalDtos[j].getIId(),
                                new java.sql.Date(tDatum.getTime()), theClientDto);
                        oZeile[REPORT_MASCHINENERFOLG_ANWESENHEITSZEIT] = new BigDecimal(dGesamt);
                    } catch (RemoteException e) {
                        throwEJBExceptionLPRespectOld(e);
                    }
                    oZeile[REPORT_MASCHINENERFOLG_JAHRMONAT] = c.get(Calendar.YEAR) + " "
                            + (c.get(Calendar.MONTH) + 1);
                    oZeile[REPORT_MASCHINENERFOLG_SORT_PERSONAL] = new Integer(j);
                    oZeile[REPORT_MASCHINENERFOLG_PERSONALNUMMER] = personalDtos[j].getCPersonalnr();
                    oZeile[REPORT_MASCHINENERFOLG_NACHNAME] = p1Dto.getCName1nachnamefirmazeile1();
                    oZeile[REPORT_MASCHINENERFOLG_VORNAME] = p1Dto.getCName2vornamefirmazeile2();

                    if (personalDtos[j].getKostenstelleIIdAbteilung() != null) {
                        oZeile[REPORT_MASCHINENERFOLG_ABTEILUNG] = personalDtos[j].getKostenstelleDto_Abteilung()
                                .getCNr();
                    }
                    if (personalDtos[j].getKostenstelleIIdStamm() != null) {
                        oZeile[REPORT_MASCHINENERFOLG_KOSTENSTELLE] = personalDtos[j].getKostenstelleDto_Stamm()
                                .getCNr();
                    }

                    oZeile[REPORT_MASCHINENERFOLG_DATUM] = tDatum;

                    oZeile[REPORT_MASCHINENERFOLG_INVENTARNUMMER] = flrMaschinenzeitdaten.getFlrmaschine()
                            .getC_inventarnummer();

                    oZeile[REPORT_MASCHINENERFOLG_BEZEICHNUNG] = flrMaschinenzeitdaten.getFlrmaschine().getC_bez();
                    oZeile[REPORT_MASCHINENERFOLG_IDENTIFIKATIONSNUMMER] = flrMaschinenzeitdaten.getFlrmaschine()
                            .getC_identifikationsnr();

                    oZeile[REPORT_MASCHINENERFOLG_MASCHINENGRUPPE] = flrMaschinenzeitdaten.getFlrmaschine()
                            .getFlrmaschinengruppe().getC_bez();

                    oZeile[REPORT_MASCHINENERFOLG_LAUFZEIT] = bdLaufzeit;

                }
                tmMaschinen.put(flrMaschinenzeitdaten.getFlrmaschine().getC_inventarnummer(), oZeile);

                tmDatum.put(tDatum, tmMaschinen);

            }
            session.close();

            Calendar c = Calendar.getInstance();
            c.setTime(tVon);

            while (c.getTime().before(tBis)) {

                Timestamp tAktuell = Helper.cutTimestamp(new Timestamp(c.getTimeInMillis()));

                if (tmDatum.containsKey(tAktuell)) {

                    TreeMap<String, Object[]> tmMaschinen = tmDatum.get(tAktuell);

                    Iterator<String> it = tmMaschinen.keySet().iterator();
                    boolean bNurBeimErsten = true;
                    while (it.hasNext()) {

                        String key = it.next();

                        Object[] zeile = tmMaschinen.get(key);

                        if (bNurBeimErsten == true) {
                            bNurBeimErsten = false;

                        } else {
                            zeile[REPORT_MASCHINENERFOLG_ANWESENHEITSZEIT] = null;
                        }

                        alDaten.add(zeile);

                    }

                } else {
                    Object[] oZeile = null;
                    oZeile = new Object[REPORT_MASCHINENERFOLG_ANZAHL_SPALTEN];

                    oZeile[REPORT_MASCHINENERFOLG_PERSONALNUMMER] = personalDtos[j].getCPersonalnr();
                    oZeile[REPORT_MASCHINENERFOLG_NACHNAME] = p1Dto.getCName1nachnamefirmazeile1();
                    oZeile[REPORT_MASCHINENERFOLG_VORNAME] = p1Dto.getCName2vornamefirmazeile2();
                    oZeile[REPORT_MASCHINENERFOLG_DATUM] = tAktuell;

                    try {
                        Double dGesamt = getZeiterfassungFac().berechneTagesArbeitszeit(personalDtos[j].getIId(),
                                new java.sql.Date(tAktuell.getTime()), theClientDto);
                        oZeile[REPORT_MASCHINENERFOLG_ANWESENHEITSZEIT] = new BigDecimal(dGesamt);
                    } catch (EJBExceptionLP e) {
                        ArrayList<Object> al = new ArrayList<Object>();
                        al.add(personalDtos[j].getIId());
                        al.add(tAktuell);
                        throw new EJBExceptionLP(EJBExceptionLP.FEHLER_IN_ZEITDATEN, al, new Exception());
                    } catch (RemoteException e) {
                        throwEJBExceptionLPRespectOld(e);
                    }
                    oZeile[REPORT_MASCHINENERFOLG_JAHRMONAT] = c.get(Calendar.YEAR) + " "
                            + (c.get(Calendar.MONTH) + 1);
                    oZeile[REPORT_MASCHINENERFOLG_SORT_PERSONAL] = new Integer(j);
                    alDaten.add(oZeile);

                }

                c.add(Calendar.DAY_OF_MONTH, 1);

            }

        }

        // Verdichten
        if (bMonatsbetrachtung == true) {
            TreeMap tm = new TreeMap();
            for (int i = 0; i < alDaten.size(); i++) {
                Object[] zeileAktuell = (Object[]) alDaten.get(i);
                Integer iSort = (Integer) zeileAktuell[REPORT_MASCHINENERFOLG_SORT_PERSONAL];

                Timestamp tAktuell = (Timestamp) zeileAktuell[REPORT_MASCHINENERFOLG_DATUM];

                Calendar c = Calendar.getInstance();
                c.setTimeInMillis(tAktuell.getTime());
                c.set(Calendar.DAY_OF_MONTH, 1);

                zeileAktuell[REPORT_MASCHINENERFOLG_DATUM] = new Timestamp(c.getTimeInMillis());

                String dSort = c.get(Calendar.YEAR)
                        + Helper.fitString2LengthAlignRight(c.get(Calendar.MONTH) + "", 2, '0');

                String key = Helper.fitString2LengthAlignRight(iSort + "", 15, ' ') + dSort
                        + zeileAktuell[REPORT_MASCHINENERFOLG_INVENTARNUMMER];

                if (tm.containsKey(key)) {
                    Object[] zeileVorhanden = (Object[]) tm.get(key);

                    BigDecimal anwesenheitszeitVorhanden = (BigDecimal) zeileVorhanden[REPORT_MASCHINENERFOLG_ANWESENHEITSZEIT];
                    BigDecimal laufzeitVorhanden = (BigDecimal) zeileVorhanden[REPORT_MASCHINENERFOLG_LAUFZEIT];
                    if (anwesenheitszeitVorhanden == null) {
                        anwesenheitszeitVorhanden = new BigDecimal(0);
                    }
                    if (laufzeitVorhanden == null) {
                        laufzeitVorhanden = new BigDecimal(0);
                    }
                    BigDecimal anwesenheitszeitAktuell = (BigDecimal) zeileAktuell[REPORT_MASCHINENERFOLG_ANWESENHEITSZEIT];
                    BigDecimal laufzeitAktuell = (BigDecimal) zeileAktuell[REPORT_MASCHINENERFOLG_LAUFZEIT];
                    if (anwesenheitszeitAktuell == null) {
                        anwesenheitszeitAktuell = new BigDecimal(0);
                    }
                    if (laufzeitAktuell == null) {
                        laufzeitAktuell = new BigDecimal(0);
                    }

                    zeileVorhanden[REPORT_MASCHINENERFOLG_ANWESENHEITSZEIT] = anwesenheitszeitVorhanden
                            .add(anwesenheitszeitAktuell);
                    zeileVorhanden[REPORT_MASCHINENERFOLG_LAUFZEIT] = laufzeitVorhanden.add(laufzeitAktuell);

                    tm.put(key, zeileVorhanden);

                } else {
                    tm.put(key, zeileAktuell);
                }

            }

            alDaten = new ArrayList();
            Iterator it = tm.keySet().iterator();

            while (it.hasNext()) {
                alDaten.add(tm.get(it.next()));
            }
        }

        data = new Object[alDaten.size()][REPORT_MASCHINENERFOLG_ANZAHL_SPALTEN];
        data = (Object[][]) alDaten.toArray(data);
        MaschinenerfolgReportDto mDto = new MaschinenerfolgReportDto();
        mDto.setData(data);
        initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_MASCHINENERFOLG,
                theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

        mDto.setJasperPrintLP(getReportPrint());
        return mDto;
    }

    public JasperPrintLP printFahrtenbuch(Integer personalIId, java.sql.Timestamp tVon, java.sql.Timestamp tBis,
            Integer iOption, boolean bPlusVersteckte, TheClientDto theClientDto) {
        if (tVon == null || tBis == null || personalIId.equals(iOption)) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                    new Exception("tVon == null || tBis == null || personalIId == iOption"));
        }
        tVon = Helper.cutTimestamp(tVon);
        tBis = Helper.cutTimestamp(tBis);

        // Kurze Tagebezeichnungen holen
        String[] kurzeWochentage = new DateFormatSymbols(theClientDto.getLocUi()).getShortWeekdays();

        if (tVon.after(tBis)) {
            java.sql.Timestamp h = tVon;
            tVon = tBis;
            tBis = h;
        }
        PersonalDto[] personalDtos = null;
        JasperPrintLP print = null;
        try {
            if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_SELEKTIERTE_PERSON) {

                if (personalIId == null) {
                    throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                            new Exception("personalIId == null"));
                }

                personalDtos = new PersonalDto[1];

                personalDtos[0] = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);

            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_MEINE_ABTEILUNG) {
                PersonalDto personalDto = getPersonalFac().personalFindByPrimaryKey(personalIId, theClientDto);
                personalDtos = getPersonalFac().personalFindAllPersonenMeinerAbteilung(
                        personalDto.getKostenstelleIIdAbteilung(), theClientDto.getMandant(), bPlusVersteckte);
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_PERSONEN) {
                personalDtos = getPersonalFac().personalFindByMandantCNr(theClientDto.getMandant(),
                        bPlusVersteckte);
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_ARBEITER) {
                personalDtos = getPersonalFac().personalFindAllArbeiterEinesMandanten(theClientDto.getMandant(),
                        bPlusVersteckte);
            } else if (iOption.intValue() == ZeiterfassungFac.REPORT_SONDERZEITENLISTE_OPTION_ALLE_ANGESTELLTE) {
                personalDtos = getPersonalFac().personalFindAllAngestellteEinesMandanten(theClientDto.getMandant(),
                        bPlusVersteckte);
            } else {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER, new Exception("OPTION NICHT VERFUEGBAR"));
            }
        } catch (RemoteException ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
        }

        for (int i = 0; i < personalDtos.length; i++) {
            PersonalDto personalDto = personalDtos[i];

            personalDto.setPartnerDto(
                    getPartnerFac().partnerFindByPrimaryKey(personalDto.getPartnerIId(), theClientDto));

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

            org.hibernate.Criteria crit = session.createCriteria(FLRReise.class);
            crit.add(Restrictions.eq(ZeiterfassungFac.FLR_REISE_PERSONAL_I_ID, personalDto.getIId()));
            crit.add(Restrictions.ge(ZeiterfassungFac.FLR_REISE_T_ZEIT, tVon));
            crit.add(Restrictions.lt(ZeiterfassungFac.FLR_REISE_T_ZEIT, tBis));
            crit.addOrder(Order.asc(ZeiterfassungFac.FLR_REISE_T_ZEIT));

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

            Iterator<?> resultListIterator = resultList.iterator();
            // Erster Eintrag ist beginn
            FLRReise reiseBeginn = null;
            while (resultListIterator.hasNext()) {
                reiseBeginn = (FLRReise) resultListIterator.next();

                if (Helper.short2boolean(reiseBeginn.getB_beginn()) == true) {
                    break;
                }

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

            while (resultListIterator.hasNext()) {
                Object[] oZeile = new Object[6];
                FLRReise flrReise = (FLRReise) resultListIterator.next();

                if (Helper.short2boolean(flrReise.getB_beginn()) == false) {
                    if (Helper.short2boolean(reiseBeginn.getB_beginn()) == true) {
                        Calendar cal = Calendar.getInstance();
                        cal.setTimeInMillis(flrReise.getT_zeit().getTime());
                        oZeile[REPORT_FAHRTENBUCH_TAG] = kurzeWochentage[cal.get(Calendar.DAY_OF_WEEK)];
                        oZeile[REPORT_FAHRTENBUCH_KMBEGINN] = flrReise.getI_kmbeginn();
                        oZeile[REPORT_FAHRTENBUCH_KMENDE] = flrReise.getI_kmende();
                        oZeile[REPORT_FAHRTENBUCH_DATUM] = reiseBeginn.getT_zeit();

                        if (flrReise.getI_kmbeginn() != null && flrReise.getI_kmende() != null) {
                            oZeile[REPORT_FAHRTENBUCH_STRECKE] = flrReise.getI_kmende() - flrReise.getI_kmbeginn();
                        }

                        if (reiseBeginn.getFlrpartner() != null) {
                            com.lp.server.partner.service.PartnerDto partnerDto = getPartnerFac()
                                    .partnerFindByPrimaryKey(reiseBeginn.getFlrpartner().getI_id(), theClientDto);
                            oZeile[REPORT_FAHRTENBUCH_KUNDE] = partnerDto.formatFixTitelName1Name2();
                        }

                        alDaten.add(oZeile);
                    }

                    if (resultListIterator.hasNext()) {
                        reiseBeginn = (FLRReise) resultListIterator.next();
                    }

                }

            }

            session.close();

            index = -1;
            sAktuellerReport = ZeiterfassungReportFac.REPORT_FAHRTENBUCH;
            HashMap<String, Object> parameter = new HashMap<String, Object>();

            // KM-Geld
            try {
                Calendar cal = Calendar.getInstance();
                cal.setTimeInMillis(tVon.getTime());
                PersonalgehaltDto personalgehaltDto = getPersonalFac().personalgehaltFindLetztePersonalgehalt(
                        personalIId, cal.get(Calendar.YEAR), cal.get(Calendar.MONTH));

                if (personalgehaltDto != null) {
                    parameter.put("P_KMGELD1", personalgehaltDto.getNKmgeld1());
                    parameter.put("P_KMGELD2", personalgehaltDto.getNKmgeld2());
                    parameter.put("P_KMGELD1BISKILOMETER", personalgehaltDto.getFBiskilometer().doubleValue());

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

            parameter.put("P_PERSONAL", personalDto.getPartnerDto().formatFixTitelName1Name2());

            parameter.put("P_VON", tVon);

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(tBis.getTime());
            c.set(Calendar.DATE, c.get(Calendar.DATE) - 1);

            parameter.put("P_BIS", new java.sql.Timestamp(c.getTimeInMillis()));
            data = new Object[alDaten.size()][7];
            for (int k = 0; k < alDaten.size(); k++) {
                Object[] o = (Object[]) alDaten.get(k);
                data[k][REPORT_FAHRTENBUCH_DATUM] = o[REPORT_FAHRTENBUCH_DATUM];
                data[k][REPORT_FAHRTENBUCH_KMBEGINN] = o[REPORT_FAHRTENBUCH_KMBEGINN];
                data[k][REPORT_FAHRTENBUCH_KMENDE] = o[REPORT_FAHRTENBUCH_KMENDE];
                data[k][REPORT_FAHRTENBUCH_KUNDE] = o[REPORT_FAHRTENBUCH_KUNDE];
                data[k][REPORT_FAHRTENBUCH_STRECKE] = o[REPORT_FAHRTENBUCH_STRECKE];
                data[k][REPORT_FAHRTENBUCH_TAG] = o[REPORT_FAHRTENBUCH_TAG];
            }

            initJRDS(parameter, ZeiterfassungReportFac.REPORT_MODUL, ZeiterfassungReportFac.REPORT_FAHRTENBUCH,
                    theClientDto.getMandant(), theClientDto.getLocUi(), theClientDto);

            if (print != null) {

                print = Helper.addReport2Report(print, getReportPrint().getPrint());
            } else {
                print = getReportPrint();
            }
        }
        return print;

    }

    public boolean next() throws JRException {
        index++;
        return (index < data.length);
    }

    public Object getFieldValue(JRField jRField) throws JRException {
        Object value = null;
        String fieldName = jRField.getName();
        if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_ZESTIFTE)) {
            if ("Kennung".equals(fieldName)) {
                value = data[index][REPORT_ZESTIFTE_KENNUNG];
            } else if ("Mehrfachstift".equals(fieldName)) {
                value = data[index][REPORT_ZESTIFTE_MEHRFACHSTIFT];
            } else if ("Personal".equals(fieldName)) {
                value = data[index][REPORT_ZESTIFTE_PERSONAL];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_PRODUKTIVITAETSTAGESSTATISTIK)) {

            if ("Person".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_PERSON];
            } else if ("Datum".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_DATUM];
            } else if ("Leistungsfaktor".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LEISTUNGSFAKTOR];
            } else if ("Los".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LOS];
            } else if ("Dauer".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_DAUER];
            } else if ("Artikel".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_TAETIGKEIT];
            } else if ("Artikelbezeichnung".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_TAETIGKEIT_BEZEICHNUNG];
            } else if ("Kunde".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_KUNDE];
            } else if ("Stklnr".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_STKLNR];
            } else if ("Stklbez".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_STKLBEZ];
            } else if ("Losklassen".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LOSKLASSEN];
            } else if ("Agart".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_AGART];
            } else if ("Arbeitsgang".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_ARBEITSGANG];
            } else if ("Unterarbeitsgang".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_UNTERARBEITSGANG];
            } else if ("Ruestzeit".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_RUESTZEIT];
            } else if ("Stueckzeit".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_STUECKZEIT];
            } else if ("Losgroesse".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_LOSGROESSE];
            } else if ("Gutstueck".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_GUTSTUECK];
            } else if ("Schlechtstueck".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_SCHLECHTSTUECK];
            } else if ("Fertig".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_FERTIG];
            } else if ("Fertigungsgruppe".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_FERTIGUNGSGRUPPE];
            } else if ("MaschineBez".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_MASCHINE_BEZ];
            } else if ("MaschineIdentifikation".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_MASCHINE_IDENTIFIKATION];
            } else if ("MaschineInventar".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_MASCHINE_INVENTATNUMMER];
            } else if ("LosRuestenMitrechnen".equals(fieldName)) {
                value = data[index][REPORT_PRODUKTIVITAETSTAGESSTATISTIK_RUESTEN_MITRECHNEN];
            }

        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_ZEITDATEN)) {
            if ("Personalnummer".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_PERSONALNR];
            } else if ("Name".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_NAME];
            } else if ("Zeit".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_ZEIT];
            } else if ("Taetigkeit".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_TAETIGKEIT];
            } else if ("Artikelbezeichnung".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_ARTIKELBEZEICHNUNG];
            } else if ("Auftrag".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_AUFTRAG];
            } else if ("Projektbezeichnung".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_PROJEKTBEZEICHNUNG];
            } else if ("Tagessumme".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_TAGESSUMME];
            } else if ("Maschine".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_MASCHINE];
            } else if ("Position".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_POSITION];
            } else if ("Buchungsart".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_BUCHUNGSART];
            } else if ("Bemerkung".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_BEMERKUNG];
            } else if ("Sollzeit".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_SOLLZEIT];
            } else if ("Gutstueck".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_GUTSTK];
            } else if ("Schlechtstueck".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_SCHLECHTSTK];
            } else if ("Quelle".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_QUELLE];
            } else if ("Kunde".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_KUNDE];
            } else if ("Dauer".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_DAUER];
            } else if ("Kommentar".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(data[index][REPORT_ZEITDATEN_KOMMENTAR]);
            } else if ("Jahrmonat".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_KOMMENTAR];
            } else if ("TaetigkeitSonderzeit".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_TAETIGKEIT_SONDERZEIT];
            } else if ("DauerSonderzeit".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_DAUER_SONDERZEIT];
            } else if ("DatumSonderzeit".equals(fieldName)) {
                value = data[index][REPORT_ZEITDATEN_DATUM_SONDERZEIT];
            }

        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIK)
                || sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_ARBEITSZEITSTATISTIKVERDICHTET)) {
            if ("Artikelgruppe".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_ARTIKELGRUPPE];
            } else if ("Artikelklasse".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_ARTIKELKLASSE];
            } else if ("Kunde".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_KUNDE];
            } else if ("Artikelnummer".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_ARTIKELNUMMER];
            } else if ("Bezeichnung".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_BEZEICHNUNG];
            } else if ("Person".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_PERSON];
            } else if ("PersonKostenstelle".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_PERSON_KOSTENSTELLE];
            } else if ("Beleg".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_BELEG];
            } else if ("Vertreter".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_VERTRETER];
            } else if ("Dauer".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_DAUER];
            } else if ("Von".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_VON];
            } else if ("Bis".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_BIS];
            } else if ("Kosten".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_KOSTEN];
            } else if ("Gruppierung".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_GRUPPIERUNG];
            } else if ("Projekt".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_PROJEKT];
            } else if ("Bemerkung".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_BEMERKUNG];
            } else if ("Kommentar".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_KOMMENTAR];
            } else if ("Fertigungsgruppe".equals(fieldName)) {
                value = data[index][REPORT_ARBEITSZEITSTATISTIK_FERTIGUNGSGRUPPE];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_AUFTRAGSZEITSTATISTIK)) {
            if ("Person".equals(fieldName)) {
                value = data[index][REPORT_AUFTRAGSZEITSTATISTIK_PERSON];
            } else if ("SubreportAuftraege".equals(fieldName)) {
                value = data[index][REPORT_AUFTRAGSZEITSTATISTIK_SUBREPORT_AUFTRAEGE];
            } else if ("Nichtzuordenbar".equals(fieldName)) {
                value = data[index][REPORT_AUFTRAGSZEITSTATISTIK_NICHT_ZUORDENBAR];
            } else if ("Sonderzeiten".equals(fieldName)) {
                value = data[index][REPORT_AUFTRAGSZEITSTATISTIK_SONDERZEITEN];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_FAHRZEUGE)) {
            if ("Beginn".equals(fieldName)) {
                value = data[index][REPORT_FAHRZEUGE_BEGINN];
            } else if ("Ende".equals(fieldName)) {
                value = data[index][REPORT_FAHRZEUGE_ENDE];
            } else if ("Fahrzeug".equals(fieldName)) {
                value = data[index][REPORT_FAHRZEUGE_FAHRZEUG];
            } else if ("Kennzeichen".equals(fieldName)) {
                value = data[index][REPORT_FAHRZEUGE_KENNZEICHEN];
            } else if ("Kosten".equals(fieldName)) {
                value = data[index][REPORT_FAHRZEUGE_KOSTEN];
            } else if ("Land".equals(fieldName)) {
                value = data[index][REPORT_FAHRZEUGE_LAND];
            } else if ("Partner".equals(fieldName)) {
                value = data[index][REPORT_FAHRZEUGE_PARTNER];
            } else if ("Strecke".equals(fieldName)) {
                value = data[index][REPORT_FAHRZEUGE_STRECKE];
            } else if ("Person".equals(fieldName)) {
                value = data[index][REPORT_FAHRZEUGE_PERSON];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_MASCHINENERFOLG)) {
            if ("Vorname".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_VORNAME];
            } else if ("Nachname".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_NACHNAME];
            } else if ("Anwesenheitszeit".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_ANWESENHEITSZEIT];
            } else if ("Bezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_BEZEICHNUNG];
            } else if ("Datum".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_DATUM];
            } else if ("Identifikationsnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_IDENTIFIKATIONSNUMMER];
            } else if ("Laufzeit".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_LAUFZEIT];
            } else if ("Maschinengruppe".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_MASCHINENGRUPPE];
            } else if ("Personalnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_PERSONALNUMMER];
            } else if ("Inventarnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_INVENTARNUMMER];
            } else if ("JahrMonat".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_JAHRMONAT];
            } else if ("Kostenstelle".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_KOSTENSTELLE];
            } else if ("Abteilung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENERFOLG_ABTEILUNG];
            }

        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_TELEFONZEITEN)) {
            if ("Person".equals(fieldName)) {
                value = data[index][REPORT_TELEFONLISTE_PERSON];
            } else if ("Von".equals(fieldName)) {
                value = data[index][REPORT_TELEFONLISTE_VON];
            } else if ("Bis".equals(fieldName)) {
                value = data[index][REPORT_TELEFONLISTE_BIS];
            } else if ("Partner".equals(fieldName)) {
                value = data[index][REPORT_TELEFONLISTE_PARTNER];
            } else if ("LKZ_Partner".equals(fieldName)) {
                value = data[index][REPORT_TELEFONLISTE_LKZ_PARTNER];
            } else if ("Ansprechpartner".equals(fieldName)) {
                value = data[index][REPORT_TELEFONLISTE_ANSPRECHPARTNER];
            } else if ("Kommentarextern".equals(fieldName)) {
                value = data[index][REPORT_TELEFONLISTE_KOMMENTAREXTERN];
            } else if ("Kommentarintern".equals(fieldName)) {
                value = data[index][REPORT_TELEFONLISTE_KOMMENTARINTERN];
            } else if ("Dauer".equals(fieldName)) {
                value = data[index][REPORT_TELEFONLISTE_DAUER];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_MASCHINENBELEGUNG)) {
            if ("Identifikationsnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_IDENTIFIKATIONSNUMMER];
            } else if ("Inventarnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_INVENTARNUMMER];
            } else if ("Versteckt".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_VERSTECKT];
            } else if ("Bezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_BEZEICHNUNG];
            } else if ("Datum".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_DATUM];
            } else if ("Artikel".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_ARTIKEL];
            } else if ("Artikelbezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_ARTIKELBEZEICHNUNG];
            } else if ("Fertig".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_FERTIG];
            } else if ("Losgroesse".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_LOSGROESSE];
            } else if ("Losnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_LOSNUMMER];
            } else if ("Sollzeit".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_SOLL];
            } else if ("Arbeitsgang".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_ARBEITSGANG];
            } else if ("Unterarbeitsgang".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_UNTERARBEITSGANG];
            } else if ("Verfuegbarkeit".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_VERFUEGBARKEIT];
            } else if ("Stueckliste".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_STUECKLISTE];
            } else if ("StuecklisteBezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_STUECKLISTEBEZEICHNUNG];
            } else if ("StuecklisteKurzbezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_STUECKLISTEKURZBEZEICHNUNG];
            } else if ("StuecklisteZusatzbezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_STUECKLISTEZUSATZBEZEICHNUNG];
            } else if ("StuecklisteZusatzbezeichnung2".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_STUECKLISTEZUSATZBEZEICHNUNG2];
            } else if ("Projekt".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_PROJEKT];
            } else if ("Kommentar".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_KOMMENTAR];
            } else if ("Maschinengruppe".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_MASCHINENGRUPPE];
            } else if ("PositionsKommentar".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_POSITIONSKOMMENTAR];
            } else if ("Losende".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_LOSENDE];
            } else if ("Produktionsstop".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_PRODUKTIONSSTOP];
            } else if ("Stueckzeit".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_STUECKZEIT];
            } else if ("Ruestzeit".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_RUESTZEIT];
            } else if ("Kunde".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_KUNDE_NAME];
            } else if ("Lkz".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_KUNDE_LKZ];
            } else if ("Plz".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_KUNDE_PLZ];
            } else if ("Ort".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_KUNDE_ORT];
            } else if ("Losklassen".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_LOSKLASSEN];
            } else if ("MaschineUagNaechsterAgIdentifikationsnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_UAG_NAECHSTER_AG_MASCHINE_IDENTIFIKATIONSNUMMER];
            } else if ("MaschineUagNaechsterAgInventarnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_UAG_NAECHSTER_AG_MASCHINE_INVENTARNUMMER];
            } else if ("MaschineUagNaechsterAgBezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENBELEGUNG_UAG_NAECHSTER_AG_MASCHINE_BEZEICHNUNG];
            }

        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_MITARBEITEREINTEILUNG)) {
            if ("Personal".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_PERSONAL];
            } else if ("Personalnummer".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_PERSONALNUMMER];
            } else if ("Kostenstelle".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_KOSTENSTELLE];
            } else if ("Abteilung".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_ABTEILUNG];
            } else if ("Unterarbeitsgang".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_UNTERARBEITSGANG];
            } else if ("Arbeitsgang".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_ARBEITSGANG];
            } else if ("Artikel".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_ARTIKEL];
            } else if ("Artikelbezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_ARTIKELBEZEICHNUNG];
            } else if ("Datum".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_DATUM];
            } else if ("Fertig".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_FERTIG];
            } else if ("Laufzeit".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_LAUFZEIT];
            } else if ("Losnummer".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_LOSNUMMER];
            } else if ("Maschine".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_MASCHINE];
            } else if ("Umspannzeit".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_UMSPANNZEIT];
            } else if ("Soll".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_SOLL];
            } else if ("Tagessoll".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITEREINTEILUNG_TAGESSOLL];
            }

        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_REISEZEITEN)) {
            if ("Beginn".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_BEGINN];
            } else if ("Ende".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_ENDE];
            } else if ("Entfernung".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_ENTFERNUNG];
            } else if ("Kommentar".equals(fieldName)) {
                value = Helper.formatStyledTextForJasper(data[index][REPORT_REISEZEITEN_KOMMENTAR]);
            } else if ("Land".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_LAND];
            } else if ("Ausland".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_AUSLAND];
            } else if ("Partner".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_PARTNER];
            } else if ("Tag".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_TAG];
            } else if ("Spesen".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_SPESEN];
            } else if ("Diaeten".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_DIAETEN];
            } else if ("Zaehler".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_ZAEHLER];
            } else if ("Abstunden".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_ABSTUNDEN];
            } else if ("Mindestsatz".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_MINDESTSATZ];
            } else if ("Stundensatz".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_STUNDENSATZ];
            } else if ("Tagessatz".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_TAGESSATZ];
            } else if ("Fahrzeug".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_FAHRZEUG];
            } else if ("Kennzeichen".equals(fieldName)) {
                value = data[index][REPORT_REISEZEITEN_KENNZEICHEN];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_MASCHINENPRODUKTIVITAET)) {
            if ("Auftrag".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_AUFTRAG];
            } else if ("Kunde".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_KUNDE];
            } else if ("Projekt".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_PROJEKT];
            } else if ("Stueckliste".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_STUECKLISTE];
            } else if ("Bezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_STKLBEZEICHNUNG];
            } else if ("Beleg".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_BELEG];
            } else if ("Dauer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_DAUER];
            } else if ("Von".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_VON];
            } else if ("Bis".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_BIS];
            } else if ("Kosten".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENPRODUKTIVITAET_KOSTEN];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_MASCHINENLISTE)) {
            if ("Inventarnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_INVENTARNUMMER];
            } else if ("Bezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_BEZEICHNUNG];
            } else if ("Identifikationsnummer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_IDENTIFIKATIONSNUMMER];
            } else if ("Verfuegbarkeit".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_VERFUEGBARKEIT];
            } else if ("Kaufdatum".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_KAUFDATUM];
            } else if ("Autoende".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_AUTOENDE];
            } else if ("Maschinengruppe".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_MASCHINENGRUPPE];
            } else if ("ZuletztGestartetVon".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_ZULETZT_GESTARTET_VON];
            } else if ("ZuletztGestartetUm".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_ZULETZT_GESTARTET_UM];
            } else if ("MaschinenkostenZumZeitpunkt".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENLISTE_KOSTEN_ZUM_ZEITPUNKT];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_MASCHINENZEITDATEN)) {
            if ("Von".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_VON];
            } else if ("Bis".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_BIS];
            } else if ("Los".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_LOS];
            } else if ("Projektbezeichnung".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_PROJEKTBEZEICHNUNG];
            } else if ("Losartikelnr".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_LOSARTIKELNR];
            } else if ("Losartikelbez".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_LOSARTIKELBEZ];
            } else if ("Dauer".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_DAUER];
            } else if ("Kunde".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_KUNDE];
            } else if ("LosArbeitsgang".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_LOS_AG];
            } else if ("LosUnterarbeitsgang".equals(fieldName)) {
                value = data[index][REPORT_MASCHINENZEITDATEN_LOS_UAG];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_FAHRTENBUCH)) {
            if ("Datum".equals(fieldName)) {
                value = data[index][REPORT_FAHRTENBUCH_DATUM];
            } else if ("Beginn".equals(fieldName)) {
                value = data[index][REPORT_FAHRTENBUCH_KMBEGINN];
            } else if ("Ende".equals(fieldName)) {
                value = data[index][REPORT_FAHRTENBUCH_KMENDE];
            } else if ("Partner".equals(fieldName)) {
                value = data[index][REPORT_FAHRTENBUCH_KUNDE];
            } else if ("Strecke".equals(fieldName)) {
                value = data[index][REPORT_FAHRTENBUCH_STRECKE];
            } else if ("Tag".equals(fieldName)) {
                value = data[index][REPORT_FAHRTENBUCH_TAG];
            }
        } else if (sAktuellerReport.equals(ZeiterfassungReportFac.REPORT_MITARBEITERUEBERSICHT)) {
            if ("Name".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_NAME];
            } else if ("Tag01".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG01];
            } else if ("Tag02".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG02];
            } else if ("Tag03".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG03];
            } else if ("Tag04".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG04];
            } else if ("Tag05".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG05];
            } else if ("Tag06".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG06];
            } else if ("Tag07".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG07];
            } else if ("Tag08".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG08];
            } else if ("Tag09".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG09];
            } else if ("Tag10".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG10];
            } else if ("Tag11".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG11];
            } else if ("Tag12".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG12];
            } else if ("Tag13".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG13];
            } else if ("Tag14".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG14];
            } else if ("Tag15".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG15];
            } else if ("Tag16".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG16];
            } else if ("Tag17".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG17];
            } else if ("Tag18".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG18];
            } else if ("Tag19".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG19];
            } else if ("Tag20".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG20];
            } else if ("Tag21".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG21];
            } else if ("Tag22".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG22];
            } else if ("Tag23".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG23];
            } else if ("Tag24".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG24];
            } else if ("Tag25".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG25];
            } else if ("Tag26".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG26];
            } else if ("Tag27".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG27];
            } else if ("Tag28".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG28];
            } else if ("Tag29".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG29];
            } else if ("Tag30".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG30];
            } else if ("Tag31".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_TAG31];
            } else if ("Summeistzeit".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_ANWESENHEITSUMME];
            } else if ("KalkJahresIstStunden".equals(fieldName)) {
                value = data[index][REPORT_MITARBEITERUEBERSICHT_KALK_JAHRESISTSTUNDEN];
            }
        }
        return value;
    }

    protected static Comparator<ArbeitszeitstatistikDto> getSortGruppierungBeginnzeitComparator() {
        return new Comparator<ArbeitszeitstatistikDto>() {
            @Override
            public int compare(com.lp.server.personal.service.ArbeitszeitstatistikDto o1,
                    com.lp.server.personal.service.ArbeitszeitstatistikDto o2) {
                int value = o1.getSGruppierung().compareTo(o2.getSGruppierung());
                if (value == 0) {
                    value = o1.getAuftragzeitenDto().getTsBeginn()
                            .compareTo(o2.getAuftragzeitenDto().getTsBeginn());
                }
                return value;
            }
        };
    }
}