module Contabilidade
class GruposDeRetencoesDoControleDePagamentoController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_grupo_de_retencao_do_controle_de_pagamento, only: [:editar_grupo_de_contas, :atualizar_grupo_de_contas, :destroy]

	# DELETE /contabilidade/grupos_de_retencoes_do_controle_de_pagamento/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@grupo_de_retencao_do_controle_de_pagamento)
		redirect_to contabilidade_grupos_de_retencoes_do_controle_de_pagamento_url, mensagem
	end

	def editar_grupo_de_contas
		@controle_de_pagamento = @grupo_de_retencao_do_controle_de_pagamento.controle_de_pagamento
		@contas_destino = Base::ContaBancaria.where("data_de_inativacao >= ? OR data_de_inativacao is null", Date.today).left_outer_joins(agencia: :banco).includes(agencia: :banco).order(sigla: :asc, numero_da_conta: :asc)
	end

	def atualizar_grupo_de_contas
		if @grupo_de_retencao_do_controle_de_pagamento.update(grupo_de_retencao_do_controle_de_pagamento_params)
			if params[:atualizar_contas].present?
				redirect_to editar_grupo_de_contas_contabilidade_grupos_de_retencoes_do_controle_de_pagamento_path(id: @grupo_de_retencao_do_controle_de_pagamento.id, atualizar_contas: true), notice: 'Filtro Selecionado'
			else
				redirect_to @grupo_de_retencao_do_controle_de_pagamento.controle_de_pagamento
			end
		else
			@contas_destino = Base::ContaBancaria.where("data_de_inativacao >= ? OR data_de_inativacao is null", Date.today).left_outer_joins(agencia: :banco).includes(agencia: :banco).order(sigla: :asc, numero_da_conta: :asc)
			@controle_de_pagamento = @grupo_de_retencao_do_controle_de_pagamento.controle_de_pagamento
			render :editar_grupo_de_contas
		end
	end

	private
	def set_grupo_de_retencao_do_controle_de_pagamento
		@grupo_de_retencao_do_controle_de_pagamento = GrupoDeRetencaoDoControleDePagamento.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def grupo_de_retencao_do_controle_de_pagamento_params
		params.require(:contabilidade_grupo_de_retencao_do_controle_de_pagamento).permit(
			:controle_de_pagamento_id, :conta_extra_orcamentaria_id, :por_fonte, :por_unidade_gestora, :acao,
			conjuntos_de_contas_do_grupo_de_retencao_attributes: [
				:id, 
				:valor,
				:liquidacao_id, 
				:cadastrado_no_form,
				:conta_origem_id,
				:conta_destino_id,
				:unidade_orcamentaria_id,
				:fonte_de_recurso_id,
				:grupo_de_retencao_do_controle_de_pagamento_id,
				:conjunto_padrao,
				:cadastrado_no_form,
				:_destroy,
			]
		)
	end
end
end
