class Obra::ServicoDaObra < ApplicationRecord
	has_paper_trail

	belongs_to :obra, class_name: "Contabilidade::Obra"

	has_many :itens_do_servico_da_obra, class_name: "Obra::ItemDoServicoDaObra", dependent: :destroy
	has_many :itens_do_servico_da_medicao_da_obra, through: :itens_do_servico_da_obra, class_name: 'Obra::ItemDoServicoDaMedicaoDaObra'

	accepts_nested_attributes_for :itens_do_servico_da_obra, reject_if: :all_blank, allow_destroy: true

	validates :codigo, :descricao, presence: true
	validates_length_of :codigo, maximum: 5

	before_create :gerar_numero
	after_destroy :reordenar_numero

	def valor_total_dos_itens_do_servico_da_obra
		itens_do_servico_da_obra.sum(&:valor_total).to_d.round(2)
	end

	def percentual_servico_sobre_obra
		((valor_total_dos_itens_do_servico_da_obra * 100) / self.obra.contrato.valor_total_do_contrato).round(2).to_f;
	end

	private

	def gerar_numero
		self.identificador = obra.servicos_da_obra.maximum(:identificador).to_i + 1
	end

	def reordenar_numero
		proximo_numero = 1
		if obra.servicos_da_obra.any?
			obra.servicos_da_obra.order(:identificador).each do |foto|
				foto.update_column(:identificador, proximo_numero)
				proximo_numero += 1
			end
		end
	end
end
