Module: Vpago::OrderDecorator
- Extended by:
- Spree::DisplayMoney
- Defined in:
- app/models/vpago/order_decorator.rb
Class Method Summary collapse
Instance Method Summary collapse
-
#available_payment_methods(store = nil) ⇒ Object
override.
- #early_adopter? ⇒ Boolean
- #ensure_valid_vendor_payment_methods ⇒ Object
- #generate_line_items_total_metadata ⇒ Object
- #insufficient_processed_payment? ⇒ Boolean
- #line_items_count ⇒ Object
- #line_items_from_same_vendor? ⇒ Boolean
- #order_adjustment_total ⇒ Object
-
#payment_host ⇒ Object
override this method if you want flexibility for example, host per payment method or tenant.
-
#process_payments! ⇒ Object
override.
- #processed_payment_total ⇒ Object
- #required_payway_payout? ⇒ Boolean
- #tenant_payment_methods ⇒ Object
Class Method Details
.prepended(base) ⇒ Object
7 8 9 10 11 12 13 14 15 |
# File 'app/models/vpago/order_decorator.rb', line 7 def self.prepended(base) base.has_many :payouts, class_name: 'Spree::Payout', through: :payments base.has_many :vendor_payment_methods, -> { where(spree_payment_methods: { deleted_at: nil }).reorder(nil).distinct }, class_name: 'Spree::PaymentMethod', through: :line_items base.state_machine.before_transition from: :cart, do: :ensure_valid_vendor_payment_methods base.state_machine.after_transition to: :complete, do: :generate_line_items_total_metadata end |
Instance Method Details
#available_payment_methods(store = nil) ⇒ Object
override
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'app/models/vpago/order_decorator.rb', line 54 def available_payment_methods(store = nil) @available_payment_methods ||= begin payment_methods = if respond_to?(:tenant) && tenant.present? tenant_payment_methods elsif vendor_payment_methods.any? vendor_payment_methods else store ||= self.store store.payment_methods end payment_methods = if early_adopter? payment_methods.available_on_frontend_for_early_adopter.select { |pm| pm.available_for_order?(self) } else payment_methods.available_on_front_end.select { |pm| pm.available_for_order?(self) } end payment_methods = payment_methods.select(&:support_payout?) if required_payway_payout? payment_methods end end |
#early_adopter? ⇒ Boolean
76 77 78 |
# File 'app/models/vpago/order_decorator.rb', line 76 def early_adopter? user.present? && user.respond_to?(:early_adopter?) && user.early_adopter? end |
#ensure_valid_vendor_payment_methods ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'app/models/vpago/order_decorator.rb', line 36 def ensure_valid_vendor_payment_methods return if line_items_from_same_vendor? return unless vendor_payment_methods.any? errors.add(:line_items, 'some_payment_methods_cant_be_used_across_vendors') false end |
#generate_line_items_total_metadata ⇒ Object
88 89 90 |
# File 'app/models/vpago/order_decorator.rb', line 88 def line_items.each(&:update_total_metadata) end |
#insufficient_processed_payment? ⇒ Boolean
28 29 30 |
# File 'app/models/vpago/order_decorator.rb', line 28 def insufficient_processed_payment? processed_payment_total < total end |
#line_items_count ⇒ Object
84 85 86 |
# File 'app/models/vpago/order_decorator.rb', line 84 def line_items_count line_items.size end |
#line_items_from_same_vendor? ⇒ Boolean
45 46 47 |
# File 'app/models/vpago/order_decorator.rb', line 45 def line_items_from_same_vendor? line_items.joins(:variant).pluck('spree_variants.vendor_id').uniq.size == 1 end |
#order_adjustment_total ⇒ Object
92 93 94 |
# File 'app/models/vpago/order_decorator.rb', line 92 def order_adjustment_total adjustments.eligible.sum(:amount) end |
#payment_host ⇒ Object
override this method if you want flexibility for example, host per payment method or tenant
98 99 100 |
# File 'app/models/vpago/order_decorator.rb', line 98 def payment_host ENV.fetch('DEFAULT_URL_HOST') end |
#process_payments! ⇒ Object
override
18 19 20 21 22 23 24 25 26 |
# File 'app/models/vpago/order_decorator.rb', line 18 def process_payments! super # Prevent from reaching :complete state if payment is insufficient return unless insufficient_processed_payment? errors.add(:base, Spree.t(:insufficient_payment_amount_to_cover_the_total)) false end |
#processed_payment_total ⇒ Object
32 33 34 |
# File 'app/models/vpago/order_decorator.rb', line 32 def processed_payment_total payment_total + pending_payments.sum(:amount) end |
#required_payway_payout? ⇒ Boolean
49 50 51 |
# File 'app/models/vpago/order_decorator.rb', line 49 def required_payway_payout? line_items.any?(&:required_payway_payout?) || shipments.any?(&:required_payway_payout?) end |
#tenant_payment_methods ⇒ Object
80 81 82 |
# File 'app/models/vpago/order_decorator.rb', line 80 def tenant_payment_methods tenant.tenant_payment_methods end |