maia/.svn/pristine/07/07efe8550147725de0f76760355...

486 lines
16 KiB
Plaintext
Executable File

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<TarmArmas> {
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<TcustPersonDetail> 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<TgeneCatalogDetail> lmovimientos;
/**
* Lista referenciada al catalogo
*/
private List<TgeneCatalogDetail> 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");
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<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
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<TarmArmas>();
MessageHelper.setMessageError(resp);
} else {
this.lrecord = (List<TarmArmas>) 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>this.record.getCantidad()){
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<String, List<String>> 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<String, DtoSave> msave = new HashMap<String, DtoSave>();
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<TgeneCatalogDetail> getLcatalog() {
return lcatalog;
}
public void setLcatalog(List<TgeneCatalogDetail> 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<TgeneCatalogDetail> getLmovimientos() {
return lmovimientos;
}
public void setLmovimientos(List<TgeneCatalogDetail> lmovimientos) {
this.lmovimientos = new ArrayList<TgeneCatalogDetail>();
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<TcustPersonDetail> getLperson() {
return lperson;
}
public void setLperson(List<TcustPersonDetail> 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;
}
}