package gcom.gui.faturamento.conta;
import gcom.atendimentopublico.ligacaoagua.FiltroLigacaoAguaSituacao;
import gcom.atendimentopublico.ligacaoagua.LigacaoAguaSituacao;
import gcom.atendimentopublico.ligacaoesgoto.FiltroLigacaoEsgotoSituacao;
import gcom.atendimentopublico.ligacaoesgoto.LigacaoEsgotoSituacao;
import gcom.batch.Processo;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.faturamento.bean.RetificarConjuntoContaConsumosHelper;
import gcom.faturamento.conta.Conta;
import gcom.faturamento.conta.ContaMotivoRetificacao;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.PermissaoEspecial;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
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 RetificarConjuntoContaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("exibirManterConta");
HttpSession sessao = httpServletRequest.getSession(false);
SistemaParametro sistemaParametro =
this.getFachada().pesquisarParametrosDoSistema();
RetificarConjuntoContaActionForm retificarConjuntoContaActionForm = (RetificarConjuntoContaActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
/*
* RECEBIMENTO DOS PAR�METROS PARA QUANDO O RETIFICAR CONJUNTO DE CONTAS TIVER SIDO
* CHAMADO PELO MANTER CONTA
*/
//Contas selecionadas pelo usu�rio
String identificadoresConta = retificarConjuntoContaActionForm.getContaSelected();
//TODAS AS CONTAS
Collection<Conta> colecaoContaImovel = (Collection) sessao.getAttribute("colecaoContaImovel");
/*
* RECEBIMENTO DOS PAR�METROS PARA QUANDO O RETIFICAR CONJUNTO DE CONTAS TIVER SIDO
* CHAMADO PELO MANTER CONTA DE UM CONJUNTO DE IM�VEIS
*/
Collection colecaoImovel = (Collection) sessao.getAttribute("colecaoImovel");
//RECEBENDO OS DADOS PARA RETIFICA��O DA(S) CONTA(S)
//DATA DE VENCIMENTO
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
Date dataVencimentoConta;
try{
dataVencimentoConta = formatoData.parse(retificarConjuntoContaActionForm.getVencimentoConta());
// Caso data corrente seja posterior a data corrente mais a quantidade de dias parametro.
Date dataCorrente = new Date();
Integer diasAdicionais = 0;
if(sistemaParametro.getNumeroDiasAlteracaoVencimentoPosterior() != null){
diasAdicionais = sistemaParametro.getNumeroDiasAlteracaoVencimentoPosterior().intValue();
}
Date dataCorrenteComDias = Util.adicionarNumeroDiasDeUmaData(dataCorrente, diasAdicionais.intValue());
// E o usu�rio n�o tenha permiss�o especial.
boolean temPermissaoParaRetificarDataVencimentoAlemPrazoPadrao =
this.getFachada().verificarPermissaoEspecial(
PermissaoEspecial.RETIFICAR_DATA_VENCIMENTO_ALEM_PRAZO_PADRAO,
usuarioLogado);
// 1 se a dataVencimentoConta for maior que a dataCorrenteComDias.
if(Util.compararData(dataVencimentoConta, dataCorrenteComDias) == 1 &&
temPermissaoParaRetificarDataVencimentoAlemPrazoPadrao == false){
throw new ActionServletException("atencao.necessario_permissao_especial_para_data_vencimento_posterior_permitido");
}
Calendar data1985 = new GregorianCalendar(1985, 1, 1);
if(Util.compararData(dataVencimentoConta, data1985.getTime()) == -1){
throw new ActionServletException("atencao.data_vencimento_menor_1985");
}
} catch (ParseException ex) {
dataVencimentoConta = null;
}
//LIGACAO_SITUACAO_AGUA
FiltroLigacaoAguaSituacao filtroLigacaoAguaSituacao = new FiltroLigacaoAguaSituacao();
filtroLigacaoAguaSituacao.adicionarParametro(new ParametroSimples(FiltroLigacaoAguaSituacao.ID, new
Integer(retificarConjuntoContaActionForm.getLigacaoAguaSituacaoID())));
Collection colecaoLigacaoAguaSituacao = fachada.pesquisar(filtroLigacaoAguaSituacao, LigacaoAguaSituacao.class.getName());
LigacaoAguaSituacao ligacaoAguaSituacao = (LigacaoAguaSituacao) Util.retonarObjetoDeColecao(colecaoLigacaoAguaSituacao);
Integer consumoAgua = 0;
if (retificarConjuntoContaActionForm.getConsumoAgua() != null &&
!retificarConjuntoContaActionForm.getConsumoAgua().equals("")){
consumoAgua = new Integer(retificarConjuntoContaActionForm.getConsumoAgua());
}
//LIGACAO_SITUACAO_ESGOTO
FiltroLigacaoEsgotoSituacao filtroLigacaoEsgotoSituacao = new FiltroLigacaoEsgotoSituacao();
filtroLigacaoEsgotoSituacao.adicionarParametro(new ParametroSimples(FiltroLigacaoEsgotoSituacao.ID, new
Integer(retificarConjuntoContaActionForm.getLigacaoEsgotoSituacaoID())));
Collection colecaoLigacaoEsgotoSituacao = fachada.pesquisar(filtroLigacaoEsgotoSituacao, LigacaoEsgotoSituacao.class.getName());
LigacaoEsgotoSituacao ligacaoEsgotoSituacao = (LigacaoEsgotoSituacao) Util.retonarObjetoDeColecao(colecaoLigacaoEsgotoSituacao);
Integer consumoEsgoto = 0;
if (retificarConjuntoContaActionForm.getConsumoEsgoto() != null &&
!retificarConjuntoContaActionForm.getConsumoEsgoto().equals("")){
consumoEsgoto = new Integer(retificarConjuntoContaActionForm.getConsumoEsgoto());
}
//CONTA_MOTIVO_REVISAO
ContaMotivoRetificacao contaMotivoRetificacao = new ContaMotivoRetificacao();
contaMotivoRetificacao.setId(new Integer(retificarConjuntoContaActionForm.getMotivoRetificacaoID()));
Short indicadorCategoriaEconomiaConta = null;
if (retificarConjuntoContaActionForm.getIndicadorCategoriaEconomiaConta() != null &&
retificarConjuntoContaActionForm.getIndicadorCategoriaEconomiaConta().equals(ConstantesSistema.NAO.toString())) {
indicadorCategoriaEconomiaConta = ConstantesSistema.NAO;
} else {
indicadorCategoriaEconomiaConta = ConstantesSistema.SIM;
}
//RETIFICANDO AS CONTAS A PARTIR DO CASO DE USO MANTER CONTA
if (colecaoContaImovel != null){
fachada.retificarConjuntoConta(colecaoContaImovel, identificadoresConta, ligacaoAguaSituacao, consumoAgua,
ligacaoEsgotoSituacao, consumoEsgoto, dataVencimentoConta, contaMotivoRetificacao, indicadorCategoriaEconomiaConta, usuarioLogado);
//Realizar um reload na tela de manter conta
httpServletRequest.setAttribute("reloadPage", "OK");
}
//RETIFICANDO AS CONTAS A PARTIR DO CASO DE USO MANTER CONTA DE UM CONJUNTO DE IM�VEIS
else if (colecaoImovel != null){
RetificarConjuntoContaConsumosHelper helper =
this.carregarRetificarConjuntoContaConsumosHelper(sessao);
helper.setColecaoImovel(colecaoImovel);
helper.setDataVencimentoContaRetificacao(dataVencimentoConta);
helper.setContaMotivoRetificacao(contaMotivoRetificacao);
helper.setLigacaoAguaSituacao(ligacaoAguaSituacao);
helper.setLigacaoEsgotoSituacao(ligacaoEsgotoSituacao);
helper.setConsumoAgua(consumoAgua);
helper.setVolumeEsgoto(consumoEsgoto);
helper.setIndicadorCategoriaEconomiaConta(indicadorCategoriaEconomiaConta);
//adicionado por Vivianne Sousa - 04/08/2009
Map parametros = new HashMap();
parametros.put("helper",helper);
Fachada.getInstancia().inserirProcessoIniciadoParametrosLivres(parametros,
Processo.RETIFICAR_CONJUNTO_CONTAS_CONSUMO,
this.getUsuarioLogado(httpServletRequest));
sessao.removeAttribute("anoMes");
sessao.removeAttribute("anoMesFim");
sessao.removeAttribute("dataVencimentoContaInicial");
sessao.removeAttribute("dataVencimentoContaFinal");
sessao.removeAttribute("indicadorContaPaga");
//Realizar um reload na tela de manter conta
httpServletRequest.setAttribute("reloadPageManterConjuntoConta", "OK");
}
return retorno;
}
private RetificarConjuntoContaConsumosHelper carregarRetificarConjuntoContaConsumosHelper(HttpSession sessao){
RetificarConjuntoContaConsumosHelper helper = new RetificarConjuntoContaConsumosHelper();
if(sessao.getAttribute("anoMes") != null){
helper.setAnoMes((Integer)sessao.getAttribute("anoMes"));
}
if(sessao.getAttribute("anoMesFim") != null){
helper.setAnoMesFim((Integer)sessao.getAttribute("anoMesFim"));
}
if (sessao.getAttribute("dataVencimentoContaInicial") != null){
helper.setDataVencimentoContaInicio((Date) sessao.getAttribute("dataVencimentoContaInicial"));
}
if (sessao.getAttribute("dataVencimentoContaFinal") != null){
helper.setDataVencimentoContaFim((Date) sessao.getAttribute("dataVencimentoContaFinal"));
}
if (sessao.getAttribute("indicadorContaPaga") != null){
helper.setIndicadorContaPaga((String) sessao.getAttribute("indicadorContaPaga"));
}
if (sessao.getAttribute("idGrupoFaturamento") != null){
helper.setIdGrupoFaturamento((Integer) sessao.getAttribute("idGrupoFaturamento"));
}
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
helper.setUsuarioLogado(usuarioLogado);
if(sessao.getAttribute("codigoClienteSuperior") != null){
helper.setCodigoClienteSuperior(new Integer( (String) sessao.getAttribute("codigoClienteSuperior")));
}
if(helper.getCodigoClienteSuperior() == null && sessao.getAttribute("codigoCliente") != null){
helper.setCodigoCliente(new Integer( (String) sessao.getAttribute("codigoCliente")));
}
return helper;
}
}