103 lines
2.2 KiB
Ruby
103 lines
2.2 KiB
Ruby
class KapsDay < ActiveRecord::Base
|
|
belongs_to :p_customer
|
|
|
|
has_many :kapsmes
|
|
has_many :kaps_rappels, :through => :kapsmes
|
|
|
|
after_save do
|
|
|
|
|
|
generate_kapsmes
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
def generate_kapsmes
|
|
#self.kapsmes.where(:kap_id => 1).destroy_all
|
|
self.p_customer.kaps.where(:kaps_type_id => 1).where("start_at <= ? and (end_at is null or end_at >= ?)", self.date, self.date).each do |kap|
|
|
|
|
|
|
|
|
|
|
if !self.kapsmes.where(:kap_id => kap.id).first
|
|
|
|
if kap.active_days
|
|
if last_paused_kapsme = self.p_customer.kapsmes.where(:kap_id => kap.id, :paused => true).joins(:kaps_day).order("kaps_days.date DESC").first
|
|
#sdffs = sfsf
|
|
#start_date = nil
|
|
start_date = kap.start_at
|
|
else
|
|
start_date = kap.start_at
|
|
|
|
end
|
|
|
|
dif = (self.date - start_date).to_i % (kap.active_days+kap.pause_days)
|
|
|
|
if dif < kap.active_days
|
|
paused = false
|
|
else
|
|
paused = true
|
|
end
|
|
|
|
else
|
|
paused = false
|
|
end
|
|
|
|
self.kapsmes.create(
|
|
:kap_id => kap.id,
|
|
:paused => paused,
|
|
:name => kap.name,
|
|
:description => kap.description,
|
|
:public => kap.public,
|
|
:kaps_cat_id => kap.kaps_cat_id,
|
|
:kaps_type_id => kap.kaps_type_id,
|
|
|
|
:points => kap.points,
|
|
|
|
:origin_kaps_id => kap.origin_kaps_id,
|
|
:origin_author_id => kap.origin_author_id,
|
|
:archived => kap.archived,
|
|
:kaps_day_id => self.id,
|
|
|
|
|
|
:p_customer => self.p_customer
|
|
)
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
end
|
|
end
|
|
|
|
before_validation do
|
|
self.total_points = self.kapsmes.sum(:point_to_count)
|
|
self.points = self.total_points_earneds
|
|
end
|
|
|
|
def total_points_earneds
|
|
self.kapsmes.where(:done => true).sum(:points)
|
|
end
|
|
|
|
|
|
def completed
|
|
(100.0 * self.points.to_f) / total_points.to_f
|
|
|
|
end
|
|
|
|
|
|
def self.cron
|
|
PCustomer.all.each do |pc|
|
|
pc.generate_kaps_days
|
|
end
|
|
|
|
# whenever --update-crontab
|
|
end
|
|
|
|
|
|
end
|