package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.Cliente;
import br.com.ec.domain.model.EstoqueAuditoria;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Pedido;
import br.com.ec.domain.model.Venda;
import br.com.ec.domain.model.tipos.TipoDevolucao;
import br.com.ec.domain.service.cliente.ClienteService;
import br.com.ec.domain.service.estoqueauditoria.EstoqueAuditoriaService;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.pedido.PedidoService;
import br.com.ec.domain.service.venda.VendaService;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
@Named
@Scope
("view")
public class InformarTrocaBean
extends AbstractBean
<EstoqueAuditoria
> implements Serializable {
private static final long serialVersionUID = 1L
;
private Loja lojaSelecionada
;
private String cpfCliente
;
private List<EstoqueAuditoria
> listaTrocasDoDia
;
private List<EstoqueAuditoria
> listaDevolucoesDoDia
;
private EstoqueAuditoriaService estoqueAuditoriaService
;
private LojaService lojaService
;
private ClienteService clienteService
;
private VendaService vendaService
;
private PedidoService pedidoService
;
@Inject
public InformarTrocaBean
(EstoqueAuditoriaService estoqueAuditoriaService, LojaService lojaService, ClienteService clienteService, VendaService vendaService,
PedidoService pedidoService
) {
this.
estoqueAuditoriaService = estoqueAuditoriaService
;
this.
lojaService = lojaService
;
this.
clienteService = clienteService
;
this.
vendaService = vendaService
;
this.
pedidoService = pedidoService
;
}
@
Override
public void preCarregamento
() {
if (VerificadorUtil.
estaNulo(parametrosConsulta
)) {
entidade =
new EstoqueAuditoria
();
parametrosConsulta =
new ParametrosConsulta
<EstoqueAuditoria
>();
parametrosConsulta.
setEntidade(entidade
);
setListaTrocasDoDia
(estoqueAuditoriaService.
consultarTrocasDoDia(getLojaSelecionada
()));
setListaDevolucoesDoDia
(estoqueAuditoriaService.
consultarDevolucoesDoDia(getLojaSelecionada
()));
}
}
@
Override
public void limparEntidade
() {
setEntidade
(new EstoqueAuditoria
());
}
@
Override
public GenericService
<EstoqueAuditoria
> getService
() {
return estoqueAuditoriaService
;
}
@
Override
public EstoqueAuditoria getEntidade
() {
return entidade
;
}
@
Override
public EstoqueAuditoria getId
() {
return getEntidade
();
}
public TipoDevolucao
[] getTiposDevolucao
() {
return TipoDevolucao.
values();
}
public Loja getLojaSelecionada
() {
if (VerificadorUtil.
estaNulo(lojaSelecionada
)) {
Loja loja =
new Loja
();
loja.
setSequencial(new Long(getParametro
("sequencialLoja").
toString()));
lojaSelecionada = lojaService.
consultarPorId(loja
);
}
return lojaSelecionada
;
}
public void setLojaSelecionada
(Loja lojaSelecionada
) {
this.
lojaSelecionada = lojaSelecionada
;
}
public String getCpfCliente
() {
return VerificadorUtil.
naoEstaNulo(cpfCliente
)? cpfCliente.
replace(".",
"").
replace("-",
"") : cpfCliente
;
}
public void setCpfCliente
(String cpfCliente
) {
this.
cpfCliente = cpfCliente
;
}
public List<EstoqueAuditoria
> getListaTrocasDoDia
() {
return listaTrocasDoDia
;
}
public void setListaTrocasDoDia
(List<EstoqueAuditoria
> listaTrocasDoDia
) {
this.
listaTrocasDoDia = listaTrocasDoDia
;
}
public List<EstoqueAuditoria
> getListaDevolucoesDoDia
() {
return listaDevolucoesDoDia
;
}
public void setListaDevolucoesDoDia
(List<EstoqueAuditoria
> listaDevolucoesDoDia
) {
this.
listaDevolucoesDoDia = listaDevolucoesDoDia
;
}
public void selecionarCliente
(final Cliente cliente
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
cliente.
setAtivo(true);
clienteService.
alterar(cliente
);
getEntidade
().
setCliente(clienteService.
consultarClientePorCpfCnpj(cliente.
getCpfCnpj()));
setCpfCliente
(null);
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void retirarCliente
() {
getEntidade
().
setCliente(null);
}
public void consultarInformacoesVenda
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
estaNulo(getEntidade
().
getSequencialVenda())) {
throw new NegocioException
("ID não informado corretamente");
}
Venda vendaConsulta =
new Venda
();
vendaConsulta.
setSequencial(getEntidade
().
getSequencialVenda());
vendaConsulta = vendaService.
consultarPorId(vendaConsulta
);
if (VerificadorUtil.
estaNulo(vendaConsulta
)) {
throw new NegocioException
("Venda informada não existente");
}
getEntidade
().
setDataVenda(vendaConsulta.
getDataVenda());
getEntidade
().
setLojaVenda(vendaConsulta.
getLoja());
}
});
}
public void consultarInformacoesPedido
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
estaNulo(getEntidade
().
getSequencialPedido())) {
throw new NegocioException
("ID do pedido não informado corretamente");
}
Pedido pedidoConsultado =
new Pedido
();
pedidoConsultado.
setSequencial(getEntidade
().
getSequencialPedido());
pedidoConsultado = pedidoService.
consultarPedidoCompleto(pedidoConsultado
);
if (VerificadorUtil.
estaNulo(pedidoConsultado
)) {
throw new NegocioException
("Pedido informado não existente");
}
if (!pedidoConsultado.
pedidoEhTroca()) {
throw new NegocioException
("Pedido não é do tipo TROCA");
}
if (pedidoConsultado.
foiAtendido()) {
throw new NegocioException
("Pedido informado já finalizado");
}
if (VerificadorUtil.
naoEstaNulo(pedidoConsultado.
getCliente())) {
getEntidade
().
setCliente(pedidoConsultado.
getCliente());
}
getEntidade
().
setObservacao("PEDIDO VINCULADO: ID " + getEntidade
().
getSequencialPedido() +
"\n" + getEntidade
().
getObservacao());
getEntidade
().
setPedidoParaVincular(pedidoConsultado
);
}
});
}
public void desvincularPedido
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getEntidade
().
setObservacao(getEntidade
().
getObservacao().
replace("PEDIDO VINCULADO: ID " + getEntidade
().
getSequencialPedido(),
""));
getEntidade
().
setSequencialPedido(null);
getEntidade
().
setPedidoParaVincular(null);
}
});
}
}