module Loa
class TransferenciasDeRecursosController < ApplicationController
	include LoaControllersConcern
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :bloquear_orcamento, only: [:new, :edit, :destroy]
	before_action :set_transferencia_de_recurso, only: [:show, :edit, :update, :destroy]

	# GET /loa/transferencias_de_recursos
	def index
		orcamento = Orcamento.find_by( exercicio: params[:exercicio] )
		@q = orcamento.transferencias_de_recursos.order(:id).search(params[:q])
		@transferencias_de_recursos = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		disponibiliza_dependencias
	end

	# GET /loa/transferencias_de_recursos/new
	def new
		disponibiliza_dependencias
		orcamento = Orcamento.find_by( exercicio: params[:exercicio] )

		ultima_cadastrada = TransferenciaDeRecurso.find(params[:id]) if params[:id]

		if ultima_cadastrada.present?
			@transferencia_de_recurso = orcamento.transferencias_de_recursos.new(unidade_orcamentaria_destino_id: ultima_cadastrada.unidade_orcamentaria_destino_id, unidade_orcamentaria_origem_id: ultima_cadastrada.unidade_orcamentaria_origem_id)
		else
			@transferencia_de_recurso = orcamento.transferencias_de_recursos.new
		end
	end

	# GET /loa/transferencias_de_recursos/1/edit
	def edit
		disponibiliza_dependencias
	end

	# POST /loa/transferencias_de_recursos
	def create
		orcamento = Orcamento.find_by( exercicio: params[:exercicio] )
		@transferencia_de_recurso = orcamento.transferencias_de_recursos.new(transferencia_de_recurso_params)

		if @transferencia_de_recurso.save
			if manter_form_apos_cadastro?
				redirect_path = { action: :new, id: @transferencia_de_recurso.id }
			else
				redirect_path = loa_transferencias_de_recursos_path(exercicio: contexto_atual.exercicio)
			end
			redirect_to redirect_path, notice: 'Recurso transferido com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	# PATCH/PUT /loa/transferencias_de_recursos/1
	def update
		if @transferencia_de_recurso.update( transferencia_de_recurso_params )
			redirect_to loa_transferencias_de_recursos_path(exercicio: contexto_atual.exercicio), notice: 'Alteração da transferência de recurso realizada com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	# DELETE /loa/transferencias_de_recursos/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@transferencia_de_recurso)
		redirect_to loa_transferencias_de_recursos_path(exercicio: contexto_atual.exercicio), mensagem
	end

	private
	def set_transferencia_de_recurso
		@transferencia_de_recurso = TransferenciaDeRecurso.find( params[:id] )
	end

	def disponibiliza_dependencias
		@unidades_orcamentarias = orcamento_atual.unidades_orcamentarias.order(:codigo)
		@fontes_de_recursos = orcamento_atual.fontes_de_recursos.order(:codigo)
	end

	# Permite apenas os parâmetros específicos
	def transferencia_de_recurso_params
		params.require(:loa_transferencia_de_recurso).permit(:unidade_orcamentaria_origem_id, :unidade_orcamentaria_destino_id, :fonte_de_recursos_id, :valor, :orcamento_id)

	end
end
end
