package gcom.gui.relatorio.financeiro;
import gcom.cadastro.geografico.FiltroMunicipio;
import gcom.cadastro.geografico.Municipio;
import gcom.cadastro.localidade.FiltroLocalidade;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.RelatorioVazioException;
import gcom.relatorio.financeiro.RelatorioEvolucaoContasAReceberContabil;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.ConstantesSistema;
import gcom.util.Util;
import gcom.util.filtro.ParametroSimples;
import java.util.Collection;
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;
/**
* Gera��o do relat�rio
* [UC0718] Gerar Relat�rio da Evolu��o do Contas a Receber Cont�bil
*
*/
public class GerarRelatorioEvolucaoContasAReceberContabilAction extends
ExibidorProcessamentoTarefaRelatorio {
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
ActionForward retorno = null;
GerarRelatorioEvolucaoContasAReceberContabilActionForm form = (GerarRelatorioEvolucaoContasAReceberContabilActionForm) actionForm;
String mesAno = form.getMesAno();
Integer gerenciaRegional = null;
Integer localidade = null;
Integer unidadeNegocio = null;
Integer municpio = null;
String opcaoTotalizacao = form.getOpcaoTotalizacao();
if(mesAno == null || mesAno.equals("")){
throw new ActionServletException("atencao.required", null, "M�s/Ano de Refer�ncia Cont�bil");
}
if (opcaoTotalizacao == null || opcaoTotalizacao.equalsIgnoreCase("")) {
throw new ActionServletException("atencao.required", null, "Op��o de Totaliza��o ");
}
if (opcaoTotalizacao.trim().equals("gerenciaRegional")) {
gerenciaRegional = Integer.parseInt(form.getGerenciaRegionalId());
if (gerenciaRegional == null
|| gerenciaRegional.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
throw new ActionServletException("atencao.required", null, "Ger�ncia Regional");
}
} else if (opcaoTotalizacao.trim().equals("gerenciaRegionalUnidadeNegocio")) {
gerenciaRegional = Integer.parseInt(form.getGerenciaRegionalporUnidadeNegocioId());
if (gerenciaRegional == null
|| gerenciaRegional.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
throw new ActionServletException("atencao.required", null, "Ger�ncia Regional");
}
} else if (opcaoTotalizacao.trim().equals("gerenciaRegionalLocalidade")) {
gerenciaRegional = Integer.parseInt(form.getGerenciaRegionalporLocalidadeId());
if (gerenciaRegional == null
|| gerenciaRegional.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
throw new ActionServletException("atencao.required", null, "Ger�ncia Regional");
}
}
if (opcaoTotalizacao.trim().equals("localidade")) {
String codigoLocalidade = form.getCodigoLocalidade();
if (codigoLocalidade == null || codigoLocalidade.equalsIgnoreCase("")) {
throw new ActionServletException("atencao.required", null, "Localidade");
} else {
pesquisarLocalidade(codigoLocalidade, httpServletRequest);
}
localidade = Integer.parseInt(codigoLocalidade);
}
if (opcaoTotalizacao.trim().equals("municipio")) {
String codigoMunicipio = form.getCodigoMunicipio();
if (codigoMunicipio == null || codigoMunicipio.equalsIgnoreCase("")) {
throw new ActionServletException("atencao.required", null, "Munic�pio");
} else {
pesquisarMunicipio(codigoMunicipio, httpServletRequest);
municpio = Integer.parseInt(codigoMunicipio);
}
}
if (opcaoTotalizacao.trim().equals("unidadeNegocio")) {
unidadeNegocio = Integer.parseInt(form.getUnidadeNegocioId());
if (unidadeNegocio == null
|| unidadeNegocio.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
throw new ActionServletException("atencao.required", null, "Unidade de Neg�cio");
}
}else if (opcaoTotalizacao.trim().equals("unidadeNegocioLocalidade")) {
unidadeNegocio = Integer.parseInt(form.getUnidadeNegocioLocalidadeId());
if (unidadeNegocio == null
|| unidadeNegocio.equals(ConstantesSistema.NUMERO_NAO_INFORMADO)) {
throw new ActionServletException("atencao.required", null, "Unidade de Neg�cio");
}
}
int mesAnoInteger = Integer.parseInt(mesAno.substring(0, 2) + mesAno.substring(3, 7));
// Verificar se o Ano/M�s est� valido [FS0002]
if (!Util.validarMesAno(mesAno)) {
// Se deu algum erro neste ponto, indica falha no sistema
throw new ActionServletException("erro.sistema");
}
Fachada fachada = Fachada.getInstancia();
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
// [FS0002] Verificar refer�ncia contabil
verificarReferenciaContabil(mesAno, sistemaParametro);
// Parte que vai mandar o relat�rio para a tela
// cria uma inst�ncia da classe do relat�rio
RelatorioEvolucaoContasAReceberContabil relatorioEvolucaoContasAReceberContabil = new RelatorioEvolucaoContasAReceberContabil(
(Usuario) (httpServletRequest.getSession(false)).getAttribute("usuarioLogado"));
relatorioEvolucaoContasAReceberContabil.addParametro("opcaoTotalizacao", opcaoTotalizacao);
relatorioEvolucaoContasAReceberContabil.addParametro("mesAnoInteger", mesAnoInteger);
relatorioEvolucaoContasAReceberContabil.addParametro("localidade", localidade);
relatorioEvolucaoContasAReceberContabil.addParametro("municipio", municpio);
relatorioEvolucaoContasAReceberContabil.addParametro("gerenciaRegional", gerenciaRegional);
relatorioEvolucaoContasAReceberContabil.addParametro("unidadeNegocio",unidadeNegocio);
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
relatorioEvolucaoContasAReceberContabil.addParametro("tipoFormatoRelatorio", Integer.parseInt(tipoRelatorio));
try {
retorno = processarExibicaoRelatorio(relatorioEvolucaoContasAReceberContabil,
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");
}
return retorno;
}
private void pesquisarLocalidade(String idLocalidade,
HttpServletRequest httpServletRequest) {
Fachada fachada = Fachada.getInstancia();
// Pesquisa a localidade na base
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, idLocalidade));
Collection<Localidade> localidadePesquisada = fachada.pesquisar(
filtroLocalidade, Localidade.class.getName());
if (localidadePesquisada == null || localidadePesquisada.isEmpty()) {
// a localidade n�o foi encontrada
throw new ActionServletException("atencao.localidade.inexistente");
}
}
private void pesquisarMunicipio(String idMunicipio,
HttpServletRequest httpServletRequest) {
Fachada fachada = Fachada.getInstancia();
// Pesquisa a localidade na base
FiltroMunicipio filtroMunicipio = new FiltroMunicipio();
filtroMunicipio.adicionarParametro(new ParametroSimples(
FiltroMunicipio.ID, idMunicipio));
Collection<Localidade> municipioPesquisado = fachada.pesquisar(
filtroMunicipio, Municipio.class.getName());
if (municipioPesquisado == null || municipioPesquisado.isEmpty()) {
// a localidade n�o foi encontrada
throw new ActionServletException("atencao.municipio.inexistente");
}
}
/**
* Verifica se o M�s/Ano informado � inferior ao M�s/Ano do Sistema
*/
public boolean verificarReferenciaContabil(
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;
}
}