package gcom.gui.faturamento.conta;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.imovel.Imovel;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.faturamento.conta.Conta;
import gcom.faturamento.debito.DebitoCreditoSituacao;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.Abrangencia;
import gcom.seguranca.acesso.PermissaoEspecial;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
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 ExibirManterContaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = actionMapping.findForward("exibirManterConta");
Fachada fachada = Fachada.getInstancia();
// Mudar isso quando tiver esquema de seguran�a
HttpSession sessao = httpServletRequest.getSession(false);
// Inst�ncia do formul�rio que est� sendo utilizado
ManterContaActionForm manterContaActionForm = (ManterContaActionForm) actionForm;
String limparForm = httpServletRequest.getParameter("limparForm");
// DEFINI��O QUE IR� AUXILIAR O RETORNO DOS POPUPS
sessao.setAttribute("UseCase", "MANTERCONTA");
// Removendo cole��es da sess�o
sessao.removeAttribute("contaID");
if (limparForm != null && !limparForm.equalsIgnoreCase("")) {
sessao.removeAttribute("colecaoContaImovel");
}
if (sessao.getAttribute("erroConcorrencia") != null && !sessao.getAttribute("erroConcorrencia").equals("")) {
sessao.removeAttribute("erroConcorrencia");
throw new ActionServletException(
"atencao.atualizacao.timestamp");
}
/*
* Pesquisar o im�vel a partir da matr�cula do im�vel
* ======================================================================
*/
String idImovel = manterContaActionForm.getIdImovel();
String idImovelRequest = httpServletRequest.getParameter("idImovelRequest");
if ((idImovel != null && !idImovel.equalsIgnoreCase("")) ||
(idImovelRequest != null && !idImovelRequest.equalsIgnoreCase(""))) {
/*FiltroImovel filtroImovel = new FiltroImovel();
// Objetos que ser�o retornados pelo hobernate
filtroImovel.adicionarCaminhoParaCarregamentoEntidade("localidade");
filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("setorComercial.codigo");
filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("quadra.numeroQuadra");
filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("ligacaoAguaSituacao.descricao");
filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("ligacaoEsgotoSituacao.descricao");
filtroImovel
.adicionarCaminhoParaCarregamentoEntidade("ligacaoEsgoto.percentual");
// Realizando a pesquisa do im�vel a partir da matr�cula recebida
if (idImovel != null && !idImovel.equalsIgnoreCase("")){
filtroImovel.adicionarParametro(new ParametroSimples(
FiltroImovel.ID, idImovel));
}
else{
filtroImovel.adicionarParametro(new ParametroSimples(
FiltroImovel.ID, idImovelRequest));
}
/*
* Apenas im�veis que n�o foram exclu�dos poder�o inserir conta
* (IMOV_ICEXCLUSAO = 1)
*/
/*
filtroImovel.adicionarParametro(new ParametroSimplesDiferenteDe(FiltroImovel.INDICADOR_IMOVEL_EXCLUIDO,
Imovel.IMOVEL_EXCLUIDO));
*/
/** alterado por pedro alexandre dia 22/11/2006
* Recupera o usu�rio logado para passar no met�do de colocar conta em revis�o
* para verificar se o usu�rio tem abrang�ncia para colocar uma conta em revis�o
* para o im�vel informado.
*/
Usuario usuarioLogado = (Usuario)sessao.getAttribute(Usuario.USUARIO_LOGADO);
Collection colecaoImovel = new ArrayList();
//Collection colecaoImovel = fachada.pesquisar(filtroImovel,Imovel.class.getName());
//colecaoImovel.add(fachada.pesquisarImovelContaManter(filtroImovel,usuarioLogado));
Imovel imovel = null;
if (idImovel != null && !idImovel.equalsIgnoreCase("")){
imovel = fachada.pesquisarImovelRegistroAtendimento(new Integer(idImovel));
}
else{
imovel = fachada.pesquisarImovelRegistroAtendimento(new Integer(idImovelRequest));
}
colecaoImovel.add(imovel);
// ------------ CONTROLE DE ABRANGENCIA ----------------
Abrangencia abrangencia = new Abrangencia(usuarioLogado, imovel);
if (!fachada.verificarAcessoAbrangencia(abrangencia)) {
throw new ActionServletException("atencao.acesso.negado.abrangencia");
}
// ------------ FIM CONTROLE DE ABRANGENCIA ------------
/** fim altera��o ***************************************************************/
// [FS0002] - Verificar exist�ncia da matr�cula do im�vel
if (colecaoImovel == null || colecaoImovel.isEmpty()) {
//throw new ActionServletException("atencao.imovel.inexistente");
httpServletRequest.setAttribute("corInscricao", "exception");
manterContaActionForm.setIdImovel("");
manterContaActionForm.setInscricaoImovel("Matr�cula Inexistente");
httpServletRequest.setAttribute("nomeCampo", "idImovel");
manterContaActionForm.setNomeClienteUsuario("");
manterContaActionForm.setSituacaoAguaImovel("");
manterContaActionForm.setSituacaoEsgotoImovel("");
sessao.removeAttribute("colecaoContaImovel");
}
else{
Imovel objetoImovel = (Imovel) Util
.retonarObjetoDeColecao(colecaoImovel);
/*
* Pesquisar o cliente usu�rio do im�vel selecionado
* ======================================================================
*/
/*FiltroClienteImovel filtroClienteImovel = new FiltroClienteImovel();
// Objetos que ser�o retornados pelo hibernate.
filtroClienteImovel
.adicionarCaminhoParaCarregamentoEntidade("cliente.nome");
filtroClienteImovel.adicionarParametro(new ParametroSimples(
FiltroClienteImovel.CLIENTE_RELACAO_TIPO,
ClienteRelacaoTipo.USUARIO));
filtroClienteImovel.adicionarParametro(new ParametroNulo(
FiltroClienteImovel.FIM_RELACAO_MOTIVO));
Collection colecaoClienteImovel = fachada.pesquisar(
filtroClienteImovel, ClienteImovel.class.getName());
*/
//ClienteImovel objetoClienteImovel = (ClienteImovel) Util
// .retonarObjetoDeColecao(colecaoClienteImovel);
String matriculaImovel = null;
if (idImovel != null && !idImovel.equalsIgnoreCase("")){
matriculaImovel = idImovel;
}
else{
matriculaImovel = idImovelRequest;
}
Cliente cliente = fachada.pesquisarClienteUsuarioImovel(new Integer(matriculaImovel));
// Verifica exist�ncia do cliente usu�rio
if (cliente == null) {
throw new ActionServletException("atencao.naocadastrado", null,
"cliente do tipo usu�rio foi");
}
/*
* O sistema exibe uma lista das contas do im�vel com situa��o atual
* normal, retificada ou inclu�da
* ======================================================================
*/
Collection colecaoContaImovel = fachada.obterContasImovelManter(objetoImovel, DebitoCreditoSituacao.NORMAL,
DebitoCreditoSituacao.INCLUIDA, DebitoCreditoSituacao.RETIFICADA);
SistemaParametro sistemaParametro = fachada
.pesquisarParametrosDoSistema();
if (sistemaParametro.getIndicadorBloqueioContasContratoParcelManterConta() != null
&& sistemaParametro.getIndicadorBloqueioContasContratoParcelManterConta().equals(ConstantesSistema.SIM)) {
colecaoContaImovel = fachada.obterColecaoSemContasEmContratoParcelamento(
colecaoContaImovel);
}
if (httpServletRequest.getParameter("limpaTela")!= null
&& !httpServletRequest.getParameter("limpaTela").equals("")){
//qd volta da msg de
//O im�vel de matr�cula {} n�o possui nenhuma conta
manterContaActionForm.setNomeClienteUsuario("");
manterContaActionForm.setSituacaoAguaImovel("");
manterContaActionForm.setSituacaoEsgotoImovel("");
sessao.removeAttribute("colecaoContaImovel");
}else if ((colecaoContaImovel == null || colecaoContaImovel.isEmpty()) && sessao.getAttribute("cancelar") == null) {
// [FS0003] - Verificar exist�ncia de alguma conta
throw new ActionServletException(
"atencao.pesquisa.nenhuma.conta_imovel", "exibirManterContaAction.do?limpaTela=1", new Exception(),
manterContaActionForm.getIdImovel());
}
// Carregando as informa��es do im�vel no formul�rio de exibi��o.
if (idImovel == null || idImovel.equalsIgnoreCase("")){
manterContaActionForm.setIdImovel(idImovelRequest);
}
manterContaActionForm.setInscricaoImovel(objetoImovel.getInscricaoFormatada());
manterContaActionForm.setNomeClienteUsuario(cliente.getNome());
manterContaActionForm.setSituacaoAguaImovel(objetoImovel.getLigacaoAguaSituacao().getDescricao());
manterContaActionForm.setSituacaoEsgotoImovel(objetoImovel.getLigacaoEsgotoSituacao().getDescricao());
//Ordenando a cole��o por m�s/ano de refer�ncia
Collections.sort((List) colecaoContaImovel, new Comparator() {
public int compare(Object a, Object b) {
int retorno = 0;
String anoMesReferencia1 = String.valueOf(((Conta) a).getReferencia());
String anoMesReferencia2 = String.valueOf(((Conta) b).getReferencia());
Integer ano1 = new Integer(anoMesReferencia1.substring(0, 4));
Integer ano2 = new Integer(anoMesReferencia2.substring(0, 4));
Integer mes1 = new Integer(anoMesReferencia1.substring(4, 6));
Integer mes2 = new Integer(anoMesReferencia2.substring(4, 6));
if (ano1 > ano2){
retorno = 1;
}
else if (ano1 < ano2){
retorno = -1;
}
else if (mes1 > mes2){
retorno = 1;
}
else if (mes1 < mes2){
retorno = -1;
}
return retorno;
}
});
// Coloca na sess�o a cole��o com as contas do im�vel selecionado
sessao.setAttribute("colecaoContaImovel", colecaoContaImovel);
if (idImovel != null && !idImovel.equalsIgnoreCase("")){
sessao.setAttribute("imovel",idImovel);
verificarSeContaRA(new Integer(idImovel),httpServletRequest,sessao,usuarioLogado);
}
else{
sessao.setAttribute("imovel",idImovelRequest);
verificarSeContaRA(new Integer(idImovelRequest),httpServletRequest,sessao,usuarioLogado);
}
}
}
/*
* Colocado por Raphael Rossiter em 03/11/2008
* Permite retificar um conjunto de contas a partir do manter conta.
*/
if (fachada.verificarPermissaoRetificarConjuntoConta((Usuario)sessao.getAttribute(Usuario.USUARIO_LOGADO))){
httpServletRequest.setAttribute("retificarConjuntoConta", "OK");
}
/* Colocado por Bruno Barros em 05 de Janeiro de 2009
* Verificamos se o usu�rio possue permiss�o especial para atualizar
* ou retificar contas pagas
*/
boolean usuarioPodeAtualizarRetificarContasPagas =
fachada.verificarPermissaoEspecial(
PermissaoEspecial.ATUALIZAR_RETIFICAR_CONTAS_PAGAS,
( Usuario ) sessao.getAttribute(Usuario.USUARIO_LOGADO ) );
httpServletRequest.setAttribute("usuarioPodeAtualizarRetificarContasPagas",
usuarioPodeAtualizarRetificarContasPagas );
// *****************************************************************
sessao.removeAttribute("cancelar");
manterContaActionForm.setIdRA("1");
return retorno;
}
/*[FS0040] � Verificar se a conta consta no Registro de Atendimento
* Vivianne Sousa - 09/02/2011
*/
public void verificarSeContaRA(Integer idImovel,
HttpServletRequest httpServletRequest,HttpSession sessao,Usuario usuarioLogado){
String habilitaRetificacaoContaRA = "2";
Integer idRegistroAtendimento = null;
SistemaParametro sistemaParametro = getFachada().pesquisarParametrosDoSistema();
if(sistemaParametro.getIndicadorNormaRetificacao().equals(ConstantesSistema.SIM)){
//Caso a Empresa esteja na Norma de Retifica��o de Conta
//Caso o usu�rio possua permiss�o especial habilitar esta conta para retifica��o
boolean temPermissaoParaRetificarContaNorma =
getFachada().verificarPermissaoEspecial(PermissaoEspecial.RETIFICAR_CONTA_NORMA_REVISAO_FATURAMENTO, usuarioLogado);
if(temPermissaoParaRetificarContaNorma){
habilitaRetificacaoContaRA = "1";
}else{
idRegistroAtendimento = getFachada().verificaSolicitacaoTipoEspecificacaoRA(idImovel);
if(idRegistroAtendimento != null){
habilitaRetificacaoContaRA = "3";
//Caso exista a conta informada no Registro de Atendimento Conta
//(REGISTRO_ATENDIMENTO_CONTA com RGAT_ID = RGAT_ID do REGISTRO_ATENDIMENTO
//e CNTA_ID = CNTA_ID da conta a ser retificada), habilitar esta conta para retifica��o
}
}
}else{
habilitaRetificacaoContaRA = "1";
}
httpServletRequest.setAttribute("habilitaRetificacaoContaRA",habilitaRetificacaoContaRA);
if(idRegistroAtendimento != null){
httpServletRequest.setAttribute("idRA",idRegistroAtendimento.toString());
}
}
}