diff --git a/db/migrate/20160608140300_add_space_permissions.rb b/db/migrate/20160608140300_add_space_permissions.rb index 0fe2f83d604f0f8099dc8291616e0c59a110b8e9..96291a3444a94cdde66aaaaaaad7dcecd789d9e3 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 0000000000000000000000000000000000000000..43df8e4c260229ea3e3eb625e7efa8a2c1a82be2 --- /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 4da73e8e1f5c2ba94bf289867a87a2c9d42406f4..a645db6a5c2a575eeca1f2dda403e36767c2fb29 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 2a6582ec55bee25fc77ef7b964cc7a6fbdcebd90..a0e344c06015ec8d68738ef446485009584fbfa7 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 f878ccab2d1c31658585132783d55b523dc46a2f..c267ce1f815170c45bfc29399fdc3043bc49fdc2 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 720c247c5296f66766c105b63ec29bfa5b6d67f4..b967df12618216daa6f5030c6d6ecd97b5acc8a9 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 ec070653cb1c6466f7c7af690363fad9d864ccfd..b791fe303e57bc24a1bf21229c84ae5b68c7c8df 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>