Module: Spree::FlowIoOrderDecorator
- Defined in:
- app/models/spree/flow_io_order_decorator.rb
Overview
Added flow specific methods to Spree::Order
Class Method Summary collapse
Instance Method Summary collapse
- #add_user_uuid_to_flow_data ⇒ Object
- #display_total ⇒ Object
- #flow_allocations ⇒ Object
- #flow_bill_address ⇒ Object
- #flow_customer_email ⇒ Object
- #flow_io_attr_user_uuid ⇒ Object
- #flow_io_attribute_add(attr_key, value) ⇒ Object
- #flow_io_attributes ⇒ Object
- #flow_io_balance_amount ⇒ Object
- #flow_io_captures ⇒ Object
- #flow_io_captures_sum ⇒ Object
- #flow_io_experience_from_zone ⇒ Object
- #flow_io_experience_key ⇒ Object
- #flow_io_order_id ⇒ Object
- #flow_io_payments ⇒ Object
-
#flow_io_total_amount ⇒ Object
shows localized total, if possible.
-
#flow_line_item_price(line_item, total = false) ⇒ Object
accepts line item, usually called from views.
- #flow_order ⇒ Object
- #flow_order_with_payments? ⇒ Boolean
- #flow_ship_address ⇒ Object
- #flow_tax_cache_key ⇒ Object
- #flow_tax_for_item(item, tax_key, included_in_price = true) ⇒ Object
- #prepare_flow_addresses ⇒ Object
Class Method Details
.included(base) ⇒ Object
6 7 8 9 10 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 6 def self.included(base) base.serialize :meta, ActiveRecord::Coders::JSON.new(symbolize_keys: true) base.store_accessor :meta, :flow_data end |
Instance Method Details
#add_user_uuid_to_flow_data ⇒ Object
78 79 80 81 82 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 78 def add_user_uuid_to_flow_data self.flow_data['order'] ||= {} self.flow_data['order']['attributes'] ||= {} self.flow_data['order']['attributes']['user_uuid'] = user&.uuid || '' end |
#display_total ⇒ Object
16 17 18 19 20 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 16 def display_total return unless flow_data&.[]('order') Spree::Money.new(flow_io_total_amount, currency: currency) end |
#flow_allocations ⇒ Object
161 162 163 164 165 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 161 def flow_allocations return @flow_allocations if @flow_allocations @flow_allocations = flow_order&.[]('allocations') end |
#flow_bill_address ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 129 def flow_bill_address flow_payment_address = flow_data.dig('order', 'payments')&.last&.[]('address') return unless flow_payment_address flow_payment_address['first'] = flow_payment_address.dig('name', 'first') flow_payment_address['last'] = flow_payment_address.dig('name', 'last') flow_payment_address['phone'] = ship_address['phone'] b_address = bill_address || build_bill_address b_address.prepare_from_flow_attributes(flow_payment_address) b_address end |
#flow_customer_email ⇒ Object
112 113 114 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 112 def flow_customer_email flow_data.dig('order', 'customer', 'email') end |
#flow_io_attr_user_uuid ⇒ Object
84 85 86 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 84 def flow_io_attr_user_uuid flow_data&.dig('order', 'attributes', 'user_uuid') end |
#flow_io_attribute_add(attr_key, value) ⇒ Object
72 73 74 75 76 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 72 def flow_io_attribute_add(attr_key, value) self.flow_data['order'] ||= {} self.flow_data['order']['attributes'] ||= {} self.flow_data['order']['attributes'][attr_key] = value end |
#flow_io_attributes ⇒ Object
68 69 70 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 68 def flow_io_attributes flow_data&.dig('order', 'attributes') || {} end |
#flow_io_balance_amount ⇒ Object
104 105 106 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 104 def flow_io_balance_amount flow_data&.dig('order', 'balance', 'amount')&.to_d || 0 end |
#flow_io_captures ⇒ Object
88 89 90 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 88 def flow_io_captures flow_data&.[]('captures') end |
#flow_io_captures_sum ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 92 def flow_io_captures_sum captures_sum = 0 flow_data&.[]('captures')&.each do |c| next if c['status'] != 'succeeded' amount = c['amount'] amount = amount.to_d if amount.is_a?(String) captures_sum += amount end captures_sum.to_d end |
#flow_io_experience_from_zone ⇒ Object
60 61 62 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 60 def flow_io_experience_from_zone self.flow_data = (flow_data || {}).merge!('exp' => zone.flow_io_experience) end |
#flow_io_experience_key ⇒ Object
56 57 58 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 56 def flow_io_experience_key flow_data&.[]('exp') end |
#flow_io_order_id ⇒ Object
64 65 66 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 64 def flow_io_order_id flow_data&.dig('order', 'id') end |
#flow_io_payments ⇒ Object
108 109 110 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 108 def flow_io_payments flow_data.dig('order', 'payments') end |
#flow_io_total_amount ⇒ Object
shows localized total, if possible. if not, fall back to Spree default
52 53 54 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 52 def flow_io_total_amount flow_data&.dig('order', 'total', 'amount')&.to_d || 0 end |
#flow_line_item_price(line_item, total = false) ⇒ Object
accepts line item, usually called from views
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 33 def flow_line_item_price(line_item, total = false) result = if (order = flow_order) item = order['lines']&.find { |el| el['item_number'] == line_item.variant.sku } return 'n/a' unless item total ? item['total']['label'] : item['price']['label'] else FlowcommerceSpree::Api.format_default_price(line_item.price * (total ? line_item.quantity : 1)) end # add line item promo # promo_total, adjustment_total result += " (#{FlowcommerceSpree::Api.format_default_price(line_item.promo_total)})" if line_item.promo_total > 0 result end |
#flow_order ⇒ Object
22 23 24 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 22 def flow_order flow_data&.[]('order') end |
#flow_order_with_payments? ⇒ Boolean
26 27 28 29 30 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 26 def flow_order_with_payments? payment = payments.completed.first payment&.payment_method&.type == 'Spree::Gateway::FlowIo' end |
#flow_ship_address ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 116 def flow_ship_address flow_destination = flow_data.dig('order', 'destination') return unless flow_destination.present? flow_destination['first'] = flow_destination.dig('contact', 'name', 'first') flow_destination['last'] = flow_destination.dig('contact', 'name', 'last') flow_destination['phone'] = flow_destination.dig('contact', 'phone') s_address = ship_address || build_ship_address s_address.prepare_from_flow_attributes(flow_destination) s_address end |
#flow_tax_cache_key ⇒ Object
12 13 14 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 12 def flow_tax_cache_key [number, 'flowcommerce', 'allocation', line_items.sum(:quantity)].join('-') end |
#flow_tax_for_item(item, tax_key, included_in_price = true) ⇒ Object
167 168 169 170 171 172 173 174 175 176 177 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 167 def flow_tax_for_item(item, tax_key, included_in_price = true) return {} if flow_allocations.blank? item_details = flow_allocations['details']&.find do |el| item.is_a?(Spree::LineItem) ? el['number'] == item.variant.sku : el['key'] == 'shipping' end return {} if item_details.blank? price_components = included_in_price ? item_details['included'] : item_details['not_included'] price_components&.find { |el| el['key'] == tax_key } end |
#prepare_flow_addresses ⇒ Object
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'app/models/spree/flow_io_order_decorator.rb', line 142 def prepare_flow_addresses address_attributes = {} s_address = flow_ship_address if s_address&.changes&.any? s_address.save! address_attributes[:ship_address_id] = s_address.id unless ship_address_id end b_address = flow_bill_address if b_address&.changes&.any? b_address.save! address_attributes[:bill_address_id] = b_address.id unless bill_address_id end address_attributes end |