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.controller.managedbean.consultademanda.CupomConsultaPorDemanda;
import br.com.ec.domain.model.Cliente;
import br.com.ec.domain.model.Cupom;
import br.com.ec.domain.model.tipos.TipoCupom;
import br.com.ec.domain.service.cliente.ClienteService;
import br.com.ec.domain.service.cupom.CupomService;
import br.edu.cesmac.core.consulta.ParametrosConsulta;
import br.edu.cesmac.core.exception.NegocioException;
import br.edu.cesmac.core.generic.GenericService;
import br.edu.cesmac.core.util.DataUtils;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.web.exception.VerificadorLancamentoException;
import br.edu.cesmac.web.exception.VerificadorLancamentoException.CommandBean;
import br.edu.cesmac.web.generic.AbstractBean;
import br.edu.cesmac.web.message.LancadorMensagem;
@Named
@Scope
("view")
public class CupomBean
extends AbstractBean
<Cupom
> implements Serializable {
private static final long serialVersionUID = 1L
;
private CupomService cupomService
;
private ClienteService clienteService
;
private Cupom cupomSelecionado
;
private String cpfCliente
;
private Double valorSeparacao
;
private String codigoCupomParaUnir
;
private String codigoCupomParaUnirSegundo
;
private Cupom cupomSelecionadoParaUnir
;
private CupomConsultaPorDemanda lazy
;
private CupomConsultaPorDemanda lazyValidos
;
@Inject
public CupomBean
(CupomService cupomService, CupomConsultaPorDemanda lazy, CupomConsultaPorDemanda lazyValidos, ClienteService clienteService
) {
this.
cupomService = cupomService
;
this.
lazy = lazy
;
this.
lazyValidos = lazyValidos
;
this.
clienteService = clienteService
;
}
@
Override
public void preCarregamento
() {
entidade =
new Cupom
();
parametrosConsulta =
new ParametrosConsulta
<Cupom
>();
parametrosConsulta.
setEntidade(entidade
);
}
@
Override
public void limparEntidade
() {
setEntidade
(new Cupom
());
setCupomSelecionado
(null);
setCodigoCupomParaUnir
("");
setCodigoCupomParaUnirSegundo
("");
}
@
Override
public GenericService
<Cupom
> getService
() {
return cupomService
;
}
@
Override
public Cupom getEntidade
() {
return entidade
;
}
@
Override
public Cupom getId
() {
return getEntidade
();
}
public Cupom getCupomSelecionado
() {
return cupomSelecionado
;
}
public void setCupomSelecionado
(Cupom cupomSelecionado
) {
this.
cupomSelecionado = cupomSelecionado
;
}
public Cupom getCupomSelecionadoParaUnir
() {
return cupomSelecionadoParaUnir
;
}
public void setCupomSelecionadoParaUnir
(Cupom cupomSelecionadoParaUnir
) {
this.
cupomSelecionadoParaUnir = cupomSelecionadoParaUnir
;
}
public CupomConsultaPorDemanda getLazy
() {
prepararConsultaDemanda
();
return lazy
;
}
public void setLazy
(CupomConsultaPorDemanda lazy
) {
this.
lazy = lazy
;
}
public void prepararConsultaDemanda
() {
lazy.
setarParametrosConsulta(getParametrosConsulta
());
}
public CupomConsultaPorDemanda getLazyValidos
() {
prepararConsultaDemandaValidos
();
return lazyValidos
;
}
public void setLazyValidos
(CupomConsultaPorDemanda lazyValidos
) {
this.
lazyValidos = lazyValidos
;
}
public void prepararConsultaDemandaValidos
() {
ParametrosConsulta
<Cupom
> parametros = getParametrosConsulta
();
Cupom cupom =
new Cupom
();
cupom.
setDataHoraValidade(DataUtils.
getDataAtual());
cupom.
setAtivo(true);
cupom.
setPublico(true);
parametros.
setEntidade(cupom
);
lazyValidos.
setarParametrosConsulta(parametros
);
}
public String getCpfCliente
() {
return VerificadorUtil.
naoEstaNulo(cpfCliente
)? cpfCliente.
replace(".",
"").
replace("-",
"") : cpfCliente
;
}
public void setCpfCliente
(String cpfCliente
) {
this.
cpfCliente = cpfCliente
;
}
public Double getValorSeparacao
() {
return valorSeparacao
;
}
public void setValorSeparacao
(Double valorSeparacao
) {
this.
valorSeparacao = valorSeparacao
;
}
public String getCodigoCupomParaUnir
() {
return codigoCupomParaUnir
;
}
public void setCodigoCupomParaUnir
(String codigoCupomParaUnir
) {
this.
codigoCupomParaUnir = codigoCupomParaUnir
;
}
public String getCodigoCupomParaUnirSegundo
() {
return codigoCupomParaUnirSegundo
;
}
public void setCodigoCupomParaUnirSegundo
(String codigoCupomParaUnirSegundo
) {
this.
codigoCupomParaUnirSegundo = codigoCupomParaUnirSegundo
;
}
public TipoCupom
[] getTiposCupom
() {
return TipoCupom.
values();
}
/***************************************************************/
public List<Cupom
> getConsultarTodas
() {
return cupomService.
consultarTodos(new Cupom
());
}
public void prepararParaGerarCupom
() {
Cupom cupomGerado =
new Cupom
();
cupomGerado.
setCodigo(cupomService.
gerarCodigoValido());
cupomGerado.
setDataHoraEmissao(DataUtils.
getDataAtual());
cupomGerado.
setPublico(true);
cupomGerado.
setAtivo(true);
cupomGerado.
setLimiteUtilizacao(false);
cupomGerado.
setTipoCupom(TipoCupom.
PROMOCIONAL.
getValor());
setCupomSelecionado
(cupomGerado
);
}
public void cadastrarCupomGerado
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
cupomService.
cadastrar(getCupomSelecionado
());
LancadorMensagem.
lancarSucesso("CUPOM GERADO COM SUCESSO! CÓDIGO GERADO: " + getCupomSelecionado
().
getCodigo());
setCupomSelecionado
(null);
}
});
}
public void alterarCupomGerado
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
cupomService.
alterar(getCupomSelecionado
());
LancadorMensagem.
lancarSucesso("CUPOM ALTERADO COM SUCESSO!");
setCupomSelecionado
(null);
}
});
}
public void selecionarCliente
(final Cliente cliente
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getCupomSelecionado
().
setCliente(clienteService.
consultarClientePorCpfCnpj(cliente.
getCpfCnpj()));
setCpfCliente
(null);
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void retirarCliente
() {
getCupomSelecionado
().
setCliente(null);
}
public void excluirCupom
(final Cupom cupom
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
cupomService.
excluirCupom(cupom
);
adicionandoParametroArgsConfirmandoAcao
(true);
LancadorMensagem.
lancarSucesso("CUPOM EXCLUÍDO COM SUCESSO");
}
});
}
public void prepararParaSepararCupom
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setCupomSelecionado
(cupomService.
consultarCupomPorCodigo(getEntidade
().
getCodigo()));
verificarCupomValidoEhParaReembolso
(getCupomSelecionado
());
setValorSeparacao
(new Double(0.0));
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
public void confirmarSeparacaoCupom
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Cupom cupomNovo = cupomService.
separarCupom(getCupomSelecionado
(), getValorSeparacao
());
adicionandoParametroArgsConfirmandoAcao
(true);
limparEntidade
();
LancadorMensagem.
lancarSucesso("CUPOM GERADO COM SUCESSO! CÓDIGO: " + cupomNovo.
getCodigo());
}
});
}
public void prepararParaUnirCupons
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setCupomSelecionado
(cupomService.
consultarCupomPorCodigo(getCodigoCupomParaUnir
()));
verificarCupomValidoEhParaReembolso
(getCupomSelecionado
());
setCupomSelecionadoParaUnir
(cupomService.
consultarCupomPorCodigo(getCodigoCupomParaUnirSegundo
()));
verificarCupomValidoEhParaReembolso
(getCupomSelecionadoParaUnir
());
adicionandoParametroArgsConfirmandoAcao
(true);
}
});
}
private void verificarCupomValidoEhParaReembolso
(Cupom cupom
) {
if (VerificadorUtil.
naoEstaNulo(cupom
)) {
if (!cupom.
getAtivo() ||
!cupom.
valido()) {
throw new NegocioException
("OPERAÇÃO NÃO PERMITIDA: CUPOM INDISPONÍVEL");
}
if (!cupom.
getTipoCupom().
equals(TipoCupom.
REEMBOLSO.
getValor())) {
throw new NegocioException
("OPERAÇÃO NÃO PERMITIDA: CUPOM DEVE SER PARA REEMBOLSO");
}
}
}
public void confirmarUniaoCupons
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Cupom cupomNovo = cupomService.
unirCupons(getCupomSelecionado
(), getCupomSelecionadoParaUnir
());
adicionandoParametroArgsConfirmandoAcao
(true);
limparEntidade
();
LancadorMensagem.
lancarSucesso("CUPONS UNIDOS COM SUCESSO! CÓDIGO: " + cupomNovo.
getCodigo());
}
});
}
}