package gcom.gui.faturamento.conta;
import gcom.atendimentopublico.registroatendimento.EspecificacaoTipoValidacao;
import gcom.cadastro.cliente.ClienteImovel;
import gcom.cadastro.cliente.ClienteRelacaoTipo;
import gcom.cadastro.cliente.FiltroClienteImovel;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.faturamento.FiltroVencimentoAlternativo;
import gcom.faturamento.VencimentoAlternativo;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.Util;
import gcom.util.filtro.ParametroNulo;
import gcom.util.filtro.ParametroSimples;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
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;
public class ExibirInformarVencimentoAlternativoAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
HttpSession sessao = httpServletRequest.getSession(false);
InformarVencimentoAlternativoActionForm informarVencimentoAlternativoActionForm = (InformarVencimentoAlternativoActionForm) actionForm;
if (Util.verificarNaoVazio(informarVencimentoAlternativoActionForm.getIdImovel())) {
Collection<ClienteImovel> colecaoClienteImovel = obterColecaoClienteImovel(informarVencimentoAlternativoActionForm);
if (Util.isVazioOrNulo(colecaoClienteImovel)) {
httpServletRequest.setAttribute("corInscricao", "exception");
httpServletRequest.setAttribute("nomeCampo", "idImovel");
limparFormESessao(informarVencimentoAlternativoActionForm,sessao);
informarVencimentoAlternativoActionForm.setInscricaoImovel("Matr�cula Inexistente");
}else{
setarDadosFormESessao(informarVencimentoAlternativoActionForm,colecaoClienteImovel, sessao);
}
}
return actionMapping.findForward("informarVencimentoAlternativo");
}
/**
* Limpa todos os campos que seriam exibidos na tela,
* sejam eles do form ou da sess�o.
*
*@since 23/10/2009
*@author Marlon Patrick
*/
private void limparFormESessao(
InformarVencimentoAlternativoActionForm informarVencimentoAlternativoActionForm,
HttpSession sessao) {
informarVencimentoAlternativoActionForm.setIdImovel("");
informarVencimentoAlternativoActionForm.setInscricaoImovel("");
informarVencimentoAlternativoActionForm.setNomeClienteUsuario("");
informarVencimentoAlternativoActionForm.setSituacaoAguaImovel("");
informarVencimentoAlternativoActionForm.setSituacaoEsgotoImovel("");
informarVencimentoAlternativoActionForm.setDiaVencimentoGrupo("");
informarVencimentoAlternativoActionForm.setDiaVencimentoAtual("");
informarVencimentoAlternativoActionForm.setDataAlteracaoVencimento("");
informarVencimentoAlternativoActionForm.setIndicadorVencimentoMesSeguinte("");
sessao.removeAttribute("vencimentoAlternativo");
sessao.removeAttribute("colecaoNovoDiaVencimento");
sessao.removeAttribute("imovel");
}
/**
* Este m�todo seta as informa��es a serem exibidas para o usu�rio
* no form e na sess�o, para que a JSP respons�vel processe os dados.
*
*@since 22/10/2009
*@author Marlon Patrick
*/
private void setarDadosFormESessao(
InformarVencimentoAlternativoActionForm informarVencimentoAlternativoActionForm,
Collection<ClienteImovel> colecaoClienteImovel, HttpSession sessao) {
Fachada fachada = Fachada.getInstancia();
ClienteImovel clienteImovel = colecaoClienteImovel.iterator().next();
fachada.verificarExistenciaRegistroAtendimento(clienteImovel.getImovel().getId(), "atencao.vencimento_alternativo_existencia_registro_atendimento",EspecificacaoTipoValidacao.VENCIMENTO_ALTERNATIVO);
informarVencimentoAlternativoActionForm.setInscricaoImovel(clienteImovel.getImovel().getInscricaoFormatada());
informarVencimentoAlternativoActionForm
.setNomeClienteUsuario(clienteImovel.getCliente().getNome());
informarVencimentoAlternativoActionForm
.setSituacaoAguaImovel(clienteImovel.getImovel().getLigacaoAguaSituacao().getDescricao());
informarVencimentoAlternativoActionForm
.setSituacaoEsgotoImovel(clienteImovel.getImovel().getLigacaoEsgotoSituacao().getDescricao());
informarVencimentoAlternativoActionForm.setDiaVencimentoGrupo("");
if(clienteImovel.getImovel().getQuadra().getRota().getFaturamentoGrupo().getDiaVencimento()!=null
&& !clienteImovel.getImovel().getQuadra().getRota().getFaturamentoGrupo().getDiaVencimento().equals(0)){
informarVencimentoAlternativoActionForm
.setDiaVencimentoGrupo(clienteImovel.getImovel().getQuadra().getRota().getFaturamentoGrupo().getDiaVencimento().toString());
}
informarVencimentoAlternativoActionForm.setDiaVencimentoAtual("");
if(clienteImovel.getImovel().getDiaVencimento() != null && !clienteImovel.getImovel().getDiaVencimento().equals(0)){
informarVencimentoAlternativoActionForm
.setDiaVencimentoAtual(clienteImovel.getImovel().getDiaVencimento().toString());
}
FiltroVencimentoAlternativo filtroVencimentoAlternativo = new FiltroVencimentoAlternativo(FiltroVencimentoAlternativo.DATA_IMPLANTACAO);
filtroVencimentoAlternativo
.adicionarParametro(new ParametroSimples(
FiltroVencimentoAlternativo.IMOVEL_ID, clienteImovel.getImovel().getId()));
Collection<VencimentoAlternativo> vencimentosAlternativos = fachada.pesquisar(
filtroVencimentoAlternativo, VencimentoAlternativo.class.getName());
if (!Util.isVazioOrNulo(vencimentosAlternativos)) {
VencimentoAlternativo vencimentoAlternativo = vencimentosAlternativos.iterator().next();
informarVencimentoAlternativoActionForm.setDataAlteracaoVencimento("");
if (vencimentoAlternativo.getDataImplantacao() != null) {
informarVencimentoAlternativoActionForm.setDataAlteracaoVencimento(
new SimpleDateFormat("dd/MM/yyyy").format(vencimentoAlternativo.getDataImplantacao()));
}
sessao.setAttribute("vencimentoAlternativo", vencimentoAlternativo);
}
sessao.setAttribute("colecaoNovoDiaVencimento",criarColecaoNovoDiaPagamento(clienteImovel, sessao));
if (clienteImovel.getImovel().getIndicadorVencimentoMesSeguinte() != null){
informarVencimentoAlternativoActionForm.setIndicadorVencimentoMesSeguinte(clienteImovel.getImovel().getIndicadorVencimentoMesSeguinte().toString());
}else{
informarVencimentoAlternativoActionForm.setIndicadorVencimentoMesSeguinte("2");
}
sessao.setAttribute("imovel", clienteImovel.getImovel());
}
/**
* Este m�todo cria a cole��o de dias de vencimento alternativo
* dispon�vel para esse im�vel.<br/>
* Caso o usu�rio tenha permiss�o especial de informar um vencimento alternativo,
* ent�o a cole��o ser� sempre os dias de 1 a 30.<br/>
* Caso exista dados no campo dias de vencimento alternatico na tabela sistema parametro,
* ent�o os dias poss�veis ser�os esses.
* Caso nenhuma das duas op��es anteriores seja atendida, ent�o os poss�veis dias para o vencimento
* ser�o do dia depois do dia de vencimento do grupo at� o dia 30.
*
*@since 22/10/2009
*@author Marlon Patrick
*/
private Collection<Integer> criarColecaoNovoDiaPagamento(
ClienteImovel clienteImovel, HttpSession sessao) {
boolean isUsuarioComPermissaoInformarVencimentoAlternativoNovaData = Fachada.getInstancia()
.verificarPermissaoInformarVencimentoAlternativoNovaData((Usuario)sessao.getAttribute(Usuario.USUARIO_LOGADO));
List<Integer> colecaoNovoDiaVencimento = new ArrayList<Integer>();
if (isUsuarioComPermissaoInformarVencimentoAlternativoNovaData) {
for (int i = 1; i <= 30; i++) {
colecaoNovoDiaVencimento.add(i);
}
return colecaoNovoDiaVencimento;
}
SistemaParametro parametrosSistema = this.getFachada().pesquisarParametrosDoSistemaAtualizados();
if(Util.verificarNaoVazio(parametrosSistema.getDiasVencimentoAlternativo())){
String[] diasVencimento = parametrosSistema.getDiasVencimentoAlternativo().split(";");
for (String diaAtual : diasVencimento) {
if(Util.verificarNaoVazio(diaAtual)){
colecaoNovoDiaVencimento.add(new Integer(diaAtual.trim()));
}
}
Collections.sort(colecaoNovoDiaVencimento);
return colecaoNovoDiaVencimento;
}
String empresaCAERN = ""+ parametrosSistema.getCodigoEmpresaFebraban();
if (empresaCAERN.equals("6") ) {
colecaoNovoDiaVencimento.add(1);
colecaoNovoDiaVencimento.add(5);
colecaoNovoDiaVencimento.add(10);
colecaoNovoDiaVencimento.add(25);
colecaoNovoDiaVencimento.add(27);
colecaoNovoDiaVencimento.add(30);
} else {
int i =
clienteImovel.getImovel().getQuadra().getRota().
getFaturamentoGrupo().getDiaVencimento() + 1;
int ultimoDiaVencimentoAlternativo = 30;
if(parametrosSistema.getUltimoDiaVencimentoAlternativo() != null ){
ultimoDiaVencimentoAlternativo = parametrosSistema.getUltimoDiaVencimentoAlternativo().intValue();
}
for (; i <= ultimoDiaVencimentoAlternativo; i++) {
colecaoNovoDiaVencimento.add(i);
}
}
return colecaoNovoDiaVencimento;
}
/**
* Obt�m o ClienteImovel relacionado ao im�vel informado,
* onde a rela��o entre o cliente e o im�vel seja de Usu�rio.
*
*@since 22/10/2009
*@author Marlon Patrick
*/
private Collection<ClienteImovel> obterColecaoClienteImovel(
InformarVencimentoAlternativoActionForm informarVencimentoAlternativoActionForm) {
FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel();
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("imovel");
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("imovel.setorComercial");
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("imovel.quadra");
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("imovel.ligacaoAguaSituacao");
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("imovel.ligacaoEsgotoSituacao");
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("cliente");
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("imovel.quadra.rota.faturamentoGrupo");
filtroClienteImovel.adicionarCaminhoParaCarregamentoEntidade("imovel");
filtroClienteImovel.adicionarParametro(new ParametroSimples(
FiltroClienteImovel.IMOVEL_ID,
informarVencimentoAlternativoActionForm.getIdImovel()));
filtroClienteImovel.adicionarParametro(new ParametroSimples(
FiltroClienteImovel.CLIENTE_RELACAO_TIPO,
ClienteRelacaoTipo.USUARIO));
filtroClienteImovel.adicionarParametro(new ParametroNulo(
FiltroClienteImovel.DATA_FIM_RELACAO));
return Fachada.getInstancia().pesquisar(
filtroClienteImovel, ClienteImovel.class.getName());
}
}