package gcom.gui.faturamento.conta;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.faturamento.ControladorFaturamentoLocal;
import gcom.faturamento.ControladorFaturamentoLocalHome;
import gcom.gui.ActionServletException;
import gcom.gui.GcomAction;
import gcom.seguranca.acesso.PermissaoEspecial;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.util.ConstantesJNDI;
import gcom.util.ServiceLocator;
import gcom.util.ServiceLocatorException;
import gcom.util.SistemaException;
import gcom.util.Util;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import javax.ejb.CreateException;
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 AlterarVencimentoConjuntoContaAction extends GcomAction {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = actionMapping.findForward("exibirManterConjuntoConta");
HttpSession sessao = httpServletRequest.getSession(false);
AlterarVencimentoContaActionForm form = (AlterarVencimentoContaActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
//Data de vencimento
SimpleDateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
Date dataVencimentoConta;
try{
dataVencimentoConta = formatoData.parse(form.getDataVencimento());
} catch (ParseException ex) {
dataVencimentoConta = null;
}
if (sessao.getAttribute("colecaoImovel") != null){
Collection colecaoImovel = (Collection) sessao.getAttribute("colecaoImovel");
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
if (dataVencimentoConta != null
&& Util.getAno(dataVencimentoConta) < Util.obterAno(sistemaParametro
.getAnoMesFaturamento())) {
throw new ActionServletException(
"atencao.data_vencimento_conta_inferior_ano_faturamento");
}
Integer anoMes = null;
if(sessao.getAttribute("anoMes") != null){
anoMes = (Integer)sessao.getAttribute("anoMes");
}
Integer anoMesFim = null;
if(sessao.getAttribute("anoMesFim") != null){
anoMesFim = (Integer)sessao.getAttribute("anoMesFim");
}
String[] bancos = null;
if(sessao.getAttribute("bancos") != null){
bancos = (String[]) sessao.getAttribute("bancos");
}
Date dataVencimentoContaInicio = null;
Date dataVencimentoContaFim = null;
String indicadorContaPaga = null;
Integer idGrupoFaturamento = null;
if (sessao.getAttribute("dataVencimentoContaInicial") != null){
dataVencimentoContaInicio = (Date) sessao.getAttribute("dataVencimentoContaInicial");
}
if (sessao.getAttribute("dataVencimentoContaFinal") != null){
dataVencimentoContaFim = (Date) sessao.getAttribute("dataVencimentoContaFinal");
}
if (sessao.getAttribute("indicadorContaPaga") != null){
indicadorContaPaga = (String) sessao.getAttribute("indicadorContaPaga");
}
if (sessao.getAttribute("idGrupoFaturamento") != null){
idGrupoFaturamento = (Integer) sessao.getAttribute("idGrupoFaturamento");
}
Usuario usuarioLogado = (Usuario) sessao.getAttribute("usuarioLogado");
if(usuarioLogado != null && (usuarioLogado.getDescricaoEmail() == null || usuarioLogado.getDescricaoEmail().equals(""))){
throw new ActionServletException(
"atencao.cadastro_email_usuario_obrigatorio");
}
Integer codigoClienteSuperior = null;
if(sessao.getAttribute("codigoClienteSuperior") != null){
codigoClienteSuperior = new Integer( (String) sessao.getAttribute("codigoClienteSuperior"));
}
Integer codigoCliente = null;
if( codigoClienteSuperior == null && sessao.getAttribute("codigoCliente") != null){
codigoCliente = new Integer( (String) sessao.getAttribute("codigoCliente"));
}
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");
}
boolean somenteDebitoAutomatico = (Boolean) sessao.getAttribute("debitoAutomatico");
if (codigoCliente != null || codigoClienteSuperior != null) {
fachada.alterarVencimentoConjuntoContaCliente(codigoCliente, null, dataVencimentoConta, anoMes, null, null, anoMesFim,
usuarioLogado, codigoClienteSuperior, somenteDebitoAutomatico);
} else if (idGrupoFaturamento != null) {
fachada.alterarVencimentoConjuntoConta(idGrupoFaturamento, dataVencimentoConta, anoMes, anoMesFim, dataVencimentoContaInicio,
dataVencimentoContaFim, usuarioLogado, somenteDebitoAutomatico);
} else {
fachada.alterarVencimentoConjuntoConta(colecaoImovel, dataVencimentoConta, anoMes, dataVencimentoContaInicio,
dataVencimentoContaFim, anoMesFim, usuarioLogado, indicadorContaPaga, bancos, somenteDebitoAutomatico);
}
httpServletRequest.setAttribute("reloadPage", "OK");
}
sessao.removeAttribute("anoMes");
sessao.removeAttribute("anoMesFim");
sessao.removeAttribute("dataVencimentoContaInicial");
sessao.removeAttribute("dataVencimentoContaFinal");
sessao.removeAttribute("indicadorContaPaga");
return retorno;
}
}