class Contabilidade::TransferenciasNaoFinanceirasController < ApplicationController

	include ContabilidadeControllerConcern
	include ControllerConcern

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

	def index
		@unidades_orcamentarias_destino = contexto_atual.unidades_orcamentarias.order(:codigo, :nome)
		if current_usuario.desenvolvedor?
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.order("loa_unidades_orcamentarias.codigo", "loa_unidades_orcamentarias.nome")
		else
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.where(id: current_usuario.unidades_orcamentarias_por_usuario.pluck(:unidade_orcamentaria_id)).order("loa_unidades_orcamentarias.codigo", "loa_unidades_orcamentarias.nome")
		end

		@q = contexto_atual.transferencias_nao_financeiras.where('unidade_orcamentaria_origem_id in (?)', @unidades_orcamentarias.pluck(:id)).order(:id).ransack(query_params)
		@transferencias_nao_financeiras = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
	end

	def show
	end

	def new
		@transferencia_nao_financeira = contexto_atual.transferencias_nao_financeiras.new
	end

	def create
		@transferencia_nao_financeira = contexto_atual.transferencias_nao_financeiras.new(transferencias_nao_financeiras_params)

		if @transferencia_nao_financeira.save
			redirect_to contabilidade_transferencias_nao_financeiras_path, notice: "Transferência não financeira realizada com sucesso"
		else
			render :new
		end
	end

	def edit
	end

	def update
		if @transferencia_nao_financeira.update(transferencias_nao_financeiras_params)
			redirect_to contabilidade_transferencias_nao_financeiras_path, notice: "Transferências alterada com sucesso"
		else
			render :edit
		end
	end

	def destroy
		mensagem = apaga_e_retorna_mensagem(@transferencia_nao_financeira)
		redirect_to contabilidade_transferencias_nao_financeiras_path, mensagem
	end

	private

	def transferencias_nao_financeiras_params
		params.require(:contabilidade_transferencia_nao_financeira).permit(
			:data, :conta_id, :unidade_orcamentaria_origem_id, :unidade_orcamentaria_destino_id,
			:numero_do_tombamento, :valor_liquido_contabil, :descricao, :tipo_de_movimento, :historico
		)
	end

	def set_transferencia_nao_financeira
		@transferencia_nao_financeira = Contabilidade::TransferenciaNaoFinanceira.find(params[:id])
	end

	def disponibiliza_dependencias
		@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.order(:codigo)

		# Códigos enviados por excel na atividade C#961 => Códigos de Contas do PCASP
		codigos_pcasp = [
			"351220201", "451220201",
			"351220203", "451220203",
			"351220202", "451220202",
			"351220204", "451220204"
		]

		@contas = contexto_atual.contas.where(codigo: codigos_pcasp).order(:nome)
		@tipos_de_movimento_mapeados = Contabilidade::TransferenciaNaoFinanceira.tipos_de_movimento
	end
end
