package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.event.SelectEvent;
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.Categoria;
import br.com.ec.domain.model.Conta;
import br.com.ec.domain.model.ContaBancaria;
import br.com.ec.domain.model.ContaBancariaTransferencia;
import br.com.ec.domain.model.Pagamento;
import br.com.ec.domain.model.Parcela;
import br.com.ec.domain.model.Pessoa;
import br.com.ec.domain.model.tipos.TipoConta;
import br.com.ec.domain.service.conta.ContaService;
import br.com.ec.domain.service.contabancariatransferencia.ContaBancariaTransferenciaService;
import br.com.ec.domain.service.pagamento.PagamentoService;
import br.com.ec.domain.service.parcela.ParcelaService;
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 ParcelaBean
extends AbstractBean
<Parcela
> implements Serializable {
private static final long serialVersionUID = 1L
;
private ContaBancariaTransferencia transferenciaContaBancaria
;
private List<ContaBancariaTransferencia
> transferenciasContaBancaria
;
private ParcelaService parcelaService
;
private ContaService contaService
;
private PagamentoService pagamentoService
;
private ContaBancariaTransferenciaService contaBancariaTransferenciaService
;
@Inject
public ParcelaBean
(ParcelaService parcelaService, ContaService contaService, PagamentoService pagamentoService,
ContaBancariaTransferenciaService contaBancariaTransferenciaService
) {
this.
parcelaService = parcelaService
;
this.
contaService = contaService
;
this.
pagamentoService = pagamentoService
;
this.
contaBancariaTransferenciaService = contaBancariaTransferenciaService
;
}
@
Override
public void preCarregamento
() {
if (VerificadorUtil.
estaNulo(entidade
)) {
entidade =
new Parcela
();
}
}
@
Override
public void limparEntidade
() {
setEntidade
(new Parcela
());
}
@
Override
public GenericService
<Parcela
> getService
() {
return parcelaService
;
}
@
Override
public Parcela getEntidade
() {
return entidade
;
}
@
Override
public Parcela getId
() {
return getEntidade
();
}
public void onRowSelect
(SelectEvent event
) {
setEntidade
(parcelaService.
consultarPorId((Parcela
) event.
getObject()));
}
public ContaBancariaTransferencia getTransferenciaContaBancaria
() {
return transferenciaContaBancaria
;
}
public void setTransferenciaContaBancaria
(ContaBancariaTransferencia transferenciaContaBancaria
) {
this.
transferenciaContaBancaria = transferenciaContaBancaria
;
}
public List<ContaBancariaTransferencia
> getTransferenciasContaBancaria
() {
return transferenciasContaBancaria
;
}
public void setTransferenciasContaBancaria
(List<ContaBancariaTransferencia
> transferenciasContaBancaria
) {
this.
transferenciasContaBancaria = transferenciasContaBancaria
;
}
/***************************************************************/
public void iniciarParcelaAReceber
(ContaBancaria contaBancaria
) {
entidade =
new Parcela
();
entidade.
setContaBancaria(contaBancaria
);
entidade.
setConta(new Conta
(TipoConta.
CONTA_A_RECEBER.
getValor()));
entidade.
setIndicadorConciliado(false);
}
public void iniciarParcelaAPagar
(ContaBancaria contaBancaria
) {
entidade =
new Parcela
();
entidade.
setContaBancaria(contaBancaria
);
entidade.
setConta(new Conta
(TipoConta.
CONTA_A_PAGAR.
getValor()));
entidade.
setIndicadorConciliado(false);
}
public void iniciarParcelaAPagar
(Pagamento pagamento
) {
entidade =
new Parcela
();
entidade.
setContaBancaria(new ContaBancaria
(ContaBancaria.
getContaCaixa()));
Conta conta =
new Conta
(TipoConta.
CONTA_A_PAGAR.
getValor());
conta.
setLoja(pagamento.
getLoja());
entidade.
setConta(conta
);
entidade.
setDataPagamento(pagamento.
getData());
entidade.
setDataVencimento(pagamento.
getData());
entidade.
setObservacao(pagamento.
getDescricao());
entidade.
setValor(pagamento.
getValor());
entidade.
setIndicadorConciliado(false);
}
public void depositar
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
parcelaService.
lancarParcela(getEntidade
());
LancadorMensagem.
lancarSucesso("DEPÓSITO REALIZADO COM SUCESSO!");
}
});
}
public void pagar
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
parcelaService.
lancarParcela(getEntidade
());
LancadorMensagem.
lancarSucesso("PAGAMENTO REALIZADO COM SUCESSO!");
}
});
}
public void cancelarParcela
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
parcelaService.
cancelarParcela(getEntidade
());
LancadorMensagem.
lancarSucesso("PAGAMENTO CANCELADO COM SUCESSO!");
}
});
}
public void selecionarCategoria
(Categoria categoria
) {
getEntidade
().
getConta().
setCategoria(categoria
);
}
public void retirarCategoria
() {
getEntidade
().
getConta().
setCategoria(null);
}
public void selecionarPessoa
(Pessoa pessoa
) {
getEntidade
().
getConta().
setPessoa(pessoa
);
}
public void retirarPessoa
() {
getEntidade
().
getConta().
setPessoa(null);
}
@
Override
public void alterar
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
modificarEntidadeAntesDaOperacao
();
getService
().
alterar(getEntidade
());
contaService.
alterar(getEntidade
().
getConta());
limparEntidade
();
modificarEntidadeDepoisDaOperacao
();
LancadorMensagem.
lancarSucesso(getMensagens
().
get(IDENTIFICADOR_MENSAGEM_ALTERADO_COM_SUCESSO
));
}
});
}
public void inicializarParcelaAReceber
(final Conta conta
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Parcela parcela =
new Parcela
();
parcela.
setIndicadorAtivo(true);
if (VerificadorUtil.
naoEstaNulo(conta
)) {
parcela.
setConta(conta
);
if (VerificadorUtil.
naoEstaNulo(conta.
getVenda())) {
parcela.
setDataEmissao(conta.
getVenda().
getDataVenda());
parcela.
setObservacao("PARCELA DA VENDA: " + conta.
getSequencialDaVenda());
} else {
parcela.
setDataEmissao(DataUtils.
getDataAtual());
}
}
setEntidade
(parcela
);
}
});
}
public void inicializarParcelaAPagar
(final Conta conta
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
Parcela parcela =
new Parcela
();
parcela.
setIndicadorAtivo(true);
if (VerificadorUtil.
naoEstaNulo(conta
)) {
parcela.
setDataEmissao(DataUtils.
getDataAtual());
parcela.
setConta(conta
);
parcela.
setObservacao("PARCELA: " + conta.
getSequencial());
}
setEntidade
(parcela
);
}
});
}
public void cadastrarFinalizandoPagamento
(final Pagamento pagamento
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
parcelaService.
lancarParcela(getEntidade
());
limparEntidade
();
pagamento.
setLancado(true);
pagamentoService.
alterar(pagamento
);
LancadorMensagem.
lancarSucesso("Conta lançada e pagamento finalizado com sucesso!");
}
});
}
public void iniciarTransferenciaContaBancaria
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
ContaBancariaTransferencia transferenciaContaBancaria =
new ContaBancariaTransferencia
();
transferenciaContaBancaria.
setDataOperacao(DataUtils.
getDataAtual());
transferenciaContaBancaria.
setIndicadorConciliado(false);
setTransferenciaContaBancaria
(transferenciaContaBancaria
);
}
});
}
public void transferirContaBancaria
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
contaBancariaTransferenciaService.
cadastrar(getTransferenciaContaBancaria
());
setTransferenciaContaBancaria
(null);
LancadorMensagem.
lancarSucesso("TRANSFERÊNCIA REALIZADA COM SUCESSO!");
}
});
}
public void consultarUltimasTransferencias
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setTransferenciasContaBancaria
(contaBancariaTransferenciaService.
consultarUltimasTransferencias());
}
});
}
public void excluirTransferenciaBancaria
(final ContaBancariaTransferencia contaBancariaTransferencia
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
contaBancariaTransferenciaService.
excluir(contaBancariaTransferencia
);
consultarUltimasTransferencias
();
LancadorMensagem.
lancarSucesso("TRANSFERÊNCIA EXCLUÍDA COM SUCESSO!");
}
});
}
}