diff --git a/app/assets/javascripts/app.js b/app/assets/javascripts/app.js index 0b08ad6cf..6f5d0f3d3 100644 --- a/app/assets/javascripts/app.js +++ b/app/assets/javascripts/app.js @@ -93,8 +93,6 @@ angular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.rout $rootScope.phoneRequired = Fablab.phoneRequired; // Global config: if true, the events are shown in the admin calendar $rootScope.eventsInCalendar = Fablab.eventsInCalendar; - // Global config: machine/space slot duration - $rootScope.slotDuration = Fablab.slotDuration; // Global config: if true, user must confirm his email to sign in $rootScope.userConfirmationNeededToSignIn = Fablab.userConfirmationNeededToSignIn; // Global config: if true, wallet will be disable diff --git a/app/assets/javascripts/controllers/admin/calendar.js.erb b/app/assets/javascripts/controllers/admin/calendar.js.erb index 287ae138b..5cb947ce5 100644 --- a/app/assets/javascripts/controllers/admin/calendar.js.erb +++ b/app/assets/javascripts/controllers/admin/calendar.js.erb @@ -18,8 +18,8 @@ * Controller used in the calendar management page */ -Application.Controllers.controller('AdminCalendarController', ['$scope', '$state', '$uibModal', 'moment', 'AuthService', 'Availability', 'Slot', 'Setting', 'Export', 'growl', 'dialogs', 'bookingWindowStart', 'bookingWindowEnd', 'machinesPromise', 'plansPromise', 'groupsPromise', '_t', 'uiCalendarConfig', 'CalendarConfig', 'Member', 'uiTourService', - function ($scope, $state, $uibModal, moment, AuthService, Availability, Slot, Setting, Export, growl, dialogs, bookingWindowStart, bookingWindowEnd, machinesPromise, plansPromise, groupsPromise, _t, uiCalendarConfig, CalendarConfig, Member, uiTourService) { +Application.Controllers.controller('AdminCalendarController', ['$scope', '$state', '$uibModal', 'moment', 'AuthService', 'Availability', 'Slot', 'Setting', 'Export', 'growl', 'dialogs', 'bookingWindowStart', 'bookingWindowEnd', 'machinesPromise', 'plansPromise', 'groupsPromise', 'slotDurationPromise', '_t', 'uiCalendarConfig', 'CalendarConfig', 'Member', 'uiTourService', + function ($scope, $state, $uibModal, moment, AuthService, Availability, Slot, Setting, Export, growl, dialogs, bookingWindowStart, bookingWindowEnd, machinesPromise, plansPromise, groupsPromise, slotDurationPromise, _t, uiCalendarConfig, CalendarConfig, Member, uiTourService) { /* PRIVATE STATIC CONSTANTS */ // The calendar is divided in slots of 30 minutes @@ -29,7 +29,7 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state const BOOKING_SNAP = '00:30:00'; // We do not allow the creation of slots that are not a multiple of 60 minutes - const SLOT_MULTIPLE = Fablab.slotDuration; + const SLOT_MULTIPLE = slotDurationPromise.setting.value; /* PUBLIC SCOPE */ @@ -429,7 +429,8 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state spacesPromise: ['Space', function (Space) { return Space.query().$promise; }], tagsPromise: ['Tag', function (Tag) { return Tag.query().$promise; }], plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }], - groupsPromise: ['Group', function (Group) { return Group.query().$promise; }] + groupsPromise: ['Group', function (Group) { return Group.query().$promise; }], + slotDurationPromise: ['Setting', function (Setting) { return Setting.get({ name: 'slot_duration' }).$promise; }] } }); // when the modal is closed, we send the slot to the server for saving modalInstance.result.then( @@ -531,8 +532,8 @@ Application.Controllers.controller('AdminCalendarController', ['$scope', '$state /** * Controller used in the slot creation modal window */ -Application.Controllers.controller('CreateEventModalController', ['$scope', '$uibModalInstance', '$sce', 'moment', 'start', 'end', 'slots', 'machinesPromise', 'Availability', 'trainingsPromise', 'spacesPromise', 'tagsPromise', 'plansPromise', 'groupsPromise', 'growl', '_t', - function ($scope, $uibModalInstance, $sce, moment, start, end, slots, machinesPromise, Availability, trainingsPromise, spacesPromise, tagsPromise, plansPromise, groupsPromise, growl, _t) { +Application.Controllers.controller('CreateEventModalController', ['$scope', '$uibModalInstance', '$sce', 'moment', 'start', 'end', 'slots', 'machinesPromise', 'Availability', 'trainingsPromise', 'spacesPromise', 'tagsPromise', 'plansPromise', 'groupsPromise', 'slotDurationPromise', 'growl', '_t', + function ($scope, $uibModalInstance, $sce, moment, start, end, slots, machinesPromise, Availability, trainingsPromise, spacesPromise, tagsPromise, plansPromise, groupsPromise, slotDurationPromise, growl, _t) { // $uibModal parameter $scope.start = start; @@ -595,7 +596,7 @@ Application.Controllers.controller('CreateEventModalController', ['$scope', '$ui period: 'week', nb_periods: 1, end_date: undefined, // recurrence end - slot_duration: Fablab.slotDuration + slot_duration: parseInt(slotDurationPromise.setting.value, 10) }; // recurrent slots diff --git a/app/assets/javascripts/controllers/admin/pricing.js.erb b/app/assets/javascripts/controllers/admin/pricing.js.erb index 7d501e4a0..9aa323607 100644 --- a/app/assets/javascripts/controllers/admin/pricing.js.erb +++ b/app/assets/javascripts/controllers/admin/pricing.js.erb @@ -18,8 +18,8 @@ /** * Controller used in the prices edition page */ -Application.Controllers.controller('EditPricingController', ['$scope', '$state', '$uibModal', '$filter', 'TrainingsPricing', 'Credit', 'Pricing', 'Plan', 'Coupon', 'plans', 'groups', 'growl', 'machinesPricesPromise', 'Price', 'dialogs', 'trainingsPricingsPromise', 'trainingsPromise', 'machineCreditsPromise', 'machinesPromise', 'trainingCreditsPromise', 'couponsPromise', 'spacesPromise', 'spacesPricesPromise', 'spacesCreditsPromise', '_t', 'Member', 'uiTourService', - function ($scope, $state, $uibModal, $filter, TrainingsPricing, Credit, Pricing, Plan, Coupon, plans, groups, growl, machinesPricesPromise, Price, dialogs, trainingsPricingsPromise, trainingsPromise, machineCreditsPromise, machinesPromise, trainingCreditsPromise, couponsPromise, spacesPromise, spacesPricesPromise, spacesCreditsPromise, _t, Member, uiTourService) { +Application.Controllers.controller('EditPricingController', ['$scope', '$state', '$uibModal', '$filter', 'TrainingsPricing', 'Credit', 'Pricing', 'Plan', 'Coupon', 'plans', 'groups', 'growl', 'machinesPricesPromise', 'Price', 'dialogs', 'trainingsPricingsPromise', 'trainingsPromise', 'machineCreditsPromise', 'machinesPromise', 'trainingCreditsPromise', 'couponsPromise', 'spacesPromise', 'spacesPricesPromise', 'spacesCreditsPromise', 'slotDurationPromise', '_t', 'Member', 'uiTourService', + function ($scope, $state, $uibModal, $filter, TrainingsPricing, Credit, Pricing, Plan, Coupon, plans, groups, growl, machinesPricesPromise, Price, dialogs, trainingsPricingsPromise, trainingsPromise, machineCreditsPromise, machinesPromise, trainingCreditsPromise, couponsPromise, spacesPromise, spacesPricesPromise, spacesCreditsPromise, slotDurationPromise, _t, Member, uiTourService) { /* PUBLIC SCOPE */ // List of machines prices (not considering any plan) @@ -76,6 +76,9 @@ Application.Controllers.controller('EditPricingController', ['$scope', '$state', // Default: we show only enabled plans $scope.planFiltering = 'enabled'; + // Default duration for the slots + $scope.slotDuration = parseInt(slotDurationPromise.setting.value, 10); + // Available options for filtering plans by status $scope.filterDisabled = [ 'enabled', @@ -620,7 +623,7 @@ Application.Controllers.controller('EditPricingController', ['$scope', '$state', /** * Return the exemple price based on the configuration of the default slot duration. * @param type {string} 'hourly_rate' | * - * @returns {number} price for Fablab.slotDuration minutes. + * @returns {number} price for "SLOT_DURATION" minutes. */ $scope.examplePrice = function(type) { const hourlyRate = 10; @@ -629,7 +632,7 @@ Application.Controllers.controller('EditPricingController', ['$scope', '$state', return $filter('currency')(hourlyRate); } - const price = (hourlyRate / 60) * Fablab.slotDuration; + const price = (hourlyRate / 60) * $scope.slotDuration; return $filter('currency')(price); } diff --git a/app/assets/javascripts/router.js.erb b/app/assets/javascripts/router.js.erb index 0d638ab5e..43184a193 100644 --- a/app/assets/javascripts/router.js.erb +++ b/app/assets/javascripts/router.js.erb @@ -586,7 +586,8 @@ angular.module('application.router', ['ui.router']) bookingWindowEnd: ['Setting', function (Setting) { return Setting.get({ name: 'booking_window_end' }).$promise; }], machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }], plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }], - groupsPromise: ['Group', function (Group) { return Group.query().$promise; }] + groupsPromise: ['Group', function (Group) { return Group.query().$promise; }], + slotDurationPromise: ['Setting', function (Setting) { return Setting.get({ name: 'slot_duration' }).$promise; }] } }) .state('app.admin.calendar.icalendar', { @@ -752,7 +753,8 @@ angular.module('application.router', ['ui.router']) couponsPromise: ['Coupon', function (Coupon) { return Coupon.query({ page: 1, filter: 'all' }).$promise; }], spacesPromise: ['Space', function (Space) { return Space.query().$promise; }], spacesPricesPromise: ['Price', function (Price) { return Price.query({ priceable_type: 'Space', plan_id: 'null' }).$promise; }], - spacesCreditsPromise: ['Credit', function (Credit) { return Credit.query({ creditable_type: 'Space' }).$promise; }] + spacesCreditsPromise: ['Credit', function (Credit) { return Credit.query({ creditable_type: 'Space' }).$promise; }], + slotDurationPromise: ['Setting', function (Setting) { return Setting.get({ name: 'slot_duration' }).$promise; }] } }) diff --git a/app/views/application/index.html.erb b/app/views/application/index.html.erb index 2b592b512..278c69b54 100644 --- a/app/views/application/index.html.erb +++ b/app/views/application/index.html.erb @@ -31,7 +31,6 @@ Fablab.fablabWithoutWallet = ('<%= Rails.application.secrets.fablab_without_wallet %>' === 'true'); Fablab.bookSlotAtSameTime = ('<%= Setting.get('book_overlapping_slots') %>' === 'true'); Fablab.eventsInCalendar = ('<%= Rails.application.secrets.events_in_calendar %>' === 'true'); - Fablab.slotDuration = parseInt("<%= Setting.get('slot_duration') %>", 10); Fablab.featureTourDisplay = "<%= Rails.application.secrets.feature_tour_display %>"; Fablab.disqusShortname = "<%= Rails.application.secrets.disqus_shortname %>"; Fablab.defaultHost = "<%= Rails.application.secrets.default_host %>";