package com.fp.armas.task.traspasodominio; import java.math.BigDecimal; import java.sql.Timestamp; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.persistence.EntityManager; import com.fp.armas.rules.exception.ControlArmasException; import com.fp.persistence.commondb.PersistenceHelper; import com.fp.persistence.parmas.fun.TarmMovimientoArmas; import com.fp.persistence.parmas.fun.TarmRegistroArmas; import com.fp.persistence.parmas.fun.TarmTotalPersona; import com.fp.persistence.parmas.fun.TarmVentaArmaTem; import com.fp.persistence.parmas.param.TarmTipoArmaExplosivo; import com.fp.persistence.parmas.soli.TarmArmas; import com.fp.sessionbeans.helper.Sequence; import com.fp.simple.action.TaskAction; /** * Clase que se encarga de buscar el grupo para asignar la tarea * una tarea. * * @version 2.1 */ public class TraspasoDominio extends TaskAction { /* * (non-Javadoc) * * @see com.fp.simple.action.TaskAction#assignOwner(com.fp.dto.Request) */ @SuppressWarnings({ "unchecked", "deprecation" }) @Override public void assignOwner(Object pParam) throws Exception { EntityManager em=PersistenceHelper.getEntityManager(); System.out.println("Ingresa a traspaso dominio"); HashMap m = (HashMap) pParam; Map mrequest = (Map) m.get("request"); if (mrequest.get("csolicitud") == null) { m.put("grupo",null); throw new ControlArmasException("BPM-0014", "SIN CODIGO", ""); } String csolicitud=mrequest.get("csolicitud").toString(); TarmArmas arma= TarmArmas.find(em, csolicitud); Listlistaventa= em.createQuery("select p from TarmVentaArmaTem p where p.carma=:carma and p.estado=:estado") .setParameter("carma", arma.getPk()) .setParameter("estado", "PENDIENTE") .getResultList(); for (TarmVentaArmaTem item : listaventa) { item.setEstado("APROBADO"); em.merge(item); } arma.setEstadoventa(null); TarmRegistroArmas registro = TarmRegistroArmas.find(em, arma.getCregistro()); //1nuevo TarmRegistroArma del nuevo propietario TarmRegistroArmas registroArmaComprador= new TarmRegistroArmas(); registroArmaComprador.setPk(getCodigoRegistro()); registroArmaComprador.setPersoncode(listaventa.get(0).getPersoncodigo()); registroArmaComprador.setTiporegistro("VENT"); registroArmaComprador.setTiporegistrocodigo("TIPOREGISTRO"); registroArmaComprador.setFcreacion( new java.sql.Date(new Date().getTime())); em.persist(registroArmaComprador); //2 TarmMovimientoArmas tarmMovimientoArmas=new TarmMovimientoArmas(); tarmMovimientoArmas.setPk(getCodigoMovimiento()); tarmMovimientoArmas.setCarma(arma.getPk()); tarmMovimientoArmas.setFactura(listaventa.get(0).getFactura()); tarmMovimientoArmas.setNoregistro(listaventa.get(0).getNoregistra()); tarmMovimientoArmas.setFecha(new Timestamp(new Date().getTime())); tarmMovimientoArmas.setPersoncodecomprador(listaventa.get(0).getPersoncodigo()); tarmMovimientoArmas.setPersoncodevendedor(registro.getPersoncode()); tarmMovimientoArmas.setTipomovimientocodigo("TIPOMOVIMIENTO"); tarmMovimientoArmas.setTipomovimiento("VENT"); tarmMovimientoArmas.setJustificacion(listaventa.get(0).getJustificacion()); em.persist(tarmMovimientoArmas);em.flush(); //3 Se genera un registro TarmTotalPersona del que vende TarmTotalPersona totalPersonaVendedor =totalPersona(em,arma.getCtipoarmaexplosivo(),tarmMovimientoArmas.getPersoncodevendedor()); totalPersonaVendedor.setCarma(arma.getPk()); totalPersonaVendedor.setIngresoegreso("EGR"); totalPersonaVendedor.setFecha(new Timestamp(new Date().getTime())); //if(arma.getCantidad()!=null && arma.getCantidad()>0 && arma.getValorAux()>0 ){ totalPersonaVendedor.setCantidadmovimiento(new BigDecimal(arma.getCantidad())); if(totalPersonaVendedor.getTotal()==null){ totalPersonaVendedor.setTotal(new BigDecimal(arma.getCantidad())); } //} // if(arma.getPeso()!=null && arma.getPeso().compareTo(new BigDecimal(0))>0 && // arma.getPesoAux()!=null && arma.getPesoAux().compareTo(new BigDecimal(0))>0){ // totalPersonaVendedor.setCantidadmovimiento(arma.getPesoAux()); // if(totalPersonaVendedor.getTotal()==null){ // totalPersonaVendedor.setTotal(arma.getPeso()); // } // } totalPersonaVendedor.setCmovimiento(tarmMovimientoArmas.getPk()); totalPersonaVendedor.setSaldoanterior(totalPersonaVendedor.getTotal()); totalPersonaVendedor.setTotal(totalPersonaVendedor.getTotal().subtract(totalPersonaVendedor.getCantidadmovimiento())); totalPersonaVendedor.setPk(getCtotal()); em.merge(totalPersonaVendedor);em.flush(); //3.1. Se genera un registro de ING para el comprador TarmTotalPersona totalPersonaComprador =totalPersona(em,arma.getCtipoarmaexplosivo(),tarmMovimientoArmas.getPersoncodecomprador()); totalPersonaComprador.setCarma(arma.getPk()); totalPersonaComprador.setIngresoegreso("ING"); Date fechaActual1=new Date(); fechaActual1.setSeconds(fechaActual1.getSeconds()+2); totalPersonaComprador.setFecha(new Timestamp(fechaActual1.getTime())); totalPersonaComprador.setCantidadmovimiento(new BigDecimal(arma.getCantidad())); if(totalPersonaComprador.getTotal()==null){ totalPersonaComprador.setTotal(new BigDecimal(0)); } totalPersonaComprador.setCmovimiento(tarmMovimientoArmas.getPk()); totalPersonaComprador.setSaldoanterior(totalPersonaComprador.getTotal()); totalPersonaComprador.setTotal(totalPersonaComprador.getTotal().add(totalPersonaComprador.getCantidadmovimiento())); totalPersonaComprador.setPk(getCtotal()); em.merge(totalPersonaComprador); //4 se genera un registro de arma con lo que se vende TarmArmas armaVende= (TarmArmas)arma.cloneMe(); armaVende.setPk(getCodigoArmas()); armaVende.setEstado("VEND"); armaVende.setFecharegistro(new java.sql.Date(new Date().getTime())); if(armaVende.getCantidad()!=null && armaVende.getCantidad()>0 && armaVende.getValorAux()>0 ){ armaVende.setCantidad(armaVende.getValorAux()); } if(armaVende.getPeso()!=null && armaVende.getPeso().compareTo(new BigDecimal(0))>0 && armaVende.getPesoAux()!=null && armaVende.getPesoAux().compareTo(new BigDecimal(0))>0){ armaVende.setPeso(armaVende.getPesoAux()); } em.persist(armaVende); //4.1 Nuevo registro Arma con el nuevo propietario TarmArmas armaNuevoPropietario= (TarmArmas)arma.cloneMe(); armaNuevoPropietario.setPk(getCodigoArmas()); armaNuevoPropietario.setCregistro(registroArmaComprador.getPk()); armaNuevoPropietario.setEstado("REG"); Date fechaActual=new Date(); fechaActual.setSeconds(fechaActual.getSeconds()+2); armaNuevoPropietario.setFecharegistro(new java.sql.Date(fechaActual.getTime())); if(armaNuevoPropietario.getCantidad()!=null && armaNuevoPropietario.getCantidad()>0 && armaNuevoPropietario.getValorAux()>0 ){ armaNuevoPropietario.setCantidad(armaNuevoPropietario.getValorAux()); } if(armaNuevoPropietario.getPeso()!=null && armaNuevoPropietario.getPeso().compareTo(new BigDecimal(0))>0 && armaNuevoPropietario.getPesoAux()!=null && armaNuevoPropietario.getPesoAux().compareTo(new BigDecimal(0))>0){ armaNuevoPropietario.setPeso(armaNuevoPropietario.getPesoAux()); } em.persist(armaNuevoPropietario); } private String getCodigoArmas() throws Exception { Sequence sequence = new Sequence(); String codigoArma = sequence.getNextValue("CARMA").toString(); return codigoArma; } private Long getCodigoRegistro() throws Exception { Sequence sequence = new Sequence(); Long codigo = sequence.getNextValue("CREGISTRO").longValue(); return codigo; } private String getCodigoMovimiento() throws Exception { Sequence sequence = new Sequence(); String codigoArma = sequence.getNextValue("CMOVIMIENTO").toString(); return codigoArma; } private String getCtotal() throws Exception { Sequence sequence = new Sequence(); String codigoArma = sequence.getNextValue("CTOTAL").toString(); return codigoArma; } public TarmTotalPersona totalPersona(EntityManager em,String ctipoarmaexplosivo,Integer personcodigo) throws Exception{ TarmTipoArmaExplosivo armaExplosivo= TarmTipoArmaExplosivo.find(em,ctipoarmaexplosivo); String sql ="select t from TarmTotalPersona t where t.clase='"+armaExplosivo.getClase()+"' and t.tipoarmaexplosivo='"+armaExplosivo.getTipoarmaexplosivo()+"' and t.unidadmedidapeso='"+armaExplosivo.getUnidadmedidapeso()+"' " + " and t.personcodigo="+personcodigo+" and t.fecha =(select max(t1.fecha) from TarmTotalPersona t1" + " where t1.clase='"+armaExplosivo.getClase()+"' and t1.tipoarmaexplosivo='"+armaExplosivo.getTipoarmaexplosivo()+"' and t1.unidadmedidapeso='"+armaExplosivo.getUnidadmedidapeso()+"' " + " and t1.personcodigo="+personcodigo+")"; System.out.println("query totalPersoan....:"+sql); ListtarmTotalPersonas= em.createQuery(sql,TarmTotalPersona.class).getResultList(); if(tarmTotalPersonas!=null && tarmTotalPersonas.size()>0){ TarmTotalPersona total=(TarmTotalPersona)tarmTotalPersonas.get(0).cloneMe(); total.setPk(null); return total; }else{ TarmTotalPersona totalPersona= new TarmTotalPersona(); totalPersona.setClase(armaExplosivo.getClase()); totalPersona.setClasecodigo("CLASE"); totalPersona.setTipoarmaexplosivo(armaExplosivo.getTipoarmaexplosivo()); totalPersona.setTipoarmaexplosivocodigo("TIPOARMAEXPLOSIVO"); totalPersona.setUnidadmedidapeso(armaExplosivo.getUnidadmedidapeso()); totalPersona.setUnidadmedidapesocodigo("UNIDADMEDIDA"); totalPersona.setPersoncodigo(personcodigo); totalPersona.setTotal(null); totalPersona.setSaldoanterior(new BigDecimal(0)); totalPersona.setIngresoegresocodigo("ESINGRESOEGRESO"); return totalPersona; } } }