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

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

		# GET /contabilidade/convenios/1
		def show
			@empenhos = contexto_atual.empenhos.where(convenio_id: @convenio.id).all
		end

		# GET /contabilidade/convenios/new
		def new
			@convenio = contexto_atual.convenios.new
			@convenio.sugestao_de_codigo_para_a_proxima_acao
		end

		# GET /contabilidade/convenios/1/edit
		def edit
			@convenio.orgao_id = @convenio.try(:unidade_orcamentaria).try(:orgao).try(:id)
		end

		# POST /contabilidade/convenios
		def create
			@convenio = contexto_atual.convenios.new(convenio_params)
			if @convenio.save
				redirect_to @convenio, notice: 'Convênio foi criado(a) com sucesso.'
			else
				disponibiliza_dependencias
				render :new
			end
		end

		# PATCH/PUT /contabilidade/convenios/1
		def update
			if @convenio.update( convenio_params )
				redirect_to @convenio, notice: 'Convenio foi atualizado(a) com sucesso.'
			else
				disponibiliza_dependencias
				render :edit
			end
		end

		# DELETE /contabilidade/convenios/1
		def destroy
			mensagem = apaga_e_retorna_mensagem(@convenio)
			redirect_to contabilidade_convenios_url( contexto_atual ), mensagem
		end

		def prepara_importacao
			@convenios_ppa = []
			if contexto_atual.tem_convenio_ppa_nao_importado?
				contexto_atual.ppa.convenios.each do |convenio_ppa|
					unless contexto_atual.convenios.includes(:valores_do_convenio).where("contabilidade_convenios.convenio_id = ?", convenio_ppa.id).present?
						@convenios_ppa << convenio_ppa
					end
				end
			else
				redirect_to contabilidade_convenios_path(contexto_atual.exercicio), notice: "Não é possivel importar Convênios do ppa quando já existem convênios cadastrados"
			end
		end

		def importar
			if params[:ppa_convenios].present?
				status = Contabilidade::Convenio.importa_convenios_para_orcamento params[:ppa_convenios], contexto_atual.id

				if status[:resultado]
					redirect_to contabilidade_convenios_path(contexto_atual.exercicio), success: "#{params[:ppa_convenios].size} convênio(s) importado(s)."
				else
					redirect_to contabilidade_convenios_path(contexto_atual.exercicio), notice: "#{status[:msg]}"
				end
			else
				redirect_to contabilidade_importar_convenio_ppa_path(contexto_atual), notice: "Nenhum convênio selecionado para importação."
			end
		end

		private

		def set_convenio
			@convenio = Convenio.find( params[:id] )
		end

		def disponibiliza_dependencias
			@tipos_de_transferencia = Base::TipoDeTransferencia.order('numero DESC')
			@modalidades = Contabilidade::Convenio.modalidades
			@naturezas_da_receita = contexto_atual.try(:naturezas_da_receita).try(:podem_ser_orcadas)
			@funcoes = contexto_atual.try(:funcoes).try(:all)
			@tipos_de_esfera = contexto_atual.try(:tipos_de_esfera).try(:all)
			@orgaos = contexto_atual.try(:orgaos)
			@receitas_correntes = contexto_atual.try(:naturezas_da_receita).try(:correntes, contexto_atual.try(:utiliza_novo_tipo_para_receita?)).try(:de_convenio).try(:analiticas)
			@receitas_de_capital = contexto_atual.try(:naturezas_da_receita).try(:de_capital, contexto_atual.try(:utiliza_novo_tipo_para_receita?)).try(:de_convenio).try(:analiticas)
		end

		# Permite apenas os parâmetros específicos
		def convenio_params
			params.require(:contabilidade_convenio).permit(:orcamento_id, :numero, :data_da_celebracao,
				:inicio_da_vigencia, :fim_da_vigencia, :valor_do_repasse, :valor_do_repasse,
				:valor_da_contrapartida, :valor_da_contrapartida, :cedente, :funcao_id,
				:tipo_de_esfera_id, :unidade_orcamentaria_id, :descricao, :identificacao_da_transferencia_do_municipio,
				:modalidade, :tipo_de_transferencia_id, :contexto_atual_convenio, :orgao_id, :receita_corrente_id,
				:receita_de_capital_id)
		end
	end
end
