class ActivityPayments
Public Class Methods
active_for(s, d = Date.today)
click to toggle source
# File Entities/Activity.rb, line 144 def self.active_for(s, d = Date.today) active_now(for_user(s), d) end
active_now(actp, d = Date.today)
click to toggle source
# File Entities/Activity.rb, line 137 def self.active_now(actp, d = Date.today) return [] unless actp actp.select { |ap| ap.date_start <= d and d <= ap.date_end } end
for_user(s)
click to toggle source
# File Entities/Activity.rb, line 148 def self.for_user(s) s == nil and return [] ActivityPayments.matches_by_person_paid(s) end
get_one_period(date, period, ceil = false)
click to toggle source
# File Entities/Activity.rb, line 81 def self.get_one_period(date, period, ceil = false) [date, case period.to_s when /daily/ date + 1 when /weekly/ (ceil ? week_start(date) + 7 : date) + 7 when /monthly/ (ceil ? Date.new(date.year, date.month + 1) : date).next_month when /yearly/ (ceil ? Date.new(date.year + 1) : date).next_year else raise("Unknown period #{period[0].to_s}!") fail end - 1] end
get_period(date, period, overlap=0)
click to toggle source
Get start and end of a period respecting overlap lesser periods before
# File Entities/Activity.rb, line 99 def self.get_period(date, period, overlap=0) case period.to_s when /daily/ return [date - overlap, date] when /weekly/ ceil = (date + overlap >= week_start(date) + 7) start = ceil ? date : week_start(date) when /monthly/ ceil = (date + overlap * 7 >= Date.new(date.year, date.month + 1)) start = ceil ? date : Date.new(date.year, date.month) when /yearly/ ceil = (date.next_month(overlap) >= Date.new(date.year + 1)) start = ceil ? date : Date.new(date.year) end get_one_period(start, period, ceil) end
pay(act, p_paid, p_cashed, d_today = Date.today)
click to toggle source
# File Entities/Activity.rb, line 116 def self.pay(act, p_paid, p_cashed, d_today = Date.today) if !p_cashed.account_due dputs(0) { "Couldn't make #{p_cashed} pay, as he doesn't have an account_due" } return end mov = Movements.create("#{p_paid.login_name} paid #{p_cashed.login_name} #{act.cost} "+ "for #{act.name}", Date.today, act.cost_mov, p_cashed.account_due, ConfigBase.account_activities) date_start, date_end = case act.start_type.to_s when /payment/ get_one_period(d_today, act.payment_period) when /period/, /period_overlap/ get_period(d_today, act.payment_period, act.overlap.to_i) end log_msg :ActivityPayments, "#{date_start} - #{date_end}: #{mov.inspect}" ActivityPayments.create(activity: act, person_paid: p_paid, person_cashed: p_cashed, movement: mov, date_start: date_start, date_end: date_end) end
week_start(date)
click to toggle source
# File Entities/Activity.rb, line 77 def self.week_start(date) date - date.cwday end
Public Instance Methods
setup_data()
click to toggle source
# File Entities/Activity.rb, line 68 def setup_data value_entity_activity :activity value_entity_person :person_paid value_entity_person :person_cashed value_entity_movement :movement value_date :date_start value_date :date_end end