Problema com Pick List

0 respostas
java
L

Boa tarde moçada, estou com um problema e alguns dias não consigo resolver, criei um processo de devolução de compra, vou tentar simular o problema aqui pra vocês: Tenho uma compra com um item de saldo 10, faço uma devolução desse item com a mesma quantidade 10. Na próxima devolução desse mesmo item ele tem que estar com saldo 0, certo?! Certo… Até ai tudo bem, porém quando cancelo essa mesma devolução o saldo deverá voltar para 10. No meu pick list ele aparece o saldo 10 corretamente, porém ao passar para o Target do pick list que vou devolver novamente ele ainda está 0 zerado. Creio que esteja ficando em cache algum objeto. Alguém poderia me ajudar? Qualquer dúvida estou a disposição.

package br.com.rfsolutionit.web.controller.comercial;
import java.io.Serializable;

import java.math.BigDecimal;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Map;
import javax.annotation.PostConstruct;

import javax.persistence.criteria.CriteriaBuilder;

import javax.persistence.criteria.CriteriaQuery;

import javax.persistence.criteria.Predicate;

import javax.persistence.criteria.Root;
import org.apache.commons.lang3.StringUtils;

import org.primefaces.event.SelectEvent;

import org.primefaces.model.DualListModel;

import org.primefaces.model.LazyDataModel;

import org.primefaces.model.SortOrder;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Scope;

import org.springframework.data.domain.PageRequest;

import org.springframework.data.domain.Sort;

import org.springframework.data.jpa.domain.Specification;

import org.springframework.stereotype.Controller;
import br.com.rfsolutionit.business.comercial.model.Compra;

import br.com.rfsolutionit.business.comercial.model.DevolucaoCompra;

import br.com.rfsolutionit.business.comercial.model.ItemCompra;

import br.com.rfsolutionit.business.comercial.model.ItemDevolucaoCompra;

import br.com.rfsolutionit.business.comercial.model.type.StatusDevolucaoCompra;

import br.com.rfsolutionit.comercial.client.DevolucaoCompraService;

import br.com.rfsolutionit.commons.utils.DateTimeUtils;

import br.com.rfsolutionit.commons.utils.FacesUtil;

import br.com.rfsolutionit.commons.utils.NegocioException;

import br.com.rfsolutionit.web.controller.security.Seguranca;
@Controller(value=devolucaoCompraController)

@Scope(session)

public class DevolucaoCompraController implements Serializable {
private static final long serialVersionUID = 1L;

@Autowired
private DevolucaoCompraService devolucaoCompraService;

@Autowired
private Seguranca seguranca;

private DevolucaoCompra devolucaoCompra = new DevolucaoCompra();

private Compra compra = new Compra();

private LazyDataModel<DevolucaoCompra> devolucoesCompras;

private List<ItemDevolucaoCompra> itensDevolucaoCompra = new ArrayList<ItemDevolucaoCompra>();

private DualListModel<ItemCompra> itensCompraDevolucao;

private List<ItemCompra> itensCompraDevolucaoSource;

private List<ItemCompra> itensCompraDevolucaoTarget;

private Date searchDataIni = DateTimeUtils.getLowerMonthDate(new Date());

private Date searchDataFim = DateTimeUtils.getUpperDate(new Date());

private boolean devolvidos;

private boolean cancelados;

@PostConstruct
public void init() {
	devolucoesCompras = new LazyDataModel<DevolucaoCompra>() {

		private static final long serialVersionUID = 1L;

		@Override
		public List<DevolucaoCompra> load(int first, int pageSize, String sortField, SortOrder sortOrder,
				Map<String, Object> filters) {

			setPageSize(pageSize);
			List<DevolucaoCompra> result;
			Specification<DevolucaoCompra> specs = null;
			specs = new Specification<DevolucaoCompra>() {
				@Override
				public Predicate toPredicate(Root<DevolucaoCompra> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
					List<Predicate> predicates = new ArrayList<Predicate>();

					if (searchDataIni != null) {
						predicates.add(cb.greaterThanOrEqualTo(root.get("dataDevolucao").as(Date.class),
								DateTimeUtils.getLowerDate(searchDataIni)));
					}

					if (searchDataFim != null) {
						predicates.add(cb.lessThanOrEqualTo(root.get("dataDevolucao").as(Date.class),
								DateTimeUtils.getUpperDate(searchDataFim)));
					}
					
					if (!(isDevolvidos() &&
						  isCancelados())){
						
						if (isDevolvidos() && !isCancelados()) {
							predicates.add(cb.equal(root.get("statusDevolucaoCompra").as(StatusDevolucaoCompra.class), StatusDevolucaoCompra.DEVOLVIDA));
						}else 
						if (!isDevolvidos() && isCancelados()) {
							predicates.add(cb.equal(root.get("statusDevolucaoCompra").as(StatusDevolucaoCompra.class), StatusDevolucaoCompra.CANCELADA));
						}
					}

					query.where(predicates.toArray(new Predicate[predicates.size()]));

					return query.getGroupRestriction();
				}
			};

			int rows = devolucaoCompraService.count(specs).intValue();
			setRowCount(rows);

			if (sortOrder == SortOrder.UNSORTED || StringUtils.isBlank(sortField)) {
				result = devolucaoCompraService.findAll(specs, new PageRequest(first / pageSize, pageSize)).getContent();
			} else {
				Sort sort = new Sort(sortOrder == SortOrder.ASCENDING ? Sort.Direction.ASC : Sort.Direction.DESC,
						sortField);
				result = devolucaoCompraService.findAll(specs, new PageRequest(first / pageSize, pageSize, sort))
						.getContent();
			}
			return result;
		}
	};
	limpar();
}

public void inicializar() {
	if (FacesUtil.isNotPostback()) {		
		limpar();			
	}
}

private void limpar() {
	devolucaoCompra = new DevolucaoCompra();
	compra = new Compra();
	itensDevolucaoCompra = new ArrayList<ItemDevolucaoCompra>();	
	this.itensCompraDevolucao = new DualListModel<ItemCompra>();
	this.itensCompraDevolucaoSource = new ArrayList<ItemCompra>();
	this.itensCompraDevolucaoTarget = new ArrayList<ItemCompra>();
}

public void finalizarDevolucao(){
	
	this.devolucaoCompra.setEmpresa(this.seguranca.getEmpresa());
	this.devolucaoCompra.setDataDevolucao(new Date());
	this.devolucaoCompra.setCompra(this.compra);
	
	for (ItemDevolucaoCompra idc : this.itensDevolucaoCompra) {						
		if (idc.getItemCompra().getValorSaldo().compareTo(idc.getQuantidade()) == -1){
			throw new NegocioException("Quantidade devolvida é maior que a quantidade pedida.");
		} 
		
		idc.setDevolucaoCompra(this.devolucaoCompra);
	}
	
	this.devolucaoCompra = this.devolucaoCompraService.save(this.devolucaoCompra);
	
	this.devolucaoCompra = this.devolucaoCompraService.finalizar(this.devolucaoCompra);
	
	FacesUtil.showMessage("", "Devolução de Compra finalizada com sucesso!");
	
	this.limpar();
}

public void confirmaDevolucao(){
	this.itensDevolucaoCompra = new ArrayList<ItemDevolucaoCompra>();		
	
	for (ItemCompra ic : this.itensCompraDevolucao.getTarget()) {												
		
		if (ic.getValorSaldo().compareTo(BigDecimal.ZERO) <= 0) {
			throw new NegocioException("Não há disponibilidade no saldo do item: "+ ic.getValorSaldo());
		}
		
		ItemDevolucaoCompra idc = new ItemDevolucaoCompra();
		idc.setItemCompra(ic);			
		idc.setValorUnitario(ic.getValorUnitario());
		this.itensDevolucaoCompra.add(idc);
	}
	
	this.devolucaoCompra.setItensDevolucaoCompra(this.itensDevolucaoCompra);
	
	if (this.itensCompraDevolucao.getTarget().isEmpty()){
		throw new NegocioException("A devolução da compra deve possuir pelo menos um item para devolução.");
	}
	
	FacesUtil.showMessage("", "Itens da Devolução de Compra confirmados com sucesso!");
}

public void cancelarDevolucao() {	
	this.devolucaoCompra = this.devolucaoCompraService.cancelar(this.devolucaoCompra);
	init();
	FacesUtil.showMessage("", "Devolução Compra cancelada com sucesso!");
}

public void onReturnFromCompra(SelectEvent event){
	limpar();
	if (event.getObject() instanceof Compra){
		this.compra = (Compra) event.getObject();			
		this.devolucaoCompra.setCompra((Compra) event.getObject());			
		
		this.itensCompraDevolucaoSource = this.compra.getItensCompra();			
		this.itensCompraDevolucaoTarget = new ArrayList<ItemCompra>();			
		this.itensCompraDevolucao = new DualListModel<ItemCompra>(this.itensCompraDevolucaoSource,this.itensCompraDevolucaoTarget);
	}
}

public DevolucaoCompra getDevolucaoCompra() {
	return devolucaoCompra;
}

public void setDevolucaoCompra(DevolucaoCompra devolucaoCompra) {
	this.devolucaoCompra = devolucaoCompra;
}

public LazyDataModel<DevolucaoCompra> getDevolucoesCompras() {
	return devolucoesCompras;
}

public void setDevolucoesCompras(LazyDataModel<DevolucaoCompra> devolucoesCompras) {
	this.devolucoesCompras = devolucoesCompras;
}

public List<ItemDevolucaoCompra> getItensDevolucaoCompra() {
	return itensDevolucaoCompra;
}

public void setItensDevolucaoCompra(List<ItemDevolucaoCompra> itensDevolucaoCompra) {
	this.itensDevolucaoCompra = itensDevolucaoCompra;
}

public DualListModel<ItemCompra> getItensCompraDevolucao() {		
	return itensCompraDevolucao;
}

public void setItensCompraDevolucao(DualListModel<ItemCompra> itensCompraDevolucao) {
	this.itensCompraDevolucao = itensCompraDevolucao;
}

public Compra getCompra() {
	return compra;
}

public void setCompra(Compra compra) {
	this.compra = compra;
}

public Date getSearchDataIni() {
	return searchDataIni;
}

public void setSearchDataIni(Date searchDataIni) {
	this.searchDataIni = searchDataIni;
}

public Date getSearchDataFim() {
	return searchDataFim;
}

public void setSearchDataFim(Date searchDataFim) {
	this.searchDataFim = searchDataFim;
}

public boolean isDevolvidos() {
	return devolvidos;
}

public void setDevolvidos(boolean devolvidos) {
	this.devolvidos = devolvidos;
}

public boolean isCancelados() {
	return cancelados;
}

public void setCancelados(boolean cancelados) {
	this.cancelados = cancelados;
}

}

@Transient 
public BigDecimal getValorSaldo() { 
	return this.getQuantidade().subtract(this.getQuantidadeDevolvida());
}

Heeeelllpppp!!!

Criado 30 de novembro de 2017
Respostas 0
Participantes 1