Module: SpreeCmCommissioner::UserDecorator

Defined in:
app/models/spree_cm_commissioner/user_decorator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.define_user_places(base) ⇒ Object



57
58
59
60
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 57

def self.define_user_places(base)
  base.has_many :user_places, class_name: 'SpreeCmCommissioner::UserPlace'
  base.has_many :places, through: :user_places, class_name: 'SpreeCmCommissioner::Place'
end

.prepended(base) ⇒ Object

rubocop:disable Metrics/AbcSize



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
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 4

def self.prepended(base) # rubocop:disable Metrics/AbcSize
  base.include SpreeCmCommissioner::UserNotification
  base.include SpreeCmCommissioner::UserIdentity
  base.include SpreeCmCommissioner::UserPreference

  base.enum gender: i[male female other]

  base.has_many :subscriptions, through: :customer, class_name: 'SpreeCmCommissioner::Subscription'
  base.has_many :payments, as: :payable, class_name: 'Spree::Payment', dependent: :nullify
  base.has_many :role_permissions, through: :spree_roles, class_name: 'SpreeCmCommissioner::RolePermission'
  base.has_many :permissions, through: :role_permissions, class_name: 'SpreeCmCommissioner::Permission'
  base.has_many :line_items, through: :orders, source: :line_items
  base.has_many :check_ins, foreign_key: 'check_in_by_id', class_name: 'SpreeCmCommissioner::CheckIn'
  base.has_many :user_events, class_name: 'SpreeCmCommissioner::UserEvent'
  base.has_many :events, through: :user_events, class_name: 'Spree::Taxon', source: 'taxon'
  base.has_many :guests, class_name: 'SpreeCmCommissioner::Guest', dependent: :destroy

  base.has_many :google_user_identity_providers,
                -> { where(identity_type: :google) },
                class_name: 'SpreeCmCommissioner::UserIdentityProvider'

  base.has_many :wished_items, class_name: 'Spree::WishedItem', through: :wishlists
  base.has_many :promotions, through: :promotion_rules, class_name: 'Spree::Promotion'

  base.has_one :profile, as: :viewable, dependent: :destroy, class_name: 'SpreeCmCommissioner::UserProfile'
  base.has_one :customer, class_name: 'SpreeCmCommissioner::Customer'

  base.has_secure_password :confirm_pin_code, validations: false

  base.multi_tenant :tenant, class_name: 'SpreeCmCommissioner::Tenant'
  base.scope :by_tenant, -> (tenant_id) { where(tenant_id: tenant_id) }

  base.whitelisted_ransackable_attributes = %w[email first_name last_name gender phone_number]

  base.before_save :update_otp_enabled

  define_user_places(base)

  def base.end_users
    joins('LEFT JOIN spree_vendor_users ON spree_users.id = spree_vendor_users.user_id').where(spree_vendor_users: { user_id: nil })
  end

  def normal_user?
    system_user = admin? || !vendors.empty?
    normal_user = spree_roles.length == 1 ? spree_roles[0].name == 'user' : spree_roles.empty?
    normal_user && !system_user
  end

  def soft_deleted?
    !.nil?
  end
end

Instance Method Details

#display_nameObject



91
92
93
94
95
96
97
98
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 91

def display_name
  return full_name if full_name.present?
  return first_name if first_name.present?
  return last_name if last_name.present?
  return email if email.present?

  phone_number
end

#early_adopter?Boolean

Returns:

  • (Boolean)


75
76
77
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 75

def early_adopter?
  has_spree_role?('early_adopter')
end

#ensure_unique_database_delivery_method(attributes) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 100

def ensure_unique_database_delivery_method(attributes)
  recipient = self

  options = {
    recipient_id: recipient.id,
    notificable_id: attributes[:notificable].id,
    notificable_type: attributes[:notificable].class.to_s,
    type: attributes[:type]
  }

  notification = recipient.notifications.where(options).first_or_initialize

  if notification.persisted?
    notification.update(attributes)
  else
    notification.assign_attributes(attributes)
    notification.save!
  end

  notification
end

#full_nameObject



87
88
89
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 87

def full_name
  [first_name, last_name].compact_blank.join(' ')
end

#has_spree_role?(role_name) ⇒ Boolean

override

Returns:

  • (Boolean)


67
68
69
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 67

def has_spree_role?(role_name) # rubocop:disable Naming/PredicateName
  spree_roles.non_vendor.exists?(name: role_name)
end

#normal_user?Boolean

Returns:

  • (Boolean)


46
47
48
49
50
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 46

def normal_user?
  system_user = admin? || !vendors.empty?
  normal_user = spree_roles.length == 1 ? spree_roles[0].name == 'user' : spree_roles.empty?
  normal_user && !system_user
end

#operator?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 83

def operator?
  has_spree_role?('operator')
end

#organizer?Boolean

Returns:

  • (Boolean)


79
80
81
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 79

def organizer?
  has_spree_role?('organizer')
end

#permissions_for_vendor(vendor_id) ⇒ Object



62
63
64
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 62

def permissions_for_vendor(vendor_id)
  permissions.joins(role_permissions: :role).where(spree_roles: { vendor_id: vendor_id })
end

#push_notificable?Boolean

Returns:

  • (Boolean)


122
123
124
125
126
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 122

def push_notificable?
  return false if device_tokens_count.blank?

  device_tokens_count.positive?
end

#soft_deleted?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 52

def soft_deleted?
  !.nil?
end

#super_admin?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 71

def super_admin?
  has_spree_role?('super_admin')
end

#update_otp_enabledObject



134
135
136
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 134

def update_otp_enabled
  self.otp_enabled = otp_email || otp_phone_number
end

#update_tracked_fields!(request) ⇒ Object



138
139
140
141
142
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 138

def update_tracked_fields!(request)
  ActiveRecord::Base.connected_to(role: :writing) do
    super(request)
  end
end

#validate_current_password!(password) ⇒ Object



128
129
130
131
132
# File 'app/models/spree_cm_commissioner/user_decorator.rb', line 128

def validate_current_password!(password)
  return if valid_password?(password)

  errors.add(:password, I18n.t('spree_user.invalid_password'))
end