package gcom.gui.faturamento.conta;
import gcom.atendimentopublico.registroatendimento.EspecificacaoTipoValidacao;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
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 java.text.SimpleDateFormat;
import java.util.ArrayList;
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;
public class ExibirAlterarVencimentoContaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o mapeamento de retorno
ActionForward retorno = actionMapping
.findForward("exibirAlterarVencimentoConta");
//Inst�ncia do formul�rio que est� sendo utilizado
AlterarVencimentoContaActionForm alterarVencimentoContaActionForm = (AlterarVencimentoContaActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
HttpSession sessao = httpServletRequest.getSession(false);
//Carregando o identificador das contas selecionadas
String contaSelected = httpServletRequest.getParameter("conta");
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
//FiltroConta filtroConta = new FiltroConta();
//filtroConta.adicionarCaminhoParaCarregamentoEntidade("imovel.id");
//String idConta = contaSelected.split("-")[0];
// filtroConta.adicionarCaminhoParaCarregamentoEntidade(FiltroConta.IMOVEL_ID);
// filtroConta.adicionarParametro(new ParametroSimples(FiltroConta.ID, idConta));
// Collection colecaoConta = fachada.pesquisar(filtroConta, Conta.class.getName());
//Conta contaSelecao = fachada.pesquisarContaRetificacao(new Integer(idConta));
String idImovel = httpServletRequest.getParameter("idImovel");
/*
* Colocado por Ana Maria em 22/04/2009
*/
if (!fachada.verificarPermissaoRetificarContaImovelPefilBloqueado((Usuario)sessao.getAttribute(Usuario.USUARIO_LOGADO))){
Boolean imovelBloqueado = fachada.verificarImovelPerfilBloqueado(new Integer(httpServletRequest.getParameter("idImovel")));
if(imovelBloqueado){
throw new ActionServletException(
"atencao.perfil_imovel_nao_permite_operacao");
}
}
//Conta contaSelecao = (Conta) colecaoConta.iterator().next();
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
//Contas selecionadas pelo usu�rio
String[] arrayIdentificadores = contaSelected.split(",");
Collection idsConta = new ArrayList();
for (int i = 0; i < arrayIdentificadores.length; i++) {
String dadosConta = arrayIdentificadores[i];
String[] idContaArray = dadosConta.split("-");
Integer idConta = new Integer (idContaArray[0]);
idsConta.add(idConta);
}
// Alterado por: Hugo Leonardo
// Data: 10/08/2010
// Analista: Aryed Lins
//E o usu�rio n�o tenha permiss�o especial.
boolean temPermissaoParaAlterarVencimentoJaAlterado =
fachada.verificarPermissaoEspecial(PermissaoEspecial.ALTERAR_VENCIMENTO_JA_ALTERADO,
usuario);
if(!temPermissaoParaAlterarVencimentoJaAlterado
&& sistemaParametro.getIndicadorLimiteAlteracaoVencimento().equals(ConstantesSistema.SIM)){
fachada.verificarQuantidadeAlteracoesVencimentoConta(idsConta);
}
//[FS0018] Verificar ocorr�ncia de conta(s) sem revis�o ou em revis�o por a��o do usu�rio
//Vivianne Sousa 11/05/2007
Collection contasRevisaoAcaoUsuario = fachada.obterContasNaoEmRevisaoOuEmRevisaoPorAcaoUsuario(idsConta);
if (contasRevisaoAcaoUsuario != null && !contasRevisaoAcaoUsuario.isEmpty()){
// -----------------------------------------------------------
// Verificar permiss�o especial
boolean temPermissaoAlterarVencimentoSemRa = fachada.verificarPermissaoAlterarVencimentoSemRa(usuario);
// -----------------------------------------------------------
if(!temPermissaoAlterarVencimentoSemRa){
//[FS0001] - Verificar Exist�ncia de RA
fachada.verificarExistenciaRegistroAtendimento(
new Integer(idImovel), "atencao.conta_existencia_registro_atendimento",
EspecificacaoTipoValidacao.ALTERACAO_CONTA);
}
}
//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().toString());
//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()));
//-------------------------------------------------------------------------------------------
// Alterado por : Yara Taciane - data : 17/07/2008
// Analista : Denys Guimar�es
//-------------------------------------------------------------------------------------------
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());
alterarVencimentoContaActionForm.setDataVencimento(Util.formatarData(dataCorrenteComDias));
}
//--------------------------------------------------------------------------------------------
alterarVencimentoContaActionForm.setContaSelected(contaSelected);
return retorno;
}
}