class Contabilidade::Relatorios::SolicitacoesDeAlteracaoOrcamentariaController < ApplicationController
  include ControllerConcern

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

  def imprimir
		relatorio = params[:relatorio]
		if respond_to? relatorio.to_s, :private
			loa = CombinePDF.new
			loa << CombinePDF.parse(send(relatorio))
			send_data loa.to_pdf, filename: "#{relatorio}.pdf", type: "application/pdf", disposition: 'inline'
		else
			redirect_to :back, alert: 'Demonstrativo selecionado não existe'
		end
	end

	private
		def solicitacao_de_alteracao_orcamentaria
			@solicitacao_de_alteracao_orcamentaria = Contabilidade::SolicitacaoDeAlteracaoOrcamentaria.find_by(id: params[:solicitacao])
			@unidade_orcamentaria = @solicitacao_de_alteracao_orcamentaria.unidade_orcamentaria
			@orcamento = @solicitacao_de_alteracao_orcamentaria.orcamento.exercicio - 1

			if @solicitacao_de_alteracao_orcamentaria.projeto.present?
				@data = @solicitacao_de_alteracao_orcamentaria.projeto.try(:data_do_projeto)
			elsif @solicitacao_de_alteracao_orcamentaria.empenho.present? && @solicitacao_de_alteracao_orcamentaria.empenho.status == 'confirmado'
				@data = @solicitacao_de_alteracao_orcamentaria.empenho.try(:data_do_empenho)
			else
				@data = @solicitacao_de_alteracao_orcamentaria.empenho.try(:data_do_empenho)
			end

			if @solicitacao_de_alteracao_orcamentaria.projeto.present?
				@motivo = 'Elaboração de Projeto Básico'
			elsif @solicitacao_de_alteracao_orcamentaria.empenho.present? && @solicitacao_de_alteracao_orcamentaria.empenho.status == 'confirmado'
				@motivo = 'Empenho'
			elsif @solicitacao_de_alteracao_orcamentaria.empenho.present? && @solicitacao_de_alteracao_orcamentaria.empenho.status == 'solicitado'
				@motivo = 'Solicitação de Empenho'
			else
				@motivo = 'Solicitação Avulsa'
			end

			if @motivo == 'Empenho'
				@setor = 'Contabilidade'
			else
				@setor = 'Administrativo/Financeiro'
			end

			render_to_string pdf: "cancelamento_resto_a_pagar",
				template: "contabilidade/relatorios/solicitacoes_de_alteracao_orcamentaria/solicitacao_de_alteracao_orcamentaria.pdf.slim",
				orientation: 'Portrait',
				disable_smart_shrinking: true,
        
				dpi: '96',
				header: {
					html: {
						template: 'layouts/_cabecalho_pdf.html.slim',
						locals: {
							titulo1: @unidade_orcamentaria.try(:nome),
							titulo2: "Solicitação de Alteração do Orçamento"
						}
					},
					spacing: 5
				},
				footer: {
					html: {
						template: 'layouts/_rodape_pdf.html.slim'
					}
				},
				margin: @configuracoes.margens_customizadas
	end

	def disponibiliza_dependencias
		@configuracoes = Configuracao.last
	end
end
