class Contabilidade::Relatorios::LiquidacoesController < ApplicationController
	include ControllerConcern
	include ContabilidadeControllerConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario! , except: [:imprimir]
	before_action :disponibiliza_dependencias

	def imprimir
		bloqueia_usuario_com_base_em :read, "contabilidade/liquidacoes"
		relatorio = params[:relatorio]
		if respond_to? relatorio.to_s, :private
			loa = CombinePDF.new
			liquidacao = params[:liquidacao_id].present? ? Contabilidade::Liquidacao.find(params[:liquidacao_id]) : Contabilidade::DocumentoDaLiquidacao.find(params[:documentos_da_liquidacao_id])
		
			if liquidacao.mae? && eval(params[:consolidada]) == false
				liquidacao.liquidacoes_filhas.each do |item|
					params[:liquidacao_id] = item.id
					loa << CombinePDF.parse(send(relatorio))
				end
			else
				loa << CombinePDF.parse(send(relatorio))
			end
			send_data loa.to_pdf, filename: "#{relatorio}.pdf", type: "application/pdf", disposition: 'inline'
		else
			redirect_to :back, alert: 'Relatório selecionado não existe'
		end
	end

	def liquidacao
		@liquidacao = Contabilidade::Liquidacao.find(params[:liquidacao_id])
		empenho = @liquidacao.empenho
		logado_na_contabilidade = true

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

		if @liquidacao.solicitado? || @liquidacao.enviado_para_controladoria? || @liquidacao.retornado_pela_controladoria?
			titulo2 = "Solicitação de Liquidação #{@liquidacao.empenho_e_numero}"  + " - Empenho   #{@liquidacao.empenho.numero_do_empenho}"
		else
			titulo2 = "Empenho " + @liquidacao.empenho.numero_do_empenho
		end

		render_to_string pdf: "liquidacao",
			template: "contabilidade/relatorios/liquidacoes/solicitacao_de_liquidacao.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(top: 5)
	end

	def restos_a_pagar
		@liquidacao = Contabilidade::Liquidacao.find(params[:liquidacao_id])

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

		if @liquidacao.solicitado? || @liquidacao.enviado_para_controladoria? || @liquidacao.retornado_pela_controladoria?
			titulo2 = "Solicitação de Liquidação de Restos a Pagar " + @liquidacao.empenho_e_numero + " - Empenho " + @liquidacao.empenho.numero_do_empenho
		else
			titulo2 = "Nota de Liquidação de Restos a Pagar " + @liquidacao.empenho_e_numero + " - Empenho " + @liquidacao.empenho.numero_do_empenho
		end

		render_to_string pdf: "restos_a_pagar",
			template: "contabilidade/relatorios/liquidacoes/restos_a_pagar.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 retencoes
		@liquidacao =  Contabilidade::Liquidacao.find_by(id: params[:liquidacao_id])
		@de_folha = params[:de_folha]

		if @configuracoes.customizacao.exibir_nome_orgao?
			titulo1 = @liquidacao.unidade_orcamentaria.unidade_gestora.nome.to_s
		else
			titulo1 = ''
		end

		if @liquidacao.restos_a_pagar?
			titulo3 = "Nota de Liquidação de Restos a Pagar " + @liquidacao.empenho_e_numero + " - Empenho " + @liquidacao.empenho.numero_do_empenho
		else
			titulo3 = "Nota de Liquidação " + @liquidacao.empenho_e_numero + " - Empenho " + @liquidacao.empenho.numero_do_empenho
		end

		render_to_string pdf: "retencoes",
			template: "contabilidade/relatorios/liquidacoes/retencoes.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,

			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf_relatorios_da_contabilidade.html.slim',
					locals: {
						titulo1: titulo1,
						titulo2: "Relatório de Retenções",
						titulo3: titulo3
					}
				},
				spacing: 5
			},
			margin: @configuracoes.margens_customizadas
	end

	def documento
		@documento_da_liquidacao = Contabilidade::DocumentoDaLiquidacao.find(params[:documentos_da_liquidacao_id])

		if @configuracoes.customizacao.exibir_nome_orgao?
			titulo2 = @documento_da_liquidacao.liquidacao.unidade_orcamentaria.unidade_gestora.try(:nome)
		else
			titulo2 = ''
		end

		render_to_string pdf: "documento",
			template: "contabilidade/documentos_da_liquidacao/documento.pdf.slim",
			orientation: 'Portrait',
			disable_smart_shrinking: true,
			dpi: '96',
			header: {
				html: {
					template: 'layouts/_cabecalho_pdf.html.slim',
					locals: {
						titulo1: @documento_da_liquidacao.titulo_personalizado,
						titulo2: titulo2
					}
				}
			},
			footer: {
				html: {
					template: 'layouts/_rodape_pdf.html.slim'
				}
			},
			margin: @configuracoes.margens_customizadas
	end

	def disponibiliza_dependencias
		@configuracoes = Configuracao.last
		liquidacao_id = (params[:liquidacao_id].present? ? params[:liquidacao_id] : params[:documentos_da_liquidacao_id]) rescue nil
		if params[:liquidacao_id].present?
			@unidade_orcamentaria =  Contabilidade::Liquidacao.find(params[:liquidacao_id]).unidade_orcamentaria
		else
			@unidade_orcamentaria = Contabilidade::DocumentoDaLiquidacao.find(params[:documentos_da_liquidacao_id]).liquidacao.unidade_orcamentaria
		end
	end
end
