package com.fp.armas.rules.save.solicitudimportacion; import java.math.BigDecimal; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.Query; import com.fp.armas.rules.exception.ControlArmasException; import com.fp.dto.rules.TransactionRule; import com.fp.dto.save.SaveRequest; import com.fp.persistence.commondb.PersistenceHelper; import com.fp.persistence.parmas.fun.TarmRegistroArmas; import com.fp.persistence.parmas.fun.TarmTotalPersona; import com.fp.persistence.parmas.param.TarmComercianteCupo; import com.fp.persistence.parmas.param.TarmTipoArmaExplosivo; import com.fp.persistence.parmas.soli.TarmArmas; import com.fp.persistence.parmas.soli.TarmSolicitudArmas; import com.fp.persistence.parmas.soli.TarmSolicitudTramite; import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail; import com.fp.sessionbeans.helper.Sequence; /** * Ingresa un registro y actualiza la tabla de cupos * @author Andres Cevallos * */ public class CompletarDesaduanizacion extends TransactionRule { private static final long serialVersionUID = 1L; private static final String JPQL_ARMASDELTRAMITESINLOTE = "FROM TarmArmas ARM WHERE " + "ARM.pk IN (select SA.pk.carma from TarmSolicitudArmas SA WHERE SA.pk.csolicitud = :csolicitud) AND ARM.lote IS NULL"; private static final String JPQL_TRAMITEACTUAL = "FROM TarmSolicitudTramite t WHERE t.pk.csolicitud = :noSolicitud"; private static final String JPQL_LOTEDUPLICADO = "FROM TarmArmas ARM WHERE ARM.pk IN " + "(select SA.pk.carma from TarmSolicitudArmas SA WHERE SA.pk.csolicitud = :csolicitud) AND ARM.lote = :lote"; /* (non-Javadoc) * @see com.fp.dto.rules.TransactionRule#normalProcess(com.fp.dto.save.SaveRequest) */ @Override @SuppressWarnings("unchecked") public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception { // try { Boolean requiereDesgloce = (Boolean) pSaveRequest.get("REQUIEREDESGLOCE"); if(!requiereDesgloce){ System.out.println("*****COMPLETAR LA DESADUANIZACION*****"); EntityManager em=PersistenceHelper.getEntityManager(); ListarmasLst=(List)pSaveRequest.getSaveBeanModifiedRecords("DESADUANIZACION"); String noSolicitud=pSaveRequest.get("noSolicitud").toString(); TarmSolicitudTramite solicitudTramiteObj = consultaTramiteActual(em, noSolicitud); Boolean validaDuplicados = Boolean.FALSE; for(Object armaTmp:armasLst){ TarmArmas arma=(TarmArmas)armaTmp; TarmArmas armaDuplicada = consultaLoteDuplicado(em, noSolicitud, arma.getLote()); if(armaDuplicada!=null){ throw new ControlArmasException("ARM-0001", "EL LOTE {0} SE ENCUENTRA DUPLICADO.", armaDuplicada.getLote()); } } for(Object armaTmp:armasLst){ TarmArmas arma=(TarmArmas)armaTmp; em.merge(arma); } em.flush(); if(solicitudTramiteObj!=null){ if(!existeArmasConLotePendienteIngreso(em, solicitudTramiteObj.getPk().getCsolicitud())){ solicitudTramiteObj.setEstadotramite("FIN"); em.merge(solicitudTramiteObj); em.flush(); } } } // } catch (Exception e) { // return pSaveRequest; // // TODO: handle exception // } return pSaveRequest; } @Override public SaveRequest reverseProcess(SaveRequest arg0) throws Exception { return arg0; } public Boolean existeArmasConLotePendienteIngreso(EntityManager pEntityManager,String csolicitud){ Boolean resultado = Boolean.FALSE; Query qry = pEntityManager.createQuery(CompletarDesaduanizacion.JPQL_ARMASDELTRAMITESINLOTE); qry.setParameter("csolicitud", csolicitud); ListarmasPendientesLst = qry.getResultList(); if(armasPendientesLst!=null && !armasPendientesLst.isEmpty()){ resultado = Boolean.TRUE; } return resultado; } public TarmSolicitudTramite consultaTramiteActual(EntityManager pEntityManager,String noSolicitud){ Query qry = pEntityManager.createQuery(CompletarDesaduanizacion.JPQL_TRAMITEACTUAL); qry.setParameter("noSolicitud", noSolicitud); ListsolicitudTramiteLst = qry.getResultList(); if(solicitudTramiteLst!=null && !solicitudTramiteLst.isEmpty()){ return solicitudTramiteLst.get(0); } else{ return null; } } public TarmArmas consultaLoteDuplicado(EntityManager pEntityManager,String csolicitud, String lote){ Query qry = pEntityManager.createQuery(CompletarDesaduanizacion.JPQL_LOTEDUPLICADO); qry.setParameter("csolicitud", csolicitud); qry.setParameter("lote", lote); ListarmasConLoteDuplicadoLst = qry.getResultList(); if(armasConLoteDuplicadoLst!=null && !armasConLoteDuplicadoLst.isEmpty()){ return armasConLoteDuplicadoLst.get(0); } else{ return null; } } }