Consolidação — multi-pilar: - Uma entrega pode ter vários pilares ao mesmo tempo (Normal + Bônus + Retirada…), somando os valores. Toggles viraram multi-seleção (liga/desliga por pilar; classificar agora faz toggle, em massa só adiciona). - migration: unicidade passa de [consolidacao_id, tracking_id] para [consolidacao_id, tracking_id, tipo]. - classificadas_count/resumo contam entregas distintas (≥1 pilar). Configurações: - /admin/configuracoes lista só os pilares de PREÇO (empresa/notificações não são preço e saíram da tela). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
38 lines
1.4 KiB
Ruby
38 lines
1.4 KiB
Ruby
# app/models/consolidacao_entrega.rb
|
|
class ConsolidacaoEntrega < ApplicationRecord
|
|
# Nome da tabela fixado (mesmo motivo de ConsolidacaoMotorista — inflector pt-BR).
|
|
self.table_name = 'consolidacao_entregas'
|
|
|
|
belongs_to :consolidacao
|
|
|
|
enum tipo: {
|
|
entrega_normal: 0,
|
|
retirada: 1,
|
|
bonus: 2,
|
|
desconto: 3
|
|
}
|
|
|
|
TIPO_CORES = {
|
|
'entrega_normal' => { bg: 'bg-orange-500', text: 'text-white', label: 'Entrega Normal' },
|
|
'retirada' => { bg: 'bg-orange-800', text: 'text-white', label: 'Retirada' },
|
|
'bonus' => { bg: 'bg-white border border-orange-500', text: 'text-black', label: 'Bônus' },
|
|
'desconto' => { bg: 'bg-gray-900', text: 'text-white', label: 'Desconto' }
|
|
}.freeze
|
|
|
|
# Uma entrega pode ter vários pilares (Normal + Bônus + Retirada…),
|
|
# mas não o mesmo pilar repetido.
|
|
validates :tracking_id, presence: true, uniqueness: { scope: %i[consolidacao_id tipo] }
|
|
validates :motorista_nome, presence: true
|
|
validates :tipo, presence: true
|
|
validates :valor_aplicado, presence: true, numericality: { greater_than_or_equal_to: 0 }
|
|
|
|
# Busca a entrega original (leitura do banco existente)
|
|
def entrega_original
|
|
@entrega_original ||= Entrega.find_by(tracking_id: tracking_id)
|
|
end
|
|
|
|
def tipo_cor
|
|
TIPO_CORES[tipo] || TIPO_CORES['entrega_normal']
|
|
end
|
|
end
|