From 010645903c1ea106bc0f7a1ee17db279d549c3c1 Mon Sep 17 00:00:00 2001 From: Tyler Lemburg <trlemburg@gmail.com> Date: Mon, 27 Jun 2016 09:56:55 -0500 Subject: [PATCH] Add ranges to minutes --- .../20160608140300_add_space_permissions.rb | 2 +- .../20160623134800_add_minutes_ranges.rb | 10 +++++++ routes/admin/resources.rb | 8 ++++++ routes/resources.rb | 8 +++--- utils/language.rb | 8 ++++++ views/admin/edit_resource.erb | 13 ++++++---- views/reserve.erb | 26 ++++++++++++------- 7 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 db/migrate/20160623134800_add_minutes_ranges.rb diff --git a/db/migrate/20160608140300_add_space_permissions.rb b/db/migrate/20160608140300_add_space_permissions.rb index 0fe2f83..96291a3 100644 --- a/db/migrate/20160608140300_add_space_permissions.rb +++ b/db/migrate/20160608140300_add_space_permissions.rb @@ -9,7 +9,7 @@ class AddSpacePermissions < ActiveRecord::Migration end def down - remove_column :user_has_permissions, :service_space_id, :integer, :default => 1 + remove_column :user_has_permissions, :service_space_id Permission.find_by(:id => 8).delete end diff --git a/db/migrate/20160623134800_add_minutes_ranges.rb b/db/migrate/20160623134800_add_minutes_ranges.rb new file mode 100644 index 0000000..43df8e4 --- /dev/null +++ b/db/migrate/20160623134800_add_minutes_ranges.rb @@ -0,0 +1,10 @@ +require 'active_record' + +class AddMinutesRanges < ActiveRecord::Migration + def change + add_column :resources, :time_slot_type, :string, :default => 'exact' + add_column :resources, :min_minutes_per_reservation, :integer + add_column :resources, :max_minutes_per_reservation, :integer + add_column :resources, :increment_minutes_per_reservation, :integer + end +end \ No newline at end of file diff --git a/routes/admin/resources.rb b/routes/admin/resources.rb index 4da73e8..a645db6 100644 --- a/routes/admin/resources.rb +++ b/routes/admin/resources.rb @@ -32,7 +32,11 @@ post '/:service_space_url_name/admin/resources/create/?' do resource.service_space_id = @space.id resource.needs_authorization = true resource.is_reservable = params.checked?('is_reservable') + resource.time_slot_type = params[:time_slot_type] resource.minutes_per_reservation = params[:minutes_per_reservation] + resource.min_minutes_per_reservation = params[:min_minutes_per_reservation] + resource.max_minutes_per_reservation = params[:max_minutes_per_reservation] + resource.increment_minutes_per_reservation = params[:increment_minutes_per_reservation] resource.needs_approval = false resource.max_reservations_per_slot = 5 resource.save @@ -68,7 +72,11 @@ post '/:service_space_url_name/admin/resources/:resource_id/edit/?' do resource.model = params[:model] resource.description = params[:description] resource.is_reservable = params.checked?('is_reservable') + resource.time_slot_type = params[:time_slot_type] resource.minutes_per_reservation = params[:minutes_per_reservation] + resource.min_minutes_per_reservation = params[:min_minutes_per_reservation] + resource.max_minutes_per_reservation = params[:max_minutes_per_reservation] + resource.increment_minutes_per_reservation = params[:increment_minutes_per_reservation] resource.save flash(:success, 'Resource Updated', "Your resource #{resource.name} has been updated.") diff --git a/routes/resources.rb b/routes/resources.rb index 2a6582e..a0e344c 100644 --- a/routes/resources.rb +++ b/routes/resources.rb @@ -47,17 +47,17 @@ get '/:service_space_url_name/resources/:resource_id/reserve/?' do # calculate the available start times for reservation if space_hour.nil? start = 0 - while start + (resource.minutes_per_reservation || 15) <= 1440 + while start + (resource.minutes_per_reservation || resource.min_minutes_per_reservation || 15) <= 1440 available_start_times << start - start += (resource.minutes_per_reservation || 15) + start += (resource.minutes_per_reservation || resource.min_minutes_per_reservation || 15) end else space_hour.hours.sort{|x,y| x[:start] <=> y[:start]}.each do |record| if record[:status] == 'open' start = record[:start] - while start + (resource.minutes_per_reservation || 15) <= record[:end] + while start + (resource.minutes_per_reservation || resource.min_minutes_per_reservation || 15) <= record[:end] available_start_times << start - start += (resource.minutes_per_reservation || 15) + start += (resource.minutes_per_reservation || resource.min_minutes_per_reservation || 15) end end end diff --git a/utils/language.rb b/utils/language.rb index f878cca..c267ce1 100644 --- a/utils/language.rb +++ b/utils/language.rb @@ -30,6 +30,14 @@ class Integer "$#{self / 100.0}" end + def minutes_output + if self < 60 + "#{self} minutes" + else + "#{(self / 60)} hours #{self % 60} minutes" + end + end + alias_method :second, :seconds alias_method :minute, :minutes alias_method :hour, :hours diff --git a/views/admin/edit_resource.erb b/views/admin/edit_resource.erb index 720c247..b967df1 100644 --- a/views/admin/edit_resource.erb +++ b/views/admin/edit_resource.erb @@ -6,9 +6,6 @@ <label for="name">Name</label> <input type="text" name="name" id="name" value='<%= resource.name %>'/> - <label for="model">Model</label> - <input type="text" name="model" id="model" value='<%= resource.model %>'/> - <label for="description">Description</label> <textarea id="description" name="description"><%= resource.description %></textarea> @@ -17,8 +14,14 @@ <label for="is-reservable">Requires Reservation?</label> </div> <div> - <label for="minutes-per-reservation">Minutes Per Reservation</label> - <input type="number" name="minutes_per_reservation" id="minutes-per-reservation" value="<%= resource.minutes_per_reservation %>"> + <label for="minutes-per-reservation">Minutes Per Reservation</label><br> + <input type="radio" name="time_slot_type" id="time-slot-type-exact" value="exact" <%= 'checked="checked"' if resource.time_slot_type == 'exact' %>> + <label for="time-slot-type-exact">Exactly:</label> <input type="number" name="minutes_per_reservation" id="minutes-per-reservation" value="<%= resource.minutes_per_reservation %>"><br><br> + <input type="radio" name="time_slot_type" id="time-slot-type-range" value="range" <%= 'checked="checked"' if resource.time_slot_type == 'range' %>> + <label for="time-slot-type-range">Range:</label> + <label for="min-minutes-per-reservation">Min:</label> <input style="width: 100px" type="number" name="min_minutes_per_reservation" id="min-minutes-per-reservation" value="<%= resource.min_minutes_per_reservation %>"> + <label for="max-minutes-per-reservation">Max:</label> <input style="width: 100px" type="number" name="max_minutes_per_reservation" id="max-minutes-per-reservation" value="<%= resource.max_minutes_per_reservation %>"> + <label for="increment-minutes-per-reservation">Increment:</label> <input style="width: 100px" type="number" name="increment_minutes_per_reservation" id="increment-minutes-per-reservation" value="<%= resource.increment_minutes_per_reservation %>"> </div> <br> diff --git a/views/reserve.erb b/views/reserve.erb index ec07065..b791fe3 100644 --- a/views/reserve.erb +++ b/views/reserve.erb @@ -155,17 +155,25 @@ end %> </div> <label for="reservation-length">Reserve resource for:</label><br> - <% if resource.minutes_per_reservation.nil? %> + <% if resource.time_slot_type == 'exact' %> + <input style="width: 50px" disabled="disabled" value="<%= resource.minutes_per_reservation %>" /> <label>minutes</label> + <input type="hidden" name="length" value="<%= resource.minutes_per_reservation %>" /> + <% elsif resource.time_slot_type == 'range' %> + <select id="reservation-length" name="length"> + <% i = resource.min_minutes_per_reservation %> + <% while i <= resource.max_minutes_per_reservation %> + <option value="<%= i %>"><%= i.minutes_output %></option> + <% i += resource.increment_minutes_per_reservation %> + <% end %> + </select> + <% else resource.minutes_per_reservation.nil? %> <select id="reservation-length" name="length"> - <% (1..4).each do |i| %> - <option value="<%=i*15%>"><%=i*15%> minutes</option> - <% end %> - <option value="90">1.5 hours</option> - <option value="120">2 hours</option> + <% (1..4).each do |i| %> + <option value="<%=i*15%>"><%=i*15%> minutes</option> + <% end %> + <option value="90">1.5 hours</option> + <option value="120">2 hours</option> </select> - <% else %> - <input style="width: 50px" disabled="disabled" value="<%= resource.minutes_per_reservation %>" /> <label>minutes</label> - <input type="hidden" name="length" value="<%= resource.minutes_per_reservation %>" /> <% end %> <br><br> <button type="submit" class="wdn-button wdn-button-brand"><%= reservation.nil? ? 'Reserve' : 'Update' %></button> -- GitLab