Finalized payments and CSVs and inactivity

This commit is contained in:
2013-08-28 08:19:01 -07:00
parent e8e024c042
commit 25c0d1e1cb
11 changed files with 120 additions and 13 deletions

View File

@@ -35,9 +35,11 @@ class Ability
can :read, UserCertification
end
# Accountants can manage all
# Accountants can manage payments
if user.accountant?
can :manage, Payment
can :manage, Ipn
can :manage, PaypalCsv
end
# Admins can manage all

View File

@@ -45,6 +45,7 @@ class Ipn < ActiveRecord::Base
end
unless response == "VERIFIED"
Rails.logger.error "Invalid IPN: #{response}"
Rails.logger.error "Data: #{self.data}"
return false
end
@@ -58,8 +59,8 @@ class Ipn < ActiveRecord::Base
private
def create_payment
# find user by email, then by payee
user = User.find_by_email(self.payer_email)
user = User.find_by_payee(self.payer_email) if user.nil? && self.payer_email.present?
user = User.where("lower(email) = ?", self._from_email_address.downcase).first
user = User.where("lower(payee) = ?", self._from_email_address.downcase).first if user.nil? && self._from_email_address.present?
# Only create payments if the IPN matches a member
if user.present?

View File

@@ -7,7 +7,6 @@ class Payment < ActiveRecord::Base
validates_presence_of :user_id, :date, :amount # not created_by
validates_uniqueness_of :date, :scope => :user_id, :message => ' of payment already exists for this user.'
def human_date
if date.year < DateTime.now.year
date.strftime("%b %e, %y")

View File

@@ -38,8 +38,8 @@ class PaypalCsv < ActiveRecord::Base
private
def create_payment
# find user by email, then by payee
user = User.find_by_email(self._from_email_address)
user = User.find_by_payee(self._from_email_address) if user.nil? && self._from_email_address.present?
user = User.where("lower(email) = ?", self._from_email_address.downcase).first
user = User.where("lower(payee) = ?", self._from_email_address.downcase).first if user.nil? && self._from_email_address.present?
# Only create payments if the CSV matches a member
if user.present?

View File

@@ -89,6 +89,11 @@ class User < ActiveRecord::Base
{25 => "Associate", 50 => "Basic", 75 => "Basic", 100 => "Plus"}
end
def payment_status
results = payment_status_calculation
return results[:paid]
end
def member_status
results = member_status_calculation
return results[:rank]
@@ -99,6 +104,15 @@ class User < ActiveRecord::Base
return "<img src='/#{results[:icon]}#{results[:flair]}-coin.png' title='#{results[:message]}' />"
end
def delinquency
if self.payments.count > 0
paydate = self.payments.maximum(:date)
(Date.today - paydate).to_i
else
(Date.today - self.created_at.to_date).to_i
end
end
private
def member_status_calculation
@@ -112,7 +126,7 @@ class User < ActiveRecord::Base
case self.member_level.to_i
when 0..9
if self.payments.count > 0 then
message = "Former Member (#{(DateTime.now - self.payments.last.date).to_i} days ago)"
message = "Former Member (#{(DateTime.now - self.payments.maximum(:date)).to_i/30} months ago)"
icon = :timeout
rank = 1
else
@@ -138,27 +152,41 @@ class User < ActiveRecord::Base
rank = 1000
end
payment_results = payment_status_calculation
flair = payment_results[:flair]
rank = rank/10 unless payment_results[:paid]
message = payment_results[:message] unless payment_results[:message].blank?
return {:message => message, :icon => icon, :flair => flair, :rank => rank}
end
def payment_status_calculation
flair = ""
message = ""
paid = true
# Second status item is payment status
case self.member_level.to_i
when 25..999
# There are payments
if self.payments.count > 0 then
# They're on time
if self.payments.last.date > (DateTime.now - 60.days)
if self.payments.maximum(:date) > (DateTime.now - 60.days)
flair = "-paid"
paid = true
else
message = "Last Payment #{(DateTime.now - self.payments.last.date).to_i/30} months ago"
rank = rank/10
message = "Last Payment #{(DateTime.now - self.payments.maximum(:date)).to_i/30} months ago"
paid = false
end
else
message = "No Payments Recorded"
rank = rank/10
paid = false
end
end
return {:message => message, :icon => icon, :flair => flair, :rank => rank}
return {:message => message, :paid => paid, :flair => flair}
end
def send_new_user_email
Rails.logger.info UserMailer.new_user_email(self).deliver
end