require 'csv'

class RelatorioDoPortalController < ApplicationController
	include ControllerConcern

	before_action :disponibiliza_dependencias

	def imprimir
		@relatorio_do_portal = Tableless::RelatorioDoPortal.new(relatorio: params[:relatorio])

		if(params[:button].eql?("pdf"))
			imprimir_em_pdf( @relatorio_do_portal )
		elsif(params[:button].eql?("planilha"))
			imprimir_planilha( @relatorio_do_portal )
		elsif(params[:button].eql?("txt"))
			imprimir_txt( @relatorio_do_portal )
		elsif(params[:button].eql?("csv"))
			imprimir_csv( @relatorio_do_portal )
		end
	end

	def imprimir_em_pdf(relatorio_do_portal)
		relatorio = relatorio_do_portal.relatorio
		if respond_to? relatorio.to_s, :private
			#pesquisas

			if relatorio.to_s.eql?("relatorio_das_licitacoes")
				@lista = pesquisa_relatorio_das_licitacoes

			elsif relatorio.to_s.eql?("relatorio_dos_contratos")
				@lista = pesquisa_relatorio_dos_contratos
			
			elsif relatorio.to_s.eql?("relatorio_das_receitas")
				@lista = pesquisa_relatorio_das_receitas

			elsif relatorio.to_s.eql?("relatorio_das_receitas_extra")
				@lista = pesquisa_relatorio_das_receitas_extra

			elsif relatorio.to_s.eql?("relatorio_das_despesas")
				@lista = pesquisa_relatorio_das_despesas
			
			elsif relatorio.to_s.eql?("relatorio_das_liquidacoes")
				@lista = pesquida_relatorio_das_liquidacoes

			elsif relatorio.to_s.eql?("relatorio_das_receitas_camara")
				@lista = pesquisa_relatorio_das_receitas_camara

			elsif relatorio.to_s.eql?("relatorio_de_restos_a_pagar")
				@lista = pesquisa_relatorio_de_restos_a_pagar

			elsif relatorio.to_s.eql?("relatorio_dos_pagamentos")
				@lista = pesquisa_relatorio_dos_pagamentos
			
			elsif relatorio.to_s.eql?("relatorio_dos_pagamentos_de_restos_a_pagar")
				@lista = pesquisa_relatorio_dos_pagamentos_de_restos_a_pagar

			elsif relatorio.to_s.eql?("relatorio_dos_repasses_do_duodecimo")
				@lista = pesquisa_relatorio_dos_repasses_do_duodecimo

			elsif relatorio.to_s.eql?("relatorio_das_obras")
				@lista = pesquisa_relatorio_das_obras

			elsif relatorio.to_s.eql?("relatorio_das_transferencias_e_convenios")
				@lista = pesquisa_relatorio_das_transferencias_e_copnvenios
			end

			arquivo = CombinePDF.new
			arquivo << CombinePDF.parse(send(relatorio))
			send_data arquivo.to_pdf, filename: "#{relatorio}.pdf", type: "application/pdf", disposition: 'inline'
		else
			redirect_to :back, alert: 'Erro ao imprimir arquivo'
		end
	end

	def imprimir_planilha(relatorio_do_portal)
		relatorio = relatorio_do_portal.relatorio
		request.format = "xlsx"
		@configuracao = Configuracao.last
		@inicio_busca = params[:data_inicio]
		@fim_busca = params[:data_fim]

		respond_to do |format|
			format.xlsx {
				if relatorio.to_s.eql?("relatorio_das_licitacoes")
					@lista = pesquisa_relatorio_das_licitacoes
					render xlsx: 'relatorio_das_licitacoes', template: 'relatorio_do_portal/relatorio_das_licitacoes', filename: 'relatorio_das_licitacoes.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_dos_contratos")
					@lista = pesquisa_relatorio_dos_contratos
					render xlsx: 'relatorio_dos_contratos', template: 'relatorio_do_portal/relatorio_dos_contratos', filename: 'relatorio_dos_contratos.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_das_receitas")
					@lista = pesquisa_relatorio_das_receitas
					render xlsx: 'relatorio_das_receitas', template: 'relatorio_do_portal/relatorio_das_receitas', filename: 'relatorio_das_receitas.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_das_receitas_extra")
					@lista = pesquisa_relatorio_das_receitas_extra
					render xlsx: 'relatorio_das_receitas_extra', template: 'relatorio_do_portal/relatorio_das_receitas_extra', filename: 'relatorio_das_receitas_extra.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_das_despesas")
					@lista = pesquisa_relatorio_das_despesas
					render xlsx: 'relatorio_das_despesas', template: 'relatorio_do_portal/relatorio_das_despesas', filename: 'relatorio_das_despesas.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_das_liquidacoes")
					@lista = pesquida_relatorio_das_liquidacoes
					render xlsx: 'relatorio_das_liquidacoes', template: 'relatorio_do_portal/relatorio_das_liquidacoes', filename: 'relatorio_das_liquidacoes.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_das_receitas_camara")
					@lista = pesquisa_relatorio_das_receitas_camara
					render xlsx: 'relatorio_das_receitas_camara', template: 'relatorio_do_portal/relatorio_das_receitas_camara', filename: 'relatorio_das_receitas_camara.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_de_restos_a_pagar")
					@lista = pesquisa_relatorio_de_restos_a_pagar
					render xlsx: 'relatorio_de_restos_a_pagar', template: 'relatorio_do_portal/relatorio_de_restos_a_pagar', filename: 'relatorio_de_restos_a_pagar.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_dos_pagamentos")
					@lista = pesquisa_relatorio_dos_pagamentos
					render xlsx: 'relatorio_dos_pagamentos', template: 'relatorio_do_portal/relatorio_dos_pagamentos', filename: 'relatorio_dos_pagamentos.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_dos_pagamentos_de_restos_a_pagar")
					@lista = pesquisa_relatorio_dos_pagamentos_de_restos_a_pagar
					render xlsx: 'relatorio_dos_pagamentos_de_restos_a_pagar', template: 'relatorio_do_portal/relatorio_dos_pagamentos_de_restos_a_pagar', filename: 'relatorio_dos_pagamentos_de_restos_a_pagar.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_dos_repasses_do_duodecimo")
					@lista = pesquisa_relatorio_dos_repasses_do_duodecimo
					render xlsx: 'repasses_do_duodecimo', template: 'relatorio_do_portal/repasses_do_duodecimo', filename: 'repasses_do_duodecimo.xlsx.axlsx'
				elsif relatorio.to_s.eql?("relatorio_das_obras")
					@lista = pesquisa_relatorio_das_obras
					render xlsx: 'relatorio_das_obras', template: 'relatorio_do_portal/relatorio_das_obras', filename: 'relatorio_das_obras.xlsx.axlsx'
				end 
			}
		end
	end

	def imprimir_txt(relatorio_do_portal)
		relatorio = relatorio_do_portal.relatorio
		request.format = "txt"
		@configuracao = Configuracao.last
		@inicio_busca = params[:data_inicio]
		@fim_busca = params[:data_fim]

		respond_to do |format|
			format.txt {
				if relatorio.to_s.eql?("relatorio_das_licitacoes")
					@lista = pesquisa_relatorio_das_licitacoes
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_licitacoes.txt"
					render template: "relatorio_do_portal/relatorio_das_licitacoes.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_dos_contratos")
					@lista = pesquisa_relatorio_dos_contratos
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_dos_contratos.txt"
					render template: "relatorio_do_portal/relatorio_dos_contratos.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_das_despesas")
					@lista = pesquisa_relatorio_das_despesas
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_despesas.txt"
					render template: "relatorio_do_portal/relatorio_das_despesas.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_das_liquidacoes")
					@lista = pesquida_relatorio_das_liquidacoes
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_liquidacoes.txt"
					render template: "relatorio_do_portal/relatorio_das_liquidacoes.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_das_receitas")
					@lista = pesquisa_relatorio_das_receitas
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_receitas.txt"
					render template: "relatorio_do_portal/relatorio_das_receitas.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_das_receitas_extra")
					@lista = pesquisa_relatorio_das_receitas_extra
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_receitas_extra.txt"
					render template: "relatorio_do_portal/relatorio_das_receitas_extra.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_das_receitas_camara")
					@lista = pesquisa_relatorio_das_receitas_camara
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_receitas_camara.txt"
					render template: "relatorio_do_portal/relatorio_das_receitas_camara.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_de_restos_a_pagar")
					@lista = pesquisa_relatorio_de_restos_a_pagar
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_de_restos_a_pagar.txt"
					render template: "relatorio_do_portal/relatorio_de_restos_a_pagar.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_dos_pagamentos")
					@lista = pesquisa_relatorio_dos_pagamentos
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_dos_pagamentos.txt"
					render template: "relatorio_do_portal/relatorio_dos_pagamentos.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_dos_pagamentos_de_restos_a_pagar")
					@lista = pesquisa_relatorio_dos_pagamentos_de_restos_a_pagar
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_dos_pagamentos_de_restos_a_pagar.txt"
					render template: "relatorio_do_portal/relatorio_dos_pagamentos_de_restos_a_pagar.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_dos_repasses_do_duodecimo")
					@lista = pesquisa_relatorio_dos_repasses_do_duodecimo
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=repasses_do_duodecimo.txt"
					render template: "relatorio_do_portal/repasses_do_duodecimo.txt.erb"
				elsif relatorio.to_s.eql?("relatorio_das_obras")
					@lista = pesquisa_relatorio_das_obras
					response.headers['Content-Type'] = 'text/txt'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_obras.txt"
					render template: "relatorio_do_portal/relatorio_das_obras.txt.erb"
				end 
			}
		end

	end

	def imprimir_csv(relatorio_do_portal)
		relatorio = relatorio_do_portal.relatorio
		request.format = "csv"
		@configuracao = Configuracao.last
		@inicio_busca = params[:data_inicio]
		@fim_busca = params[:data_fim]

		respond_to do |format|
			format.csv {
				if relatorio.to_s.eql?("relatorio_das_licitacoes")
					@lista = pesquisa_relatorio_das_licitacoes
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_licitacoes.csv"
					render template: "relatorio_do_portal/relatorio_das_licitacoes.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_dos_contratos")
					@lista = pesquisa_relatorio_dos_contratos
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_dos_contratos.csv"
					render template: "relatorio_do_portal/relatorio_dos_contratos.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_das_despesas")
					@lista = pesquisa_relatorio_das_despesas
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_despesas.csv"
					render template: "relatorio_do_portal/relatorio_das_despesas.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_das_liquidacoes")
					@lista = pesquida_relatorio_das_liquidacoes
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_liquidacoes.csv"
					render template: "relatorio_do_portal/relatorio_das_liquidacoes.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_das_receitas")
					@lista = pesquisa_relatorio_das_receitas
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_receitas.csv"
					render template: "relatorio_do_portal/relatorio_das_receitas.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_das_receitas_extra")
					@lista = pesquisa_relatorio_das_receitas_extra
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_receitas_extra.csv"
					render template: "relatorio_do_portal/relatorio_das_receitas_extra.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_das_receitas_camara")
					@lista = pesquisa_relatorio_das_receitas_camara
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_receitas_camara.csv"
					render template: "relatorio_do_portal/relatorio_das_receitas_camara.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_de_restos_a_pagar")
					@lista = pesquisa_relatorio_de_restos_a_pagar
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_despesas.csv"
					render template: "relatorio_do_portal/relatorio_de_restos_a_pagar.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_dos_pagamentos")
					@lista = pesquisa_relatorio_dos_pagamentos
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_dos_pagamentos.csv"
					render template: "relatorio_do_portal/relatorio_dos_pagamentos.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_dos_pagamentos_de_restos_a_pagar")
					@lista = pesquisa_relatorio_dos_pagamentos_de_restos_a_pagar
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_dos_pagamentos_de_restos_a_pagar.csv"
					render template: "relatorio_do_portal/relatorio_dos_pagamentos_de_restos_a_pagar.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_dos_repasses_do_duodecimo")
					@lista = pesquisa_relatorio_dos_repasses_do_duodecimo
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=repasses_do_duodecimo.csv"
					render template: "relatorio_do_portal/repasses_do_duodecimo.csv.erb"
				elsif relatorio.to_s.eql?("relatorio_das_obras")
					@lista = pesquisa_relatorio_das_obras
					response.headers['Content-Type'] = 'text/csv'
					response.headers['Content-Disposition'] = "attachment; filename=relatorio_das_obras.csv"
					render template: "relatorio_do_portal/relatorio_das_obras.csv.erb"
				end 
			}
		end
	end

	def pesquisa_relatorio_das_licitacoes
		processos_condicoes = "licitacao_projetos.status is not null "
		if params[:modalidade_do_processo].present?
			processos_condicoes << "AND licitacao_projetos.modalidade_do_processo = #{params[:modalidade_do_processo]} "
		end
		if params[:numero].present?
			processos_condicoes << "AND licitacao_projetos.numero_do_processo like '#{params[:numero]}' "
		end

		if params[:uo].present?
			@filtro_unidade = Loa::UnidadeOrcamentaria.find(params[:uo]).nome_e_exercicio
			@processos = Licitacao::Processo.vao_para_o_portal.joins(unidades_orcamentarias_por_pedido: :unidade_orcamentaria).where("loa_unidades_orcamentarias.id = ?", params[:uo]).distinct
		else
			@filtro_unidade = "CONSOLIDADO"
			@processos = Licitacao::Processo.vao_para_o_portal
		end

		if params[:objeto].present?
			@processos = @processos.joins(:pedidos).where("licitacao_pedidos.objeto like %?%", params[:objeto])
		end

		if params[:data_inicio].present? && params[:data_fim].present?
			@filtro_data = "Período #{params[:data_inicio]} a #{params[:data_fim]}"
			@processos = @processos.where(processos_condicoes).where('licitacao_projetos.data_inicial_do_processo >= ? AND licitacao_projetos.data_inicial_do_processo <= ?', params[:data_inicio].to_date, params[:data_fim].to_date)
		else
			@filtro_data = ""
			@processos = @processos.where(processos_condicoes)
		end
	end 

	def relatorio_das_licitacoes
		render_to_string pdf: "licitacoes",
			template: "relatorio_do_portal/licitacoes.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: @filtro_unidade,
						titulo2: "Licitações",
						titulo3: @filtro_data
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_dos_contratos

		@data_inicial = params[:data_inicio].present? ? params[:data_inicio].to_date : Date.today.beginning_of_month
		@data_final = params[:data_fim].present? ? params[:data_fim].to_date : Date.today.end_of_month

		ransack_params = Hash.new
		contratos_condicoes = "licitacao_contratos.status is not null "

		if params[:numero].present?
			ransack_params["numero_eq"] = params[:numero]
		end

		if params[:data_inicio].present?
			ransack_params["data_do_contrato_gteq"] = @data_inicial
		end

		if params[:data_fim].present?
			ransack_params["data_do_contrato_lteq"] = @data_final
		end

		if params[:valor_inicial].present?
			ransack_params["valor_gteq"] = params[:valor_inicial]
		end

		if params[:valor_final].present?
			ransack_params["valor_lteq"] = params[:valor_final]
		end

		if params[:objeto].present?
			ransack_params["objeto_cont"] = params[:objeto]
		end

		if params[:uo].present?
			ransack_params["unidade_orcamentaria_do_exercicio_id_eq"] = params[:uo]
			@filtro_unidade = Loa::UnidadeOrcamentaria.find(params[:uo]).nome_e_exercicio
		else
			@filtro_unidade = "CONSOLIDADO"
		end

		if params[:fornecedor].present?
			ransack_params["contratado_pessoa_do_projeto_pessoa_id_eq"] = params[:fornecedor]
		end

		if params[:modalidade_da_licitacao].present?
			ransack_params["projeto_modalidade_de_licitacao_eq"] = params[:modalidade_da_licitacao]
		end

		@poder = session[:tipo_de_ambiente] == "prefeitura" ? 1 : 0
		@orcamentos = Orcamento.all.order(exercicio: :desc)
		@orcamento = params[:orcamento].present? ? @orcamentos.find(params[:orcamento]) : @orcamentos.find_by(exercicio: Date.today.year)
		@pessoas = Base::Pessoa.joins(pessoas_dos_projetos: [contratados: :contrato]).distinct
		@unidades_orcamentarias = Loa::UnidadeOrcamentaria.joins(:tipo_de_unidade_administrativa).where('poder_associado = ?', @poder).order(id: :desc)
		configuracao_contrato_data = Configuracao.last.parametrizacoes_portal_da_transparencia.where(nome_do_acesso: 'contratos').last.data_de_inicio_da_pesquisa
		@q = Licitacao::Contrato.joins(unidade_orcamentaria_por_pedido: :unidade_orcamentaria)
			.where('loa_unidades_orcamentarias.id in (?)', @orcamento.unidades_orcamentarias.joins(:tipo_de_unidade_administrativa)
			.where(base_tipos_de_unidades_administrativas: {poder_associado: @poder}).pluck(:id))
			.vao_para_o_portal.where("data_do_contrato >= ?", configuracao_contrato_data).order(data_do_contrato: :desc).ransack(ransack_params)

		@contratos = @q.result(distinct: false)
	end  

	def relatorio_dos_contratos
		render_to_string pdf: "contratos",
			template: "relatorio_do_portal/contratos.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: "#{@filtro_unidade}",
						titulo2: "Contratos",
						titulo3: "Período #{@data_inicial} a #{@data_final}"
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_das_despesas
		@orcamento = Orcamento.find(params[:orcamento])
		@dt_inicial = params[:dt_inicial].present? ? params[:dt_inicial].to_date : ("01/01/" + @orcamento.exercicio.to_s).to_date 
		@dt_final = params[:dt_final].present? ? params[:dt_final].to_date : ("31/12/" + @orcamento.exercicio.to_s).to_date

		@empenhos = Contabilidade::Empenho.where('id in (?)', params[:despesas_ids]).order(:data_do_empenho, :numero_do_empenho)
	end


	def relatorio_das_despesas
		render_to_string pdf: "despesas",
			template: "relatorio_do_portal/despesas.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: "Quadro de Despesas",
						titulo2: "Período #{@dt_inicial} a #{@dt_final}",
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquida_relatorio_das_liquidacoes
		@orcamento = Orcamento.find(params[:orcamento])
		@dt_inicial = params[:dt_inicial].present? ? params[:dt_inicial].to_date : ("01/01/" + @orcamento.exercicio.to_s).to_date 
		@dt_final = params[:dt_final].present? ? params[:dt_final].to_date : ("31/12/" + @orcamento.exercicio.to_s).to_date
		@liquidacoes = Contabilidade::Liquidacao.where('id in (?)', params[:liquidacoes_ids]).order(:data_da_liquidacao, &:numero_e_empenho)
	end

	def relatorio_das_liquidacoes
		render_to_string pdf: "liquidacoes",
			template: "relatorio_do_portal/liquidacoes.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: "Quadro de Liquidações",
						titulo2: "Período #{@dt_inicial} a #{@dt_final}",
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_de_restos_a_pagar
		@orcamento = Orcamento.find(params[:orcamento])
		@dt_inicial = params[:dt_inicial].present? ? params[:dt_inicial].to_date : ("01/01/" + @orcamento.exercicio.to_s).to_date 
		@dt_final = params[:dt_final].present? ? params[:dt_final].to_date : ("31/12/" + @orcamento.exercicio.to_s).to_date
		@liquidacoes = Contabilidade::Liquidacao.where('id in (?)', params[:despesas_ids]).order(:data_da_liquidacao, &:numero_e_empenho)
	end

	def relatorio_de_restos_a_pagar
		render_to_string pdf: "restos_a_pagar",
			template: "relatorio_do_portal/restos_a_pagar.pdf.slim",
			orientation: 'Landscape',
			disable_smart_shrinking: true,
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: "Quadro de Restos a Pagar",
						titulo2: "Período #{@dt_inicial} a #{@dt_final}",
					}
				},
				spacing: 5
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_das_receitas
		@id_do_orcamento_do_filtro = params["unidade_orcamentaria_por_natureza_da_receita_unidade_orcamentaria_orgao_orcamento_id_eq"].blank? ? "" : query_params["unidade_orcamentaria_por_natureza_da_receita_unidade_orcamentaria_orgao_orcamento_id_eq"]
		@origens_do_talao = [['Orçamentaria', 0], ['Extra-Orçamentaria', 1]]
		@data_inicial = params[:lancamentos_do_orcamento_da_receita_data_do_lancamento_gteq].present? ? params[:lancamentos_do_orcamento_da_receita_data_do_lancamento_gteq].to_date : "01/01/#{@ano_do_orcamento}".to_date
		@data_final = params[:lancamentos_do_orcamento_da_receita_data_do_lancamento_lteq].present? ? params[:lancamentos_do_orcamento_da_receita_data_do_lancamento_lteq].to_date : @data_inicial.end_of_year 

		@orcamento_atual = @id_do_orcamento_do_filtro.blank? ? Orcamento.find_by(exercicio: Date.today.year) : @orcamentos.find(@id_do_orcamento_do_filtro)
		receitas = @orcamento_atual.orcamentos_da_receita.ordenado_por_natureza
		@fontes_de_recursos = @orcamento_atual.fontes_de_recursos
		
		if @orcamento_atual.utiliza_novo_tipo_para_receita?
			@categorias_economicas = @orcamento_atual.naturezas_da_receita.categorias_economicas(true)
		else
			@categorias_economicas = @orcamento_atual.naturezas_da_receita.categorias_economicas(false)
		end

		@q = receitas.ransack(params)

		@valor_total_previsto_do_periodo = @q.result.sum(&:valor).real_contabil
		@valor_total_arrecadado_do_periodo = @q.result.select{|f| f.valor_arrecadado != nil}.sum{ |a| a.valor_arrecadado_periodo_inicial_final(@data_inicial, @data_final)}.to_f.real_contabil


		@receitas = @q.result(distinct: false).group_by(&:classificacao_da_receita)
		@receitas = @receitas.select{|classificacao, orcamentos| orcamentos.inject(0) { |sum, odr| sum + odr.valor_arrecadado_periodo_inicial_final(@data_inicial, @data_final).to_f } != 0}.to_a

		return @receitas
	end

	def relatorio_das_receitas
		render_to_string pdf: "receitas",
		template: "relatorio_do_portal/receitas.pdf.slim",
		orientation: 'Portrait',
		disable_smart_shrinking: true,
		
		dpi: '96',
		header: {
			html: {
				template: 'layouts/_cabecalho_pdf.html.slim',
				locals: {
					titulo1: "Receitas",
					titulo2: "Data: #{@data_inicial} a #{@data_final}",
				}
			},
			spacing: 3
		},
		footer: {
			html: {
				template: 'layouts/_rodape_pdf.html.slim'
			}
		},
		margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_das_receitas_extra
		@data_inicial = params["conta_extra_orcamentaria_lancamentos_extraorcamentario_receita_data_do_lancamento_gteq"].present? ? params["conta_extra_orcamentaria_lancamentos_extraorcamentario_receita_data_do_lancamento_gteq"].to_date : "01/01/#{@ano_do_orcamento}".to_date
		@data_final = params["conta_extra_orcamentaria_lancamentos_extraorcamentario_receita_data_do_lancamento_lteq"].present? ? params["conta_extra_orcamentaria_lancamentos_extraorcamentario_receita_data_do_lancamento_lteq"].to_date : @data_inicial.end_of_year 
		ano_de_inicio_da_pesquisa_no_portal = ParametrizacaoPortalDaTransparencia.find_by(nome_do_acesso: 'receitas').data_de_inicio_da_pesquisa.year
		@orcamentos = Orcamento.where("orcamentos.exercicio >= ?", ano_de_inicio_da_pesquisa_no_portal)
		@id_do_orcamento_do_filtro = params["unidade_orcamentaria_orgao_orcamento_id_eq"].blank? ? "" : params["unidade_orcamentaria_orgao_orcamento_id_eq"]
		@orcamento_atual = @id_do_orcamento_do_filtro.blank? ? @orcamentos.find_by(exercicio: Date.today.year) : @orcamentos.find(@id_do_orcamento_do_filtro)

		receitas = @orcamento_atual.taloes_de_receita.where(id: params[:receitas_extra_ids])
		@receitas = receitas
	end

	def relatorio_das_receitas_extra
		render_to_string pdf: "receitas_extras",
		template: "relatorio_do_portal/receitas_extra.pdf.slim",
		orientation: 'Portrait',
		disable_smart_shrinking: true,
		
		dpi: '96',
		header: {
			html: {
				template: 'layouts/_cabecalho_pdf.html.slim',
				locals: {
					titulo1: "Receitas Extra Orçamentárias",
					titulo2: "Data: #{@data_inicial} a #{@data_final}",
				}
			},
			spacing: 3
		},
		footer: {
			html: {
				template: 'layouts/_rodape_pdf.html.slim'
			}
		},
		margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_dos_repasses_do_duodecimo
		@ano_do_orcamento = params[:orcamento].present?  ? Orcamento.find(params[:orcamento]).exercicio : Date.today.year
		@data_inicial = params[:data_inicial].present? ? params[:data_inicial].to_date : "01/01/#{@ano_do_orcamento}".to_date
		@data_final = params[:data_final].present? ? params[:data_final].to_date : @data_inicial.end_of_year
		receitas_condicoes = ["contabilidade_transferencias_financeiras.valor is not null AND contabilidade_transferencias_financeiras.tipo_de_transferencia = 1 AND contabilidade_transferencias_financeiras.status = 1"]
		
		if params[:orcamento].present?
			receitas_condicoes.push("contabilidade_transferencias_financeiras.orcamento_id = #{params[:orcamento]}")
		end

		if params[:data_inicial].present?
			receitas_condicoes.push("contabilidade_transferencias_financeiras.data >= '#{params[:data_inicial].to_date.strftime("%Y-%m-%d")}'") 
		end
		
		if params[:data_final].present?
			receitas_condicoes.push("contabilidade_transferencias_financeiras.data <= '#{params[:data_final].to_date.strftime("%Y-%m-%d")}'")
		end

		if params[:numero_da_transferencia].present?
			receitas_condicoes.push("contabilidade_transferencias_financeiras.numero_da_transferencia = #{params[:numero_da_transferencia]}")
		end

		if params[:valor].present?
			receitas_condicoes.push("contabilidade_transferencias_financeiras.valor = '#{params[:valor]}")
		end
		
		# if params[:unidade_orcamentaria].present?
		# 	receitas_condicoes << " AND loa_unidades_orcamentarias_por_natureza_da_receita.unidade_orcamentaria_id = #{params[:unidade_orcamentaria]}"
		# end


		@repasses_do_duodecimo_da_camara = Contabilidade::TransferenciaFinanceira.where(receitas_condicoes.join(' AND ')).to_a.paginate(page: params[:page], per_page: 20)
		
		return @repasses_do_duodecimo_da_camara
	end

	def relatorio_dos_repasses_do_duodecimo
		render_to_string pdf: "relatorio_dos_repasses_do_duodecimo",
		template: "relatorio_do_portal/relatorio_dos_repasses_do_duodecimo.pdf.slim",
		orientation: 'Portrait',
		disable_smart_shrinking: true,
		
		dpi: '96',
		header: {
			html: {
				template: 'layouts/_cabecalho_pdf.html.slim',
				locals: {
					titulo1: "Repasses do Duodécimo",
					titulo2: "Data: #{@data_inicial} a #{@data_final}",
				}
			},
			spacing: 3
		},
		footer: {
			html: {
				template: 'layouts/_rodape_pdf.html.slim'
			}
		},
		margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_dos_pagamentos
		@orcamento = params[:orcamento_id_eq].present? ? Orcamento.find(params[:orcamento_id_eq]) : Orcamento.find_by(exercicio: Date.today.year)
		pagamentos = @orcamento.pagamentos.where(resto_a_pagar: false).para_portal.do_orcamento.joins(liquidacao: [empenho: [unidade_orcamentaria: :tipo_de_unidade_administrativa]]).where('base_tipos_de_unidades_administrativas.poder_associado = ?', @poder)
		@data_inicial = params[:data_gteq].present? ? params[:data_gteq] : "01/01/#{@orcamento.exercicio}"
		@data_final = params[:data_lteq].present? ? params[:data_lteq] : "31/12/#{@orcamento.exercicio}"
		@q = pagamentos.ransack(params)
		@pagamentos = @q.result(distinct: false).order(:data, :numero)
	end

	def relatorio_dos_pagamentos
		render_to_string pdf: "relatorio_dos_pagamentos",
		template: "relatorio_do_portal/relatorio_dos_pagamentos.pdf.slim",
		orientation: 'Portrait',
		disable_smart_shrinking: true,
  
		dpi: '96',
		header: {
			html: {
				template: 'layouts/_cabecalho_pdf.html.slim',
				locals: {
					titulo1: "Pagamentos",
					titulo2: "Data: #{@data_inicial} a #{@data_final}",
				}
			},
			spacing: 3
		},
		footer: {
			html: {
				template: 'layouts/_rodape_pdf.html.slim'
			}
		},
		margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_dos_pagamentos_de_restos_a_pagar
		@orcamento = params[:orcamento_id_eq].present? ? Orcamento.find(params[:orcamento_id_eq]) : Orcamento.find_by(exercicio: Date.today.year)
		pagamentos = @orcamento.pagamentos.where(resto_a_pagar: true).para_portal.do_orcamento
		@data_inicial = params[:data_gteq].present? ? params[:data_gteq] : "01/01/#{@orcamento.exercicio}"
		@data_final = params[:data_lteq].present? ? params[:data_lteq] : "31/12/#{@orcamento.exercicio}"
		@q = pagamentos.ransack(params)
		@pagamentos = @q.result(distinct: false).order(:data, :numero)
	end

	def relatorio_dos_pagamentos_de_restos_a_pagar
		render_to_string pdf: "relatorio_dos_pagamentos_de_restos_a_pagar",
		template: "relatorio_do_portal/relatorio_dos_pagamentos_de_restos_a_pagar.pdf.slim",
		orientation: 'Portrait',
		disable_smart_shrinking: true,
		
		dpi: '96',
		header: {
			html: {
				template: 'layouts/_cabecalho_pdf.html.slim',
				locals: {
					titulo1: "Pagamentos de Restos a Pagar",
					titulo2: "Data: #{@data_inicial} a #{@data_final}",
				}
			},
			spacing: 3
		},
		footer: {
			html: {
				template: 'layouts/_rodape_pdf.html.slim'
			}
		},
		margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_das_obras
		poder_associado = session[:tipo_de_ambiente] == "prefeitura" ? "executivo" : "legislativo" 
		@dt_inicial = params[:dt_inicial].present? ? params[:dt_inicial].to_date : (Configuracao.last.parametrizacoes_portal_da_transparencia.where(nome_do_acesso: 'obras', tipo_de_poder: poder_associado).last.data_de_inicio_da_pesquisa).to_date 
		@dt_final = params[:dt_final].present? ? params[:dt_final].to_date : (Date.today).to_date
		@obras = Contabilidade::Obra.where('id in (?)', params[:obras_ids]).order(:data_de_inicio)
	end

	def relatorio_das_obras
		render_to_string pdf: "obras",
		template: "relatorio_do_portal/obras.pdf.slim",
		orientation: 'Portrait',
		disable_smart_shrinking: true,
		
		dpi: '96',
		header: {
			html: {
				template: 'layouts/_cabecalho_pdf.html.slim',
				locals: {
					titulo1: "Quadro de Obras",
					titulo2: "Data: #{@dt_inicial} a #{@dt_final}",
				}
			},
			spacing: 3
		},
		footer: {
			html: {
				template: 'layouts/_rodape_pdf.html.slim'
			}
		},
		margin: @configuracoes.margens_customizadas(top: 5)
	end

	def pesquisa_relatorio_das_transferencias_e_copnvenios
		@transferencias = Obra::Transferencia.where('id in (?)', params[:transferecias_ids])
	end

	def relatorio_das_transferencias_e_convenios
		render_to_string pdf: "transferencias_e_convenios",
		template: "relatorio_do_portal/transferencias_e_convenios.pdf.slim",
		orientation: 'Portrait',
		disable_smart_shrinking: true,
		
		dpi: '96',
		header: {
			html: {
				template: 'layouts/_cabecalho_pdf.html.slim',
				locals: {
					titulo1: "Quadro de Trasnferências e Convênios",
					titulo2: "Data: #{Date.today}",
				}
			},
			spacing: 3
		},
		footer: {
			html: {
				template: 'layouts/_rodape_pdf.html.slim'
			}
		},
		margin: @configuracoes.margens_customizadas(top: 5)
	end

	private

	def disponibiliza_dependencias
		@configuracoes = Configuracao.last
		@poder = session[:tipo_de_ambiente] == "prefeitura" ? 1 : 0
	end

	def set_contexto
		@contexto = contexto_atual
	end

	def tableless_relatorio_do_portal_params
		begin
			params.require(:tableless_relatorio_do_portal).permit(
				:relatorio
			)
		rescue ActionController::ParameterMissing
			nil
		end
	end
end
