Files
Reem-Notas/app/models/consolidacao_motorista.rb

46 lines
1.8 KiB
Ruby

# app/models/consolidacao_motorista.rb
class ConsolidacaoMotorista < ApplicationRecord
# Nome da tabela fixado: o inflector pt-BR (config/initializers/inflections.rb)
# pode resolver o composto "consolidacao_motorista" no singular errado.
self.table_name = 'consolidacao_motoristas'
belongs_to :consolidacao
belongs_to :pagador, class_name: 'User', foreign_key: :pago_por, optional: true
has_many :consolidacao_entregas,
->(cm) { where(motorista_nome: cm.motorista_nome) },
foreign_key: :consolidacao_id,
primary_key: :consolidacao_id
validates :motorista_nome, presence: true
validates :motorista_nome, uniqueness: { scope: :consolidacao_id }
before_save :recalcular_valor
# ── Pagamento ───────────────────────────────────────────────
scope :pagos, -> { where.not(pago_em: nil) }
scope :pendentes, -> { where(pago_em: nil) }
def pago?
pago_em.present?
end
def marcar_pago!(user, forma:, nota_fiscal:)
update!(pago_em: Time.current, pago_por: user&.id, forma_pagamento: forma,
nota_fiscal: nota_fiscal)
end
def cancelar_pagamento!(_user)
update!(pago_em: nil, pago_por: nil, forma_pagamento: nil, nota_fiscal: nil)
end
def recalcular_valor
# Fonte única de verdade: o valor_aplicado capturado no momento da
# classificação (igual ao ConsolidacaoEntregasController#recalcular_motorista).
# Recalcular pelos preços atuais de Configuracao divergiria caso os preços
# mudassem depois das entregas já terem sido classificadas.
self.valor_total = consolidacao_entregas
.where(motorista_nome: motorista_nome)
.sum { |e| e.desconto? ? -e.valor_aplicado : e.valor_aplicado }
end
end