package com.fp.armas.rules.save.funcionalidad; import java.math.BigDecimal; import java.sql.Timestamp; import java.util.Date; import java.util.List; import javax.persistence.EntityManager; import com.fp.dto.rules.TransactionRule; import com.fp.dto.save.SaveRequest; 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; /** * Persiste las armas vendidas y los registros en caso de que sea venta * @author Andres Cevallos * */ public class Movimiento extends TransactionRule { private static final long serialVersionUID = 1L; /* (non-Javadoc) * @see com.fp.dto.rules.TransactionRule#normalProcess(com.fp.dto.save.SaveRequest) */ @Override public SaveRequest normalProcess(SaveRequest pSaveRequest) throws Exception { EntityManager em = PersistenceHelper.getEntityManager(); //Objetos que vienen llenos TarmArmas arma = (TarmArmas) pSaveRequest.getSaveBeanModifiedObject("VENTAARMAS"); TarmMovimientoArmas tarmMovimientoArmas=(TarmMovimientoArmas) pSaveRequest.getSaveBeanModifiedObject("MOVIMIENTO"); if(pSaveRequest.getSaveBeanModifiedObject("VENTAARMATEMPORAL") !=null ){ TarmVentaArmaTem venta=(TarmVentaArmaTem)pSaveRequest.getSaveBeanModifiedObject("VENTAARMATEMPORAL") ; venta.setPk(getCodigoVentaArmaTemp()); } if(arma==null || (arma.getEstadoventa()!=null && arma.getEstadoventa().equals("PENVEN"))){ return pSaveRequest; } //se llenan TarmRegistroArmas registroArmaComprador= new TarmRegistroArmas(); ListregistroArmaCompradorList = (List)pSaveRequest.getSaveBeanModifiedRecords("TREGISTROARMAS"); ListarmaList = (List)pSaveRequest.getSaveBeanModifiedRecords("VENTAARMAS"); ListtotalPersonaList = (List)pSaveRequest.getSaveBeanModifiedRecords("VENTATOTALPERSONA"); tarmMovimientoArmas.setPk(getCodigoMovimiento()); //Si es venta if(tarmMovimientoArmas.getTipomovimiento().equals("VENT")){//---------------------------------------------------------------------------------------------------------------------------------- //1 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()); } //2. se genera un registro de arma con lo q queda en REG TarmArmas armaQueda= (TarmArmas)arma.cloneMe(); armaQueda.setPk(getCodigoArmas()); armaQueda.setEstado("REG"); armaQueda.setFecharegistro(new java.sql.Date(new Date().getTime())); Integer cantidadQueda=0; BigDecimal pesoQueda=new BigDecimal(0); if(armaQueda.getCantidad()!=null && armaQueda.getCantidad()>0 && armaQueda.getValorAux()>0 ){ cantidadQueda=armaQueda.getCantidad()-armaQueda.getValorAux(); armaQueda.setCantidad(cantidadQueda); } if(armaQueda.getPeso()!=null && armaQueda.getPeso().compareTo(new BigDecimal(0))>0 && armaQueda.getPesoAux()!=null && armaQueda.getPesoAux().compareTo(new BigDecimal(0))>0){ pesoQueda=armaQueda.getPeso().subtract(armaQueda.getPesoAux()); armaQueda.setPeso(pesoQueda); } //3.Nuevo TarmRegistroArma del nuevo propietario registroArmaComprador.setPk(getCodigoRegistro()); registroArmaComprador.setPersoncode(tarmMovimientoArmas.getPersoncodecomprador()); registroArmaComprador.setTiporegistro(tarmMovimientoArmas.getTipomovimiento()); registroArmaComprador.setTiporegistrocodigo("TIPOREGISTRO"); registroArmaComprador.setFcreacion( new java.sql.Date(new Date().getTime())); //4.Nuevo registro Arma con el uevo propietario TarmArmas armaNuevoPropietario= (TarmArmas)arma.cloneMe(); armaNuevoPropietario.setPk(getCodigoArmas()); armaNuevoPropietario.setCregistro(registroArmaComprador.getPk()); armaNuevoPropietario.setEstado("REG"); armaNuevoPropietario.setFecharegistro(new java.sql.Date(new Date().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()); } //5. 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.getValorAux())); 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()); //6. Se genera un registro de ING para el comprador TarmTotalPersona totalPersonaComprador =totalPersona(em,arma.getCtipoarmaexplosivo(),tarmMovimientoArmas.getPersoncodecomprador()); totalPersonaComprador.setCarma(arma.getPk()); totalPersonaComprador.setIngresoegreso("ING"); totalPersonaComprador.setFecha(new Timestamp(new Date().getTime())); if(arma.getCantidad()!=null && arma.getCantidad()>0 && arma.getValorAux()>0 ){ totalPersonaComprador.setCantidadmovimiento(new BigDecimal(arma.getValorAux())); if(totalPersonaComprador.getTotal()==null){ totalPersonaComprador.setTotal(new BigDecimal(0)); } } if(arma.getPeso()!=null && arma.getPeso().compareTo(new BigDecimal(0))>0 && arma.getPesoAux()!=null && arma.getPesoAux().compareTo(new BigDecimal(0))>0){ totalPersonaComprador.setCantidadmovimiento(arma.getPesoAux()); 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()); //registroarmas registroArmaCompradorList.add(registroArmaComprador); //se aniade las armas armaList.add(armaVende);//VEND armaList.add(armaQueda);//REG armaList.add(armaNuevoPropietario);//REG //los registros del total de persona totalPersonaList.add(totalPersonaVendedor); totalPersonaList.add(totalPersonaComprador); arma=null; }else if(tarmMovimientoArmas.getTipomovimiento().equals("CONS") || tarmMovimientoArmas.getTipomovimiento().equals("MATP") || tarmMovimientoArmas.getTipomovimiento().equals("MAT")){//------------------------------------------------------------------------------------------------------------------------------- System.out.println("tipo de movimiento consumidor......"+tarmMovimientoArmas.getTipomovimiento()); if(tarmMovimientoArmas.getTipomovimiento().equals("MATP")){ tarmMovimientoArmas.setTipomovimiento("MAT"); } //1 se genera un registro de arma o explosivo de lo que se consume en estado CONS TarmArmas armaVende= (TarmArmas)arma.cloneMe(); armaVende.setPk(getCodigoArmas()); //armaVende.setEstado("CONS"); armaVende.setEstado(tarmMovimientoArmas.getTipomovimiento()); if(tarmMovimientoArmas.getTipomovimiento().equals("MAT")){ armaVende.setEstado("MATP"); } 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()); } //2. se genera un registro de arma o explosivo con lo q queda en REG TarmArmas armaQueda= (TarmArmas)arma.cloneMe(); armaQueda.setPk(getCodigoArmas()); armaQueda.setEstado("REG"); armaQueda.setFecharegistro(new java.sql.Date(new Date().getTime())); Integer cantidadQueda=0; BigDecimal pesoQueda=new BigDecimal(0); if(armaQueda.getCantidad()!=null && armaQueda.getCantidad()>0 && armaQueda.getValorAux()>0 ){ cantidadQueda=armaQueda.getCantidad()-armaQueda.getValorAux(); armaQueda.setCantidad(cantidadQueda); } if(armaQueda.getPeso()!=null && armaQueda.getPeso().compareTo(new BigDecimal(0))>0 && armaQueda.getPesoAux()!=null && armaQueda.getPesoAux().compareTo(new BigDecimal(0))>0){ pesoQueda=armaQueda.getPeso().subtract(armaQueda.getPesoAux()); armaQueda.setPeso(pesoQueda); } //3. Se genera un registro TarmTotalPersona del que esta consumiendo se resta 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.getValorAux())); 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()); //se aniade las armas armaList.add(armaVende);//CONS arma que consume armaList.add(armaQueda);//REG lo que queda //los registros del total de persona totalPersonaList.add(totalPersonaVendedor);//total que le queda arma=null; }else if(tarmMovimientoArmas.getTipomovimiento().equals("TRASL")){//-------------------------------------------------------------------------------------------------------------------- //1. se genera un registro de arma con lo q queda en REG TarmArmas armaQueda= (TarmArmas)arma.cloneMe(); armaQueda.setPk(getCodigoArmas()); armaQueda.setEstado("REG"); armaQueda.setFecharegistro(new java.sql.Date(new Date().getTime())); Integer cantidadQueda=0; BigDecimal pesoQueda=new BigDecimal(0); if(armaQueda.getCantidad()!=null && armaQueda.getCantidad()>0 && armaQueda.getValorAux()>0 ){ cantidadQueda=armaQueda.getCantidad()-armaQueda.getValorAux(); armaQueda.setCantidad(cantidadQueda); } if(armaQueda.getPeso()!=null && armaQueda.getPeso().compareTo(new BigDecimal(0))>0 && armaQueda.getPesoAux()!=null && armaQueda.getPesoAux().compareTo(new BigDecimal(0))>0){ pesoQueda=armaQueda.getPeso().subtract(armaQueda.getPesoAux()); armaQueda.setPeso(pesoQueda); } //2.Nuevo TarmRegistroArma del nuevo propietario QUE SERIA LA MISMA PERSONA SE DIVIDE el explosivo registroArmaComprador.setPk(getCodigoRegistro()); registroArmaComprador.setPersoncode(tarmMovimientoArmas.getPersoncodevendedor()); registroArmaComprador.setTiporegistro(tarmMovimientoArmas.getTipomovimiento()); registroArmaComprador.setTiporegistrocodigo("TIPOREGISTRO"); registroArmaComprador.setFcreacion( new java.sql.Date(new Date().getTime())); //4.Nuevo registro Arma con el uevo propietario TarmArmas armaNuevoPropietario= (TarmArmas)arma.cloneMe(); armaNuevoPropietario.setPk(getCodigoArmas()); armaNuevoPropietario.setCregistro(registroArmaComprador.getPk()); armaNuevoPropietario.setEstado("REG"); armaNuevoPropietario.setFecharegistro(new java.sql.Date(new Date().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()); } //registroarmas registroArmaCompradorList.add(registroArmaComprador); //se aniade las armas armaList.add(armaQueda);//REG se divide el explosivo armaList.add(armaNuevoPropietario);//REG arma=null; } return pSaveRequest; } 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){ return tarmTotalPersonas.get(0); }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; } } @Override public SaveRequest reverseProcess(SaveRequest arg0) throws Exception { return arg0; } /** * Metodo que devuelve la secuencia de un cliente. * @return Codigo del nuevo cliente. * @throws Exception */ private Long getCodigoRegistro() throws Exception { Sequence sequence = new Sequence(); Long codigo = sequence.getNextValue("CREGISTRO").longValue(); return codigo; } private Integer getCodigoVentaArmaTemp() throws Exception { Sequence sequence = new Sequence(); Integer codigo = sequence.getNextValue("TARMVENTAARMATEM").intValue(); return codigo; } /** * Obtiene el secuencial de Armas * @return * @throws Exception */ private String getCodigoArmas() throws Exception { Sequence sequence = new Sequence(); String codigoArma = sequence.getNextValue("CARMA").toString(); return codigoArma; } /** * Obtiene el secuencial de movimientos * @return * @throws Exception */ 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; } }