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

Java tutorial

Introduction

Here is the source code for com.lp.server.personal.ejbfac.ZutrittscontrollerFacBean.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.rmi.RemoteException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

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

import org.apache.commons.codec.binary.Base64;
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.personal.ejb.Fingerart;
import com.lp.server.personal.ejb.Personalfinger;
import com.lp.server.personal.ejb.Personalzutrittsklasse;
import com.lp.server.personal.ejb.Zutrittdaueroffen;
import com.lp.server.personal.ejb.Zutrittonlinecheck;
import com.lp.server.personal.ejb.Zutrittscontroller;
import com.lp.server.personal.ejb.Zutrittsklasse;
import com.lp.server.personal.ejb.Zutrittsklasseobjekt;
import com.lp.server.personal.ejb.Zutrittsleser;
import com.lp.server.personal.ejb.Zutrittslog;
import com.lp.server.personal.ejb.Zutrittsmodell;
import com.lp.server.personal.ejb.Zutrittsmodelltag;
import com.lp.server.personal.ejb.Zutrittsmodelltagdetail;
import com.lp.server.personal.ejb.Zutrittsobjekt;
import com.lp.server.personal.ejb.Zutrittsobjektverwendung;
import com.lp.server.personal.ejb.Zutrittsoeffnungsart;
import com.lp.server.personal.fastlanereader.generated.FLRZutrittonlinecheck;
import com.lp.server.personal.fastlanereader.generated.FLRZutrittsklasseobjekt;
import com.lp.server.personal.service.BetriebskalenderDto;
import com.lp.server.personal.service.FingerartDto;
import com.lp.server.personal.service.FingerartDtoAssembler;
import com.lp.server.personal.service.PersonalfingerDto;
import com.lp.server.personal.service.PersonalfingerDtoAssembler;
import com.lp.server.personal.service.PersonalzutrittsklasseDto;
import com.lp.server.personal.service.PersonalzutrittsklasseDtoAssembler;
import com.lp.server.personal.service.TagesartDto;
import com.lp.server.personal.service.ZeiterfassungFac;
import com.lp.server.personal.service.ZutrittdaueroffenDto;
import com.lp.server.personal.service.ZutrittdaueroffenDtoAssembler;
import com.lp.server.personal.service.ZutrittonlinecheckDto;
import com.lp.server.personal.service.ZutrittonlinecheckDtoAssembler;
import com.lp.server.personal.service.ZutrittscontrollerDto;
import com.lp.server.personal.service.ZutrittscontrollerDtoAssembler;
import com.lp.server.personal.service.ZutrittscontrollerFac;
import com.lp.server.personal.service.ZutrittsklasseDto;
import com.lp.server.personal.service.ZutrittsklasseDtoAssembler;
import com.lp.server.personal.service.ZutrittsklasseobjektDto;
import com.lp.server.personal.service.ZutrittsklasseobjektDtoAssembler;
import com.lp.server.personal.service.ZutrittsleserDto;
import com.lp.server.personal.service.ZutrittsleserDtoAssembler;
import com.lp.server.personal.service.ZutrittslogDto;
import com.lp.server.personal.service.ZutrittslogDtoAssembler;
import com.lp.server.personal.service.ZutrittsmodellDto;
import com.lp.server.personal.service.ZutrittsmodellDtoAssembler;
import com.lp.server.personal.service.ZutrittsmodelltagDto;
import com.lp.server.personal.service.ZutrittsmodelltagDtoAssembler;
import com.lp.server.personal.service.ZutrittsmodelltagdetailDto;
import com.lp.server.personal.service.ZutrittsmodelltagdetailDtoAssembler;
import com.lp.server.personal.service.ZutrittsobjektDto;
import com.lp.server.personal.service.ZutrittsobjektDtoAssembler;
import com.lp.server.personal.service.ZutrittsobjektverwendungDto;
import com.lp.server.personal.service.ZutrittsobjektverwendungDtoAssembler;
import com.lp.server.personal.service.ZutrittsoeffnungsartDto;
import com.lp.server.personal.service.ZutrittsoeffnungsartDtoAssembler;
import com.lp.server.system.pkgenerator.PKConst;
import com.lp.server.system.pkgenerator.bl.PKGeneratorObj;
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.Facade;
import com.lp.server.util.fastlanereader.FLRSessionFactory;
import com.lp.util.EJBExceptionLP;
import com.lp.util.Helper;

@Stateless
public class ZutrittscontrollerFacBean extends Facade implements ZutrittscontrollerFac {
    @PersistenceContext
    private EntityManager em;
    private Zutrittsmodelltag zutrittsmodelltag;

    public Integer createZutrittscontroller(ZutrittscontrollerDto zutrittscontrollerDto) throws EJBExceptionLP {
        if (zutrittscontrollerDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittscontrollerDto == null"));
        }
        if (zutrittscontrollerDto.getCBez() == null || zutrittscontrollerDto.getCAdresse() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittscontrollerDto.getCBez() == null || zutrittscontrollerDto.getCAdresse() == null"));
        }
        try {
            Query query = em.createNamedQuery("ZutrittscontrollerfindByCNr");
            query.setParameter(1, zutrittscontrollerDto.getCNr());
            Zutrittscontroller doppelt = (Zutrittscontroller) query.getSingleResult();
            if (doppelt != null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSCONTROLER.C_NR"));

            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTSCONTROLLER);
        zutrittscontrollerDto.setIId(pk);

        try {
            Zutrittscontroller zutrittscontroller = new Zutrittscontroller(zutrittscontrollerDto.getIId(),
                    zutrittscontrollerDto.getCBez(), zutrittscontrollerDto.getCAdresse(),
                    zutrittscontrollerDto.getCNr());
            em.persist(zutrittscontroller);
            em.flush();
            setZutrittscontrollerFromZutrittscontrollerDto(zutrittscontroller, zutrittscontrollerDto);

            return zutrittscontrollerDto.getIId();

        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removeZutrittscontroller(ZutrittscontrollerDto zutrittscontrollerDto) throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittscontrollerDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("personalzutrittsklasseDto == null"));
        }
        if (zutrittscontrollerDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittscontroller toRemove = em.find(Zutrittscontroller.class, zutrittscontrollerDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }

    }

    public void updateZutrittscontroller(ZutrittscontrollerDto zutrittscontrollerDto) throws EJBExceptionLP {
        if (zutrittscontrollerDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittscontrollerDto == null"));
        }
        if (zutrittscontrollerDto.getIId() == null || zutrittscontrollerDto.getCBez() == null
                || zutrittscontrollerDto.getCAdresse() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittscontrollerDto.getIId() == null || zutrittscontrollerDto.getCBez() == null || zutrittscontrollerDto.getCAdresse() == null"));
        }

        Integer iId = zutrittscontrollerDto.getIId();
        // try {
        Zutrittscontroller zutrittscontroller = em.find(Zutrittscontroller.class, iId);
        if (zutrittscontroller == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }

        try {
            Query query = em.createNamedQuery("ZutrittscontrollerfindByCNr");
            query.setParameter(1, zutrittscontrollerDto.getCNr());
            Integer iIdVorhanden = ((Zutrittscontroller) query.getSingleResult()).getIId();
            if (iId.equals(iIdVorhanden) == false) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSCONTROLLER.C_NR"));
            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        setZutrittscontrollerFromZutrittscontrollerDto(zutrittscontroller, zutrittscontrollerDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public ZutrittscontrollerDto zutrittscontrollerFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }
        // try {
        Zutrittscontroller zutrittscontroller = em.find(Zutrittscontroller.class, iId);
        if (zutrittscontroller == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittscontrollerDto(zutrittscontroller);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public ZutrittscontrollerDto zutrittscontrollerFindByCNr(String cBez) throws EJBExceptionLP {
        if (cBez == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("cBez == null"));
        }
        try {
            Query query = em.createNamedQuery("ZutrittscontrollerfindByCNr");
            query.setParameter(1, cBez);
            Zutrittscontroller zutrittscontroller = (Zutrittscontroller) query.getSingleResult();
            if (zutrittscontroller == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, "");
            }
            return assembleZutrittscontrollerDto(zutrittscontroller);
        } catch (NoResultException ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex);
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

    }

    private void setZutrittscontrollerFromZutrittscontrollerDto(Zutrittscontroller zutrittscontroller,
            ZutrittscontrollerDto zutrittscontrollerDto) {
        zutrittscontroller.setCBez(zutrittscontrollerDto.getCBez());
        zutrittscontroller.setCNr(zutrittscontrollerDto.getCNr());
        zutrittscontroller.setCAdresse(zutrittscontrollerDto.getCAdresse());
        em.merge(zutrittscontroller);
        em.flush();
    }

    private ZutrittscontrollerDto assembleZutrittscontrollerDto(Zutrittscontroller zutrittscontroller) {
        return ZutrittscontrollerDtoAssembler.createDto(zutrittscontroller);
    }

    private ZutrittscontrollerDto[] assembleZutrittscontrollerDtos(Collection<?> zutrittscontrollers) {
        List<ZutrittscontrollerDto> list = new ArrayList<ZutrittscontrollerDto>();
        if (zutrittscontrollers != null) {
            Iterator<?> iterator = zutrittscontrollers.iterator();
            while (iterator.hasNext()) {
                Zutrittscontroller zutrittscontroller = (Zutrittscontroller) iterator.next();
                list.add(assembleZutrittscontrollerDto(zutrittscontroller));
            }
        }
        ZutrittscontrollerDto[] returnArray = new ZutrittscontrollerDto[list.size()];
        return (ZutrittscontrollerDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittsklasse(ZutrittsklasseDto zutrittsklasseDto) throws EJBExceptionLP {
        if (zutrittsklasseDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittsklasseDto == null"));
        }
        if (zutrittsklasseDto.getCNr() == null || zutrittsklasseDto.getMandantCNr() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsklasseDto.getCNr() == null || zutrittsklasseDto.getMandantCNr() == null"));
        }
        if (zutrittsklasseDto.getCNr().equals(ZutrittscontrollerFac.ZUTRITTSKLASSE_ONLINECHECK)) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                    new Exception("Zutrittsklasse 'ONL' darf nicht agelegt werden"));

        }
        try {
            Query query = em.createNamedQuery("ZutrittsklassefindByCNr");
            query.setParameter(1, zutrittsklasseDto.getCNr());
            Zutrittsklasse doppelt = (Zutrittsklasse) query.getSingleResult();
            if (doppelt != null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSKLASSE.C_NR"));

            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTSKLASSE);
        zutrittsklasseDto.setIId(pk);

        try {
            Zutrittsklasse zutrittsklasse = new Zutrittsklasse(zutrittsklasseDto.getIId(),
                    zutrittsklasseDto.getCNr(), zutrittsklasseDto.getMandantCNr());
            em.persist(zutrittsklasse);
            em.flush();
            setZutrittsklasseFromZutrittsklasseDto(zutrittsklasse, zutrittsklasseDto);
            return zutrittsklasseDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removeZutrittsklasse(ZutrittsklasseDto zutrittsklasseDto) throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittsklasseDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittsklasseDto == null"));
        }
        if (zutrittsklasseDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittsklasse toRemove = em.find(Zutrittsklasse.class, zutrittsklasseDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updateZutrittsklasse(ZutrittsklasseDto zutrittsklasseDto) throws EJBExceptionLP {
        if (zutrittsklasseDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittsklasseDto == null"));
        }
        if (zutrittsklasseDto.getIId() == null || zutrittsklasseDto.getCNr() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL,
                    new Exception("zutrittsklasseDto.getIId() == null || zutrittsklasseDto.getCNr() == null"));
        }
        if (zutrittsklasseDto.getCNr().equals(ZutrittscontrollerFac.ZUTRITTSKLASSE_ONLINECHECK)) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                    new Exception("Zutrittsklasse 'ONL' darf nicht agelegt werden"));

        }

        Integer iId = zutrittsklasseDto.getIId();
        // try {
        Zutrittsklasse zutrittsklasse = em.find(Zutrittsklasse.class, iId);
        if (zutrittsklasse == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }

        try {
            Query query = em.createNamedQuery("ZutrittsklassefindByCNr");
            query.setParameter(1, zutrittsklasseDto.getCNr());
            Integer iIdVorhanden = ((Zutrittsklasse) query.getSingleResult()).getIId();
            if (iId.equals(iIdVorhanden) == false) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSKLASSE.C_NR"));
            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        setZutrittsklasseFromZutrittsklasseDto(zutrittsklasse, zutrittsklasseDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public ZutrittsklasseDto zutrittsklasseFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }
        // try {
        Zutrittsklasse zutrittsklasse = em.find(Zutrittsklasse.class, iId);
        if (zutrittsklasse == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittsklasseDto(zutrittsklasse);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public ZutrittsklasseDto zutrittsklasseFindByCNr(String cNr) throws EJBExceptionLP {
        if (cNr == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("cNr == null"));
        }
        try {
            Query query = em.createNamedQuery("ZutrittsklassefindByCNr");
            query.setParameter(1, cNr);
            Zutrittsklasse zutrittsklasse = (Zutrittsklasse) query.getSingleResult();
            if (zutrittsklasse == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, "");
            }
            return assembleZutrittsklasseDto(zutrittsklasse);
        } catch (NoResultException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, e);
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }
    }

    private void setZutrittsklasseFromZutrittsklasseDto(Zutrittsklasse zutrittsklasse,
            ZutrittsklasseDto zutrittsklasseDto) {
        zutrittsklasse.setCNr(zutrittsklasseDto.getCNr());
        zutrittsklasse.setCBez(zutrittsklasseDto.getCBez());
        zutrittsklasse.setMandantCNr(zutrittsklasseDto.getMandantCNr());
        em.merge(zutrittsklasse);
        em.flush();
    }

    private ZutrittsklasseDto assembleZutrittsklasseDto(Zutrittsklasse zutrittsklasse) {
        return ZutrittsklasseDtoAssembler.createDto(zutrittsklasse);
    }

    private ZutrittsklasseDto[] assembleZutrittsklasseDtos(Collection<?> zutrittsklasses) {
        List<ZutrittsklasseDto> list = new ArrayList<ZutrittsklasseDto>();
        if (zutrittsklasses != null) {
            Iterator<?> iterator = zutrittsklasses.iterator();
            while (iterator.hasNext()) {
                Zutrittsklasse zutrittsklasse = (Zutrittsklasse) iterator.next();
                list.add(assembleZutrittsklasseDto(zutrittsklasse));
            }
        }
        ZutrittsklasseDto[] returnArray = new ZutrittsklasseDto[list.size()];
        return (ZutrittsklasseDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittsmodell(ZutrittsmodellDto zutrittsmodellDto) throws EJBExceptionLP {
        if (zutrittsmodellDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittsmodellDto == null"));
        }
        if (zutrittsmodellDto.getCNr() == null || zutrittsmodellDto.getMandantCNr() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsmodellDto.getCNr() == null || zutrittsmodellDto.getMandantCNr() == null"));
        }
        try {
            Query query = em.createNamedQuery("ZutrittsmodellfindByCNr");
            query.setParameter(1, zutrittsmodellDto.getCNr());
            Zutrittsmodell doppelt = (Zutrittsmodell) query.getSingleResult();
            if (doppelt != null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSMODELL.UK"));

            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTSMODELL);
        zutrittsmodellDto.setIId(pk);
        try {
            Zutrittsmodell zutrittsmodell = new Zutrittsmodell(zutrittsmodellDto.getIId(),
                    zutrittsmodellDto.getCNr(), zutrittsmodellDto.getMandantCNr());
            em.persist(zutrittsmodell);
            em.flush();
            setZutrittsmodellFromZutrittsmodellDto(zutrittsmodell, zutrittsmodellDto);
            return zutrittsmodellDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removeZutrittsmodell(ZutrittsmodellDto zutrittsmodellDto) throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittsmodellDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittsmodellDto == null"));
        }
        if (zutrittsmodellDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittsmodell toRemove = em.find(Zutrittsmodell.class, zutrittsmodellDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updateZutrittsmodell(ZutrittsmodellDto zutrittsmodellDto) throws EJBExceptionLP {
        if (zutrittsmodellDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittsmodellDto == null"));
        }
        if (zutrittsmodellDto.getIId() == null || zutrittsmodellDto.getCNr() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL,
                    new Exception("zutrittsmodellDto.getIId() == null || zutrittsmodellDto.getCNr() == null"));
        }
        if (zutrittsmodellDto.getMandantCNr() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL,
                    new Exception("zutrittsmodellDto.getMandantCNr() == null"));
        }

        Integer iId = zutrittsmodellDto.getIId();
        // try {
        Zutrittsmodell zutrittsmodell = em.find(Zutrittsmodell.class, iId);
        if (zutrittsmodell == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        setZutrittsmodellFromZutrittsmodellDto(zutrittsmodell, zutrittsmodellDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public ZutrittsmodellDto zutrittsmodellFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }
        // try {
        Zutrittsmodell zutrittsmodell = em.find(Zutrittsmodell.class, iId);
        if (zutrittsmodell == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittsmodellDto(zutrittsmodell);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    private void setZutrittsmodellFromZutrittsmodellDto(Zutrittsmodell zutrittsmodell,
            ZutrittsmodellDto zutrittsmodellDto) {
        zutrittsmodell.setCNr(zutrittsmodellDto.getCNr());
        zutrittsmodell.setMandantCNr(zutrittsmodellDto.getMandantCNr());
        zutrittsmodell.setXBem(zutrittsmodellDto.getXBem());
        em.merge(zutrittsmodell);
        em.flush();
    }

    private ZutrittsmodellDto assembleZutrittsmodellDto(Zutrittsmodell zutrittsmodell) {
        return ZutrittsmodellDtoAssembler.createDto(zutrittsmodell);
    }

    private ZutrittsmodellDto[] assembleZutrittsmodellDtos(Collection<?> zutrittsmodells) {
        List<ZutrittsmodellDto> list = new ArrayList<ZutrittsmodellDto>();
        if (zutrittsmodells != null) {
            Iterator<?> iterator = zutrittsmodells.iterator();
            while (iterator.hasNext()) {
                Zutrittsmodell zutrittsmodell = (Zutrittsmodell) iterator.next();
                list.add(assembleZutrittsmodellDto(zutrittsmodell));
            }
        }
        ZutrittsmodellDto[] returnArray = new ZutrittsmodellDto[list.size()];
        return (ZutrittsmodellDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittsobjekt(ZutrittsobjektDto zutrittsobjektDto) throws EJBExceptionLP {
        if (zutrittsobjektDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittsobjektDto == null"));
        }
        if (zutrittsobjektDto.getCNr() == null || zutrittsobjektDto.getZutrittscontrollerIId() == null
                || zutrittsobjektDto.getCRelais() == null || zutrittsobjektDto.getZutrittsleserCNr() == null
                || zutrittsobjektDto.getFOeffnungszeit() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsobjektDto.getCNr() == null || zutrittsobjektDto.getZutrittscontrollerIId() == null || zutrittsobjektDto.getCTyp() == null || zutrittsobjektDto.getCRelais() == null || zutrittsobjektDto.getFOeffnungszeit() == null"));
        }
        try {
            Query query = em.createNamedQuery("ZutrittsobjektfindByCNr");
            query.setParameter(1, zutrittsobjektDto.getCNr());
            Zutrittsobjekt doppelt = (Zutrittsobjekt) query.getSingleResult();
            if (doppelt == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSOBJEKT.C_NR"));

            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTSOBJEKT);
        zutrittsobjektDto.setIId(pk);

        try {
            Zutrittsobjekt zutrittsobjekt = new Zutrittsobjekt(zutrittsobjektDto.getIId(),
                    zutrittsobjektDto.getCNr(), zutrittsobjektDto.getCAdresse(),
                    zutrittsobjektDto.getZutrittscontrollerIId(), zutrittsobjektDto.getCRelais(),
                    zutrittsobjektDto.getFOeffnungszeit(), zutrittsobjektDto.getZutrittsleserCNr());
            em.persist(zutrittsobjekt);
            em.flush();
            setZutrittsobjektFromZutrittsobjektDto(zutrittsobjekt, zutrittsobjektDto);
            return zutrittsobjektDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removeZutrittsobjekt(ZutrittsobjektDto zutrittsobjektDto) throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittsobjektDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittsobjektDto == null"));
        }
        if (zutrittsobjektDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittsobjekt toRemove = em.find(Zutrittsobjekt.class, zutrittsobjektDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updateZutrittsobjekt(ZutrittsobjektDto zutrittsobjektDto) throws EJBExceptionLP {
        if (zutrittsobjektDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittsobjektDto == null"));
        }
        if (zutrittsobjektDto.getIId() == null || zutrittsobjektDto.getCNr() == null
                || zutrittsobjektDto.getZutrittscontrollerIId() == null || zutrittsobjektDto.getCRelais() == null
                || zutrittsobjektDto.getFOeffnungszeit() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsobjektDto.getIId() == null || zutrittsobjektDto.getCNr() == null || zutrittsobjektDto.getZutrittscontrollerIId() == null || zutrittsobjektDto.getCAnschluss() == null || zutrittsobjektDto.getFOeffnungszeit() == null"));
        }

        Integer iId = zutrittsobjektDto.getIId();
        // try {
        Zutrittsobjekt zutrittsobjekt = em.find(Zutrittsobjekt.class, iId);
        if (zutrittsobjekt == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }

        try {
            Query query = em.createNamedQuery("ZutrittsobjektfindByCNr");
            query.setParameter(1, zutrittsobjektDto.getCNr());
            Integer iIdVorhanden = ((Zutrittsobjekt) query.getSingleResult()).getIId();
            if (iId.equals(iIdVorhanden) == false) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSOBJEKT.CNR"));
            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        setZutrittsobjektFromZutrittsobjektDto(zutrittsobjekt, zutrittsobjektDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public ZutrittsobjektDto zutrittsobjektFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittsobjekt zutrittsobjekt = em.find(Zutrittsobjekt.class, iId);
        if (zutrittsobjekt == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittsobjektDto(zutrittsobjekt);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public ZutrittsobjektDto[] zutrittsobjektFindByZutrittscontrollerIId(Integer zutrittscontrollerIId)
            throws EJBExceptionLP {
        if (zutrittscontrollerIId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL,
                    new Exception("zutrittscontrollerIId == null"));
        }

        // try {
        Query query = em.createNamedQuery("ZutrittsobjektfindByZutrittscontrollerIId");
        query.setParameter(1, zutrittscontrollerIId);
        Collection<?> cl = query.getResultList();
        // if (cl.isEmpty()) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND,
        // null);
        // }
        return assembleZutrittsobjektDtos(cl);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND,
        // e);
        // }
    }

    public ZutrittsobjektDto zutrittsobjektFindByCNr(String cNr) throws EJBExceptionLP {
        if (cNr == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("cNr == null"));
        }

        try {
            Query query = em.createNamedQuery("ZutrittsobjektfindByCNr");
            query.setParameter(1, cNr);
            Zutrittsobjekt zutrittsobjekt = (Zutrittsobjekt) query.getSingleResult();
            if (zutrittsobjekt == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, "");
            }
            return assembleZutrittsobjektDto(zutrittsobjekt);
        } catch (NoResultException ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex);
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }
    }

    private void setZutrittsobjektFromZutrittsobjektDto(Zutrittsobjekt zutrittsobjekt,
            ZutrittsobjektDto zutrittsobjektDto) {
        zutrittsobjekt.setCNr(zutrittsobjektDto.getCNr());
        zutrittsobjekt.setCBez(zutrittsobjektDto.getCBez());
        zutrittsobjekt.setZutrittsleserCNr(zutrittsobjektDto.getZutrittsleserCNr());
        zutrittsobjekt.setCAdresse(zutrittsobjektDto.getCAdresse());
        zutrittsobjekt.setZutrittscontrollerIId(zutrittsobjektDto.getZutrittscontrollerIId());
        zutrittsobjekt.setCRelais(zutrittsobjektDto.getCRelais());
        zutrittsobjekt.setFOeffnungszeit(zutrittsobjektDto.getFOeffnungszeit());
        zutrittsobjekt.setMandantCNr(zutrittsobjektDto.getMandantCNr());
        em.merge(zutrittsobjekt);
        em.flush();
    }

    private ZutrittsobjektDto assembleZutrittsobjektDto(Zutrittsobjekt zutrittsobjekt) {
        return ZutrittsobjektDtoAssembler.createDto(zutrittsobjekt);
    }

    private ZutrittsobjektDto[] assembleZutrittsobjektDtos(Collection<?> zutrittsobjekts) {
        List<ZutrittsobjektDto> list = new ArrayList<ZutrittsobjektDto>();
        if (zutrittsobjekts != null) {
            Iterator<?> iterator = zutrittsobjekts.iterator();
            while (iterator.hasNext()) {
                Zutrittsobjekt zutrittsobjekt = (Zutrittsobjekt) iterator.next();
                list.add(assembleZutrittsobjektDto(zutrittsobjekt));
            }
        }
        ZutrittsobjektDto[] returnArray = new ZutrittsobjektDto[list.size()];
        return (ZutrittsobjektDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittsmodelltagdetail(ZutrittsmodelltagdetailDto zutrittsmodelltagdetailDto)
            throws EJBExceptionLP {
        if (zutrittsmodelltagdetailDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsmodelltagdetailDto == null"));
        }
        if (zutrittsmodelltagdetailDto.getZutrittsmodelltagIId() == null
                || zutrittsmodelltagdetailDto.getUOffenvon() == null
                || zutrittsmodelltagdetailDto.getBRestdestages() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsmodelltagdetailDto.getZutrittsmodelltagIId() == null || zutrittsmodelltagdetailDto.getUOffenvon() == null || zutrittsmodelltagdetailDto.getBRestdestages() == null"));
        }

        if (zutrittsmodelltagdetailDto.getUOffenbis() == null
                && Helper.short2Boolean(zutrittsmodelltagdetailDto.getBRestdestages()) == false) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsmodelltagdetailDto.getUOffenbis() == null && Helper.short2Boolean(zutrittsmodelltagdetailDto.getBRestdestages())==false"));
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTSMODELLTAGDETAIL);
        zutrittsmodelltagdetailDto.setIId(pk);

        try {
            Zutrittsmodelltagdetail zutrittsmodelltagdetail = new Zutrittsmodelltagdetail(
                    zutrittsmodelltagdetailDto.getIId(), zutrittsmodelltagdetailDto.getZutrittsmodelltagIId(),
                    zutrittsmodelltagdetailDto.getZutrittsoeffnungsartCNr(),
                    zutrittsmodelltagdetailDto.getBRestdestages(), zutrittsmodelltagdetailDto.getUOffenvon());
            em.persist(zutrittsmodelltagdetail);
            em.flush();
            setZutrittsmodelltagdetailFromZutrittsmodelltagdetailDto(zutrittsmodelltagdetail,
                    zutrittsmodelltagdetailDto);
            return zutrittsmodelltagdetailDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public Map getAllZutrittsoeffnungsarten() throws EJBExceptionLP {

        myLogger.entry();
        TreeMap<Object, String> tmArten = new TreeMap<Object, String>();
        // try {
        Query query = em.createNamedQuery("ZutrittsoeffnungsartfindAll");
        Collection<?> clArten = query.getResultList();
        // if (clArten.isEmpty()) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEI_FINDBYPRIMARYKEY, null);
        // }
        Iterator<?> itArten = clArten.iterator();
        while (itArten.hasNext()) {
            Zutrittsoeffnungsart artikelartTemp = (Zutrittsoeffnungsart) itArten.next();
            Object key = artikelartTemp.getCNr();
            String value = artikelartTemp.getCNr().trim();
            if (artikelartTemp.getCBez() != null) {
                value += " " + artikelartTemp.getCBez();
            }
            tmArten.put(key, value);
        }
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEI_FINDBYPRIMARYKEY, ex);
        // }

        return tmArten;
    }

    public Map getAllZutrittsleser() throws EJBExceptionLP {

        myLogger.entry();
        TreeMap<Object, String> tmArten = new TreeMap<Object, String>();
        // try {
        Query query = em.createNamedQuery("ZutrittsleserfindAll");
        Collection<?> clArten = query.getResultList();
        // if (clArten.isEmpty()) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEI_FINDBYPRIMARYKEY, null);
        // }

        Iterator<?> itArten = clArten.iterator();
        while (itArten.hasNext()) {
            Zutrittsleser artikelartTemp = (Zutrittsleser) itArten.next();
            Object key = artikelartTemp.getCNr();
            String value = artikelartTemp.getCNr().trim();
            if (artikelartTemp.getCBez() != null) {
                value += " " + artikelartTemp.getCBez();
            }
            tmArten.put(key, value);
        }
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEI_FINDBYPRIMARYKEY, ex);
        // }

        return tmArten;
    }

    public void removeZutrittsmodelltagdetail(ZutrittsmodelltagdetailDto zutrittsmodelltagdetailDto)
            throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittsmodelltagdetailDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsmodelltagdetailDto == null"));
        }
        if (zutrittsmodelltagdetailDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittsmodelltagdetail toRemove = em.find(Zutrittsmodelltagdetail.class,
                zutrittsmodelltagdetailDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updateZutrittsmodelltagdetail(ZutrittsmodelltagdetailDto zutrittsmodelltagdetailDto)
            throws EJBExceptionLP {
        if (zutrittsmodelltagdetailDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsmodelltagdetailDto == null"));
        }
        if (zutrittsmodelltagdetailDto.getIId() == null
                || zutrittsmodelltagdetailDto.getZutrittsmodelltagIId() == null
                || zutrittsmodelltagdetailDto.getUOffenvon() == null
                || zutrittsmodelltagdetailDto.getBRestdestages() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsmodelltagdetailDto.getIId() == null || zutrittsmodelltagdetailDto.getZutrittsmodelltagIId() == null || zutrittsmodelltagdetailDto.getUOffenvon() == null || zutrittsmodelltagdetailDto.getBRestdestages() == null"));
        }
        if (zutrittsmodelltagdetailDto.getUOffenbis() == null
                && Helper.short2Boolean(zutrittsmodelltagdetailDto.getBRestdestages()) == false) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsmodelltagdetailDto.getUOffenbis() == null && Helper.short2Boolean(zutrittsmodelltagdetailDto.getBRestdestages())==false"));
        }

        Integer iId = zutrittsmodelltagdetailDto.getIId();
        // try {
        Zutrittsmodelltagdetail zutrittsmodelltagdetail = em.find(Zutrittsmodelltagdetail.class, iId);
        if (zutrittsmodelltagdetail == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        setZutrittsmodelltagdetailFromZutrittsmodelltagdetailDto(zutrittsmodelltagdetail,
                zutrittsmodelltagdetailDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public ZutrittsmodelltagdetailDto zutrittsmodelltagdetailFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        // try {
        Zutrittsmodelltagdetail zutrittsmodelltagdetail = em.find(Zutrittsmodelltagdetail.class, iId);
        if (zutrittsmodelltagdetail == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittsmodelltagdetailDto(zutrittsmodelltagdetail);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    private void setZutrittsmodelltagdetailFromZutrittsmodelltagdetailDto(
            Zutrittsmodelltagdetail zutrittsmodelltagdetail,
            ZutrittsmodelltagdetailDto zutrittsmodelltagdetailDto) {
        zutrittsmodelltagdetail.setZutrittsmodelltagIId(zutrittsmodelltagdetailDto.getZutrittsmodelltagIId());
        zutrittsmodelltagdetail.setUOffenvon(zutrittsmodelltagdetailDto.getUOffenvon());
        zutrittsmodelltagdetail.setUOffenbis(zutrittsmodelltagdetailDto.getUOffenbis());
        zutrittsmodelltagdetail.setBRestdestages(zutrittsmodelltagdetailDto.getBRestdestages());
        zutrittsmodelltagdetail.setZutrittsoeffnungsartCNr(zutrittsmodelltagdetailDto.getZutrittsoeffnungsartCNr());
        em.merge(zutrittsmodelltagdetail);
        em.flush();
    }

    private ZutrittsmodelltagdetailDto assembleZutrittsmodelltagdetailDto(
            Zutrittsmodelltagdetail zutrittsmodelltagdetail) {
        return ZutrittsmodelltagdetailDtoAssembler.createDto(zutrittsmodelltagdetail);
    }

    private ZutrittsmodelltagdetailDto[] assembleZutrittsmodelltagdetailDtos(
            Collection<?> zutrittsmodelltagdetails) {
        List<ZutrittsmodelltagdetailDto> list = new ArrayList<ZutrittsmodelltagdetailDto>();
        if (zutrittsmodelltagdetails != null) {
            Iterator<?> iterator = zutrittsmodelltagdetails.iterator();
            while (iterator.hasNext()) {
                Zutrittsmodelltagdetail zutrittsmodelltagdetail = (Zutrittsmodelltagdetail) iterator.next();
                list.add(assembleZutrittsmodelltagdetailDto(zutrittsmodelltagdetail));
            }
        }
        ZutrittsmodelltagdetailDto[] returnArray = new ZutrittsmodelltagdetailDto[list.size()];
        return (ZutrittsmodelltagdetailDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittsklasseobjekt(ZutrittsklasseobjektDto zutrittsklasseobjektDto,
            TheClientDto theClientDto) throws EJBExceptionLP {
        if (zutrittsklasseobjektDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsklasseobjektDto == null"));
        }
        if (zutrittsklasseobjektDto.getZutrittsklasseIId() == null
                || zutrittsklasseobjektDto.getZutrittsmodellIId() == null
                || zutrittsklasseobjektDto.getZutrittsobjektIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsklasseobjektDto.getTGueltigab() == null || zutrittsklasseobjektDto.getZutrittsklasseIId() == null || zutrittsklasseobjektDto.getZutrittsmodellIId() == null || zutrittsklasseobjektDto.getZutrittsobjektIId() == null"));
        }
        try {
            Query query = em.createNamedQuery("ZutrittsklasseobjektfindByZutrittsobjektIIdZutrittsklasseIId");
            query.setParameter(1, zutrittsklasseobjektDto.getZutrittsobjektIId());
            query.setParameter(2, zutrittsklasseobjektDto.getZutrittsklasseIId());
            Zutrittsklasseobjekt doppelt = (Zutrittsklasseobjekt) query.getSingleResult();
            if (doppelt != null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSKLASSEOBJEKT.UK"));

            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTSKLASSEOBJEKT);
        zutrittsklasseobjektDto.setIId(pk);

        try {
            Zutrittsklasseobjekt zutrittsklasseobjekt = new Zutrittsklasseobjekt(zutrittsklasseobjektDto.getIId(),
                    zutrittsklasseobjektDto.getZutrittsmodellIId(), zutrittsklasseobjektDto.getZutrittsklasseIId(),
                    zutrittsklasseobjektDto.getZutrittsobjektIId());
            em.persist(zutrittsklasseobjekt);
            em.flush();
            setZutrittsklasseobjektFromZutrittsklasseobjektDto(zutrittsklasseobjekt, zutrittsklasseobjektDto);
            return zutrittsklasseobjektDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removeZutrittsklasseobjekt(ZutrittsklasseobjektDto zutrittsklasseobjektDto) throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittsklasseobjektDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsklasseobjektDto == null"));
        }
        if (zutrittsklasseobjektDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittsklasseobjekt toRemove = em.find(Zutrittsklasseobjekt.class, zutrittsklasseobjektDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updateZutrittsklasseobjekt(ZutrittsklasseobjektDto zutrittsklasseobjektDto,
            TheClientDto theClientDto) throws EJBExceptionLP {
        if (zutrittsklasseobjektDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsklasseobjektDto == null"));
        }
        if (zutrittsklasseobjektDto.getIId() == null || zutrittsklasseobjektDto.getZutrittsklasseIId() == null
                || zutrittsklasseobjektDto.getZutrittsmodellIId() == null
                || zutrittsklasseobjektDto.getZutrittsobjektIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsklasseobjektDto.getIId() == null || zutrittsklasseobjektDto.getZutrittsklasseIId() == null || zutrittsklasseobjektDto.getZutrittsmodellIId() == null || zutrittsklasseobjektDto.getZutrittsobjektIId() == null"));
        }

        Integer iId = zutrittsklasseobjektDto.getIId();

        // try {
        Query query = em.createNamedQuery("ZutrittsklasseobjektfindByZutrittsobjektIIdZutrittsklasseIId");
        query.setParameter(1, zutrittsklasseobjektDto.getZutrittsobjektIId());
        query.setParameter(2, zutrittsklasseobjektDto.getZutrittsklasseIId());
        Integer iIdVorhanden = ((Zutrittsklasseobjekt) query.getSingleResult()).getIId();
        if (iId.equals(iIdVorhanden) == false) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                    new Exception("PERS_ZUTRITTSKLASSEOBJEKT.UK"));
        }
        // }
        // catch (FinderException ex) {
        // nothing here
        // }

        // try {
        Zutrittsklasseobjekt zutrittsklasseobjekt = em.find(Zutrittsklasseobjekt.class, iId);
        if (zutrittsklasseobjekt == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        setZutrittsklasseobjektFromZutrittsklasseobjektDto(zutrittsklasseobjekt, zutrittsklasseobjektDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    @SuppressWarnings("static-access")
    public String getZutrittsdatenFuerEinObjektFuerMecs(Integer zutrittsobjektIId, TheClientDto theClientDto)
            throws EJBExceptionLP {

        Timestamp d_datum = new Timestamp(System.currentTimeMillis());

        d_datum = Helper.cutTimestamp(d_datum);
        Integer tagesartIId = null;

        Calendar c = Calendar.getInstance();
        c.setTime(d_datum);
        ArrayList<String> daten = new ArrayList<String>();
        int iTageVorraus = 1;
        try {
            ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_PERSONAL, ParameterFac.PARAMETER_ZUTRITT_DATEN_VORLADEN);
            iTageVorraus = (Integer) parameter.getCWertAsObject();
        } catch (RemoteException ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
        }

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

            String sDatum = c.get(c.YEAR) + "";
            int iMonat = c.get(c.MONTH) + 1;
            int iTag = c.get(c.DATE);
            sDatum = sDatum + Helper.fitString2LengthAlignRight(iMonat + "", 2, '0')
                    + Helper.fitString2LengthAlignRight(iTag + "", 2, '0');

            // Besucherausweise- Onlinecheck
            StringBuffer onlinecheck = new StringBuffer();
            onlinecheck.append("10"); // readerid
            onlinecheck.append(Helper.fitString2Length(ZutrittscontrollerFac.ZUTRITTSKLASSE_ONLINECHECK, 3, ' ')); // readerid
            onlinecheck.append(sDatum); // datum
            onlinecheck.append("0000"); // vonzeit
            onlinecheck.append("O"); // status
            onlinecheck.append("\r\n");
            daten.add(new String(onlinecheck));

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

                tagesartIId = getZeiterfassungFac()
                        .tagesartFindByCNr(Helper.holeTagbezeichnungLang(c.get(c.DAY_OF_WEEK)), theClientDto)
                        .getIId();

                ZutrittsobjektDto zutrittsobjektDto = zutrittsobjektFindByPrimaryKey(zutrittsobjektIId);
                String mandantderTuere = zutrittsobjektDto.getMandantCNr();
                if (mandantderTuere == null) {
                    mandantderTuere = getMandantFac()
                            .mandantFindByPrimaryKey(theClientDto.getMandant(), theClientDto).getAnwenderDto()
                            .getMandantCNrHauptmandant();
                }

                BetriebskalenderDto dto = getPersonalFac().betriebskalenderFindByMandantCNrDDatum(d_datum,
                        mandantderTuere, theClientDto);
                if (dto != null) {
                    if (dto.getReligionIId() == null) {
                        if (dto.getTagesartIId().equals(tagesartIId_Feiertag)
                                || dto.getTagesartIId().equals(tagesartIId_Halbtag)) {
                            tagesartIId = dto.getTagesartIId();
                        } else {
                            tagesartIId = dto.getTagesartIId();
                        }
                    }
                }
            } catch (RemoteException ex1) {
                throwEJBExceptionLPRespectOld(ex1);
            }

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

            org.hibernate.Criteria crit = session.createCriteria(FLRZutrittsklasseobjekt.class).add(Restrictions
                    .eq(ZutrittscontrollerFac.FLR_ZUTRITTSKLASSEOBJEKT_ZUTRITTSOBJEKT_I_ID, zutrittsobjektIId));

            crit.addOrder(Order.asc(ZutrittscontrollerFac.FLR_ZUTRITTSKLASSEOBJEKT_ZUTRITTSKLASSE_I_ID));

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

            Iterator<?> resultListIterator = resultList.iterator();
            while (resultListIterator.hasNext()) {
                FLRZutrittsklasseobjekt flrzutrittsklasseobjekt = (FLRZutrittsklasseobjekt) resultListIterator
                        .next();

                try {
                    Query query = em.createNamedQuery("ZutrittsmodelltagfindByZutrittsmodellIIdTagesartIId");
                    query.setParameter(1, flrzutrittsklasseobjekt.getZutrittsmodell_i_id());
                    query.setParameter(2, tagesartIId);
                    Zutrittsmodelltag zutrittsmodelltag = (Zutrittsmodelltag) query.getSingleResult();

                    Integer zutrittsmodeltagIId = assembleZutrittsmodelltagDto(zutrittsmodelltag).getIId();

                    query = em.createNamedQuery("ZutrittsmodelltagdetailfindByZutrittsmodelltagIId");
                    query.setParameter(1, zutrittsmodeltagIId);
                    ZutrittsmodelltagdetailDto[] tagdetaildtos = assembleZutrittsmodelltagdetailDtos(
                            query.getResultList());

                    for (int detail = 0; detail < tagdetaildtos.length; detail++) {

                        ZutrittsmodelltagdetailDto zutrittsmodelltagdetailDto = tagdetaildtos[detail];

                        String von = zutrittsmodelltagdetailDto.getUOffenvon().toString();
                        von = von.substring(0, 2) + von.substring(3, 5);

                        StringBuffer string = new StringBuffer();

                        string.append("10"); // readerid
                        string.append(Helper.fitString2Length(
                                flrzutrittsklasseobjekt.getFlrzutrittsklasse().getC_nr(), 3, ' ')); // readerid
                        string.append(sDatum); // datum
                        string.append(von); // vonzeit
                        string.append(zutrittsmodelltagdetailDto.getZutrittsoeffnungsartCNr().trim()); // status
                        string.append("\r\n");
                        daten.add(new String(string));

                        if (Helper.short2Boolean(zutrittsmodelltagdetailDto.getBRestdestages()) == false) {
                            string = new StringBuffer();
                            String bis = zutrittsmodelltagdetailDto.getUOffenbis().toString();
                            bis = bis.substring(0, 2) + bis.substring(3, 5);
                            string.append("10"); // readerid
                            string.append(Helper.fitString2Length(
                                    flrzutrittsklasseobjekt.getFlrzutrittsklasse().getC_nr(), 3, ' ')); // readerid
                            string.append(sDatum); // datum
                            string.append(bis); // vonzeit
                            string.append("Z"); // status
                            string.append("\r\n");
                            daten.add(new String(string));

                        }
                    }

                } catch (NoResultException ex) {
                    // nothing here
                }

            }
            session.close();

            c.set(c.DATE, c.get(c.DATE) + 1);
            d_datum = new java.sql.Timestamp(c.getTimeInMillis());

        }

        String datenGesamt = "";

        // sortieren

        for (int i = daten.size() - 1; i > 0; --i) {
            for (int j = 0; j < i; ++j) {
                if (((String) daten.get(j)).compareTo((String) daten.get(j + 1)) > 0) {
                    String lagerbewegungDtoTemp = (String) daten.get(j);
                    daten.set(j, daten.get(j + 1));
                    daten.set(j + 1, lagerbewegungDtoTemp);
                }
            }
        }

        for (int i = 0; i < daten.size(); i++) {
            datenGesamt += daten.get(i);
        }

        return new String(datenGesamt);
    }

    @SuppressWarnings("static-access")
    public String getZutrittsEventsFuerMecs(Integer zutrittsobjektIId, TheClientDto theClientDto)
            throws EJBExceptionLP {

        String relais = "";
        ZutrittsobjektDto zutrittsobjektDto = zutrittsobjektFindByPrimaryKey(zutrittsobjektIId);
        if (zutrittsobjektDto.getCRelais() != null) {
            relais = zutrittsobjektDto.getCRelais();
        }

        Timestamp d_datum = new Timestamp(System.currentTimeMillis());

        d_datum = Helper.cutTimestamp(d_datum);
        Integer tagesartIId = null;

        Calendar c = Calendar.getInstance();
        c.setTime(d_datum);
        StringBuffer string = new StringBuffer();

        // Damit bei Pin-Eingabe immer ein Online-Check durchgefuehrt wird:
        string.append("        ");
        string.append(Helper.fitString2Length("read", 20, ' '));
        string.append(Helper.fitString2Length("<pin>*</pin>", 200, ' '));
        string.append(Helper.fitString2Length("<door relais=\"0" + relais + "\" open=\"online\"/>", 100, ' '));
        string.append(Helper.fitString2Length("PINONLINE", 10, ' '));
        string.append("\r\n");

        int iTageVorraus = 1;
        try {
            ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(),
                    ParameterFac.KATEGORIE_PERSONAL, ParameterFac.PARAMETER_ZUTRITT_DATEN_VORLADEN);
            iTageVorraus = (Integer) parameter.getCWertAsObject();
        } catch (RemoteException ex) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex);
        }

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

            String sDatum = c.get(c.YEAR) + "";
            int iMonat = c.get(c.MONTH) + 1;
            int iTag = c.get(c.DATE);
            sDatum = sDatum + Helper.fitString2LengthAlignRight(iMonat + "", 2, '0')
                    + Helper.fitString2LengthAlignRight(iTag + "", 2, '0');

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

                tagesartIId = getZeiterfassungFac()
                        .tagesartFindByCNr(Helper.holeTagbezeichnungLang(c.get(c.DAY_OF_WEEK)), theClientDto)
                        .getIId();

                String mandantderTuere = zutrittsobjektDto.getMandantCNr();
                if (mandantderTuere == null) {
                    mandantderTuere = getMandantFac()
                            .mandantFindByPrimaryKey(theClientDto.getMandant(), theClientDto).getAnwenderDto()
                            .getMandantCNrHauptmandant();
                }
                BetriebskalenderDto dto = getPersonalFac().betriebskalenderFindByMandantCNrDDatum(d_datum,
                        mandantderTuere, theClientDto);
                if (dto != null) {

                    if (dto.getTagesartIId().equals(tagesartIId_Feiertag)
                            || dto.getTagesartIId().equals(tagesartIId_Halbtag)) {
                        tagesartIId = dto.getTagesartIId();
                    } else {
                        tagesartIId = dto.getTagesartIId();
                    }
                }
            } catch (RemoteException ex1) {
                throwEJBExceptionLPRespectOld(ex1);
            }

            // try {
            Query query = em.createNamedQuery("ZutrittdaueroffenfindByZutrittsobjektIIdTagesartIId");
            query.setParameter(1, zutrittsobjektIId);
            query.setParameter(2, tagesartIId);
            ZutrittdaueroffenDto[] zutrittdaueroffenDtos = assembleZutrittdaueroffenDtos(query.getResultList());
            for (int detail = 0; detail < zutrittdaueroffenDtos.length; detail++) {
                ZutrittdaueroffenDto zutrittsmodelltagdetailDto = zutrittdaueroffenDtos[detail];

                long time = System.currentTimeMillis() % (3600000 * 24);
                // Wenn HEUTE und BIS schon vorbei:
                if (i == 0 && time > zutrittsmodelltagdetailDto.getUOffenbis().getTime()) {
                    // dann auslassen
                } else {
                    String von = zutrittsmodelltagdetailDto.getUOffenvon().toString();
                    von = von.substring(0, 2) + von.substring(3, 5);
                    string.append(sDatum);
                    string.append(Helper.fitString2Length("moment", 20, ' '));
                    string.append(
                            Helper.fitString2Length("<time event=\"" + von + "\" makeup=\"true\"/>", 200, ' '));
                    string.append(Helper.fitString2Length("<door relais=\"0" + relais + "\" open=\"always\"/>", 100,
                            ' '));
                    string.append(Helper.fitString2Length("DAUEROPEN", 10, ' '));
                    string.append("\r\n");

                    String bis = zutrittsmodelltagdetailDto.getUOffenbis().toString();
                    bis = bis.substring(0, 2) + bis.substring(3, 5);

                    string.append(sDatum);
                    string.append(Helper.fitString2Length("moment", 20, ' '));
                    string.append(
                            Helper.fitString2Length("<time event=\"" + bis + "\" makeup=\"true\"/>", 200, ' '));
                    string.append(Helper.fitString2Length("<door relais=\"0" + relais + "\" open=\"closestd\"/>",
                            100, ' '));
                    string.append(Helper.fitString2Length("DAUERCLOSE", 10, ' '));
                    string.append("\r\n");

                }
            }
            // }
            // catch (FinderException ex) {
            //
            // }

            c.set(c.DATE, c.get(c.DATE) + 1);
            d_datum = new java.sql.Timestamp(c.getTimeInMillis());

        }
        return new String(string);

    }

    public ZutrittsklasseobjektDto zutrittsklasseobjektFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }
        // try {
        Zutrittsklasseobjekt zutrittsklasseobjekt = em.find(Zutrittsklasseobjekt.class, iId);
        if (zutrittsklasseobjekt == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittsklasseobjektDto(zutrittsklasseobjekt);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public ZutrittsklasseobjektDto[] zutrittsklasseobjektFindByZutrittsklasseIId(Integer zutrittsklasseIId)
            throws EJBExceptionLP {
        if (zutrittsklasseIId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL,
                    new Exception("zutrittsklasseIId == null"));
        }
        // try {
        Query query = em.createNamedQuery("ZutrittsklasseobjektfindByZutrittsklasseIId");
        query.setParameter(1, zutrittsklasseIId);
        Collection<?> cl = query.getResultList();
        // if (cl.isEmpty()) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND,
        // null);
        // }
        return assembleZutrittsklasseobjektDtos(cl);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND,
        // e);
        // }
    }

    private void setZutrittsklasseobjektFromZutrittsklasseobjektDto(Zutrittsklasseobjekt zutrittsklasseobjekt,
            ZutrittsklasseobjektDto zutrittsklasseobjektDto) {
        zutrittsklasseobjekt.setZutrittsmodellIId(zutrittsklasseobjektDto.getZutrittsmodellIId());
        zutrittsklasseobjekt.setZutrittsklasseIId(zutrittsklasseobjektDto.getZutrittsklasseIId());
        zutrittsklasseobjekt.setZutrittsobjektIId(zutrittsklasseobjektDto.getZutrittsobjektIId());
        em.merge(zutrittsklasseobjekt);
        em.flush();
    }

    private ZutrittsklasseobjektDto assembleZutrittsklasseobjektDto(Zutrittsklasseobjekt zutrittsklasseobjekt) {
        return ZutrittsklasseobjektDtoAssembler.createDto(zutrittsklasseobjekt);
    }

    private ZutrittsklasseobjektDto[] assembleZutrittsklasseobjektDtos(Collection<?> zutrittsklasseobjekts) {
        List<ZutrittsklasseobjektDto> list = new ArrayList<ZutrittsklasseobjektDto>();
        if (zutrittsklasseobjekts != null) {
            Iterator<?> iterator = zutrittsklasseobjekts.iterator();
            while (iterator.hasNext()) {
                Zutrittsklasseobjekt zutrittsklasseobjekt = (Zutrittsklasseobjekt) iterator.next();
                list.add(assembleZutrittsklasseobjektDto(zutrittsklasseobjekt));
            }
        }
        ZutrittsklasseobjektDto[] returnArray = new ZutrittsklasseobjektDto[list.size()];
        return (ZutrittsklasseobjektDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittsmodelltag(ZutrittsmodelltagDto zutrittsmodelltagDto) throws EJBExceptionLP {
        if (zutrittsmodelltagDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsmodelltagDto == null"));
        }
        if (zutrittsmodelltagDto.getTagesartIId() == null || zutrittsmodelltagDto.getZutrittsmodellIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsmodelltagDto.getTagesartIId() == null || zutrittsmodelltagDto.getZutrittsmodellIId() == null"));
        }
        try {
            Query query = em.createNamedQuery("ZutrittsmodelltagfindByZutrittsmodellIIdTagesartIId");
            query.setParameter(1, zutrittsmodelltagDto.getZutrittsmodellIId());
            query.setParameter(2, zutrittsmodelltagDto.getTagesartIId());
            Zutrittsmodelltag doppelt = (Zutrittsmodelltag) query.getSingleResult();
            if (zutrittsmodelltag != null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSMODELLTAG.UK"));

            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTSMODELLTAG);
        zutrittsmodelltagDto.setIId(pk);

        try {
            Zutrittsmodelltag zutrittsmodelltag = new Zutrittsmodelltag(zutrittsmodelltagDto.getIId(),
                    zutrittsmodelltagDto.getZutrittsmodellIId(), zutrittsmodelltagDto.getTagesartIId());
            em.persist(zutrittsmodelltag);
            em.flush();
            setZutrittsmodelltagFromZutrittsmodelltagDto(zutrittsmodelltag, zutrittsmodelltagDto);
            return zutrittsmodelltagDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removeZutrittsmodelltag(ZutrittsmodelltagDto zutrittsmodelltagDto) throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittsmodelltagDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsmodelltagDto == null"));
        }
        if (zutrittsmodelltagDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittsmodelltag toRemove = em.find(Zutrittsmodelltag.class, zutrittsmodelltagDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updateZutrittsmodelltag(ZutrittsmodelltagDto zutrittsmodelltagDto) throws EJBExceptionLP {
        if (zutrittsmodelltagDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsmodelltagDto == null"));
        }
        if (zutrittsmodelltagDto.getIId() == null || zutrittsmodelltagDto.getTagesartIId() == null
                || zutrittsmodelltagDto.getZutrittsmodellIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsmodelltagDto.getIId() == null || zutrittsmodelltagDto.getTagesartIId() == null || zutrittsmodelltagDto.getZutrittsmodellIId() == null"));
        }

        Integer iId = zutrittsmodelltagDto.getIId();
        // try {
        Zutrittsmodelltag zutrittsmodelltag = em.find(Zutrittsmodelltag.class, iId);
        if (zutrittsmodelltag == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        setZutrittsmodelltagFromZutrittsmodelltagDto(zutrittsmodelltag, zutrittsmodelltagDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public ZutrittsmodelltagDto zutrittsmodelltagFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittsmodelltag zutrittsmodelltag = em.find(Zutrittsmodelltag.class, iId);
        if (zutrittsmodelltag == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittsmodelltagDto(zutrittsmodelltag);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    private void setZutrittsmodelltagFromZutrittsmodelltagDto(Zutrittsmodelltag zutrittsmodelltag,
            ZutrittsmodelltagDto zutrittsmodelltagDto) {
        zutrittsmodelltag.setZutrittsmodellIId(zutrittsmodelltagDto.getZutrittsmodellIId());
        zutrittsmodelltag.setTagesartIId(zutrittsmodelltagDto.getTagesartIId());
        zutrittsmodelltag.setXBem(zutrittsmodelltagDto.getXBem());
        em.merge(zutrittsmodelltag);
        em.flush();
    }

    private ZutrittsmodelltagDto assembleZutrittsmodelltagDto(Zutrittsmodelltag zutrittsmodelltag) {
        return ZutrittsmodelltagDtoAssembler.createDto(zutrittsmodelltag);
    }

    private ZutrittsmodelltagDto[] assembleZutrittsmodelltagDtos(Collection<?> zutrittsmodelltags) {
        List<ZutrittsmodelltagDto> list = new ArrayList<ZutrittsmodelltagDto>();
        if (zutrittsmodelltags != null) {
            Iterator<?> iterator = zutrittsmodelltags.iterator();
            while (iterator.hasNext()) {
                Zutrittsmodelltag zutrittsmodelltag = (Zutrittsmodelltag) iterator.next();
                list.add(assembleZutrittsmodelltagDto(zutrittsmodelltag));
            }
        }
        ZutrittsmodelltagDto[] returnArray = new ZutrittsmodelltagDto[list.size()];
        return (ZutrittsmodelltagDto[]) list.toArray(returnArray);
    }

    public Integer createPersonalzutrittsklasse(PersonalzutrittsklasseDto personalzutrittsklasseDto,
            TheClientDto theClientDto) throws EJBExceptionLP {
        if (personalzutrittsklasseDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("personalzutrittsklasseDto == null"));
        }
        if (personalzutrittsklasseDto.getPersonalIId() == null || personalzutrittsklasseDto.getTGueltigab() == null
                || personalzutrittsklasseDto.getZutrittsklasseIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "personalzutrittsklasseDto.getPersonalIId() == null || personalzutrittsklasseDto.getTGueltigab() == null || personalzutrittsklasseDto.getZutrittsklasseIId() == null"));
        }

        personalzutrittsklasseDto.setTGueltigab(Helper.cutTimestamp(personalzutrittsklasseDto.getTGueltigab()));

        try {
            Query query = em.createNamedQuery("PersonalzutrittsklassefindByPersonalIIdZutrittklasseIIdTGueltigab");
            query.setParameter(1, personalzutrittsklasseDto.getPersonalIId());
            query.setParameter(2, personalzutrittsklasseDto.getZutrittsklasseIId());
            query.setParameter(3, personalzutrittsklasseDto.getTGueltigab());
            Personalzutrittsklasse doppelt = (Personalzutrittsklasse) query.getSingleResult();
            if (doppelt != null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_PERSONALZUTRITTSKLASSE.UK"));

            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        pruefeZutrittsobjektverwendung(personalzutrittsklasseDto.getZutrittsklasseIId(), theClientDto);

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_PERSONALZUTRITTSKLASSE);
        personalzutrittsklasseDto.setIId(pk);

        try {
            Personalzutrittsklasse personalzutrittsklasse = new Personalzutrittsklasse(
                    personalzutrittsklasseDto.getIId(), personalzutrittsklasseDto.getPersonalIId(),
                    personalzutrittsklasseDto.getZutrittsklasseIId(), personalzutrittsklasseDto.getTGueltigab());
            em.persist(personalzutrittsklasse);
            em.flush();
            setPersonalzutrittsklasseFromPersonalzutrittsklasseDto(personalzutrittsklasse,
                    personalzutrittsklasseDto);
            return personalzutrittsklasseDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removePersonalzutrittsklasse(PersonalzutrittsklasseDto personalzutrittsklasseDto)
            throws EJBExceptionLP {
        myLogger.entry();
        if (personalzutrittsklasseDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("personalzutrittsklasseDto == null"));
        }
        if (personalzutrittsklasseDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }
        // try {
        Personalzutrittsklasse toRemove = em.find(Personalzutrittsklasse.class, personalzutrittsklasseDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }

    }

    public void updatePersonalzutrittsklasse(PersonalzutrittsklasseDto personalzutrittsklasseDto,
            TheClientDto theClientDto) throws EJBExceptionLP {
        if (personalzutrittsklasseDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("personalzutrittsklasseDto == null"));
        }
        if (personalzutrittsklasseDto.getIId() == null || personalzutrittsklasseDto.getPersonalIId() == null
                || personalzutrittsklasseDto.getTGueltigab() == null
                || personalzutrittsklasseDto.getZutrittsklasseIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "personalzutrittsklasseDto.getIId() == null || personalzutrittsklasseDto.getPersonalIId() == null || personalzutrittsklasseDto.getTGueltigab() == null || personalzutrittsklasseDto.getZutrittsklasseIId() == null"));
        }

        personalzutrittsklasseDto.setTGueltigab(Helper.cutTimestamp(personalzutrittsklasseDto.getTGueltigab()));

        Integer iId = personalzutrittsklasseDto.getIId();
        // try {
        Personalzutrittsklasse personalzutrittsklasse = em.find(Personalzutrittsklasse.class, iId);
        if (personalzutrittsklasse == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        setPersonalzutrittsklasseFromPersonalzutrittsklasseDto(personalzutrittsklasse, personalzutrittsklasseDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public PersonalzutrittsklasseDto personalzutrittsklasseFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Personalzutrittsklasse personalzutrittsklasse = em.find(Personalzutrittsklasse.class, iId);
        if (personalzutrittsklasse == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assemblePersonalzutrittsklasseDto(personalzutrittsklasse);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public PersonalzutrittsklasseDto personalzutrittsklasseFindZutrittsklasseZuDatum(Integer personalIId,
            java.sql.Timestamp dDatum, TheClientDto theClientDto) throws EJBExceptionLP {

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

        // try {
        Query query = em.createNamedQuery("PersonalzutrittsklassefindByPersonalIIdTGueltigab");
        query.setParameter(1, personalIId);
        query.setParameter(2, dDatum);
        Collection<?> cl = query.getResultList();
        // if (cl.isEmpty()) {
        // return null;
        // }
        PersonalzutrittsklasseDto[] personalzeitmodellDtos = assemblePersonalzutrittsklasseDtos(cl);
        PersonalzutrittsklasseDto personalzutrittsklasseDto = null;
        if (personalzeitmodellDtos.length > 0) {
            personalzutrittsklasseDto = personalzeitmodellDtos[0];
        }
        if (personalzutrittsklasseDto != null) {
            personalzutrittsklasseDto.setZutrittsklasseDto(
                    zutrittsklasseFindByPrimaryKey(personalzutrittsklasseDto.getZutrittsklasseIId()));

        }
        return personalzutrittsklasseDto;
        // }
        // catch (FinderException e) {
        // return null;
        // }
    }

    public PersonalzutrittsklasseDto[] personalzutrittsklassenFindByTGueltigab(Timestamp tDatum,
            TheClientDto theClientDto) throws EJBExceptionLP {
        if (tDatum == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                    new Exception("tDatum == null"));
        }
        tDatum = Helper.cutTimestamp(tDatum);
        String sQuery = "select distinct personalzutrittsklasse.personal_i_id from FLRPersonalzutrittsklasse personalzutrittsklasse WHERE personalzutrittsklasse.t_gueltigab<='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tDatum.getTime()))
                + "' AND personalzutrittsklasse.flrpersonal.c_ausweis is not null";

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

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

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

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

        ArrayList<PersonalzutrittsklasseDto> a = new ArrayList<PersonalzutrittsklasseDto>();

        int row = 0;
        while (resultListIterator.hasNext()) {

            Integer o = (Integer) resultListIterator.next();
            try {
                if (!getPersonalFac().istPersonalAusgetreten(o, tDatum, theClientDto)) {
                    PersonalzutrittsklasseDto dto = new PersonalzutrittsklasseDto();

                    // try {
                    Query query = em.createNamedQuery("PersonalzutrittsklassefindByPersonalIIdTGueltigab");
                    query.setParameter(1, o);
                    query.setParameter(2, tDatum);
                    Collection<?> cl = query.getResultList();
                    // if (cl.isEmpty()) {
                    // throw new
                    // EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY
                    // ,
                    // null);
                    // }
                    PersonalzutrittsklasseDto[] dtoTemp = assemblePersonalzutrittsklasseDtos(cl);
                    dto = dtoTemp[0];
                    // }
                    // catch (FinderException ex1) {
                    // throw new
                    // EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY
                    // ,
                    // ex1);
                    // }
                    /*
                     * dto.setPersonalDto(getPersonalFac().
                     * personalFindByPrimaryKey(o, cNrUserI));
                     * dto.setZutrittsklasseDto(
                     * zutrittsklasseFindByPrimaryKey(dto.
                     * getZutrittsklasseIId()));
                     */
                    a.add(dto);

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

            row++;
        }

        PersonalzutrittsklasseDto[] returnArray = new PersonalzutrittsklasseDto[a.size()];
        return (PersonalzutrittsklasseDto[]) a.toArray(returnArray);
    }

    private void setPersonalzutrittsklasseFromPersonalzutrittsklasseDto(
            Personalzutrittsklasse personalzutrittsklasse, PersonalzutrittsklasseDto personalzutrittsklasseDto) {
        personalzutrittsklasse.setPersonalIId(personalzutrittsklasseDto.getPersonalIId());
        personalzutrittsklasse.setZutrittsklasseIId(personalzutrittsklasseDto.getZutrittsklasseIId());
        personalzutrittsklasse.setTGueltigab(personalzutrittsklasseDto.getTGueltigab());
        em.merge(personalzutrittsklasse);
        em.flush();
    }

    private PersonalzutrittsklasseDto assemblePersonalzutrittsklasseDto(
            Personalzutrittsklasse personalzutrittsklasse) {
        return PersonalzutrittsklasseDtoAssembler.createDto(personalzutrittsklasse);
    }

    private PersonalzutrittsklasseDto[] assemblePersonalzutrittsklasseDtos(Collection<?> personalzutrittsklasses) {
        List<PersonalzutrittsklasseDto> list = new ArrayList<PersonalzutrittsklasseDto>();
        if (personalzutrittsklasses != null) {
            Iterator<?> iterator = personalzutrittsklasses.iterator();
            while (iterator.hasNext()) {
                Personalzutrittsklasse personalzutrittsklasse = (Personalzutrittsklasse) iterator.next();
                list.add(assemblePersonalzutrittsklasseDto(personalzutrittsklasse));
            }
        }
        PersonalzutrittsklasseDto[] returnArray = new PersonalzutrittsklasseDto[list.size()];
        return (PersonalzutrittsklasseDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittonlinecheck(ZutrittonlinecheckDto zutrittonlinecheckDto, TheClientDto theClientDto)
            throws EJBExceptionLP {

        if (zutrittonlinecheckDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittonlinecheckDto == null"));
        }
        if (zutrittonlinecheckDto.getTGueltigab() == null || zutrittonlinecheckDto.getTGueltigbis() == null
                || zutrittonlinecheckDto.getZutrittsklasseIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittonlinecheckDto.getTGueltigab() == null || zutrittonlinecheckDto.getTGueltigbis() == null || zutrittonlinecheckDto.getZutrittsklasseIId() == null"));
        }

        if (zutrittonlinecheckDto.getCAusweis() == null && zutrittonlinecheckDto.getCPincode() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN, new Exception(
                    "zutrittonlinecheckDto.getCAusweis() == null && zutrittonlinecheckDto.getCPincode() == null"));
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTONLINECHECK);
        zutrittonlinecheckDto.setIId(pk);

        zutrittonlinecheckDto.setMandantCNr(theClientDto.getMandant());

        try {
            Zutrittonlinecheck zutrittonlinecheck = new Zutrittonlinecheck(zutrittonlinecheckDto.getIId(),
                    zutrittonlinecheckDto.getZutrittsklasseIId(), zutrittonlinecheckDto.getMandantCNr(),
                    zutrittonlinecheckDto.getTGueltigab(), zutrittonlinecheckDto.getTGueltigbis());
            em.persist(zutrittonlinecheck);
            em.flush();
            setZutrittonlinecheckFromZutrittonlinecheckDto(zutrittonlinecheck, zutrittonlinecheckDto);
            return zutrittonlinecheckDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removeZutrittonlinecheck(ZutrittonlinecheckDto zutrittonlinecheckDto) throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittonlinecheckDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittonlinecheckDto == null"));
        }
        if (zutrittonlinecheckDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittonlinecheck toRemove = em.find(Zutrittonlinecheck.class, zutrittonlinecheckDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updateZutrittonlinecheck(ZutrittonlinecheckDto zutrittonlinecheckDto) throws EJBExceptionLP {
        if (zutrittonlinecheckDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittonlinecheckDto == null"));
        }
        if (zutrittonlinecheckDto.getIId() == null || zutrittonlinecheckDto.getTGueltigab() == null
                || zutrittonlinecheckDto.getTGueltigbis() == null
                || zutrittonlinecheckDto.getZutrittsklasseIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittonlinecheckDto.getIId() == null || zutrittonlinecheckDto.getTGueltigab() == null || zutrittonlinecheckDto.getTGueltigbis() == null || zutrittonlinecheckDto.getZutrittsklasseIId() == null"));
        }
        if (zutrittonlinecheckDto.getCAusweis() == null && zutrittonlinecheckDto.getCPincode() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN, new Exception(
                    "zutrittonlinecheckDto.getCAusweis() == null && zutrittonlinecheckDto.getCPincode() == null"));
        }

        Integer iId = zutrittonlinecheckDto.getIId();
        // try {
        Zutrittonlinecheck zutrittonlinecheck = em.find(Zutrittonlinecheck.class, iId);
        if (zutrittonlinecheck == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        setZutrittonlinecheckFromZutrittonlinecheckDto(zutrittonlinecheck, zutrittonlinecheckDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public void kopiereRestlicheZutrittsmodelltage(Integer zutrittsmodelIId) throws EJBExceptionLP {
        // try {
        Query query = em.createNamedQuery("ZutrittsmodelltagfindByZutrittsmodellIId");
        query.setParameter(1, zutrittsmodelIId);
        Collection<?> cl = query.getResultList();
        // if (! cl.isEmpty()) {
        ZutrittsmodelltagDto[] zutrittsmodelltagDtos = assembleZutrittsmodelltagDtos(cl);

        try {
            TagesartDto[] tagesartDtos = getZeiterfassungFac().tagesartFindAll();

            if (tagesartDtos != null && tagesartDtos.length > 0) {
                for (int i = 0; i < tagesartDtos.length; i++) {
                    TagesartDto t = tagesartDtos[i];
                    boolean bGefunden = false;
                    for (int j = 0; j < zutrittsmodelltagDtos.length; j++) {
                        if (t.getIId().equals(zutrittsmodelltagDtos[j].getTagesartIId())) {
                            bGefunden = true;
                        }
                    }
                    if (!bGefunden) {
                        ZutrittsmodelltagDto dto = new ZutrittsmodelltagDto();
                        dto.setTagesartIId(t.getIId());
                        dto.setZutrittsmodellIId(zutrittsmodelIId);
                        createZutrittsmodelltag(dto);
                    }
                }
            }
        } catch (RemoteException ex1) {
            throwEJBExceptionLPRespectOld(ex1);
        }

        // }
        // catch (FinderException ex) {
        // //keiner da
        // }
    }

    public boolean onlineCheck(String cAusweis, String pinMd5, java.sql.Timestamp tZeitpunkt,
            Integer zutrittsobjektIId) throws EJBExceptionLP {
        if (tZeitpunkt == null || zutrittsobjektIId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                    new Exception("tZeitpunkt == null || zutrittsobjektIId == null"));
        }
        if (cAusweis == null && pinMd5 == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                    new Exception("cAusweis == null && pinMd5 == null"));
        }

        boolean bZutritt = false;

        SessionFactory factory = FLRSessionFactory.getFactory();
        Session session = factory.openSession();
        org.hibernate.Criteria zutrittonclinecheck = session.createCriteria(FLRZutrittonlinecheck.class);

        zutrittonclinecheck
                .add(Expression.le(ZutrittscontrollerFac.FLR_ZUTRITTONLINECHECK_T_GUELITGAB, tZeitpunkt));
        zutrittonclinecheck
                .add(Expression.ge(ZutrittscontrollerFac.FLR_ZUTRITTONLINECHECK_T_GUELITGBIS, tZeitpunkt));
        if (cAusweis != null && cAusweis.length() > 0) {
            zutrittonclinecheck
                    .add(Expression.eq(ZutrittscontrollerFac.FLR_ZUTRITTONLINECHECK_C_AUSWEIS, cAusweis));
        }
        if (pinMd5 != null && pinMd5.length() > 0) {
            zutrittonclinecheck.add(Expression.isNotNull(ZutrittscontrollerFac.FLR_ZUTRITTONLINECHECK_C_PINCODE));
        }

        List<?> resultListZeitdaten = zutrittonclinecheck.list();

        // Nichts gefunden - nicht reinlassen
        if (resultListZeitdaten.size() == 0) {
            return false;
        }

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

        while (resultListIterator.hasNext()) {
            FLRZutrittonlinecheck zutrittonlinecheck = (FLRZutrittonlinecheck) resultListIterator.next();

            // try {
            Query query = em.createNamedQuery("ZutrittsklasseobjektfindByZutrittsobjektIIdZutrittsklasseIId");
            query.setParameter(1, zutrittsobjektIId);
            query.setParameter(2, zutrittonlinecheck.getFlrzutrittsklasse().getI_id());
            Zutrittsklasseobjekt zutrittsklasseobjekt = (Zutrittsklasseobjekt) query.getSingleResult();

            if (zutrittsklasseobjekt == null) {
                // Tuer gehoert nicht zur Zutrittsklasse
                return false;
            }

            // Ausweis/Zutrittsobjekt wurde gefunden und pincode war leer: true
            if (pinMd5 == null || pinMd5.length() == 0) {
                return true;
            }

            byte[] md5Hash = org.apache.commons.codec.digest.DigestUtils.md5(zutrittonlinecheck.getC_pincode());
            String pinHash = new String(Base64.encodeBase64(md5Hash));
            // workaround, da aus dem +-Zeichen in der URL bei getParameter()
            // ein Leerzeichen wird.
            pinHash = pinHash.replace('+', ' ');
            System.out.println(pinHash);
            // Wenn Pincode stimmt - TRUE
            if (pinMd5.equals(pinHash)) {
                return true;
            }
            // }
            // catch (FinderException ex) {
            // //next
            // }
        }
        return bZutritt;
    }

    public ZutrittonlinecheckDto zutrittonlinecheckFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittonlinecheck zutrittonlinecheck = em.find(Zutrittonlinecheck.class, iId);
        if (zutrittonlinecheck == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittonlinecheckDto(zutrittonlinecheck);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    private void setZutrittonlinecheckFromZutrittonlinecheckDto(Zutrittonlinecheck zutrittonlinecheck,
            ZutrittonlinecheckDto zutrittonlinecheckDto) {
        zutrittonlinecheck.setZutrittsklasseIId(zutrittonlinecheckDto.getZutrittsklasseIId());
        zutrittonlinecheck.setCPincode(zutrittonlinecheckDto.getCPincode());
        zutrittonlinecheck.setCAusweis(zutrittonlinecheckDto.getCAusweis());
        zutrittonlinecheck.setTGueltigab(zutrittonlinecheckDto.getTGueltigab());
        zutrittonlinecheck.setTGueltigbis(zutrittonlinecheckDto.getTGueltigbis());
        em.merge(zutrittonlinecheck);
        em.flush();
    }

    private ZutrittonlinecheckDto assembleZutrittonlinecheckDto(Zutrittonlinecheck zutrittonlinecheck) {
        return ZutrittonlinecheckDtoAssembler.createDto(zutrittonlinecheck);
    }

    private ZutrittonlinecheckDto[] assembleZutrittonlinecheckDtos(Collection<?> zutrittonlinechecks) {
        List<ZutrittonlinecheckDto> list = new ArrayList<ZutrittonlinecheckDto>();
        if (zutrittonlinechecks != null) {
            Iterator<?> iterator = zutrittonlinechecks.iterator();
            while (iterator.hasNext()) {
                Zutrittonlinecheck zutrittonlinecheck = (Zutrittonlinecheck) iterator.next();
                list.add(assembleZutrittonlinecheckDto(zutrittonlinecheck));
            }
        }
        ZutrittonlinecheckDto[] returnArray = new ZutrittonlinecheckDto[list.size()];
        return (ZutrittonlinecheckDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittsobjektverwendung(ZutrittsobjektverwendungDto zutrittsobjektverwendungDto)
            throws EJBExceptionLP {
        if (zutrittsobjektverwendungDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsobjektverwendungDto == null"));
        }
        if (zutrittsobjektverwendungDto.getMandantCNr() == null
                || zutrittsobjektverwendungDto.getIAnzahlverwendung() == null
                || zutrittsobjektverwendungDto.getZutrittsobjektIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsobjektverwendungDto.getMandantCNr() == null || zutrittsobjektverwendungDto.getIAnzahlverwendung() == null || zutrittsobjektverwendungDto.getZutrittsobjektIId() == null"));
        }
        try {
            Query query = em.createNamedQuery("ZutrittsobjektverwendungfindByMandantCNrZutrittsobjektIId");
            query.setParameter(1, zutrittsobjektverwendungDto.getMandantCNr());
            query.setParameter(2, zutrittsobjektverwendungDto.getZutrittsobjektIId());
            Zutrittsobjektverwendung doppelt = (Zutrittsobjektverwendung) query.getSingleResult();
            if (doppelt != null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_ZUTRITTSOBJEKTVERWENDUNG.UK"));

            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTSOBJEKTVERWENDUNG);
        zutrittsobjektverwendungDto.setIId(pk);

        try {
            Zutrittsobjektverwendung zutrittsobjektverwendung = new Zutrittsobjektverwendung(
                    zutrittsobjektverwendungDto.getIId(), zutrittsobjektverwendungDto.getMandantCNr(),
                    zutrittsobjektverwendungDto.getIAnzahlverwendung(),
                    zutrittsobjektverwendungDto.getZutrittsobjektIId());
            em.persist(zutrittsobjektverwendung);
            em.flush();
            setZutrittsobjektverwendungFromZutrittsobjektverwendungDto(zutrittsobjektverwendung,
                    zutrittsobjektverwendungDto);
            return zutrittsobjektverwendungDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void pruefeZutrittsobjektverwendung(Integer zutrittsklasseIId, TheClientDto theClientDto) {

        if (zutrittsklasseIId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL,
                    new Exception("zutrittsobjektIId == null"));
        }

        java.sql.Timestamp tHeute = new Timestamp(System.currentTimeMillis());
        tHeute = Helper.cutTimestamp(tHeute);

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

        String sQuery = "select count(distinct personalzutrittsklasse.personal_i_id) from FLRPersonalzutrittsklasse personalzutrittsklasse WHERE personalzutrittsklasse.flrpersonal.mandant_c_nr='"
                + theClientDto.getMandant() + "' AND personalzutrittsklasse.t_gueltigab <='"
                + Helper.formatDateWithSlashes(new java.sql.Date(tHeute.getTime())) + "'";

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

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

        long iAnzahlKlasseVerwendet = (Long) resultList.iterator().next();

        // try {
        Query query = em.createNamedQuery("ZutrittsobjektverwendungfindByMandantCNr");
        query.setParameter(1, theClientDto.getMandant());
        Collection<?> cl = query.getResultList();
        // if (! cl.isEmpty()) {
        ZutrittsobjektverwendungDto[] zutrittsobjektverwendungDtos = assembleZutrittsobjektverwendungDtos(
                query.getResultList());
        if (zutrittsobjektverwendungDtos != null) {
            for (int i = 0; i < zutrittsobjektverwendungDtos.length; i++) {
                ZutrittsobjektverwendungDto zutrittsobjektverwendungDto = zutrittsobjektverwendungDtos[i];
                int iAnzahlDarfVerwendetwerden = zutrittsobjektverwendungDto.getIAnzahlverwendung();
                try {
                    query = em.createNamedQuery("ZutrittsklasseobjektfindByZutrittsobjektIIdZutrittsklasseIId");
                    query.setParameter(1, zutrittsobjektverwendungDto.getZutrittsobjektIId());
                    query.setParameter(2, zutrittsklasseIId);
                    Zutrittsklasseobjekt zutrittsklasseobjekt = (Zutrittsklasseobjekt) query.getSingleResult();
                    if (zutrittsklasseobjekt != null) {
                        ZutrittsklasseobjektDto zutrittsklasseobjektDto = assembleZutrittsklasseobjektDto(
                                zutrittsklasseobjekt);
                        if (zutrittsklasseobjektDto != null) {
                            if (iAnzahlKlasseVerwendet >= iAnzahlDarfVerwendetwerden) {
                                Zutrittsobjekt zutrittsobjekt = em.find(Zutrittsobjekt.class,
                                        zutrittsklasseobjektDto.getZutrittsobjektIId());
                                if (zutrittsobjekt != null) {
                                    throw new EJBExceptionLP(
                                            EJBExceptionLP.FEHLER_ZUTRITTSOBJEKT_VERWENDUNGSUEBERSCHREITUNG,
                                            new Exception(zutrittsobjekt.getCBez()));
                                }

                            }
                        }

                    }
                } catch (javax.persistence.NoResultException ex1) {
                    // nix
                }
            }
        }

        // }
        // catch (FinderException ex) {
        // //nix da
        // }
    }

    public void removeZutrittsobjektverwendung(ZutrittsobjektverwendungDto zutrittsobjektverwendungDto)
            throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittsobjektverwendungDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittsobjektverwendung toRemove = em.find(Zutrittsobjektverwendung.class,
                zutrittsobjektverwendungDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updateZutrittsobjektverwendung(ZutrittsobjektverwendungDto zutrittsobjektverwendungDto)
            throws EJBExceptionLP {
        if (zutrittsobjektverwendungDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittsobjektverwendungDto == null"));
        }
        if (zutrittsobjektverwendungDto.getIId() == null || zutrittsobjektverwendungDto.getMandantCNr() == null
                || zutrittsobjektverwendungDto.getIAnzahlverwendung() == null
                || zutrittsobjektverwendungDto.getZutrittsobjektIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittsobjektverwendungDto.getIId() == null || zutrittsobjektverwendungDto.getMandantCNr() == null || zutrittsobjektverwendungDto.getIAnzahlverwendung() == null || zutrittsobjektverwendungDto.getZutrittsobjektIId() == null"));
        }

        Integer iId = zutrittsobjektverwendungDto.getIId();
        // try {
        Zutrittsobjektverwendung zutrittsobjektverwendung = em.find(Zutrittsobjektverwendung.class, iId);
        if (zutrittsobjektverwendung == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        setZutrittsobjektverwendungFromZutrittsobjektverwendungDto(zutrittsobjektverwendung,
                zutrittsobjektverwendungDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public ZutrittsobjektverwendungDto zutrittsobjektverwendungFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }
        // try {
        Zutrittsobjektverwendung zutrittsobjektverwendung = em.find(Zutrittsobjektverwendung.class, iId);
        if (zutrittsobjektverwendung == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittsobjektverwendungDto(zutrittsobjektverwendung);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public ZutrittsobjektverwendungDto[] zutrittsobjektverwendungFindByZutrittsobjektIId(Integer zutrittsobjektIId)
            throws EJBExceptionLP {
        if (zutrittsobjektIId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL,
                    new Exception("zutrittsobjektIId == null"));
        }
        // try {
        Query query = em.createNamedQuery("ZutrittsobjektverwendungfindByZutrittsobjektIId");
        query.setParameter(1, zutrittsobjektIId);
        Collection<?> cl = query.getResultList();
        // if (cl.isEmpty()) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // null);
        // }
        return assembleZutrittsobjektverwendungDtos(cl);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    private void setZutrittsobjektverwendungFromZutrittsobjektverwendungDto(
            Zutrittsobjektverwendung zutrittsobjektverwendung,
            ZutrittsobjektverwendungDto zutrittsobjektverwendungDto) {
        zutrittsobjektverwendung.setMandantCNr(zutrittsobjektverwendungDto.getMandantCNr());
        zutrittsobjektverwendung.setIAnzahlverwendung(zutrittsobjektverwendungDto.getIAnzahlverwendung());
        zutrittsobjektverwendung.setZutrittsobjektIId(zutrittsobjektverwendungDto.getZutrittsobjektIId());
        em.merge(zutrittsobjektverwendung);
        em.flush();
    }

    private ZutrittsobjektverwendungDto assembleZutrittsobjektverwendungDto(
            Zutrittsobjektverwendung zutrittsobjektverwendung) {
        return ZutrittsobjektverwendungDtoAssembler.createDto(zutrittsobjektverwendung);
    }

    private ZutrittsobjektverwendungDto[] assembleZutrittsobjektverwendungDtos(
            Collection<?> zutrittsobjektverwendungs) {
        List<ZutrittsobjektverwendungDto> list = new ArrayList<ZutrittsobjektverwendungDto>();
        if (zutrittsobjektverwendungs != null) {
            Iterator<?> iterator = zutrittsobjektverwendungs.iterator();
            while (iterator.hasNext()) {
                Zutrittsobjektverwendung zutrittsobjektverwendung = (Zutrittsobjektverwendung) iterator.next();
                list.add(assembleZutrittsobjektverwendungDto(zutrittsobjektverwendung));
            }
        }
        ZutrittsobjektverwendungDto[] returnArray = new ZutrittsobjektverwendungDto[list.size()];
        return (ZutrittsobjektverwendungDto[]) list.toArray(returnArray);
    }

    public void createZutrittsleser(ZutrittsleserDto zutrittsleserDto) throws EJBExceptionLP {
        if (zutrittsleserDto == null) {
            return;
        }
        try {
            Zutrittsleser zutrittsleser = new Zutrittsleser(zutrittsleserDto.getCNr());
            em.persist(zutrittsleser);
            em.flush();
            setZutrittsleserFromZutrittsleserDto(zutrittsleser, zutrittsleserDto);
        } catch (Exception e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void updateZutrittsleser(ZutrittsleserDto zutrittsleserDto) throws EJBExceptionLP {
        if (zutrittsleserDto != null) {
            String cNr = zutrittsleserDto.getCNr();
            try {
                Zutrittsleser zutrittsleser = em.find(Zutrittsleser.class, cNr);
                setZutrittsleserFromZutrittsleserDto(zutrittsleser, zutrittsleserDto);
            } catch (Exception e) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_UPDATE, e);
            }
        }
    }

    public ZutrittsleserDto zutrittsleserFindByPrimaryKey(String cNr) throws EJBExceptionLP {
        try {
            Zutrittsleser zutrittsleser = em.find(Zutrittsleser.class, cNr);
            if (zutrittsleser == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
            }
            return assembleZutrittsleserDto(zutrittsleser);
        }
        // catch (FinderException fe) {
        // throw fe;
        // }
        catch (Exception e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
        }
    }

    public ZutrittsleserDto[] zutrittsleserFindAll() throws EJBExceptionLP {
        try {
            Query query = em.createNamedQuery("ZutrittsleserfindAll");
            Collection<?> cl = query.getResultList();
            // if (cl.isEmpty()) {
            // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDALL,null);
            // }
            return assembleZutrittsleserDtos(cl);

        }
        // catch (FinderException fe) {
        // throw fe;
        // }
        catch (Exception e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDALL, e);
        }
    }

    private void setZutrittsleserFromZutrittsleserDto(Zutrittsleser zutrittsleser,
            ZutrittsleserDto zutrittsleserDto) {
        zutrittsleser.setCBez(zutrittsleserDto.getCBez());
        em.merge(zutrittsleser);
        em.flush();
    }

    private ZutrittsleserDto assembleZutrittsleserDto(Zutrittsleser zutrittsleser) {
        return ZutrittsleserDtoAssembler.createDto(zutrittsleser);
    }

    private ZutrittsleserDto[] assembleZutrittsleserDtos(Collection<?> zutrittslesers) {
        List<ZutrittsleserDto> list = new ArrayList<ZutrittsleserDto>();
        if (zutrittslesers != null) {
            Iterator<?> iterator = zutrittslesers.iterator();
            while (iterator.hasNext()) {
                Zutrittsleser zutrittsleser = (Zutrittsleser) iterator.next();
                list.add(assembleZutrittsleserDto(zutrittsleser));
            }
        }
        ZutrittsleserDto[] returnArray = new ZutrittsleserDto[list.size()];
        return (ZutrittsleserDto[]) list.toArray(returnArray);
    }

    public void createZutrittsoeffnungsart(ZutrittsoeffnungsartDto zutrittsoeffnungsartDto) throws EJBExceptionLP {
        if (zutrittsoeffnungsartDto == null) {
            return;
        }
        try {
            Zutrittsoeffnungsart zutrittsoeffnungsart = new Zutrittsoeffnungsart(zutrittsoeffnungsartDto.getCNr());
            em.persist(zutrittsoeffnungsart);
            em.flush();
            setZutrittsoeffnungsartFromZutrittsoeffnungsartDto(zutrittsoeffnungsart, zutrittsoeffnungsartDto);
        } catch (Exception e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void updateZutrittsoeffnungsart(ZutrittsoeffnungsartDto zutrittsoeffnungsartDto) throws EJBExceptionLP {
        if (zutrittsoeffnungsartDto != null) {
            String cNr = zutrittsoeffnungsartDto.getCNr();
            try {
                Zutrittsoeffnungsart zutrittsoeffnungsart = em.find(Zutrittsoeffnungsart.class, cNr);
                setZutrittsoeffnungsartFromZutrittsoeffnungsartDto(zutrittsoeffnungsart, zutrittsoeffnungsartDto);
            } catch (Exception e) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_UPDATE, e);
            }
        }
    }

    public ZutrittsoeffnungsartDto zutrittsoeffnungsartFindByPrimaryKey(String cNr) throws EJBExceptionLP {
        try {
            Zutrittsoeffnungsart zutrittsoeffnungsart = em.find(Zutrittsoeffnungsart.class, cNr);
            if (zutrittsoeffnungsart == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
            }
            return assembleZutrittsoeffnungsartDto(zutrittsoeffnungsart);
        }
        // catch (FinderException fe) {
        // throw fe;
        // }
        catch (Exception e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
        }
    }

    public ZutrittsoeffnungsartDto[] zutrittsoeffnungsartFindAll() throws EJBExceptionLP {
        try {
            Query query = em.createNamedQuery("ZutrittsoeffnungsartfindAll");
            Collection<?> cl = query.getResultList();
            // if (cl.isEmpty()) {
            // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDALL,
            // null);
            // }
            return assembleZutrittsoeffnungsartDtos(cl);
        }
        // catch (FinderException fe) {
        // throw fe;
        // }
        catch (Exception e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDALL, e);
        }
    }

    private void setZutrittsoeffnungsartFromZutrittsoeffnungsartDto(Zutrittsoeffnungsart zutrittsoeffnungsart,
            ZutrittsoeffnungsartDto zutrittsoeffnungsartDto) {
        zutrittsoeffnungsart.setCBez(zutrittsoeffnungsartDto.getCBez());
        em.merge(zutrittsoeffnungsart);
        em.flush();
    }

    private ZutrittsoeffnungsartDto assembleZutrittsoeffnungsartDto(Zutrittsoeffnungsart zutrittsoeffnungsart) {
        return ZutrittsoeffnungsartDtoAssembler.createDto(zutrittsoeffnungsart);
    }

    private ZutrittsoeffnungsartDto[] assembleZutrittsoeffnungsartDtos(Collection<?> zutrittsoeffnungsarts) {
        List<ZutrittsoeffnungsartDto> list = new ArrayList<ZutrittsoeffnungsartDto>();
        if (zutrittsoeffnungsarts != null) {
            Iterator<?> iterator = zutrittsoeffnungsarts.iterator();
            while (iterator.hasNext()) {
                Zutrittsoeffnungsart zutrittsoeffnungsart = (Zutrittsoeffnungsart) iterator.next();
                list.add(assembleZutrittsoeffnungsartDto(zutrittsoeffnungsart));
            }
        }
        ZutrittsoeffnungsartDto[] returnArray = new ZutrittsoeffnungsartDto[list.size()];
        return (ZutrittsoeffnungsartDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittslog(ZutrittslogDto zutrittslogDto) throws EJBExceptionLP {
        if (zutrittslogDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("zutrittslogDto == null"));
        }
        if (zutrittslogDto.getBErlaubt() == null || zutrittslogDto.getCPerson() == null
                || zutrittslogDto.getCZutrittscontroller() == null || zutrittslogDto.getCZutrittsobjekt() == null
                || zutrittslogDto.getMandantCNr() == null || zutrittslogDto.getTZeitpunkt() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittslogDto.getBErlaubt() == null || zutrittslogDto.getCPerson() == null || zutrittslogDto.getCZutrittscontroller() == null || zutrittslogDto.getCZutrittsobjekt() == null || zutrittslogDto.getMandantCNr() == null || zutrittslogDto.getTZeitpunkt() == null"));
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTSLOG);
        zutrittslogDto.setIId(pk);
        try {
            Zutrittslog zutrittslog = new Zutrittslog(zutrittslogDto.getIId(),
                    zutrittslogDto.getCZutrittscontroller(), zutrittslogDto.getCZutrittsobjekt(),
                    zutrittslogDto.getTZeitpunkt(), zutrittslogDto.getMandantCNr(), zutrittslogDto.getBErlaubt(),
                    zutrittslogDto.getMandantCNrObjekt());
            em.persist(zutrittslog);
            em.flush();
            setZutrittslogFromZutrittslogDto(zutrittslog, zutrittslogDto);
            return zutrittslogDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public ZutrittslogDto zutrittslogFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittslog zutrittslog = em.find(Zutrittslog.class, iId);
        if (zutrittslog == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittslogDto(zutrittslog);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }

    }

    private void setZutrittslogFromZutrittslogDto(Zutrittslog zutrittslog, ZutrittslogDto zutrittslogDto) {
        zutrittslog.setCAusweis(zutrittslogDto.getCAusweis());
        zutrittslog.setCPerson(zutrittslogDto.getCPerson());
        zutrittslog.setCZutrittscontroller(zutrittslogDto.getCZutrittscontroller());
        zutrittslog.setCZutrittsobjekt(zutrittslogDto.getCZutrittsobjekt());
        zutrittslog.setTZeitpunkt(zutrittslogDto.getTZeitpunkt());
        zutrittslog.setMandantCNr(zutrittslogDto.getMandantCNr());
        zutrittslog.setBErlaubt(zutrittslogDto.getBErlaubt());
        em.merge(zutrittslog);
        em.flush();
    }

    private ZutrittslogDto assembleZutrittslogDto(Zutrittslog zutrittslog) {
        return ZutrittslogDtoAssembler.createDto(zutrittslog);
    }

    private ZutrittslogDto[] assembleZutrittslogDtos(Collection<?> zutrittslogs) {
        List<ZutrittslogDto> list = new ArrayList<ZutrittslogDto>();
        if (zutrittslogs != null) {
            Iterator<?> iterator = zutrittslogs.iterator();
            while (iterator.hasNext()) {
                Zutrittslog zutrittslog = (Zutrittslog) iterator.next();
                list.add(assembleZutrittslogDto(zutrittslog));
            }
        }
        ZutrittslogDto[] returnArray = new ZutrittslogDto[list.size()];
        return (ZutrittslogDto[]) list.toArray(returnArray);
    }

    public Integer createZutrittdaueroffen(ZutrittdaueroffenDto zutrittdaueroffenDto) throws EJBExceptionLP {
        if (zutrittdaueroffenDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittdaueroffenDto == null"));
        }
        if (zutrittdaueroffenDto.getTagesartIId() == null || zutrittdaueroffenDto.getUOffenbis() == null
                || zutrittdaueroffenDto.getUOffenvon() == null
                || zutrittdaueroffenDto.getZutrittsobjektIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittdaueroffenDto.getTagesartIId() == null || zutrittdaueroffenDto.getUOffenbis() == null || zutrittdaueroffenDto.getUOffenvon() == null || zutrittdaueroffenDto.getZutrittsobjektIId() == null"));
        }

        // generieren von primary key
        PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
        Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_ZUTRITTDAUEROFFEN);
        zutrittdaueroffenDto.setIId(pk);

        try {
            Zutrittdaueroffen zutrittdaueroffen = new Zutrittdaueroffen(zutrittdaueroffenDto.getIId(),
                    zutrittdaueroffenDto.getTagesartIId(), zutrittdaueroffenDto.getZutrittsobjektIId(),
                    zutrittdaueroffenDto.getUOffenvon(), zutrittdaueroffenDto.getUOffenbis());
            em.persist(zutrittdaueroffen);
            em.flush();
            setZutrittdaueroffenFromZutrittdaueroffenDto(zutrittdaueroffen, zutrittdaueroffenDto);
            return zutrittdaueroffenDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removeZutrittdaueroffen(ZutrittdaueroffenDto zutrittdaueroffenDto) throws EJBExceptionLP {
        myLogger.entry();
        if (zutrittdaueroffenDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittdaueroffenDto == null"));
        }
        if (zutrittdaueroffenDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittdaueroffen toRemove = em.find(Zutrittdaueroffen.class, zutrittdaueroffenDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updateZutrittdaueroffen(ZutrittdaueroffenDto zutrittdaueroffenDto) throws EJBExceptionLP {
        if (zutrittdaueroffenDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL,
                    new Exception("zutrittdaueroffenDto == null"));
        }
        if (zutrittdaueroffenDto.getIId() == null || zutrittdaueroffenDto.getTagesartIId() == null
                || zutrittdaueroffenDto.getUOffenbis() == null || zutrittdaueroffenDto.getUOffenvon() == null
                || zutrittdaueroffenDto.getZutrittsobjektIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "zutrittdaueroffenDto.getIId() == null || zutrittdaueroffenDto.getTagesartIId() == null || zutrittdaueroffenDto.getUOffenbis() == null || zutrittdaueroffenDto.getUOffenvon() == null || zutrittdaueroffenDto.getZutrittsobjektIId() == null"));
        }

        Integer iId = zutrittdaueroffenDto.getIId();
        // try {
        Zutrittdaueroffen zutrittdaueroffen = em.find(Zutrittdaueroffen.class, iId);
        if (zutrittdaueroffen == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        setZutrittdaueroffenFromZutrittdaueroffenDto(zutrittdaueroffen, zutrittdaueroffenDto);

        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public String[] zutrittonlinecheckAusweiseFindByTGueltigab(Timestamp tDatum) throws EJBExceptionLP {
        if (tDatum == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_DARF_NICHT_NULL_SEIN,
                    new Exception("tDatum == null"));
        }
        SessionFactory factory = FLRSessionFactory.getFactory();
        Session session = factory.openSession();

        org.hibernate.Criteria crit = session.createCriteria(FLRZutrittonlinecheck.class)
                .add(Restrictions.isNotNull(ZutrittscontrollerFac.FLR_ZUTRITTONLINECHECK_C_AUSWEIS));
        crit.add(Restrictions.ge(ZutrittscontrollerFac.FLR_ZUTRITTONLINECHECK_T_GUELITGBIS, tDatum));
        List<?> resultList = crit.list();
        Iterator<?> resultListIterator = resultList.iterator();

        String[] ausweise = new String[resultList.size()];
        int row = 0;
        while (resultListIterator.hasNext()) {

            FLRZutrittonlinecheck o = (FLRZutrittonlinecheck) resultListIterator.next();
            ausweise[row] = o.getC_ausweis();
            row++;

        }
        return ausweise;
    }

    public ZutrittdaueroffenDto zutrittdaueroffenFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Zutrittdaueroffen zutrittdaueroffen = em.find(Zutrittdaueroffen.class, iId);
        if (zutrittdaueroffen == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assembleZutrittdaueroffenDto(zutrittdaueroffen);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    private void setZutrittdaueroffenFromZutrittdaueroffenDto(Zutrittdaueroffen zutrittdaueroffen,
            ZutrittdaueroffenDto zutrittdaueroffenDto) {
        zutrittdaueroffen.setTagesartIId(zutrittdaueroffenDto.getTagesartIId());
        zutrittdaueroffen.setZutrittsobjektIId(zutrittdaueroffenDto.getZutrittsobjektIId());
        zutrittdaueroffen.setUOffenvon(zutrittdaueroffenDto.getUOffenvon());
        zutrittdaueroffen.setUOffenbis(zutrittdaueroffenDto.getUOffenbis());
        em.merge(zutrittdaueroffen);
        em.flush();
    }

    private ZutrittdaueroffenDto assembleZutrittdaueroffenDto(Zutrittdaueroffen zutrittdaueroffen) {
        return ZutrittdaueroffenDtoAssembler.createDto(zutrittdaueroffen);
    }

    private ZutrittdaueroffenDto[] assembleZutrittdaueroffenDtos(Collection<?> zutrittdaueroffens) {
        List<ZutrittdaueroffenDto> list = new ArrayList<ZutrittdaueroffenDto>();
        if (zutrittdaueroffens != null) {
            Iterator<?> iterator = zutrittdaueroffens.iterator();
            while (iterator.hasNext()) {
                Zutrittdaueroffen zutrittdaueroffen = (Zutrittdaueroffen) iterator.next();
                list.add(assembleZutrittdaueroffenDto(zutrittdaueroffen));
            }
        }
        ZutrittdaueroffenDto[] returnArray = new ZutrittdaueroffenDto[list.size()];
        return (ZutrittdaueroffenDto[]) list.toArray(returnArray);
    }

    public Integer createPersonalfinger(PersonalfingerDto personalfingerDto, TheClientDto theClientDto)
            throws EJBExceptionLP {
        if (personalfingerDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("personalfingerDto == null"));
        }
        if (personalfingerDto.getPersonalIId() == null ||
        // personalfingerDto.getIFingerid() == null ||
                personalfingerDto.getFingerartIId() == null || personalfingerDto.getOTemplate1() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "personalfingerDto.getPersonalIId() == null || personalfingerDto.getIFingerid() == null || personalfingerDto.getFingerartIId() == null ||         personalfingerDto.getOTemplate1() == null "));
        }

        try {
            Query query = em.createNamedQuery("PersonalfingerfindByPersonalIIdFingerartIId");
            query.setParameter(1, personalfingerDto.getPersonalIId());
            query.setParameter(2, personalfingerDto.getFingerartIId());
            // @todo getSingleResult oder getResultList ?
            Personalfinger doppelt = (Personalfinger) query.getSingleResult();
            if (doppelt != null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                        new Exception("PERS_PERSONALFINGER.UK"));

            }
        } catch (NoResultException ex) {
            // nothing here
        } catch (NonUniqueResultException ex1) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_NO_UNIQUE_RESULT, ex1);
        }

        try {
            // generieren von primary key
            PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
            Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_PERSONALFINGER);
            personalfingerDto.setIId(pk);
            personalfingerDto.setIFingerid(pk);

            personalfingerDto.setTAendern(new java.sql.Timestamp(System.currentTimeMillis()));
            personalfingerDto.setPersonalIIdAendern(theClientDto.getIDPersonal());

            Personalfinger personalfinger = new Personalfinger(personalfingerDto.getIId(),
                    personalfingerDto.getPersonalIId(), personalfingerDto.getIFingerid(),
                    personalfingerDto.getOTemplate1(), personalfingerDto.getTAendern(),
                    personalfingerDto.getPersonalIIdAendern(), personalfingerDto.getFingerartIId());
            em.persist(personalfinger);
            em.flush();

            setPersonalfingerFromPersonalfingerDto(personalfinger, personalfingerDto);
            return personalfingerDto.getIId();
        } catch (EntityExistsException e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removePersonalfinger(PersonalfingerDto personalfingerDto) throws EJBExceptionLP {
        myLogger.entry();
        if (personalfingerDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("personalfingerDto == null"));
        }
        if (personalfingerDto.getIId() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }
        // try {
        Personalfinger toRemove = em.find(Personalfinger.class, personalfingerDto.getIId());
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (RemoveException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.
        // FEHLER_BEIM_LOESCHEN,
        // e);
        // }
    }

    public void updatePersonalfinger(PersonalfingerDto personalfingerDto, TheClientDto theClientDto)
            throws EJBExceptionLP {
        if (personalfingerDto == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DTO_IS_NULL, new Exception("personalfingerDto == null"));
        }
        if (personalfingerDto.getIId() == null || personalfingerDto.getPersonalIId() == null
                || personalfingerDto.getIFingerid() == null || personalfingerDto.getOTemplate1() == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FELD_IN_DTO_IS_NULL, new Exception(
                    "personalfingerDto.getIId() == null || personalfingerDto.getPersonalIId() == null || personalfingerDto.getIFingerid() == null || personalfingerDto.getIFingersubid() == null || personalfingerDto.getOTemplate() == null"));
        }

        Integer iId = personalfingerDto.getIId();
        // try {
        // try {
        Query query = em.createNamedQuery("PersonalfingerfindByPersonalIIdFingerartIId");
        query.setParameter(1, personalfingerDto.getPersonalIId());
        query.setParameter(2, personalfingerDto.getFingerartIId());
        Integer iIdVorhanden = ((Personalfinger) query.getSingleResult()).getIId();

        if (iId.equals(iIdVorhanden) == false) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_DUPLICATE_UNIQUE,
                    new Exception("PERS_PERSONALFINGER.UK"));
        }
        // }
        // catch (FinderException ex) {
        // // nothing here
        // }
        personalfingerDto.setTAendern(new java.sql.Timestamp(System.currentTimeMillis()));
        personalfingerDto.setPersonalIIdAendern(theClientDto.getIDPersonal());

        Personalfinger personalfinger = em.find(Personalfinger.class, iId);
        if (personalfinger == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        setPersonalfingerFromPersonalfingerDto(personalfinger, personalfingerDto);
        // }
        // catch (FinderException ex) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // ex);
        // }

    }

    public PersonalfingerDto personalfingerFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        if (iId == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PKFIELD_IS_NULL, new Exception("iId == null"));
        }

        // try {
        Personalfinger personalfinger = em.find(Personalfinger.class, iId);
        if (personalfinger == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        return assemblePersonalfingerDto(personalfinger);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public PersonalfingerDto[] personalfingerFindByTAendern(java.sql.Timestamp tAendern, TheClientDto theClientDto)
            throws EJBExceptionLP {
        if (tAendern == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_PARAMETER_IS_NULL, new Exception("tAendern == null"));
        }

        // try {
        Query query = em.createNamedQuery("PersonalfingerfindByTAendern");
        query.setParameter(1, tAendern);
        Collection<?> cl = query.getResultList();
        // if (cl.isEmpty()) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // null);
        // }
        return assemblePersonalfingerDtos(cl);
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY,
        // e);
        // }
    }

    public PersonalfingerDto[] personalfingerFindAll() throws EJBExceptionLP {
        // try {
        Query query = em.createNamedQuery("PersonalfingerfindAll");
        Collection<?> cl = query.getResultList();
        // if (cl.isEmpty()) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND,
        // null);
        // }
        return assemblePersonalfingerDtos(query.getResultList());
        // }
        // catch (FinderException e) {
        // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND,
        // e);
        // }
    }

    /*
     * public PersonalfingerDto personalfingerFindByIFingerid(Integer iFingerid)
     * throws EJBException { try { Query query =
     * em.createNamedQuery("PersonalfingerfindByFingerid");
     * query.setParameter(1, iFingerid); // @todo getSingleResult oder
     * getResultList ? return
     * assemblePersonalfingerDto((Personalfinger)query.getSingleResult()); }
     * catch (FinderException e) { throw new
     * EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, e); } }
     */

    private void setPersonalfingerFromPersonalfingerDto(Personalfinger personalfinger,
            PersonalfingerDto personalfingerDto) {
        personalfinger.setPersonalIId(personalfingerDto.getPersonalIId());
        personalfinger.setIFingerid(personalfingerDto.getIFingerid());
        personalfinger.setOTemplate1(personalfingerDto.getOTemplate1());
        personalfinger.setOTemplate2(personalfingerDto.getOTemplate2());
        personalfinger.setFingerartIId(personalfingerDto.getFingerartIId());
        personalfinger.setTAendern(personalfingerDto.getTAendern());
        personalfinger.setPersonalIIdAendern(personalfingerDto.getPersonalIIdAendern());
        em.merge(personalfinger);
        em.flush();
    }

    private PersonalfingerDto assemblePersonalfingerDto(Personalfinger personalfinger) {
        return PersonalfingerDtoAssembler.createDto(personalfinger);
    }

    private PersonalfingerDto[] assemblePersonalfingerDtos(Collection<?> personalfingers) {
        List<PersonalfingerDto> list = new ArrayList<PersonalfingerDto>();
        if (personalfingers != null) {
            Iterator<?> iterator = personalfingers.iterator();
            while (iterator.hasNext()) {
                Personalfinger personalfinger = (Personalfinger) iterator.next();
                list.add(assemblePersonalfingerDto(personalfinger));
            }
        }
        PersonalfingerDto[] returnArray = new PersonalfingerDto[list.size()];
        return (PersonalfingerDto[]) list.toArray(returnArray);
    }

    public Integer createFingerart(FingerartDto fingerartDto) throws EJBExceptionLP {
        try {
            PKGeneratorObj pkGen = new PKGeneratorObj(); // PKGEN
            Integer pk = pkGen.getNextPrimaryKey(PKConst.PK_FINGERART);
            fingerartDto.setIId(pk);
            Fingerart fingerart = new Fingerart(fingerartDto.getIId(), fingerartDto.getCBez());
            em.persist(fingerart);
            em.flush();
            setFingerartFromFingerartDto(fingerart, fingerartDto);
            return pk;
        } catch (Exception e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_ANLEGEN, e);
        }
    }

    public void removeFingerart(Integer iId) throws EJBExceptionLP {
        // try {
        Fingerart toRemove = em.find(Fingerart.class, iId);
        if (toRemove == null) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
        }
        try {
            em.remove(toRemove);
            em.flush();
        } catch (EntityExistsException er) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_LOESCHEN, er);
        }
        // }
        // catch (Exception e) {
        // throw new EJBException(e.getMessage());
        // }
    }

    public void removeFingerart(FingerartDto fingerartDto) throws EJBExceptionLP {
        if (fingerartDto != null) {
            Integer iId = fingerartDto.getIId();
            removeFingerart(iId);
        }
    }

    public void updateFingerart(FingerartDto fingerartDto) throws EJBExceptionLP {
        if (fingerartDto != null) {
            Integer iId = fingerartDto.getIId();
            try {
                Fingerart fingerart = em.find(Fingerart.class, iId);
                setFingerartFromFingerartDto(fingerart, fingerartDto);
            } catch (Exception e) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEIM_UPDATE, e);
            }
        }
    }

    public FingerartDto fingerartFindByPrimaryKey(Integer iId) throws EJBExceptionLP {
        try {
            Fingerart fingerart = em.find(Fingerart.class, iId);
            if (fingerart == null) {
                throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, "");
            }
            return assembleFingerartDto(fingerart);
        }
        // catch (FinderException fe) {
        // throw fe;
        // }
        catch (Exception e) {
            throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, e);
        }
    }

    private void setFingerartFromFingerartDto(Fingerart fingerart, FingerartDto fingerartDto) {
        fingerart.setCBez(fingerartDto.getCBez());
        em.merge(fingerart);
        em.flush();
    }

    private FingerartDto assembleFingerartDto(Fingerart fingerart) {
        return FingerartDtoAssembler.createDto(fingerart);
    }

    private FingerartDto[] assembleFingerartDtos(Collection<?> fingerarts) {
        List<FingerartDto> list = new ArrayList<FingerartDto>();
        if (fingerarts != null) {
            Iterator<?> iterator = fingerarts.iterator();
            while (iterator.hasNext()) {
                Fingerart fingerart = (Fingerart) iterator.next();
                list.add(assembleFingerartDto(fingerart));
            }
        }
        FingerartDto[] returnArray = new FingerartDto[list.size()];
        return (FingerartDto[]) list.toArray(returnArray);
    }
}