package gcom.gui.cobranca.contratoparcelamento;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import gcom.cobranca.CobrancaForma;
import gcom.cobranca.contratoparcelamento.ContratoParcelamento;
import gcom.cobranca.contratoparcelamento.ContratoParcelamentoCliente;
import gcom.cobranca.contratoparcelamento.FiltroContratoParcelamentoCliente;
import gcom.cobranca.contratoparcelamento.PrestacaoContratoParcelamento;
import gcom.cobranca.contratoparcelamento.PrestacaoContratoParcelamentoHelper;
import gcom.cobranca.parcelamento.ParcelamentoSituacao;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* [UC1201] Emitir Extrato de Contrato de Parcelamento por Cliente
*
* Este caso de uso permite emitir o extrato de uma ou todas as presta��es
* do contrato de parcelamento por cliente.
*
* @author Mariana Victor
* @since 29/07/2011
*/
public class ExibirEmitirExtratoContratoParcelamentoPorClienteAction extends GcomAction {
/**
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping
.findForward("exibirEmitirExtratoContratoParcelamentoPorCliente");
EmitirExtratoContratoParcelamentoPorClienteActionForm form = (EmitirExtratoContratoParcelamentoPorClienteActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
if (httpServletRequest.getParameter("inserirContrato") != null
&& httpServletRequest.getParameter("inserirContrato").toString().trim().equalsIgnoreCase("sim")) {
sessao.removeAttribute("exibirBotaoVoltar");
} else {
sessao.setAttribute("exibirBotaoVoltar", true);
}
if (httpServletRequest.getParameter("contratoAtualizarNumero") != null
&& !httpServletRequest.getParameter("contratoAtualizarNumero").toString().trim().equals("")) {
String numeroContrato = httpServletRequest.getParameter("contratoAtualizarNumero").toString();
// 1. O sistema obt�m os dados do contrato de parcelamento por cliente
ContratoParcelamento contratoParcelamento = fachada.obterDadosContratoParcelamento(numeroContrato);
// [FS0002] ? Verificar exist�ncia de contrato com o n�mero recebido
// Caso n�o exista o contrato de parcelamento por cliente com o n�mero recebido
if (contratoParcelamento == null
|| contratoParcelamento.getId() == null) {
throw new ActionServletException(
"atencao.numero.contrato.parcelamento.nao.existe", numeroContrato.toString());
}
// [FS0003] - Verificar forma de pagamento
// Caso a forma de pagamento do contrato n�o seja COBRANCA POR EXTRATO
if (contratoParcelamento.getCobrancaForma() == null
|| contratoParcelamento.getCobrancaForma().getId() == null
|| contratoParcelamento.getCobrancaForma().getId().compareTo(
CobrancaForma.COBRANCA_POR_EXTRATO) != 0) {
throw new ActionServletException(
"atencao.nao_possivel.emitir_extrato.cobranca_form.nao_permitida",
new String[] {
numeroContrato.toString(),
contratoParcelamento.getCobrancaForma().getDescricao()
});
}
//[FS0004] - Verificar contrato pago ou encerrado.
// Caso o contrato esteja pago
if (contratoParcelamento.getValorParcelamentoACobrar() == null
|| contratoParcelamento.getValorParcelamentoACobrar().compareTo(BigDecimal.ZERO) == 0) {
throw new ActionServletException(
"atencao.contrato_parcelamento.ja_pago", numeroContrato.toString());
}
//Caso o contrato esteja encerrado
if (contratoParcelamento.getParcelamentoSituacao() == null
|| contratoParcelamento.getParcelamentoSituacao().getId() == null
|| contratoParcelamento.getParcelamentoSituacao().getId().compareTo(ParcelamentoSituacao.NORMAL) != 0) {
throw new ActionServletException(
"atencao.contrato_parcelamento.nao_possivel.emitir_extrato",
new String[] {
numeroContrato.toString(),
contratoParcelamento.getParcelamentoSituacao().getDescricao()
});
}
contratoParcelamento.setNumero(numeroContrato);
Integer idClienteContrato = fachada.pesquisarIdClientecontrato(contratoParcelamento.getId());
sessao.setAttribute("idClienteContratoConsultar", idClienteContrato);
this.carregarCamposForm(contratoParcelamento, form, sessao);
} else {
sessao.removeAttribute("idClienteContratoConsultar");
throw new ActionServletException(
"atencao.naoinformado", "N�mero do Contrato de Parcelamento");
}
return retorno;
}
private void carregarCamposForm(ContratoParcelamento contratoParcelamento,
EmitirExtratoContratoParcelamentoPorClienteActionForm form, HttpSession sessao){
this.carregarDadosContrato(contratoParcelamento, form, sessao);
this.carregarDadosParcelamento(contratoParcelamento, form, sessao);
}
private void carregarDadosContrato(ContratoParcelamento contratoParcelamento,
EmitirExtratoContratoParcelamentoPorClienteActionForm form, HttpSession sessao){
Fachada fachada = Fachada.getInstancia();
// 2.1.1. N�mero do Contrato
form.setNumeroContrato(contratoParcelamento.getNumero());
FiltroContratoParcelamentoCliente filtroContratoParcelamentoCliente = new FiltroContratoParcelamentoCliente();
filtroContratoParcelamentoCliente.adicionarParametro(new ParametroSimples(
FiltroContratoParcelamentoCliente.ID_CONTRATO, contratoParcelamento.getId()));
filtroContratoParcelamentoCliente.adicionarCaminhoParaCarregamentoEntidade(
FiltroContratoParcelamentoCliente.CLIENTE);
filtroContratoParcelamentoCliente.adicionarCaminhoParaCarregamentoEntidade(
FiltroContratoParcelamentoCliente.CLIENTE_SUPERIOR);
Collection colecaoContratoParcelamentoCliente = fachada
.pesquisar(filtroContratoParcelamentoCliente, ContratoParcelamentoCliente.class.getName());
// 2.1.2. Cliente
if (colecaoContratoParcelamentoCliente != null
&& !colecaoContratoParcelamentoCliente.isEmpty()) {
ContratoParcelamentoCliente contratoParcelamentoCliente = this.retornaClienteSuperior(colecaoContratoParcelamentoCliente);
// caso o contrato tenha sido implantado para um cliente superior,
if (contratoParcelamentoCliente != null) {
//c�digo
form.setCodigoCliente(contratoParcelamentoCliente
.getCliente().getId().toString());
//nome
form.setNomeCliente(contratoParcelamentoCliente
.getCliente().getNome());
//CNPJ
form.setCnpjCliente(contratoParcelamentoCliente
.getCliente().getCnpj());
sessao.removeAttribute("exibirTipoRelacaoCliente");
} else {
// caso contr�rio, ou seja, o contrato n�o foi implantado para um cliente superior
contratoParcelamentoCliente = (ContratoParcelamentoCliente)
Util.retonarObjetoDeColecao(colecaoContratoParcelamentoCliente);
// c�digo
form.setCodigoCliente(contratoParcelamentoCliente
.getCliente().getId().toString());
//nome
form.setNomeCliente(contratoParcelamentoCliente
.getCliente().getNome());
//CNPJ
form.setCnpjCliente(contratoParcelamentoCliente
.getCliente().getCnpj());
//tipo da rela��o
form.setTipoRelacao(contratoParcelamento.getRelacaoCliente().getDescricao());
sessao.setAttribute("exibirTipoRelacaoCliente", true);
}
}
// 2.1.3. Data Implanta��o do Contrato
form.setDataImplantacao(Util.formatarData(contratoParcelamento.getDataImplantacao()));
}
private void carregarDadosParcelamento(ContratoParcelamento contratoParcelamento,
EmitirExtratoContratoParcelamentoPorClienteActionForm form, HttpSession sessao){
Fachada fachada = Fachada.getInstancia();
// 2.2. Dados do Parcelamento
// 2.2.1. Parcelas
Collection<PrestacaoContratoParcelamento> colecaoPrestacoes = fachada.
obterDadosPrestacoesContratoParcelamento(contratoParcelamento.getId());
Collection<PrestacaoContratoParcelamentoHelper> colecaoHelper = new ArrayList<PrestacaoContratoParcelamentoHelper>();
if (colecaoPrestacoes != null && !colecaoPrestacoes.isEmpty()) {
Iterator iterator = colecaoPrestacoes.iterator();
while(iterator.hasNext()) {
PrestacaoContratoParcelamento prestacaoContratoParcelamento = (PrestacaoContratoParcelamento) iterator.next();
PrestacaoContratoParcelamentoHelper helper = new PrestacaoContratoParcelamentoHelper();
helper.setIdParcela(prestacaoContratoParcelamento.getId());
// 2.2.1.1. Parcela/No. Presta��es
helper.setNumeroParcela(prestacaoContratoParcelamento.getNumero().toString());
helper.setNumeroPrestacoes("" + colecaoPrestacoes.size());
// 2.2.1.2. Data de Vencimento
helper.setDataVencimento(Util.formatarData(prestacaoContratoParcelamento.getDataVencimento()));
// 2.2.1.3. Valor da Parcela
helper.setValorParcela(Util.formatarMoedaReal(prestacaoContratoParcelamento.getValor()));
// 2.2.1.4. Situa��o
// caso a parcela j� tenha sido paga
if (fachada.verificaPrestacaoPaga(prestacaoContratoParcelamento.getId())) {
helper.setSituacao("Paga");
}
colecaoHelper.add(helper);
}
sessao.setAttribute("colecaoPrestacaoContratoParcelamentoHelper", colecaoHelper);
}
}
public ContratoParcelamentoCliente retornaClienteSuperior(Collection<ContratoParcelamentoCliente> colecaoContratoParcelamentoCliente) {
Iterator iterator = colecaoContratoParcelamentoCliente.iterator();
while(iterator.hasNext()) {
ContratoParcelamentoCliente contratoParcelamentoCliente = (ContratoParcelamentoCliente) iterator.next();
if (contratoParcelamentoCliente.getIndicadorClienteSuperior() != null
&& contratoParcelamentoCliente.getIndicadorClienteSuperior().compareTo(ConstantesSistema.SIM) == 0) {
return contratoParcelamentoCliente;
}
}
return null;
}
}