module Contabilidade
	class LotesDeReceitasController < ApplicationController
		include ControllerConcern
		before_action :authenticate_usuario!
		before_action :autoriza_usuario!
		before_action :set_lote_de_receita, only: [:show, :edit, :update, :destroy, :aprovar]

		# GET /contabilidade/lotes_de_receitas
		def index
			@q = LoteDeReceita.order("data_de_arrecadacao DESC").where("data_de_arrecadacao between ? and ?", Date.new(orcamento_atual.exercicio, 1, 1), Date.new(orcamento_atual.exercicio, 12, 31)).search(params[:q])
			@lotes_de_receitas = @q.result(distinct: false).order("data_de_arrecadacao DESC").paginate(page: params[:page], per_page: 10)
			@contas_bancarias = Base::ContaBancaria.where(exibir_na_api: true).all
		end

		# GET /contabilidade/lotes_de_receitas/1
		def show
		end

		def edit
			redirect_to @lote_de_receita, notice: 'Lote não está disponível para edição.' unless @lote_de_receita.recebido?
		end

		def update
			ActiveRecord::Base.transaction do
				if lote_de_receita_params[:motivo].empty?
					redirect_to edit_contabilidade_lote_de_receita_path(@lote_de_receita), notice: 'Informe o motivo da rejeição.'
				else
					if @lote_de_receita.update( lote_de_receita_params )
						redirect_to @lote_de_receita, notice: 'Rejeição de lote realizada com sucesso.'
					else
						render :edit
					end
				end
			end
		end

		def aprovar
			ActiveRecord::Base.transaction do
				if @lote_de_receita.aprovar
					redirect_to @lote_de_receita, success: 'Lote aprovado com sucesso.'
				else
					redirect_to @lote_de_receita, notice: 'Um erro ocorreu na tentativa de aprovar o lote.'
				end
			end
		end

		private
		def set_lote_de_receita
			@lote_de_receita = LoteDeReceita.find( params[:id] )
		end

		# Permite apenas os parâmetros específicos
		def lote_de_receita_params
			params.require(:contabilidade_lote_de_receita).permit(:status, :motivo)
		end
	end
end
