package gcom.gui.relatorio.cadastro;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.relatorio.ConstantesRelatorios;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.RelatorioVazioException;
import gcom.relatorio.cadastro.RelatorioAcessoSPC;
import gcom.relatorio.cadastro.RelatorioAcessoSPCBean;
import gcom.seguranca.acesso.usuario.FiltroUsuario;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* [UC1170] - Gerar Relat�rio Acesso ao SPC
*
* @author Diogo Peixoto
* @since 09/05/2011
*
*/
public class GerarRelatorioAcessoSPCAction extends ExibidorProcessamentoTarefaRelatorio{
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null;
GerarRelatorioAcessoSPCActionForm form = (GerarRelatorioAcessoSPCActionForm) actionForm;
String nomeRelatorio = ConstantesRelatorios.RELATORIO_ACESSO_SPC;
RelatorioAcessoSPC relatorioAcessoSPC = new RelatorioAcessoSPC(
(Usuario)(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"), nomeRelatorio);
boolean parametroInformado = false;
Date dataReferenciaInicial = null;
Date dataReferenciaFinal = null;
String dataReferencia = null;
if (form.getDataReferenciaInicial() != null && !form.getDataReferenciaInicial().equals("")) {
dataReferenciaInicial = Util.converteStringParaDate(form.getDataReferenciaInicial());
dataReferenciaInicial = Util.formatarDataInicial(dataReferenciaInicial);
if (form.getDataReferenciaFinal() != null && !form.getDataReferenciaFinal().equals("")) {
dataReferenciaFinal = Util.converteStringParaDate(form.getDataReferenciaFinal());
dataReferenciaFinal = Util.adaptarDataFinalComparacaoBetween(dataReferenciaFinal);
} else {
dataReferenciaFinal = new Date();
dataReferenciaFinal = Util.formatarDataFinal(dataReferenciaFinal);
}
//[FS005] Verificar data final menor que data inicial
int qtdeDias = Util.obterQuantidadeDiasEntreDuasDatas(dataReferenciaInicial, dataReferenciaFinal);
if (qtdeDias < 0) {
throw new ActionServletException("atencao.filtrar_data_final_maior_que_inicial");
}else{
if(Util.compararData(dataReferenciaFinal, new Date()) < 1){
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
dataReferencia = sdf.format(dataReferenciaInicial) + " - " + sdf.format(dataReferenciaFinal);
parametroInformado = true;
}else{
throw new ActionServletException("atencao.periodo_referencia.maior.periodo_atual");
}
}
}
String loginUsuarioResponsavel = form.getLoginUsuarioResponsavel();
String usuarioResponsavel = null;
if(loginUsuarioResponsavel != null && !loginUsuarioResponsavel.equals("")){
FiltroUsuario filtro = new FiltroUsuario();
filtro.adicionarParametro(new ParametroSimples(FiltroUsuario.ID, loginUsuarioResponsavel));
Collection<Usuario> usuario = Fachada.getInstancia().pesquisar(filtro, Usuario.class.getName() );
if ( usuario != null && usuario.size() > 0 ){
Usuario usuarioResp = (Usuario) usuario.iterator().next();
usuarioResponsavel = "USU�RIO: " + usuarioResp.getLogin() + " - " + usuarioResp.getNomeUsuario();
parametroInformado = true;
}else{
throw new ActionServletException("pesquisa.usuario.inexistente");
}
}
String unidadeOrganizacional = form.getIdUnidadeOrganizacional();
Integer idUnidade = null;
if(unidadeOrganizacional != null && !unidadeOrganizacional.equals("")){
FiltroUnidadeOrganizacional filtro = new FiltroUnidadeOrganizacional();
filtro.adicionarParametro( new ParametroSimples(FiltroUnidadeOrganizacional.ID, unidadeOrganizacional));
Collection<UnidadeOrganizacional> unidade = Fachada.getInstancia().pesquisar(filtro, UnidadeOrganizacional.class.getName() );
if (unidade != null && unidade.size() > 0 ){
UnidadeOrganizacional unidadeOrg = (UnidadeOrganizacional) unidade.iterator().next();
idUnidade = new Integer(unidadeOrganizacional);
unidadeOrganizacional = "UNIDADE ORGANIZACIONAL: " + unidadeOrg.getId() + " - " + unidadeOrg.getDescricao();
parametroInformado = true;
}else{
throw new ActionServletException("atencao.unidade.organizacional.inexistente");
}
}
if(parametroInformado){
FiltrarRelatorioAcessoSPCHelper filtro = new FiltrarRelatorioAcessoSPCHelper(
dataReferenciaInicial, dataReferenciaFinal, loginUsuarioResponsavel, idUnidade);
Collection<RelatorioAcessoSPCBean> helper = Fachada.getInstancia().filtrarRelatorioAcessoSPC(filtro);
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
httpServletRequest.setAttribute( "telaSucessoRelatorio", "sim" );
relatorioAcessoSPC.addParametro("dataReferencia", dataReferencia);
relatorioAcessoSPC.addParametro("tipoRelatorio", Integer.parseInt(tipoRelatorio));
relatorioAcessoSPC.addParametro("dadosRelatorio", helper);
relatorioAcessoSPC.addParametro("unidade", unidadeOrganizacional);
relatorioAcessoSPC.addParametro("usuario", usuarioResponsavel);
try {
retorno = processarExibicaoRelatorio(relatorioAcessoSPC, tipoRelatorio, httpServletRequest, httpServletResponse, actionMapping);
} catch (RelatorioVazioException ex) {
// manda o erro para a p�gina no request atual
reportarErros(httpServletRequest, "atencao.relatorio.vazio");
// seta o mapeamento de retorno para a tela de aten��o de popup
retorno = actionMapping.findForward("telaAtencaoPopup");
}
}else{
throw new ActionServletException("atencao.filtrar_informar_um_filtro");
}
return retorno;
}
/**
* Verifica se o M�s/Ano informado � inferior ao M�s/Ano do Sistema
*/
public boolean verificarReferenciaAcesso(String anoMesReferenciaContabil, SistemaParametro sistemaParametro) {
boolean verificacao = Util.compararAnoMesReferencia(anoMesReferenciaContabil.substring(3, 7)
+ anoMesReferenciaContabil.substring(0, 2), sistemaParametro.getAnoMesFaturamento().toString(), ">");
if (verificacao) {
String anoMesSistema = Util.formatarAnoMesParaMesAno(sistemaParametro.getAnoMesFaturamento());
throw new ActionServletException("atencao.referencia_contabil.ano_mes.inferior", null, anoMesSistema);
}
return true;
}
}