From bf982f8e5151161b104f964c4c93ca1cbacdde93 Mon Sep 17 00:00:00 2001 From: Jiri Strojil Date: Thu, 25 Oct 2018 18:35:58 +0200 Subject: [PATCH 1/4] Fixed scope for volunteers --- app/models/volunteer.rb | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/app/models/volunteer.rb b/app/models/volunteer.rb index ccaabce81..4ae2bba80 100644 --- a/app/models/volunteer.rb +++ b/app/models/volunteer.rb @@ -172,21 +172,9 @@ class Volunteer < ApplicationRecord .where('assignments.period_start IS NOT NULL OR group_assignments.period_start IS NOT NULL') } - scope :active_semester_mission, lambda { |semester| - have_mission.where( - 'assignments.period_start < :prob OR group_assignments.period_start < :prob', - prob: semester.end.advance(weeks: -4) - ).where( - '(assignments.period_end IS NULL OR group_assignments.period_end IS NULL) OR '\ - '(assignments.period_end > :begin OR group_assignments.period_end > :begin)', - begin: semester.begin - ) - } - def self.semester_process_eligible(semester) joins(:contact).where.not(id: have_semester_process(semester).ids) .active_semester_mission(semester) - .group('volunteers.id') end ## Activness Scopes @@ -239,6 +227,19 @@ class Volunteer < ApplicationRecord scope :need_refunds, (-> { where(waive: false) }) + def self.active_semester_mission(semester) + Volunteer.have_mission.find_by_sql([" + SELECT DISTINCT vol.id, vol.* from volunteers as vol + LEFT JOIN assignments on (assignments.volunteer_id = vol.id) + LEFT JOIN group_assignments on (group_assignments.volunteer_id = vol.id) + WHERE (assignments.period_start < DATE(:prob) OR group_assignments.period_start < DATE(:prob)) + AND + ((assignments.period_end IS NULL OR group_assignments.period_end IS NULL) OR + (assignments.period_end > DATE(:begin) OR group_assignments.period_end > DATE(:begin))) + GROUP BY vol.id + ", prob: semester.end.advance(weeks: -4), begin: semester.begin ]) + end + def self.with_billable_hours(date = nil) date = billable_semester_date(date) need_refunds.left_joins(:contact, :hours, :billing_expenses) -- GitLab From f2ed1edf47c328c85ef4438e84e09861e6858186 Mon Sep 17 00:00:00 2001 From: Jiri Strojil Date: Mon, 29 Oct 2018 17:10:48 +0100 Subject: [PATCH 2/4] Active semester scope adjusted --- app/models/volunteer.rb | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/app/models/volunteer.rb b/app/models/volunteer.rb index 4ae2bba80..f98cc9237 100644 --- a/app/models/volunteer.rb +++ b/app/models/volunteer.rb @@ -228,16 +228,18 @@ class Volunteer < ApplicationRecord scope :need_refunds, (-> { where(waive: false) }) def self.active_semester_mission(semester) - Volunteer.have_mission.find_by_sql([" - SELECT DISTINCT vol.id, vol.* from volunteers as vol - LEFT JOIN assignments on (assignments.volunteer_id = vol.id) - LEFT JOIN group_assignments on (group_assignments.volunteer_id = vol.id) - WHERE (assignments.period_start < DATE(:prob) OR group_assignments.period_start < DATE(:prob)) - AND - ((assignments.period_end IS NULL OR group_assignments.period_end IS NULL) OR - (assignments.period_end > DATE(:begin) OR group_assignments.period_end > DATE(:begin))) - GROUP BY vol.id - ", prob: semester.end.advance(weeks: -4), begin: semester.begin ]) + volunteers = Volunteer.have_mission + prob = semester.end.advance(weeks: -4) + sem_start = semester.begin + vol_with_assignments = volunteers.select do |v| + v.assignments + .where("period_start < ?", prob).where("period_end > ? OR period_end IS NULL", sem_start).any? + end + vol_with_group_assignments = volunteers.select do |v| + v.group_assignments + .where("period_start < ?", prob).where("period_end > ? OR period_end IS NULL", sem_start).any? + end + (vol_with_assignments + vol_with_group_assignments).uniq end def self.with_billable_hours(date = nil) -- GitLab From b5b152fe7603c02b3aeb90fd5bd463810ae7525c Mon Sep 17 00:00:00 2001 From: Jiri Strojil Date: Tue, 30 Oct 2018 09:05:23 +0100 Subject: [PATCH 3/4] Refactored fnc --- app/models/volunteer.rb | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/models/volunteer.rb b/app/models/volunteer.rb index f98cc9237..a2ebfc7af 100644 --- a/app/models/volunteer.rb +++ b/app/models/volunteer.rb @@ -175,6 +175,7 @@ class Volunteer < ApplicationRecord def self.semester_process_eligible(semester) joins(:contact).where.not(id: have_semester_process(semester).ids) .active_semester_mission(semester) + .group('volunteers.id') end ## Activness Scopes @@ -231,15 +232,12 @@ class Volunteer < ApplicationRecord volunteers = Volunteer.have_mission prob = semester.end.advance(weeks: -4) sem_start = semester.begin - vol_with_assignments = volunteers.select do |v| - v.assignments - .where("period_start < ?", prob).where("period_end > ? OR period_end IS NULL", sem_start).any? + vol_with_missions = volunteers.select do |v| + [v.assignments, v.group_assignments].detect do |mission| + mission.where("period_start < ?", prob).where("period_end > ? OR period_end IS NULL", sem_start).any? + end end - vol_with_group_assignments = volunteers.select do |v| - v.group_assignments - .where("period_start < ?", prob).where("period_end > ? OR period_end IS NULL", sem_start).any? - end - (vol_with_assignments + vol_with_group_assignments).uniq + vol_with_missions end def self.with_billable_hours(date = nil) -- GitLab From 283da17476ce04322638f988e95d9ec78340746d Mon Sep 17 00:00:00 2001 From: Jiri Strojil Date: Tue, 30 Oct 2018 09:43:14 +0100 Subject: [PATCH 4/4] Tmp --- app/models/volunteer.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/models/volunteer.rb b/app/models/volunteer.rb index a2ebfc7af..3d3db0455 100644 --- a/app/models/volunteer.rb +++ b/app/models/volunteer.rb @@ -175,7 +175,6 @@ class Volunteer < ApplicationRecord def self.semester_process_eligible(semester) joins(:contact).where.not(id: have_semester_process(semester).ids) .active_semester_mission(semester) - .group('volunteers.id') end ## Activness Scopes -- GitLab