Module: SpreeCmCommissioner::OrderDecorator
- Defined in:
- app/models/spree_cm_commissioner/order_decorator.rb
Class Method Summary collapse
-
.prepended(base) ⇒ Object
rubocop:disable Metrics/MethodLength,Metrics/AbcSize.
Instance Method Summary collapse
-
#after_cancel ⇒ Object
override.
-
#after_resume ⇒ Object
override.
-
#associate_user!(user, override_email = true) ⇒ Object
overrided add phone_number trigger when update customer detail.
-
#collect_payment_methods(store = nil) ⇒ Object
override.
- #collect_payment_methods_for_early_adopter(store = nil) ⇒ Object
-
#confirmation_delivered? ⇒ Boolean
overrided not to send email yet to user if order needs confirmation it will send after vendors accepted.
-
#create_default_payment_if_eligble ⇒ Object
assume check is default payment method for subscription.
- #customer_address ⇒ Object
- #delivery_required? ⇒ Boolean
- #display_outstanding_balance ⇒ Object
- #generate_png_qr(size = 120) ⇒ Object
- #generate_svg_qr ⇒ Object
- #order_completed? ⇒ Boolean
-
#payment_required? ⇒ Boolean
overrided.
- #precalculate_conversion ⇒ Object
- #qr_data ⇒ Object
- #state_changed_to_canceled? ⇒ Boolean
- #state_changed_to_complete? ⇒ Boolean
- #subscription? ⇒ Boolean
- #ticket_seller_user? ⇒ Boolean
-
#valid_promotion_ids ⇒ Object
overrided avoid raise error when source_id is nil.
Class Method Details
.prepended(base) ⇒ Object
rubocop:disable Metrics/MethodLength,Metrics/AbcSize
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 3 def self.prepended(base) # rubocop:disable Metrics/MethodLength,Metrics/AbcSize base.include SpreeCmCommissioner::PhoneNumberSanitizer base.include SpreeCmCommissioner::OrderBibNumberConcern base.include SpreeCmCommissioner::OrderRequestable base.scope :subscription, -> { where.not(subscription_id: nil) } base.scope :paid, -> { where(payment_state: :paid) } base.scope :complete_or_canceled, -> { complete.or(where(state: 'canceled')) } base.scope :filter_by_match_user_contact, lambda { |user| complete.where( '(email = :email OR intel_phone_number = :intel_phone_number) AND user_id IS NULL', email: user.email, intel_phone_number: user.intel_phone_number ) } base.scope :filter_by_vendor, lambda { |vendor| joins(:line_items).where(spree_line_items: { vendor_id: vendor }).distinct } base.before_create :link_by_phone_number base.before_create :associate_customer base.validates :promo_total, base::MONEY_VALIDATION base.validate :validate_channel_prefix, if: :channel_changed? base.validates :phone_number, presence: true, if: :require_phone_number base.has_one :invoice, dependent: :destroy, class_name: 'SpreeCmCommissioner::Invoice' base.belongs_to :subscription, class_name: 'SpreeCmCommissioner::Subscription', optional: true base.has_one :customer, class_name: 'SpreeCmCommissioner::Customer', through: :subscription base.has_many :taxons, class_name: 'Spree::Taxon', through: :customer base.has_many :vendors, through: :products, class_name: 'Spree::Vendor' base.has_many :taxons, through: :products, class_name: 'Spree::Taxon' base.has_many :guests, through: :line_items, class_name: 'SpreeCmCommissioner::Guest' base.delegate :customer, to: :user, allow_nil: true base.whitelisted_ransackable_associations |= %w[customer taxon payments invoice] base.whitelisted_ransackable_attributes |= %w[intel_phone_number phone_number email number] base.after_update :precalculate_conversion, if: -> { state_changed_to_complete? } base.after_update :precalculate_conversion, if: -> { state_changed_to_canceled? } def base.search_by_qr_data!(data) token = data.match(/^R\d{9,}-([A-Za-z0-9_\-]+)$/)&.captures raise ActiveRecord::RecordNotFound, "Couldn't find Spree::Order with QR data: #{data}" unless token find_by!(token: token) end base.belongs_to :tenant, class_name: 'SpreeCmCommissioner::Tenant' base.before_create :set_tenant_id end |
Instance Method Details
#after_cancel ⇒ Object
override
74 75 76 77 78 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 74 def after_cancel super precalculate_conversion end |
#after_resume ⇒ Object
override
67 68 69 70 71 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 67 def after_resume super precalculate_conversion end |
#associate_user!(user, override_email = true) ⇒ Object
overrided add phone_number trigger when update customer detail
127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 127 def associate_user!(user, override_email = true) # rubocop:disable Style/OptionalBooleanParameter self.user = user self.email = user.email if override_email self.phone_number = user.phone_number if user.phone_number.present? self.created_by ||= user self.bill_address ||= user.bill_address.try(:clone) self.ship_address ||= user.ship_address.try(:clone) changes = slice(:user_id, :email, :phone_number, :created_by_id, :bill_address_id, :ship_address_id) self.class.unscoped.where(id: self).update_all(changes) # rubocop:disable Rails/SkipsModelValidations end |
#collect_payment_methods(store = nil) ⇒ Object
override
87 88 89 90 91 92 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 87 def collect_payment_methods(store = nil) return super if user.blank? return super unless user.early_adopter? collect_payment_methods_for_early_adopter(store) end |
#collect_payment_methods_for_early_adopter(store = nil) ⇒ Object
94 95 96 97 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 94 def collect_payment_methods_for_early_adopter(store = nil) store ||= self.store store.payment_methods.available_on_frontend_for_early_adopter.select { |pm| pm.available_for_order?(self) } end |
#confirmation_delivered? ⇒ Boolean
overrided not to send email yet to user if order needs confirmation it will send after vendors accepted.
113 114 115 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 113 def confirmation_delivered? confirmation_delivered || need_confirmation? end |
#create_default_payment_if_eligble ⇒ Object
assume check is default payment method for subscription
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 150 def create_default_payment_if_eligble return unless subscription? if covered_by_store_credit payment_method = Spree::PaymentMethod::StoreCredit.available_on_back_end.first_or_create! do |method| method.name ||= 'StoreCredit' method.stores = [Spree::Store.default] if method.stores.empty? end source_id = user.store_credit_ids.last source_type = 'Spree::StoreCredit' else payment_method = Spree::PaymentMethod::Check.available_on_back_end.first_or_create! do |method| method.name ||= 'Invoice' method.stores = [Spree::Store.default] if method.stores.empty? end end payments.create!( payment_method: payment_method, amount: total, source_id: source_id, source_type: source_type ) Spree::Checkout::Advance.call(order: self) end |
#customer_address ⇒ Object
179 180 181 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 179 def customer_address bill_address || ship_address end |
#delivery_required? ⇒ Boolean
107 108 109 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 107 def delivery_required? line_items.any?(&:delivery_required?) end |
#display_outstanding_balance ⇒ Object
219 220 221 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 219 def display_outstanding_balance Spree::Money.new(outstanding_balance, currency: currency).to_s end |
#generate_png_qr(size = 120) ⇒ Object
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 199 def generate_png_qr(size = 120) qrcode = RQRCode::QRCode.new(qr_data) qrcode.as_png( bit_depth: 1, border_modules: 1, color_mode: ChunkyPNG::COLOR_GRAYSCALE, color: 'black', file: nil, fill: 'white', module_px_size: 4, resize_exactly_to: false, resize_gte_to: false, size: size ) end |
#generate_svg_qr ⇒ Object
187 188 189 190 191 192 193 194 195 196 197 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 187 def generate_svg_qr qrcode = RQRCode::QRCode.new(qr_data) qrcode.as_svg( color: '000', shape_rendering: 'crispEdges', module_size: 5, standalone: true, use_path: true, viewbox: '0 0 20 10' ) end |
#order_completed? ⇒ Boolean
183 184 185 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 183 def order_completed? complete? && need_confirmation? == false end |
#payment_required? ⇒ Boolean
overrided
118 119 120 121 122 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 118 def payment_required? return false if need_confirmation? super end |
#precalculate_conversion ⇒ Object
80 81 82 83 84 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 80 def precalculate_conversion line_items.each do |item| SpreeCmCommissioner::ConversionPreCalculatorJob.perform_later(item.product_id) end end |
#qr_data ⇒ Object
215 216 217 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 215 def qr_data "#{number}-#{token}" end |
#state_changed_to_canceled? ⇒ Boolean
103 104 105 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 103 def state_changed_to_canceled? saved_change_to_state? && state == 'canceled' end |
#state_changed_to_complete? ⇒ Boolean
99 100 101 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 99 def state_changed_to_complete? saved_change_to_state? && state == 'complete' end |
#subscription? ⇒ Boolean
175 176 177 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 175 def subscription? subscription.present? end |
#ticket_seller_user? ⇒ Boolean
60 61 62 63 64 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 60 def ticket_seller_user? return false if user.nil? user.has_spree_role?('ticket_seller') end |
#valid_promotion_ids ⇒ Object
overrided avoid raise error when source_id is nil. github.com/channainfo/commissioner/pull/843
143 144 145 146 147 |
# File 'app/models/spree_cm_commissioner/order_decorator.rb', line 143 def valid_promotion_ids all_adjustments.eligible.nonzero.promotion .where.not(source_id: nil) .map { |a| a.source.promotion_id }.uniq end |