From 066458ca70045c7511190c8e4c719b9c19aa1cbd Mon Sep 17 00:00:00 2001 From: Peng DU Date: Fri, 1 Jul 2016 12:31:59 +0200 Subject: [PATCH] availability type filter --- .../javascripts/controllers/calendar.coffee | 19 +++++++++++++++---- .../templates/calendar/calendar.html.erb | 6 +++--- .../api/availabilities_controller.rb | 6 ++++-- .../api/availabilities/public.json.jbuilder | 1 + 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/controllers/calendar.coffee b/app/assets/javascripts/controllers/calendar.coffee index b97e37235..36a5c56f5 100644 --- a/app/assets/javascripts/controllers/calendar.coffee +++ b/app/assets/javascripts/controllers/calendar.coffee @@ -9,18 +9,20 @@ Application.Controllers.controller "CalendarController", ["$scope", "$state", "$ ### PRIVATE STATIC CONSTANTS ### + availableTypes = ['machines', 'training', 'event'] + availabilitySource = + url: "/api/availabilities/public?#{$.param({available_type: availableTypes})}" + textColor: 'black' ### PUBLIC SCOPE ### - ## add availabilities url to event sources + ## add availabilities source to event sources $scope.eventSources = [] - $scope.eventSources.push - url: '/api/availabilities/public' - textColor: 'black' ## fullCalendar (v2) configuration $scope.calendarConfig = CalendarConfig + events: availabilitySource.url slotEventOverlap: true header: left: 'month agendaWeek agendaDay' @@ -35,6 +37,15 @@ Application.Controllers.controller "CalendarController", ["$scope", "$state", "$ eventRender: (event, element, view) -> eventRenderCb(event, element) + $scope.filterAvailableType = (type) -> + index = availableTypes.indexOf(type) + if index != -1 + availableTypes.splice(index, 1) + else + availableTypes.push(type) + availabilitySource.url = "/api/availabilities/public?#{$.param({available_type: availableTypes})}" + $scope.calendarConfig.events = availabilitySource.url + ### PRIVATE SCOPE ### diff --git a/app/assets/templates/calendar/calendar.html.erb b/app/assets/templates/calendar/calendar.html.erb index ef13482cd..5d1de8659 100644 --- a/app/assets/templates/calendar/calendar.html.erb +++ b/app/assets/templates/calendar/calendar.html.erb @@ -13,9 +13,9 @@
- {{ 'trainings' }} - {{ 'machines' }} - {{ 'events' }} + {{ 'trainings' }} + {{ 'machines' }} + {{ 'events' }}
diff --git a/app/controllers/api/availabilities_controller.rb b/app/controllers/api/availabilities_controller.rb index 270524f08..f9e8c013f 100644 --- a/app/controllers/api/availabilities_controller.rb +++ b/app/controllers/api/availabilities_controller.rb @@ -17,11 +17,12 @@ class API::AvailabilitiesController < API::ApiController def public start_date = ActiveSupport::TimeZone[params[:timezone]].parse(params[:start]) end_date = ActiveSupport::TimeZone[params[:timezone]].parse(params[:end]).end_of_day + available_type = params[:available_type] || [] @reservations = Reservation.includes(:slots, user: [:profile]).references(:slots, :user).where('slots.start_at >= ? AND slots.end_at <= ?', start_date, end_date) if in_same_day(start_date, end_date) - @training_and_event_availabilities = Availability.includes(:tags, :trainings, :event, :slots).where.not(available_type: 'machines') + @training_and_event_availabilities = Availability.includes(:tags, :trainings, :event, :slots).where(available_type: available_type.dup.delete_if {|t| t == 'machines'}) .where('start_at >= ? AND end_at <= ?', start_date, end_date) - @machine_availabilities = Availability.includes(:tags, :machines).where(available_type: 'machines') + @machine_availabilities = Availability.includes(:tags, :machines).where(available_type: available_type.dup.delete_if {|t| t == 'training' or t == 'event'}) .where('start_at >= ? AND end_at <= ?', start_date, end_date) @machine_slots = [] @machine_availabilities.each do |a| @@ -37,6 +38,7 @@ class API::AvailabilitiesController < API::ApiController else @availabilities = Availability.includes(:tags, :machines, :trainings, :event, :slots) + .where(available_type: available_type) .where('start_at >= ? AND end_at <= ?', start_date, end_date) @availabilities.each do |a| a = verify_training_event_is_reserved(a, @reservations) diff --git a/app/views/api/availabilities/public.json.jbuilder b/app/views/api/availabilities/public.json.jbuilder index 8b88ac698..df5ccbb2f 100644 --- a/app/views/api/availabilities/public.json.jbuilder +++ b/app/views/api/availabilities/public.json.jbuilder @@ -3,6 +3,7 @@ json.array!(@availabilities) do |availability| json.title availability.title json.start availability.start_at.iso8601 json.end availability.end_at.iso8601 + json.textColor 'black' json.backgroundColor 'white' # availability object if availability.try(:available_type)