module Patrimonio
class BaixasDosBensEmMassaController < ApplicationController
	include ControllerConcern
	# before_action :authenticate_usuario!, except: [:imprimir]
	before_action :autoriza_usuario!, except: [:imprimir]
	before_action :set_baixa_do_bem_em_massa, only: [:show, :edit, :update, :destroy, :editar_itens, :atualiza_itens, :confirmar, :imprimir]
	before_action :disponibiliza_dependencias, only: [:new, :edit, :create, :editar_itens, :atualiza_itens]
	before_action :disponibiliza_dependencias_itens, only: [:editar_itens, :atualiza_itens]


	# GET /patrimonio/baixas_dos_bens_em_massa
	def index
		@q = BaixaDoBemEmMassa.order(:id).search(params[:q])
		@baixas_dos_bens_em_massa = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	# GET /patrimonio/baixas_dos_bens_em_massa/1
	def show
	end

	# GET /patrimonio/baixas_dos_bens_em_massa/new
	def new
		@baixa_do_bem_em_massa = BaixaDoBemEmMassa.new
	end

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

	# POST /patrimonio/baixas_dos_bens_em_massa
	def create
		@baixa_do_bem_em_massa = BaixaDoBemEmMassa.new(baixa_do_bem_em_massa_params)
		@baixa_do_bem_em_massa.orcamento = contexto_atual

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

	# PATCH/PUT /patrimonio/baixas_dos_bens_em_massa/1
	def update
		if @baixa_do_bem_em_massa.update( baixa_do_bem_em_massa_params )
			redirect_to @baixa_do_bem_em_massa, notice: 'Baixa do bem em massa foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /patrimonio/baixas_dos_bens_em_massa/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@baixa_do_bem_em_massa)
		redirect_to patrimonio_baixas_dos_bens_em_massa_url, mensagem
	end

	def editar_itens
		@baixa_do_bem_em_massa.baixas_dos_bens.build unless @baixa_do_bem_em_massa.baixas_dos_bens.present?

	end

	def atualiza_itens
		return if bloqueia_usuario_com_base_em 'editar_itens_da_transferencia'
		@baixa_do_bem_em_massa.transaction do
			if @baixa_do_bem_em_massa.update(baixa_do_bem_params)
				mensagem = 'Itens atualizados com sucesso.'
				redirect_to patrimonio_baixa_do_bem_em_massa_path(@baixa_do_bem_em_massa), notice: mensagem
			else
				render :editar_itens
			end
		rescue Exception => e
			render :editar_itens
			raise ActiveRecord::Rollback
		end
	end

	def confirmar
		if @baixa_do_bem_em_massa.confirmar!
			redirect_to patrimonio_baixa_do_bem_em_massa_path(@baixa_do_bem_em_massa), 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_em_massa_path(@baixa_do_bem_em_massa), alert: 'Relatório não encontrado'
    end
  end

  def termo_de_desreconhecimento
		@configuracoes = Configuracao.last
		@unidade_gestora = @baixa_do_bem_em_massa.centro_de_custo.unidade_gestora.present? ? @baixa_do_bem_em_massa.centro_de_custo.unidade_gestora : @baixa_do_bem_em_massa.centro_de_custo.centro_de_custos_mae_principal.unidade_gestora

    render_to_string pdf: "Termo de Desreconhecimento",
      template: "patrimonio/baixas_dos_bens_em_massa/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_em_massa
		@baixa_do_bem_em_massa = BaixaDoBemEmMassa.find( params[:id] )
	end

	def disponibiliza_dependencias
		@centros_de_custo = Controladoria::CentroDeCusto.where(status: :ativo).all
		@motivo_da_baixa = Patrimonio::BaixaDoBemEmMassa.motivo_da_baixas_i18n
		@comissoes = Patrimonio::Comissao.where(data_fim: nil).order('codigo ASC')
		@agentes = Base::AgentePublicoMunicipal.where(situacao_funcional: 1)
	end

	def disponibiliza_dependencias_itens
		@bens_patrimoniais = Patrimonio::BemPatrimonial.joins(:item, :localizacoes_dos_bens).where('patrimonio_bens_patrimoniais.status = 1 
			and patrimonio_localizacoes_dos_bens.centro_de_custo_id = ?', @baixa_do_bem_em_massa.centro_de_custo).order('id ASC')
	end

	# Permite apenas os parâmetros específicos
	def baixa_do_bem_em_massa_params
		params.require(:patrimonio_baixa_do_bem_em_massa).permit(
			:data, :centro_de_custo_id, :motivo_da_baixa, :status, :codigo, :comissao_id, :orcamento_id, :observacao, :agente_publico_municipal_id
		)
	end
	
	def baixa_do_bem_params
		params.require(:patrimonio_baixa_do_bem_em_massa).permit(
			baixas_dos_bens_attributes: [
				:id, :bem_patrimonial_id, :comissao_id, :data_da_baixa, :valor_atual_do_bem, :observacao, :motivo_da_baixa, :_destroy 
			]
		)
	end
end
end
