package gcom.gui.relatorio.faturamento;
import gcom.cadastro.localidade.FiltroLocalidade;
import gcom.cadastro.localidade.FiltroQuadra;
import gcom.cadastro.localidade.FiltroSetorComercial;
import gcom.cadastro.localidade.Localidade;
import gcom.cadastro.localidade.Quadra;
import gcom.cadastro.localidade.SetorComercial;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.fachada.Fachada;
import gcom.gui.ActionServletException;
import gcom.gui.faturamento.GerarRelatorioAnormalidadePorAmostragemActionForm;
import gcom.relatorio.ExibidorProcessamentoTarefaRelatorio;
import gcom.relatorio.faturamento.RelatorioAnormalidadePorAmostragem;
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.ArrayList;
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;
/**
*
* Este caso de uso gera relatorio de anormalidade Informadas - Amostragem
*
* [UC1051] ? Gerar Relat�rio de Amostragem das Anormalidades Informadas
*
* @author Hugo Leonardo
* @date 06/08/2010
*
*/
public class GerarRelatorioAnormalidadePorAmostragemAction extends
ExibidorProcessamentoTarefaRelatorio {
/**
* < <Descri��o do m�todo>>
*
* @param actionMapping
* Descri��o do par�metro
* @param actionForm
* Descri��o do par�metro
* @param httpServletRequest
* Descri��o do par�metro
* @param httpServletResponse
* Descri��o do par�metro
* @return Descri��o do retorno
*/
public ActionForward execute(ActionMapping actionMapping,
ActionForm actionForm, HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) {
// cria a vari�vel de retorno
ActionForward retorno = null;
GerarRelatorioAnormalidadePorAmostragemActionForm form = (GerarRelatorioAnormalidadePorAmostragemActionForm) actionForm;
Fachada fachada = Fachada.getInstancia();
// Valida os par�metro passados como consulta
boolean peloMenosUmParametroInformado = false;
// Grupo
Integer idGrupo = null;
if (form.getGrupo() != null
&& !form.getGrupo().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
idGrupo = new Integer(form.getGrupo());
}
// Rota
Short cdRota = null;
if (form.getRota() != null && !form.getRota().trim().equals("")) {
peloMenosUmParametroInformado = true;
cdRota = new Short(form.getRota());
}
// Ger�ncia Regional
Integer idGerenciaRegional = null;
if (form.getRegional() != null
&& !form.getRegional()
.equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
idGerenciaRegional = new Integer(
form.getRegional());
}
// Unidade de Neg�cio
Integer idUnidadeNegocio = null;
if (form.getUnidadeNegocio() != null
&& !form.getUnidadeNegocio().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
idUnidadeNegocio = new Integer(form.getUnidadeNegocio());
}
// Localidade Inicial
Localidade localidadeInicial = null;
SetorComercial setorComercialInicial = null;
String idLocalidadeInicial = form
.getIdLocalidadeInicial();
String codigoSetorComercialInicial = form
.getCodigoSetorComercialInicial();
if (idLocalidadeInicial != null && !idLocalidadeInicial.equals("")) {
peloMenosUmParametroInformado = true;
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, idLocalidadeInicial));
Collection colecaoLocalidades = fachada.pesquisar(filtroLocalidade,
Localidade.class.getName());
if (colecaoLocalidades != null && !colecaoLocalidades.isEmpty()) {
localidadeInicial = (Localidade) Util
.retonarObjetoDeColecao(colecaoLocalidades);
} else {
throw new ActionServletException(
"atencao.pesquisa_inexistente", null,
"Localidade Inicial");
}
// Setor Comercial Inicial
if (codigoSetorComercialInicial != null && !codigoSetorComercialInicial.trim().equals("")) {
FiltroSetorComercial filtro = new FiltroSetorComercial();
filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.CODIGO_SETOR_COMERCIAL, codigoSetorComercialInicial));
filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.ID_LOCALIDADE, localidadeInicial.getId()));
Collection pesquisa = (Collection) fachada.pesquisar(filtro, SetorComercial.class.getName());
if (pesquisa != null && !pesquisa.isEmpty()) {
setorComercialInicial = (SetorComercial) Util.retonarObjetoDeColecao(pesquisa);
} else {
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Setor Comercial");
}
}
}
// Localidade Final
Localidade localidadeFinal = null;
SetorComercial setorComercialFinal = null;
String idLocalidadeFinal = form
.getIdLocalidadeFinal();
String codigoSetorComercialFinal = form
.getCodigoSetorComercialFinal();
if (idLocalidadeFinal != null && !idLocalidadeFinal.equals("")) {
peloMenosUmParametroInformado = true;
FiltroLocalidade filtroLocalidade = new FiltroLocalidade();
filtroLocalidade.adicionarParametro(new ParametroSimples(
FiltroLocalidade.ID, idLocalidadeFinal));
Collection colecaoLocalidades = fachada.pesquisar(filtroLocalidade,
Localidade.class.getName());
if (colecaoLocalidades != null && !colecaoLocalidades.isEmpty()) {
localidadeFinal = (Localidade) Util
.retonarObjetoDeColecao(colecaoLocalidades);
} else {
throw new ActionServletException(
"atencao.pesquisa_inexistente", null,
"Localidade Final");
}
// Setor Comercial Final
if (codigoSetorComercialFinal != null && !codigoSetorComercialFinal.trim().equals("")) {
FiltroSetorComercial filtro = new FiltroSetorComercial();
filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.CODIGO_SETOR_COMERCIAL, codigoSetorComercialFinal));
filtro.adicionarParametro(new ParametroSimples(FiltroSetorComercial.ID_LOCALIDADE, localidadeFinal.getId()));
Collection pesquisa = (Collection) fachada.pesquisar(filtro, SetorComercial.class.getName());
if (pesquisa != null && !pesquisa.isEmpty()) {
setorComercialFinal = (SetorComercial) Util.retonarObjetoDeColecao(pesquisa);
} else {
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Setor Comercial");
}
}
pesquisarQuadra(form,fachada,httpServletRequest);
validacaoFinal(form);
}
Collection<Integer> colecaoIdsEmpresa = null;
if(form.getColecaoIdsEmpresa() != null){
colecaoIdsEmpresa = new ArrayList<Integer>();
for (String id : form.getColecaoIdsEmpresa()) {
if (!id.equals("-1")) {
colecaoIdsEmpresa.add(new Integer(id));
}
}
if (colecaoIdsEmpresa.size() > 0) {
peloMenosUmParametroInformado = true;
}
}
// Anormalidade de Leitura Informada
Collection<Integer> colecaoIdsAnormalidadeLeituraInformada = null;
if (form.getColecaoIdsLeituraAnormalidadeInformada() != null) {
colecaoIdsAnormalidadeLeituraInformada = new ArrayList<Integer>();
for (String id : form.getColecaoIdsLeituraAnormalidadeInformada()) {
if (!id.equals("-1")) {
colecaoIdsAnormalidadeLeituraInformada.add(new Integer(id));
}
}
if (colecaoIdsAnormalidadeLeituraInformada.size() > 0) {
peloMenosUmParametroInformado = true;
}
}
// Perfil do Im�vel
Integer idImovelPerfil = null;
if (form.getIdImovelPerfil() != null
&& !form.getIdImovelPerfil().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
idImovelPerfil = new Integer( form.getIdImovelPerfil());
}
//Categoria
Integer idCategoria = null;
if (form.getIdCategoria() != null
&& !form.getIdCategoria().equals("" + ConstantesSistema.NUMERO_NAO_INFORMADO)) {
peloMenosUmParametroInformado = true;
idCategoria = new Integer( form.getIdCategoria());
}
// Refer�ncia
Integer referencia = null;
if (form.getReferencia() != null
&& !form.getReferencia().equals("")) {
peloMenosUmParametroInformado = true;
referencia = Util.formatarMesAnoComBarraParaAnoMes(form.getReferencia());
SistemaParametro sistemaParametro = fachada
.pesquisarParametrosDoSistema();
if (referencia > sistemaParametro.getAnoMesFaturamento()) {
throw new ActionServletException(
"atencao.ano_mes_referencia_anterior_que_ano_mes_faturamento_corrente",
null, Util.somaMesMesAnoComBarra((Util.formatarAnoMesParaMesAno(sistemaParametro
.getAnoMesFaturamento())),1));
}
}
Integer mediaConsumoInicial = null;
Integer mediaConsumoFinal = null;
if (form.getIntervaloMediaConsumoInicial() != null
&& !form.getIntervaloMediaConsumoInicial().trim().equals("")) {
peloMenosUmParametroInformado = true;
mediaConsumoInicial = new Integer(
form.getIntervaloMediaConsumoInicial());
mediaConsumoFinal = new Integer(
form.getIntervaloMediaConsumoFinal());
if (mediaConsumoInicial > mediaConsumoFinal) {
throw new ActionServletException(
"atencao.media.consumo.final.maior.media.consumo.inical");
}
}
Integer numeroOcorrenciasConsecutivas = null;
if (form.getNumOcorrenciasConsecutivas() != null
&& !form.getNumOcorrenciasConsecutivas().trim().equals("")) {
numeroOcorrenciasConsecutivas = new Integer(
form.getNumOcorrenciasConsecutivas());
if (numeroOcorrenciasConsecutivas > 12) {
throw new ActionServletException(
"atencao.quantidade_ocorrencia_maior");
}
}
Integer amostragem = null;
if (form.getAmostragem() != null && !form.getAmostragem().trim().equals("")) {
amostragem = new Integer( form.getAmostragem());
if (amostragem <= 0 || amostragem > 100 ) {
throw new ActionServletException(
"atencao.amostragem_intevalo_incorreto");
}
}
// Erro caso o usu�rio mandou filtrar sem nenhum par�metro
if (!peloMenosUmParametroInformado) {
throw new ActionServletException(
"atencao.filtro.nenhum_parametro_informado");
}
// seta os parametros que ser�o mostrados no relat�rio
// Fim da parte que vai mandar os parametros para o relat�rio
String tipoRelatorio = httpServletRequest.getParameter("tipoRelatorio");
if (tipoRelatorio == null) {
tipoRelatorio = TarefaRelatorio.TIPO_PDF + "";
}
RelatorioAnormalidadePorAmostragem relatorioAnormalidadePorAmostragem = new RelatorioAnormalidadePorAmostragem(
(Usuario) (httpServletRequest.getSession(false))
.getAttribute("usuarioLogado"));
relatorioAnormalidadePorAmostragem.addParametro("idGrupo", idGrupo);
relatorioAnormalidadePorAmostragem.addParametro("cdRota", cdRota);
relatorioAnormalidadePorAmostragem.addParametro("idGerenciaRegional",
idGerenciaRegional);
relatorioAnormalidadePorAmostragem.addParametro("idUnidadeNegocio",
idUnidadeNegocio);
if (localidadeInicial != null) {
relatorioAnormalidadePorAmostragem.addParametro("idLocalidadeInicial",
localidadeInicial.getId());
}
if (localidadeFinal != null) {
relatorioAnormalidadePorAmostragem.addParametro("idLocalidadeFinal",
localidadeFinal.getId());
}
if (setorComercialInicial != null) {
relatorioAnormalidadePorAmostragem.addParametro("idSetorComercialInicial", setorComercialInicial.getCodigo());
}
if (setorComercialFinal != null) {
relatorioAnormalidadePorAmostragem.addParametro("idSetorComercialFinal", setorComercialFinal.getCodigo());
}
if (form.getQuadraInicialNM() != null &&
!form.getQuadraInicialNM().equals("")){
relatorioAnormalidadePorAmostragem.addParametro("numeroQuadraInicial",
new Integer(form.getQuadraInicialNM()));
}
if (form.getQuadraFinalID() != null &&
!form.getQuadraFinalNM().equals("")){
relatorioAnormalidadePorAmostragem.addParametro("numeroQuadraFinal",
new Integer(form.getQuadraFinalNM()));
}
if (colecaoIdsEmpresa != null) {
relatorioAnormalidadePorAmostragem.addParametro("colecaoIdsEmpresa", colecaoIdsEmpresa);
}
if (colecaoIdsAnormalidadeLeituraInformada != null) {
relatorioAnormalidadePorAmostragem.addParametro("colecaoIdsAnormalidadeLeituraInformada", colecaoIdsAnormalidadeLeituraInformada);
}
relatorioAnormalidadePorAmostragem.addParametro("numeroOcorrencias",
numeroOcorrenciasConsecutivas);
relatorioAnormalidadePorAmostragem.addParametro("ocorrenciasIguais",
form.getIndicadorOcorrenciasIguais());
relatorioAnormalidadePorAmostragem.addParametro("idImovelPerfil",
idImovelPerfil);
relatorioAnormalidadePorAmostragem.addParametro("referencia", referencia);
relatorioAnormalidadePorAmostragem.addParametro("mediaConsumoInicial",
mediaConsumoInicial);
relatorioAnormalidadePorAmostragem.addParametro("mediaConsumoFinal",
mediaConsumoFinal);
relatorioAnormalidadePorAmostragem.addParametro("tipoMedicao",
new Integer(form.getTipoMedicao()));
relatorioAnormalidadePorAmostragem.addParametro("idCategoria",idCategoria);
relatorioAnormalidadePorAmostragem.addParametro("tipoFormatoRelatorio",
Integer.parseInt(tipoRelatorio));
relatorioAnormalidadePorAmostragem.addParametro("amostragem", amostragem);
retorno = processarExibicaoRelatorio(relatorioAnormalidadePorAmostragem,
tipoRelatorio, httpServletRequest, httpServletResponse,
actionMapping);
return retorno;
}
private void pesquisarQuadra( GerarRelatorioAnormalidadePorAmostragemActionForm form,
Fachada fachada, HttpServletRequest httpServletRequest) {
Collection colecaoPesquisa = null;
String setorComercialCD = null;
String setorComercialID = null;
String quadraNM = null;
FiltroQuadra filtroQuadra = new FiltroQuadra();
if(form.getQuadraInicialNM() != null &&
!form.getQuadraInicialNM().equals("")){
setorComercialCD = (String) form.getCodigoSetorComercialInicial();
setorComercialID = (String) form.getIdSetorComercialInicial();
if (setorComercialCD != null
&& !setorComercialCD.trim().equalsIgnoreCase("")
&& setorComercialID != null
&& !setorComercialID.trim().equalsIgnoreCase("")) {
quadraNM = (String) form.getQuadraInicialNM();
// Adiciona o id do setor comercial que est� no formul�rio para compor a pesquisa.
filtroQuadra.adicionarParametro(new ParametroSimples(
FiltroQuadra.ID_SETORCOMERCIAL, setorComercialID));
// Adiciona o n�mero da quadra que esta no formul�rio para compor a pesquisa.
filtroQuadra.adicionarParametro(new ParametroSimples(
FiltroQuadra.NUMERO_QUADRA, quadraNM));
filtroQuadra.adicionarParametro(new ParametroSimples(
FiltroQuadra.INDICADORUSO,
ConstantesSistema.INDICADOR_USO_ATIVO));
// Retorna quadra
colecaoPesquisa = fachada.pesquisar(filtroQuadra, Quadra.class.getName());
if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
// Quadra nao encontrada
// Limpa os campos quadraOrigemNM e quadraOrigemID do formul�rio
form.setQuadraInicialNM("");
form.setQuadraInicialID("");
// Mensagem de tela
form.setQuadraMensagemInicial("QUADRA INEXISTENTE.");
httpServletRequest.setAttribute("corQuadraOrigem", "exception");
httpServletRequest.setAttribute("nomeCampo", "quadraInicialNM");
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Quadra Inicial");
} else {
Quadra objetoQuadra = (Quadra) Util
.retonarObjetoDeColecao(colecaoPesquisa);
form.setQuadraInicialNM(String.valueOf(objetoQuadra.getNumeroQuadra()));
form.setQuadraInicialID(String.valueOf(objetoQuadra.getId()));
httpServletRequest.setAttribute("corQuadraOrigem", "valor");
if(form.getQuadraFinalNM() == null || form.getQuadraFinalNM().equals("")){
form.setQuadraFinalNM(String.valueOf(objetoQuadra.getNumeroQuadra()));
form.setQuadraFinalID(String.valueOf(objetoQuadra.getId()));
httpServletRequest.setAttribute("corQuadraDestino", "valor");
}
}
} else {
// Limpa o campo quadraOrigemNM do formul�rio
form.setQuadraInicialNM("");
form.setQuadraMensagemInicial("Informe o setor comercial inicial.");
httpServletRequest.setAttribute("corQuadraOrigem", "exception");
httpServletRequest.setAttribute("nomeCampo", "codigoSetorComercialInicial");
}
}
if(form.getQuadraFinalNM() != null &&
!form.getQuadraFinalNM().equals("")){
//Recebe os valores dos campos setorComercialOrigemCD e
// setorComercialOrigemID do formul�rio.
setorComercialCD = (String) form.getCodigoSetorComercialFinal();
setorComercialID = (String) form.getIdSetorComercialFinal();
// Os campos setorComercialOrigemCD e setorComercialID ser�o
// obrigat�rios
if (setorComercialCD != null
&& !setorComercialCD.trim().equalsIgnoreCase("")
&& setorComercialID != null
&& !setorComercialID.trim().equalsIgnoreCase("")) {
quadraNM = (String) form.getQuadraFinalNM();
// Adiciona o id do setor comercial que est� no formul�rio para
// compor a pesquisa.
filtroQuadra.adicionarParametro(new ParametroSimples(
FiltroQuadra.ID_SETORCOMERCIAL, setorComercialID));
// Adiciona o n�mero da quadra que esta no formul�rio para
// compor a pesquisa.
filtroQuadra.adicionarParametro(new ParametroSimples(
FiltroQuadra.NUMERO_QUADRA, quadraNM));
filtroQuadra.adicionarParametro(new ParametroSimples(
FiltroQuadra.INDICADORUSO,
ConstantesSistema.INDICADOR_USO_ATIVO));
// Retorna quadra
colecaoPesquisa = fachada.pesquisar(filtroQuadra, Quadra.class
.getName());
if (colecaoPesquisa == null || colecaoPesquisa.isEmpty()) {
// Quadra nao encontrada
// Limpa os campos quadraOrigemNM e quadraOrigemID do
// formul�rio
form.setQuadraFinalNM("");
form.setQuadraFinalID("");
// Mensagem de tela
form.setQuadraMensagemFinal("QUADRA INEXISTENTE.");
httpServletRequest.setAttribute("corQuadraDestino", "exception");
httpServletRequest.setAttribute("nomeCampo", "quadraFinalNM");
throw new ActionServletException("atencao.pesquisa_inexistente", null, "Quadra Final");
} else {
Quadra objetoQuadra = (Quadra) Util
.retonarObjetoDeColecao(colecaoPesquisa);
form.setQuadraFinalNM(String.valueOf(objetoQuadra.getNumeroQuadra()));
form.setQuadraFinalID(String.valueOf(objetoQuadra.getId()));
httpServletRequest.setAttribute("corQuadraDestino", "valor");
}
} else {
// Limpa o campo setorComercialOrigemCD do formul�rio
form.setQuadraFinalNM("");
// Mensagem de tela
form.setQuadraMensagemFinal("Informe o setor comercial final.");
httpServletRequest.setAttribute("corQuadraDestino", "exception");
httpServletRequest.setAttribute("nomeCampo","codigoSetorComercialFinal");
}
}
}
private void validacaoFinal(GerarRelatorioAnormalidadePorAmostragemActionForm form) {
// validar localidade inicial sendo maior que localidade final
if (form.getIdLocalidadeInicial() != null
&& form.getIdLocalidadeFinal() != null) {
if (!form.getIdLocalidadeInicial().equals("") && !form.getIdLocalidadeFinal().equals("")) {
int origem = Integer.parseInt(form.getIdLocalidadeInicial());
int destino = Integer.parseInt(form.getIdLocalidadeFinal());
if (origem > destino) {
throw new ActionServletException(
"atencao.localidade.final.maior.localidade.inicial",null, "");
}
}
}
// validar setor comercial sendo maior que localidade final
if (form.getCodigoSetorComercialInicial() != null
&& form.getCodigoSetorComercialFinal() != null) {
if (!form.getCodigoSetorComercialInicial().equals("")
&& !form.getCodigoSetorComercialFinal().equals("")) {
int origem = Integer.parseInt(form.getCodigoSetorComercialInicial());
int destino = Integer.parseInt(form.getCodigoSetorComercialFinal());
if (origem > destino) {
throw new ActionServletException(
"atencao.setor.comercial.final.maior.setor.comercial.inicial", null, "");
}
}
}
// validar quadra sendo maior que localidade final
if (form.getQuadraInicialNM() != null && form.getQuadraFinalNM() != null) {
if (!form.getQuadraInicialNM().equals("")
&& !form.getQuadraFinalNM().equals("")) {
int origem = Integer.parseInt(form.getQuadraInicialNM());
int destino = Integer.parseInt(form.getQuadraFinalNM());
if (origem > destino)
throw new ActionServletException(
"atencao.quadra.final.maior.quadra.inical", null,"");
}
}
}
}