module Contabilidade
class TransferenciasDeSaldoPcaspController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_transferencia_de_saldo_pcasp, only: [:show, :edit, :update, :destroy]
	before_action :disponibiliza_dependencias, only: [:new, :create, :edit, :update, :index]
	before_action :set_contas_da_transferencia_e_ics_obrigatorios, only: [:ics_da_transferencia]
	before_action :disponibiliza_dependencias_dos_ics, only: [:ics_da_transferencia]
	before_action -> { verifica_mes_bloqueado(@transferencia_de_saldo_pcasp)}, only: [:edit, :destroy]

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

	# GET /contabilidade/transferencias_de_saldo_pcasp/1
	def show
		@exibir_alerta_contexto = self.send(:exibir_alerta_de_contexto?, @transferencia_de_saldo_pcasp&.data_transferencia)

		@movimentos_do_plano_de_contas = Contabilidade::MovimentacaoDoPlanoDeContas.where("id in (?)", [@transferencia_de_saldo_pcasp.movimento_credito_id, @transferencia_de_saldo_pcasp.movimento_debito_id])
	end

	# GET /contabilidade/transferencias_de_saldo_pcasp/new
	def new
		@transferencia_de_saldo_pcasp = TransferenciaDeSaldoPcasp.new
	end

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

	# POST /contabilidade/transferencias_de_saldo_pcasp
	def create
		@transferencia_de_saldo_pcasp = TransferenciaDeSaldoPcasp.new(transferencia_de_saldo_pcasp_params)

		if @transferencia_de_saldo_pcasp.save
			redirect_to @transferencia_de_saldo_pcasp, notice: 'Transferencia de saldo pcasp foi criado(a) com sucesso.'
		else
			flash.now[:alert] = 'Não foi possível criar a transferência de saldo PCASP, verifique as informações.'
			render :new
		end
	end

	# PATCH/PUT /contabilidade/transferencias_de_saldo_pcasp/1
	def update
		if @transferencia_de_saldo_pcasp.update( transferencia_de_saldo_pcasp_params )
			redirect_to @transferencia_de_saldo_pcasp, notice: 'Transferencia de saldo pcasp foi atualizado(a) com sucesso.'
		else
			flash.now[:alert] = 'Não foi possível criar a transferência de saldo PCASP, verifique as informações.'
			render :edit
		end
	end

	# DELETE /contabilidade/transferencias_de_saldo_pcasp/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@transferencia_de_saldo_pcasp)
		redirect_to contabilidade_transferencias_de_saldo_pcasp_url, mensagem
	end

	def disponibiliza_dependencias_dos_ics
		@tipos_de_conta = ['debito', 'credito']
		@ic_fps =  [["Financeiro", 1], ["Permanente", 2]]
		@fontes_de_recursos = contexto_atual.fontes_de_recursos.all
		@naturezas_da_receita = contexto_atual.naturezas_da_receita.all.order(:codigo)
		@funcoes_e_subfuncoes = contexto_atual.subfuncoes.all
		@contas_extra_orcamentarias = contexto_atual.contas_extra_orcamentarias.order(:codigo).all
	end

	def disponibiliza_dependencias
		@exercicio = contexto_atual.exercicio

		if current_usuario.desenvolvedor?
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias
		else
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.where(id: current_usuario.unidades_orcamentarias_por_usuario.pluck(:unidade_orcamentaria_id))
		end

		@contas_pcasp = Contabilidade::Conta.where(orcamento: contexto_atual).where("nivel_detalhado = 1 AND classe in ('1','2','3','4')").order(:codigo)

		@topicos_sub_contas = Contabilidade::TransferenciaDeSaldoPcasp.topico_sub_contas_pcasp
		@sub_contas = []
		@movimentacoes_do_plano_de_contas = []
		@sub_contas = contexto_atual.sub_contas_pcasp.all

		disponibiliza_dependencias_dos_ics
		# @movimentacoes_do_plano_de_contas = contexto_atual.movimentacoes_do_plano_de_contas.all
	end

	private
	def set_transferencia_de_saldo_pcasp
		@transferencia_de_saldo_pcasp = TransferenciaDeSaldoPcasp.find( params[:id] )
	end

	def set_contas_da_transferencia_e_ics_obrigatorios
		@conta_debito = Contabilidade::Conta.find(params[:conta_debito])
		@conta_credito = Contabilidade::Conta.find(params[:conta_credito])

		@transferencia_de_saldo_pcasp.conta_debito = @conta_debito
		@transferencia_de_saldo_pcasp.conta_credito = @conta_credito

		@ics_obrigatorios = @transferencia_de_saldo_pcasp.ics_obrigatorios_da_transferencia
	end

	# Permite apenas os parâmetros específicos
	def transferencia_de_saldo_pcasp_params
		params.require(:contabilidade_transferencia_de_saldo_pcasp).permit(:data_transferencia, :unidade_orcamentaria_id, :conta_debito_id, :conta_credito_id, :sub_conta_pcasp_id, :movimentacao_id, :historico, :valor, :orcamento_id, 
			:atributo_do_superavit_financeiro_conta_debito, :fonte_de_recursos_conta_debito_id, :natureza_da_receita_conta_debito_id, :natureza_da_despesa_conta_debito_id, :funcao_e_subfuncao_conta_debito_id,
			:atributo_do_superavit_financeiro_conta_credito, :fonte_de_recursos_conta_credito_id, :natureza_da_receita_conta_credito_id, :natureza_da_despes_conta_credito_id, :funcao_e_subfuncao_conta_credito_id,
			:conta_extra_orcamentaria_conta_debito_id, :conta_extra_orcamentaria_conta_credito_id)	
	end
end
end
