package com.fp.armas.rules.save.webservices; import static com.fp.armas.rules.query.webservices.ConsultaImpresionProceso.QUERY_COLA_SOLICITUD; import java.sql.Timestamp; import java.util.Date; import java.util.List; import javax.persistence.Query; import com.fp.common.logger.APPLogger; import com.fp.dto.rules.TransactionRule; import com.fp.dto.save.SaveRequest; import com.fp.persistence.commondb.PersistenceHelper; import com.fp.persistence.commondb.exception.CommondbException; import com.fp.persistence.commondb.helper.FormatDates; import com.fp.persistence.parmas.inte.TarmColadeImpresion; import com.fp.persistence.parmas.soli.TarmDocumentoHabilitante; import com.fp.persistence.parmas.soli.TarmSolicitud; import com.fp.persistence.pcustomer.company.TcustCompany; import com.fp.persistence.pcustomer.company.TcustCompanyKey; import com.fp.persistence.pcustomer.gene.TcustPersonDetail; import com.fp.persistence.pcustomer.gene.TcustPersonDetailKey; import com.fp.persistence.pcustomer.people.TcustPeople; import com.fp.persistence.pcustomer.people.TcustPeopleKey; import com.fp.persistence.pgeneral.image.TgeneFiles; import com.fp.persistence.pgeneral.image.TgeneFilesDetail; import com.fp.persistence.pgeneral.image.TgeneFilesDetailKey; import com.fp.sessionbeans.helper.Sequence; /** * Actualiza los datos del documento habilitante enviado * @author dcruz * */ public class DocumentoDatos extends TransactionRule { private static final long serialVersionUID = -951465699701916612L; public static final String SQLDOCUMENTOCOLAIMPRESION="SELECT o FROM TarmColadeImpresion o" + " WHERE o.cdocumento IN (SELECT i.pk FROM TarmDocumentoHabilitante i " + " WHERE i.numerodocumento =:numerodocumento)"; /** * Actualizamos fecha de impresión en la cola de impresion encontrada, actualizamos la foto de la persona o el logo de la companía según sea el caso */ @SuppressWarnings("unchecked") @Override public SaveRequest normalProcess(SaveRequest pRequest) throws Exception { System.out.println(".........ACTUALIZA LOS DATOS DEL TARMCOLADEIMPRESION..................."); String respuesta = "0"; try { byte[] foto = (byte[]) pRequest.get("FOTO"); String numerosolicitud = (String) pRequest.get("CODIGOSOLICITUD");//numero de solicitud String codigotarjeta = (String) pRequest.get("CODIGOTARJETA"); Date fechaimpresion = (Date) pRequest.get("FECHAIMPRESION"); // System.out.println(SQLDOCUMENTOCOLAIMPRESION+" "+numerosolicitud); Query query = PersistenceHelper.getEntityManager().createQuery(SQLDOCUMENTOCOLAIMPRESION); query.setParameter("numerodocumento", numerosolicitud); List ltarmcoladeimpresion = query.getResultList(); if(ltarmcoladeimpresion != null && !ltarmcoladeimpresion.isEmpty()){//siempre que es un permiso para imprimir en la cola de impresion recupera uno TarmColadeImpresion coladeImpresion = ltarmcoladeimpresion.iterator().next(); coladeImpresion.setFechaimpresion(new Timestamp(fechaimpresion.getTime())); coladeImpresion.setCodigotarjeta(codigotarjeta); coladeImpresion.setEstadoimpresion("IMPR"); PersistenceHelper.getEntityManager().merge(coladeImpresion); System.out.println("ACTIALIZA LA COLA DE IMPRESION.."); TarmDocumentoHabilitante documentoHabilitante = TarmDocumentoHabilitante.find(PersistenceHelper.getEntityManager(), coladeImpresion.getCdocumento()); TarmSolicitud solicitud = TarmSolicitud.find(PersistenceHelper.getEntityManager(), documentoHabilitante.getCsolicitud()); TcustPersonDetail personDetail = TcustPersonDetail.find(PersistenceHelper.getEntityManager(), new TcustPersonDetailKey(solicitud.getPersoncode(), FormatDates.getDefaultExpiryTimestamp())); TgeneFilesDetail fotoLogo = obtenerFoto(personDetail); if(fotoLogo.getPk() == null){// es un registro nuevo TcustCompany company = null; TcustPeople people = null; if(fotoLogo.getModifiedData().get("DATOASOCIADO") != null && fotoLogo.getModifiedData().get("DATOASOCIADO") instanceof TcustCompany){ company = (TcustCompany) fotoLogo.getModifiedData().get("DATOASOCIADO"); } else if(fotoLogo.getModifiedData().get("DATOASOCIADO") != null && fotoLogo.getModifiedData().get("DATOASOCIADO") instanceof TcustPeople){ people = (TcustPeople) fotoLogo.getModifiedData().get("DATOASOCIADO"); } TgeneFiles tgeneFiles = new TgeneFiles(getCode()); PersistenceHelper.getEntityManager().persist(tgeneFiles); fotoLogo.setPk(new TgeneFilesDetailKey(tgeneFiles.getPk(), FormatDates.getDefaultExpiryTimestamp())); fotoLogo.setDatefrom(new Timestamp(System.currentTimeMillis())); fotoLogo.setName("FOTO"); fotoLogo.setCapturedate(new java.sql.Date(System.currentTimeMillis())); fotoLogo.setContenttype("image/jpeg"); fotoLogo.setDescription("LOGO EMPRESA"); fotoLogo.setImage(foto); fotoLogo.setExtension("jpg"); fotoLogo.setImagesize(foto.length); PersistenceHelper.getEntityManager().persist(fotoLogo); System.out.println("INSERTA LA FOTO....."); //Actualizo en la persona o la compania segun sea el caso if(company != null){ company.setLogo(tgeneFiles.getPk()); PersistenceHelper.getEntityManager().merge(company); } else if(people != null){ people.setPhotocode(tgeneFiles.getPk()); PersistenceHelper.getEntityManager().merge(people); } } else{//actualizo el registro anterior y genero el historial TgeneFilesDetail tgeneFilesDetail = new TgeneFilesDetail(new TgeneFilesDetailKey(fotoLogo.getPk().getCode(), new Timestamp(System.currentTimeMillis()))); tgeneFilesDetail.setDatefrom(fotoLogo.getDatefrom()); tgeneFilesDetail.setName(fotoLogo.getName()); tgeneFilesDetail.setCapturedate(fotoLogo.getCapturedate()); tgeneFilesDetail.setContenttype(fotoLogo.getContenttype()); tgeneFilesDetail.setDescription(fotoLogo.getDescription()); tgeneFilesDetail.setImage(fotoLogo.getImage()); tgeneFilesDetail.setExtension(fotoLogo.getExtension()); tgeneFilesDetail.setImagesize(fotoLogo.getImagesize()); PersistenceHelper.getEntityManager().persist(tgeneFilesDetail); fotoLogo.setImage(foto); fotoLogo.setImagesize(foto.length); PersistenceHelper.getEntityManager().merge(fotoLogo); System.out.println("ACTUALIZA LA FOTO....."); } PersistenceHelper.getEntityManager().flush(); } } catch (Throwable e) { respuesta = "2"; APPLogger.getLogger().error(e.getMessage(), e); } pRequest.getResponse().put("RESPONSESTATUS", respuesta); return pRequest; } @Override public SaveRequest reverseProcess(SaveRequest pRequest) throws Exception { return pRequest; } /** * Retorna la foto de la persona si es que esta existe * @param personDetail * @return El detalle del achivo imagen que se ha guardado, o un archivo vacío sin pk para que pueda ser guardado en la base de datos * @throws CommondbException * @throws Exception */ private TgeneFilesDetail obtenerFoto(TcustPersonDetail personDetail) throws CommondbException, Exception{ TcustCompany company = null; TcustPeople people = null; TgeneFilesDetail result = null; switch(personDetail.getIdentification().length()){ case 13: company = TcustCompany.find(PersistenceHelper.getEntityManager(), new TcustCompanyKey(personDetail.getPk().getPersoncode(), FormatDates.getDefaultExpiryTimestamp())); break; default: people = TcustPeople.find(PersistenceHelper.getEntityManager(), new TcustPeopleKey(personDetail.getPk().getPersoncode(), FormatDates.getDefaultExpiryTimestamp())); break; } if(company != null){ result = TgeneFilesDetail.find(PersistenceHelper.getEntityManager(), new TgeneFilesDetailKey(company.getLogo(), FormatDates.getDefaultExpiryTimestamp())); // result.getModifiedData().put("DATOASOCIADO", company); } else if(people != null){ result = TgeneFilesDetail.find(PersistenceHelper.getEntityManager(), new TgeneFilesDetailKey(people.getPhotocode(), FormatDates.getDefaultExpiryTimestamp())); // result.getModifiedData().put("DATOASOCIADO", people); } if(result == null){ result = new TgeneFilesDetail(); } result.getModifiedData().put("DATOASOCIADO", company != null ? company : people); return result; } /** * Retorna el secuencial para ingresar en la tabla {@link TgeneFiles} * @return * @throws Exception */ private Integer getCode() throws Exception{ Sequence secuenciaCode = new Sequence(); return Integer.valueOf(secuenciaCode.getNextValue("CODE").toString()); } }