module Contabilidade
class OrcamentosDoContingenciamentoController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_orcamento_do_contingenciamento, only: [:edit, :update]
	before_action :disponibiliza_dependencias, only: [:edit, :update]

	# GET /contabilidade/orcamentos_do_contingenciamento/1/edit
	def edit
		@orcamento_do_contingenciamento.acoes_do_contigenciamento.build if @orcamento_do_contingenciamento.acoes_do_contigenciamento.empty?
	end

	# PATCH/PUT /contabilidade/orcamentos_do_contingenciamento/1
	def update
		if @orcamento_do_contingenciamento.update(orcamento_do_contingenciamento_params)
			redirect_to @orcamento_do_contingenciamento.contigenciamento, notice: 'Orcamento do contingenciamento foi atualizado(a) com sucesso.'
		else
			render :edit
			flash.now[:alert] = 'Não foi possível atualizar o Orçamento do Contingenciamento, preencha os campos necessários.'
		end
	end

	private
	def set_orcamento_do_contingenciamento
		@orcamento_do_contingenciamento = OrcamentoDoContingenciamento.find(params[:id])
	end

	def disponibiliza_dependencias
		fonte_de_recursos = @orcamento_do_contingenciamento.contigenciamento.fonte_de_recurso
		@acoes = contabilidade_atual.acoes.joins(:orcamentos_da_despesa).where(loa_orcamentos_da_despesa: { fonte_de_recursos_id: fonte_de_recursos.id }).distinct.order(:codigo)
		@elementos_de_despesa = []
	end

	# Permite apenas os parâmetros específicos
	def orcamento_do_contingenciamento_params
		params.require(:contabilidade_orcamento_do_contingenciamento).permit(
			:contingenciamento_id,
			acoes_do_contigenciamento_attributes: [
				:id, :orcamento_do_contingenciamento_id, :acao_id, :valor, :_destroy,
				elementos_por_acao_do_contigenciamento_attributes: [
					:id, :acao_do_contigenciamento_id, :elemento_de_despesa_id, :valor, :_destroy
				]
			]
		)
	end
end
end
