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


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

	# GET /contabilidade/investimentos_do_rpps/1
	def show
	end

	# GET /contabilidade/investimentos_do_rpps/new
	def new
		@investimento_do_rpps = contexto_atual.investimentos_do_rpps.new
	end

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

	# POST /contabilidade/investimentos_do_rpps
	def create
		@investimento_do_rpps = Contabilidade::InvestimentoDoRpps.new(investimento_do_rpps_params)
		@investimento_do_rpps.orcamento = contexto_atual
		if @investimento_do_rpps.save
			redirect_to @investimento_do_rpps, notice: 'Investimento do rpps foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /contabilidade/investimentos_do_rpps/1
	def update
		if @investimento_do_rpps.update( investimento_do_rpps_params )
			redirect_to @investimento_do_rpps, notice: 'Investimento do rpps foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /contabilidade/investimentos_do_rpps/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@investimento_do_rpps)
		redirect_to contabilidade_investimentos_do_rpps_url, mensagem
	end

	def retorna_saldo_inicial
		investimento_anterior = Contabilidade::InvestimentoDoRpps.where("contabilidade_investimentos_do_rpps.fundo_de_investimento_id = ? and date(ano_de_competencia::text || '-' || mes_de_competencia::text || '-1') < '?-?-1'", params[:fundos_de_investimento_id].to_i, contexto_atual.exercicio, params[:mes_de_competencia].to_i).order("contabilidade_investimentos_do_rpps.ano_de_competencia DESC, contabilidade_investimentos_do_rpps.mes_de_competencia DESC").limit(1).last #ULTIMO

		render json: {
			'saldo': investimento_anterior.try(:valor_total).to_f
		}
	end

	private
	def set_investimento_do_rpps
		@investimento_do_rpps = Contabilidade::InvestimentoDoRpps.find( params[:id] )
	end

	def disponibiliza_dependencias
		@fundos_de_investimento = Contabilidade::FundoDeInvestimento.all
		@meses_de_competencia = Contabilidade::InvestimentoDoRpps.meses_de_competencia
	end

	# Permite apenas os parâmetros específicos
	def investimento_do_rpps_params
		params.require(:contabilidade_investimento_do_rpps).permit(:orcamento_id, :arquivo_id, :fundo_de_investimento_id, :mes_de_competencia, :ano_de_competencia,:identificacao_do_fundo, :saldo_inicial, :valor_da_aplicacao, :valor_do_resgate, :valor_do_rendimento, :perdas)
	end
end
end
