Class: SpreeCmCommissioner::Customer
- Includes:
- PhoneNumberSanitizer
- Defined in:
- app/models/spree_cm_commissioner/customer.rb
Instance Attribute Summary collapse
-
#use_billing ⇒ Object
Returns the value of attribute use_billing.
Instance Method Summary collapse
- #assign_number ⇒ Object
- #billing_customer_attributes ⇒ Object
- #clone_billing_address ⇒ Object
- #create_customer_user ⇒ Object
- #customer_number ⇒ Object
- #filter_subscribable_variants ⇒ Object
- #fullname ⇒ Object
- #generate_sequence_number ⇒ Object
- #handle_status_change ⇒ Object
- #overdue_subscriptions ⇒ Object
- #promotion ⇒ Object
- #query_builder ⇒ Object
- #subscribable_variants ⇒ Object
- #update_number ⇒ Object
- #use_billing? ⇒ Boolean
Instance Attribute Details
#use_billing ⇒ Object
Returns the value of attribute use_billing.
14 15 16 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 14 def use_billing @use_billing end |
Instance Method Details
#assign_number ⇒ Object
66 67 68 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 66 def assign_number self.number = customer_number end |
#billing_customer_attributes ⇒ Object
120 121 122 123 124 125 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 120 def billing_customer_attributes return unless Spree::Store.default.code.include?('billing') errors.add(:base, :name_cant_be_blank) if first_name.blank? && last_name.blank? errors.add(:base, :businesses_cant_be_blank) if taxons.blank? end |
#clone_billing_address ⇒ Object
78 79 80 81 82 83 84 85 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 78 def clone_billing_address if bill_address && ship_address.nil? self.ship_address = bill_address.clone else ship_address.attributes = bill_address.attributes.except('id', 'updated_at', 'created_at') end true end |
#create_customer_user ⇒ Object
127 128 129 130 131 132 133 134 135 136 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 127 def create_customer_user nil if user.present? user = Spree::User.create!( email: "#{SecureRandom.hex(16)}@samram.com", password: SecureRandom.hex(32).to_s ) update(user_id: user.id) end |
#customer_number ⇒ Object
62 63 64 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 62 def customer_number "#{place&.code}-#{sequence_number.to_s.rjust(6, '0')}" end |
#filter_subscribable_variants ⇒ Object
111 112 113 114 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 111 def filter_subscribable_variants subscribed_variant_ids = subscriptions.map(&:variant_id) subscribable_variants.where.not(id: subscribed_variant_ids) end |
#fullname ⇒ Object
116 117 118 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 116 def fullname "#{first_name} #{last_name}" end |
#generate_sequence_number ⇒ Object
57 58 59 60 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 57 def generate_sequence_number last_customer_with_same_place = vendor.customers.where(place_id: place_id).where.not(id: id).last self.sequence_number = last_customer_with_same_place.present? ? last_customer_with_same_place.sequence_number.to_i + 1 : 1 end |
#handle_status_change ⇒ Object
138 139 140 141 142 143 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 138 def handle_status_change return unless saved_change_to_status? return unless status_previously_was == 'inactive' && active? update(last_invoice_date: Time.zone.today) end |
#overdue_subscriptions ⇒ Object
87 88 89 90 91 92 93 94 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 87 def overdue_subscriptions overdue_id = query_builder.where('li.due_date < ?', Time.zone.today) .where.not("o.payment_state = 'paid' or o.payment_state = 'failed'") .where(customer_id: id).first&.id return Spree::Order.where(subscription_id: overdue_id).first unless overdue_id.nil? 'none' end |
#promotion ⇒ Object
53 54 55 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 53 def promotion Spree::Promotion.where(code: number).first end |
#query_builder ⇒ Object
96 97 98 99 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 96 def query_builder SpreeCmCommissioner::Subscription.joins('INNER JOIN spree_orders as o ON o.subscription_id = cm_subscriptions.id') .joins('INNER JOIN spree_line_items as li ON li.order_id = o.id ') end |
#subscribable_variants ⇒ Object
101 102 103 104 105 106 107 108 109 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 101 def subscribable_variants vendor.variants .joins('INNER JOIN spree_products as p ON p.id = spree_variants.product_id AND p.subscribable = TRUE') .joins('INNER JOIN spree_products_taxons as pt ON pt.product_id = p.id') .joins("INNER JOIN cm_customers as c on c.id = #{id}") .joins('INNER JOIN cm_customer_taxons as ct on ct.customer_id = c.id') .joins('INNER JOIN spree_taxons as t on t.id = pt.taxon_id AND t.id = ct.taxon_id') .where('spree_variants.is_master = FALSE AND spree_variants.deleted_at IS NULL') end |
#update_number ⇒ Object
70 71 72 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 70 def update_number update(number: customer_number) end |
#use_billing? ⇒ Boolean
74 75 76 |
# File 'app/models/spree_cm_commissioner/customer.rb', line 74 def use_billing? use_billing.in?([true, 'true', '1']) end |