package gcom.gui.relatorio.seguranca;
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.seguranca.RelatorioAlteracoesSistemaColuna;
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.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;
/**
* [UC1074] Gerar Relat�rio Altera��es no Sistema por Coluna
*
* @author Hugo Amorim
* @date 08/09/2010
*/
public class GerarRelatorioAlteracoesSistemaColunaAction extends
ExibidorProcessamentoTarefaRelatorio {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null;
httpServletRequest.setAttribute("telaSucessoRelatorio",true);
GerarRelatorioAlteracoesSistemaColunaForm form =
(GerarRelatorioAlteracoesSistemaColunaForm) actionForm;
// Executar valida��es existentes
//no caso de uso [UC1074]
//Gerar Relat�rio Altera��es no Sistema por Coluna
this.executarValidacoes(form);
GerarRelatorioAlteracoesSistemaColunaHelper helper = this.criarHelperRelatorioAlteracoesSistemaColuna(form);
RelatorioAlteracoesSistemaColuna relatorioAlteracoesSistemaColuna =
new RelatorioAlteracoesSistemaColuna(
(Usuario)(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"),
helper.getTipoRelatorio().equals("1")?
ConstantesRelatorios.RELATORIO_ALTERACOES_SISTEMA_COLUNA_USUARIO:
ConstantesRelatorios.RELATORIO_ALTERACOES_SISTEMA_COLUNA_LOCALIDADE);
//Adiciona filtro escolhido pelo usuario ao relatorio
relatorioAlteracoesSistemaColuna.addParametro("filtroHelper", helper);
// Chama o met�do de gerar relat�rio passando o c�digo da analise
//como par�metro
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
relatorioAlteracoesSistemaColuna.addParametro("tipoFormatoRelatorio", Integer.parseInt(tipoRelatorio));
retorno =
processarExibicaoRelatorio(relatorioAlteracoesSistemaColuna,
tipoRelatorio, httpServletRequest, httpServletResponse,actionMapping);
return retorno;
}
private GerarRelatorioAlteracoesSistemaColunaHelper criarHelperRelatorioAlteracoesSistemaColuna(
GerarRelatorioAlteracoesSistemaColunaForm form) {
GerarRelatorioAlteracoesSistemaColunaHelper retorno = null;
//Caso tipo do relatorio a ser executado seja "USUARIO"
if(form.getTipoRelatorioEscolhido().equals("1")){
retorno = new GerarRelatorioAlteracoesSistemaColunaHelper(
form.getTipoRelatorioEscolhido(),
form.getIdFuncionalidade()!=null?form.getIdFuncionalidade():null,
form.getIdOperacao()!=null?form.getIdOperacao():null,
form.getIdColuna(),
form.getDescColuna(),
form.getIdMeioSolicitacao(),
form.getPeriodoInicial(),
form.getPeriodoFinal(),
form.getIdUnidadeSuperior()!=null?form.getIdUnidadeSuperior():null,
!Util.isVazioOrNulo(form.getColecaoUnidadeOrganizacional())?form.getColecaoUnidadeOrganizacional():null,
form.getIdUsuario()!=null?form.getIdUsuario():null);
}
//Caso tipo do relatorio a ser executado seja "LOCALIDADE"
if(form.getTipoRelatorioEscolhido().equals("2")){
retorno = new GerarRelatorioAlteracoesSistemaColunaHelper(
form.getTipoRelatorioEscolhido(),
form.getIdFuncionalidade()!=null?form.getIdFuncionalidade():null,
form.getIdOperacao()!=null?form.getIdOperacao():null,
form.getIdColuna(),
form.getDescColuna(),
form.getIdMeioSolicitacao(),
form.getPeriodoInicial(),
form.getPeriodoFinal(),
form.getIdGerenciaRegional()!=null?form.getIdGerenciaRegional():null,
form.getIdUnidadeNegocio()!=null?form.getIdUnidadeNegocio():null,
form.getIdLocalidade()!=null?form.getIdLocalidade():null);
}
return retorno;
}
private void executarValidacoes(GerarRelatorioAlteracoesSistemaColunaForm form) {
// FS0004 Validar Data
// A data dever� vir preenchida com o per�odo de um m�s, considerando a data final como o dia atual.
//Caso o usu�rio altere a data e esta esteja com um per�odo maior que um m�s, o sistema dever� exibir a
//seguinte mensagem: "Informe per�odo compreendido dentro de um m�s"
if(Util.verificarNaoVazio(form.getPeriodoInicial())
&& !Util.verificarNaoVazio(form.getPeriodoFinal())){
if(Util.dataDiff(Util.converteStringParaDate(form.getPeriodoInicial()), new Date())>1){
throw new ActionServletException("atencao.periodo_maior_um_mes");
}
}
//FIM FS0004 Validar Data
//[FS0005] Verificar data final menor que data inicial
// . Caso a data final seja anterior � data inicial,
//exibir a mensagem "Data Final do Per�odo � anterior �
//Data Inicial do Per�odo" e retornar para o passo
//correspondente no fluxo principal.
if(Util.verificarNaoVazio(form.getPeriodoInicial())
&& Util.verificarNaoVazio(form.getPeriodoFinal())){
Date periodoInicial = Util.converteStringParaDate(form.getPeriodoInicial());
Date periodoFinal = Util.converteStringParaDate(form.getPeriodoFinal());
if(periodoFinal.compareTo(periodoInicial)<0){
throw new ActionServletException("atencao.data_final_periodo.anterior.data_inicial_periodo");
}
if(Util.dataDiff(periodoInicial,periodoFinal)>1){
throw new ActionServletException("atencao.periodo_maior_um_mes");
}
}
//FIM [FS0005] Verificar data final menor que data inicial
//[FS0006] Verificar unidade do usu�rio
// .Caso seja informado o nome do usu�rio e a unidade superior ou organizacional e o
//usu�rio n�o corresponda a essas, exibir a seguinte mensagem: "O usu�rio n�o pertence � unidade selecionada".
//Unidade Superior
if(Util.verificarNaoVazio(form.getIdUsuario()) &&
(Util.verificarNaoVazio(form.getIdUnidadeSuperior()) ||
!Util.isVazioOrNulo(form.getColecaoUnidadeOrganizacional()))){
FiltroUsuario filtroUsuario = new FiltroUsuario();
filtroUsuario.adicionarParametro(new ParametroSimples(
FiltroUnidadeOrganizacional.ID, new Integer(form.getIdUsuario())));
filtroUsuario.adicionarCaminhoParaCarregamentoEntidade(FiltroUsuario.UNIDADE_ORGANIZACIONAL);
filtroUsuario.adicionarCaminhoParaCarregamentoEntidade(FiltroUsuario.UNIDADE_ORGANIZACIONAL_SUPERIOR);
Collection colecaoUsuario = this.getFachada().pesquisar(
filtroUsuario, Usuario.class.getName());
Usuario usuarioValidacao = (Usuario) Util.retonarObjetoDeColecao(colecaoUsuario);
if(usuarioValidacao!=null
&& Util.verificarNaoVazio(form.getIdUnidadeSuperior())
&& usuarioValidacao.getUnidadeOrganizacional()!=null
&& usuarioValidacao.getUnidadeOrganizacional().getUnidadeSuperior()!=null
&& usuarioValidacao.getUnidadeOrganizacional().getUnidadeSuperior().getId().compareTo(
new Integer(form.getIdUnidadeSuperior()))!=0){
throw new ActionServletException("atencao.unidade_diferente_usuario");
}
if(!Util.isVazioOrNulo(form.getColecaoUnidadeOrganizacional())
&& usuarioValidacao!=null
&& usuarioValidacao.getUnidadeOrganizacional()!=null){
for (UnidadeOrganizacional unidadeOrganizacional : form.getColecaoUnidadeOrganizacional()) {
if(usuarioValidacao.getUnidadeOrganizacional().getId().compareTo(unidadeOrganizacional.getId())!=0){
throw new ActionServletException("atencao.unidade_diferente_usuario");
}
}
}
}
//FIM [FS0006] Verificar unidade do usu�rio
//[FS0007]
//Caso a coluna selecionada n�o possua o TBLA_ID correspondente a im�vel ou cliente
//(identificar a tabela que possui a coluna referenciada se esta n�o possui um TBCO_ID correspondente a
//TBCO_NMCOLUNA=IMOV_ID ou TBCO_NMCOLUNA=CLIE_ID) o sistema exibir� a seguinte mensagem:
//"Dados n�o podem ser exibidos, pois n�o possuem rela��o com cliente ou im�vel"
if(form.getIdColuna()!=null && form.getTipoRelatorioEscolhido().equals("2")){
if(!Fachada.getInstancia().verificarRelacaoColuna(Integer.parseInt(form.getIdColuna()))){
throw new ActionServletException("atencao.dados_nao_tem_relacao");
}
}
}
}