package com.fp.frontend.controller.armas.funcionalidad; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import org.primefaces.event.SelectEvent; import com.fp.dto.Request; import com.fp.dto.Response; import com.fp.dto.query.DtoQuery; import com.fp.dto.query.Filter; import com.fp.dto.query.SubQuery; import com.fp.dto.save.DtoSave; import com.fp.frontend.controller.AbstractController; import com.fp.frontend.controller.armas.parametros.VentaTotalPersonaController; import com.fp.frontend.controller.pcustomer.PersonDetailController; import com.fp.frontend.controller.pcustomer.lov.PersonLovController; import com.fp.frontend.controller.pgeneral.gene.CatalogDetailController; import com.fp.frontend.helper.MessageHelper; import com.fp.frontend.utility.MsgControlArmas; import com.fp.persistence.parmas.fun.TarmMovimientoArmas; import com.fp.persistence.parmas.soli.TarmArmas; import com.fp.persistence.pcustomer.gene.TcustPersonDetail; import com.fp.persistence.pgeneral.gene.TgeneCatalogDetail; import com.fp.persistence.pgeneral.safe.TsafeUserDetail; /** * @author Andres Cevallos * Clase Controladora la cual maneja la venta de armas */ @ManagedBean @ViewScoped public class VentaController extends AbstractController { public VentaController() throws Exception { super(TarmArmas.class); } private static final long serialVersionUID = 1L; @ManagedProperty(value = "#{movimientoController}") private MovimientoController movimientoController; @ManagedProperty(value = "#{registroArmController}") private RegistroArmController registroArmController; @ManagedProperty(value = "#{ventaTotalPersonaController}") private VentaTotalPersonaController ventaTotalPersonaController; private String loteFilter; /** * Lisat de personas */ private List lperson; private TarmMovimientoArmas movimientoArma; /** * Persona Cliente a la cual se le vende un arma */ private TcustPersonDetail compradorArma; /** * Cantidad de producto en venta */ private Integer cantidad; /** * Peso del producto en venta */ private BigDecimal peso; /** * Referencia de los Movimientos en el catalogo */ private List lmovimientos; /** * Lista referenciada al catalogo */ private List lcatalog; /** * Referencia del cliente en el catalogo */ private TgeneCatalogDetail cdetalle; /** * Detalle de la persona que vende el arma */ private TcustPersonDetail persondetail; /** * Fecha actual del sistema */ private Date fecha; @PostConstruct private void postconstruct() { this.init(); querydatabase(); } private void init() { try { peso=null; cantidad=null; this.lrecord = new ArrayList<>(); this.beanalias = "VENTAARMAS"; // tipomovimiento=false; TsafeUserDetail tsafeUserDetail=(TsafeUserDetail)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("TSAFEUSERDETAIL"); this.persondetail=PersonDetailController.find(tsafeUserDetail.getPk().getPersoncode().toString()); lmovimientos = CatalogDetailController.find("TIPOREGISTRO","MOV");//catalogo de movimientos cdetalle = CatalogDetailController.findxCodigoCodcatalogo(getPersondetail().getIdentificationcatalog(),getPersondetail().getIdentificationcatalogcode()); fecha = new Date(); lcatalog=CatalogDetailController.find("IDENTIFICATION"); } catch (Exception e) { MessageHelper.setMessageError(e); } } @SuppressWarnings("unchecked") @Override public void querydatabase() { try { DtoQuery dto = super.getDtoQuery(true); SubQuery subqueryMarca= new SubQuery("TgeneCatalogDetail","description","marca","i.pk.catalog=t.marca and i.pk.catalogcode=t.marcacodigo"); dto.addSubQuery(subqueryMarca); SubQuery subqueryColor= new SubQuery("TgeneCatalogDetail","description","color","i.pk.catalog=t.color and i.pk.catalogcode=t.colorcodigo"); dto.addSubQuery(subqueryColor); SubQuery subqueryEstado= new SubQuery("TgeneCatalogDetail","description","estado","i.pk.catalog=t.estado and i.pk.catalogcode=t.estadocodigo"); dto.addSubQuery(subqueryEstado); SubQuery subqueryLonguitud= new SubQuery("TgeneCatalogDetail","description","longitud","i.pk.catalog=(select o.longitud from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo) and " + " i.pk.catalogcode=(select o.longitudcodigo from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo)"); dto.addSubQuery(subqueryLonguitud); SubQuery subqueryClase= new SubQuery("TgeneCatalogDetail","description","clase","i.pk.catalog=(select o.clase from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo) and " + " i.pk.catalogcode=(select o.clasecodigo from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo)"); dto.addSubQuery(subqueryClase); SubQuery subqueryTipoArma= new SubQuery("TgeneCatalogDetail","description","tipoarmaexplosivo","i.pk.catalog=(select o.tipoarmaexplosivo from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo) and " + " i.pk.catalogcode=(select o.tipoarmaexplosivocodigo from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo)"); dto.addSubQuery(subqueryTipoArma); SubQuery subqueryCalibre= new SubQuery("TgeneCatalogDetail","description","calibre","i.pk.catalog=(select o.calibre from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo) and " + " i.pk.catalogcode=(select o.calibrecodigo from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo)"); dto.addSubQuery(subqueryCalibre); SubQuery subqueryUnidad= new SubQuery("TgeneCatalogDetail","description","unidadmedidapeso","i.pk.catalog=(select o.unidadmedidapeso from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo) and " + " i.pk.catalogcode=(select o.unidadmedidapesocodigo from TarmTipoArmaExplosivo o where o.pk=t.ctipoarmaexplosivo)"); dto.addSubQuery(subqueryUnidad); dto.setOrderby("lote, ctipoarmaexplosivo,cregistro"); Filter filtro=new Filter(); String filtrofecha= "t.fecharegistro=(select max(ta.fecharegistro) from TarmArmas ta where t.codigoarma=ta.codigoarma and t.cregistro=ta.cregistro) " + " and t.estado in("+MsgControlArmas.getProperty("codigo_estado_arma_busqueda_venta")+") "//'REG','REN','APTA','DEV','ECO','COLE' + " and cregistro in (select reg.pk from TarmRegistroArmas reg where reg.personcode ='"+persondetail.getPk().getPersoncode()+"' )" + " and (t.peso>0 or t.cantidad>0)"; if(loteFilter!=null && !loteFilter.isEmpty()){ filtrofecha+=" and UPPER(t.lote) like '"+loteFilter+"'"; } filtro.setSql(filtrofecha); dto.addFiltro(filtro); HashMap mtables = new HashMap(); mtables.put(this.beanalias, dto); // permite adicionar mas de una tabla. Request request = this.callerhelper.getRequest(); request.setQueryTables(mtables); // request.put("queryalias", "ARMASCOMPLETE"); Response resp = this.callerhelper.executeQuery(request); if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) { this.lrecord = new ArrayList(); MessageHelper.setMessageError(resp); } else { this.lrecord = (List) resp.get(this.beanalias); super.postQuery(this.lrecord); } } catch (Throwable e) { MessageHelper.setMessageError(e); } } /** * Cambia el valor del movimiento de Venta a Materia Prima */ public void changeType(){ compradorArma=new TcustPersonDetail(); } /** * Valida que la fecha de venta no seaa superior a la fecha del sistema * @param fech */ public void validarfecha(Date fech){ if(fech.getTime()>(new Date()).getTime()){ fecha=new Date(); } } /** * Actualiza la informacion en el lrecord */ @Override public void update(){ try { //ACTUALIZA ELRESTO DE DATOS DE LA TABLA DE MOVIMIENTO this.movimientoArma.setPersoncodevendedor(persondetail.getPk().getPersoncode()); this.movimientoArma.getModifiedData().put("personaVemdedor", persondetail); if(movimientoArma.getTipomovimiento().equals("VENT")){ if(compradorArma!=null && compradorArma.getPk()!=null){ this.movimientoArma.setPersoncodecomprador(compradorArma.getPk().getPersoncode()); this.movimientoArma.getModifiedData().put("personaComprador", compradorArma); } else{ MessageHelper.setMessageWarn("DEBE INGRESAR UN CLIENTE"); return; } }else{ this.movimientoArma.getModifiedData().put("personaComprador", persondetail); this.movimientoArma.setPersoncodecomprador(persondetail.getPk().getPersoncode());//es el mismo si el tipo movimientoArma.getTipomovimiento() es diferente de nenta } save(); } catch (Exception e) { e.printStackTrace(); } } /** * Valida que la cantidad que se desea vender no sea superior a la cantidad maxima que se tiene * @param cantidad */ public void validarCantidadMexima(Integer cantidad){ this.peso=null; if(cantidad==null || cantidad==0 || cantidad<0|| cantidad.compareTo(record.getCantidad())>0){ this.cantidad=record.getCantidad(); } } /** * Valida que la cantidad que se desea vender no sea superior a la cantidad maxima que se tiene * @param peso */ public void validarPesoMexima(BigDecimal peso){ this.cantidad=null; if(peso==null || peso.compareTo(new BigDecimal(0))==0|| peso.compareTo(new BigDecimal(0))<0|| peso.compareTo(record.getPeso())>0){ this.peso=getRecord().getPeso(); } } /** * Crea un registro de arma * @param arm */ public void create(TarmArmas arm){ try { cantidad=arm.getCantidad(); peso=arm.getPeso(); //crea un movimiento para la tabla TarmMovimientoArmas movimientoArma= new TarmMovimientoArmas(); //crea a la persona compradora compradorArma=new TcustPersonDetail(); // tipomovimiento=false; } catch (Exception e) { e.printStackTrace(); } } public TgeneCatalogDetail getCdetalle() { return cdetalle; } public void setCdetalle(TgeneCatalogDetail cdetalle) { this.cdetalle = cdetalle; } /** * Abre el Lov de Persona */ public void openPersonLov() { Map> params = new HashMap<>(); PersonLovController.openLov(params); } /** * Carga los datos que se devuelven en el Lov de personas * @param event * @throws Exception */ public void onReturnPersonLov(SelectEvent event) throws Exception { compradorArma= (TcustPersonDetail) event.getObject(); } /** * Graba los registros en la base de datos */ @Override public void save() { try { //actualiza el movimiento this.movimientoArma.setCarma(record.getPk()); this.movimientoArma.setTipomovimientocodigo("TIPOMOVIMIENTO"); this.movimientoArma.setFecha(new java.sql.Timestamp(fecha.getTime()) ); this.movimientoController.create(); this.movimientoController.setRecord(movimientoArma); this.movimientoController.getRecord().setIsnew(true); this.movimientoController.update(); //actualiza el arma //this.record.setPk(null); if(cantidad!=null){ this.record.setValorAux(cantidad); } if(peso!=null){ this.record.setPesoAux(peso); } super.update(); Request request = this.callerhelper.getRequest(); HashMap msave = new HashMap(); DtoSave dtosaveRegistro = this.registroArmController.getDtoSave(true); dtosaveRegistro.setPosition(1); msave.put(registroArmController.getBeanalias(), dtosaveRegistro); DtoSave dtosaveMovimiento = this.movimientoController.getDtoSave(true); dtosaveMovimiento.setPosition(2); msave.put(movimientoController.getBeanalias(), dtosaveMovimiento);//1 DtoSave dtosaveTotalPersona = this.ventaTotalPersonaController.getDtoSave(true); dtosaveTotalPersona.setPosition(3); msave.put(ventaTotalPersonaController.getBeanalias(), dtosaveTotalPersona); DtoSave dtosaveArma = this.getDtoSave(true); dtosaveArma.setPosition(4); msave.put(this.getBeanalias(), dtosaveArma);//2 request.setSaveTables(msave); Response resp = this.callerhelper.executeSave(request); if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) { this.ventaTotalPersonaController.postCommit(resp); this.movimientoController.postCommit(resp); this.registroArmController.postCommit(resp); this.postCommit(resp); MessageHelper.setMessageInfo(resp); } else { MessageHelper.setMessageError(resp); } } catch (Throwable e) { MessageHelper.setMessageError(e); } querydatabase(); } /* (non-Javadoc) * @see com.fp.frontend.controller.AbstractController#postCommit(com.fp.dto.Response) */ @Override public void postCommit(Response response) throws Exception { super.postCommit(response); } public TcustPersonDetail getPersondetail() { return persondetail; } public void setPersondetail(TcustPersonDetail persondetail) { this.persondetail = persondetail; } public List getLcatalog() { return lcatalog; } public void setLcatalog(List lcatalog) { this.lcatalog = lcatalog; } public TcustPersonDetail getCompradorArma() { return compradorArma; } public void setCompradorArma(TcustPersonDetail compradorArma) { this.compradorArma = compradorArma; } public RegistroArmController getRegistroArmController() { return registroArmController; } public void setRegistroArmController(RegistroArmController registroArmController) { this.registroArmController = registroArmController; } public Integer getCantidad() { return cantidad; } public void setCantidad(Integer cantidad) { this.cantidad = cantidad; } public BigDecimal getPeso() { return peso; } public void setPeso(BigDecimal peso) { this.peso = peso; } public Date getFecha() { return fecha; } public void setFecha(Date fecha) { this.fecha = fecha; } public List getLmovimientos() { return lmovimientos; } public void setLmovimientos(List lmovimientos) { this.lmovimientos = new ArrayList(); for(TgeneCatalogDetail mov:lmovimientos){ //No se incluye el tipo de registro TRASLADO (TRASL) if(!mov.getPk().getCatalog().equalsIgnoreCase("TRASL")){ this.lmovimientos.add(mov); } } } public List getLperson() { return lperson; } public void setLperson(List lperson) { this.lperson = lperson; } public TarmMovimientoArmas getMovimientoArma() { return movimientoArma; } public void setMovimientoArma(TarmMovimientoArmas movimientoArma) { this.movimientoArma = movimientoArma; } public MovimientoController getMovimientoController() { return movimientoController; } public void setMovimientoController(MovimientoController movimientoController) { this.movimientoController = movimientoController; } public VentaTotalPersonaController getVentaTotalPersonaController() { return ventaTotalPersonaController; } public void setVentaTotalPersonaController( VentaTotalPersonaController ventaTotalPersonaController) { this.ventaTotalPersonaController = ventaTotalPersonaController; } public String getLoteFilter() { return loteFilter; } public void setLoteFilter(String loteFilter) { this.loteFilter = loteFilter; } }