class Tableless::RelatorioGeral
	include ActiveModel::Model

	attr_accessor :tipo_de_relatorio
	attr_accessor :empresa_parceira
	attr_accessor :mes_de_referencia
	attr_accessor :ano_de_referencia
	attr_accessor :numero_da_nota_fiscal
	attr_accessor :numero_do_contrato
	attr_accessor :unidade_orcamentaria
	attr_accessor :data_inicial
	attr_accessor :data_final

	def retorna_quantidades_licitacao(data_de_referencia)
		# Consultas para preencher a tabela 1 do relatório
		qtd_pedidos = Licitacao::Pedido.all.where("licitacao_pedidos.created_at >= ?", data_de_referencia).where("licitacao_pedidos.created_at < ?", data_de_referencia + 1.months).distinct.count
		qtd_processos = Licitacao::Processo.all.where(modalidade_do_processo: Licitacao::Processo.modalidades_do_processo[:processo_licitatorio]).where("licitacao_projetos.created_at >= ?", data_de_referencia).where("licitacao_projetos.created_at < ?", data_de_referencia + 1.months).distinct.count
		qtd_dispensas = Licitacao::Processo.all.where(modalidade_do_processo: Licitacao::Processo.modalidades_do_processo[:dispensa_de_licitacao]).where("licitacao_projetos.created_at >= ?", data_de_referencia).where("licitacao_projetos.created_at < ?", data_de_referencia + 1.months).distinct.count
		qtd_inexigibilidades = Licitacao::Processo.all.where(modalidade_do_processo: Licitacao::Processo.modalidades_do_processo[:inexigibilidade_de_licitacao]).where("licitacao_projetos.created_at >= ?", data_de_referencia).where("licitacao_projetos.created_at < ?", data_de_referencia + 1.months).distinct.count
		qtd_parcerias = Licitacao::Processo.all.where(modalidade_do_processo: Licitacao::Processo.modalidades_do_processo[:parceria_osc]).where("licitacao_projetos.created_at >= ?", data_de_referencia).where("licitacao_projetos.created_at < ?", data_de_referencia + 1.months).distinct.count
		qtd_contratos = Licitacao::Contrato.all.where("licitacao_contratos.created_at >= ?", data_de_referencia).where("licitacao_contratos.created_at < ?", data_de_referencia + 1.months).distinct.count
		qtd_aditivos = Licitacao::Aditivo.all.where("licitacao_aditivos.created_at >= ?", data_de_referencia).where("licitacao_aditivos.created_at < ?", data_de_referencia + 1.months).distinct.count

		qtds = [qtd_pedidos, qtd_processos, qtd_dispensas, qtd_inexigibilidades, qtd_parcerias, qtd_contratos, qtd_aditivos]
	end

	def retorna_qtds_arquivos_tcm_licitacao(data_de_referencia)
		# Consultas para preencher a tabela 2 do relatório
		qtd_arquivos_processos = Licitacao::Projeto.all.homologado.where("licitacao_projetos.arquivo_id is not null").where.not(modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]).where(envia_pro_sim: true).where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_publicacoes_de_processos = Licitacao::Publicacao.all.joins(:projeto).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).where("licitacao_publicacoes.arquivo_id is not null").distinct.count
		qtd_arquivos_comissoes = Licitacao::Comissao.all.joins(:projetos).where("licitacao_comissoes.arquivo_id is not null").where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]}).where('licitacao_projetos.arquivo_id != 0 or licitacao_projetos.arquivo_id is not null').where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_membros_das_comissoes = Licitacao::MembroDaComissao.all.joins(:projetos).where("licitacao_membros_da_comissao.arquivo_id is not null").where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]}).where('licitacao_projetos.arquivo_id != 0 or licitacao_projetos.arquivo_id is not null').where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_licitantes = Licitacao::PessoaDoProjeto.all.joins(:projeto).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where("licitacao_pessoas_do_projeto.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_itens_do_processo = Licitacao::ItemDoLote.all.itens_dos_lotes_ativos.joins(lote: :processo).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where.not(licitacao_projetos: {arquivo_id: 0}).where("licitacao_itens_do_lote.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_dotacoes_dos_processos = Licitacao::OrcamentoDaDespesaPorProjeto.all.joins(orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]).joins(:projeto).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where("licitacao_orcamentos_da_despesa_por_projetos.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_contratos_e_aditivos = Licitacao::Contrato.all.fechado.where(envia_pro_sim: true).joins(contratado: [pessoa_do_projeto: :projeto]).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where("licitacao_contratos.arquivo_id is not null").where('licitacao_contratos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_contratos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count + Licitacao::Aditivo.where(envia_pro_sim: true).where("licitacao_aditivos.arquivo_id is not null").where('licitacao_aditivos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_aditivos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_contratados = Licitacao::Contratado.all.joins(:contrato).where(licitacao_contratos: {status: Licitacao::Contrato.status["fechado"], envia_pro_sim: true}).joins(pessoa_do_projeto: :projeto).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where("licitacao_contratados.arquivo_id is not null").where('licitacao_contratos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_contratos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.all.count + Licitacao::Contratado.joins(:aditivo).where(licitacao_aditivos: {envia_pro_sim: true}).where("licitacao_contratados.arquivo_id is not null").where('licitacao_aditivos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_aditivos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count

		# Parcerias OSC
		qtd_arquivos_processos_parcerias = Licitacao::Projeto.all.homologado.parceria_osc.where("licitacao_projetos.arquivo_id is not null").where(envia_pro_sim: true).where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_publicacoes_de_processos_parcerias = Licitacao::Publicacao.all.joins(:projeto).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).where("licitacao_publicacoes.arquivo_id is not null").distinct.count
		qtd_arquivos_comissoes_parcerias = Licitacao::Comissao.all.joins(:projetos).where("licitacao_comissoes.arquivo_id is not null").where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]}).where('licitacao_projetos.arquivo_id != 0 or licitacao_projetos.arquivo_id is not null').where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_membros_das_comissoes_parcerias = Licitacao::MembroDaComissao.all.joins(comissao: :projetos).distinct.where("licitacao_membros_da_comissao.arquivo_id is not null").where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]}).where('licitacao_projetos.arquivo_id != 0 or licitacao_projetos.arquivo_id is not null').where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_licitantes_parcerias = Licitacao::PessoaDoProjeto.all.joins(:projeto).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where("licitacao_pessoas_do_projeto.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_dotacoes_dos_processos_parcerias = Licitacao::OrcamentoDaDespesaPorProjeto.all.joins(orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]).joins(:projeto).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where("licitacao_orcamentos_da_despesa_por_projetos.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count
		qtd_arquivos_contratos_parcerias = Licitacao::Contrato.all.fechado.where(envia_pro_sim: true).joins(contratado: [pessoa_do_projeto: :projeto]).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where("licitacao_contratos.arquivo_id is not null").where('licitacao_contratos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_contratos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).distinct.count

		qtds_arquivos_tcm = [
			qtd_arquivos_processos, qtd_arquivos_publicacoes_de_processos, qtd_arquivos_comissoes, qtd_arquivos_membros_das_comissoes, qtd_arquivos_licitantes, qtd_arquivos_itens_do_processo, qtd_arquivos_dotacoes_dos_processos, qtd_arquivos_contratos_e_aditivos, qtd_arquivos_contratados,
			qtd_arquivos_processos_parcerias, qtd_arquivos_publicacoes_de_processos_parcerias, qtd_arquivos_comissoes_parcerias, qtd_arquivos_membros_das_comissoes_parcerias, qtd_arquivos_licitantes_parcerias, qtd_arquivos_dotacoes_dos_processos_parcerias, qtd_arquivos_contratos_parcerias
		]
	end

	def retorna_quantidades_licitacao_por_unidade(data_de_referencia, unidade_orcamentaria)
		# Consultas para preencher a tabela 1 do relatório
		qtd_pedidos = Licitacao::Pedido.all.where("licitacao_pedidos.created_at >= ?", data_de_referencia).where("licitacao_pedidos.created_at < ?", data_de_referencia + 1.months).where(unidade_orcamentaria: unidade_orcamentaria).distinct.count
		qtd_processos = Licitacao::Processo.all.where(modalidade_do_processo: Licitacao::Processo.modalidades_do_processo[:processo_licitatorio]).where("licitacao_projetos.created_at >= ?", data_de_referencia).where("licitacao_projetos.created_at < ?", data_de_referencia + 1.months).joins(pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_dispensas = Licitacao::Processo.all.where(modalidade_do_processo: Licitacao::Processo.modalidades_do_processo[:dispensa_de_licitacao]).where("licitacao_projetos.created_at >= ?", data_de_referencia).where("licitacao_projetos.created_at < ?", data_de_referencia + 1.months).joins(pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_inexigibilidades = Licitacao::Processo.all.where(modalidade_do_processo: Licitacao::Processo.modalidades_do_processo[:inexigibilidade_de_licitacao]).where("licitacao_projetos.created_at >= ?", data_de_referencia).where("licitacao_projetos.created_at < ?", data_de_referencia + 1.months).joins(pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_parcerias = Licitacao::Processo.all.where(modalidade_do_processo: Licitacao::Processo.modalidades_do_processo[:parceria_osc]).where("licitacao_projetos.created_at >= ?", data_de_referencia).where("licitacao_projetos.created_at < ?", data_de_referencia + 1.months).joins(pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_contratos = Licitacao::Contrato.all.where("licitacao_contratos.created_at >= ?", data_de_referencia).where("licitacao_contratos.created_at < ?", data_de_referencia + 1.months).joins(unidade_orcamentaria_por_pedido: :unidade_orcamentaria).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_aditivos = Licitacao::Aditivo.all.where("licitacao_aditivos.created_at >= ?", data_de_referencia).where("licitacao_aditivos.created_at < ?", data_de_referencia + 1.months).joins(contrato: [unidade_orcamentaria_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count

		qtds = [qtd_pedidos, qtd_processos, qtd_dispensas, qtd_inexigibilidades, qtd_parcerias, qtd_contratos, qtd_aditivos]
	end

	def retorna_qtds_arquivos_tcm_licitacao_por_unidade(data_de_referencia, unidade_orcamentaria)
		# Consultas para preencher a tabela 2 do relatório
		qtd_arquivos_processos = Licitacao::Projeto.all.homologado.where("licitacao_projetos.arquivo_id is not null").where.not(modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]).where(envia_pro_sim: true).where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_publicacoes_de_processos = Licitacao::Publicacao.all.joins(:projeto).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).where("licitacao_publicacoes.arquivo_id is not null").joins(projeto: [pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_comissoes = Licitacao::Comissao.all.joins(:projetos).where("licitacao_comissoes.arquivo_id is not null").where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]}).where('licitacao_projetos.arquivo_id != 0 or licitacao_projetos.arquivo_id is not null').where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(projetos: [pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_membros_das_comissoes = Licitacao::MembroDaComissao.all.joins(:projetos).where("licitacao_membros_da_comissao.arquivo_id is not null").where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]}).where('licitacao_projetos.arquivo_id != 0 or licitacao_projetos.arquivo_id is not null').where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(projetos: [pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_licitantes = Licitacao::PessoaDoProjeto.all.joins(:projeto).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where("licitacao_pessoas_do_projeto.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(projeto: [pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_itens_do_processo = Licitacao::ItemDoLote.all.itens_dos_lotes_ativos.joins(lote: :processo).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where.not(licitacao_projetos: {arquivo_id: 0}).where("licitacao_itens_do_lote.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(lote: [processo: [pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]]]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_dotacoes_dos_processos = Licitacao::OrcamentoDaDespesaPorProjeto.all.joins(orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]).joins(:projeto).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where("licitacao_orcamentos_da_despesa_por_projetos.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_contratos_e_aditivos = Licitacao::Contrato.all.fechado.where(envia_pro_sim: true).joins(contratado: [pessoa_do_projeto: :projeto]).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where("licitacao_contratos.arquivo_id is not null").where('licitacao_contratos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_contratos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(unidade_orcamentaria_por_pedido: :unidade_orcamentaria).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count + Licitacao::Aditivo.where(envia_pro_sim: true).where("licitacao_aditivos.arquivo_id is not null").where('licitacao_aditivos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_aditivos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(contrato: [unidade_orcamentaria_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_contratados = Licitacao::Contratado.all.joins(:contrato).where(licitacao_contratos: {status: Licitacao::Contrato.status["fechado"], envia_pro_sim: true}).joins(pessoa_do_projeto: :projeto).where.not(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where("licitacao_contratados.arquivo_id is not null").where('licitacao_contratos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_contratos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(contrato: [unidade_orcamentaria_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.all.count + Licitacao::Contratado.joins(:aditivo).where(licitacao_aditivos: {envia_pro_sim: true}).where("licitacao_contratados.arquivo_id is not null").where('licitacao_aditivos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_aditivos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(contrato: [unidade_orcamentaria_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count

		# Parcerias OSC
		qtd_arquivos_processos_parcerias = Licitacao::Projeto.all.homologado.parceria_osc.where("licitacao_projetos.arquivo_id is not null").where(envia_pro_sim: true).where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_publicacoes_de_processos_parcerias = Licitacao::Publicacao.all.joins(:projeto).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).where("licitacao_publicacoes.arquivo_id is not null").joins(projeto: [pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_comissoes_parcerias = Licitacao::Comissao.all.joins(:projetos).where("licitacao_comissoes.arquivo_id is not null").where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]}).where('licitacao_projetos.arquivo_id != 0 or licitacao_projetos.arquivo_id is not null').where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(projetos: [pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_membros_das_comissoes_parcerias = Licitacao::MembroDaComissao.all.joins(comissao: :projetos).distinct.where("licitacao_membros_da_comissao.arquivo_id is not null").where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc]}).where('licitacao_projetos.arquivo_id != 0 or licitacao_projetos.arquivo_id is not null').where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(projetos: [pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_licitantes_parcerias = Licitacao::PessoaDoProjeto.all.joins(:projeto).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where("licitacao_pessoas_do_projeto.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(projeto: [pedido: [unidades_orcamentarias_por_pedido: :unidade_orcamentaria]]).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_dotacoes_dos_processos_parcerias = Licitacao::OrcamentoDaDespesaPorProjeto.all.joins(orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]).joins(:projeto).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where(licitacao_projetos: {status: Licitacao::Projeto.status[:homologado], envia_pro_sim: true}).where("licitacao_orcamentos_da_despesa_por_projetos.arquivo_id is not null").where('licitacao_projetos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_projetos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_contratos_parcerias = Licitacao::Contrato.all.fechado.where(envia_pro_sim: true).joins(contratado: [pessoa_do_projeto: :projeto]).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:parceria_osc] }).where("licitacao_contratos.arquivo_id is not null").where('licitacao_contratos.data_de_envio_pro_sim >= ?', data_de_referencia).where('licitacao_contratos.data_de_envio_pro_sim < ?', data_de_referencia + 1.months).joins(unidade_orcamentaria_por_pedido: :unidade_orcamentaria).where("licitacao_unidades_orcamentarias_por_pedido.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtds_arquivos_tcm = [
			qtd_arquivos_processos, qtd_arquivos_publicacoes_de_processos, qtd_arquivos_comissoes, qtd_arquivos_membros_das_comissoes, qtd_arquivos_licitantes, qtd_arquivos_itens_do_processo, qtd_arquivos_dotacoes_dos_processos, qtd_arquivos_contratos_e_aditivos, qtd_arquivos_contratados,
			qtd_arquivos_processos_parcerias, qtd_arquivos_publicacoes_de_processos_parcerias, qtd_arquivos_comissoes_parcerias, qtd_arquivos_membros_das_comissoes_parcerias, qtd_arquivos_licitantes_parcerias, qtd_arquivos_dotacoes_dos_processos_parcerias, qtd_arquivos_contratos_parcerias
		]
	end

	def retorna_quantidades_administrativo(data_de_referencia)
		# Consultas para preencher a tabela 1 do relatório
		qtd_empenhos = Contabilidade::Empenho.all.confirmado.where("contabilidade_empenhos.data_de_solicitacao >= ?", data_de_referencia).where("contabilidade_empenhos.data_de_solicitacao < ?", data_de_referencia + 1.months).distinct.count
		qtd_liquidacoes = Contabilidade::Liquidacao.all.confirmado.where("contabilidade_liquidacoes.data_de_solicitacao >= ?", data_de_referencia).where("contabilidade_liquidacoes.data_de_solicitacao < ?", data_de_referencia + 1.months).distinct.count
		qtd_pagamentos = Contabilidade::Pagamento.all.confirmado.where("contabilidade_pagamentos.data_da_solicitacao >= ?", data_de_referencia).where("contabilidade_pagamentos.data_da_solicitacao < ?", data_de_referencia + 1.months).distinct.count

		qtds = [qtd_empenhos, qtd_liquidacoes, qtd_pagamentos]
	end

	def retorna_quantidades_administrativo_por_periodo(data_inicial, data_final)
		# Consultas para preencher a tabela 1 do relatório
		qtd_empenhos = Contabilidade::Empenho.all.confirmado.where("contabilidade_empenhos.data_de_solicitacao >= ?", data_inicial).where("contabilidade_empenhos.data_de_solicitacao <= ?", data_final).distinct.count
		qtd_liquidacoes = Contabilidade::Liquidacao.all.confirmado.where("contabilidade_liquidacoes.data_de_solicitacao >= ?", data_inicial).where("contabilidade_liquidacoes.data_de_solicitacao <= ?", data_final).distinct.count
		qtd_pagamentos = Contabilidade::Pagamento.all.confirmado.where("contabilidade_pagamentos.data_da_solicitacao >= ?", data_inicial).where("contabilidade_pagamentos.data_da_solicitacao <= ?", data_final).distinct.count

		qtds = [qtd_empenhos, qtd_liquidacoes, qtd_pagamentos]
	end

	def retorna_qtds_arquivos_tcm_administrativo(data_de_referencia)
		# Consultas para preencher a tabela 2 do relatório
		qtd_arquivos_empenhos = Contabilidade::Empenho.all.confirmado.where("contabilidade_empenhos.arquivo_id is not null").where("contabilidade_empenhos.data_de_solicitacao >= ?", data_de_referencia).where("contabilidade_empenhos.data_de_solicitacao < ?", data_de_referencia + 1.months).distinct.count
		qtd_arquivos_liquidacoes = Contabilidade::Liquidacao.all.confirmado.where("contabilidade_liquidacoes.arquivo_id is not null").where("contabilidade_liquidacoes.data_de_solicitacao >= ?", data_de_referencia).where("contabilidade_liquidacoes.data_de_solicitacao < ?", data_de_referencia + 1.months).distinct.count
		qtd_arquivos_pagamentos = Contabilidade::Pagamento.all.confirmado.where("contabilidade_pagamentos.arquivo_id is not null").where("contabilidade_pagamentos.data_da_solicitacao >= ?", data_de_referencia).where("contabilidade_pagamentos.data_da_solicitacao < ?", data_de_referencia + 1.months).distinct.count

		qtds_arquivos_tcm = [qtd_arquivos_empenhos, qtd_arquivos_liquidacoes, qtd_arquivos_liquidacoes]
	end

	def retorna_qtds_arquivos_tcm_administrativo_por_periodo(data_inicial, data_final)
		# Consultas para preencher a tabela 2 do relatório
		qtd_arquivos_empenhos = Contabilidade::Empenho.all.confirmado.where("contabilidade_empenhos.arquivo_id is not null").where("contabilidade_empenhos.data_de_solicitacao >= ?", data_inicial).where("contabilidade_empenhos.data_de_solicitacao <= ?", data_final).distinct.count
		qtd_arquivos_liquidacoes = Contabilidade::Liquidacao.all.confirmado.where("contabilidade_liquidacoes.arquivo_id is not null").where("contabilidade_liquidacoes.data_de_solicitacao >= ?", data_inicial).where("contabilidade_liquidacoes.data_de_solicitacao <= ?", data_final).distinct.count
		qtd_arquivos_pagamentos = Contabilidade::Pagamento.all.confirmado.where("contabilidade_pagamentos.arquivo_id is not null").where("contabilidade_pagamentos.data_da_solicitacao >= ?", data_inicial).where("contabilidade_pagamentos.data_da_solicitacao <= ?", data_final).distinct.count

		qtds_arquivos_tcm = [qtd_arquivos_empenhos, qtd_arquivos_liquidacoes, qtd_arquivos_liquidacoes]
	end

	def retorna_quantidades_administrativo_por_unidade(data_de_referencia, unidade_orcamentaria)
		# Consultas para preencher a tabela 1 do relatório
		qtd_empenhos = Contabilidade::Empenho.all.confirmado.where("contabilidade_empenhos.data_de_solicitacao >= ?", data_de_referencia).where("contabilidade_empenhos.data_de_solicitacao < ?", data_de_referencia + 1.months).joins(orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_liquidacoes = Contabilidade::Liquidacao.all.confirmado.where("contabilidade_liquidacoes.data_de_solicitacao >= ?", data_de_referencia).where("contabilidade_liquidacoes.data_de_solicitacao < ?", data_de_referencia + 1.months).joins(empenho: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_pagamentos = Contabilidade::Pagamento.all.confirmado.where("contabilidade_pagamentos.data_da_solicitacao >= ?", data_de_referencia).where("contabilidade_pagamentos.data_da_solicitacao < ?", data_de_referencia + 1.months).joins(liquidacao: [empenho: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count

		qtds = [qtd_empenhos, qtd_liquidacoes, qtd_pagamentos]
	end

	def retorna_quantidades_administrativo_por_unidade_por_periodo(data_inicial, data_final, unidade_orcamentaria)
		# Consultas para preencher a tabela 1 do relatório
		qtd_empenhos = Contabilidade::Empenho.all.confirmado.where("contabilidade_empenhos.data_de_solicitacao >= ?", data_inicial).where("contabilidade_empenhos.data_de_solicitacao <= ?", data_final).joins(orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_liquidacoes = Contabilidade::Liquidacao.all.confirmado.where("contabilidade_liquidacoes.data_de_solicitacao >= ?", data_inicial).where("contabilidade_liquidacoes.data_de_solicitacao <= ?", data_final ).joins(empenho: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_pagamentos = Contabilidade::Pagamento.all.confirmado.where("contabilidade_pagamentos.data_da_solicitacao >= ?", data_inicial).where("contabilidade_pagamentos.data_da_solicitacao <= ?", data_final).joins(liquidacao: [empenho: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count

		qtds = [qtd_empenhos, qtd_liquidacoes, qtd_pagamentos]
	end


	def retorna_qtds_arquivos_tcm_administrativo_por_unidade(data_de_referencia, unidade_orcamentaria)
		# Consultas para preencher a tabela 2 do relatório
		qtd_arquivos_empenhos = Contabilidade::Empenho.all.confirmado.where("contabilidade_empenhos.arquivo_id is not null").where("contabilidade_empenhos.data_de_solicitacao >= ?", data_de_referencia).where("contabilidade_empenhos.data_de_solicitacao < ?", data_de_referencia + 1.months).joins(orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_liquidacoes = Contabilidade::Liquidacao.all.confirmado.where("contabilidade_liquidacoes.arquivo_id is not null").where("contabilidade_liquidacoes.data_de_solicitacao >= ?", data_de_referencia).where("contabilidade_liquidacoes.data_de_solicitacao < ?", data_de_referencia + 1.months).joins(empenho: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_pagamentos = Contabilidade::Pagamento.all.confirmado.where("contabilidade_pagamentos.arquivo_id is not null").where("contabilidade_pagamentos.data_da_solicitacao >= ?", data_de_referencia).where("contabilidade_pagamentos.data_da_solicitacao < ?", data_de_referencia + 1.months).joins(liquidacao: [empenho: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count

		qtds_arquivos_tcm = [qtd_arquivos_empenhos, qtd_arquivos_liquidacoes, qtd_arquivos_liquidacoes]
	end

	def retorna_qtds_arquivos_tcm_administrativo_por_unidade_por_periodo(data_inicial, data_final, unidade_orcamentaria)
		# Consultas para preencher a tabela 2 do relatório
		qtd_arquivos_empenhos = Contabilidade::Empenho.all.confirmado.where("contabilidade_empenhos.arquivo_id is not null").where("contabilidade_empenhos.data_de_solicitacao >= ?", data_inicial).where("contabilidade_empenhos.data_de_solicitacao < ?", data_final).joins(orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_liquidacoes = Contabilidade::Liquidacao.all.confirmado.where("contabilidade_liquidacoes.arquivo_id is not null").where("contabilidade_liquidacoes.data_de_solicitacao >= ?", data_inicial).where("contabilidade_liquidacoes.data_de_solicitacao < ?", data_final).joins(empenho: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count
		qtd_arquivos_pagamentos = Contabilidade::Pagamento.all.confirmado.where("contabilidade_pagamentos.arquivo_id is not null").where("contabilidade_pagamentos.data_da_solicitacao >= ?", data_inicial).where("contabilidade_pagamentos.data_da_solicitacao < ?", data_final).joins(liquidacao: [empenho: [orcamento_da_despesa: [elemento_de_despesa_por_subacao: [subacao: :unidade_orcamentaria]]]]).where("loa_subacoes.unidade_orcamentaria_id = ?", unidade_orcamentaria).distinct.count

		qtds_arquivos_tcm = [qtd_arquivos_empenhos, qtd_arquivos_liquidacoes, qtd_arquivos_liquidacoes]
	end

	def persisted?
		false
	end
end
