Class: Workarea::Admin::OrderTimelineViewModel
- Inherits:
-
ApplicationViewModel
- Object
- ApplicationViewModel
- Workarea::Admin::OrderTimelineViewModel
- Includes:
- Enumerable
- Defined in:
- app/view_models/workarea/admin/order_timeline_view_model.rb
Defined Under Namespace
Classes: Entry
Instance Method Summary collapse
- #by_day ⇒ Object
- #canceled_entry ⇒ Object
- #checkout_by ⇒ Object
- #comment_entries ⇒ Object
- #copied_entries ⇒ Object
- #created_entry ⇒ Object
- #entries ⇒ Object
- #fulfillment_entries ⇒ Object
- #payment_entries ⇒ Object
- #placed_entry ⇒ Object
- #price_override_entry ⇒ Object
Instance Method Details
#by_day ⇒ Object
42 43 44 45 46 47 48 49 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 42 def by_day @days ||= entries.reduce({}) do |memo, entry| day = entry.occured_at.to_date memo[day] ||= [] memo[day] << entry memo end end |
#canceled_entry ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 118 def canceled_entry return if model.canceled_at.blank? audit_log_entry = model.audit_log_entries.detect do |event| event.tracked_changes['canceled_at'].present? && event.tracked_changes['canceled_at'].first.blank? && event.tracked_changes['canceled_at'].last.present? end Entry.new( :canceled, model.canceled_at, audit_log_entry.try(:modifier), model ) end |
#checkout_by ⇒ Object
135 136 137 138 139 140 141 142 143 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 135 def checkout_by @checkout_by ||= User.where(id: model.checkout_by_id).first || User.where(id: model.user_id).first || User.new( email: model.email, name: "#{payment.first_name} #{payment.last_name}" ) end |
#comment_entries ⇒ Object
100 101 102 103 104 105 106 107 108 109 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 100 def comment_entries model.comments.map do |comment| Entry.new( :comment, comment.created_at, User.where(id: comment.).first, comment ) end end |
#copied_entries ⇒ Object
111 112 113 114 115 116 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 111 def copied_entries Order.copied_from(model.id).map do |order| copier = order.audit_log_entries.desc(:created_at).first.try(:modifier) Entry.new(:copied, order.created_at, copier, order) end end |
#created_entry ⇒ Object
51 52 53 54 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 51 def created_entry return if model.created_at.blank? Entry.new(:created, model.created_at, checkout_by, model) end |
#entries ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 22 def entries @entries ||= begin result = [] result << created_entry if created_entry.present? result << placed_entry if placed_entry.present? result += payment_entries result += fulfillment_entries result << canceled_entry if canceled_entry.present? result += comment_entries result += copied_entries result << price_override_entry if price_override_entry.present? result .reject { |r| r.occured_at.blank? } .sort_by(&:occured_at) .reverse end end |
#fulfillment_entries ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 76 def fulfillment_entries results = [] grouped = fulfillment.events.group_by do |event| [event.status, event.created_at] end grouped.each do |(type, created_at), events| # Try to find the audit log entry based on rounding creation to # nearest second. audit_log_entry = fulfillment.audit_log_entries.detect do |entry| entry.created_at.round.to_i == created_at.round.to_i end results << Entry.new( type == 'canceled' ? :canceled_fulfillment : type.to_sym, created_at, audit_log_entry.try(:modifier), events ) end results end |
#payment_entries ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 61 def payment_entries # TODO v4 - use payment.transactions transactions = Payment::Transaction.where(payment_id: payment.id).to_a transactions.reduce([]) do |memo, transaction| admin_modifier = transaction.audit_log_entries.first.try(:modifier) memo << Entry.new( transaction.action.to_sym, transaction.created_at, admin_modifier || checkout_by, transaction ) end end |
#placed_entry ⇒ Object
56 57 58 59 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 56 def placed_entry return if model.placed_at.blank? Entry.new(:placed, model.placed_at, checkout_by, model) end |
#price_override_entry ⇒ Object
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 |
# File 'app/view_models/workarea/admin/order_timeline_view_model.rb', line 145 def price_override_entry return @price_override_entry if defined?(@price_override_entry) override = Pricing::Override.find(model.id) @price_override_entry = if override.has_adjustments? Admin::OrderTimelineViewModel::Entry.new( :price_overridden, override.created_at, User.find(override.created_by_id), override ) end rescue Mongoid::Errors::DocumentNotFound @price_override_entry = nil end |