module Licitacao
class EmpenhosRetroativosDoContratoController < ApplicationController
	include ControllerConcern
	before_action :authenticate_usuario!
	before_action :autoriza_usuario!
	before_action :set_empenho_retroativo_do_contrato, only: [:show, :destroy]
	before_action :set_contrato, only: [:new, :create, :retorna_empenhos_retroativos_dados, :retorna_dados_saldo]

	# GET /licitacao/empenhos_retroativos_do_contrato/1
	def show
	end

	# GET /licitacao/empenhos_retroativos_do_contrato/new
	def new
		@empenho_retroativo_do_contrato = @contrato.empenhos_retroativos_do_contrato.new
		@empenho_retroativo_do_contrato.contrato_id = @contrato.id
		if (params[:todos] == 'true')
			@empenho_retroativo_do_contrato.data_do_empenho = params['data_do_empenho']
			@itens_do_contrato.each do |ic|
				saldo = ic.saldo_atual(params['data_do_empenho'].to_date)
				valor_unitario = ic.valor_unitario_para_o_empenho(params['data_do_empenho'].to_date).to_f
				quantidade = ic.quantidade
				@empenho_retroativo_do_contrato.itens_do_empenho_retroativo_do_contrato.build(item_do_contrato_id: ic.id, saldo: saldo, quantidade: quantidade, valor_unitario: valor_unitario)
			end
		elsif @empenho_retroativo_do_contrato.itens_do_empenho_retroativo_do_contrato.empty?
			@empenho_retroativo_do_contrato.itens_do_empenho_retroativo_do_contrato.build
		end
	end

	# POST /licitacao/empenhos_retroativos_do_contrato
	def create
		@empenho_retroativo_do_contrato = @contrato.empenhos_retroativos_do_contrato.new(empenho_retroativo_do_contrato_params)
		if @empenho_retroativo_do_contrato.save
			redirect_to licitacao_empenho_retroativo_do_contrato_path(@empenho_retroativo_do_contrato), notice: 'Empenho retroativo do contrato foi criado(a) com sucesso.'
		else
			render :new
		end
	end

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

	# Funções AJAX

	# GET
	def retorna_empenhos_retroativos_dados
		render json: {
			'na_vigencia_do_contrato': @contrato.dentro_da_vigencia_do_contrato(params[:data_do_empenho])
		}
	end

	#GET
	def retorna_dados_saldo
		item = Licitacao::ItemDoContrato.find(params[:item])
		render json: {
			'saldo_para_empenho_atual': item.saldo_atual(params['data_do_empenho'].to_date),
			'valor_unitario': item.valor_unitario_para_o_empenho(params['data_do_empenho'].to_date).to_f
		}
	end

	private
	def set_empenho_retroativo_do_contrato
		@empenho_retroativo_do_contrato = Licitacao::EmpenhoRetroativoDoContrato.find( params[:id] )
	end

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

	def empenho_retroativo_do_contrato_params
		params.require(:licitacao_empenho_retroativo_do_contrato).permit(
			:contrato_id, :numero_empenho, :data_do_empenho,
			itens_do_empenho_retroativo_do_contrato_attributes:
			[:id, :empenho_retroativo_do_contrato_id, :quantidade, :valor_unitario, :total, :item_do_contrato_id, :_destroy])
	end
end
end