package gcom.gui.micromedicao;
import gcom.atendimentopublico.ligacaoagua.LigacaoAguaSituacao;
import gcom.atendimentopublico.ligacaoesgoto.LigacaoEsgotoSituacao;
import gcom.cadastro.imovel.FiltroImovel;
import gcom.cadastro.imovel.Imovel;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.micromedicao.FiltroRateioTipo;
import gcom.micromedicao.RateioTipo;
import gcom.micromedicao.hidrometro.FiltroHidrometroInstalacaoHistorico;
import gcom.micromedicao.hidrometro.HidrometroInstalacaoHistorico;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.Util;
import gcom.util.filtro.ParametroNulo;
import gcom.util.filtro.ParametroSimples;
import java.util.ArrayList;
import java.util.Collection;
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;
/**
* Atualizar Tipo de Rateio
* <p>
* [UC0098] Manter V�nculos de Im�veis para Rateio de Consumo
* </p>
*
* @author Rafael Santos, Magno Gouveia
* @since 12/01/2006, 17/08/2011
*/
public class AtualizarTipoRateioPopupAction extends GcomAction {
Fachada fachada = Fachada.getInstancia();
/**
* Description of the Method
*
* @param actionMapping
* Description of the Parameter
* @param actionForm
* Description of the Parameter
* @param httpServletRequest
* Description of the Parameter
* @param httpServletResponse
* Description of the Parameter
* @return Description of the Return Value
*/
@Override
public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("telaSucessoPopup");
HttpSession sessao = httpServletRequest.getSession(false);
AtualizarTipoRateioPopupActionForm form = (AtualizarTipoRateioPopupActionForm) actionForm;
String tipoRateioLigacaoAgua = form.getRateioTipoAgua();
String tipoRateioLigacaoPoco = form.getRateioTipoPoco();
Imovel imovel = null;
if (sessao.getAttribute("imovelVinculado") != null) {
imovel = (Imovel) sessao.getAttribute("imovelVinculado");
HidrometroInstalacaoHistorico hidrometroInstalacaoHistoricoAgua = null;
HidrometroInstalacaoHistorico hidrometroInstalacaoHistoricoPoco = null;
if (tipoRateioLigacaoAgua != null && !tipoRateioLigacaoAgua.equals("")) {
// Rateio Tipo Agua
FiltroRateioTipo filtroRateioTipo = new FiltroRateioTipo();
filtroRateioTipo.adicionarParametro(new ParametroSimples(FiltroRateioTipo.ID,
tipoRateioLigacaoAgua));
RateioTipo rateioTipo = (RateioTipo) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroRateioTipo, RateioTipo.class.getName()));
FiltroHidrometroInstalacaoHistorico filtroHidrometroInstalacaoHistorico = new FiltroHidrometroInstalacaoHistorico();
filtroHidrometroInstalacaoHistorico.adicionarParametro(new ParametroSimples(FiltroHidrometroInstalacaoHistorico.LIGACAO_AGUA_ID,
imovel.getId()));
filtroHidrometroInstalacaoHistorico.adicionarParametro(new ParametroNulo(FiltroHidrometroInstalacaoHistorico.DATA_RETIRADA));
filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("ligacaoAgua");
Collection colecaoHidrometroInstalacaoHistorico = fachada.pesquisar(filtroHidrometroInstalacaoHistorico, HidrometroInstalacaoHistorico.class.getName());
if (colecaoHidrometroInstalacaoHistorico != null && !colecaoHidrometroInstalacaoHistorico.isEmpty()) {
hidrometroInstalacaoHistoricoAgua = (HidrometroInstalacaoHistorico) Util.retonarObjetoDeColecao(colecaoHidrometroInstalacaoHistorico);
hidrometroInstalacaoHistoricoAgua.setRateioTipo(rateioTipo);
}
}
if (tipoRateioLigacaoPoco != null && !tipoRateioLigacaoPoco.equals("")) {
FiltroRateioTipo filtroRateioTipo = new FiltroRateioTipo();
filtroRateioTipo.adicionarParametro(new ParametroSimples(FiltroRateioTipo.ID,
tipoRateioLigacaoPoco));
// Rateio Tipo Poco
RateioTipo rateioTipo = (RateioTipo) Util.retonarObjetoDeColecao(fachada.pesquisar(filtroRateioTipo, RateioTipo.class.getName()));
FiltroHidrometroInstalacaoHistorico filtroHidrometroInstalacaoHistorico = new FiltroHidrometroInstalacaoHistorico();
filtroHidrometroInstalacaoHistorico.adicionarParametro(new ParametroSimples(FiltroHidrometroInstalacaoHistorico.IMOVEL_ID,
imovel.getId()));
filtroHidrometroInstalacaoHistorico.adicionarCaminhoParaCarregamentoEntidade("ligacaoAgua");
filtroHidrometroInstalacaoHistorico.adicionarParametro(new ParametroNulo(FiltroHidrometroInstalacaoHistorico.DATA_RETIRADA));
Collection colecaoHidrometroInstalacaoHistorico = fachada.pesquisar(filtroHidrometroInstalacaoHistorico, HidrometroInstalacaoHistorico.class.getName());
if (colecaoHidrometroInstalacaoHistorico != null && !colecaoHidrometroInstalacaoHistorico.isEmpty()) {
hidrometroInstalacaoHistoricoPoco = (HidrometroInstalacaoHistorico) Util.retonarObjetoDeColecao(colecaoHidrometroInstalacaoHistorico);
hidrometroInstalacaoHistoricoPoco.setRateioTipo(rateioTipo);
}
}
if (httpServletRequest.getParameter("confirmado") != null) {
if (httpServletRequest.getParameter("confirmado").equalsIgnoreCase("ok")) {
/*
* [SB0004] � Informar Im�vel para �rea Comum Caso o im�vel pesquisado n�o
* exista ou seja diferente do im�vel a qual ser� vinculado Caso esteja com
* valor = nulo imov_id correspondente ao im�vel condom�nio que est� sendo
* atualizado
*/
Integer matriculaImovelAreaComum = Integer.parseInt((String) sessao.getAttribute("matriculaImovelAreaComum"));
Integer imovelCondominioDoImovelAreaComum = this.fachada.pesquisarImovelCondominio(matriculaImovelAreaComum);
if (imovelCondominioDoImovelAreaComum == null
|| !imovelCondominioDoImovelAreaComum.equals(imovel.getId())) {
Collection<Imovel> imoveisParaVincular = new ArrayList<Imovel>();
Imovel imovelParaVincular = this.fachada.pesquisarImovel(matriculaImovelAreaComum);
imovelParaVincular.setImovelCondominio(imovel);
imoveisParaVincular.add(imovelParaVincular);
fachada.estabelecerVinculo(imovel, imoveisParaVincular, null, hidrometroInstalacaoHistoricoAgua, hidrometroInstalacaoHistoricoPoco, (Usuario) sessao.getAttribute(Usuario.USUARIO_LOGADO));
}
atualizarTipoRateio(sessao, imovel, hidrometroInstalacaoHistoricoAgua, hidrometroInstalacaoHistoricoPoco, true, matriculaImovelAreaComum);
}
} else {
/*
* [SB0001] Caso o usu�rio selecione o bot�o ATUALIZAR TIPO DE RATEIO Caso o tipo de
* rateio tenha sido atualizado para 'RATEIO POR �REA COMUM' o sistema valida a
* matr�cula para �rea comum
*/
if (tipoRateioLigacaoAgua != null
&& Integer.valueOf(tipoRateioLigacaoAgua).equals(RateioTipo.RATEIO_AREA_COMUM)) {
FiltroImovel filtroImovel = new FiltroImovel();
filtroImovel.adicionarParametro(new ParametroSimples(FiltroImovel.ID,
form.getMatriculaImovelAreaComum()));
filtroImovel.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.QUADRA);
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("quadra.rota");
filtroImovel.adicionarCaminhoParaCarregamentoEntidade(FiltroImovel.LIGACAO_AGUA_SITUACAO);
// Procura Imovel na base
Collection colecaoImoveis = fachada.pesquisar(filtroImovel, Imovel.class.getName());
// [FS0001] Verificar exit�ncia da matr�cula do im�vel
if (colecaoImoveis != null && colecaoImoveis.isEmpty()) {
throw new ActionServletException("atencao.pesquisa_inexistente",
null,
"Matr�cula");
}
Imovel imovelASerVinculado = (Imovel) Util.retonarObjetoDeColecao(colecaoImoveis);
if (imovel != null && imovelASerVinculado.getId().intValue() == imovel.getId().intValue()) {
throw new ActionServletException("atencao.imovel_condominio.nao.vincular.imovel");
}
/*
* [FS0003] Verificar exit�ncia de v�nculo com outro im�vel condom�nio
*/
if (imovelASerVinculado.getImovelCondominio() != null
&& (imovelASerVinculado.getImovelCondominio().getId() != null)
&& (imovelASerVinculado.getImovelCondominio().getId().intValue() != imovel.getId().intValue())) {
throw new ActionServletException("atencao.imovel.vinculado",
null,
imovelASerVinculado.getImovelCondominio().getId().toString());
}
// [FS0004] Verificar se o im�vel j� � um condom�nio
if (imovelASerVinculado.getIndicadorImovelCondominio() != null
&& imovelASerVinculado.getIndicadorImovelCondominio().shortValue() == Imovel.IMOVEL_CONDOMINIO.shortValue()) {
throw new ActionServletException("atencao.imovel.condominio");
}
// [FS0006] Verificar Rota
if (imovel != null) {
if (imovel.getQuadra().getRota().getId().intValue() != imovelASerVinculado.getQuadra()
.getRota()
.getId()
.intValue()) {
throw new ActionServletException("atencao.imovel.nao_rota");
}
}
// [FS0010] Verificar pr�-requisitos para im�vel vinculado
if (imovel != null) {
if (imovel.getLigacaoAguaSituacao().getId().intValue() != LigacaoAguaSituacao.LIGADO.intValue()
&& imovelASerVinculado.getLigacaoAguaSituacao().getId().intValue() == LigacaoAguaSituacao.LIGADO.intValue()
&& imovelASerVinculado.getLigacaoAguaSituacao().getId().intValue() == LigacaoAguaSituacao.CORTADO.intValue()) {
throw new ActionServletException("atencao.imovel.agua.incompativel.condominio");
}
if (imovel.getLigacaoEsgotoSituacao().getId().intValue() != LigacaoEsgotoSituacao.LIGADO.intValue()
&& imovelASerVinculado.getLigacaoEsgotoSituacao().getId().intValue() == LigacaoEsgotoSituacao.LIGADO.intValue()
&& imovelASerVinculado.getLigacaoEsgotoSituacao().getId().intValue() == LigacaoEsgotoSituacao.LIG_FORA_DE_USO.intValue()) {
throw new ActionServletException("atencao.imovel.esgoto.incompativel.condominio");
}
if (imovel.getLigacaoEsgotoSituacao().getId().intValue() == LigacaoEsgotoSituacao.LIGADO.intValue()
&& imovelASerVinculado.getLigacaoEsgotoSituacao().getId().intValue() != LigacaoEsgotoSituacao.LIGADO.intValue()
&& imovelASerVinculado.getLigacaoEsgotoSituacao().getId().intValue() != LigacaoEsgotoSituacao.LIG_FORA_DE_USO.intValue()) {
throw new ActionServletException("atencao.imovel.esgoto.incompativel.condominio");
}
}
// FS0012
if (form.getMatriculaImovelAreaComum() == null || form.getMatriculaImovelAreaComum().length() == 0) {
form.setMatriculaImovelAreaComum(form.getMatriculaImovelAreaComumAtual());
}
this.validarMatriculaParaAreaComum(form.getMatriculaImovelAreaComum());
// FS0013 e FS0014
boolean imovelNaoVinculadoAoCondominio = this.validarVinculoMatriculaAreaComum(imovel.getId(), form.getMatriculaImovelAreaComum());
// FS0014
if (imovelNaoVinculadoAoCondominio) {
sessao.setAttribute("matriculaImovelAreaComum", form.getMatriculaImovelAreaComum());
httpServletRequest.setAttribute("caminhoActionConclusao", "/gsan/atualizarTipoRateioPopupAction.do");
httpServletRequest.setAttribute("nomeBotao1", "Sim");
httpServletRequest.setAttribute("nomeBotao2", "N�o");
String[] params = new String[] { form.getMatriculaImovelAreaComum(), imovel.getId().toString() };
return montarPaginaConfirmacao("atencao.confirmar_vinculo_matricula_area_comum", httpServletRequest, actionMapping, params);
} else {
/*
* O im�vel informado j� est� vinculado ao im�vel condom�nio, ent�o s�
* atualiza o indicadorImovelAreaComum
*/
atualizarTipoRateio(sessao, imovel, hidrometroInstalacaoHistoricoAgua, hidrometroInstalacaoHistoricoPoco, true, Util.converterStringParaInteger(form.getMatriculaImovelAreaComum()));
}
} else {
atualizarTipoRateio(sessao, imovel, hidrometroInstalacaoHistoricoAgua, hidrometroInstalacaoHistoricoPoco, false, Util.converterStringParaInteger(form.getMatriculaImovelAreaComum()));
}
}
}
httpServletRequest.setAttribute("fechar", "true");
// liberar da sessao
if (sessao.getAttribute("imovelVinculado") != null) {
sessao.removeAttribute("imovelVinculado");
}
// Monta a p�gina de sucesso
if (retorno.getName().equalsIgnoreCase("telaSucessoPopup")) {
montarPaginaSucesso(httpServletRequest, "Tipo de Rateio do im�vel condom�nio de matr�cula " + imovel.getId()
+ " atualizado com sucesso.", "", "");
}
return retorno;
}
/*
* alterado por pedro alexandre dia 19/11/2006 Recupera o usu�rio logado para passar no met�do
* de atualizar tipo de rateio para verificar se o usu�rio tem abrang�ncia para atualizar o tipo
* de rateio informado.
*/
private void atualizarTipoRateio(HttpSession sessao, Imovel imovel,
HidrometroInstalacaoHistorico hidrometroInstalacaoHistoricoAgua,
HidrometroInstalacaoHistorico hidrometroInstalacaoHistoricoPoco, boolean isRateioPorAreaComum,
Integer imovelAreaComum) {
Usuario usuarioLogado = (Usuario) sessao.getAttribute(Usuario.USUARIO_LOGADO);
// Atualizar Tipo Rateio
fachada.atualizarTipoRateio(imovel, hidrometroInstalacaoHistoricoAgua, hidrometroInstalacaoHistoricoPoco, usuarioLogado, isRateioPorAreaComum, imovelAreaComum);
}
/**
* [FS0012] - Validar Matricula para �rea Comum
*/
private void validarMatriculaParaAreaComum(String matriculaImovelAreaComum) {
/*
* Caso a matr�cula do im�vel para �rea comum n�o tenha sido informada, exibir mensagem
* 'Informe a matr�cula do im�vel para �rea comum' e retornar para o passo correspondente no
* fluxo principal
*/
if (matriculaImovelAreaComum == null || matriculaImovelAreaComum.trim().length() == 0) {
throw new ActionServletException("atencao.matricula_imovel_area_comum_nao_informada");
}
/*
* Caso a matr�cula do im�vel para �rea comum informada n�o exista na tabela IMOVEL, exibir
* a mensagem 'Matr�cula inexistente no cadastro' e retornar para o passo correspondente no
* fluxo principal
*/
Short indicadorExclusao = this.fachada.verificarExistenciaDoImovel(Integer.valueOf(matriculaImovelAreaComum));
if (indicadorExclusao == null) {
throw new ActionServletException("atencao.imovel_inexistente");
} else if (indicadorExclusao.equals(Imovel.IMOVEL_EXCLUIDO)) {
throw new ActionServletException("atencao.imovel_excluido");
}
}
/**
* [FS0013 � Validar Vinculo da Matr�cula para �rea Comum]
*/
private boolean validarVinculoMatriculaAreaComum(Integer idImovelCondominio, String matriculaImovelAreaComum) {
Integer imovelCondominioDoImovelAreaComumInformado = this.fachada.pesquisarImovelCondominio(Integer.valueOf(matriculaImovelAreaComum));
if (imovelCondominioDoImovelAreaComumInformado != null
&& !imovelCondominioDoImovelAreaComumInformado.equals(Integer.valueOf(idImovelCondominio))) {
throw new ActionServletException("atencao.imovel_vinculado_outro_condominio",
String.valueOf(imovelCondominioDoImovelAreaComumInformado));
}
return (imovelCondominioDoImovelAreaComumInformado == null);
}
}