diff --git a/app/assets/javascripts/controllers/admin/trainings.coffee.erb b/app/assets/javascripts/controllers/admin/trainings.coffee.erb index 1e69b333d..815bf8026 100644 --- a/app/assets/javascripts/controllers/admin/trainings.coffee.erb +++ b/app/assets/javascripts/controllers/admin/trainings.coffee.erb @@ -296,7 +296,7 @@ Application.Controllers.controller "TrainingsAdminController", ["$scope", "$stat # The selected training details will be loaded from the API and rendered into the accordions. ## $scope.selectTrainingToMonitor = -> - Training.get {id: $scope.monitoring.training.id}, (training) -> + Training.availabilities {id: $scope.monitoring.training.id}, (training) -> $scope.groupedAvailabilities = groupAvailabilities([training]) diff --git a/app/assets/javascripts/services/training.coffee b/app/assets/javascripts/services/training.coffee index c62f277d0..6647f0b12 100644 --- a/app/assets/javascripts/services/training.coffee +++ b/app/assets/javascripts/services/training.coffee @@ -5,4 +5,7 @@ Application.Services.factory 'Training', ["$resource", ($resource)-> {id: "@id"}, update: method: 'PUT' + availabilities: + method: 'GET' + url: "/api/trainings/:id/availabilities" ] diff --git a/app/controllers/api/trainings_controller.rb b/app/controllers/api/trainings_controller.rb index 0269c8068..a00d0fc4a 100644 --- a/app/controllers/api/trainings_controller.rb +++ b/app/controllers/api/trainings_controller.rb @@ -17,8 +17,7 @@ class API::TrainingsController < API::ApiController end def show - @training = Training.includes(availabilities: {slots: {reservation: {user: [:profile, :trainings] }}}) - .where(id: params[:id]).first + @training = Training.find(params[:id]) end def create @@ -55,6 +54,12 @@ class API::TrainingsController < API::ApiController head :no_content end + def availabilities + authorize Training + @training = Training.find(params[:id]) + @availabilities = @training.availabilities.includes(slots: {reservation: {user: [:profile, :trainings] }}).order('start_at DESC') + end + private def set_training @training = Training.find(params[:id]) diff --git a/app/policies/training_policy.rb b/app/policies/training_policy.rb index 043817e4a..0a095bd5f 100644 --- a/app/policies/training_policy.rb +++ b/app/policies/training_policy.rb @@ -5,7 +5,7 @@ class TrainingPolicy < ApplicationPolicy end end - %w(show create update).each do |action| + %w(create update).each do |action| define_method "#{action}?" do user.is_admin? end @@ -14,4 +14,8 @@ class TrainingPolicy < ApplicationPolicy def destroy? user.is_admin? and record.destroyable? end + + def availabilities? + user.is_admin? + end end diff --git a/app/views/api/trainings/availabilities.json.jbuilder b/app/views/api/trainings/availabilities.json.jbuilder new file mode 100644 index 000000000..e40db7827 --- /dev/null +++ b/app/views/api/trainings/availabilities.json.jbuilder @@ -0,0 +1,11 @@ +json.extract! @training, :id, :name, :description, :machine_ids, :nb_total_places, :public_page +json.availabilities @availabilities do |a| + json.id a.id + json.start_at a.start_at.iso8601 + json.end_at a.end_at.iso8601 + json.reservation_users a.slots.map do |slot| + json.id slot.reservation.user.id + json.full_name slot.reservation.user.profile.full_name + json.is_valid slot.reservation.user.trainings.include?(@training) + end +end diff --git a/app/views/api/trainings/show.json.jbuilder b/app/views/api/trainings/show.json.jbuilder index ea54df304..5d69b4223 100644 --- a/app/views/api/trainings/show.json.jbuilder +++ b/app/views/api/trainings/show.json.jbuilder @@ -1,12 +1,2 @@ json.extract! @training, :id, :name, :description, :machine_ids, :nb_total_places, :public_page json.training_image @training.training_image.attachment.large.url if @training.training_image -json.availabilities @training.availabilities.order('start_at DESC') do |a| - json.id a.id - json.start_at a.start_at.iso8601 - json.end_at a.end_at.iso8601 - json.reservation_users a.slots.map do |slot| - json.id slot.reservation.user.id - json.full_name slot.reservation.user.profile.full_name - json.is_valid slot.reservation.user.trainings.include?(@training) - end -end diff --git a/config/routes.rb b/config/routes.rb index 2e9b80b13..75c9a0331 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -86,7 +86,9 @@ Rails.application.routes.draw do end # for admin - resources :trainings + resources :trainings do + get :availabilities, on: :member + end resources :credits resources :categories resources :event_themes