module Obra
class PreConveniosController < ApplicationController
	include ControllerConcern
	include ObraControllersConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, except: [:gerar_convenio, :editar_fontes, :adiciona_fontes]
	before_action :set_pre_convenio, only: [:show, :edit, :update, :destroy, :gerar_convenio, :editar_fontes, :adiciona_fontes]
	before_action :disponibiliza_dependencias, only: [:index, :create, :new, :update, :edit]

	# GET /obra/pre_convenios
	def index
		@q = PreConvenio.order(:id).search(params[:q])
		@pre_convenios = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)
		@unidades_orcamentarias = orcamento_atual.unidades_orcamentarias_do_usuario(current_usuario).joins(:tipo_de_unidade_administrativa).where.not(base_tipos_de_unidades_administrativas: {codigo: '99'}).order( :codigo )
	end

	# GET /obra/pre_convenios/1
	def show
	end

	# GET /obra/pre_convenios/new
	def new
		@pre_convenio = PreConvenio.new
	end

	# GET /obra/pre_convenios/1/edit
	def edit
	end

	# POST /obra/pre_convenios
	def create
		@pre_convenio = PreConvenio.new(pre_convenio_params)

		if @pre_convenio.save
			redirect_to @pre_convenio, notice: 'Pré-Convênio foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /obra/pre_convenios/1
	def update
		if @pre_convenio.update( pre_convenio_params )
			redirect_to @pre_convenio, notice: 'Pré-Convênio foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /obra/pre_convenios/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@pre_convenio)
		redirect_to obra_pre_convenios_url, mensagem
	end

	#PATCH	/obra/pre_convenios/:id/gerar_convenio
	def gerar_convenio
		return if bloqueia_usuario_com_base_em 'update'
		if @pre_convenio.gerar_convenio
			redirect_to @pre_convenio, notice: 'Convênio foi gerado com sucesso.'
		else
			redirect_to @pre_convenio, notice: 'Erro ao gerar Convênio.'
		end
	end

	#PATCH /obra/fiscalizacoes/1/adiciona_fotos
	def editar_fontes
		return if bloqueia_usuario_com_base_em 'update'
		disponibiliza_dependencias_fontes_de_recursos
		@pre_convenio.fontes_de_recursos_do_pre_convenio.build unless @pre_convenio.fontes_de_recursos_do_pre_convenio.any?
	end

	def adiciona_fontes
		return if bloqueia_usuario_com_base_em 'update'
		if @pre_convenio.update(pre_convenio_params)
			redirect_to @pre_convenio, notice: 'Fontes de Recursos cadastradas com sucesso.'
		else
			disponibiliza_dependencias_fontes_de_recursos
			render :editar_fontes
		end
	end

	private
	def set_pre_convenio
		@pre_convenio = Obra::PreConvenio.find( params[:id] )
	end

	def disponibiliza_dependencias
		@orgaos = orcamento_atual.orgaos_do_usuario(current_usuario).joins(:tipo_de_unidade_administrativa).where.not(base_tipos_de_unidades_administrativas: {codigo: '99'}).order( :codigo )
		@fornecedores = Base::Pessoa.includes(:tipo_de_pessoa).fornecedores.all
		@funcoes = orcamento_atual.funcoes.all

		@unidades_orcamentarias = []
		if @pre_convenio && @pre_convenio.persisted?
			@unidades_orcamentarias = @pre_convenio.unidade_orcamentaria.orgao.unidades_orcamentarias
		end
	end

	def disponibiliza_dependencias_fontes_de_recursos
		@fontes_de_recursos = obra_atual.fontes_de_recursos.order(:codigo)
	end

	# Permite apenas os parâmetros específicos
	def pre_convenio_params
		params.require(:obra_pre_convenio).permit(:data_do_cadastro, :modalidade, :unidade_orcamentaria_id, :orgao_cedente_id, :funcao_id, :valor_repasse, :valor_contrapartida, :valor_total, :prazo_de_execucao, :objeto,
			fontes_de_recursos_do_pre_convenio_attributes: [:id, :fonte_de_recurso_id, :pre_convenio_id, :valor, :_destroy])
	end
end
end
