package gcom.gui.faturamento.conta;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.faturamento.conta.Conta;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.PermissaoEspecial;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.Util;
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 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 AlterarVencimentoContaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
//Seta o mapeamento de retorno
ActionForward retorno = actionMapping
.findForward("exibirManterConta");
HttpSession sessao = httpServletRequest.getSession(false);
//Inst�ncia do formul�rio que est� sendo utilizado
AlterarVencimentoContaActionForm alterarVencimentoContaActionForm = (AlterarVencimentoContaActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
//Contas selecionadas pelo usu�rio
String identificadoresConta = alterarVencimentoContaActionForm.getContaSelected();
String[] arrayIdentificadores = identificadoresConta.split(",");
int flag = 0;
Integer contaNaBase = null;
for (int i = 0; i < arrayIdentificadores.length; i++) {
// Carregando a conta que est� na base
String dadosConta = arrayIdentificadores[i];
String[] idUltimaAlteracao = dadosConta.split("-");
SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");
Calendar data = new GregorianCalendar();
data.setTimeInMillis(new Long(idUltimaAlteracao[1].trim())
.longValue());
String time = formatter.format(data.getTime());
// alterado para fazer a pesquisa por Hql e nao com filtro como estava sendo feita antes - Fernanda Paiva - 23/08/2006
contaNaBase = fachada.pesquisarExistenciaContaParaConcorrencia(idUltimaAlteracao[0],time);
// Verificar atualiza��o realizada antes por outro usu�rio
if (contaNaBase == null || contaNaBase.equals("")) {
httpServletRequest.setAttribute("reloadPage", "OK");
flag = 1;
sessao.setAttribute("erroConcorrencia","erroConcorrencia");
}
}
//Data de vencimento
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
Date dataVencimentoConta = new Date();
try {
dataVencimentoConta = formatoData.parse(alterarVencimentoContaActionForm.getDataVencimento());
} catch (ParseException e) {
e.printStackTrace();
}
if (sessao.getAttribute("colecaoContaImovel") != null && (identificadoresConta != null &&
!identificadoresConta.equalsIgnoreCase("")) && flag == 0){
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
Collection<Conta> colecaoContaImovel = (Collection) sessao.getAttribute("colecaoContaImovel");
// [FS0007] - Validar data de vencimento.
if (dataVencimentoConta != null
&& Util.getAno(dataVencimentoConta) < Util.obterAno(sistemaParametro
.getAnoMesFaturamento())) {
throw new ActionServletException(
"atencao.data_vencimento_conta_inferior_ano_faturamento");
}
// -------------------------------------------------------------------------------------------
// Alterado por : Hugo Leonardo - data : 19/08/2010
// Analista : Aryed Lins.
// [FS0007] - Validar data de vencimento.
// -------------------------------------------------------------------------------------------
//if(sistemaParametro.getIndicadorCalculaVencimento() == 1){
//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 = fachada.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");
}
//}
//-------------------------------------------------------------------------------------------
//Alterando a data de vencimento de uma ou mais contas
fachada.alterarVencimentoConta(colecaoContaImovel, identificadoresConta, dataVencimentoConta, usuarioLogado);
//Realizar um reload na tela de manter conta
httpServletRequest.setAttribute("reloadPage", "OK");
}
return retorno;
}
}