package gcom.gui.cobranca.contratoparcelamento;
import gcom.cobranca.CobrancaForma;
import gcom.cobranca.FiltroCobrancaForma;
import gcom.cobranca.contratoparcelamento.ComparatorParcela;
import gcom.cobranca.contratoparcelamento.ContratoParcelamentoRD;
import gcom.cobranca.contratoparcelamento.QuantidadePrestacoes;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.List;
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;
/**
* Action que define o pr�-processamento da p�gina de Inserir Resolucao de Diretoria para Contrato pro Cliente
*
* @author Paulo Diniz
* @created 16/03/2011
*/
public class InserirResolucaoDiretoriaContratoParcelamentoAction extends
GcomAction {
/**
* Este caso de uso permite a inclus�o de uma resolu��o de diretoria
*
* [UC1133] Inserir Resolu��o de Diretoria para Contratos de Parcelamento por Cliente
*
*
* @author Paulo Diniz
* @date 16/03/2011
*
* @param actionMapping
* @param actionForm
* @param httpServletRequest
* @param httpServletResponse
* @return
*/
//Obt�m a inst�ncia da fachada
Fachada fachada = Fachada.getInstancia();
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
String method = httpServletRequest.getParameter("method");
ActionForward retorno = actionMapping.findForward("exibirInserir");
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
InserirResolucaoDiretoriaContratoParcelamentoActionForm form = (InserirResolucaoDiretoriaContratoParcelamentoActionForm) actionForm;
//ContratoParcelamentoRD que vai ser cadastrado no sistema
ContratoParcelamentoRD contratoCadastrar = (ContratoParcelamentoRD) sessao
.getAttribute("contratoCadastrar");
if (contratoCadastrar == null) {
contratoCadastrar = new ContratoParcelamentoRD();
}
if(method != null && method.equals("concluirInserirRD")){
List<QuantidadePrestacoes> parcelas = (List<QuantidadePrestacoes>) sessao.getAttribute("parcelas");
if (form.getIndicadorParcelamentoJuros() != null
&& !form.getIndicadorParcelamentoJuros().toString().trim().equals("")
&& form.getIndicadorParcelamentoJuros().compareTo(ConstantesSistema.SIM) == 0){
form.setIndicadorInformarParcela(ConstantesSistema.NAO);
}
String validacao = validarFormulario(form);
//Verifica a exist�ncia de algum ContratoParcelamentoRD com o n�mero informado pelo usu�rio
if (form != null && form.getNumero() != null && !"".equals(form.getNumero())){
ContratoParcelamentoRD contrato = fachada.pesquisarContratoParcelamentoRDPorNumero(form.getNumero());
if(contrato != null ){
validacao = "J� existe RD com este n�mero. Informe outro n�mero";
}
}
if(validacao.equals("") && validarNumeroMaxParc(parcelas, form) == false){
validacao = "Parcela informada excede o n�mero m�ximo de parcelas da RD";
}
if(!validacao.equals("")){
carregarFormContratoCadastrar(contratoCadastrar, form);
Collections.sort(parcelas, new ComparatorParcela());
sessao.setAttribute("parcelas", parcelas);
sessao.setAttribute("contratoCadastrar", contratoCadastrar);
sessao.setAttribute("atencao", validacao);
sessao.setAttribute("voltar","document.forms[0].submit();");
retorno = actionMapping.findForward("exibirError");
}else{
carregarFormContratoCadastrar(contratoCadastrar, form);
Collections.sort(parcelas, new ComparatorParcela());
Integer contratoId = (Integer) fachada.inserirContratoParcelamentoResolucaoDiretoria(contratoCadastrar,parcelas,usuarioLogado);
if(contratoId != null && contratoId != 0){
retorno = actionMapping.findForward("telaSucesso");
montarPaginaSucesso(
httpServletRequest,
"Resolu��o de diretoria para contratos de parcelamento por cliente - "
+ contratoCadastrar.getNumero() +" - inserida com sucesso",
"Inserir outra Resolu��o de diretoria para contratos de parcelamento por cliente",
"exibirInserirResolucaoDiretoriaContratoParcelamentoAction.do?menu=sim",
"exibirAtualizarResolucaoDiretoriaContratoParcelamentoAction.do?numeroContratoParcelamentoRD="+ contratoCadastrar.getNumero(),
"Atualizar Resolu��o de diretoria para contratos de parcelamento por cliente inserida");
}else{
throw new ActionServletException("erro.sistema");
}
}
}else if(method != null && method.equals("inserirParcela")){
retorno = actionMapping.findForward("exibirInserir");
List<QuantidadePrestacoes> parcelas = (List<QuantidadePrestacoes>) sessao.getAttribute("parcelas");
if(parcelas == null){
parcelas = new ArrayList<QuantidadePrestacoes>();
}
String parcela = httpServletRequest.getParameter("parcela");
String taxaJuros = httpServletRequest.getParameter("taxaJuros");
boolean parcelaExistente = false;
boolean campoInvalido = false;
if(parcela != null && !parcela.equals("")
&& taxaJuros != null && !taxaJuros.equals("")
&& Util.formatarMoedaRealparaBigDecimal(taxaJuros).compareTo(BigDecimal.ZERO) != 0){
for (QuantidadePrestacoes prestacoes : parcelas) {
if(prestacoes.getQtdFaturasParceladas() == Integer.parseInt(parcela)){
parcelaExistente = true;
}
}
}else{
campoInvalido = true;
}
if(parcelaExistente == false && campoInvalido == false){
QuantidadePrestacoes prestacao = new QuantidadePrestacoes();
prestacao.setQtdFaturasParceladas(Integer.parseInt(parcela));
prestacao.setUltimaAlteracao(new Date());
taxaJuros = taxaJuros.replace(',','.');
if (taxaJuros.trim().equals("")) {
taxaJuros = "0";
}
BigDecimal taxa = new BigDecimal(taxaJuros);
prestacao.setTaxaJuros(taxa);
parcelas.add(prestacao);
carregarFormContratoCadastrar(contratoCadastrar, form);
Collections.sort(parcelas, new ComparatorParcela());
sessao.setAttribute("parcelas", parcelas);
sessao.setAttribute("contratoCadastrar", contratoCadastrar);
}else{
carregarFormContratoCadastrar(contratoCadastrar, form);
sessao.setAttribute("parcelas", parcelas);
sessao.setAttribute("contratoCadastrar", contratoCadastrar);
if(parcelaExistente){
throw new ActionServletException(
"atencao.parcela_informada_ja_existente");
}else {
throw new ActionServletException(
"atencao.erro_invalido", "Campo Parcelas ou Taxa de Juros");
}
}
}else if(method != null && method.equals("removerParcela")){
retorno = actionMapping.findForward("exibirInserir");
List<QuantidadePrestacoes> parcelas = (List<QuantidadePrestacoes>) sessao.getAttribute("parcelas");
String parcela = httpServletRequest.getParameter("parcela");
if(parcela != null && !parcela.equals("")){
for (int i = 0; i < parcelas.size(); i++) {
if(parcelas.get(i).getQtdFaturasParceladas() == Integer.parseInt(parcela)){
parcelas.remove(i);
i = parcelas.size();
}
}
}else{
throw new ActionServletException("erro.sistema");
}
carregarFormContratoCadastrar(contratoCadastrar, form);
Collections.sort(parcelas, new ComparatorParcela());
sessao.setAttribute("parcelas", parcelas);
sessao.setAttribute("contratoCadastrar", contratoCadastrar);
} else if(method != null && method.equals("limparColecaoParcelas")) {
contratoCadastrar.setIndicadorParcelamentoJuros(ConstantesSistema.NAO);
form.setIndicadorParcelamentoJuros(ConstantesSistema.NAO);
sessao.removeAttribute("parcelas");
sessao.setAttribute("contratoCadastrar", contratoCadastrar);
}
return retorno;
}
/**Inicio dos metodos Privados**/
private void carregarFormContratoCadastrar(ContratoParcelamentoRD contratoCadastrar, InserirResolucaoDiretoriaContratoParcelamentoActionForm form){
if (form != null && !"".equals(form.getNumero())){
contratoCadastrar.setNumero(form.getNumero());
}
if (form != null && !"".equals(form.getAssunto())){
contratoCadastrar.setAssunto(form.getAssunto());
}
if (form != null && !"".equals(form.getDataVigenciaInicial())){
contratoCadastrar.setDataVigenciaInicio(Util.converteStringParaDate(form.getDataVigenciaInicial()));
}
if (form != null && !"".equals(form.getDataVigenciaFinal())){
contratoCadastrar.setDataVigenciaFinal(Util.converteStringParaDate(form.getDataVigenciaFinal()));
}
if (form != null && !"".equals(form.getIndicadorDebitoAcrescimo())){
contratoCadastrar.setIndicadorDebitoAcrescimo(form.getIndicadorDebitoAcrescimo());
}
if (form != null && !"".equals(form.getIndicadorInformarParcela())){
contratoCadastrar.setIndicadorInformarParcela(form.getIndicadorInformarParcela());
}
if (form != null && !"".equals(form.getIndicadorParcelamentoJuros())){
contratoCadastrar.setIndicadorParcelamentoJuros(form.getIndicadorParcelamentoJuros());
}
if (form != null && !"".equals(form.getQtdFaturasParceladas())){
contratoCadastrar.setQtdFaturasParceladas(Integer.parseInt(form.getQtdFaturasParceladas()));
}
if (form != null && !"".equals(form.getFormaPgto())){
Collection<CobrancaForma> formasPagto = fachada.pesquisar(new FiltroCobrancaForma(), CobrancaForma.class.getName());
for (CobrancaForma formaPgto : formasPagto) {
if(formaPgto.getId() == Integer.parseInt(form.getFormaPgto())){
contratoCadastrar.setCobrancaForma(formaPgto);
}
}
}
}
private String validarFormulario(InserirResolucaoDiretoriaContratoParcelamentoActionForm form){
String retorno = "";
if (form.getNumero() == null || "".equals(form.getNumero())){
retorno = "N�mero ";
}
if (form.getAssunto() == null || "".equals(form.getAssunto())){
retorno = "Assunto ";
}
if (form.getDataVigenciaInicial() == null || "".equals(form.getDataVigenciaInicial())){
retorno = "Data Vig�ncia Inicial ";
}
if (form.getDataVigenciaFinal() == null || "".equals(form.getDataVigenciaFinal())){
retorno = "Data Vig�ncia Final ";
}
if (form.getIndicadorDebitoAcrescimo() == null || "".equals(form.getIndicadorDebitoAcrescimo())){
retorno = "D�bito com Acr�scimo ";
}
if (form.getIndicadorParcelamentoJuros() == null || "".equals(form.getIndicadorParcelamentoJuros())){
retorno = "Parcelamento com Juros ";
}
if (form.getIndicadorInformarParcela() == null || "".equals(form.getIndicadorInformarParcela())){
retorno = "Indicador Informar o Valor da Parcela ";
}
if (form.getQtdFaturasParceladas() == null || "".equals(form.getQtdFaturasParceladas())){
retorno = "N�mero M�ximo de Parcelas ";
}
if (form.getFormaPgto() == null || "".equals(form.getFormaPgto())){
retorno = "Forma de Pagamento ";
}
if(!retorno.equals("")){
retorno = "Informe: " + retorno;
}
Date dataInicial = Util.converteStringParaDate(form.getDataVigenciaInicial());
Date dataFinal = Util.converteStringParaDate(form.getDataVigenciaFinal());
if(dataInicial == null || dataFinal == null){
retorno = "Data inv�lida";
}else{
if(dataFinal.before(dataInicial)){
retorno = "Data In�cio da Vig�ncia deve ser anterior ou igual � Data Fim da Vig�ncia";
}
}
return retorno;
}
private boolean validarNumeroMaxParc(List<QuantidadePrestacoes> parcelas, InserirResolucaoDiretoriaContratoParcelamentoActionForm form){
boolean retorno = true;
if (form.getQtdFaturasParceladas() != null && !"".equals(form.getQtdFaturasParceladas())){
for (QuantidadePrestacoes parcela : parcelas) {
if(parcela.getQtdFaturasParceladas().intValue() > Integer.parseInt(form.getQtdFaturasParceladas())){
retorno = false;
}
}
}
return retorno;
}
}