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