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.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.ParametrosVendaVivoDTO;
import br.com.ec.domain.model.Cliente;
import br.com.ec.domain.model.LinhaVivo;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.VendaVivo;
import br.com.ec.domain.model.Vendedor;
import br.com.ec.domain.model.tipos.TipoStatusDigitalizacao;
import br.com.ec.domain.service.cliente.ClienteService;
import br.com.ec.domain.service.linhavivo.LinhaVivoService;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.seguranca.ContextoSeguranca;
import br.com.ec.domain.service.vendavivo.VendaVivoService;
import br.com.ec.domain.service.vendedor.VendedorService;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.message.LancadorMensagem;
@Named
@Scope
("view")
public class VendaVivoBean
extends AbstractBean
<VendaVivo
> implements Serializable {
private static final long serialVersionUID = 1L
;
private LojaService lojaService
;
private VendaVivoService vendaVivoService
;
private LinhaVivoService linhaVivoService
;
private VendedorService vendedorService
;
private ClienteService clienteService
;
private ContextoSeguranca contextoSeguranca
;
private String cpfCliente
;
private ParametrosVendaVivoDTO parametrosVenda
;
private Boolean numeroVerificado
;
private VendaVivo vendaSelecionada
;
private List<Vendedor
> vendedoresColaboradores
;
@Inject
public VendaVivoBean
(LojaService lojaService, VendaVivoService vendaVivoService, LinhaVivoService linhaVivoService,
VendedorService vendedorService, ClienteService clienteService, ContextoSeguranca contextoSeguranca
) {
this.
lojaService = lojaService
;
this.
vendaVivoService = vendaVivoService
;
this.
linhaVivoService = linhaVivoService
;
this.
vendedorService = vendedorService
;
this.
clienteService = clienteService
;
this.
contextoSeguranca = contextoSeguranca
;
}
@
Override
public void preCarregamento
() {
entidade =
new VendaVivo
();
entidade.
setIndicadorPortabilidade(false);
entidade.
setIndicadorMigracao(false);
entidade.
setIndicadorCadastradoVivoGo(false);
numeroVerificado =
false;
parametrosConsulta =
new ParametrosConsulta
<VendaVivo
>();
parametrosConsulta.
setEntidade(entidade
);
parametrosVenda =
new ParametrosVendaVivoDTO
();
setarParametrosDaLoja
();
}
private void setarParametrosDaLoja
() {
if (VerificadorUtil.
estaNulo(entidade
)) {
entidade =
new VendaVivo
();
entidade.
setDataVenda(DataUtils.
getDataAtual());
parametrosVenda.
setUsuario(contextoSeguranca.
obterUsuario());
}
if (VerificadorUtil.
naoEstaNulo(getParametro
("sequencialLoja"))) {
Loja loja =
new Loja
();
loja.
setSequencial(new Long(getParametro
("sequencialLoja").
toString()));
entidade.
setLoja(lojaService.
consultarPorId(loja
));
}
}
@
Override
public void limparEntidade
() {
setEntidade
(new VendaVivo
());
setNumeroVerificado
(false);
}
@
Override
public GenericService
<VendaVivo
> getService
() {
return vendaVivoService
;
}
@
Override
public VendaVivo getEntidade
() {
return entidade
;
}
@
Override
public VendaVivo getId
() {
return getEntidade
();
}
public String getCpfCliente
() {
return VerificadorUtil.
naoEstaNulo(cpfCliente
)? cpfCliente.
replace(".",
"").
replace("-",
"") : cpfCliente
;
}
public void setCpfCliente
(String cpfCliente
) {
this.
cpfCliente = cpfCliente
;
}
public ParametrosVendaVivoDTO getParametrosVenda
() {
return parametrosVenda
;
}
public void setParametrosVenda
(ParametrosVendaVivoDTO parametrosVenda
) {
this.
parametrosVenda = parametrosVenda
;
}
public Boolean getNumeroVerificado
() {
return numeroVerificado
;
}
public void setNumeroVerificado
(Boolean numeroVerificado
) {
this.
numeroVerificado = numeroVerificado
;
}
public VendaVivo getVendaSelecionada
() {
return vendaSelecionada
;
}
public void setVendaSelecionada
(VendaVivo vendaSelecionada
) {
this.
vendaSelecionada = vendaSelecionada
;
}
public List<Vendedor
> getVendedoresColaboradores
() {
if (VerificadorUtil.
estaNulo(vendedoresColaboradores
)) {
setVendedoresColaboradores
(vendedorService.
consultarVendedoresColaboradores());
}
return vendedoresColaboradores
;
}
public void setVendedoresColaboradores
(List<Vendedor
> vendedoresColaboradores
) {
this.
vendedoresColaboradores = vendedoresColaboradores
;
}
public List<VendaVivo
> getConsultarTodas
() {
return vendaVivoService.
consultarTodos(new VendaVivo
());
}
/***************************************************************/
public void retirarProduto
() {
getEntidade
().
setProdutoVivo(null);
}
public void prepararParaAlterarVenda
(final VendaVivo vendaVivo
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setEntidade
(vendaVivo
);
}
});
}
public void iniciarNovaVenda
() {
limparEntidade
();
}
public void verificarNumero
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getEntidade
().
setNumeroDaLinha(StringUtil.
retornarApenasNumeros(getEntidade
().
getNumeroDaLinha()));
LinhaVivo linhaConsultada = linhaVivoService.
consultarPorNumero(getEntidade
().
getNumeroDaLinha());
if (VerificadorUtil.
naoEstaNulo(linhaConsultada
)) {
getEntidade
().
setLinhaVivo(linhaConsultada
);
LancadorMensagem.
lancarSucesso("LINHA JÁ EXISTENTE");
}
setNumeroVerificado
(true);
getEntidade
().
setDataVenda(DataUtils.
getDataAtual());
}
});
}
public void cadastrarVendaVivo
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setarParametrosDaLoja
();
vendaVivoService.
cadastrarVendaVivoPeloPDV(getEntidade
());
LancadorMensagem.
lancarSucessoRedirecionandoTela("VENDA REALIZADA COM SUCESSO!",
"/sistema/pdv_vivo.xhtml?sequencialLoja=" + getEntidade
().
getLoja().
getSequencial());
iniciarNovaVenda
();
}
});
}
public void alterarVendaVivo
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
vendaVivoService.
alterarVendaVivoPeloPDV(getEntidade
());
adicionandoParametroArgsConfirmandoAcao
(true);
LancadorMensagem.
lancarSucesso("VENDA ALTERADA COM SUCESSO");
}
});
}
public void excluirVendaVivo
(final VendaVivo vendaVivo
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
vendaVivoService.
excluirVendaVivo(vendaVivo, contextoSeguranca.
obterUsuario());
adicionandoParametroArgsConfirmandoAcao
(true);
LancadorMensagem.
lancarSucesso("VENDA EXCLUÍDA COM SUCESSO");
}
});
}
public void selecionarCliente
(final Cliente cliente
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
cliente.
setAtivo(true);
clienteService.
alterar(cliente
);
getEntidade
().
getLinhaVivo().
setCliente(clienteService.
consultarClientePorCpfCnpj(cliente.
getCpfCnpj()));
setCpfCliente
(null);
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void retirarCliente
() {
getEntidade
().
getLinhaVivo().
setCliente(null);
}
public void selecionarDigitalizacao
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
naoEstaNuloOuVazio(getEntidade
().
getProtocoloGED())) {
getEntidade
().
setTipoStatusDigitalizacao(TipoStatusDigitalizacao.
CONFERINDO.
getValor());
getEntidade
().
setDataStatus(DataUtils.
getDataAtual());
getEntidade
().
setDataDigitalizacao(DataUtils.
getDataAtual());
}
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void retirarDigitalizacao
() {
getEntidade
().
setProtocoloGED("");
getEntidade
().
setTipoStatusDigitalizacao("");
getEntidade
().
setDataDigitalizacao(null);
getEntidade
().
setDataStatus(null);
}
public void prepararParaExcluirVenda
(final VendaVivo vendaVivo
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setVendaSelecionada
(vendaVivo
);
}
});
}
public void excluirVendaSelecionada
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
if (VerificadorUtil.
estaNuloOuVazio(getVendaSelecionada
().
getJustificativaParaExcluir())) {
throw new RuntimeException("É OBRIGATÓRIO JUSTIFICAR");
}
vendaVivoService.
excluirVendaVivo(getVendaSelecionada
(), contextoSeguranca.
obterUsuario());
adicionandoParametroArgsConfirmandoAcao
(true);
LancadorMensagem.
lancarSucesso("VENDA EXCLUÍDA COM SUCESSO");
}
});
}
}