package com.fp.person.rules.save; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.joda.time.DateTime; import com.fp.dto.rules.TransactionRule; import com.fp.dto.save.SaveRequest; import com.fp.persistence.commondb.PersistenceHelper; import com.fp.persistence.commondb.helper.FormatDates; import com.fp.persistence.pcustomer.company.TcustCompany; import com.fp.persistence.pcustomer.company.TcustCompanyKey; import com.fp.persistence.pcustomer.gene.TcustPerson; import com.fp.persistence.pcustomer.gene.TcustPersonAddress; import com.fp.persistence.pcustomer.gene.TcustPersonAddressKey; import com.fp.persistence.pcustomer.gene.TcustPersonDetail; import com.fp.persistence.pcustomer.gene.TcustPersonDetailKey; import com.fp.persistence.pcustomer.gene.TcustPersonPhone; import com.fp.persistence.pcustomer.gene.TcustPersonPhoneKey; import com.fp.sessionbeans.helper.Sequence; public class JuridicalPerson extends TransactionRule { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") @Override public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception { try { TcustPersonDetail detallesPersona=(TcustPersonDetail)pSaveRequest.get("PERSON"); TcustCompany company=(TcustCompany)pSaveRequest.get("COMPANY"); List direcciones=(List)pSaveRequest.get("ADDRESSES"); List telefonos=(List)pSaveRequest.get("PHONES"); //Persistiendo el TCUSTPERSON TcustPersonDetailKey pkDetallesPersona=new TcustPersonDetailKey(); Calendar calendarioDateto=Calendar.getInstance(); calendarioDateto.set(Calendar.YEAR, 2999); calendarioDateto.set(Calendar.MONTH, Calendar.DECEMBER); calendarioDateto.set(Calendar.DAY_OF_MONTH,31); calendarioDateto.set(Calendar.MILLISECOND, 0); calendarioDateto.set(Calendar.SECOND, 0); calendarioDateto.set(Calendar.MINUTE, 0); calendarioDateto.set(Calendar.HOUR, 0); //Caso en que la persona es nueva if(detallesPersona.isnew && (detallesPersona.getPk()==null || detallesPersona.getPk().getPersoncode()==null)){ Sequence sequence = new Sequence(); Integer personcode=Integer.valueOf(sequence.getNextValue("PERSONCODE").toString()); TcustPerson persona=new TcustPerson(); if(personcode!=null){ persona.setPk(personcode); pkDetallesPersona.setPersoncode(personcode); //PersistenceHelper.getEntityManager().persist(persona); } pkDetallesPersona.setDateto(FormatDates.getDefaultExpiryTimestamp()); detallesPersona.setPk(pkDetallesPersona); }else{ pkDetallesPersona=detallesPersona.getPk(); } //Persistiendo el TCUSTPERSONDETAIL if(!detallesPersona.isnew){ detallesPersona=(TcustPersonDetail)PersistenceHelper.getEntityManager().merge(detallesPersona); } //PersistenceHelper.getEntityManager().persist(detallesPersona); //Persistiendo el TCUSTCOMPANY //Caso en que la compannia es nueva // if(company.isnew && (company.getPk()==null || company.getPk().getPersoncode()==null)){ TcustCompanyKey pkJuridica=new TcustCompanyKey(); // pkJuridica.setDateto(new Timestamp(calendarioDateto.getTimeInMillis())); pkJuridica.setDateto(FormatDates.getDefaultExpiryTimestamp()); pkJuridica.setPersoncode(pkDetallesPersona.getPersoncode()); company.setPk(pkJuridica); // } /* if(!company.isnew){ company=(TcustCompany)PersistenceHelper.getEntityManager().merge(company); }*/ // PersistenceHelper.getEntityManager().persist(company); //Persistiendo las direcciones for (TcustPersonAddress direccion : direcciones) { if(direccion.getPk()!=null && direccion.getPk().getAddressnumber()!=null && direccion.getPk().getPersoncode()!=null && direccion.getPk().getDateto()!=null){ direccion=PersistenceHelper.getEntityManager().merge(direccion); //PersistenceHelper.getEntityManager().persist(direccion); }else{ TcustPersonAddressKey pkDireccion=new TcustPersonAddressKey(); pkDireccion.setPersoncode(pkDetallesPersona.getPersoncode()); pkDireccion.setDateto(FormatDates.getDefaultExpiryTimestamp()); direccion.setPk(pkDireccion); direccion.setDatefrom(new Timestamp(Calendar.getInstance().getTimeInMillis())); PersistenceHelper.getEntityManager().persist(direccion); } } //Persistiendo los telefonos for (TcustPersonPhone telefono : telefonos) { if(telefono.getPk()!=null && telefono.getPk().getPersoncode()!=null){ telefono=PersistenceHelper.getEntityManager().merge(telefono); //PersistenceHelper.getEntityManager().persist(telefono); }else{ TcustPersonPhoneKey pkTelefono=new TcustPersonPhoneKey(); pkTelefono.setPersoncode(pkDetallesPersona.getPersoncode()); pkTelefono.setDateto(FormatDates.getDefaultExpiryTimestamp()); telefono.setPk(pkTelefono); telefono.setDatefrom(new Timestamp(Calendar.getInstance().getTimeInMillis())); PersistenceHelper.getEntityManager().persist(telefono); } } // PersistenceHelper.getEntityManager().flush(); } catch (Exception e) { return pSaveRequest; } return pSaveRequest; } @Override public SaveRequest reverseProcess(SaveRequest arg0) throws Exception { return arg0; } }