package gcom.relatorio.atendimentopublico.ordemservico;
import gcom.atendimentopublico.ordemservico.bean.OSTipoPavimentoHelper;
import gcom.batch.Relatorio;
import gcom.cadastro.sistemaparametro.SistemaParametro;
import gcom.cadastro.unidade.FiltroUnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeOrganizacional;
import gcom.cadastro.unidade.UnidadeTipo;
import gcom.fachada.Fachada;
import gcom.relatorio.ConstantesRelatorios;
import gcom.relatorio.RelatorioDataSource;
import gcom.relatorio.RelatorioVazioException;
import gcom.relatorio.atendimentopublico.bean.RelatorioBoletimCustoPavimentoBean;
import gcom.seguranca.acesso.usuario.Usuario;
import gcom.tarefa.TarefaException;
import gcom.tarefa.TarefaRelatorio;
import gcom.util.ControladorException;
import gcom.util.Util;
import gcom.util.agendadortarefas.AgendadorTarefas;
import gcom.util.filtro.ParametroSimples;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* classe respons�vel por criar o relat�rio de Boletim de Custo de Pavimento
*
* [UC1110] Gerar Boletim de Custo de Repavimenta��o por Tipo de Pavimento
*
* @author Hugo Leonardo
*
* @date 03/01/2011
*/
public class RelatorioBoletimCustoPavimento extends TarefaRelatorio {
private static final long serialVersionUID = 1L;
public RelatorioBoletimCustoPavimento(Usuario usuario) {
super(usuario, ConstantesRelatorios.RELATORIO_BOLETIM_CUSTO_PAVIMENTO);
}
@Deprecated
public RelatorioBoletimCustoPavimento() {
super(null, "");
}
/**
* < <Descri��o do m�todo>>
*
*/
public Object executar() throws TarefaException {
// valor de retorno
byte[] retorno = null;
// ------------------------------------
Integer idFuncionalidadeIniciada = this.getIdFuncionalidadeIniciada();
// ------------------------------------
FiltrarBoletimCustoPavimentoHelper relatorioHelper =
(FiltrarBoletimCustoPavimentoHelper) getParametro("filtrarBoletimCustoPavimentoHelper");
int tipoFormatoRelatorio = (Integer) getParametro("tipoFormatoRelatorio");
Usuario usuario = (Usuario) getParametro("usuario");
// Flag's
Boolean achouPrimeiraOcorrenciaDemandadas = false;
Boolean indicadorPrimeiraOcorrenciaDemandadas = false;
Boolean achouPrimeiraOcorrenciaDemandadas3Meses = false;
Boolean indicadorPrimeiraOcorrenciaDemandadas3Meses = false;
Boolean achouPrimeiraOcorrenciaAceitas = false;
Boolean indicadorPrimeiraOcorrenciaAceitas = false;
Boolean achouPrimeiraOcorrenciaTotal = false;
Boolean indicadorPrimeiraOcorrenciaTotal = false;
Boolean usuarioUnidadeRepavimentadora = false;
Boolean flagPrimeiraVez = true;
// cole��o de beans do relat�rio
List relatorioBeans = new ArrayList();
Fachada fachada = Fachada.getInstancia();
RelatorioBoletimCustoPavimentoBean relatorioBean = null;
String mesAno = (String)getParametro("mesAnoGeracao");
String mesAnoAnteriores = (String)getParametro("mesAnoAnteriores");
// Verifica se o usu�rio pertence a uma unidade repavimentadora.
if ( usuario != null && usuario.getUnidadeOrganizacional() != null &&
usuario.getUnidadeOrganizacional().getUnidadeTipo() != null &&
usuario.getUnidadeOrganizacional().getUnidadeTipo().getId() != null &&
(usuario.getUnidadeOrganizacional().getUnidadeTipo().getId().intValue() ==
UnidadeTipo.UNIDADE_TIPO_REPAVIMENTADORA_ID.intValue()) ) {
usuarioUnidadeRepavimentadora = true;
}
Date dtmenos3Meses = Util.adcionarOuSubtrairMesesAData(
Util.gerarDataInicialApartirAnoMesRefencia(
new Integer (relatorioHelper.getMesAnoReferenciaGeracao())),
-3, new Integer(relatorioHelper.getMesAnoReferenciaGeracao()).intValue());
Date dtInicio = Util.gerarDataInicialApartirAnoMesRefencia(
new Integer (relatorioHelper.getMesAnoReferenciaGeracao()));
Date dtFim = Util.gerarDataApartirAnoMesRefencia(
new Integer (relatorioHelper.getMesAnoReferenciaGeracao()));
Collection colecaoTotaisPorTipoPavimentoRua = fachada.pesquisarTotaisPorTipoPavimentoRua(relatorioHelper);
Collection colecaoTipoPavimentoRua = fachada.pesquisarTipoPavimentoRuaBoletimCustoPavimento(relatorioHelper);
// Se Anal�tico
if(relatorioHelper.getIndicadorTipoBoletim().equals("1")){
Collection<RelatorioBoletimCustoPavimentoHelper> colecao = fachada.pesquisarRelatorioBoletimCustoPavimento(relatorioHelper);
// se a cole��o de par�metros da analise n�o for vazia
if (colecao != null && !colecao.isEmpty()) {
// la�o para criar a cole��o de par�metros da analise
for (RelatorioBoletimCustoPavimentoHelper helper : colecao) {
// Indicador Quebra: 1-Demandadas, 2-Demandadas nos 3 ultimos meses, 3-Aceitas
String indicadorQuebra = "";
if (helper.getOrdemServico() != null && helper.getOrdemServico().getDataEncerramento() != null &&
Util.compararDataTime(helper.getOrdemServico().getDataEncerramento(), dtInicio) >= 1 &&
Util.compararDataTime(helper.getOrdemServico().getDataEncerramento(), dtFim) <= 0 &&
helper.getOrdemServicoPavimento().getIndicadorAceite() == null){
// Demandadas
indicadorQuebra = "1";
if(indicadorPrimeiraOcorrenciaDemandadas == false && achouPrimeiraOcorrenciaDemandadas == false){
indicadorPrimeiraOcorrenciaDemandadas = true;
achouPrimeiraOcorrenciaDemandadas = true;
}else{
indicadorPrimeiraOcorrenciaDemandadas = false;
}
}else if(helper.getOrdemServico() != null && helper.getOrdemServico().getDataEncerramento() != null &&
Util.compararDataTime(helper.getOrdemServico().getDataEncerramento(), dtmenos3Meses) >= 1 &&
Util.compararDataTime(helper.getOrdemServico().getDataEncerramento(), dtInicio) < 0 &&
helper.getOrdemServicoPavimento().getMotivoRejeicao() == null &&
(helper.getOrdemServicoPavimento().getPavimentoRuaRetorno() == null ||
helper.getOrdemServicoPavimento().getPavimentoRuaRetorno() != null &&
helper.getOrdemServicoPavimento().getIndicadorAceite() == null)){
// Demandadas nos 3 Ultimos meses
indicadorQuebra = "2";
if(indicadorPrimeiraOcorrenciaDemandadas3Meses == false && achouPrimeiraOcorrenciaDemandadas3Meses == false){
indicadorPrimeiraOcorrenciaDemandadas3Meses = true;
achouPrimeiraOcorrenciaDemandadas3Meses = true;
}else{
indicadorPrimeiraOcorrenciaDemandadas3Meses = false;
}
}else{
// Aceitas
indicadorQuebra = "3";
}
// N�meroOS
String numeroOS = "";
if (helper.getOrdemServico() != null) {
numeroOS = helper.getOrdemServico().getId().toString();
}
// Matricula do im�vel
String matricula = "";
if (helper.getOrdemServico()!= null && helper.getOrdemServico().getImovel() != null) {
matricula = helper.getOrdemServico().getImovel().getId().toString();
}
// Endereco
String endereco = "";
if (helper.getEndereco() != null) {
endereco = helper.getEndereco();
}
// Tipo pvto rua
String tipoPvtoRua = "";
if (helper.getOrdemServicoPavimento() != null &&
helper.getOrdemServicoPavimento().getPavimentoRua()!= null &&
helper.getOrdemServicoPavimento().getPavimentoRua().getDescricaoAbreviada()!= null) {
tipoPvtoRua = helper.getOrdemServicoPavimento().getPavimentoRua().getId() + "-" +
helper.getOrdemServicoPavimento().getPavimentoRua().getDescricaoAbreviada();
}
// Metr. (m�) indicada.
BigDecimal metragem = null;
if (helper.getOrdemServicoPavimento() != null &&
helper.getOrdemServicoPavimento().getAreaPavimentoRua()!= null) {
metragem = helper.getOrdemServicoPavimento().getAreaPavimentoRua();
}
// Tipo pvto rua retorno.
String tipoPvtoRuaRetorno = "";
if (helper.getOrdemServicoPavimento() != null &&
helper.getOrdemServicoPavimento().getPavimentoRuaRetorno()!= null &&
helper.getOrdemServicoPavimento().getPavimentoRuaRetorno().getDescricaoAbreviada()!= null ) {
tipoPvtoRuaRetorno = helper.getOrdemServicoPavimento().getPavimentoRuaRetorno().getId() + "-" +
helper.getOrdemServicoPavimento().getPavimentoRuaRetorno().getDescricaoAbreviada();
}
// Metr. (m�) indicada retorno.
BigDecimal metragemRetorno = null;
if (helper.getOrdemServicoPavimento() != null &&
helper.getOrdemServicoPavimento().getAreaPavimentoRuaRetorno()!= null) {
metragemRetorno = helper.getOrdemServicoPavimento().getAreaPavimentoRuaRetorno();
}
// Data da Retorno
String dataRetorno = "";
if (helper.getOrdemServicoPavimento()!= null &&
helper.getOrdemServicoPavimento().getDataExecucao()!= null) {
dataRetorno = Util.formatarData(helper.getOrdemServicoPavimento().getDataExecucao());
}
// Data da rejei��o
String dataRejeicao = "";
if (helper.getOrdemServicoPavimento()!= null &&
helper.getOrdemServicoPavimento().getDataRejeicao()!= null) {
dataRejeicao = Util.formatarData(helper.getOrdemServicoPavimento().getDataRejeicao());
}
// Indicador de Aceite
String indicadorAceite = "";
if (helper.getOrdemServicoPavimento()!= null &&
helper.getOrdemServicoPavimento().getIndicadorAceite() != null){
if(helper.getOrdemServicoPavimento().getIndicadorAceite().compareTo(new Short("1")) == 0){
indicadorAceite = "Aceita";
}else if(helper.getOrdemServicoPavimento().getIndicadorAceite().compareTo(new Short("2")) == 0){
indicadorAceite = "N�o Aceita";
}
}
// Data Aceite
String dataAceite = "";
if (helper.getOrdemServicoPavimento()!= null &&
helper.getOrdemServicoPavimento().getDataAceite() != null){
dataAceite = Util.formatarData(helper.getOrdemServicoPavimento().getDataAceite());
}
// Motivo Rejei��o
String motivoRejeicao = "";
if (helper.getOrdemServicoPavimento()!= null &&
helper.getOrdemServicoPavimento().getMotivoRejeicao() != null){
motivoRejeicao = helper.getOrdemServicoPavimento().getMotivoRejeicao().getDescricao();
}
// Motivo Aceite
String motivoAceite = "";
if (helper.getOrdemServicoPavimento()!= null &&
helper.getOrdemServicoPavimento().getDescricaoMotivoAceite() != null){
motivoAceite = helper.getOrdemServicoPavimento().getDescricaoMotivoAceite();
}
relatorioBean =
new RelatorioBoletimCustoPavimentoBean(
numeroOS,
matricula,
endereco,
tipoPvtoRua,
metragem,
tipoPvtoRuaRetorno,
metragemRetorno,
dataRetorno,
dataRejeicao,
indicadorAceite,
dataAceite,
motivoRejeicao,
motivoAceite
);
relatorioBean.setIndicadorQuebra(indicadorQuebra);
relatorioBean.setIndicadorPrimeiraOcorrenciaDemandadas(indicadorPrimeiraOcorrenciaDemandadas);
relatorioBean.setIndicadorPrimeiraOcorrenciaDemandadas3Meses(indicadorPrimeiraOcorrenciaDemandadas3Meses);
relatorioBean.setIndicadorPrimeiraOcorrenciaAceitas(indicadorPrimeiraOcorrenciaAceitas);
// adiciona o bean a cole��o
if(!usuarioUnidadeRepavimentadora){
relatorioBeans.add(relatorioBean);
}else{
Date dtAceite = Util.converteStringParaDate( relatorioBean.getDataAceite());
if(relatorioBean.getIndicadorAceite().equals("Aceita") && !relatorioBean.getDataAceite().equals("") &&
Util.compararDataTime(dtAceite, dtInicio) >= 0 && Util.compararDataTime(dtAceite, dtFim) <= 0){
relatorioBeans.add(relatorioBean);
}
}
}
}
}
// __________________________________________________________________
// Par�metros do relat�rio
Map parametros = new HashMap();
// adiciona os par�metros do relat�rio
SistemaParametro sistemaParametro = fachada.pesquisarParametrosDoSistema();
parametros.put("imagem", sistemaParametro.getImagemRelatorio());
parametros.put("mesAno", mesAno);
parametros.put("mesAnoAnteriores", mesAnoAnteriores);
String titulo = "";
if(relatorioHelper.getIndicadorTipoBoletim().equals("1")){
titulo = "Boletim Anal�tico de Custo de Repavimenta��o por Tipo de Pavimento";
}else{
titulo = "Boletim Sint�tico de Custo de Repavimenta��o por Tipo de Pavimento";
}
parametros.put("titulo", titulo);
parametros.put("tipoBoletim", relatorioHelper.getIndicadorTipoBoletim());
UnidadeOrganizacional unidadeOrganizacional = null;
FiltroUnidadeOrganizacional filtroUnidadeOrganizacional = new FiltroUnidadeOrganizacional();
filtroUnidadeOrganizacional.adicionarParametro( new ParametroSimples(
FiltroUnidadeOrganizacional.ID, relatorioHelper.getIdUnidadeRepavimentadora()));
Collection colecaoUnidadeOrganizacional = fachada.pesquisar(filtroUnidadeOrganizacional,
UnidadeOrganizacional.class.getName());
if(!Util.isVazioOrNulo(colecaoUnidadeOrganizacional)){
unidadeOrganizacional = (UnidadeOrganizacional) Util.retonarObjetoDeColecao(colecaoUnidadeOrganizacional);
parametros.put("unidadeRepavimentadora", unidadeOrganizacional.getDescricao());
}
ArrayList<RelatorioBoletimCustoPavimentoBean> colecaoBeans =
(ArrayList<RelatorioBoletimCustoPavimentoBean>) relatorioBeans;
for (RelatorioBoletimCustoPavimentoBean relatorioBean2 : colecaoBeans) {
Date dtAceite = Util.converteStringParaDate( relatorioBean2.getDataAceite());
if(((relatorioBean2.getIndicadorQuebra().equals("1") || relatorioBean2.getIndicadorQuebra().equals("2")) &&
relatorioBean2.getIndicadorAceite().equals("Aceita") && !relatorioBean2.getDataAceite().equals("") &&
Util.compararDataTime(dtAceite, dtInicio) >= 0 && Util.compararDataTime(dtAceite, dtFim) <= 0) ||
relatorioBean2.getIndicadorQuebra().equals("3") ){
if(indicadorPrimeiraOcorrenciaAceitas == false && achouPrimeiraOcorrenciaAceitas == false){
indicadorPrimeiraOcorrenciaAceitas = true;
achouPrimeiraOcorrenciaAceitas = true;
}else{
indicadorPrimeiraOcorrenciaAceitas = false;
}
if(relatorioBean2.getIndicadorQuebra().equals("3")){
relatorioBean2.setIndicadorPrimeiraOcorrenciaDemandadas(false);
relatorioBean2.setIndicadorPrimeiraOcorrenciaDemandadas3Meses(false);
relatorioBean2.setIndicadorPrimeiraOcorrenciaAceitas(indicadorPrimeiraOcorrenciaAceitas);
}
}
}
List relatorioBeansAux = new ArrayList();
// Monta os beans referentes a TOTALIZA��O
if(!Util.isVazioOrNulo(colecaoTipoPavimentoRua)){
// Obt�m os Tipos de Pavimento.
Iterator iterator = colecaoTipoPavimentoRua.iterator();
RelatorioBoletimCustoPavimentoBean relatorioBean3 = null;
RelatorioBoletimCustoPavimentoBean relatorioBean4 = null;
while (iterator.hasNext()) {
flagPrimeiraVez = true;
relatorioBean3 = new RelatorioBoletimCustoPavimentoBean();
relatorioBean4 = new RelatorioBoletimCustoPavimentoBean();
OSTipoPavimentoHelper helper1 = (OSTipoPavimentoHelper) iterator.next();
if (colecaoTotaisPorTipoPavimentoRua != null && !colecaoTotaisPorTipoPavimentoRua.isEmpty()) {
relatorioBean3.setIndicadorQuebra("4");
relatorioBean3.setDescricaoTotal1(helper1.getDescricao());
relatorioBean3.setDescricaoTotal2("Metragem (m2)");
relatorioBean3.setDescricaoTotal3("Valor");
if(indicadorPrimeiraOcorrenciaTotal == false && achouPrimeiraOcorrenciaTotal == false){
indicadorPrimeiraOcorrenciaTotal = true;
achouPrimeiraOcorrenciaTotal = true;
relatorioBean3.setIndicadorPrimeiraOcorrenciaTotal(indicadorPrimeiraOcorrenciaTotal);
}else{
indicadorPrimeiraOcorrenciaTotal = false;
relatorioBean3.setIndicadorPrimeiraOcorrenciaTotal(indicadorPrimeiraOcorrenciaTotal);
}
Iterator it1 = colecaoTotaisPorTipoPavimentoRua.iterator();
while (it1.hasNext()) {
Object[] aux1 = (Object[]) it1.next();
relatorioBean4 = new RelatorioBoletimCustoPavimentoBean();
Integer dados1 = (Integer) aux1[0];
Integer dados2 = (Integer) aux1[1];
BigDecimal dados3 = (BigDecimal) aux1[2];
BigDecimal dados4 = (BigDecimal) aux1[3];
// se for Demandadas e do tipo do pavimento
if(dados1.toString().equals("1") && dados2.toString().equals(helper1.getId().toString())){
relatorioBean4.setIndicadorQuebra("4");
relatorioBean4.setDescricaoTotal("Estimado");
relatorioBean4.setIndicadorPrimeiraOcorrenciaTotal(false);
relatorioBean4.setTotalMetragem(dados3);
relatorioBean4.setTotalValor(dados4);
}
// se for Demandadas nos 3 ultimos mese e do tipo do pavimento
else if(dados1.toString().equals("2") && dados2.toString().equals(helper1.getId().toString())){
relatorioBean4.setIndicadorQuebra("4");
relatorioBean4.setDescricaoTotal("Residual " + mesAnoAnteriores);
relatorioBean4.setIndicadorPrimeiraOcorrenciaTotal(false);
relatorioBean4.setTotalMetragem(dados3);
relatorioBean4.setTotalValor(dados4);
}
// se for Aceitas e do tipo do pavimento
else if(dados1.toString().equals("3") && dados2.toString().equals(helper1.getId().toString())){
relatorioBean4.setIndicadorQuebra("4");
relatorioBean4.setDescricaoTotal("A Pagar");
relatorioBean4.setIndicadorPrimeiraOcorrenciaTotal(false);
relatorioBean4.setTotalMetragem(dados3);
relatorioBean4.setTotalValor(dados4);
}
if(dados2.toString().equals(helper1.getId().toString()) &&
(dados1.toString().equals("1") || dados1.toString().equals("2") || dados1.toString().equals("3"))){
if(!usuarioUnidadeRepavimentadora){
if(flagPrimeiraVez){
relatorioBeansAux.add(relatorioBean3);
flagPrimeiraVez = false;
}
relatorioBeansAux.add(relatorioBean4);
}else{
if(relatorioBean4.getDescricaoTotal().equals("A Pagar")){
if(flagPrimeiraVez){
relatorioBeansAux.add(relatorioBean3);
flagPrimeiraVez = false;
}
relatorioBeansAux.add(relatorioBean4);
}
}
}
}
}
}
}
if(!Util.isVazioOrNulo(relatorioBeansAux)){
// relatorioBean = new RelatorioBoletimCustoPavimentoBean();
// relatorioBeansAux.add(relatorioBean);
colecaoBeans.addAll(relatorioBeansAux);
}
// colecaoBeans.addAll(relatorioBeansAux);
// classifica a lista
Collections.sort((List) colecaoBeans,
new Comparator() {
public int compare(Object a, Object b) {
String codigo1 = ((RelatorioBoletimCustoPavimentoBean) a)
.getIndicadorQuebra();
String codigo2 = ((RelatorioBoletimCustoPavimentoBean) b)
.getIndicadorQuebra();
if (codigo1 == null || codigo1.equals("")) {
return -1;
} else {
return codigo1.compareTo(codigo2);
}
}
});
// cria uma inst�ncia do dataSource do relat�rio
RelatorioDataSource ds = new RelatorioDataSource(colecaoBeans);
if(colecaoBeans != null && colecaoBeans.size() > 0){
retorno = gerarRelatorio(ConstantesRelatorios.RELATORIO_BOLETIM_CUSTO_PAVIMENTO,
parametros, ds, tipoFormatoRelatorio);
}else{
this.nomeRelatorio = ConstantesRelatorios.RELATORIO_VAZIO;
retorno = gerarRelatorio(ConstantesRelatorios.RELATORIO_VAZIO,
parametros, ds, tipoFormatoRelatorio);
}
// ------------------------------------
// Grava o relat�rio no sistema
try {
persistirRelatorioConcluido(retorno, Relatorio.RELATORIO_BOLETIM_CUSTO_PAVIMENTO,
idFuncionalidadeIniciada);
} catch (ControladorException e) {
e.printStackTrace();
throw new TarefaException("Erro ao gravar relat�rio no sistema", e);
}
// ------------------------------------
// retorna o relat�rio gerado
return retorno;
}
@Override
public int calcularTotalRegistrosRelatorio() {
int retorno = 2;
if (retorno == 0) {
// Caso a pesquisa n�o retorne nenhum resultado comunica ao
// usu�rio;
throw new RelatorioVazioException("atencao.relatorio.vazio");
}
return retorno;
}
public void agendarTarefaBatch() {
AgendadorTarefas.agendarTarefa("RelatorioBoletimCustoPavimento", this);
}
}