package gcom.gui.cobranca.contratoparcelamento;
import gcom.arrecadacao.aviso.AvisoBancario;
import gcom.cobranca.contratoparcelamento.FiltroContratoParcelamentoPrestacao;
import gcom.cobranca.contratoparcelamento.InformarPagamentoContratoParcelamentoHelper;
import gcom.cobranca.contratoparcelamento.PrestacaoContratoParcelamento;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.io.IOException;
import java.util.Collection;
import java.util.Date;
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;
/**
* [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente
*
* @author Mariana Victor
* @since 27/05/2011
*/
public class InformarPagamentoContratoParcelamentoPorClienteAction extends ExibidorProcessamentoTarefaRelatorio {
/**
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
* @throws IOException
*/
@SuppressWarnings("unchecked")
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws IOException {
ActionForward retorno = actionMapping.findForward("telaSucesso");
InformarPagamentoContratoParcelamentoPorClienteActionForm form = (InformarPagamentoContratoParcelamentoPorClienteActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
// Obtendo uma instancia da sessao
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
//[FS0001] - Verificar preenchimento dos campos
this.verificarPreenchimentoCampos(form);
InformarPagamentoContratoParcelamentoHelper helper = new InformarPagamentoContratoParcelamentoHelper(form);
//[SB0003] � Efetuar Pagamento da Parcela do Contrato de Parcelamento Por Cliente
Object[] dadosPagamento = fachada.efetuarPagamentoParcelaContratoParcelamentoPorCliente(helper, usuarioLogado);
AvisoBancario avisoBancario = (AvisoBancario) dadosPagamento[0];
//10. O sistema apresenta a tela de sucesso de acordo com as seguintes regras:
//10.1. Caso o valor do pagamento tenha sido superior ao valor efetivamente descontado do contrato
if (avisoBancario.getValorArrecadacaoInformado().compareTo(avisoBancario.getValorArrecadacaoCalculado()) > 0) {
montarPaginaSucesso(httpServletRequest, "N�o h� mais contas ou d�bitos a cobrar sem pagamento." +
" Em raz�o disso, o contrato foi conclu�do e um pagamento foi gerado com o valor pago a maior.",
"Informar pagamento para outro Contrato de Parcel. por Cliente",
"exibirInformarPagamentoContratoParcelamentoPorClienteAction.do?menu=sim",
"gerarRelatorioEmitirComprovantePagContratoParcelamentoAction.do?tipoRelatorio="
+ TarefaRelatorio.TIPO_PDF + "&numeroParcela=" + helper.getNumeroParcela()
+ "&numeroContrato=" + helper.getNumeroContrato(),
"Emitir Comprovante de Pagamento da Parcela");
} else {
String numeroPagamento = "";
if (form.getNumeroContrato() == null
|| form.getNumeroContrato().equals("")) {
FiltroContratoParcelamentoPrestacao filtroContratoParcelamentoPrestacao = new FiltroContratoParcelamentoPrestacao();
filtroContratoParcelamentoPrestacao.adicionarParametro(new ParametroSimples(FiltroContratoParcelamentoPrestacao.ID, avisoBancario.getNumeroDocumento()));
filtroContratoParcelamentoPrestacao.adicionarCaminhoParaCarregamentoEntidade(FiltroContratoParcelamentoPrestacao.CONTRATO_PARCEL);
Collection colecaoContratoParcelamentoPrestacao = fachada.pesquisar(filtroContratoParcelamentoPrestacao, PrestacaoContratoParcelamento.class.getName());
if (colecaoContratoParcelamentoPrestacao != null
&& !colecaoContratoParcelamentoPrestacao.isEmpty()) {
PrestacaoContratoParcelamento prestacaoContratoParcelamento = (PrestacaoContratoParcelamento)
Util.retonarObjetoDeColecao(colecaoContratoParcelamentoPrestacao);
numeroPagamento = prestacaoContratoParcelamento.getContratoParcelamento().getNumero();
}
} else {
numeroPagamento = form.getNumeroContrato();
}
montarPaginaSucesso(httpServletRequest, "Pagamento da Parcela " + form.getNumeroParcela() +
" do Contrato de Parcelamento por Cliente - " + numeroPagamento +
" - efetuado com sucesso. ",
"Informar pagamento para outro Contrato de Parcel. por Cliente",
"exibirInformarPagamentoContratoParcelamentoPorClienteAction.do?menu=sim",
"gerarRelatorioEmitirComprovantePagContratoParcelamentoAction.do?tipoRelatorio="
+ TarefaRelatorio.TIPO_PDF + "&numeroParcela=" + helper.getNumeroParcela()
+ "&numeroContrato=" + helper.getNumeroContrato(),
"Emitir Comprovante de Pagamento da Parcela");
}
return retorno;
}
/**
* [UC1146] Informar Pagamento Contrato de Parcelamento por Cliente
* [FS0001] - Verificar preenchimento dos campos
*
* @author Mariana Victor
* @since 06/06/2011
* */
private void verificarPreenchimentoCampos(InformarPagamentoContratoParcelamentoPorClienteActionForm form) {
if ((form.getIdCliente() == null || form.getIdCliente().trim().equals(""))
&& (form.getNumeroContrato() == null || form.getNumeroContrato().trim().equals(""))) {
throw new ActionServletException("atencao.contrato_parcelamento_por_cliente.informe.contrato_ou_cliente");
}
if (form.getIdRegistro() == null || form.getIdRegistro().trim().equals("")) {
throw new ActionServletException("atencao.contrato_parcelamento_por_cliente.selecione.pelo_menos_um.contrato");
}
if (form.getIdArrecadador() == null || form.getIdArrecadador().trim().equals("")) {
throw new ActionServletException("atencao.campo_selecionado.obrigatorio", new String[] {"Arrecadador"});
}
if (form.getDataPagamento() == null || form.getDataPagamento().trim().equals("")) {
throw new ActionServletException("atencao.campo_selecionado.obrigatorio", new String[] {"Data de Pagamento"});
} else if (Util.converteStringParaDate(form.getDataPagamento()).compareTo(new Date()) > 0) {
throw new ActionServletException("atencao.contrato.superio.data.corrente", new String[]{Util.formatarData(new Date())});
}
}
}