module Contabilidade
class AnulacoesDaContaExtraController < ApplicationController
	include ContabilidadeControllerConcern
	include ControllerConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_anulacao_da_conta_extra, only: [:show, :edit, :update, :destroy, :disponibiliza_dependencias]
	before_action :disponibiliza_dependencias, only: [:new, :create, :edit, :update]

	# GET /contabilidade/anulacao_da_conta_extras
	def index
		@q = contexto_atual.anulacoes_da_conta_extra.order(:id).search(params[:q])
		@anulacao_da_conta_extras = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		@unidades_gestoras = contexto_atual.unidades_orcamentarias.order("loa_unidades_orcamentarias.codigo", "loa_unidades_orcamentarias.nome")
	end

	# GET /contabilidade/anulacao_da_conta_extras/1
	def show
	end

	# GET /contabilidade/anulacao_da_conta_extras/new
	def new
		@anulacao_da_conta_extra = contabilidade_atual.anulacoes_da_conta_extra.new
	end

	# GET /contabilidade/anulacao_da_conta_extras/1/edit
	def edit
	end

	# POST /contabilidade/anulacao_da_conta_extras
	def create
		@anulacao_da_conta_extra = contabilidade_atual.anulacoes_da_conta_extra.new(anulacao_da_conta_extra_params)

		if @anulacao_da_conta_extra.save
			redirect_to @anulacao_da_conta_extra, notice: 'Cancelamento da conta extra foi criado com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /contabilidade/anulacao_da_conta_extras/1
	def update
		if @anulacao_da_conta_extra.update( anulacao_da_conta_extra_params )
			redirect_to @anulacao_da_conta_extra, notice: 'Cancelamento da conta extra foi atualizado com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /contabilidade/anulacao_da_conta_extras/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@anulacao_da_conta_extra)
		redirect_to contabilidade_anulacoes_da_conta_extra_path, mensagem
	end

	def disponibiliza_dependencias
		@unidades_gestoras = contexto_atual.unidades_orcamentarias
		@motivos_do_cancelamento = Contabilidade::AnulacaoDaContaExtra.motivos_do_cancelamento
		@contas_extra_orcamentarias = []
		if @anulacao_da_conta_extra.present? && @anulacao_da_conta_extra.unidade_orcamentaria.present?
			@contas_extra_orcamentarias = @anulacao_da_conta_extra.unidade_orcamentaria.contas_extra_orcamentarias
		else
			@contas_extra_orcamentarias = contexto_atual.contas_extra_orcamentarias
		end
	end

	private
	def set_anulacao_da_conta_extra
		@anulacao_da_conta_extra = AnulacaoDaContaExtra.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def anulacao_da_conta_extra_params
		params.require(:contabilidade_anulacao_da_conta_extra).permit(:valor, :conta_extra_orcamentaria_id, :data, :motivo_do_cancelamento, :historico, :unidade_orcamentaria_id)

	end
end
end
