module Licitacao
class GestoresDoContratoController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, except: [:new, :edit, :create, :update, :destroy, :retorna_cargo]
	before_action :set_gestor_do_contrato, only: [:edit, :update, :destroy]
	before_action :disponibiliza_dependencias, only: [:edit, :new, :create, :update]
	before_action :set_contrato, only: [:new, :edit, :create, :update]


	# GET /licitacao/gestores_do_contrato/new
	def new
		return if bloqueia_usuario_com_base_em 'create', 'licitacao/gestores_do_contrato'
		@gestor_do_contrato = Licitacao::GestorDoContrato.new
	end

	# GET /licitacao/gestores_do_contrato/1/edit
	def edit
	end

	# POST /licitacao/gestores_do_contrato
	def create
		@gestor_do_contrato = GestorDoContrato.new(gestor_do_contrato_params)

		if @gestor_do_contrato.save
			redirect_to licitacao_contrato_path(@gestor_do_contrato.contrato) + "?tab=gestores_do_contrato", notice: 'Gestor do contrato foi criado(a) com sucesso.'
		else
			render :new
		end
	end

	# PATCH/PUT /licitacao/gestores_do_contrato/1
	def update
		if @gestor_do_contrato.update( gestor_do_contrato_params )
			redirect_to licitacao_contrato_path(@gestor_do_contrato.contrato) + "?tab=gestores_do_contrato", notice: 'Gestor do contrato foi atualizado(a) com sucesso.'
		else
			render :edit
		end
	end

	# DELETE /licitacao/gestores_do_contrato/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@gestor_do_contrato)
		redirect_to licitacao_contrato_path(@gestor_do_contrato.contrato) + "?tab=gestores_do_contrato", mensagem
	end

	#GET licitacao/gestores_do_contrato/retorna_cargo?agente_id=:agente_id
	def retorna_cargo
		@agente = Base::AgentePublicoMunicipal.find_by(id: params[:agente_id])
		render json: {
			'cargo': @agente.tipo_de_cargo? ? @agente.localizar(:tipo_de_cargo) : ' ',
		}
	end

	private
	def set_gestor_do_contrato
		@gestor_do_contrato = GestorDoContrato.find( params[:id] )
	end

	def set_contrato
		@contrato = Licitacao::Contrato.find(params[:contrato_id])
	end

	def disponibiliza_dependencias
		@agentes_publicos = Base::AgentePublicoMunicipal.joins(unidade_orcamentaria: {orgao: :orcamento}).where('orcamentos.exercicio = ?', exercicio_atual)
	end

	# Permite apenas os parâmetros específicos
	def gestor_do_contrato_params
		params.require(:licitacao_gestor_do_contrato).permit(:contrato_id, :agente_publico_id, :numero_da_portaria, :vigencia_inicial_da_portaria, :ativo, :cargo, :matricula)
	end
end
end
