Class: SpreeCmCommissioner::Customer

Inherits:
Base
  • Object
show all
Includes:
PhoneNumberSanitizer
Defined in:
app/models/spree_cm_commissioner/customer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#use_billingObject

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_numberObject



66
67
68
# File 'app/models/spree_cm_commissioner/customer.rb', line 66

def assign_number
  self.number = customer_number
end

#billing_customer_attributesObject



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_addressObject



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_userObject



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_numberObject



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_variantsObject



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

#fullnameObject



116
117
118
# File 'app/models/spree_cm_commissioner/customer.rb', line 116

def fullname
  "#{first_name} #{last_name}"
end

#generate_sequence_numberObject



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_changeObject



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_subscriptionsObject



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

#promotionObject



53
54
55
# File 'app/models/spree_cm_commissioner/customer.rb', line 53

def promotion
  Spree::Promotion.where(code: number).first
end

#query_builderObject



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_variantsObject



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_numberObject



70
71
72
# File 'app/models/spree_cm_commissioner/customer.rb', line 70

def update_number
  update(number: customer_number)
end

#use_billing?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'app/models/spree_cm_commissioner/customer.rb', line 74

def use_billing?
  use_billing.in?([true, 'true', '1'])
end