class Contabilidade::LiquidacaoDoRpCancelado < ApplicationRecord
  has_paper_trail

  belongs_to :resto_a_pagar_cancelado, class_name: 'Contabilidade::RestoAPagarCancelado'
  belongs_to :liquidacao, class_name: 'Contabilidade::Liquidacao'

  has_many :itens_dos_rps_cancelados, class_name: 'Contabilidade::ItemDoRpCancelado'

  accepts_nested_attributes_for :itens_dos_rps_cancelados, reject_if: :all_blank, allow_destroy: true

	validates :itens_dos_rps_cancelados, uniq_nested_attributes: { atributo: :item_id, mensagem: "Item deve ser único" }
  validate :valida_valor_a_ser_cancelado

  validates_presence_of :resto_a_pagar_cancelado_id, :liquidacao_id, :valor_cancelado
  
  def saldo_da_liquidacao_rp
    self.liquidacao.valor.to_d - self.liquidacao.pagamentos.sum(&:valor).to_d - valor_cancelado_da_liquidacao.to_d
  end

  def valor_cancelado_da_liquidacao
    liquidacoes_canceladas =  Contabilidade::LiquidacaoDoRpCancelado.where(liquidacao_id: self.liquidacao_id).where('id <> ?', self.try(:id))

    return liquidacoes_canceladas.sum(&:valor_cancelado)
  end

  def valida_valor_a_ser_cancelado
    errors.add(:valor_cancelado, 'Valor Cancelado não pode ser superior ao saldo disponível para cancelamento.') if self.valor_cancelado.to_f > saldo_da_liquidacao_rp.to_f
  end

end
