module Contabilidade
class AportesDespesasController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, expect: [:retorna_tipos_de_aportes]
	before_action :set_aporte_despesa, only: [:show, :edit, :update, :destroy]
	before_action :disponibiliza_dependencias, only: [:create, :new, :update, :edit, :index]

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

	# GET /contabilidade/aportes_despesas/1
	def show
	end

	# GET /contabilidade/aportes_despesas/new
	def new
		@aporte_despesa = AporteDespesa.new
	end

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

	# POST /contabilidade/aportes_despesas
	def create
		@aporte_despesa = AporteDespesa.new(aporte_despesa_params)
		@aporte_despesa.orcamento = contexto_atual

		if @aporte_despesa.save
			redirect_to @aporte_despesa, notice: 'Aporte despesa foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /contabilidade/aportes_despesas/1
	def update
		if @aporte_despesa.update( aporte_despesa_params )
			redirect_to @aporte_despesa, notice: 'Aporte despesa foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /contabilidade/aportes_despesas/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@aporte_despesa)
		redirect_to contabilidade_aportes_despesas_url, mensagem
	end

	def disponibiliza_dependencias
		@naturezas_dos_lancamentos = Contabilidade::AporteDespesa.naturezas_dos_lancamentos
		@tipos = Contabilidade::AporteDespesa.tipos
	end

	def retorna_tipos_de_aportes
		tipos_dos_aportes = Contabilidade::AporteDespesa.tipos
		tipos_de_despesa = ['aporte_para_amortizacao', 'transferencia_para_cobertura', 'transferencia_para_despesas', 'outros_aportes_ou_transferencias']
		tipos_outros = ['despesas_administrativas', 'despesas_previdenciarias', 'despesas_com_investimentos']
		if params[:natureza_do_lancamento_enum] == "aportes_ou_transferencias"
			tipos_dos_aportes = tipos_dos_aportes.select {|ta| tipos_de_despesa.include?(ta)}
		else
			tipos_dos_aportes = tipos_dos_aportes.select {|ta| tipos_outros.include?(ta)}
		end

		render json: tipos_dos_aportes.map{|tipo| {key: tipo[0], nome: Contabilidade::AporteDespesa.localizar('tipo', tipo[0])}}
	end

	private
	def set_aporte_despesa
		@aporte_despesa = AporteDespesa.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def aporte_despesa_params
		params.require(:contabilidade_aporte_despesa).permit(:data_da_documentacao, :orcamento_id, :natureza_do_lancamento, :tipo, :valor, :arquivo_id)

	end
end
end
