Module: ActsAsPurchasableWizard
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/acts_as_purchasable_wizard.rb
Overview
ActsAsPurchasableWizard
Defined Under Namespace
Modules: Base, ClassMethods
Instance Method Summary collapse
- #after_submit_purchased! ⇒ Object
- #before_submit_order_save(order) ⇒ Object
-
#before_submit_purchased! ⇒ Object
A hook to extend.
-
#billing! ⇒ Object
Owner clicks on the Billing step.
-
#build_submit_fees_and_order ⇒ Object
Should be indempotent.
- #find_or_build_submit_fees ⇒ Object
- #find_or_build_submit_order ⇒ Object
-
#ready! ⇒ Object
Ready to check out This is called by the “ready_checkout” before_action in wizard_controller/before_actions.rb.
-
#submit! ⇒ Object
Draft -> Submitted requirements.
-
#submit_fees ⇒ Object
All Fees and Orders.
- #submit_order ⇒ Object
-
#submit_purchased! ⇒ Object
Called automatically via after_purchase hook above.
Instance Method Details
#after_submit_purchased! ⇒ Object
135 136 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 135 def after_submit_purchased! end |
#before_submit_order_save(order) ⇒ Object
90 91 92 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 90 def before_submit_order_save(order) order end |
#before_submit_purchased! ⇒ Object
A hook to extend
132 133 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 132 def before_submit_purchased! end |
#billing! ⇒ Object
Owner clicks on the Billing step. Next step is Checkout
110 111 112 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 110 def billing! ready! && save! end |
#build_submit_fees_and_order ⇒ Object
Should be indempotent.
95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 95 def build_submit_fees_and_order return false if was_submitted? fees = find_or_build_submit_fees() raise('already has purchased submit fees') if fees.any?(&:purchased?) order = find_or_build_submit_order() raise('expected an Effective::Order') unless order.kind_of?(Effective::Order) raise('already has purchased submit order') if order.purchased? raise('unable to proceed with a voided submit order') if order.try(:voided?) true end |
#find_or_build_submit_fees ⇒ Object
46 47 48 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 46 def find_or_build_submit_fees submit_fees end |
#find_or_build_submit_order ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 50 def find_or_build_submit_order order = submit_order || orders.build(user: owner) # This is polymorphic user, might be an organization order = orders.build(user: owner) if order.declined? # Make a new order, if the previous one was declined fees = submit_fees().reject { |fee| fee.marked_for_destruction? } # Make sure all Fees are valid fees.each do |fee| raise("expected a valid fee but #{fee.id} had errors #{fee.errors.inspect}") unless fee.valid? end # A membership could go from individual to organization order.user = owner # Adds fees, but does not overwrite any existing price. fees.each do |fee| order.add(fee) unless order.purchasables.include?(fee) end order.order_items.each do |order_item| fee = fees.find { |fee| fee == order_item.purchasable } order.remove(order_item) unless fee.present? end # From Billing Step order.billing_address = owner.billing_address if owner.try(:billing_address).present? # This will update all order items to match the prices from their purchasable order.try(:update_purchasable_attributes) # Hook to extend for coupon fees order = before_submit_order_save(order) raise('before_submit_order_save must return an Effective::Order') unless order.kind_of?(Effective::Order) # Important to add/remove anything order.save! order end |
#ready! ⇒ Object
Ready to check out This is called by the “ready_checkout” before_action in wizard_controller/before_actions.rb
116 117 118 119 120 121 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 116 def ready! without_current_step do build_submit_fees_and_order save! end end |
#submit! ⇒ Object
Draft -> Submitted requirements
139 140 141 142 143 144 145 146 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 139 def submit! raise('already submitted') if was_submitted? raise('expected a purchased order') unless submit_order&.purchased? wizard_steps[:checkout] ||= Time.zone.now wizard_steps[:submitted] = Time.zone.now submitted! end |
#submit_fees ⇒ Object
All Fees and Orders
38 39 40 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 38 def submit_fees raise('to be implemented by caller') end |
#submit_order ⇒ Object
42 43 44 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 42 def submit_order orders.last end |
#submit_purchased! ⇒ Object
Called automatically via after_purchase hook above
124 125 126 127 128 129 |
# File 'app/models/concerns/acts_as_purchasable_wizard.rb', line 124 def submit_purchased! return false if was_submitted? wizard_steps[:checkout] = Time.zone.now submit! end |