From d5580e0c83bca78010c06a002d86915ccf6c81f9 Mon Sep 17 00:00:00 2001
From: Tyler Lemburg <trlemburg@gmail.com>
Date: Thu, 3 Nov 2016 11:50:51 -0500
Subject: [PATCH] Fix some numbers on resource calendar view

---
 views/resource_calendar.erb | 56 ++++++++++++++++++++-----------------
 1 file changed, 30 insertions(+), 26 deletions(-)

diff --git a/views/resource_calendar.erb b/views/resource_calendar.erb
index c55f35a..920a526 100644
--- a/views/resource_calendar.erb
+++ b/views/resource_calendar.erb
@@ -1,6 +1,11 @@
 <% reservation_groups = reservations.group_by do |reservation|
 	reservation.start_time.in_time_zone.strftime("%Y/%m/%d")
-end %>
+end 
+
+HALF_HOUR_HEIGHT = 28 # pixel height of half-hour sections in calendar. DO NOT CHANGE RESPONSIVELY
+SIX_AM_MINUTES = 360 # start time of calendar 
+EIGHT_PM_MINUTES = 1200 # end time of calendar
+%>
 
 <div id="pagetitle">
 	<div id="kioskLogo"></div>
@@ -80,18 +85,22 @@ end %>
 						closeds.each do |closed|
 							start_time = closed[0] %>
 		            		<% end_time = closed[1] %>
-		            		<% 
-		            		if [((end_time - 360) / 30).floor, 35].min  < 0
+		            		<%
+		            		# if the end time is before 6 am, skip.
+		            		if ((end_time - SIX_AM_MINUTES) / 30).floor < 0
 								next
 							end
-							top = ((start_time - 360) / 30) * 20
-							height = (end_time - start_time) * 20 / 30
+							# calculate top based off of 6 am start
+							top = ((start_time - SIX_AM_MINUTES) / 30) * HALF_HOUR_HEIGHT
+							height = (end_time - start_time) * HALF_HOUR_HEIGHT / 30
+							# normalize top to 0, reduce height to accomodate
 							if top < 0
 								height += top
 								top = 0
-							end 
-							if top + height > 720
-								height = 720 - top
+							end
+							# normalize the bottom to the bottom of the calendar at 8pm. 
+							if top + height > (EIGHT_PM_MINUTES / 30) * HALF_HOUR_HEIGHT
+								height = (EIGHT_PM_MINUTES / 30) * HALF_HOUR_HEIGHT - top
 							end
 							%>
 							<div class="status closed" title="Closed" style="top: <%= top %>px; height: <%= height %>px;">
@@ -104,17 +113,17 @@ end %>
 						<% if record[:status] != 'open' && record[:status] != 'closed' %>
 							<% start_time = record[:start] %>
 		            		<% end_time = record[:end] %>
-		            		<% if [((end_time - 360) / 30).floor, 35].min  < 0
+		            		<% if ((end_time - SIX_AM_MINUTES) / 30).floor < 0
 								next
 							end
-							top = ((start_time - 360) / 30) * 20
-							height = (end_time - start_time) * 20 / 30
+							top = ((start_time - SIX_AM_MINUTES) / 30) * HALF_HOUR_HEIGHT
+							height = (end_time - start_time) * HALF_HOUR_HEIGHT / 30
 							if top < 0
 								height += top
 								top = 0
 							end 
-							if top + height > 720
-								height = 720 - top
+							if top + height > (EIGHT_PM_MINUTES / 30) * HALF_HOUR_HEIGHT
+								height = (EIGHT_PM_MINUTES / 30) * HALF_HOUR_HEIGHT - top
 							end
 							%>
 							<div title="<%= record[:status].split('_').join(' ').capitalize_all %>" class="status <%= record[:status].downcase.split('_').join('-') %>" style="top: <%= top %>px; height: <%= height %>px;">
@@ -127,8 +136,8 @@ end %>
 				<% day_events = reservation_groups[day.strftime("%Y/%m/%d")] %>
 				<% unless day_events.nil? %>
 				<% day_events.sort{|a, b| a.start_time <=> b.start_time}.each do |res| %>
-					<% start_slot = [(((res.start_time.in_time_zone - day.midnight) / 60 - 360) / 30).floor, 0].max 
-					end_slot = [(((res.end_time.in_time_zone - day.midnight) / 60 - 360) / 30).floor, 35].min 
+					<% start_slot = [(((res.start_time.in_time_zone - day.midnight) / 60 - SIX_AM_MINUTES) / 30).floor, 0].max 
+					end_slot = [(((res.end_time.in_time_zone - day.midnight) / 60 - SIX_AM_MINUTES) / 30).floor, 35].min 
 					if end_slot < 0
 						next
 					end
@@ -137,8 +146,8 @@ end %>
 						over = slots[k] if slots[k] > over
 					end
 					over = [over,3].min
-					top = (((res.start_time.in_time_zone - day.midnight) / 60 - 360) / 30) * 28
-					height = res.length * 28 / 30
+					top = (((res.start_time.in_time_zone - day.midnight) / 60 - SIX_AM_MINUTES) / 30) * HALF_HOUR_HEIGHT
+					height = res.length * HALF_HOUR_HEIGHT / 30
 					top_overflow = false
 					bottom_overflow = false
 					if top < 0
@@ -146,11 +155,11 @@ end %>
 						top = 0
 						top_overflow = true
 					end 
-					if top + height > 720
-						height = 720 - top
+					if top + height > (EIGHT_PM_MINUTES / 30) * HALF_HOUR_HEIGHT
+						height = (EIGHT_PM_MINUTES / 30) * HALF_HOUR_HEIGHT - top
 						bottom_overflow = true
-						reservation_groups[(day + 1.day).strftime("%Y/%m/%d")] ||= []
-						reservation_groups[(day + 1.day).strftime("%Y/%m/%d")] << res
+						events_groups[(day + 1.day).strftime("%Y/%m/%d")] ||= []
+						events_groups[(day + 1.day).strftime("%Y/%m/%d")] << res
 					end
 					%>
 					<div class="event-container" style="top: <%= top %>px;">
@@ -263,11 +272,6 @@ require(['jquery', '/js/functions.js', '/js/jquery.mousewheel.min.js', '/js/jque
 
 		tick();
     	setInterval(tick, 60000);
-
-
-
-
-
 	});
 });
 </script>
\ No newline at end of file
-- 
GitLab