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.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Pagamento;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.pagamento.PagamentoService;
import br.com.ec.domain.service.usuario.UsuarioService;
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 PagamentoBean
extends AbstractBean
<Pagamento
> implements Serializable {
private static final long serialVersionUID = 1L
;
private Pagamento pagamentoSelecionado
;
private Loja lojaSelecionada
;
private String senhaUsuario
;
private PagamentoService pagamentoService
;
private LojaService lojaService
;
private UsuarioService usuarioService
;
@Inject
public PagamentoBean
(PagamentoService pagamentoService, LojaService lojaService, UsuarioService usuarioService
) {
this.
pagamentoService = pagamentoService
;
this.
lojaService = lojaService
;
this.
usuarioService = usuarioService
;
}
@
Override
public void preCarregamento
() {
entidade =
new Pagamento
();
entidade.
setLoja(getLojaSelecionada
());
entidade.
setLancado(false);
}
@
Override
public void limparEntidade
() {
setEntidade
(new Pagamento
());
}
@
Override
public GenericService
<Pagamento
> getService
() {
return pagamentoService
;
}
@
Override
public Pagamento getEntidade
() {
return entidade
;
}
@
Override
public Pagamento getId
() {
return getEntidade
();
}
public Pagamento getPagamentoSelecionado
() {
return pagamentoSelecionado
;
}
public void setPagamentoSelecionado
(Pagamento pagamentoSelecionado
) {
this.
pagamentoSelecionado = pagamentoSelecionado
;
}
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 getSenhaUsuario
() {
return senhaUsuario
;
}
public void setSenhaUsuario
(String senhaUsuario
) {
this.
senhaUsuario = senhaUsuario
;
}
public Integer quantidadePagamentosEmAberto
(Loja loja
) {
return pagamentoService.
quantidadePagamentosEmAberto(loja
);
}
public Double valorTotalPagamentosDoDia
(Loja loja
) {
List<Pagamento
> pagamentosDoDia = pagamentoService.
consultarPagamentosDoDia(loja.
getSequencial(), DataUtils.
getDataAtual());
Double valorTotal =
new Double(0.0);
for (Pagamento pagamento : pagamentosDoDia
) {
valorTotal = valorTotal + pagamento.
getValor();
}
return valorTotal
;
}
@
Override
public void cadastrar
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getEntidade
().
setLoja(getLojaSelecionada
());
Usuario usuario = verificarSenhaUsuario
();
usuarioService.
naoPermitirPerfilLoja(usuario
);
getEntidade
().
setUsuario(usuario
);
getService
().
cadastrar(getEntidade
());
setSenhaUsuario
("");
LancadorMensagem.
lancarSucesso("Pagamento cadastrado com sucesso!");
}
});
}
private Usuario verificarSenhaUsuario
() {
return usuarioService.
consultarUsuarioPorSenha(getSenhaUsuario
());
}
public void finalizar
(final Pagamento pagamento
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
pagamento.
setLancado(true);
getService
().
alterar(pagamento
);
LancadorMensagem.
lancarSucesso("Pagamento finalizado com sucesso!");
}
});
}
public void retirarLancamento
(final Pagamento pagamento
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
pagamento.
setLancado(false);
getService
().
alterar(pagamento
);
LancadorMensagem.
lancarSucesso("Lançamento do pagamento retirado com sucesso!");
}
});
}
public void excluir
(final Pagamento pagamento
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getService
().
excluir(pagamento
);
LancadorMensagem.
lancarSucesso("Pagamento excluĂdo com sucesso!");
}
});
}
}