31 lines
1016 B
Ruby
31 lines
1016 B
Ruby
|
|
# Feature branch version: adds "returned" status but misses consumers
|
||
|
|
class Order < ApplicationRecord
|
||
|
|
STATUSES = %w[pending processing shipped delivered returned].freeze
|
||
|
|
|
||
|
|
validates :status, inclusion: { in: STATUSES }
|
||
|
|
|
||
|
|
def display_status
|
||
|
|
case status
|
||
|
|
when 'pending' then 'Awaiting processing'
|
||
|
|
when 'processing' then 'Being prepared'
|
||
|
|
when 'shipped' then 'On the way'
|
||
|
|
when 'delivered' then 'Delivered'
|
||
|
|
# BUG: 'returned' not handled — falls through to nil
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
def can_cancel?
|
||
|
|
# BUG: should 'returned' be cancellable? Not considered.
|
||
|
|
%w[pending processing].include?(status)
|
||
|
|
end
|
||
|
|
|
||
|
|
def notify_customer
|
||
|
|
case status
|
||
|
|
when 'pending' then OrderMailer.confirmation(self).deliver_later
|
||
|
|
when 'shipped' then OrderMailer.shipped(self).deliver_later
|
||
|
|
when 'delivered' then OrderMailer.delivered(self).deliver_later
|
||
|
|
# BUG: 'returned' has no notification — customer won't know return was received
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|