class Licitacao::RelatoriosDaLicitacaoController < ApplicationController
	include ControllerConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario! , except: [:new, :imprimir]
	skip_before_action :verifica_se_tem_orcamento_na_sessao!, only: [:new, :imprimir], raise: false
	before_action :set_contexto
	before_action :disponibiliza_dependencias
	before_action :disponibiliza_dependencias_formulario, only: [:selecionar_relatorio]

	def new
		@relatorio_da_licitacao = Tableless::RelatorioDaLicitacao.new(relatorio: params[:relatorio])
		@fornecedores = Base::Pessoa.includes(:tipo_de_pessoa).all.order(:nome)

		if current_usuario.desenvolvedor?
			@unidades_gestoras = contexto_atual.unidades_gestoras.select("DISTINCT ON (codigo) *").sort { |a, b| b.codigo.to_i <=> a.codigo.to_i }.reverse!
		else
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.where(id: current_usuario.unidades_orcamentarias_por_usuario.pluck(:unidade_orcamentaria_id)).order("loa_unidades_orcamentarias.codigo", "loa_unidades_orcamentarias.nome")
			@unidades_gestoras = Loa::UnidadeGestora.where('id in (?)', @unidades_orcamentarias.pluck(:unidade_gestora_id))
		end
	end

	# seleciona um relatório para imprimir
	def selecionar_relatorio
		@relatorio_da_licitacao = Tableless::RelatorioDaLicitacao.new(relatorio: params[:relatorio])
		@fornecedores = Base::Pessoa.includes(:tipo_de_pessoa).all.order(:nome)
		@elementos_de_despesa = contexto_atual.elementos_de_despesa.order(:codigo)
		@sub_elementos_de_despesa = contexto_atual.sub_elementos_de_despesa
			.select("DISTINCT ON (contabilidade_sub_elementos_de_despesa.codigo, contabilidade_sub_elementos_de_despesa.descricao) contabilidade_sub_elementos_de_despesa.*")
			.order("contabilidade_sub_elementos_de_despesa.codigo, contabilidade_sub_elementos_de_despesa.descricao")


		if current_usuario.desenvolvedor?
			@unidades_gestoras = contexto_atual.unidades_gestoras.select("DISTINCT ON (codigo) *").sort { |a, b| b.codigo.to_i <=> a.codigo.to_i }.reverse!
		else
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.where(id: current_usuario.unidades_orcamentarias_por_usuario.pluck(:unidade_orcamentaria_id)).order("loa_unidades_orcamentarias.codigo", "loa_unidades_orcamentarias.nome")
			@unidades_gestoras = Loa::UnidadeGestora.where('id in (?)', @unidades_orcamentarias.pluck(:unidade_gestora_id))
		end
	end

	def imprimir
		@relatorio_da_licitacao = Tableless::RelatorioDaLicitacao.new(tableless_relatorio_da_licitacao_params)
		if(tableless_relatorio_da_licitacao_params[:button].eql?("pdf"))
			imprimir_em_pdf( @relatorio_da_licitacao )
		elsif(tableless_relatorio_da_licitacao_params[:button].eql?("planilha"))
			planilha( @relatorio_da_licitacao )
		else
			imprimir_em_pdf( @relatorio_da_licitacao )
		end
	end

	def imprimir_em_pdf(relatorio_da_licitacao)
		relatorio = relatorio_da_licitacao.relatorio
		if respond_to? relatorio.to_s, :private
			case relatorio.to_s
			when "saldo_da_ata_por_unidade"
				@atas = pesquisa_saldo_da_ata_por_unidade(relatorio_da_licitacao)
			when "relacao_atas_e_contratos"
				@atas = pesquisa_relacao_atas_e_contratos(relatorio_da_licitacao)
			when "resumo_dos_contratos", "resumo_simplificado_dos_contratos"
				@contratos_filtrados = pesquisa_resumo_dos_contratos(relatorio_da_licitacao)
			when "relacao_contratos_por_vigencia"
				@contratos = pesquisa_relacao_contratos_por_vigencia(relatorio_da_licitacao)
			when "relacao_contratos_firmados"
				@contratos = pesquisa_relacao_contratos_firmados(relatorio_da_licitacao)
			when "auxiliar_prorrogacao_contratual"
				@contratos = pesquisa_relatorio_auxiliar_prorrogacao(relatorio_da_licitacao)
			when "relacao_agentes_de_participacao_dos_contratos" 
				@contratos = pesquisa_relacao_agentes_de_participacao_dos_contratos(relatorio_da_licitacao) 
			when "relacao_atas_por_vigencia"
				@atas = pesquisa_relacao_atas_por_vigencia(relatorio_da_licitacao)
			when "fracionamento_dispensa_i"
				@dotacoes_por_projetos = pesquisa_fracionamento_dispensa_i(relatorio_da_licitacao)
			when "fracionamento_dispensa_ii"
				@dotacoes_por_projetos = pesquisa_fracionamento_dispensa_ii(relatorio_da_licitacao)
			when "relacao_aditivos_solicitados"
				@aditivos = pesquisa_relacao_aditivos_solicitados
			when "relacao_de_fornecedores_vigentes"
				@fornecedores = pesquisa_relacao_de_fornecedores_vigentes(relatorio_da_licitacao)
			when "resumo_do_plano"
				@acoes = pesquisa_resumo_do_plano(relatorio_da_licitacao)
			when "plano_em_detalhes"
				@acoes = pesquisa_plano_em_detalhes(relatorio_da_licitacao)
			when "pca_grandes_numeros"
				@acoes = pesquisa_pca_grandes_numeros(relatorio_da_licitacao)
			when "valores_estimados"
				@acoes = pesquisa_valores_estimados(relatorio_da_licitacao)
			when "documento_de_intencao_de_demanda"
				@acoes = pesquisa_documento_de_intencao_de_demanda(relatorio_da_licitacao)
			when "relacao_de_dfd"
				@acoes = pesquisa_relacao_de_dfd_e_did(relatorio_da_licitacao)
			when "relacao_de_did"
				@acoes = pesquisa_relacao_de_dfd_e_did(relatorio_da_licitacao)
			when "valores_estimados_por_prefeitura"
				@acoes = pesquisa_valores_estimados_por_prefeitura(relatorio_da_licitacao)
			when "calendario_das_contratacoes"
				@acoes = pesquisa_calendario_das_contratacoes(relatorio_da_licitacao)	
			when "relatorio_das_demandas_comuns"
				@acoes = pesquisa_relatorio_das_demandas_comuns(relatorio_da_licitacao)	
			end

			unless relatorio.to_s.eql?("relacao_de_dfd") || relatorio.to_s.eql?("relacao_de_did")
				arquivo = CombinePDF.new
				arquivo << CombinePDF.parse(send(relatorio))
				arquivo.number_pages(location: :bottom_right, margin_from_height: 0, number_format: '%s', font_size: 8)
				send_data arquivo.to_pdf, filename: "#{relatorio.to_s}.pdf", type: "application/pdf", disposition: 'inline'
			end
		else
			redirect_to new_licitacao_relatorios_da_licitacao_path, alert: 'Relatório selecionado não existe'
		end
	end

	def planilha(relatorio_da_licitacao)
		relatorio = relatorio_da_licitacao.relatorio
		request.format = "xlsx"
		@configuracao = Configuracao.last

		respond_to do |format|
			format.xlsx {
				if relatorio.to_s.eql?("saldo_da_ata_por_unidade")
					@atas = pesquisa_saldo_da_ata_por_unidade(relatorio_da_licitacao)
					render xlsx: 'saldo_da_ata_por_unidade', template: 'licitacao/relatorios_da_licitacao/saldo_da_ata_por_unidade', filename: 'saldo_da_ata_por_unidade.xlsx'

				elsif relatorio.to_s.eql?("relacao_atas_e_contratos")
					@atas = pesquisa_relacao_atas_e_contratos(relatorio_da_licitacao)
					render xlsx: 'relacao_atas_e_contratos', template: 'licitacao/relatorios_da_licitacao/relacao_atas_e_contratos', filename: 'relacao_atas_e_contratos.xlsx'

				elsif relatorio.to_s.eql?("resumo_dos_contratos")
					@contratos_filtrados = pesquisa_resumo_dos_contratos(relatorio_da_licitacao)
					render xlsx: 'resumo_dos_contratos', template: 'licitacao/relatorios_da_licitacao/resumo_dos_contratos', filename: 'resumo_dos_contratos.xlsx'

				elsif relatorio.to_s.eql?("resumo_simplificado_dos_contratos")
					@contratos_filtrados = pesquisa_resumo_dos_contratos(relatorio_da_licitacao)
					render xlsx: 'resumo_simplificado_dos_contratos', template: 'licitacao/relatorios_da_licitacao/resumo_simplificado_dos_contratos', filename: 'resumo_simplificado_dos_contratos.xlsx'

				elsif relatorio.to_s.eql?("relacao_contratos_por_vigencia")
					@contratos = pesquisa_relacao_contratos_por_vigencia(relatorio_da_licitacao)
					render xlsx: 'relacao_contratos_por_vigencia', template: 'licitacao/relatorios_da_licitacao/relacao_contratos_por_vigencia', filename: 'relacao_contratos_por_vigencia.xlsx'

				elsif relatorio.to_s.eql?("relacao_contratos_firmados")
					@contratos = pesquisa_relacao_contratos_firmados(relatorio_da_licitacao)
					render xlsx: 'relacao_contratos_por_vigencia', template: 'licitacao/relatorios_da_licitacao/relacao_contratos_por_vigencia', filename: 'relacao_contratos_por_vigencia.xlsx'
				
				elsif relatorio.to_s.eql?("auxiliar_prorrogacao_contratual")
					@contratos = pesquisa_relatorio_auxiliar_prorrogacao(relatorio_da_licitacao)
					render xlsx: 'auxiliar_prorrogacao_contratual', template: 'licitacao/relatorios_da_licitacao/relatorio_auxiliar_prorrogacao_contratual', filename: 'auxiliar_prorrogacao_contratual.xlsx'

				elsif relatorio.to_s.eql?("relacao_atas_por_vigencia")
					@atas = pesquisa_relacao_atas_por_vigencia(relatorio_da_licitacao)
					render xlsx: 'relacao_atas_por_vigencia', template: 'licitacao/relatorios_da_licitacao/relacao_atas_por_vigencia', filename: 'relacao_atas_por_vigencia.xlsx'

				elsif relatorio.to_s.eql?("relacao_agentes_de_participacao_dos_contratos")
					@contratos_filtrados = pesquisa_relacao_agentes_de_participacao_dos_contratos(relatorio_da_licitacao)
					render xlsx: 'relacao_agentes_de_participacao_dos_contratos', template: 'licitacao/relatorios_da_licitacao/relacao_agentes_de_participacao_dos_contratos', filename: 'relacao_agentes_de_participacao_dos_contratos.xlsx'

				elsif relatorio.to_s.eql?("fracionamento_dispensa_i")
					@dotacoes_por_projetos = pesquisa_fracionamento_dispensa_i(relatorio_da_licitacao)
					render xlsx: 'fracionamento_dispensa_i', template: 'licitacao/relatorios_da_licitacao/fracionamento_dispensa_i', filename: 'fracionamento_dispensa_i.xlsx'

				elsif relatorio.to_s.eql?("fracionamento_dispensa_ii")
					@dotacoes_por_projetos = pesquisa_fracionamento_dispensa_ii(relatorio_da_licitacao)
					render xlsx: 'fracionamento_dispensa_ii', template: 'licitacao/relatorios_da_licitacao/fracionamento_dispensa_ii', filename: 'fracionamento_dispensa_ii.xlsx'

				elsif relatorio.to_s.eql?("resumo_do_plano")
					@acoes = pesquisa_resumo_do_plano(relatorio_da_licitacao)
					render xlsx: 'resumo_do_plano', template: 'licitacao/relatorios_da_licitacao/resumo_do_plano', filename: 'resumo_do_plano.xlsx'

				elsif relatorio.to_s.eql?("plano_em_detalhes")
					@acoes = pesquisa_plano_em_detalhes(relatorio_da_licitacao)
					render xlsx: 'plano_em_detalhes', template: 'licitacao/relatorios_da_licitacao/plano_em_detalhes', filename: 'plano_em_detalhes.xlsx'

				elsif relatorio.to_s.eql?("pca_grandes_numeros")
					@acoes = pesquisa_pca_grandes_numeros(relatorio_da_licitacao)
					render xlsx: 'pca_grandes_numeros', template: 'licitacao/relatorios_da_licitacao/pca_grandes_numeros', filename: 'pca_em_grandes_numeros.xlsx'

				elsif relatorio.to_s.eql?("valores_estimados")
					@acoes = pesquisa_valores_estimados(relatorio_da_licitacao)
					render xlsx: 'valores_estimados', template: 'licitacao/relatorios_da_licitacao/valores_estimados', filename: 'valores_estimados.xlsx'

				elsif relatorio.to_s.eql?("documento_de_intencao_de_demanda")
					@dotacoes_por_projetos = pesquisa_documento_de_intencao_de_demanda(relatorio_da_licitacao)
					render xlsx: 'documento_de_intencao_de_demanda', template: 'licitacao/relatorios_da_licitacao/documento_de_intencao_de_demanda', filename: 'documento_de_intencao_de_demanda.xlsx'

				end
			}
		end

	end

	def pesquisa_relacao_atas_e_contratos relatorio_da_licitacao
		filtros = @relatorio_da_licitacao
		data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/01/#{exercicio}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		data_final = @relatorio_da_licitacao.data_final.to_date
		clausula_processo = {licitacao_projetos: {numero_do_processo: @relatorio_da_licitacao.numero_do_processo}} if !@relatorio_da_licitacao.numero_do_processo.blank?
		clausula_fornecedor = {base_pessoas: {id: @relatorio_da_licitacao.fornecedor}} if !@relatorio_da_licitacao.fornecedor.blank?
		joins_fornecedor = {processo: [contratos: [contratado: [pessoa_do_projeto: :pessoa]]]} if !@relatorio_da_licitacao.fornecedor.blank?
		clausula_unidade_gestora = {loa_unidades_gestoras: {id: @relatorio_da_licitacao.unidade_gestora}} if !@relatorio_da_licitacao.unidade_gestora.blank?
		joins_unidade_gestora = {processo: [contratos: [unidade_orcamentaria_do_exercicio: :unidade_gestora]]} if !@relatorio_da_licitacao.unidade_gestora.blank?

		@atas = Licitacao::AtaDeRegistroDePrecos.where('licitacao_atas_de_registro_de_precos.data_final_de_vigencia >= ? AND licitacao_atas_de_registro_de_precos.data_final_de_vigencia <= ?', data_inicial, data_final).joins(:processo).where(clausula_processo).includes(joins_fornecedor).where(clausula_fornecedor).includes(joins_unidade_gestora).where(clausula_unidade_gestora).order(:data_inicio_de_vigencia).all
	end

	def relacao_atas_e_contratos
		render_to_string pdf: "relacao_atas_e_contratos",
			template: "licitacao/relatorios_da_licitacao/relacao_atas_e_contratos.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Relação de Atas e Contratos",
						titulo2: "Exercício de: #{contexto_atual.exercicio}",
						titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} a #{@relatorio_da_licitacao.data_final}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_resumo_dos_contratos relatorio_da_licitacao
		@contratos_filtrados = relatorio_da_licitacao.retorna_contratos_filtrados
	end

	def resumo_dos_contratos
		render_to_string pdf: "resumo_dos_contratos",
			template: "licitacao/relatorios_da_licitacao/resumo_dos_contratos.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Resumo dos Contratos",
						titulo2: "Exercício de: #{contexto_atual.exercicio}",
						titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} a #{@relatorio_da_licitacao.data_final}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def resumo_simplificado_dos_contratos
		render_to_string pdf: "resumo_simplificado_dos_contratos",
		template: "licitacao/relatorios_da_licitacao/resumo_simplificado_dos_contratos.pdf.slim",
		orientation: 'Landscape',
		disable_smart_shrinking: true,

		dpi: '96',
		header: {
			html: {
				template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
				locals: {
					titulo1: "Resumo dos Contratos",
					titulo2: "Exercício de: #{contexto_atual.exercicio}",
					titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} a #{@relatorio_da_licitacao.data_final}"
				}
			},
			spacing: 5
		},
		margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relacao_contratos_por_vigencia relatorio_da_licitacao
		filtros = @relatorio_da_licitacao
		data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/01/#{contexto_atual.exercicio}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		data_final = @relatorio_da_licitacao.data_final.to_date
		clausula_contrato = {numero: @relatorio_da_licitacao.numero_do_contrato} if !@relatorio_da_licitacao.numero_do_contrato.blank?
		clausula_processo = {licitacao_projetos: {numero_do_processo: @relatorio_da_licitacao.numero_do_processo}} if !@relatorio_da_licitacao.numero_do_processo.blank?
		clausula_fornecedor = {base_pessoas: {id: @relatorio_da_licitacao.fornecedor}} if !@relatorio_da_licitacao.fornecedor.blank?
		joins_fornecedor = {contratado: [pessoa_do_projeto: :pessoa]} if !@relatorio_da_licitacao.fornecedor.blank?
		clausula_tipo_de_contrato = {tipo_de_contrato: @relatorio_da_licitacao.tipo_de_contrato} if !@relatorio_da_licitacao.tipo_de_contrato.blank?

		#é preciso pegar as unidades gestoras, pois existem contratos vigentes de outros exercícios
		#e na tela o filtro de UG é apenas do exercicio logado
		if !@relatorio_da_licitacao.unidade_gestora.blank?
			unidade_gestora = Loa::UnidadeGestora.find(@relatorio_da_licitacao.unidade_gestora.to_i)
			unidades_orcamentarias = unidade_gestora.unidades_orcamentarias
			cod_orgaos = unidades_orcamentarias.joins(:orgao).pluck('loa_orgaos.codigo')
			cod_unidades_orcamentarias = unidades_orcamentarias.pluck(:codigo)
			unidades_gestoras_ids = Loa::UnidadeOrcamentaria.joins(:orgao).where(loa_orgaos: {codigo: cod_orgaos}, loa_unidades_orcamentarias: {codigo: cod_unidades_orcamentarias}).pluck(:unidade_gestora_id)
			unidades_gestoras_filtradas = unidades_gestoras_ids.select { |id| id == unidade_gestora.id }
			if unidades_orcamentarias.blank?
				unidades_orcamentarias = orcamento.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).where(loa_unidades_orcamentaria_vinculada: {unidade_orcamentaria_vinculada_id: id_unidades_orcamentarias}).pluck(:unidade_gestora_id)
			end
		end
		
		clausula_unidade_gestora = {loa_unidades_gestoras: {id: unidades_gestoras_filtradas}} if !@relatorio_da_licitacao.unidade_gestora.blank?
		joins_unidade_gestora = {unidade_orcamentaria_do_exercicio: :unidade_gestora}
		
		aditivo_confirmado = Licitacao::Aditivo.status[:confirmado]
		modalidade_por_prazo = Licitacao::Aditivo.modalidades[:por_prazo]
		aditivo_solicitado = Licitacao::Aditivo.status[:solicitado]

		sql_busca_das_vigencias = "
			(licitacao_aditivos.fim_da_vigencia is not null
			AND licitacao_aditivos.status = ?
				AND(
					(SELECT
						MAX(fim_da_vigencia)
					FROM
						licitacao_aditivos
					WHERE
						licitacao_aditivos.fim_da_vigencia is not null
						AND licitacao_aditivos.status = ?
						AND contrato_id = licitacao_contratos.id AND fim_da_vigencia IS NOT NULL
					) BETWEEN ? AND ?)
			)OR(
				licitacao_contratos.fim_da_vigencia IS NOT NULL
				AND (licitacao_aditivos.id IS NULL OR (licitacao_aditivos.status = ? AND NOT licitacao_aditivos.modalidade = ?) OR licitacao_aditivos.status = ?)
				AND licitacao_contratos.fim_da_vigencia >= ?
				AND licitacao_contratos.fim_da_vigencia <= ?
			)"

		contratos = Licitacao::Contrato.where.not(status: :rescindido).left_outer_joins(:aditivos)
			.where(sql_busca_das_vigencias, aditivo_confirmado, aditivo_confirmado, data_inicial, data_final, aditivo_confirmado, modalidade_por_prazo, aditivo_solicitado, data_inicial, data_final)
				.where(clausula_contrato).joins(:projeto)
					.where(clausula_processo).includes(joins_fornecedor)
						.where(clausula_fornecedor).includes(joins_unidade_gestora)
							.where(clausula_unidade_gestora)
								.where(clausula_tipo_de_contrato).uniq

		if @relatorio_da_licitacao.elemento_de_despesa.present? && @relatorio_da_licitacao.elemento_de_despesa != ""
			codigo_do_elemento = Base::ElementoDeDespesa.find( @relatorio_da_licitacao.elemento_de_despesa.to_i).codigo.to_i
			elementos =  Base::ElementoDeDespesa.ativos.where(codigo: codigo_do_elemento)
			contratos = Licitacao::Contrato.joins(sub_elementos_de_despesa: :elemento_de_despesa).where('licitacao_contratos.id in (?) AND base_elementos_de_despesa.id in (?)', contratos.pluck(:id), elementos.pluck(:id))
		end
		return contratos
	end

	def relacao_contratos_por_vigencia
		render_to_string pdf: "relacao_contratos_por_vigencia",
			template: "licitacao/relatorios_da_licitacao/relacao_contratos_por_vigencia.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Relação de Contratos por Vigência",
						titulo2: "Exercício de: #{contexto_atual.exercicio}",
						titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} a #{@relatorio_da_licitacao.data_final} / Data da Emissão: #{Date.today}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_contratos_firmados relatorio_da_licitacao
		filtros = @relatorio_da_licitacao
		data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/01/#{exercicio}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		data_final = @relatorio_da_licitacao.data_final.to_date
		clausula_contrato = {numero: @relatorio_da_licitacao.numero_do_contrato} if !@relatorio_da_licitacao.numero_do_contrato.blank?
		clausula_processo = {licitacao_projetos: {numero_do_processo: @relatorio_da_licitacao.numero_do_processo}} if !@relatorio_da_licitacao.numero_do_processo.blank?
		clausula_fornecedor = {base_pessoas: {id: @relatorio_da_licitacao.fornecedor}} if !@relatorio_da_licitacao.fornecedor.blank?
		joins_fornecedor = {contratado: [pessoa_do_projeto: :pessoa]} if !@relatorio_da_licitacao.fornecedor.blank?
		clausula_tipo_de_contrato = {tipo_de_contrato: @relatorio_da_licitacao.tipo_de_contrato} if !@relatorio_da_licitacao.tipo_de_contrato.blank?

		#é preciso pegar as unidades gestoras, pois existem contratos vigentes de outros exercícios
		#e na tela o filtro de UG é apenas do exercicio logado
		if !@relatorio_da_licitacao.unidade_gestora.blank?
			unidade_gestora = Loa::UnidadeGestora.find(@relatorio_da_licitacao.unidade_gestora.to_i)
			unidades_orcamentarias = unidade_gestora.unidades_orcamentarias
			cod_orgaos = unidades_orcamentarias.joins(:orgao).pluck('loa_orgaos.codigo')
			cod_unidades_orcamentarias = unidades_orcamentarias.pluck(:codigo)
			unidades_gestoras_ids = Loa::UnidadeOrcamentaria.joins(:orgao).where(loa_orgaos: {codigo: cod_orgaos}, loa_unidades_orcamentarias: {codigo: cod_unidades_orcamentarias}).pluck(:unidade_gestora_id)
			if unidades_orcamentarias.blank?
				unidades_orcamentarias = orcamento.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).where(loa_unidades_orcamentaria_vinculada: {unidade_orcamentaria_vinculada_id: id_unidades_orcamentarias}).pluck(:unidade_gestora_id)
			end
		end
		clausula_unidade_gestora = {loa_unidades_gestoras: {id: unidades_gestoras_ids}} if !@relatorio_da_licitacao.unidade_gestora.blank?
		joins_unidade_gestora = {unidade_orcamentaria_do_exercicio: :unidade_gestora}

		@contratos = Licitacao::Contrato.where.not(status: :rescindido)
			.where("(inicio_da_vigencia IS NOT NULL AND inicio_da_vigencia >= ? AND inicio_da_vigencia <= ?)", data_inicial, data_final).where(clausula_contrato).joins(:projeto)
			.where(clausula_processo).includes(joins_fornecedor).where(clausula_fornecedor).includes(joins_unidade_gestora)
			.where(clausula_unidade_gestora).where(clausula_tipo_de_contrato).uniq
	end

	def relacao_contratos_firmados
		render_to_string pdf: "relacao_contratos_por_vigencia",
			template: "licitacao/relatorios_da_licitacao/relacao_contratos_por_vigencia.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {

				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Relação de Contratos Firmados",
						titulo2: "Exercício de: #{contexto_atual.exercicio}",
						titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} a #{@relatorio_da_licitacao.data_final} / Data da Emissão: #{Date.today}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end
	
	def pesquisa_relatorio_auxiliar_prorrogacao relatorio_da_licitacao
		@unidade_gestora = @relatorio_da_licitacao.unidade_gestora.present? ? Loa::UnidadeGestora.find(@relatorio_da_licitacao.unidade_gestora).nome : "Todos"
		filtros = @relatorio_da_licitacao
		@data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/01/#{exercicio_atual}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		@data_final = @relatorio_da_licitacao.data_final.blank? ? "31/12/#{exercicio_atual}".to_date : @relatorio_da_licitacao.data_final.to_date

		unless @relatorio_da_licitacao.unidade_gestora.blank?
			unidade_gestora = Loa::UnidadeGestora.find(@relatorio_da_licitacao.unidade_gestora.to_i)
			unidades_orcamentarias = unidade_gestora.unidades_orcamentarias
			cod_orgaos = unidades_orcamentarias.joins(:orgao).pluck('loa_orgaos.codigo')
			cod_unidades_orcamentarias = unidades_orcamentarias.pluck(:codigo)
			unidades_gestoras_ids = Loa::UnidadeOrcamentaria.joins(:orgao).where(loa_orgaos: {codigo: cod_orgaos}, loa_unidades_orcamentarias: {codigo: cod_unidades_orcamentarias}).pluck(:unidade_gestora_id)
			
			if unidades_orcamentarias.blank?
				unidades_orcamentarias = orcamento.unidades_orcamentarias.joins(:unidades_orcamentaria_vinculada).where(loa_unidades_orcamentaria_vinculada: {unidade_orcamentaria_vinculada_id: id_unidades_orcamentarias}).pluck(:unidade_gestora_id)
			end
		end

		clausula_unidade_gestora = {loa_unidades_gestoras: {id: unidades_gestoras_ids}} unless @relatorio_da_licitacao.unidade_gestora.blank?
		joins_unidade_gestora = {unidade_orcamentaria_do_exercicio: :unidade_gestora}

		contratos = Licitacao::Contrato.where.not(status: :rescindido).left_outer_joins(:aditivos).where("(licitacao_aditivos.modalidade = '2' AND licitacao_aditivos.fim_da_vigencia IS NOT NULL AND licitacao_aditivos.fim_da_vigencia >= ? AND licitacao_aditivos.fim_da_vigencia <= ?) OR (licitacao_aditivos.id IS NULL and licitacao_contratos.fim_da_vigencia >= ? and licitacao_contratos.fim_da_vigencia <= ?)", @data_inicial, @data_final, @data_inicial, @data_final).joins(:projeto).includes(joins_unidade_gestora).where(clausula_unidade_gestora).select{|f| !f.falta_preechimento_de_dados?}.uniq

	end
	
	def auxiliar_prorrogacao_contratual
		render_to_string pdf: "auxiliar_prorrogacao_contratual",
			template: "licitacao/relatorios_da_licitacao/relatorio_auxiliar_prorrogacao_contratual.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Relatorio Auxiliar na Prorragação Contratual",
						titulo2: "Unidade Gestora: #{@unidade_gestora}",
						titulo3: "Período: #{@data_inicial} a #{@data_final} / Data da Emissão: #{Date.today}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_agentes_de_participacao_dos_contratos relatorio_da_licitacao
		filtros = @relatorio_da_licitacao
		data_inicial = @relatorio_da_licitacao.data_inicial.to_date
		joins_fornecedor = {contratado: [pessoa_do_projeto: :pessoa]} if !@relatorio_da_licitacao.fornecedor.blank?
		clausula_fornecedor = {base_pessoas: {id: @relatorio_da_licitacao.fornecedor}} if !@relatorio_da_licitacao.fornecedor.blank?
		joins_unidade_gestora = {unidade_orcamentaria_do_exercicio: :unidade_gestora} if !@relatorio_da_licitacao.unidade_gestora.blank?
		clausula_unidade_gestora = {loa_unidades_gestoras: {id: @relatorio_da_licitacao.unidade_gestora}} if !@relatorio_da_licitacao.unidade_gestora.blank?
		
		@contratos_filtrados = Licitacao::Contrato.joins(:gestores_do_contrato)
			.where("(licitacao_contratos.inicio_da_vigencia IS NOT NULL AND licitacao_contratos.inicio_da_vigencia <= ? AND licitacao_contratos.fim_da_vigencia >= ?)", data_inicial, data_inicial)
			.includes(joins_fornecedor).where(clausula_fornecedor)
			.includes(joins_unidade_gestora).where(clausula_unidade_gestora) 
	end



	def relacao_agentes_de_participacao_dos_contratos
		render_to_string pdf: "relacao_agentes_de_participacao_dos_contratos",
			template: "licitacao/relatorios_da_licitacao/relacao_agentes_de_participacao_dos_contratos.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Relação Agentes de Participação dos Contratos",
						titulo2: "Exercício de: #{contexto_atual.exercicio}",
						titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} / Data da Emissão: #{Date.today}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_saldo_da_ata_por_unidade relatorio_da_licitacao
		filtros = relatorio_da_licitacao

		data_inicial = relatorio_da_licitacao.data_inicial.blank? ? "01/01/#{exercicio_atual}".to_date : relatorio_da_licitacao.data_inicial.to_date
		data_final = relatorio_da_licitacao.data_final.to_date
		clausula_processo = {licitacao_projetos: {numero_do_processo: relatorio_da_licitacao.numero_do_processo}} if !relatorio_da_licitacao.numero_do_processo.blank?
		clausula_fornecedor = {base_pessoas: {id: relatorio_da_licitacao.fornecedor}} if !relatorio_da_licitacao.fornecedor.blank?
		joins_fornecedor = {processo: [contratos: [contratado: [pessoa_do_projeto: :pessoa]]]} if !relatorio_da_licitacao.fornecedor.blank?
		clausula_unidade_gestora = {loa_unidades_gestoras: {id: @relatorio_da_licitacao.unidade_gestora}} if !relatorio_da_licitacao.unidade_gestora.blank?
		joins_unidade_gestora = {processo: [contratos: [unidade_orcamentaria_do_exercicio: :unidade_gestora]]} if !relatorio_da_licitacao.unidade_gestora.blank?


		@atas = Licitacao::AtaDeRegistroDePrecos.where('licitacao_atas_de_registro_de_precos.data_inicio_de_vigencia >= ? AND licitacao_atas_de_registro_de_precos.data_final_de_vigencia <= ?', data_inicial, data_final).joins(:processo).where(clausula_processo).includes(joins_fornecedor).where(clausula_fornecedor).includes(joins_unidade_gestora).where(clausula_unidade_gestora).order(:data_inicio_de_vigencia).all
	end

	def saldo_da_ata_por_unidade
		render_to_string pdf: "saldo_da_ata_por_unidade",
			template: "licitacao/relatorios_da_licitacao/saldo_da_ata_por_unidade.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Saldo da Ata por Unidade",
						titulo2: "Exercício de: #{contexto_atual.exercicio}",
						titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} a #{@relatorio_da_licitacao.data_final}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_atas_por_vigencia relatorio_da_licitacao
		filtros = @relatorio_da_licitacao
		data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/01/#{exercicio_atual}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		data_final = @relatorio_da_licitacao.data_final.to_date
		clausula_processo = {licitacao_projetos: {numero_do_processo: @relatorio_da_licitacao.numero_do_processo}} if !@relatorio_da_licitacao.numero_do_processo.blank?
		clausula_fornecedor = {base_pessoas: {id: @relatorio_da_licitacao.fornecedor}} if !@relatorio_da_licitacao.fornecedor.blank?
		joins_fornecedor = {processo: [contratos: [contratado: [pessoa_do_projeto: :pessoa]]]} if !@relatorio_da_licitacao.fornecedor.blank?

		if !@relatorio_da_licitacao.unidade_gestora.blank?
			unidade_gestora = Loa::UnidadeGestora.find(@relatorio_da_licitacao.unidade_gestora.to_i)
			unidades_orcamentarias = unidade_gestora.unidades_orcamentarias
			cod_orgaos = unidades_orcamentarias.joins(:orgao).pluck('loa_orgaos.codigo')
			cod_unidades_orcamentarias = unidades_orcamentarias.pluck(:codigo)
			unidades_gestoras_ids = Loa::UnidadeOrcamentaria.joins(:orgao).where(loa_orgaos: {codigo: cod_orgaos}, loa_unidades_orcamentarias: {codigo: cod_unidades_orcamentarias}).pluck(:unidade_gestora_id)
		end

		clausula_unidade_gestora = {loa_unidades_gestoras: {id: unidades_gestoras_ids}} if !@relatorio_da_licitacao.unidade_gestora.blank?
		joins_unidade_gestora = {unidades_orcamentarias_da_ata: [unidade_orcamentaria: :unidade_gestora]}
		
		if @relatorio_da_licitacao.ata_inicio_de_vigencia == '0'
			@atas = Licitacao::AtaDeRegistroDePrecos.where(status: :confirmado).where('licitacao_atas_de_registro_de_precos.data_final_de_vigencia >= ? AND licitacao_atas_de_registro_de_precos.data_final_de_vigencia <= ?', data_inicial, data_final).joins(:processo).where(clausula_processo).includes(joins_fornecedor).where(clausula_fornecedor).includes(joins_unidade_gestora).where(clausula_unidade_gestora).order(:data_inicio_de_vigencia).all
		else
			@atas = Licitacao::AtaDeRegistroDePrecos.where(status: :confirmado).where('licitacao_atas_de_registro_de_precos.data_inicio_de_vigencia >= ? AND licitacao_atas_de_registro_de_precos.data_inicio_de_vigencia <= ?', data_inicial, data_final).joins(:processo).where(clausula_processo).includes(joins_fornecedor).where(clausula_fornecedor).includes(joins_unidade_gestora).where(clausula_unidade_gestora).order(:data_inicio_de_vigencia).all
		end
	end

	def relacao_atas_por_vigencia
		render_to_string pdf: "relacao_atas_por_vigencia",
			template: "licitacao/relatorios_da_licitacao/relacao_atas_por_vigencia.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Relação de Atas por Vigência",
						titulo2: "Exercício de: #{contexto_atual.exercicio}",
						titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} a #{@relatorio_da_licitacao.data_final} / Data da Emissão: #{Date.today}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_fracionamento_dispensa_ii relatorio_da_licitacao
		filtros = @relatorio_da_licitacao
		exercicio = contexto_atual.exercicio

		data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/01/#{exercicio}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		data_final = @relatorio_da_licitacao.data_final.to_date
		clausula_processo = {licitacao_projetos: {numero_do_processo: @relatorio_da_licitacao.numero_do_processo}} if !@relatorio_da_licitacao.numero_do_processo.blank?
		clausula_fornecedor = {base_pessoas: {id: @relatorio_da_licitacao.fornecedor}} if !@relatorio_da_licitacao.fornecedor.blank?
		joins_fornecedor = {projeto: [lotes: [ganhador: :pessoa]]} if !@relatorio_da_licitacao.fornecedor.blank?
		clausula_unidade_gestora = {loa_unidades_gestoras: {id: @relatorio_da_licitacao.unidade_gestora}} if !@relatorio_da_licitacao.unidade_gestora.blank?
		joins_unidade_gestora = {projeto: [pedido: [unidades_orcamentarias_por_pedido: [unidade_orcamentaria: :unidade_gestora]]]}
		dotacoes_por_projetos = Licitacao::OrcamentoDaDespesaPorProjeto.joins(projeto: :legislacao).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:dispensa_de_licitacao], status: Licitacao::Projeto.status[:homologado]}).where(base_legislacoes: {fixo: true, tipo_de_artigo: Base::Legislacao.tipo_de_artigos[:art24_ii]}).where("licitacao_projetos.data_do_projeto BETWEEN ? AND ?", data_inicial, data_final).where(clausula_processo).includes(joins_fornecedor).where(clausula_fornecedor).includes(joins_unidade_gestora).where(clausula_unidade_gestora).order(:data_do_projeto).all
	end

	def fracionamento_dispensa_ii
		render_to_string pdf: "fracionamento_dispensa_ii",
			template: "licitacao/relatorios_da_licitacao/fracionamento_dispensa_ii.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Controle de Fracionamento Dispensa de Licitações - Art. 24 INC II",
						titulo2: "Exercício de: #{contexto_atual.exercicio}",
						titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} a #{@relatorio_da_licitacao.data_final}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_fracionamento_dispensa_i relatorio_da_licitacao
		filtros = relatorio_da_licitacao
		exercicio = contexto_atual.exercicio

		data_inicial = relatorio_da_licitacao.data_inicial.blank? ? "01/01/#{exercicio}".to_date : relatorio_da_licitacao.data_inicial.to_date
		data_final = relatorio_da_licitacao.data_final.to_date
		clausula_processo = {licitacao_projetos: {numero_do_processo: relatorio_da_licitacao.numero_do_processo}} if !relatorio_da_licitacao.numero_do_processo.blank?
		clausula_fornecedor = {base_pessoas: {id: relatorio_da_licitacao.fornecedor}} if !relatorio_da_licitacao.fornecedor.blank?
		joins_fornecedor = {projeto: [lotes: [ganhador: :pessoa]]} if !@relatorio_da_licitacao.fornecedor.blank?
		clausula_unidade_gestora = {loa_unidades_gestoras: {id: relatorio_da_licitacao.unidade_gestora}} if !relatorio_da_licitacao.unidade_gestora.blank?
		joins_unidade_gestora = {projeto: [pedido: [unidades_orcamentarias_por_pedido: [unidade_orcamentaria: :unidade_gestora]]]}

		@dotacoes_por_projetos = Licitacao::OrcamentoDaDespesaPorProjeto.joins(projeto: :legislacao).where(licitacao_projetos: {modalidade_do_processo: Licitacao::Projeto.modalidades_do_processo[:dispensa_de_licitacao], status: Licitacao::Projeto.status[:homologado]}).where(base_legislacoes: {fixo: true, tipo_de_artigo: Base::Legislacao.tipo_de_artigos[:art24_i]}).where("licitacao_projetos.data_do_projeto BETWEEN ? AND  ?", data_inicial, data_final).where(clausula_processo).includes(joins_fornecedor).where(clausula_fornecedor).includes(joins_unidade_gestora).where(clausula_unidade_gestora).order(:data_do_projeto).all
	end

	def fracionamento_dispensa_i
		render_to_string pdf: "fracionamento_dispensa_i",
			template: "licitacao/relatorios_da_licitacao/fracionamento_dispensa_i.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Controle de Fracionamento Dispensa de Licitações - Art. 24 INC I",
						titulo2: "Exercício de: #{contexto_atual.exercicio}",
						titulo3: "Período: #{@relatorio_da_licitacao.data_inicial} a #{@relatorio_da_licitacao.data_final}"
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_aditivos_solicitados
		ransack_params = {}
		ransack_params["contrato_unidade_orcamentaria_do_exercicio_unidade_gestora_id_eq"] = @relatorio_da_licitacao.unidade_gestora
		@aditivos = Licitacao::Aditivo.where(status: :solicitado).ransack(ransack_params).result.order(:data_de_solicitacao)
	end

	def relacao_aditivos_solicitados
		unidade = @relatorio_da_licitacao.unidade_gestora.present? ? Loa::UnidadeGestora.find(@relatorio_da_licitacao.unidade_gestora).try(:nome) : "Consolidado"
		render_to_string pdf: "relacao_aditivos_solicitados",
		template: "licitacao/relatorios_da_licitacao/relacao_aditivos_solicitados.pdf.slim",
		orientation: 'Portrait',
		disable_smart_shrinking: true,

		dpi: '96',
		header: {
			html: {
				template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
				locals: {
					titulo1: "Relação de Aditivos Solicitados",
					titulo2: "#{unidade}",
					titulo3: "Data de Emissão: #{Date.today}"

				}
			},
			spacing: 5
		},
		margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_fornecedores_vigentes(relatorio_da_licitacao)
		filtros = @relatorio_da_licitacao
		data_da_busca = @relatorio_da_licitacao.data_da_busca.to_date
		joins_unidade_gestora = {unidade_orcamentaria_do_exercicio: :unidade_gestora} if !@relatorio_da_licitacao.unidade_gestora.blank?
		clausula_unidade_gestora = {loa_unidades_gestoras: {id: @relatorio_da_licitacao.unidade_gestora}} if !@relatorio_da_licitacao.unidade_gestora.blank?
		
		aditivo_confirmado = Licitacao::Aditivo.status[:confirmado]
		modalidade_por_prazo = Licitacao::Aditivo.modalidades[:por_prazo]

		sql_busca_das_vigencias = "
			(licitacao_aditivos.fim_da_vigencia is not null
			AND licitacao_aditivos.status = ?
				AND(
					(SELECT
						MAX(fim_da_vigencia)
					FROM
						licitacao_aditivos
					WHERE
						licitacao_aditivos.fim_da_vigencia is not null
						AND licitacao_aditivos.status = ?
						AND contrato_id = licitacao_contratos.id AND fim_da_vigencia IS NOT NULL
					) >= ?)
			)OR(
				licitacao_contratos.fim_da_vigencia IS NOT NULL
				AND (licitacao_aditivos.id IS NULL OR (licitacao_aditivos.status = ? AND NOT licitacao_aditivos.modalidade = ?))
				AND licitacao_contratos.fim_da_vigencia >= ?
			)"

		contratos = Licitacao::Contrato.where.not(status: :rescindido).left_outer_joins(:aditivos)
			.where(sql_busca_das_vigencias, aditivo_confirmado, aditivo_confirmado, data_da_busca, aditivo_confirmado, modalidade_por_prazo, data_da_busca)
			.includes(joins_unidade_gestora).where(clausula_unidade_gestora).uniq

		@fornecedores_filtrados = contratos.map do |contrato|
			contrato.contratado.pessoa_do_projeto.pessoa if contrato.contratado && contrato.contratado.pessoa_do_projeto
		end.compact.uniq
	end

	def relacao_de_fornecedores_vigentes
		render_to_string pdf: "relacao_agentes_de_participacao_dos_contratos",
			template: "licitacao/relatorios_da_licitacao/relacao_de_fornecedores_vigentes.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Relação de Fornecedores da Secretaria de #{Loa::UnidadeGestora.find(@relatorio_da_licitacao.unidade_gestora).nome}",
						titulo2: "Data: #{@relatorio_da_licitacao.data_da_busca}",
						titulo3: ""
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_resumo_do_plano relatorio_da_licitacao
		@data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		@data_final = @relatorio_da_licitacao.data_final.blank? ? Date.today.at_end_of_month : @relatorio_da_licitacao.data_final.to_date
		ransack_params = {}
		ransack_params["data_de_previsao_da_contratacao_gteq"] = @data_inicial.to_date if @relatorio_da_licitacao.data_inicial.present?
		ransack_params["data_de_previsao_da_contratacao_lteq"] = @data_final.to_date if @relatorio_da_licitacao.data_final.present?
		if @relatorio_da_licitacao.unidade_orcamentaria.present? && @relatorio_da_licitacao.unidade_orcamentaria != "consolidado"
			ransack_params["unidade_orcamentaria_id_eq"] = @relatorio_da_licitacao.unidade_orcamentaria
		end
		ransack_params["categoria_de_despesa_eq"] = @relatorio_da_licitacao.categoria_da_despesa if @relatorio_da_licitacao.categoria_da_despesa.present?
		ransack_params["tipo_de_contratacao_eq"] = @relatorio_da_licitacao.tipo_de_contratacao if @relatorio_da_licitacao.tipo_de_contratacao.present?
		ransack_params["prioridade_eq"] = @relatorio_da_licitacao.prioridade if @relatorio_da_licitacao.prioridade.present?
		ransack_params["status_eq"] = @relatorio_da_licitacao.status if @relatorio_da_licitacao.status.present?
		ransack_params["forma_de_contratacao_modalidade_eq"] = @relatorio_da_licitacao.modalidade_do_processo if @relatorio_da_licitacao.modalidade_do_processo.present?
		ransack_params["status_eq"] = 2 if @relatorio_da_licitacao.acoes_fechadas.to_i == 1
		ransack_params["subacoes_elementos_de_despesa_por_subacao_elemento_de_despesa_id_eq"] = @relatorio_da_licitacao.elemento_de_despesa.to_i if @relatorio_da_licitacao.elemento_de_despesa.present?

		acoes = Pca::Acao.ransack(ransack_params)

		@acoes = acoes.result(distinct: false)
	end

	def resumo_do_plano
		if @relatorio_da_licitacao.unidade_orcamentaria.present? && @relatorio_da_licitacao.unidade_orcamentaria != "consolidado"
			unidade = Loa::UnidadeOrcamentaria.find(@relatorio_da_licitacao.unidade_orcamentaria).try(:nome)
		else
			unidade = @relatorio_da_licitacao.unidade_orcamentaria == "consolidado" ? "Consolidado" : "Todas as Unidades"
		end
		render_to_string pdf: "resumo_do_plano",
			template: "licitacao/relatorios_da_licitacao/resumo_do_plano.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Resumo do Plano",
						titulo2: "#{unidade}",
						titulo3: "de #{@data_inicial} até #{@data_final}",
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas(top: 25)
	end

	def pesquisa_plano_em_detalhes relatorio_da_licitacao
		@data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		@data_final = @relatorio_da_licitacao.data_final.blank? ? Date.today.at_end_of_month : @relatorio_da_licitacao.data_final.to_date
		ransack_params = {}
		ransack_params["data_de_previsao_da_contratacao_gteq"] = @data_inicial if @relatorio_da_licitacao.data_inicial.present?
		ransack_params["data_de_previsao_da_contratacao_lteq"] = @data_final if @relatorio_da_licitacao.data_final.present?
		ransack_params["unidade_orcamentaria_id_eq"] = @relatorio_da_licitacao.unidade_orcamentaria if @relatorio_da_licitacao.unidade_orcamentaria.present?
		ransack_params["categoria_de_despesa_eq"] = @relatorio_da_licitacao.categoria_da_despesa if @relatorio_da_licitacao.categoria_da_despesa.present?
		ransack_params["tipo_de_contratacao_eq"] = @relatorio_da_licitacao.tipo_de_contratacao if @relatorio_da_licitacao.tipo_de_contratacao.present?
		ransack_params["prioridade_eq"] = @relatorio_da_licitacao.prioridade if @relatorio_da_licitacao.prioridade.present?
		ransack_params["status_eq"] = @relatorio_da_licitacao.status if @relatorio_da_licitacao.status.present?
		ransack_params["forma_de_contratacao_modalidade_eq"] = @relatorio_da_licitacao.modalidade_do_processo if @relatorio_da_licitacao.modalidade_do_processo.present?
		ransack_params["status_eq"] = 2 if @relatorio_da_licitacao.acoes_fechadas.to_i == 1
		ransack_params["subacoes_elementos_de_despesa_por_subacao_elemento_de_despesa_id_eq"] = @relatorio_da_licitacao.elemento_de_despesa.to_i if @relatorio_da_licitacao.elemento_de_despesa.present?

		acoes = Pca::Acao.ransack(ransack_params)
		@acoes = acoes.result(distinct: false)
	end

	def plano_em_detalhes
		unidade = @relatorio_da_licitacao.unidade_orcamentaria.present? ? Loa::UnidadeOrcamentaria.find(@relatorio_da_licitacao.unidade_orcamentaria).try(:nome) : "Consolidado"
		render_to_string pdf: "plano_em_detalhes",
			template: "licitacao/relatorios_da_licitacao/plano_em_detalhes.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Plano em Detalhes",
						titulo2: "#{unidade}",
						titulo3: "de #{@data_inicial} até #{@data_final}",
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_pca_grandes_numeros relatorio_da_licitacao
		
		ransack_params = {}
		ransack_params["unidade_orcamentaria_id_eq"] = @relatorio_da_licitacao.unidade_orcamentaria if @relatorio_da_licitacao.unidade_orcamentaria.present?
		ransack_params["status_eq"] = 2 if @relatorio_da_licitacao.acoes_fechadas.to_i == 1
		ransack_params["subacoes_elementos_de_despesa_por_subacao_elemento_de_despesa_id_eq"] = @relatorio_da_licitacao.elemento_de_despesa.to_i if @relatorio_da_licitacao.elemento_de_despesa.present?
		ransack_params["data_de_previsao_da_contratacao_gteq"] = @relatorio_da_licitacao.data_inicial if @relatorio_da_licitacao.data_inicial.present?
		ransack_params["data_de_previsao_da_contratacao_lteq"] = @relatorio_da_licitacao.data_final if @relatorio_da_licitacao.data_final.present?

		acoes = Pca::Acao.ransack(ransack_params)
		@acoes = acoes.result(distinct: false)
	end

	def pca_grandes_numeros
		unidade = @relatorio_da_licitacao.unidade_orcamentaria.present? ? Loa::UnidadeOrcamentaria.find(@relatorio_da_licitacao.unidade_orcamentaria).try(:nome) : "Consolidado"
		render_to_string pdf: "pca_em_grandes_numeros",
			template: "licitacao/relatorios_da_licitacao/pca_em_grandes_numeros.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "PCA em Grandes Números",
						titulo2: "#{unidade}",
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_valores_estimados relatorio_da_licitacao
		
		ransack_params = {}
		if @relatorio_da_licitacao.unidade_orcamentaria.present? && @relatorio_da_licitacao.unidade_orcamentaria != "consolidado"
			ransack_params["acao_unidade_orcamentaria_id_eq"] = @relatorio_da_licitacao.unidade_orcamentaria if @relatorio_da_licitacao.unidade_orcamentaria.present?
		end
		ransack_params["acao_status_eq"] = 2 if @relatorio_da_licitacao.acoes_fechadas.to_i == 1
		ransack_params["sub_elemento_de_despesa_elemento_de_despesa_id_eq"] = @relatorio_da_licitacao.elemento_de_despesa.to_i if @relatorio_da_licitacao.elemento_de_despesa.present?
		ransack_params["data_de_previsao_da_contratacao_gteq"] = @relatorio_da_licitacao.data_inicial if @relatorio_da_licitacao.data_inicial.present?
		ransack_params["data_de_previsao_da_contratacao_lteq"] = @relatorio_da_licitacao.data_final if @relatorio_da_licitacao.data_final.present?

		orcamentos_da_despesa_por_acao = Pca::OrcamentoDaDespesaPorAcao.all.ransack(ransack_params)
		@orcamentos_da_despesa_por_acao = orcamentos_da_despesa_por_acao.result(distinct: false)
	end

	def valores_estimados
		if @relatorio_da_licitacao.unidade_orcamentaria.present? && @relatorio_da_licitacao.unidade_orcamentaria != "consolidado"
			unidade = Loa::UnidadeOrcamentaria.find(@relatorio_da_licitacao.unidade_orcamentaria).try(:nome)
		else
			unidade = @relatorio_da_licitacao.unidade_orcamentaria == "consolidado" ? "Consolidado" : "Todas as Unidades"
		end
		render_to_string pdf: "valores_estimados",
			template: "licitacao/relatorios_da_licitacao/valores_estimados.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Valores Estimados",
						titulo2: "#{unidade}",
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas(top: 15)
	end

	def pesquisa_documento_de_intencao_de_demanda relatorio_da_licitacao
		
		ransack_params = {}
		ransack_params["acao_unidade_orcamentaria_id_eq"] = @relatorio_da_licitacao.unidade_orcamentaria.to_i if @relatorio_da_licitacao.unidade_orcamentaria.present?
		ransack_params["acao_status_eq"] = 2 if @relatorio_da_licitacao.acoes_fechadas.to_i == 1
		ransack_params["sub_elemento_de_despesa_elemento_de_despesa_id_eq"] = @relatorio_da_licitacao.elemento_de_despesa.to_i if @relatorio_da_licitacao.elemento_de_despesa.present?
		ransack_params["data_de_previsao_da_contratacao_gteq"] = @relatorio_da_licitacao.data_inicial if @relatorio_da_licitacao.data_inicial.present?
		ransack_params["data_de_previsao_da_contratacao_lteq"] = @relatorio_da_licitacao.data_final if @relatorio_da_licitacao.data_final.present?

		orcamentos_da_despesa_por_acao = Pca::OrcamentoDaDespesaPorAcao.ransack(ransack_params)
		@orcamentos_da_despesa_por_acao = orcamentos_da_despesa_por_acao.result(distinct: false)
	end

	def documento_de_intencao_de_demanda
		unidade = @relatorio_da_licitacao.unidade_orcamentaria.present? ? Loa::UnidadeOrcamentaria.find(@relatorio_da_licitacao.unidade_orcamentaria).try(:nome) : "Consolidado"
		render_to_string pdf: "documento_de_intencao_de_demanda",
			template: "licitacao/relatorios_da_licitacao/documento_de_intencao_de_demanda.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Documento de Intenção de Demanda - DID",
						titulo2: "#{unidade}",
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_relacao_de_dfd_e_did relatorio_da_licitacao
		
		ransack_params = {}
		ransack_params["unidade_orcamentaria_id_eq"] = @relatorio_da_licitacao.unidade_orcamentaria.to_i if @relatorio_da_licitacao.unidade_orcamentaria.present?
		ransack_params["status_eq"] = 2 if @relatorio_da_licitacao.acoes_fechadas.to_i == 1
		ransack_params["subacoes_elementos_de_despesa_por_subacao_elemento_de_despesa_id_eq"] = @relatorio_da_licitacao.elemento_de_despesa.to_i if @relatorio_da_licitacao.elemento_de_despesa.present?
		ransack_params["data_de_previsao_da_contratacao_gteq"] = @relatorio_da_licitacao.data_inicial if @relatorio_da_licitacao.data_inicial.present?
		ransack_params["data_de_previsao_da_contratacao_lteq"] = @relatorio_da_licitacao.data_final if @relatorio_da_licitacao.data_final.present?
		
		acoes = Pca::Acao.all.ransack(ransack_params).result
		@acoes = acoes
		arquivo = CombinePDF.new
		@acoes.uniq.sort_by{ |acao| acao.data_de_previsao_da_contratacao }.each do |acao|
			@acao = acao
			if @relatorio_da_licitacao.relatorio === "relacao_de_dfd"
				arquivo << CombinePDF.parse(relacao_de_dfd)
			else
				arquivo << CombinePDF.parse(relacao_de_did)
			end
		end

		send_data arquivo.to_pdf, filename: "relacao_de_demandas.pdf", type: "application/pdf", disposition: 'inline'
	end

	def relacao_de_dfd
		@unidade_orcamentaria = @acao.unidade_orcamentaria

		if @configuracoes.customizacao.exibir_nome_orgao?
			titulo1 = @acao.unidade_orcamentaria.try(:unidade_gestora).try(:nome)
		else
			titulo1 = ''
		end

		if @configuracoes.customizacao.exibir_numero_pedido?
			titulo2 = "AÇÃO N°: #{@acao.try(:numero)}"
		else
			titulo2 = ''
		end

		render_to_string pdf: "acao",
			template: "pca/relatorios/acoes/acao.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: titulo1,
						titulo2: titulo2
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas
	end

	def relacao_de_did
		@unidade_orcamentaria = @acao.unidade_orcamentaria

		if @configuracoes.customizacao.exibir_nome_orgao?
			titulo1 = @acao.unidade_orcamentaria.try(:unidade_gestora).try(:nome)
		else
			titulo1 = ''
		end

		if @configuracoes.customizacao.exibir_numero_pedido?
			titulo2 = "AÇÃO N°: #{@acao.try(:numero)}"
		else
			titulo2 = ''
		end

		render_to_string pdf: "acao",
			template: "pca/relatorios/acoes/acao.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: titulo1,
						titulo2: titulo2
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas
	end

	def pesquisa_valores_estimados_por_prefeitura relatorio_da_licitacao
		@data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		@data_final = @relatorio_da_licitacao.data_final.blank? ? Date.today.at_end_of_month : @relatorio_da_licitacao.data_final.to_date
		ransack_params = {}
		if @relatorio_da_licitacao.unidade_orcamentaria.present? && @relatorio_da_licitacao.unidade_orcamentaria != "consolidado"
			ransack_params["acao_unidade_orcamentaria_id_eq"] = @relatorio_da_licitacao.unidade_orcamentaria if @relatorio_da_licitacao.unidade_orcamentaria.present?
		end
		ransack_params["acao_status_eq"] = 2 if @relatorio_da_licitacao.acoes_fechadas.to_i == 1
		ransack_params["sub_elemento_de_despesa_elemento_de_despesa_id_eq"] = @relatorio_da_licitacao.elemento_de_despesa.to_i if @relatorio_da_licitacao.elemento_de_despesa.present?
		ransack_params["data_de_previsao_da_contratacao_gteq"] = @data_inicial if @relatorio_da_licitacao.data_inicial.present?
		ransack_params["data_de_previsao_da_contratacao_lteq"] = @data_final if @relatorio_da_licitacao.data_final.present?
		
		orcamentos_da_despesa_por_acao = Pca::OrcamentoDaDespesaPorAcao.all.ransack(ransack_params)
		@orcamentos_da_despesa_por_acao = orcamentos_da_despesa_por_acao.result(distinct: false)
	end

	def valores_estimados_por_prefeitura
		if @relatorio_da_licitacao.unidade_orcamentaria.present? && @relatorio_da_licitacao.unidade_orcamentaria != "consolidado"
			unidade = Loa::UnidadeOrcamentaria.find(@relatorio_da_licitacao.unidade_orcamentaria).try(:nome)
		else
			unidade = @relatorio_da_licitacao.unidade_orcamentaria == "consolidado" ? "Consolidado" : "Todas as Unidades"
		end
		render_to_string pdf: "valores_estimados_por_prefeitura",
			template: "licitacao/relatorios_da_licitacao/valores_estimados_por_prefeitura.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Valores Estimados",
						titulo2: "#{unidade}",
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas(top: 15)

	end


	def pesquisa_calendario_das_contratacoes relatorio_da_licitacao
		@numero_de_dias = @relatorio_da_licitacao.numero_de_dias.to_i
		@data_inicial = @relatorio_da_licitacao.data_inicial.blank? ? "01/#{Date.today.month}/#{exercicio_atual}".to_date : @relatorio_da_licitacao.data_inicial.to_date
		@data_final = @relatorio_da_licitacao.data_final.blank? ? Date.today.at_end_of_month : @relatorio_da_licitacao.data_final.to_date
		ransack_params = {}
		ransack_params["data_de_previsao_da_contratacao_gteq"] = @data_inicial if @relatorio_da_licitacao.data_inicial.present?
		ransack_params["data_de_previsao_da_contratacao_lteq"] = @data_final if @relatorio_da_licitacao.data_final.present?
		ransack_params["unidade_orcamentaria_id_eq"] = @relatorio_da_licitacao.unidade_orcamentaria if @relatorio_da_licitacao.unidade_orcamentaria.present?
		ransack_params["categoria_de_despesa_eq"] = @relatorio_da_licitacao.categoria_da_despesa if @relatorio_da_licitacao.categoria_da_despesa.present?
		ransack_params["tipo_de_contratacao_eq"] = @relatorio_da_licitacao.tipo_de_contratacao if @relatorio_da_licitacao.tipo_de_contratacao.present?
		ransack_params["prioridade_eq"] = @relatorio_da_licitacao.prioridade if @relatorio_da_licitacao.prioridade.present?
		ransack_params["status_eq"] = @relatorio_da_licitacao.status if @relatorio_da_licitacao.status.present?
		ransack_params["forma_de_contratacao_modalidade_eq"] = @relatorio_da_licitacao.modalidade_do_processo if @relatorio_da_licitacao.modalidade_do_processo.present?
		ransack_params["status_eq"] = 2 if @relatorio_da_licitacao.acoes_fechadas.to_i == 1
		ransack_params["subacoes_elementos_de_despesa_por_subacao_elemento_de_despesa_id_eq"] = @relatorio_da_licitacao.elemento_de_despesa.to_i if @relatorio_da_licitacao.elemento_de_despesa.present?

		acoes = Pca::Acao.ransack(ransack_params)
		@acoes = acoes.result(distinct: false)
	end

	def calendario_das_contratacoes
		if @relatorio_da_licitacao.unidade_orcamentaria.present? && @relatorio_da_licitacao.unidade_orcamentaria != "consolidado"
			unidade = Loa::UnidadeOrcamentaria.find(@relatorio_da_licitacao.unidade_orcamentaria).try(:nome)
		else
			unidade = @relatorio_da_licitacao.unidade_orcamentaria == "consolidado" ? "Consolidado" : "Todas as Unidades"
		end
		
		render_to_string pdf: "calendario_das_contratacoes",
			template: "licitacao/relatorios_da_licitacao/calendario_das_contratacoes.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Calendário das Contratações",
						titulo2: "#{unidade}",
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas(top: 15)
	end	

	def pesquisa_relatorio_das_demandas_comuns(relatorio_da_licitacao)
		ransack_params = {}
	
		if relatorio_da_licitacao.unidade_orcamentaria.present? && relatorio_da_licitacao.unidade_orcamentaria != "consolidado"
			ransack_params["acao_unidade_orcamentaria_id_eq"] = relatorio_da_licitacao.unidade_orcamentaria
		end
	
		ransack_params['acao_data_de_previsao_da_contratacao_gteq'] = relatorio_da_licitacao.data_inicial if relatorio_da_licitacao.data_inicial.present?
		ransack_params['acao_data_de_previsao_da_contratacao_lteq'] = relatorio_da_licitacao.data_final if relatorio_da_licitacao.data_final.present?
		
		ransack_params["acao_tipo_de_contratacao_eq"] = relatorio_da_licitacao.tipo_de_contratacao.to_i if relatorio_da_licitacao.tipo_de_contratacao.present?
		ransack_params["acao_forma_de_contratacao_modalidade_eq"] = relatorio_da_licitacao.modalidade_do_processo.to_i if relatorio_da_licitacao.modalidade_do_processo.present?
		
		if relatorio_da_licitacao.elemento_de_despesa_codigo.present?
			elemento = Base::ElementoDeDespesa.find_by(codigo: relatorio_da_licitacao.elemento_de_despesa_codigo)
			ransack_params["sub_elemento_de_despesa_elemento_de_despesa_codigo_eq"] = elemento.codigo if elemento
		end
	
		ransack_params["sub_elemento_de_despesa_codigo_eq"] = relatorio_da_licitacao.sub_elemento_de_despesa_codigo if relatorio_da_licitacao.sub_elemento_de_despesa_codigo.present?
	
		acoes = Pca::Acao.ransack(ransack_params)
		@acoes = acoes.result(distinct: false).includes(:unidade_orcamentaria)
		
		orcamentos_da_despesa_por_acao_ransack = Pca::OrcamentoDaDespesaPorAcao.ransack(ransack_params)
		@orcamentos_da_despesa_por_acao = orcamentos_da_despesa_por_acao_ransack.result(distinct: false)
		
		sub_elementos_ids = @orcamentos_da_despesa_por_acao.pluck(:sub_elemento_de_despesa_id).uniq
	
		@elementos_de_despesa = if relatorio_da_licitacao.elemento_de_despesa_codigo.present?
			Base::ElementoDeDespesa.joins(sub_elementos_de_despesa: :orcamentos_da_despesa_por_acao)
														 .where(contabilidade_sub_elementos_de_despesa: { id: sub_elementos_ids })
														 .where(codigo: relatorio_da_licitacao.elemento_de_despesa_codigo)
														 .distinct
		else
			Base::ElementoDeDespesa.joins(sub_elementos_de_despesa: :orcamentos_da_despesa_por_acao)
														 .where(contabilidade_sub_elementos_de_despesa: { id: sub_elementos_ids })
														 .distinct
		end
		@elementos_de_despesa = @elementos_de_despesa.group_by(&:codigo)
		@sub_elementos_de_despesa = @orcamentos_da_despesa_por_acao.flat_map(&:sub_elemento_de_despesa).uniq.sort_by(&:codigo)
	end
	
	

	def relatorio_das_demandas_comuns
		if @relatorio_da_licitacao.unidade_orcamentaria.present? && @relatorio_da_licitacao.unidade_orcamentaria != "consolidado"
			unidade = Loa::UnidadeOrcamentaria.find(@relatorio_da_licitacao.unidade_orcamentaria).try(:nome)
		else
			unidade = @relatorio_da_licitacao.unidade_orcamentaria == "consolidado" ? "Consolidado" : "Todas as Unidades"
		end
		
		render_to_string pdf: "relatorio_das_demandas_comuns",
			template: "licitacao/relatorios_da_licitacao/relatorio_das_demandas_comuns.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_licitacao.html.slim',
					locals: {
						titulo1: "Relatório das Demandas Comuns",
						titulo2: "#{unidade}",
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas(top: 15)
	end

	private

	def disponibiliza_dependencias
		@configuracoes = Configuracao.last
	end

	def set_contexto
		@contexto = contexto_atual
	end

	def disponibiliza_dependencias_formulario
		if current_usuario.desenvolvedor?
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.order(:codigo, :nome)
			@unidades_gestoras = Loa::UnidadeGestora.all.order("loa_unidades_gestoras.codigo::integer")
		else
			@unidades_orcamentarias = current_usuario.unidades_orcamentarias.joins(:orgao).where('loa_orgaos.orcamento_id = ?', contexto_atual.id).order(:codigo, :nome).uniq
			@unidades_gestoras = current_usuario.unidades_gestoras.order("loa_unidades_gestoras.codigo::integer").uniq
		end
		@categorias_da_despesa = Pca::Acao.categoria_de_despesas.map{|k| [Pca::Acao.categoria_de_despesas_i18n[k[0]], k[1]]}
		@tipos_de_contratacao = Pca::Acao.tipo_de_contratacoes.map{|k| [Pca::Acao.tipo_de_contratacoes_i18n[k[0]], k[1]]}
		@prioridades = Pca::Acao.prioridades.map{|k| [Pca::Acao.prioridades_i18n[k[0]], k[1]]}
		@status = Pca::Acao.status.map{|k| [Pca::Acao.status_i18n[k[0]], k[1]]}
		@modalidades_do_processo = Pca::Acao.forma_de_contratacao_modalidades.map{|k| [Pca::Acao.forma_de_contratacao_modalidades_i18n[k[0]], k[1]]}
	end

	def tableless_relatorio_da_licitacao_params
		begin
			params.require(:tableless_relatorio_da_licitacao).permit(
				:relatorio, :button, :data_inicial, :data_final, :numero_do_processo, :numero_do_contrato, :unidade_gestora,
				:fornecedor, :tipo_de_contrato, :elemento_de_despesa_codigo, :elemento_de_despesa, :sub_elemento_de_despesa, :sub_elemento_de_despesa_codigo, :data_da_busca, :unidade_orcamentaria, :categoria_da_despesa, :tipo_de_contratacao, :prioridade, :status, :modalidade_do_processo,
				:acoes_fechadas, :numero_de_dias, :informacoes_aditivo, :ata_inicio_de_vigencia
			)
		rescue ActionController::ParameterMissing
			nil
		end
	end
end
