Class: User

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
PgSearch
Defined in:
app/models/user.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.check_coupon(coupon_id) ⇒ Object

Stripe Coupon Checking



114
115
116
117
118
119
120
121
122
123
124
125
# File 'app/models/user.rb', line 114

def self.check_coupon(coupon_id)
  Stripe.api_key = "sk_test_eIdlWzka50kLJLNIqAIklamd"
  already_coupon = Stripe::Coupon.all
  already_coupon.data.each do |ex_coupon|
    if ex_coupon and !ex_coupon.id.blank? and ex_coupon.id == coupon_id
      @coupon = coupon_id
    else
      
    end
  end
  return @coupon
end

.enableObject



190
191
192
# File 'app/models/user.rb', line 190

def self.enable
  where(:disabled => false)
end

.encode(user) ⇒ Object



368
369
370
# File 'app/models/user.rb', line 368

def self.encode user
  JWT.encode({ user_id: user.id, exp: (DateTime.now + 30).to_i }, JWT_SECRET, JWT_ALGORITHM)
end

.find_for_facebook_oauth(auth) ⇒ Object



193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# File 'app/models/user.rb', line 193

def self.find_for_facebook_oauth(auth)
  where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
    already_user = User.where(:email => auth.info.email).first
    if !user.persisted? and auth.info.email and already_user.blank?
      user.provider = auth.provider
      user.uid = auth.uid
      user.email = auth.info.email
      user.password = Devise.friendly_token[0,20]
      user.first_name = auth.info.first_name
      user.last_name = auth.info.last_name
      #        user.username = auth.info.name   # assuming the user model has a name
      user.avatar = process_uri(auth.info.image) # assuming the user model has an image
      user.save(:validate=>false)
      return user
    elsif already_user
      return already_user
    else
      return false
    end
  end
end

.find_for_google_oauth2(access_token, signed_in_resource = nil) ⇒ Object



290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
# File 'app/models/user.rb', line 290

def self.find_for_google_oauth2(access_token, signed_in_resource=nil)
  data = access_token.info
  user = User.where(:provider => access_token.provider, :uid => access_token.uid ).first
  if user
    return user
  else
    registered_user = User.where(:email => data.email).first
    if registered_user
      return registered_user
    else
      user = User.new
      user.provider = access_token.provider
      user.uid = access_token.uid
      user.email = data["email"]
      user.password = Devise.friendly_token[0,20]
      user.first_name = data.first_name
      user.last_name = data.last_name
      user.avatar = data.image # assuming the user model has an image
      user.save(:validate=>false)
      return user
    end
  end
end

.find_for_twitter_oauth(auth, signed_in_resource = nil) ⇒ Object



267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
# File 'app/models/user.rb', line 267

def self.find_for_twitter_oauth(auth, signed_in_resource=nil)
  user = User.where(:provider => auth.provider, :uid => auth.uid).first
  if user
    return user
  else
    user = User.new
    name = auth.info.name
    if name.include?(" ")
      user.first_name = name.split(" ").first
      user.last_name = name.split(" ").second
    else
      user.first_name = name
      user.last_name = " "
    end
    user.provider = auth.provider
    user.uid = auth.uid
    user.password = Devise.friendly_token[0,20]
    user.avatar = auth.info.image
    user.save(:validate=>false)
    return user
  end
end

.for_oauth(oauth) ⇒ Object



372
373
374
375
376
377
# File 'app/models/user.rb', line 372

def self.for_oauth oauth
  oauth.get_data
  data = oauth.data
  user = find_by_email(data[:email])
  user = user.present? ? user : data
end

.is_valid_user(email, password) ⇒ Object



175
176
177
178
# File 'app/models/user.rb', line 175

def self.is_valid_user(email,password)
  @user = User.find_by_email(email)
  @user and @user.valid_password?(password) ? @user : nil
end

.process_uri(uri) ⇒ Object



215
216
217
218
219
# File 'app/models/user.rb', line 215

def self.process_uri(uri)
  avatar_url = URI.parse(uri)
  avatar_url.scheme = 'https'
  avatar_url.to_s
end

.serialize_into_session(record) ⇒ Object



167
168
169
# File 'app/models/user.rb', line 167

def self.serialize_into_session(record)
  [record.id.to_s, record.authenticatable_salt]
end

Instance Method Details

#assign_api_tokenObject



171
172
173
# File 'app/models/user.rb', line 171

def assign_api_token
  update_attribute(:api_token, SecureRandom.uuid)
end

#average_ratingObject



379
380
381
382
# File 'app/models/user.rb', line 379

def average_rating
  avg_rating = VendorRating.where(vendor_id: self.id).average("rating")
  return avg_rating.to_i
end

#can_do_this(org, setting) ⇒ Object



258
259
260
261
262
263
264
265
# File 'app/models/user.rb', line 258

def can_do_this(org,setting)
  role = get_role_name(org.id)
  if (role == 'admin' || role == 'manager' || role == 'super_admin' || setting)
    return true
  else
    return false 
  end
end

#get_asset_purchase_vendorObject

Get Asset Purchase Vendor



389
390
391
# File 'app/models/user.rb', line 389

def get_asset_purchase_vendor
  Asset.where("purchase_vendor_id = ?", self.id)
end

#get_asset_repair_vendorObject

Get Asset Vendor



384
385
386
# File 'app/models/user.rb', line 384

def get_asset_repair_vendor
  Asset.where("vendor_id = ?", self.id)
end

#get_role(org_id) ⇒ Object



251
252
253
254
255
256
# File 'app/models/user.rb', line 251

def get_role(org_id)
  member =  self.member.where(:organization_id => org_id).first
  if member.present?
    return member.roles.first
  end
end

#get_role_name(org_id) ⇒ Object



245
246
247
248
249
250
# File 'app/models/user.rb', line 245

def get_role_name(org_id)
  member =  self.member.where(:organization_id => org_id).first
  if member.present?
    return member.roles.first.name
  end
end

#idle?(date, s_time, e_time) ⇒ Boolean

Returns:

  • (Boolean)


314
315
316
317
318
# File 'app/models/user.rb', line 314

def idle?(date, s_time, e_time)
  shift = self.shifts.where( "due_date = :date AND ( ((start_time <= :s_time) AND (end_time >= :s_time)) OR ((:e_time >= start_time) AND (:e_time <= end_time)) OR ((start_time >= :s_time) AND (end_time <= :e_time)) ) ", {:date => date, :s_time => s_time, :e_time => e_time}).first
  false if shift
  true if shift.nil?
end

#mailboxer_email(object) ⇒ Object



364
365
366
# File 'app/models/user.rb', line 364

def mailboxer_email(object)
  self.email
end

#nameObject



360
361
362
# File 'app/models/user.rb', line 360

def name
  "#{first_name}"+ ' ' + "#{last_name}"
end

#notificationsObject



137
138
139
# File 'app/models/user.rb', line 137

def notifications
  Notification.joins(:subscribers).where(notification_users: {user_id: self.id}).order(created_at: :desc)
end

#notify_alert(swap) ⇒ Object



324
325
326
327
328
329
330
331
332
333
334
335
336
337
# File 'app/models/user.rb', line 324

def notify_alert(swap)
  if self.email_notify
    Notifier.delay.swap(self.email,swap.id)
  end

  if self.sms_notify
    content = "Swap Date : #{swap.shift.due_date} Start Time : #{swap.shift.start_time} End Time : #{swap.shift.end_time}"
    arguments = {
      :to => self.phone_number,
      :content => content
    }
    SmsWorker.perform_async(arguments)
  end
end

#notify_message(lateness) ⇒ Object



339
340
341
342
343
344
345
346
347
348
349
350
351
352
# File 'app/models/user.rb', line 339

def notify_message(lateness)
  if self.email_notify
    Notifier.delay.late(self.email,lateness.id)
  end

  if self.sms_notify
    content = "Lateness Reason : #{lateness.reason} Start Time : #{lateness.shift.start_time} End Time : #{lateness.shift.end_time}"
    arguments = {
      :to => self.phone_number,
      :content => content
    }
    SmsWorker.perform_async(arguments)
  end
end

#notify_new_signup(org_id) ⇒ Object



320
321
322
323
# File 'app/models/user.rb', line 320

def (org_id)
  emails = self.organizations.find_by_id(org_id).users.with_role(:manager).collect { |user| user.email }
  Notifier.delay.(emails,self.id)
end

#persisted?Boolean

Returns:

  • (Boolean)


221
222
223
# File 'app/models/user.rb', line 221

def persisted?
  !(new_record? || destroyed?)
end

#rating_for_vendors(vendor) ⇒ Object



127
128
129
130
131
132
133
134
135
# File 'app/models/user.rb', line 127

def rating_for_vendors(vendor)
  user_ratings_for_vendor = self.ratings.find_by_vendor_id(vendor.id)
  if !user_ratings_for_vendor
    user_ratings_for_vendor = vendor.ratings.new()
    user_ratings_for_vendor.user_id = self.id
    user_ratings_for_vendor.vendor_id = vendor.id
  end
  user_ratings_for_vendor
end

#reset_user_password_tokenObject



160
161
162
163
164
165
# File 'app/models/user.rb', line 160

def reset_user_password_token
  self.reset_password_token   = SecureRandom.hex(3)
  self.reset_password_sent_at = Time.now.utc
  self.save!(validate: false)
  self.reset_password_token
end

#send_instructionsObject



354
355
356
357
358
# File 'app/models/user.rb', line 354

def send_instructions
  template = 'send_instructions'
  subject = "Reset password instructions"
  Notifier.delay.send_instructions(self, subject, template)
end

#send_shift_reminder(min) ⇒ Object

Function for MT2W



181
182
183
184
185
186
187
188
# File 'app/models/user.rb', line 181

def send_shift_reminder(min)
  self.shifts.each do |shift|
    d = shift.due_date
    t = shift.start_time - min.to_i.minutes
    dt = DateTime.new(d.year, d.month, d.day, t.hour, t.min, t.sec)
    ShiftReminderWorker.perform_at(dt,self.email,"Your shift starts in #{min} minutes")
  end
end

#stripe_create(token, plan_id, coupon) ⇒ Object

functions for Sripe of TrackMyAssets



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'app/models/user.rb', line 94

def stripe_create(token, plan_id , coupon)
  Stripe.api_key = "sk_test_eIdlWzka50kLJLNIqAIklamd"
  already_coupon = Stripe::Coupon.all
  already_coupon.data.each do |ex_coupon|
    if ex_coupon and !ex_coupon.id.blank? and ex_coupon.id == coupon
      @coupon_code = coupon
    else
      @coupon_code 
    end
  end
  customer = Stripe::Customer.create(
    :description => "http://trackmyassets.biz",
    :plan => plan_id,
    :source => token ,
    :coupon =>  @coupon_code
  )
  return customer['id']
end

#to_jsonObject



145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'app/models/user.rb', line 145

def to_json
  { 
    :id => self.id,
    :email => self.email,
    :first_name => self.first_name,
    :last_name => self.last_name,
    :phone => self.phone_number,
    #      :address => self.address,
    :roles => self.roles,
    :is_invited => !self.invitation_created_at.nil?,
    :is_accepted => !self.invitation_accepted_at.nil?,
    :is_locked => !self.locked_at.nil?
  }
end

#unread_notifications_countObject



141
142
143
# File 'app/models/user.rb', line 141

def unread_notifications_count
  Notification.joins(:subscribers).where(notification_users: {user_id: self.id, seen: false}).order(created_at: :desc).count()
end

#update_card(subscriber, card_info) ⇒ Object



225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
# File 'app/models/user.rb', line 225

def update_card(subscriber, card_info)
  token = Stripe::Token.create(
    card: {
      number: card_info[:number],
      exp_month: card_info[:exp_month],
      exp_year: card_info[:exp_year],
      cvc: card_info[:cvc]
    }
  )
  customer = Stripe::Customer.retrieve(subscriber.customer_id)
  card = customer.cards.create(card: token.id)
  card.save
  customer.default_card = card.id
  customer.save
rescue Stripe::InvalidRequestError => e
  logger.error "Stripe Error While Updating Card Info: #{e.message}"
  errors.add :base, "#{e.message}"
  false
end