package gcom.gui.relatorio.atendimentopublico.ordemservico;
import gcom.cadastro.cliente.Cliente;
import gcom.cadastro.cliente.FiltroCliente;
import gcom.cadastro.localidade.FiltroGerenciaRegional;
import gcom.cadastro.localidade.FiltroLocalidade;
import gcom.cadastro.localidade.FiltroSetorComercial;
import gcom.cadastro.localidade.FiltroUnidadeNegocio;
import gcom.cadastro.localidade.GerenciaRegional;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.localidade.SetorComercial;
import gcom.cadastro.localidade.UnidadeNegocio;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.RelatorioVazioException;
import gcom.relatorio.atendimentopublico.ordemservico.FiltrarRelatorioReligacaoClientesInadiplentesHelper;
import gcom.relatorio.atendimentopublico.ordemservico.RelatorioReligacaoClientesInadiplentes;
import gcom.seguranca.acesso.usuario.FiltroUsuario;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.ConstantesSistema;
import gcom.util.SistemaException;
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 javax.servlet.http.HttpSession;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
/**
* [UC1120] Gerar Relat�rio de religa��o de clientes inadimplentes
*
* @author Hugo Leonardo
*
* @date 25/01/2011
*/
public class GerarRelatorioReligacaoClientesInadiplentesAction extends ExibidorProcessamentoTarefaRelatorio {
private Collection colecaoPesquisa = null;
private String localidadeID = null;
private String setorComercialCD = null;
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// Seta o mapeamento de retorno
ActionForward retorno = null;
httpServletRequest.setAttribute("telaSucessoRelatorio",true);
HttpSession sessao = httpServletRequest.getSession(false);
Usuario usuario = (Usuario) sessao.getAttribute("usuarioLogado");
// Form
GerarRelatorioReligacaoClientesInadiplentesForm form = (GerarRelatorioReligacaoClientesInadiplentesForm) actionForm;
FiltrarRelatorioReligacaoClientesInadiplentesHelper helper = new FiltrarRelatorioReligacaoClientesInadiplentesHelper();
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
Fachada fachada = Fachada.getInstancia();
boolean peloMenosUmParametroInformado = false;
// Ger�ncia Regional
String gerenciaRegional = " -- ";
if( form.getGerenciaRegionalID() != null && !form.getGerenciaRegionalID().equals("-1")){
helper.setGerenciaRegional( new Integer(form.getGerenciaRegionalID()));
FiltroGerenciaRegional filtroGerenciaRegional = new FiltroGerenciaRegional();
filtroGerenciaRegional.adicionarParametro(new ParametroSimples(
FiltroGerenciaRegional.ID, form.getGerenciaRegionalID()));
filtroGerenciaRegional.adicionarParametro(
new ParametroSimples(FiltroGerenciaRegional.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
// Retorna gerenciaRegional
colecaoPesquisa = fachada.pesquisar(filtroGerenciaRegional, GerenciaRegional.class.getName());
if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
throw new ActionServletException("atencao.gerenciaRegional_inexistente");
}
GerenciaRegional objetoGerenciaRegional = (GerenciaRegional) Util.retonarObjetoDeColecao(colecaoPesquisa);
gerenciaRegional = objetoGerenciaRegional.getNome();
peloMenosUmParametroInformado = true;
}
// Unidade de Neg�cio
String unidadeNegocio = " -- ";
if( form.getUnidadeNegocioID() != null && !form.getUnidadeNegocioID().equals("-1")){
helper.setUnidadeNegocio( new Integer(form.getUnidadeNegocioID()));
FiltroUnidadeNegocio filtroUnidadeNegocio = new FiltroUnidadeNegocio();
filtroUnidadeNegocio.adicionarParametro(new ParametroSimples(
FiltroUnidadeNegocio.ID, form.getUnidadeNegocioID()));
filtroUnidadeNegocio.adicionarParametro(
new ParametroSimples(FiltroUnidadeNegocio.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
// Retorna Unidade de Neg�cio
colecaoPesquisa = fachada.pesquisar(filtroUnidadeNegocio, UnidadeNegocio.class.getName());
if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
throw new ActionServletException("atencao.unidade_negocio.inexistente");
}
UnidadeNegocio objetoUnidadeNegocio = (UnidadeNegocio) Util.retonarObjetoDeColecao(colecaoPesquisa);
unidadeNegocio = objetoUnidadeNegocio.getNome();
peloMenosUmParametroInformado = true;
}
// Localidade
String localidade = " -- ";
if(form.getLocalidadeID() != null && !form.getLocalidadeID().equals("")){
helper.setLocalidade(new Integer(form.getLocalidadeID()));
peloMenosUmParametroInformado = true;
if( form.getNomeLocalidade() == null || form.getNomeLocalidade().equals("")){
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, form.getLocalidadeID()));
filtroLocalidade.adicionarParametro(
new ParametroSimples(FiltroLocalidade.INDICADORUSO, ConstantesSistema.INDICADOR_USO_ATIVO));
// Retorna Localidade
colecaoPesquisa = fachada.pesquisar(filtroLocalidade, Localidade.class.getName());
if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
throw new ActionServletException("pesquisa.localidade.inexistente");
}
Localidade objetoLocalidade = (Localidade) Util.retonarObjetoDeColecao(colecaoPesquisa);
localidade = objetoLocalidade.getDescricao();
}else{
localidade = form.getNomeLocalidade();
}
}
// Setor Comercial
String setorComercial = " -- ";
if((form.getSetorComercialID() != null && !form.getSetorComercialID().equals("")) ||
form.getSetorComercialCD() != null && !form.getSetorComercialCD().equals("")){
if(form.getSetorComercialID() != null &&
!form.getSetorComercialID().equals("")){
setorComercial = form.getNomeSetorComercial();
helper.setSetorComercial(new Integer(form.getSetorComercialID()));
peloMenosUmParametroInformado = true;
}else{
localidadeID = (String) form.getLocalidadeID();
if(localidadeID == null || localidadeID.equals("")){
throw new ActionServletException("atencao.localidade_nao_informada");
}
setorComercialCD = (String) form.getSetorComercialCD();
FiltroSetorComercial filtroSetorComercial = new FiltroSetorComercial();
filtroSetorComercial.adicionarParametro(new ParametroSimples(
FiltroSetorComercial.ID_LOCALIDADE, localidadeID));
filtroSetorComercial.adicionarParametro(new ParametroSimples(
FiltroSetorComercial.CODIGO_SETOR_COMERCIAL, setorComercialCD));
// Retorna setorComercial
colecaoPesquisa = fachada.pesquisar(filtroSetorComercial, SetorComercial.class.getName());
if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
throw new ActionServletException("atencao.processo.setorComercialNaoCadastrada");
}
SetorComercial objetoSetorComercial = (SetorComercial) Util.retonarObjetoDeColecao(colecaoPesquisa);
setorComercial = objetoSetorComercial.getDescricao();
helper.setSetorComercial(objetoSetorComercial.getId());
peloMenosUmParametroInformado = true;
}
}
// Cliente
String cliente = " -- ";
if( form.getClienteID() != null && !form.getClienteID().equals("")){
if( form.getNomeCliente() == null || form.getNomeCliente().equals("")){
FiltroCliente filtroCliente = new FiltroCliente();
filtroCliente.adicionarParametro(new ParametroSimples(
FiltroCliente.ID, form.getClienteID()));
filtroCliente.adicionarParametro(
new ParametroSimples(FiltroCliente.INDICADOR_USO, ConstantesSistema.INDICADOR_USO_ATIVO));
// Retorna Cliente
colecaoPesquisa = fachada.pesquisar(filtroCliente, Cliente.class.getName());
if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
throw new ActionServletException("atencao.cliente.inexistente");
}
Cliente objetoCliente = (Cliente) Util.retonarObjetoDeColecao(colecaoPesquisa);
cliente = objetoCliente.getDescricao();
}else{
cliente = form.getNomeCliente();
}
helper.setCliente( new Integer(form.getClienteID()));
peloMenosUmParametroInformado = true;
}
// Usu�rio
String nomeUsuario = " -- ";
if( form.getUsuarioID() != null && !form.getUsuarioID().equals("")){
if( form.getNomeUsuario() == null || form.getNomeUsuario().equals("")){
FiltroUsuario filtroUsuario = new FiltroUsuario();
filtroUsuario.adicionarParametro(new ParametroSimples(
FiltroUsuario.ID, form.getUsuarioID()));
// Retorna Usu�rio
colecaoPesquisa = fachada.pesquisar(filtroUsuario, Usuario.class.getName());
if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
throw new ActionServletException("atencao.pesquisa.usuario.inexistente");
}
Usuario objetoUsuario = (Usuario) Util.retonarObjetoDeColecao(colecaoPesquisa);
nomeUsuario = objetoUsuario.getLogin();
}else{
nomeUsuario = form.getNomeUsuario();
}
helper.setUsuario( new Integer(form.getUsuarioID()));
peloMenosUmParametroInformado = true;
}
// Per�odo Encerramento
String periodoEncerramento = "";
if (form.getDataInicioEncerramento() != null && !form.getDataInicioEncerramento().equals("")){
if (form.getDataFimEncerramento() == null || form.getDataFimEncerramento().trim().equals("")) {
form.setDataFimEncerramento(form.getDataInicioEncerramento());
}
if (!Util.validarDiaMesAno(form.getDataInicioEncerramento())) {
periodoEncerramento += form.getDataInicioEncerramento() + " a ";
helper.setDataInicioEncerramento(Util.formatarDataInicial( Util.converteStringParaDate(form.getDataInicioEncerramento())));
if (helper.getDataInicioEncerramento().after(new Date())) {
throw new ActionServletException( "atencao.periodo_inicio_alteracao_invalida");
}
if (!Util.validarDiaMesAno(form.getDataFimEncerramento())) {
periodoEncerramento += form.getDataFimEncerramento();
helper.setDataFimEncerramento(Util.formatarDataFinal( Util.converteStringParaDate(form.getDataFimEncerramento())));
if (helper.getDataFimEncerramento().after(new Date())) {
throw new ActionServletException( "atencao.periodo_final_alteracao_invalida");
}
if(Util.compararData(helper.getDataInicioEncerramento(), helper.getDataFimEncerramento()) == 1){
throw new ActionServletException("atencao.data_inicio_maior_final");
}
// Lilita o intevalo a um m�s.
if ((helper.getDataFimEncerramento().getTime() - helper.getDataInicioEncerramento().getTime()) > 1000L * 60L * 60L * 24L * 31L) {
throw new ActionServletException("atencao.filtrar_intervalo_limite", null, "Per�odo de Encerramento da S.O");
}
peloMenosUmParametroInformado = true;
}else{
throw new ActionServletException("atencao.periodo_final_alteracao_invalida");
}
}else{
throw new ActionServletException("atencao.periodo_inicio_alteracao_invalida");
}
}
// Per�odo Recorr�ncia
String periodoRecorrencia = "";
if (form.getDataInicioRecorrencia() != null && !form.getDataInicioRecorrencia().equals("")){
if (!Util.validarDiaMesAno(form.getDataInicioRecorrencia())) {
periodoRecorrencia += form.getDataInicioRecorrencia() + " a ";
helper.setDataInicioRecorrencia(Util.formatarDataInicial( Util.converteStringParaDate(form.getDataInicioRecorrencia())));
if (helper.getDataInicioRecorrencia().after(new Date())) {
throw new ActionServletException( "atencao.periodo_inicio_alteracao_invalida");
}
if (!Util.validarDiaMesAno(form.getDataFimRecorrencia())) {
periodoRecorrencia += form.getDataFimRecorrencia();
helper.setDataFimRecorrencia(Util.formatarDataFinal( Util.converteStringParaDate(form.getDataFimRecorrencia())));
if (helper.getDataFimRecorrencia().after(new Date())) {
throw new ActionServletException( "atencao.periodo_final_alteracao_invalida");
}
if(Util.compararData(helper.getDataInicioRecorrencia(), helper.getDataFimRecorrencia()) == 1){
throw new ActionServletException("atencao.data_inicio_maior_final");
}
peloMenosUmParametroInformado = true;
}else{
throw new ActionServletException("atencao.periodo_final_alteracao_invalida");
}
}else{
throw new ActionServletException("atencao.periodo_inicio_alteracao_invalida");
}
}else{
Date dt = Util.adcionarOuSubtrairMesesAData(new Date(), -6, 0);
helper.setDataInicioRecorrencia( dt);
helper.setDataFimRecorrencia( new Date());
periodoRecorrencia = Util.formatarData(dt) + " a " + Util.formatarData(new Date());
}
// Escolha Relat�rio
if ( form.getEscolhaRelatorio() != null &&
!form.getEscolhaRelatorio().equals("-1")) {
helper.setEscolhaRelatorio(new Integer(form.getEscolhaRelatorio()));
peloMenosUmParametroInformado = true;
}else{
throw new ActionServletException( "atencao.tipo_relatorio_nao_informado");
}
// Erro caso o usu�rio mandou filtrar sem nenhum par�metro
if (!peloMenosUmParametroInformado) {
throw new ActionServletException( "atencao.filtro.nenhum_parametro_informado");
}
TarefaRelatorio relatorio = new RelatorioReligacaoClientesInadiplentes((Usuario)
(httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
relatorio.addParametro("tipoFormatoRelatorio",Integer.parseInt(tipoRelatorio));
relatorio.addParametro("filtrarRelatorioReligacaoClientesInadiplentesHelper", helper);
relatorio.addParametro("usuario", usuario);
relatorio.addParametro("gerenciaRegional", gerenciaRegional);
relatorio.addParametro("unidadeNegocio", unidadeNegocio);
relatorio.addParametro("localidade", localidade);
relatorio.addParametro("setorComercial", setorComercial);
relatorio.addParametro("cliente", cliente);
relatorio.addParametro("nomeUsuario", nomeUsuario);
relatorio.addParametro("periodoEncerramento", periodoEncerramento);
relatorio.addParametro("periodoRecorrencia", periodoRecorrencia);
try {
retorno = processarExibicaoRelatorio(relatorio, tipoRelatorio, httpServletRequest,
httpServletResponse, actionMapping);
} catch (SistemaException ex) {
// manda o erro para a p�gina no request atual
reportarErros(httpServletRequest, "erro.sistema");
// seta o mapeamento de retorno para a tela de erro de popup
retorno = actionMapping.findForward("telaErroPopup");
} catch (RelatorioVazioException ex1) {
throw new ActionServletException("atencao.pesquisa.nenhumresultado", null, "");
}
return retorno;
}
}