module Licitacao
class ComissoesController < ApplicationController
	include ControllerConcern
	include LicitacoesContabilidadeControllersConcern

	before_action :authenticate_usuario!
	before_action :autoriza_usuario!, except:[:retorna_comissoes]
	before_action :set_comissao, only: [:show, :edit, :update, :destroy,:extinguir_comissao]
	before_action :disponibiliza_dependencias, only: [:new, :edit]

	# GET /licitacao/comissoes
	def index
		orcamento = Orcamento.find_by( exercicio: params[:exercicio] ) || contexto_atual
		@unidades_gestoras = orcamento_atual.unidades_gestoras.order("loa_unidades_gestoras.codigo::integer")
		@q = Comissao.joins(:unidade_gestora).where(unidade_gestora: @unidades_gestoras).where('orcamento_id = ? or orcamento_id is null', orcamento.id).order(:id).ransack(query_params)
		@comissoes = @q.result(distinct: false).paginate(page: params[:page], per_page: 15)
	end

	# GET /licitacao/comissoes/1
	def show
	end

	# GET /licitacao/comissoes/new
	def new
		orcamento = Orcamento.find_by( exercicio: params[:exercicio] ) || contexto_atual
		@comissao = Comissao.new(orcamento_id: orcamento.id)
	end

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

	# POST /licitacao/comissoes
	def create
		@comissao = Comissao.new(comissao_params)

		if @comissao.save
			redirect_to @comissao, notice: 'Comissão foi criado(a) com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	# PATCH/PUT /licitacao/comissoes/1
	def update
		if @comissao.update( comissao_params )
			redirect_to @comissao, notice: 'Comissão foi atualizado(a) com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	def extinguir_comissao
		if params[:data_da_extincao]  != "" && params[:numero_da_portaria_de_extincao]  != ""
			@comissao.update(data_da_extincao: params[:data_da_extincao], numero_da_portaria_de_extincao: params[:numero_da_portaria_de_extincao] )
			@comissao.membros_da_comissao.each do |membro|
				membro.update(data_de_saida: params[:data_da_extincao])
			end
				redirect_to @comissao, notice: 'Comissão foi extinta com sucesso.'
		else
			redirect_to @comissao, notice: 'Preencha os campos pedidos para extinguir a comissão'
		end
	end

	# DELETE /licitacao/comissoes/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@comissao)
		redirect_to licitacao_comissoes_url, mensagem
	end

	def retorna_comissoes
		data_periodo = Date.new(contexto_atual.exercicio, 1, 1)
		comissoes = Licitacao::Comissao.joins(:unidade_gestora, :membros_da_comissao).where('orcamento_id = ? or orcamento_id is null', contexto_atual.id).where("loa_unidades_gestoras.data_encerramento >= ? or loa_unidades_gestoras.data_encerramento is null", data_periodo).where('licitacao_comissoes.tipo_de_comissao in (?)', [Licitacao::Comissao.tipos_de_comissoes["comissao_de_selecao"],Licitacao::Comissao.tipos_de_comissoes["comissao_de_monitoramento_e_avaliacao"]]).where(data_da_extincao: nil).distinct.order(:id) if params[:modalidade_do_processo_enum].eql?('parceria_osc')
		comissoes = Licitacao::Comissao.joins(:unidade_gestora, :membros_da_comissao).where('orcamento_id = ? or orcamento_id is null', contexto_atual.id).where("loa_unidades_gestoras.data_encerramento >= ? or loa_unidades_gestoras.data_encerramento is null", data_periodo).where('licitacao_comissoes.tipo_de_comissao in (?)', [Licitacao::Comissao.tipos_de_comissoes["permanente"],Licitacao::Comissao.tipos_de_comissoes["especial"]]).where(data_da_extincao: nil).distinct.order(:id) if !params[:modalidade_do_processo_enum].eql?('parceria_osc')
		render json: comissoes.map{|comissao| {key: comissao[:id], nome: comissao.nome_tipo_numero_da_portaria_e_unidade}}
	end

	private
	def set_comissao
		@comissao = Comissao.find( params[:id] )
	end

	def disponibiliza_dependencias
		@unidades_gestoras = orcamento_atual.unidades_gestoras.order("loa_unidades_gestoras.codigo::integer")
		@tipos_de_comissoes = Licitacao::Comissao.tipos_de_comissoes
		@cidades = Base::Cidade.where(estado_id: @comissao.try(:estado_id))
	end

	# Permite apenas os parâmetros específicos
	def comissao_params
		params.require(:licitacao_comissao).permit(
			:unidade_gestora_id, :numero, :numero_da_portaria, :tipo_de_comissao, :data_da_extincao, :numero_da_portaria_de_extincao, :nome,
			:data_da_portaria, :cep, :rua, :bairro, :estado_id, :cidade_id, :numero_da_rua, :orcamento_id, :data_de_criacao, :de_parceria
		)
	end
end
end
