module Contabilidade
class ConfiguracoesDoEventoContabilController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_configuracao_do_evento_contabil, only: [:show, :edit, :update, :destroy]
	before_action :disponibiliza_dependencias, only:[:new, :edit, :update, :create]

	# GET /contabilidade/configuracoes_do_evento_contabil/new
	def new
		@configuracao_do_evento_contabil = ConfiguracaoDoEventoContabil.new( evento_contabil_id: params[:evento_contabil_id] )
		@contas_pcasp_da_conta_bancaria = contexto_atual.contas.where(codigo: ['111110100', '111110200', '111110602', '111110603', '111110604', '111111900']).order(:codigo)
		@contas_pcasp = contexto_atual.contas.where(codigo: ['111110100', '111110200', '111110602', '111110603', '111110604', '111111900', '113510100', '113510200', '113510300', '113510400', '113510500', '113510600', '113510700', '113510802', '113519900']).order(:codigo)
		disponibiliza_status_baseado_no_model
	end

	# GET /contabilidade/configuracoes_do_evento_contabil/1/edit
	def edit
		disponibiliza_status_baseado_no_model
		@contas_pcasp_da_conta_bancaria = contexto_atual.contas.where(codigo: ['111110100', '111110200', '111110602', '111110603', '111110604', '111111900']).order(:codigo)
		@contas_pcasp = contexto_atual.contas.where(codigo: ['111110100', '111110200', '111110602', '111110603', '111110604', '111111900', '113510100', '113510200', '113510300', '113510400', '113510500', '113510600', '113510700', '113510802', '113519900']).order(:codigo)
	end

	# POST /contabilidade/configuracoes_do_evento_contabil
	def create
		@configuracao_do_evento_contabil = ConfiguracaoDoEventoContabil.new(configuracao_do_evento_contabil_params)

		if @configuracao_do_evento_contabil.save
			redirect_to @configuracao_do_evento_contabil.evento_contabil, notice: 'Configuração do evento contábil foi criada com sucesso.'
		else
			disponibiliza_status_baseado_no_model
			@contas_pcasp_da_conta_bancaria = contexto_atual.contas.where(codigo: ['111110100', '111110200', '111110602', '111110603', '111110604', '111111900']).order(:codigo)
			@contas_pcasp = contexto_atual.contas.where(codigo: ['111110100', '111110200', '111110602', '111110603', '111110604', '111111900', '113510100', '113510200', '113510300', '113510400', '113510500', '113510600', '113510700', '113510802', '113519900']).order(:codigo)
			render :new
		end
	end

	# PATCH/PUT /contabilidade/configuracoes_do_evento_contabil/1
	def update
		if @configuracao_do_evento_contabil.update( configuracao_do_evento_contabil_params )
			redirect_to @configuracao_do_evento_contabil.evento_contabil, notice: 'Configuração do evento contábil foi atualizada com sucesso.'
		else
			disponibiliza_status_baseado_no_model
			@contas_pcasp_da_conta_bancaria = contexto_atual.contas.where(codigo: ['111110100', '111110200', '111110602', '111110603', '111110604', '111111900']).order(:codigo)
			@contas_pcasp = contexto_atual.contas.where(codigo: ['111110100', '111110200', '111110602', '111110603', '111110604', '111111900', '113510100', '113510200', '113510300', '113510400', '113510500', '113510600', '113510700', '113510802', '113519900']).order(:codigo)
			render :edit
		end
	end

	# DELETE /contabilidade/configuracoes_do_evento_contabil/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@configuracao_do_evento_contabil)
		redirect_to contabilidade_configuracoes_do_evento_contabil_url, mensagem
	end

	private
	def disponibiliza_dependencias
		@elementos_de_despesa = contexto_atual.elementos_de_despesa
		@fontes_de_recurso = contexto_atual.fontes_de_recursos
	end

	def disponibiliza_status_baseado_no_model
		if @configuracao_do_evento_contabil.evento_contabil.empenho?
			@status = Contabilidade::ConfiguracaoDoEventoContabil.status_i18n.slice(:solicitado, :enviado_para_controladoria, :enviado_para_copfin, :enviado_para_contabilidade, :confirmado, :anulado, :recebido, :enviado_para_administrativo, :aguardando_alteracao_do_orcamento, :retornado_pela_controladoria, :retornado_pela_contabilidade)
		elsif @configuracao_do_evento_contabil.evento_contabil.liquidacao?
			@status = Contabilidade::ConfiguracaoDoEventoContabil.status_i18n.slice(:solicitado, :enviado_para_controladoria, :confirmado, :enviado_para_contabilidade, :recebido, :enviado_para_o_financeiro, :recebido_pelo_financeiro, :enviado_para_administrativo, :autorizado, :retornado_pela_contabilidade, :retornado_pela_controladoria)
		elsif @configuracao_do_evento_contabil.evento_contabil.pagamento?
			@status = Contabilidade::ConfiguracaoDoEventoContabil.status_i18n.slice(:solicitado, :confirmado, :aguardando_lote, :lote_gerado, :confirmado_por_lote_bancario)
		elsif @configuracao_do_evento_contabil.evento_contabil.recebimento_de_material?
			@status = Contabilidade::ConfiguracaoDoEventoContabil.status_i18n.slice(:aberto, :recebido, :confirmado, :devolvido_ao_fornecedor)
		end
	end

	def set_configuracao_do_evento_contabil
		@configuracao_do_evento_contabil = ConfiguracaoDoEventoContabil.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def configuracao_do_evento_contabil_params
		params.require(:contabilidade_configuracao_do_evento_contabil).permit(
			:evento_contabil_id, :status, :modalidade_do_empenho, :tipo_de_pessoa, :modulo_de_ativacao, :resto_a_pagar,
			:processado, :recebimento_com_classificacao,:configurou_unidade_orcamentaria_do_empenho_na_contabilidade,
			:empenho_complementar, :tipo_de_evento, :resto_a_pagar, :processado, :recebimento_com_classificacao,
			:alteracao_no_saldo, :tipo_de_projecao, :receita_de_deducao, :ativa_apenas_uma_vez, :exercicio_restos_a_pagar,
			:classificacao_do_imovel, :classificacao_da_obra, :tipo_do_imovel, :tipo_do_bem_da_obra,
			:uso_do_bem, :tipo_de_obra, :bem_lancado, :obra_tombada, :veio_de_uma_ordem, :conta_pcasp_id,
			:conta_pcasp_da_conta_bancaria_id, :extraorcamentario, :origem_da_retencao, :originado_de_um_evento_manual,
			:conta_pcasp_do_lancamento_manual_id, :fluxo_completo_do_empenho, :fluxo_completo_da_anulacao_do_empenho, 
			:tipo_de_credito, :origem_do_recurso, :cancelamento_por_falta_de_disponibilidade_de_caixa, :motivo_cancelamento,
			:tipo_de_resto_a_pagar, :classificacao_da_receita, :ultima_opcao_de_lancamento_da_receita, :conta_pcasp_destino_id,
			:plano_de_contas_encerrado, :ativacao_programada, :inversao_de_superavit_financeiro, :com_fonte_de_recursos, :origem_da_fonte,
			:classe_da_conta_pcasp, :originado_de_um_contrato, :modalidade_do_aditivo, :derivado_de_um_contrato, :estorno,
			:tipo_de_reconhecimento_do_passivo, :classificacao_vpd, :regime, :tipo_de_entidade, :detalhamento_vpd_da_liquidacao, :classificacao_pcasp,
			:tipo_de_conta_pcasp, :vem_de_pagamento_com_retencao, :deposito, :retencao, :consignacao, :aciona_sem_valor_de_retencoes, :tipo_de_ug, :ug_diferente,
			:aciona_em_fontes_comecadas_com_2, :duodecimo, :devolucao_duodecimo, :ativar_pela_subconta,  :ativar_para_todas_as_contas, 
			:possui_conta_bancaria, :dotacao_acrescimo, :abertura, :investimento_rpps, :tipo_de_material, :classificacao, :tipo_de_entrada, :retificadora,
			sub_elementos_de_despesa_da_configuracao_contabil_attributes: [
				:id,
				:incluir_todos_sub_elementos,
				:elemento_de_despesa_id,
				:sub_elemento_de_despesa_id,
				:_destroy
			],
			naturezas_da_receita_da_configuracao_contabil_attributes: [
				:id,
				:veio_do_form,
				:categoria_economica,
				:origem,
				:especie,
				:rubrica,
				:alinea,
				:subalinea,
				:detalhamento_optativo,
				:nivel_opcional_1,
				:nivel_opcional_2,
				:nivel_opcional_3,
				:codigo_completo,
				:_destroy
			],
			fontes_da_configuracao_contabil_attributes: [
				:id,
				:fonte_de_recursos_id,
				:_destroy
			]
		)
	end
end
end
