module Patrimonio
class BaixasDosBensController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!, except: [:imprimir]
	before_action :autoriza_usuario!, except: [:imprimir]
	before_action :set_baixa_do_bem, only: [:show, :edit, :update, :destroy, :confirmar_desreconhecimento, :imprimir]
	before_action :disponibiliza_dependencias, only: [:new, :edit, :create]

	# GET /patrimonio/baixas_dos_bens
	def index
		@unidades_gestoras = Loa::UnidadeGestora.ativo_no_sistema
		@q = BaixaDoBem.joins(bem_patrimonial: :item).where('patrimonio_bens_patrimoniais.unidade_gestora_id in (?)', current_usuario.unidades_gestoras_do_usuario_do_exercicio(contexto_atual.id).ids).order(:id).search(params[:q])
		@baixas_dos_bens = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	# GET /patrimonio/baixas_dos_bens/1
	def show
	end

	# GET /patrimonio/baixas_dos_bens/new
	def new
		@baixa_do_bem = BaixaDoBem.new
	end

	# GET /patrimonio/baixas_dos_bens/1/edit
	def edit
	end

	# POST /patrimonio/baixas_dos_bens
	def create
		@baixa_do_bem = BaixaDoBem.new(baixa_do_bem_params)

		if @baixa_do_bem.save
			redirect_to @baixa_do_bem, notice: 'Baixa do bem foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /patrimonio/baixas_dos_bens/1
	def update
		if @baixa_do_bem.update( baixa_do_bem_params )
			redirect_to @baixa_do_bem, notice: 'Baixa do bem foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /patrimonio/baixas_dos_bens/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@baixa_do_bem)
		redirect_to patrimonio_baixas_dos_bens_url, mensagem
	end

	def confirmar_desreconhecimento
		if @baixa_do_bem.confirmar_desreconhecimento!
			redirect_to patrimonio_baixa_do_bem_path(@baixa_do_bem), notice: "Desreconhecimento gerado com sucesso."
		else
			render :show
		end
	end

	#----------------------------------------------------------------------------#

	def imprimir
    relatorio = params[:relatorio]
    
    if respond_to? relatorio.to_s, :private
      loa = CombinePDF.new
      loa << CombinePDF.parse(send(relatorio))
      loa.number_pages(location: :bottom_right, margin_from_height: 0, number_format: '%s', font_size: 8)
      send_data loa.to_pdf, filename: "#{relatorio}.pdf", type: "application/pdf", disposition: 'inline'
    else
      redirect_to patrimonio_baixa_do_bem_path(@baixa_do_bem), alert: 'Relatório não encontrado'
    end
  end

  def termo_de_desreconhecimento
		@configuracoes = Configuracao.last
		@unidade_gestora = @baixa_do_bem.bem_patrimonial.unidade_gestora

    render_to_string pdf: "Termo de Desreconhecimento",
      template: "patrimonio/baixas_dos_bens/relatorios/termo_de_desreconhecimento.pdf.slim",
      orientation: 'Portrait',
      disable_smart_shrinking: true,

      dpi: '96',
      header: {
        html: {
          template: 'layouts/_cabecalho_pdf_central_patrimonio.html.slim',
          locals: {
            titulo1: "TERMO DE DESRECONHECIMENTO"
          }
        },
        spacing: 5
      },
      footer: {
        html: {
          template: 'layouts/_rodape_pdf.html.slim'
        }
      },
      margin: @configuracoes.margens_customizadas
  end

	#----------------------------------------------------------------------------#

	private
	def set_baixa_do_bem
		@baixa_do_bem = BaixaDoBem.find( params[:id] )
	end

	def disponibiliza_dependencias
		@bem_patrimonial = Patrimonio::BemPatrimonial.find_by(id: params[:bem_patrimonial]) || Patrimonio::BemPatrimonial.find_by(id: baixa_do_bem_params[:bem_patrimonial_id])
		@comissoes = Patrimonio::Comissao.where(data_fim: nil).order('codigo ASC')
	end

	# Permite apenas os parâmetros específicos
	def baixa_do_bem_params
		params.require(:patrimonio_baixa_do_bem).permit(
			:bem_patrimonial_id, :comissao_id, :data_da_baixa, :observacao, :motivo_da_baixa
		)
	end
end
end
