module Contabilidade
class PassagensController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_passagem, only: [:show, :edit, :update, :destroy]
	before_action :disponibiliza_dependencias, only: [:new, :edit, :create, :update]
	before_action -> { verifica_acesso_usuario(@passagem) }, except: [:index, :new, :create]

	# GET /contabilidade/passagens
	def index
		@q = contexto_atual.passagens.order(:id).ransack(query_params)
		@passagens = @q.result(distinct: false).paginate(page: params[:page], per_page: 10)

		if current_usuario.desenvolvedor?
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.order(:codigo, :nome)
		else
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.where(id: current_usuario.unidades_orcamentarias_por_usuario.pluck(:unidade_orcamentaria_id)).order(:codigo, :nome)
		end

		@fornecedor = Base::Pessoa.includes(:tipo_de_pessoa).where(fornecedor: true)
		@contrato_de_passagens = Licitacao::Contrato.all.joins(:passagens)
	end

	# GET /contabilidade/passagens/1
	def show
	end

	# GET /contabilidade/passagens/new
	def new
		@passagem = Contabilidade::Passagem.new
	end

	# GET /contabilidade/passagens/1/edit
	def edit
	end

	# POST /contabilidade/passagens
	def create
		@passagem = contexto_atual.passagens.new(passagem_params)
		if @passagem.save
			redirect_to passagem_path(@passagem), notice: 'Passagem foi criada com sucesso.'
		else
			disponibiliza_dependencias
			render :new
		end
	end

	# PATCH/PUT /contabilidade/passagens/1
	def update
		if @passagem.update( passagem_params )
			redirect_to passagem_path(@passagem), notice: 'Passagem foi atualizada com sucesso.'
		else
			disponibiliza_dependencias
			render :edit
		end
	end

	# DELETE /contabilidade/passagens/1
	def destroy
		mensagem = apaga_e_retorna_mensagem(@passagem)
		redirect_to passagens_path, mensagem
	end

	def disponibiliza_dependencias
		@modalidades_de_licitacao = Licitacao::Projeto.modalidades_de_licitacao
		@estados = Base::Estado.all
		@cidades = Base::Cidade.all
		if current_usuario.desenvolvedor?
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias
		else
			@unidades_orcamentarias = contexto_atual.unidades_orcamentarias.where(id: current_usuario.unidades_orcamentarias_por_usuario.pluck(:unidade_orcamentaria_id))
		end
		@contratos = []
		@diarias = []

		if @passagem && @passagem.persisted?
			@projetos = [@passagem.projeto]
			@contratos = [@passagem.contrato]
			@diarias = contexto_atual.diarias.where.not(id: Contabilidade::Passagem.all.pluck(:diaria_id))or(Contabilidade::Diaria.where(id: @passagem.diaria_id)).where(unidade_orcamentaria_id: @passagem.unidade_orcamentaria_id)
		else
			@projetos = contexto_atual.projetos.homologado.where.not(numero_do_processo: nil).order(orcamento_id: :desc).distinct
			if @passagem && @passagem.projeto.present?
				if !@passagem.unidade_orcamentaria_id.nil?
					@contratos = @passagem.projeto.contratos.where(unidade_orcamentaria_do_exercicio_id: @passagem.unidade_orcamentaria_id).all
				else
					@contratos = @passagem.projeto.contratos.all
				end
			end
		end
	end

	private
	def set_passagem
		@passagem = Passagem.find( params[:id] )
	end

	# Permite apenas os parâmetros específicos
	def passagem_params
		params.require(:contabilidade_passagem).permit(:possui_vinculo_com_diaria, :modalidade_de_licitacao, :data_de_cadastro,:unidade_orcamentaria_id, :data_ida, :data_volta, :cidade_destino_id, :cidade_origem_id, :classificacao, :origem, :destino, :orcamento_id, :projeto_id, :tipo, :identificador, :empresa, :valor, :trajeto, :historico, :contrato_id, :diaria_id)
	end
end
end
