From 7e83ca48042d165c6ca641fe1aadbeae1c31ff3c Mon Sep 17 00:00:00 2001 From: Sean Perkins Date: Sun, 2 Mar 2014 16:09:16 -0500 Subject: [PATCH] Add overlap validation to blocks --- app/models/block.rb | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/app/models/block.rb b/app/models/block.rb index 2bf5df4..ccb498a 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -7,12 +7,21 @@ class Block < ActiveRecord::Base belongs_to :schedule + before_validation :check_for_overlap, message: "This block overlaps another" # Calculates when a block ends def end_time self.start_time + self.duration end + def occupied_times + ot = [] + self.start_time.upto self.duration do |i| + ot << i + end + return ot + end + def immutable? ret = false ret = true if self.teachers.length > 1 || self.student_groups.length > 1 @@ -33,4 +42,24 @@ def day? return 'Friday' end end + + private + def check_for_overlap + if student_groups.present? + student_groups.each do |sg| + sg.blocks.each do |b| + overlap = self.occupied_times & b.occupied_times + return false if overlap.length > 0 + end + end + end + if teachers.present? + teachers.each do |t| + t.blocks.each do |b| + overlap = self.occupied_times & b.occupied_times + return false if overlap.length > 0 + end + end + end + end end