class Patrimonio::EmpenhoDoRecebimento < ApplicationRecord
  has_paper_trail

  belongs_to :recebimento_de_bem, class_name: 'Patrimonio::RecebimentoDeBem'
  belongs_to :empenho, class_name: 'Contabilidade::Empenho'

  validate :valida_valor_menor_ou_igual_a_saldo_para_ordem_de_compra, if: Proc.new { self.recebimento_de_bem.multiplos_empenhos.present? }

  validates_presence_of :empenho_id, :valor_atual, :valor, if: Proc.new { self.recebimento_de_bem.multiplos_empenhos.present? }
  validates_uniqueness_of :empenho_id, scope: :recebimento_de_bem_id, message: 'Deve ser único'
  validates_numericality_of :valor, greater_than_or_equal_to: 0, if: proc { self.empenho_id.present? }

  def valida_valor_menor_ou_igual_a_saldo_para_ordem_de_compra
    valor_do_empenho = self.valor.present? ? self.valor : 0
    errors.add(:empenho_id, "O valor do empenho deve ser menor ou igual ao saldo da ordem de compra.") unless self.empenho.saldo_para_recebimento_multiplos >= valor_do_empenho
  end
end
