package gcom.gui.faturamento.conta;
import gcom.arrecadacao.pagamento.Pagamento;
import gcom.atendimentopublico.ligacaoagua.FiltroLigacaoAguaSituacao;
import gcom.atendimentopublico.ligacaoagua.LigacaoAguaSituacao;
import gcom.atendimentopublico.ligacaoesgoto.FiltroLigacaoEsgotoSituacao;
import gcom.atendimentopublico.ligacaoesgoto.LigacaoEsgotoSituacao;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.faturamento.conta.ContaMotivoRetificacao;
import gcom.faturamento.conta.FiltroMotivoRetificacaoConta;
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.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.GregorianCalendar;
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;
/**
* Retifica��o de um conjunto de contas
*
* @author Raphael Rossiter
* @date 05/06/2009
*/
public class ExibirRetificarConjuntoContaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("exibirRetificarConjuntoConta");
RetificarConjuntoContaActionForm retificarConjuntoContaActionForm = (RetificarConjuntoContaActionForm) actionForm;
retificarConjuntoContaActionForm.setMotivoRetificacaoID(String.valueOf(ConstantesSistema.NUMERO_NAO_INFORMADO));
Fachada fachada = Fachada.getInstancia();
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
// -------------------------------------------------------------------------------------------
// Alterado por : Hugo Leonardo - data : 02/07/2010
// Analista : Fabiola Araujo.
// [SB0008] Retificar um Conjunto de Contas
//-------------------------------------------------------------------------------------------
if(sistemaParametro.getIndicadorCalculaVencimento() == 1){
Date dtCorrente = new Date();
Integer diasAdicionais = 0;
if(sistemaParametro.getNumeroDiasAlteracaoVencimentoPosterior() != null){
diasAdicionais = sistemaParametro.getNumeroDiasAlteracaoVencimentoPosterior().intValue();
}
Date dataCorrenteComDias = Util.adicionarNumeroDiasDeUmaData(dtCorrente, diasAdicionais.intValue());
retificarConjuntoContaActionForm.setVencimentoConta(Util.formatarData(dataCorrenteComDias));
}else{
retificarConjuntoContaActionForm.setVencimentoConta("");
}
// -------------------------------------------------------------------------------------------
retificarConjuntoContaActionForm.setLigacaoAguaSituacaoID(String.valueOf(ConstantesSistema.NUMERO_NAO_INFORMADO));
retificarConjuntoContaActionForm.setConsumoAgua("");
retificarConjuntoContaActionForm.setLigacaoEsgotoSituacaoID(String.valueOf(ConstantesSistema.NUMERO_NAO_INFORMADO));
retificarConjuntoContaActionForm.setConsumoEsgoto("");
retificarConjuntoContaActionForm.setIndicadorCategoriaEconomiaConta("" + ConstantesSistema.SIM);
HttpSession sessao = httpServletRequest.getSession(false);
/*
* RECEBIMENTO DOS PAR�METROS PARA QUANDO O RETIFICAR CONJUNTO DE CONTAS TIVER SIDO
* CHAMADO PELO MANTER CONTA
*/
this.recebimentoParametrosManterConta(httpServletRequest, sessao,
retificarConjuntoContaActionForm, fachada);
/*
* RECEBIMENTO DOS PAR�METROS PARA QUANDO O RETIFICAR CONJUNTO DE CONTAS TIVER SIDO
* CHAMADO PELO MANTER CONTA DE UM CONJUNTO DE IM�VEIS
*/
this.recebimentoParametrosManterContaConjuntoImoveis(httpServletRequest, sessao);
/*CARREGAMENTO INICIAL DO FORMUL�RIO
========================================================================================== */
//Motivo da Retifica��o (Carregar cole��o) e remover as cole��es que ainda est�o na sess�o
Collection colecaoMotivoRetificacaoConta;
if (sessao.getAttribute("colecaoMotivoRetificacaoConta") == null) {
FiltroMotivoRetificacaoConta filtroMotivoRetificacaoConta = new FiltroMotivoRetificacaoConta(
FiltroMotivoRetificacaoConta.DESCRICAO_MOTIVO_RETIFICACAO_CONTA);
filtroMotivoRetificacaoConta.adicionarParametro(new ParametroSimples(
FiltroMotivoRetificacaoConta.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
colecaoMotivoRetificacaoConta = fachada.pesquisar(filtroMotivoRetificacaoConta,
ContaMotivoRetificacao.class.getName());
if (colecaoMotivoRetificacaoConta == null
|| colecaoMotivoRetificacaoConta.isEmpty()) {
throw new ActionServletException(
"atencao.pesquisa.nenhum_registro_tabela", null,
"MOTIVO_RETIFICACAO_CONTA");
} else {
sessao.setAttribute("colecaoMotivoRetificacaoConta",
colecaoMotivoRetificacaoConta);
}
}
Collection colecaoSituacaoLigacaoAgua, colecaoSituacaoLigacaoEsgoto;
//Situa��o Liga��o �gua (Carregar cole��o)
if (sessao.getAttribute("colecaoSituacaoLigacaoAgua") == null) {
FiltroLigacaoAguaSituacao filtroLigacaoAguaSituacao = new FiltroLigacaoAguaSituacao(
FiltroLigacaoAguaSituacao.DESCRICAO);
filtroLigacaoAguaSituacao.adicionarParametro(new ParametroSimples(
FiltroLigacaoAguaSituacao.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
colecaoSituacaoLigacaoAgua = fachada.pesquisar(filtroLigacaoAguaSituacao,
LigacaoAguaSituacao.class.getName());
if (colecaoSituacaoLigacaoAgua == null
|| colecaoSituacaoLigacaoAgua.isEmpty()) {
throw new ActionServletException(
"atencao.pesquisa.nenhum_registro_tabela", null,
"LIGACAO_AGUA_SITUACAO");
} else {
sessao.setAttribute("colecaoLigacaoAguaSituacao",
colecaoSituacaoLigacaoAgua);
}
}
//Situa��o Liga��o Esgoto (Carregar cole��o)
if (sessao.getAttribute("colecaoSituacaoLigacaoEsgoto") == null) {
FiltroLigacaoEsgotoSituacao filtroLigacaoEsgotoSituacao = new FiltroLigacaoEsgotoSituacao(
FiltroLigacaoEsgotoSituacao.DESCRICAO);
filtroLigacaoEsgotoSituacao.adicionarParametro(new ParametroSimples(
FiltroLigacaoEsgotoSituacao.INDICADOR_USO,
ConstantesSistema.INDICADOR_USO_ATIVO));
colecaoSituacaoLigacaoEsgoto = fachada.pesquisar(filtroLigacaoEsgotoSituacao,
LigacaoEsgotoSituacao.class.getName());
if (colecaoSituacaoLigacaoEsgoto == null
|| colecaoSituacaoLigacaoEsgoto.isEmpty()) {
throw new ActionServletException(
"atencao.pesquisa.nenhum_registro_tabela", null,
"LIGACAO_ESGOTO_SITUACAO");
} else {
sessao.setAttribute("colecaoLigacaoEsgotoSituacao",
colecaoSituacaoLigacaoEsgoto);
}
}
//Carregar a data corrente do sistema
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
Calendar dataCorrente = new GregorianCalendar();
//Ultimo dia do m�s corrente.
Date ultimaDataMes = Util.obterUltimaDataMes(Util.getMes(dataCorrente.getTime()), Util.getAno(dataCorrente.getTime()));
httpServletRequest.setAttribute("ultimaDataMes", formatoData.format(ultimaDataMes));
httpServletRequest.setAttribute("indicadorCalculaVencimento", sistemaParametro.getIndicadorCalculaVencimento());
//Data Corrente
httpServletRequest.setAttribute("dataAtual", formatoData
.format(dataCorrente.getTime()));
//Data Corrente + 60 dias
dataCorrente.add(Calendar.DATE, 60);
httpServletRequest.setAttribute("dataAtual60", formatoData
.format(dataCorrente.getTime()));
/*
* Costante que informa o ano limite para o campo anoMesReferencia da conta
*/
httpServletRequest.setAttribute("anoLimite", ConstantesSistema.ANO_LIMITE);
//========================================================================================
httpServletRequest.setAttribute("nomeCampo", "vencimentoConta");
return retorno;
}
/**
* RECEBIMENTO DOS PAR�METROS PARA QUANDO O RETIFICAR CONJUNTO DE CONTAS TIVER SIDO
* CHAMADO PELO MANTER CONTA
*
* @author Raphael Rossiter
* @date 05/06/2009
*
* @param httpServletRequest
* @param sessao
* @param retificarConjuntoContaActionForm
* @param fachada
*/
private void recebimentoParametrosManterConta(HttpServletRequest httpServletRequest,
HttpSession sessao, RetificarConjuntoContaActionForm retificarConjuntoContaActionForm,
Fachada fachada){
//Im�vel
String idImovel = httpServletRequest.getParameter("idImovel");
if (idImovel != null && !idImovel.equals("")){
//Carregando o identificador das contas selecionadas
String contaSelected = httpServletRequest.getParameter("contaRetificarConjunto");
retificarConjuntoContaActionForm.setContaSelected(contaSelected);
//Vefirica exist�ncia do Imovel Condominio
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("imovelCondominio");
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID, new Integer(idImovel)));
Collection colecaoImovel = fachada.pesquisar(filtroImovel, Imovel.class.getName());
Imovel imovel = (Imovel) colecaoImovel.iterator().next();
//Indicador imovel condominio
if(imovel.getImovelCondominio() != null){
httpServletRequest.setAttribute("idImovelCondominio", imovel.getImovelCondominio().getId());
}
/* Bruno Barros
05 de Janeiro de 2009
[FS0026] - Verificar a permiss�o especial para exibir as contas
pagas.
. Verificar se as contas selecionadas para o im�vel se encontram
pagas, atrav�s do identificador da conta CNTA_ID nas tabelas
ARRECADACAO.PAGAMENTO. Caso o usu�rio possua permiss�o especial,
as contas identificadas nas condi��es ser�o apresentadas e
poder�o ser retificadas e atualizadas, de acordo com processos
j� existentes. Caso contr�rio, ser�o apenas apresentadas as
contas sem possibilitar que o usu�rio atualize ou retifique as
contas pagas.
*/
boolean usuarioPodeAtualizarRetificarContasPagas = fachada.verificarPermissaoEspecial(
PermissaoEspecial.ATUALIZAR_RETIFICAR_CONTAS_PAGAS, ( Usuario ) sessao.getAttribute(
Usuario.USUARIO_LOGADO ) );
if ( !usuarioPodeAtualizarRetificarContasPagas ){
//Verifica se houve sele��o de contas
String[] arrayIdentificadores = null;
if (contaSelected != null) {
arrayIdentificadores = contaSelected.split(",");
}
for (int index = 0; index < arrayIdentificadores.length; index++) {
String dadosConta = arrayIdentificadores[index];
String[] idUltimaAlteracao = dadosConta.split("-");
Pagamento pagamento = fachada.pesquisarPagamentoDeConta( Integer.parseInt( idUltimaAlteracao[0] ) );
if ( pagamento != null ){
throw new ActionServletException(
"atencao.necessario_permissao_especial_para_atualizar_retificar_contas_pagas", null,
"MOTIVO_RETIFICACAO_CONTA");
}
}
}
}
}
/**
* RECEBIMENTO DOS PAR�METROS PARA QUANDO O RETIFICAR CONJUNTO DE CONTAS TIVER SIDO
* CHAMADO PELO MANTER CONTA DE UM CONJUNTO DE IM�VEIS
*
* @author Raphael Rossiter
* @date 05/06/2009
*
* @param httpServletRequest
* @param sessao
*/
private void recebimentoParametrosManterContaConjuntoImoveis(HttpServletRequest httpServletRequest,
HttpSession sessao){
Integer anoMes = null;
Integer anoMesFim = null;
Date dataVencimentoContaInicio = null;
Date dataVencimentoContaFim = null;
String indicadorContaPaga = null;
Integer idGrupoFaturamento = null;
String codigoCliente = null;
if(httpServletRequest.getParameter("mesAno") != null){
anoMes = Util.formatarMesAnoComBarraParaAnoMes(httpServletRequest.getParameter("mesAno"));
sessao.setAttribute("anoMes", anoMes);
}
if(httpServletRequest.getParameter("mesAnoFim") != null){
anoMesFim = Util.formatarMesAnoComBarraParaAnoMes(httpServletRequest.getParameter("mesAnoFim"));
sessao.setAttribute("anoMesFim", anoMesFim);
}
if (httpServletRequest.getParameter("dataVencimentoContaInicial") != null){
dataVencimentoContaInicio = Util.converteStringParaDate(httpServletRequest.getParameter("dataVencimentoContaInicial"));
sessao.setAttribute("dataVencimentoContaInicial", dataVencimentoContaInicio);
}
if (httpServletRequest.getParameter("dataVencimentoContaFinal") != null){
dataVencimentoContaFim = Util.converteStringParaDate(httpServletRequest.getParameter("dataVencimentoContaFinal"));
sessao.setAttribute("dataVencimentoContaFinal", dataVencimentoContaFim);
}
if (httpServletRequest.getParameter("indicadorContaPaga") != null){
indicadorContaPaga = httpServletRequest.getParameter("indicadorContaPaga");
sessao.setAttribute("indicadorContaPaga", indicadorContaPaga);
}
if (httpServletRequest.getParameter("idGrupoFaturamento") != null){
idGrupoFaturamento = new Integer((String) httpServletRequest.getParameter("idGrupoFaturamento"));
sessao.setAttribute("idGrupoFaturamento", idGrupoFaturamento);
}
if (httpServletRequest.getParameter("codigoCliente") != null){
codigoCliente = (String) httpServletRequest.getParameter("codigoCliente");
sessao.setAttribute("codigoCliente", codigoCliente);
}
}
}