mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-12-04 15:24:23 +01:00
Merge branch 'dev' for release 5.0.4
This commit is contained in:
commit
8484268226
11
CHANGELOG.md
11
CHANGELOG.md
@ -1,5 +1,16 @@
|
|||||||
# Changelog Fab-manager
|
# Changelog Fab-manager
|
||||||
|
|
||||||
|
## v5.0.4 2021 June 15
|
||||||
|
|
||||||
|
- Ability to disable the public agenda
|
||||||
|
- Display the category in the plans list
|
||||||
|
- Do not display the type in the plans list
|
||||||
|
- Updated medium-editor to v5 and angular-medium-editor accordingly
|
||||||
|
- Fix a bug: a message tells that creating a new plan fails, but it worked
|
||||||
|
- Fix a bug: unable to select no category in plan creation/edition after a category selection
|
||||||
|
- Fix a bug: the training validation modal shows cancelled trainings
|
||||||
|
- [TODO DEPLOY] `rails db:seed`
|
||||||
|
|
||||||
## v5.0.3 2021 June 14
|
## v5.0.3 2021 June 14
|
||||||
|
|
||||||
- Updated user's manual for v5
|
- Updated user's manual for v5
|
||||||
|
2
Procfile
2
Procfile
@ -1,4 +1,4 @@
|
|||||||
#web: bundle exec rails server puma -p $PORT
|
web: bundle exec rails server puma -p $PORT
|
||||||
worker: bundle exec sidekiq -C ./config/sidekiq.yml
|
worker: bundle exec sidekiq -C ./config/sidekiq.yml
|
||||||
wp-client: bin/webpack-dev-server
|
wp-client: bin/webpack-dev-server
|
||||||
wp-server: SERVER_BUNDLE_ONLY=yes bin/webpack --watch
|
wp-server: SERVER_BUNDLE_ONLY=yes bin/webpack --watch
|
||||||
|
@ -26,11 +26,11 @@ class API::PlansController < API::ApiController
|
|||||||
type = plan_params[:type]
|
type = plan_params[:type]
|
||||||
partner = params[:plan][:partner_id].empty? ? nil : User.find(params[:plan][:partner_id])
|
partner = params[:plan][:partner_id].empty? ? nil : User.find(params[:plan][:partner_id])
|
||||||
|
|
||||||
res = PlansService.create(type, partner, plan_params)
|
plan = PlansService.create(type, partner, plan_params)
|
||||||
if res.errors
|
if plan.errors.keys.count.positive?
|
||||||
render json: res.errors, status: :unprocessable_entity
|
render json: plan.errors, status: :unprocessable_entity
|
||||||
else
|
else
|
||||||
render json: res, status: :created
|
render json: plan, status: :created
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -60,7 +60,8 @@ class API::TrainingsController < API::ApiController
|
|||||||
@training = Training.find(params[:id])
|
@training = Training.find(params[:id])
|
||||||
@availabilities = @training.availabilities
|
@availabilities = @training.availabilities
|
||||||
.includes(slots: { reservations: { statistic_profile: [:trainings, user: [:profile]] } })
|
.includes(slots: { reservations: { statistic_profile: [:trainings, user: [:profile]] } })
|
||||||
.order('start_at DESC')
|
.where('slots.canceled_at': nil)
|
||||||
|
.order('availabilities.start_at DESC')
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -87,6 +87,8 @@ Application.Controllers.controller('NewPlanController', ['$scope', '$uibModal',
|
|||||||
|
|
||||||
// list of all plan categories
|
// list of all plan categories
|
||||||
$scope.planCategories = planCategories;
|
$scope.planCategories = planCategories;
|
||||||
|
// we add an empty element to let the user select 'no category'
|
||||||
|
$scope.planCategories.unshift({ id: null, name: '' });
|
||||||
|
|
||||||
// prices bindings
|
// prices bindings
|
||||||
$scope.prices = {
|
$scope.prices = {
|
||||||
@ -239,6 +241,8 @@ Application.Controllers.controller('EditPlanController', ['$scope', 'groups', 'p
|
|||||||
|
|
||||||
// list of all plan categories
|
// list of all plan categories
|
||||||
$scope.planCategories = planCategories;
|
$scope.planCategories = planCategories;
|
||||||
|
// we add an empty element to let the user select 'no category'
|
||||||
|
$scope.planCategories.unshift({ id: null, name: '' });
|
||||||
|
|
||||||
// current form is used for edition mode
|
// current form is used for edition mode
|
||||||
$scope.mode = 'edition';
|
$scope.mode = 'edition';
|
||||||
|
@ -18,8 +18,8 @@
|
|||||||
/**
|
/**
|
||||||
* Controller used in the prices edition page
|
* 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', 'settingsPromise', '_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', 'settingsPromise', '_t', 'Member', 'uiTourService', 'planCategories',
|
||||||
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, settingsPromise, _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, settingsPromise, _t, Member, uiTourService, planCategories) {
|
||||||
/* PUBLIC SCOPE */
|
/* PUBLIC SCOPE */
|
||||||
|
|
||||||
// List of machines prices (not considering any plan)
|
// List of machines prices (not considering any plan)
|
||||||
@ -36,6 +36,9 @@ Application.Controllers.controller('EditPricingController', ['$scope', '$state',
|
|||||||
$scope.groups = groups.filter(function (g) { return g.slug !== 'admins'; });
|
$scope.groups = groups.filter(function (g) { return g.slug !== 'admins'; });
|
||||||
$scope.enabledGroups = groups.filter(function (g) { return (g.slug !== 'admins') && !g.disabled; });
|
$scope.enabledGroups = groups.filter(function (g) { return (g.slug !== 'admins') && !g.disabled; });
|
||||||
|
|
||||||
|
// List of all plan-categories
|
||||||
|
$scope.planCategories = planCategories;
|
||||||
|
|
||||||
// Associate free machine hours with subscriptions
|
// Associate free machine hours with subscriptions
|
||||||
$scope.machineCredits = machineCreditsPromise;
|
$scope.machineCredits = machineCreditsPromise;
|
||||||
|
|
||||||
@ -433,14 +436,15 @@ Application.Controllers.controller('EditPricingController', ['$scope', '$state',
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If the plan does not have a type, return a default value for display purposes
|
* Return the name of the plan-category, from its ID
|
||||||
* @param type {string|undefined|null} plan's type (eg. 'partner')
|
* @param id {number|undefined} plan-category's id
|
||||||
* @returns {string}
|
* @returns {string} the name
|
||||||
*/
|
*/
|
||||||
$scope.getPlanType = function (type) {
|
$scope.getPlanCategory = function (id) {
|
||||||
if (type === 'PartnerPlan') {
|
const cat = $scope.planCategories.find(c => c.id === id);
|
||||||
return _t('app.admin.pricing.partner');
|
if (cat) {
|
||||||
} else { return _t('app.admin.pricing.standard'); }
|
return cat.name;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,12 +23,6 @@ Application.Controllers.controller('MainNavController', ['$scope', function ($sc
|
|||||||
class: 'home-link'
|
class: 'home-link'
|
||||||
},
|
},
|
||||||
{ class: 'menu-spacer' },
|
{ class: 'menu-spacer' },
|
||||||
{
|
|
||||||
state: 'app.public.calendar',
|
|
||||||
linkText: 'app.public.common.public_calendar',
|
|
||||||
linkIcon: 'calendar',
|
|
||||||
class: 'public-calendar-link'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
state: 'app.public.machines_list',
|
state: 'app.public.machines_list',
|
||||||
linkText: 'app.public.common.reserve_a_machine',
|
linkText: 'app.public.common.reserve_a_machine',
|
||||||
@ -79,6 +73,15 @@ Application.Controllers.controller('MainNavController', ['$scope', function ($sc
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($scope.$root.modules.publicAgenda) {
|
||||||
|
$scope.navLinks.splice(2, 0, {
|
||||||
|
state: 'app.public.calendar',
|
||||||
|
linkText: 'app.public.common.public_calendar',
|
||||||
|
linkIcon: 'calendar',
|
||||||
|
class: 'public-calendar-link'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Fablab.adminNavLinks = Fablab.adminNavLinks || [];
|
Fablab.adminNavLinks = Fablab.adminNavLinks || [];
|
||||||
const adminNavLinks = [
|
const adminNavLinks = [
|
||||||
{
|
{
|
||||||
|
@ -107,7 +107,8 @@ export enum SettingName {
|
|||||||
PayZenEndpoint = 'payzen_endpoint',
|
PayZenEndpoint = 'payzen_endpoint',
|
||||||
PayZenPublicKey = 'payzen_public_key',
|
PayZenPublicKey = 'payzen_public_key',
|
||||||
PayZenHmacKey = 'payzen_hmac',
|
PayZenHmacKey = 'payzen_hmac',
|
||||||
PayZenCurrency = 'payzen_currency'
|
PayZenCurrency = 'payzen_currency',
|
||||||
|
PublicAgendaModule = 'public_agenda_module'
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Setting {
|
export interface Setting {
|
||||||
|
@ -38,7 +38,7 @@ angular.module('application.router', ['ui.router'])
|
|||||||
logoFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'logo-file' }).$promise; }],
|
logoFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'logo-file' }).$promise; }],
|
||||||
logoBlackFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'logo-black-file' }).$promise; }],
|
logoBlackFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'logo-black-file' }).$promise; }],
|
||||||
sharedTranslations: ['Translations', function (Translations) { return Translations.query(['app.shared', 'app.public.common']).$promise; }],
|
sharedTranslations: ['Translations', function (Translations) { return Translations.query(['app.shared', 'app.public.common']).$promise; }],
|
||||||
modulesPromise: ['Setting', function (Setting) { return Setting.query({ names: "['spaces_module', 'plans_module', 'invoicing_module', 'wallet_module', 'statistics_module', 'trainings_module']" }).$promise; }]
|
modulesPromise: ['Setting', function (Setting) { return Setting.query({ names: "['spaces_module', 'plans_module', 'invoicing_module', 'wallet_module', 'statistics_module', 'trainings_module', 'public_agenda_module']" }).$promise; }]
|
||||||
},
|
},
|
||||||
onEnter: ['$rootScope', 'logoFile', 'logoBlackFile', 'modulesPromise', 'CSRF', function ($rootScope, logoFile, logoBlackFile, modulesPromise, CSRF) {
|
onEnter: ['$rootScope', 'logoFile', 'logoBlackFile', 'modulesPromise', 'CSRF', function ($rootScope, logoFile, logoBlackFile, modulesPromise, CSRF) {
|
||||||
// Retrieve Anti-CSRF tokens from cookies
|
// Retrieve Anti-CSRF tokens from cookies
|
||||||
@ -52,6 +52,7 @@ angular.module('application.router', ['ui.router'])
|
|||||||
trainings: (modulesPromise.trainings_module === 'true'),
|
trainings: (modulesPromise.trainings_module === 'true'),
|
||||||
invoicing: (modulesPromise.invoicing_module === 'true'),
|
invoicing: (modulesPromise.invoicing_module === 'true'),
|
||||||
wallet: (modulesPromise.wallet_module === 'true'),
|
wallet: (modulesPromise.wallet_module === 'true'),
|
||||||
|
publicAgenda: (modulesPromise.public_agenda_module === 'true'),
|
||||||
statistics: (modulesPromise.statistics_module === 'true')
|
statistics: (modulesPromise.statistics_module === 'true')
|
||||||
};
|
};
|
||||||
}]
|
}]
|
||||||
@ -570,6 +571,7 @@ angular.module('application.router', ['ui.router'])
|
|||||||
// global calendar (trainings, machines and events)
|
// global calendar (trainings, machines and events)
|
||||||
.state('app.public.calendar', {
|
.state('app.public.calendar', {
|
||||||
url: '/calendar',
|
url: '/calendar',
|
||||||
|
abstract: !Fablab.publicAgendaModule,
|
||||||
views: {
|
views: {
|
||||||
'main@': {
|
'main@': {
|
||||||
templateUrl: '/calendar/calendar.html',
|
templateUrl: '/calendar/calendar.html',
|
||||||
@ -780,7 +782,8 @@ angular.module('application.router', ['ui.router'])
|
|||||||
spacesPromise: ['Space', function (Space) { return Space.query().$promise; }],
|
spacesPromise: ['Space', function (Space) { return Space.query().$promise; }],
|
||||||
spacesPricesPromise: ['Price', function (Price) { return Price.query({ priceable_type: 'Space', plan_id: 'null' }).$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; }],
|
||||||
settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: "['feature_tour_display', 'slot_duration']" }).$promise; }]
|
settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: "['feature_tour_display', 'slot_duration']" }).$promise; }],
|
||||||
|
planCategories: ['PlanCategory', function (PlanCategory) { return PlanCategory.query().$promise; }]
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -1077,7 +1080,7 @@ angular.module('application.router', ['ui.router'])
|
|||||||
"'fablab_name', 'name_genre', 'reminder_enable', 'plans_module', 'confirmation_required', " +
|
"'fablab_name', 'name_genre', 'reminder_enable', 'plans_module', 'confirmation_required', " +
|
||||||
"'reminder_delay', 'visibility_yearly', 'visibility_others', 'wallet_module', 'trainings_module', " +
|
"'reminder_delay', 'visibility_yearly', 'visibility_others', 'wallet_module', 'trainings_module', " +
|
||||||
"'display_name_enable', 'machines_sort_by', 'fab_analytics', 'statistics_module', 'address_required', " +
|
"'display_name_enable', 'machines_sort_by', 'fab_analytics', 'statistics_module', 'address_required', " +
|
||||||
"'link_name', 'home_content', 'home_css', 'phone_required', 'upcoming_events_shown']"
|
"'link_name', 'home_content', 'home_css', 'phone_required', 'upcoming_events_shown', 'public_agenda_module']"
|
||||||
}).$promise;
|
}).$promise;
|
||||||
}],
|
}],
|
||||||
privacyDraftsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'privacy_draft', history: true }).$promise; }],
|
privacyDraftsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'privacy_draft', history: true }).$promise; }],
|
||||||
|
@ -23,10 +23,10 @@
|
|||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><a href="" ng-click="setOrderPlans('type')">{{ 'app.admin.pricing.type' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='type', 'fa fa-sort-alpha-desc': orderPlans=='-type', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
|
||||||
<th><a href="" ng-click="setOrderPlans('name')">{{ 'app.admin.pricing.name' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='name', 'fa fa-sort-alpha-desc': orderPlans=='-name', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
<th><a href="" ng-click="setOrderPlans('name')">{{ 'app.admin.pricing.name' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='name', 'fa fa-sort-alpha-desc': orderPlans=='-name', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
||||||
<th><a href="" ng-click="setOrderPlans('interval')">{{ 'app.admin.pricing.duration' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-amount-asc': orderPlans=='interval', 'fa fa-sort-amount-desc': orderPlans=='-interval', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
<th><a href="" ng-click="setOrderPlans('interval')">{{ 'app.admin.pricing.duration' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-amount-asc': orderPlans=='interval', 'fa fa-sort-amount-desc': orderPlans=='-interval', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
||||||
<th><a href="" ng-click="setOrderPlans('group_id')">{{ 'app.admin.pricing.group' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='group_id', 'fa fa-sort-alpha-desc': orderPlans=='-group_id', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
<th><a href="" ng-click="setOrderPlans('group_id')">{{ 'app.admin.pricing.group' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='group_id', 'fa fa-sort-alpha-desc': orderPlans=='-group_id', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
||||||
|
<th><a href="" ng-click="setOrderPlans('plan_category_id')">{{ 'app.admin.pricing.category' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-alpha-asc': orderPlans=='plan_category_id', 'fa fa-sort-alpha-desc': orderPlans=='-plan_category_id', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
||||||
<th class="hidden-xs"><a href="" ng-click="setOrderPlans('app.admin.pricing.ui_weight')">{{ 'app.admin.pricing.prominence' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderPlans=='ui_weight', 'fa fa-sort-numeric-desc': orderPlans=='-ui_weight', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
<th class="hidden-xs"><a href="" ng-click="setOrderPlans('app.admin.pricing.ui_weight')">{{ 'app.admin.pricing.prominence' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderPlans=='ui_weight', 'fa fa-sort-numeric-desc': orderPlans=='-ui_weight', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
||||||
<th><a href="" ng-click="setOrderPlans('amount')">{{ 'app.admin.pricing.price' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderPlans=='amount', 'fa fa-sort-numeric-desc': orderPlans=='-amount', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
<th><a href="" ng-click="setOrderPlans('amount')">{{ 'app.admin.pricing.price' | translate }} <i class="fa fa-arrows-v" ng-class="{'fa fa-sort-numeric-asc': orderPlans=='amount', 'fa fa-sort-numeric-desc': orderPlans=='-amount', 'fa fa-arrows-v': orderPlans }"></i></a></th>
|
||||||
<th></th>
|
<th></th>
|
||||||
@ -36,10 +36,10 @@
|
|||||||
<tr ng-repeat="plan in plans | filterDisabled:planFiltering | orderBy:orderPlans"
|
<tr ng-repeat="plan in plans | filterDisabled:planFiltering | orderBy:orderPlans"
|
||||||
ng-class="{'disabled-line' : plan.disabled && planFiltering === 'all'}"
|
ng-class="{'disabled-line' : plan.disabled && planFiltering === 'all'}"
|
||||||
ng-init="group = getGroupFromId(groups, plan.group_id)">
|
ng-init="group = getGroupFromId(groups, plan.group_id)">
|
||||||
<td>{{getPlanType(plan.type)}}</td>
|
|
||||||
<td>{{plan.base_name}}</td>
|
<td>{{plan.base_name}}</td>
|
||||||
<td>{{ plan.interval | planIntervalFilter:plan.interval_count }}</td>
|
<td>{{ plan.interval | planIntervalFilter:plan.interval_count }}</td>
|
||||||
<td>{{group.name}}</td>
|
<td>{{group.name}}</td>
|
||||||
|
<td>{{getPlanCategory(plan.plan_category_id)}}</td>
|
||||||
<td class="hidden-xs">{{plan.ui_weight}}</td>
|
<td class="hidden-xs">{{plan.ui_weight}}</td>
|
||||||
<td>{{plan.amount | currency}}</td>
|
<td>{{plan.amount | currency}}</td>
|
||||||
<td><button type="button" class="btn btn-default" ui-sref="app.admin.plans.edit({id:plan.id})"><i class="fa fa-pencil-square-o"></i></button> <button type="button" class="btn btn-danger" ng-click="deletePlan(plans, plan.id)"><i class="fa fa-trash"></i></button></td>
|
<td><button type="button" class="btn btn-default" ui-sref="app.admin.plans.edit({id:plan.id})"><i class="fa fa-pencil-square-o"></i></button> <button type="button" class="btn btn-danger" ng-click="deletePlan(plans, plan.id)"><i class="fa fa-trash"></i></button></td>
|
||||||
|
@ -517,6 +517,14 @@
|
|||||||
label="app.admin.settings.general.enable_wallet"
|
label="app.admin.settings.general.enable_wallet"
|
||||||
classes="m-l"></boolean-setting>
|
classes="m-l"></boolean-setting>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<h3 class="m-l" translate>{{ 'app.admin.settings.general.public_agenda' }}</h3>
|
||||||
|
<p class="alert alert-warning m-h-md" ng-bind-html="'app.admin.settings.general.public_agenda_info_html' | translate"></p>
|
||||||
|
<boolean-setting name="public_agenda_module"
|
||||||
|
settings="allSettings"
|
||||||
|
label="app.admin.settings.general.enable_public_agenda"
|
||||||
|
classes="m-l"></boolean-setting>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<h3 class="m-l" translate>{{ 'app.admin.settings.general.statistics' }}</h3>
|
<h3 class="m-l" translate>{{ 'app.admin.settings.general.statistics' }}</h3>
|
||||||
<p class="alert alert-warning m-h-md" ng-bind-html="'app.admin.settings.general.statistics_info_html' | translate"></p>
|
<p class="alert alert-warning m-h-md" ng-bind-html="'app.admin.settings.general.statistics_info_html' | translate"></p>
|
||||||
|
@ -117,7 +117,8 @@ class Setting < ApplicationRecord
|
|||||||
payzen_endpoint
|
payzen_endpoint
|
||||||
payzen_public_key
|
payzen_public_key
|
||||||
payzen_hmac
|
payzen_hmac
|
||||||
payzen_currency] }
|
payzen_currency
|
||||||
|
public_agenda_module] }
|
||||||
# WARNING: when adding a new key, you may also want to add it in app/policies/setting_policy.rb#public_whitelist
|
# WARNING: when adding a new key, you may also want to add it in app/policies/setting_policy.rb#public_whitelist
|
||||||
|
|
||||||
def value
|
def value
|
||||||
|
@ -39,7 +39,7 @@ class SettingPolicy < ApplicationPolicy
|
|||||||
tracking_id book_overlapping_slots slot_duration events_in_calendar spaces_module plans_module invoicing_module
|
tracking_id book_overlapping_slots slot_duration events_in_calendar spaces_module plans_module invoicing_module
|
||||||
recaptcha_site_key feature_tour_display disqus_shortname allowed_cad_extensions openlab_app_id openlab_default
|
recaptcha_site_key feature_tour_display disqus_shortname allowed_cad_extensions openlab_app_id openlab_default
|
||||||
online_payment_module stripe_public_key confirmation_required wallet_module trainings_module address_required
|
online_payment_module stripe_public_key confirmation_required wallet_module trainings_module address_required
|
||||||
payment_gateway payzen_endpoint payzen_public_key]
|
payment_gateway payzen_endpoint payzen_public_key public_agenda_module]
|
||||||
end
|
end
|
||||||
|
|
||||||
##
|
##
|
||||||
|
@ -14,11 +14,8 @@ class PlansService
|
|||||||
plan = type.constantize.new(params)
|
plan = type.constantize.new(params)
|
||||||
if plan.save
|
if plan.save
|
||||||
partner&.add_role :partner, plan
|
partner&.add_role :partner, plan
|
||||||
plan
|
|
||||||
else
|
|
||||||
puts plan.errors
|
|
||||||
{ errors: plan.errors }
|
|
||||||
end
|
end
|
||||||
|
plan
|
||||||
end
|
end
|
||||||
rescue PaymentGatewayError => e
|
rescue PaymentGatewayError => e
|
||||||
{ errors: e.message }
|
{ errors: e.message }
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
Fablab.spacesModule = ('<%= Setting.get('spaces_module') %>' === 'true');
|
Fablab.spacesModule = ('<%= Setting.get('spaces_module') %>' === 'true');
|
||||||
Fablab.trainingsModule = ('<%= Setting.get('trainings_module') %>' === 'true');
|
Fablab.trainingsModule = ('<%= Setting.get('trainings_module') %>' === 'true');
|
||||||
Fablab.walletModule = ('<%= Setting.get('wallet_module') %>' === 'true');
|
Fablab.walletModule = ('<%= Setting.get('wallet_module') %>' === 'true');
|
||||||
|
Fablab.publicAgendaModule = ('<%= Setting.get('public_agenda_module') %>' === 'true');
|
||||||
Fablab.statisticsModule = ('<%= Setting.get('statistics_module') %>' === 'true');
|
Fablab.statisticsModule = ('<%= Setting.get('statistics_module') %>' === 'true');
|
||||||
Fablab.defaultHost = "<%= Rails.application.secrets.default_host %>";
|
Fablab.defaultHost = "<%= Rails.application.secrets.default_host %>";
|
||||||
Fablab.trackingId = "<%= Setting.get('tracking_id') %>";
|
Fablab.trackingId = "<%= Setting.get('tracking_id') %>";
|
||||||
|
@ -300,12 +300,10 @@ de:
|
|||||||
list_of_the_subscription_plans: "Liste der Abonnement-Pläne"
|
list_of_the_subscription_plans: "Liste der Abonnement-Pläne"
|
||||||
disabled_plans_info_html: "<p><strong>Warnung:</strong> die Abonnements sind in dieser Anwendung deaktiviert.</p><p>Sie können Abonnements erstellen, aber sie werden erst mit der Aktivierung des Planungsmoduls im Abschnitt « Anpassen » verfügbar.</p>"
|
disabled_plans_info_html: "<p><strong>Warnung:</strong> die Abonnements sind in dieser Anwendung deaktiviert.</p><p>Sie können Abonnements erstellen, aber sie werden erst mit der Aktivierung des Planungsmoduls im Abschnitt « Anpassen » verfügbar.</p>"
|
||||||
add_a_new_subscription_plan: "Neues Abonnement hinzufügen"
|
add_a_new_subscription_plan: "Neues Abonnement hinzufügen"
|
||||||
type: "Typ"
|
|
||||||
partner: "Partner"
|
|
||||||
standard: "Standard"
|
|
||||||
name: "Name"
|
name: "Name"
|
||||||
duration: "Dauer"
|
duration: "Dauer"
|
||||||
group: "Gruppe"
|
group: "Gruppe"
|
||||||
|
category: "Kategorie"
|
||||||
prominence: "Hervorhebung"
|
prominence: "Hervorhebung"
|
||||||
price: "Preis"
|
price: "Preis"
|
||||||
machine_hours: "Maschinen-Slots"
|
machine_hours: "Maschinen-Slots"
|
||||||
@ -1169,6 +1167,7 @@ de:
|
|||||||
confirmation_required_info: "Optional können Sie die Bestätigung der E-Mail-Adresse für Benutzer obligatorisch machen, bevor Sie Zugriff auf Fab-Manager bekommen."
|
confirmation_required_info: "Optional können Sie die Bestätigung der E-Mail-Adresse für Benutzer obligatorisch machen, bevor Sie Zugriff auf Fab-Manager bekommen."
|
||||||
confirmation_is_required: "Bestätigung erforderlich"
|
confirmation_is_required: "Bestätigung erforderlich"
|
||||||
wallet_module: "Guthabenkonto-Modul"
|
wallet_module: "Guthabenkonto-Modul"
|
||||||
|
public_agenda_module: "public agenda module"
|
||||||
statistics_module: "Statistik-Modul"
|
statistics_module: "Statistik-Modul"
|
||||||
upcoming_events_shown: "Anzeigelimit für anstehende Termine"
|
upcoming_events_shown: "Anzeigelimit für anstehende Termine"
|
||||||
general:
|
general:
|
||||||
@ -1207,6 +1206,9 @@ de:
|
|||||||
wallet: "Guthabenkonto"
|
wallet: "Guthabenkonto"
|
||||||
wallet_info_html: "<p>Mit dem Guthabenkonto können Sie Benutzern eine Geldsumme zuweisen. Diese können es nach Belieben im Fab-Manager ausgeben.</p><p>Mitglieder können ihr Guthabenkonto nicht selbst aufladen, das können nur Manager und Administratoren.</p>"
|
wallet_info_html: "<p>Mit dem Guthabenkonto können Sie Benutzern eine Geldsumme zuweisen. Diese können es nach Belieben im Fab-Manager ausgeben.</p><p>Mitglieder können ihr Guthabenkonto nicht selbst aufladen, das können nur Manager und Administratoren.</p>"
|
||||||
enable_wallet: "Guthabenkonto aktivieren"
|
enable_wallet: "Guthabenkonto aktivieren"
|
||||||
|
public_agenda: "Public agenda"
|
||||||
|
public_agenda_info_html: "<p>The public agenda offers to members and visitors a general overview of the Fablab's planning.</p><p>Please note that, even logged, users won't be able to book a reservation or modify anything from this agenda: this is a read-only page.</p>"
|
||||||
|
enable_public_agenda: "Enable public agenda"
|
||||||
statistics: "Statistiken"
|
statistics: "Statistiken"
|
||||||
statistics_info_html: "<p>Aktivieren oder deaktivieren Sie das Statistik-Modul.</p><p>Wenn aktiviert, konsolidiert das Modul die Tagesdaten in der Datenbank einer leistungsstarken Analyse-Engine. Administratoren können im entsprechenden Abschnitt die erstellten Diagramme und Tabellen durchsuchen.</p>"
|
statistics_info_html: "<p>Aktivieren oder deaktivieren Sie das Statistik-Modul.</p><p>Wenn aktiviert, konsolidiert das Modul die Tagesdaten in der Datenbank einer leistungsstarken Analyse-Engine. Administratoren können im entsprechenden Abschnitt die erstellten Diagramme und Tabellen durchsuchen.</p>"
|
||||||
enable_statistics: "Statistik-Modul aktivieren"
|
enable_statistics: "Statistik-Modul aktivieren"
|
||||||
|
@ -300,12 +300,10 @@ en:
|
|||||||
list_of_the_subscription_plans: "List of the subscription plans"
|
list_of_the_subscription_plans: "List of the subscription plans"
|
||||||
disabled_plans_info_html: "<p><strong>Warning:</strong> the subscriptions are disabled on this application.</p><p>You can still create some, but they won't be available until the activation of the plans module, from the « Customization » section.</p>"
|
disabled_plans_info_html: "<p><strong>Warning:</strong> the subscriptions are disabled on this application.</p><p>You can still create some, but they won't be available until the activation of the plans module, from the « Customization » section.</p>"
|
||||||
add_a_new_subscription_plan: "Add a new subscription plan"
|
add_a_new_subscription_plan: "Add a new subscription plan"
|
||||||
type: "Type"
|
|
||||||
partner: "Partner"
|
|
||||||
standard: "Standard"
|
|
||||||
name: "Name"
|
name: "Name"
|
||||||
duration: "Duration"
|
duration: "Duration"
|
||||||
group: "Group"
|
group: "Group"
|
||||||
|
category: "Category"
|
||||||
prominence: "Prominence"
|
prominence: "Prominence"
|
||||||
price: "Price"
|
price: "Price"
|
||||||
machine_hours: "Machine slots"
|
machine_hours: "Machine slots"
|
||||||
@ -1169,6 +1167,7 @@ en:
|
|||||||
confirmation_required_info: "Optionally, you can force the users to confirm their email address before being able to access Fab-manager."
|
confirmation_required_info: "Optionally, you can force the users to confirm their email address before being able to access Fab-manager."
|
||||||
confirmation_is_required: "Confirmation required"
|
confirmation_is_required: "Confirmation required"
|
||||||
wallet_module: "wallet module"
|
wallet_module: "wallet module"
|
||||||
|
public_agenda_module: "public agenda module"
|
||||||
statistics_module: "statistics module"
|
statistics_module: "statistics module"
|
||||||
upcoming_events_shown: "display limit for upcoming events"
|
upcoming_events_shown: "display limit for upcoming events"
|
||||||
general:
|
general:
|
||||||
@ -1207,6 +1206,9 @@ en:
|
|||||||
wallet: "Wallet"
|
wallet: "Wallet"
|
||||||
wallet_info_html: "<p>The virtual wallet allows you to allocate a sum of money to users. Then, can spend this money as they wish, in Fab-manager.</p><p>Members cannot credit their wallet themselves, it's a privilege of managers and administrators.</p>"
|
wallet_info_html: "<p>The virtual wallet allows you to allocate a sum of money to users. Then, can spend this money as they wish, in Fab-manager.</p><p>Members cannot credit their wallet themselves, it's a privilege of managers and administrators.</p>"
|
||||||
enable_wallet: "Enable wallet"
|
enable_wallet: "Enable wallet"
|
||||||
|
public_agenda: "Public agenda"
|
||||||
|
public_agenda_info_html: "<p>The public agenda offers to members and visitors a general overview of the Fablab's planning.</p><p>Please note that, even logged, users won't be able to book a reservation or modify anything from this agenda: this is a read-only page.</p>"
|
||||||
|
enable_public_agenda: "Enable public agenda"
|
||||||
statistics: "Statistics"
|
statistics: "Statistics"
|
||||||
statistics_info_html: "<p>Enable or disable the statistics module.</p><p>If enabled, every nights, the data of the day just passed will be consolidated in the database of a powerful analysis engine. Then, every administrators will be able to browse statistical charts and tables in the corresponding section.</p>"
|
statistics_info_html: "<p>Enable or disable the statistics module.</p><p>If enabled, every nights, the data of the day just passed will be consolidated in the database of a powerful analysis engine. Then, every administrators will be able to browse statistical charts and tables in the corresponding section.</p>"
|
||||||
enable_statistics: "Enable statistics"
|
enable_statistics: "Enable statistics"
|
||||||
|
@ -300,12 +300,10 @@ es:
|
|||||||
list_of_the_subscription_plans: "Lista de los planes de suscripción"
|
list_of_the_subscription_plans: "Lista de los planes de suscripción"
|
||||||
disabled_plans_info_html: "<p><strong>Warning:</strong> the subscriptions are disabled on this application.</p><p>You can still create some, but they won't be available until the activation of the plans module, from the « Customization » section.</p>"
|
disabled_plans_info_html: "<p><strong>Warning:</strong> the subscriptions are disabled on this application.</p><p>You can still create some, but they won't be available until the activation of the plans module, from the « Customization » section.</p>"
|
||||||
add_a_new_subscription_plan: "Agregar un nuevo plan de suscripción"
|
add_a_new_subscription_plan: "Agregar un nuevo plan de suscripción"
|
||||||
type: "Tipo"
|
|
||||||
partner: "Socio"
|
|
||||||
standard: "Estándar"
|
|
||||||
name: "Nombre"
|
name: "Nombre"
|
||||||
duration: "Duración"
|
duration: "Duración"
|
||||||
group: "Grupo"
|
group: "Grupo"
|
||||||
|
category: "Categoría"
|
||||||
prominence: "Prominencia"
|
prominence: "Prominencia"
|
||||||
price: "Precio"
|
price: "Precio"
|
||||||
machine_hours: "Machine slots"
|
machine_hours: "Machine slots"
|
||||||
@ -1169,6 +1167,7 @@ es:
|
|||||||
confirmation_required_info: "Optionally, you can force the users to confirm their email address before being able to access Fab-manager."
|
confirmation_required_info: "Optionally, you can force the users to confirm their email address before being able to access Fab-manager."
|
||||||
confirmation_is_required: "Confirmation required"
|
confirmation_is_required: "Confirmation required"
|
||||||
wallet_module: "wallet module"
|
wallet_module: "wallet module"
|
||||||
|
public_agenda_module: "public agenda module"
|
||||||
statistics_module: "statistics module"
|
statistics_module: "statistics module"
|
||||||
upcoming_events_shown: "display limit for upcoming events"
|
upcoming_events_shown: "display limit for upcoming events"
|
||||||
general:
|
general:
|
||||||
@ -1207,6 +1206,9 @@ es:
|
|||||||
wallet: "Wallet"
|
wallet: "Wallet"
|
||||||
wallet_info_html: "<p>The virtual wallet allows you to allocate a sum of money to users. Then, can spend this money as they wish, in Fab-manager.</p><p>Members cannot credit their wallet themselves, it's a privilege of managers and administrators.</p>"
|
wallet_info_html: "<p>The virtual wallet allows you to allocate a sum of money to users. Then, can spend this money as they wish, in Fab-manager.</p><p>Members cannot credit their wallet themselves, it's a privilege of managers and administrators.</p>"
|
||||||
enable_wallet: "Enable wallet"
|
enable_wallet: "Enable wallet"
|
||||||
|
public_agenda: "Public agenda"
|
||||||
|
public_agenda_info_html: "<p>The public agenda offers to members and visitors a general overview of the Fablab's planning.</p><p>Please note that, even logged, users won't be able to book a reservation or modify anything from this agenda: this is a read-only page.</p>"
|
||||||
|
enable_public_agenda: "Enable public agenda"
|
||||||
statistics: "Statistics"
|
statistics: "Statistics"
|
||||||
statistics_info_html: "<p>Enable or disable the statistics module.</p><p>If enabled, every nights, the data of the day just passed will be consolidated in the database of a powerful analysis engine. Then, every administrators will be able to browse statistical charts and tables in the corresponding section.</p>"
|
statistics_info_html: "<p>Enable or disable the statistics module.</p><p>If enabled, every nights, the data of the day just passed will be consolidated in the database of a powerful analysis engine. Then, every administrators will be able to browse statistical charts and tables in the corresponding section.</p>"
|
||||||
enable_statistics: "Enable statistics"
|
enable_statistics: "Enable statistics"
|
||||||
@ -1298,8 +1300,8 @@ es:
|
|||||||
name: "Name"
|
name: "Name"
|
||||||
significance: "Significance"
|
significance: "Significance"
|
||||||
create_plan_category:
|
create_plan_category:
|
||||||
new_category: "New category"
|
new_category: "Nueva categoría"
|
||||||
name: "Name"
|
name: "Nombre"
|
||||||
significance: "Significance"
|
significance: "Significance"
|
||||||
significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown."
|
significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown."
|
||||||
confirm_create: "Create the category"
|
confirm_create: "Create the category"
|
||||||
@ -1307,15 +1309,15 @@ es:
|
|||||||
unable_to_create: "Unable to create the category: "
|
unable_to_create: "Unable to create the category: "
|
||||||
edit_plan_category:
|
edit_plan_category:
|
||||||
edit_category: "Edit the category"
|
edit_category: "Edit the category"
|
||||||
name: "Name"
|
name: "Nombre"
|
||||||
significance: "Significance"
|
significance: "Significance"
|
||||||
confirm_edition: "Validate"
|
confirm_edition: "Validar"
|
||||||
category_updated: "The category was successfully updated"
|
category_updated: "The category was successfully updated"
|
||||||
unable_to_update: "Unable to update the category: "
|
unable_to_update: "Unable to update the category: "
|
||||||
significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown."
|
significance_info: "Categories will be shown ordered by signifiance. The higher you set the significance, the first the category will be shown."
|
||||||
delete_plan_category:
|
delete_plan_category:
|
||||||
delete_category: "Delete a category"
|
delete_category: "Delete a category"
|
||||||
confirm_delete: "Delete"
|
confirm_delete: "Borrar"
|
||||||
delete_confirmation: "Are you sure you want to delete this category? If you do, the plans associated with this category won't be sorted anymore."
|
delete_confirmation: "Are you sure you want to delete this category? If you do, the plans associated with this category won't be sorted anymore."
|
||||||
category_deleted: "The category was successfully deleted"
|
category_deleted: "The category was successfully deleted"
|
||||||
unable_to_delete: "Unable to delete the category: "
|
unable_to_delete: "Unable to delete the category: "
|
||||||
|
@ -300,12 +300,10 @@ fr:
|
|||||||
list_of_the_subscription_plans: "Liste des formules d'abonnements"
|
list_of_the_subscription_plans: "Liste des formules d'abonnements"
|
||||||
disabled_plans_info_html: "<p><strong>Attention :</strong> les abonnements sont désactivés sur cette application.</p><p>Vous pouvez tout de même en créer mais ils ne seront disponibles qu'après l'activation du module abonnements depuis la section « Personnalisation ».</p>"
|
disabled_plans_info_html: "<p><strong>Attention :</strong> les abonnements sont désactivés sur cette application.</p><p>Vous pouvez tout de même en créer mais ils ne seront disponibles qu'après l'activation du module abonnements depuis la section « Personnalisation ».</p>"
|
||||||
add_a_new_subscription_plan: "Ajouter une nouvelle formule d'abonnement"
|
add_a_new_subscription_plan: "Ajouter une nouvelle formule d'abonnement"
|
||||||
type: "Type"
|
|
||||||
partner: "Partenaire"
|
|
||||||
standard: "Standard"
|
|
||||||
name: "Nom"
|
name: "Nom"
|
||||||
duration: "Durée"
|
duration: "Durée"
|
||||||
group: "Groupe"
|
group: "Groupe"
|
||||||
|
category: "Catégorie"
|
||||||
prominence: "Importance"
|
prominence: "Importance"
|
||||||
price: "Prix"
|
price: "Prix"
|
||||||
machine_hours: "Créneaux machines"
|
machine_hours: "Créneaux machines"
|
||||||
@ -1169,6 +1167,7 @@ fr:
|
|||||||
confirmation_required_info: "De manière optionnelle, vous pouvez forcer les utilisateurs à confirmer leur adresse électronique avant de pouvoir accéder à Fab-manager."
|
confirmation_required_info: "De manière optionnelle, vous pouvez forcer les utilisateurs à confirmer leur adresse électronique avant de pouvoir accéder à Fab-manager."
|
||||||
confirmation_is_required: "Confirmation requise"
|
confirmation_is_required: "Confirmation requise"
|
||||||
wallet_module: "module porte-monnaie"
|
wallet_module: "module porte-monnaie"
|
||||||
|
public_agenda_module: "module d'agenda public"
|
||||||
statistics_module: "module de statistiques"
|
statistics_module: "module de statistiques"
|
||||||
upcoming_events_shown: "la limite d'affichage des événements à venir"
|
upcoming_events_shown: "la limite d'affichage des événements à venir"
|
||||||
general:
|
general:
|
||||||
@ -1207,6 +1206,9 @@ fr:
|
|||||||
wallet: "Porte-monnaie"
|
wallet: "Porte-monnaie"
|
||||||
wallet_info_html: "<p>Le porte-monnaie virtuel vous permet d'allouer une certaine somme d'argent aux utilisateurs. Ils peuvent ensuite dépenser cet argent comment bon leur semble, dans Fab-manager.</p><p>Les membres ne peuvent pas créditer leur porte-monnaie eux-même, c'est un privilège des gestionnaires et des administrateurs.</p>"
|
wallet_info_html: "<p>Le porte-monnaie virtuel vous permet d'allouer une certaine somme d'argent aux utilisateurs. Ils peuvent ensuite dépenser cet argent comment bon leur semble, dans Fab-manager.</p><p>Les membres ne peuvent pas créditer leur porte-monnaie eux-même, c'est un privilège des gestionnaires et des administrateurs.</p>"
|
||||||
enable_wallet: "Activer le porte-monnaie"
|
enable_wallet: "Activer le porte-monnaie"
|
||||||
|
public_agenda: "Agenda public"
|
||||||
|
public_agenda_info_html: "<p>L'agenda public offre aux membres et aux visiteurs une vue générale du planning du FabLab.</p><p>Veuillez noter que, même connectés, les utilisateurs ne pourront ni réserver ni modifier quoi que ce soit depuis cet agenda : il s'agit d'une page en lecture seule.</p>"
|
||||||
|
enable_public_agenda: "Activer l'agenda public"
|
||||||
statistics: "Statistiques"
|
statistics: "Statistiques"
|
||||||
statistics_info_html: "<p>Activer ou désactiver le module de statistiques.</p><p>Si activé, chaque nuit, les données de la journée qui vient de s'écouler seront consolidées dans la base de données d'un puissant moteur d'analyse. Ensuite, chaque administrateur pourra parcourir les tableaux et graphiques statistiques dans la section correspondante.</p>"
|
statistics_info_html: "<p>Activer ou désactiver le module de statistiques.</p><p>Si activé, chaque nuit, les données de la journée qui vient de s'écouler seront consolidées dans la base de données d'un puissant moteur d'analyse. Ensuite, chaque administrateur pourra parcourir les tableaux et graphiques statistiques dans la section correspondante.</p>"
|
||||||
enable_statistics: "Activer les statistiques"
|
enable_statistics: "Activer les statistiques"
|
||||||
|
@ -300,12 +300,10 @@ pt:
|
|||||||
list_of_the_subscription_plans: "Lista dos planos de assinatura"
|
list_of_the_subscription_plans: "Lista dos planos de assinatura"
|
||||||
disabled_plans_info_html: "<p><strong>Aviso:</strong> as assinaturas estão desativadas nesta aplicação.</p><p>Você ainda pode criar algumas, mas eles não estarão disponíveis até a ativação dos módulos de planos, na seção « Personalização».</p>"
|
disabled_plans_info_html: "<p><strong>Aviso:</strong> as assinaturas estão desativadas nesta aplicação.</p><p>Você ainda pode criar algumas, mas eles não estarão disponíveis até a ativação dos módulos de planos, na seção « Personalização».</p>"
|
||||||
add_a_new_subscription_plan: "Adicionar novo plano de assinatura"
|
add_a_new_subscription_plan: "Adicionar novo plano de assinatura"
|
||||||
type: "Tipo"
|
|
||||||
partner: "Parceiro"
|
|
||||||
standard: "Padrão"
|
|
||||||
name: "Nome"
|
name: "Nome"
|
||||||
duration: "Duração"
|
duration: "Duração"
|
||||||
group: "Grupo"
|
group: "Grupo"
|
||||||
|
category: "Categoria"
|
||||||
prominence: "Relevância"
|
prominence: "Relevância"
|
||||||
price: "Preço"
|
price: "Preço"
|
||||||
machine_hours: "Slots de máquina"
|
machine_hours: "Slots de máquina"
|
||||||
@ -1169,6 +1167,7 @@ pt:
|
|||||||
confirmation_required_info: "Opcionalmente, você pode forçar os usuários a confirmar o endereço de e-mail deles antes de poder acessar o Fab-manager."
|
confirmation_required_info: "Opcionalmente, você pode forçar os usuários a confirmar o endereço de e-mail deles antes de poder acessar o Fab-manager."
|
||||||
confirmation_is_required: "Confirmação obrigatória"
|
confirmation_is_required: "Confirmação obrigatória"
|
||||||
wallet_module: "módulo de carteira"
|
wallet_module: "módulo de carteira"
|
||||||
|
public_agenda_module: "public agenda module"
|
||||||
statistics_module: "módulo de estatísticas"
|
statistics_module: "módulo de estatísticas"
|
||||||
upcoming_events_shown: "exibir limite para eventos futuros"
|
upcoming_events_shown: "exibir limite para eventos futuros"
|
||||||
general:
|
general:
|
||||||
@ -1207,6 +1206,9 @@ pt:
|
|||||||
wallet: "Carteira"
|
wallet: "Carteira"
|
||||||
wallet_info_html: "<p>A carteira virtual permite alocar uma soma de dinheiro aos usuários. Em seguida, pode gastar esse dinheiro como quiserem, no Fab-manager.</p><p>Membros não podem creditar suas carteiras, é um privilégio de gerentes e administradores.</p>"
|
wallet_info_html: "<p>A carteira virtual permite alocar uma soma de dinheiro aos usuários. Em seguida, pode gastar esse dinheiro como quiserem, no Fab-manager.</p><p>Membros não podem creditar suas carteiras, é um privilégio de gerentes e administradores.</p>"
|
||||||
enable_wallet: "Habilitar Carteira"
|
enable_wallet: "Habilitar Carteira"
|
||||||
|
public_agenda: "Public agenda"
|
||||||
|
public_agenda_info_html: "<p>The public agenda offers to members and visitors a general overview of the Fablab's planning.</p><p>Please note that, even logged, users won't be able to book a reservation or modify anything from this agenda: this is a read-only page.</p>"
|
||||||
|
enable_public_agenda: "Enable public agenda"
|
||||||
statistics: "Estatísticas"
|
statistics: "Estatísticas"
|
||||||
statistics_info_html: "<p>Ativar ou desativar módulo de estatísticas.</p><p>Se ativado, todas as noites, os dados do dia que acabou de ser passado serão consolidados na base de dados de um poderoso motor de análise. Então, todos os administradores poderão navegar em gráficos estatísticos e tabelas na seção correspondente.</p>"
|
statistics_info_html: "<p>Ativar ou desativar módulo de estatísticas.</p><p>Se ativado, todas as noites, os dados do dia que acabou de ser passado serão consolidados na base de dados de um poderoso motor de análise. Então, todos os administradores poderão navegar em gráficos estatísticos e tabelas na seção correspondente.</p>"
|
||||||
enable_statistics: "Habilitar estatísticas"
|
enable_statistics: "Habilitar estatísticas"
|
||||||
|
@ -300,12 +300,10 @@ zu:
|
|||||||
list_of_the_subscription_plans: "crwdns7121:0crwdne7121:0"
|
list_of_the_subscription_plans: "crwdns7121:0crwdne7121:0"
|
||||||
disabled_plans_info_html: "crwdns20566:0crwdne20566:0"
|
disabled_plans_info_html: "crwdns20566:0crwdne20566:0"
|
||||||
add_a_new_subscription_plan: "crwdns7129:0crwdne7129:0"
|
add_a_new_subscription_plan: "crwdns7129:0crwdne7129:0"
|
||||||
type: "crwdns7131:0crwdne7131:0"
|
|
||||||
partner: "crwdns7133:0crwdne7133:0"
|
|
||||||
standard: "crwdns7135:0crwdne7135:0"
|
|
||||||
name: "crwdns7137:0crwdne7137:0"
|
name: "crwdns7137:0crwdne7137:0"
|
||||||
duration: "crwdns7139:0crwdne7139:0"
|
duration: "crwdns7139:0crwdne7139:0"
|
||||||
group: "crwdns7141:0crwdne7141:0"
|
group: "crwdns7141:0crwdne7141:0"
|
||||||
|
category: "crwdns21864:0crwdne21864:0"
|
||||||
prominence: "crwdns7143:0crwdne7143:0"
|
prominence: "crwdns7143:0crwdne7143:0"
|
||||||
price: "crwdns7145:0crwdne7145:0"
|
price: "crwdns7145:0crwdne7145:0"
|
||||||
machine_hours: "crwdns7147:0crwdne7147:0"
|
machine_hours: "crwdns7147:0crwdne7147:0"
|
||||||
@ -1169,6 +1167,7 @@ zu:
|
|||||||
confirmation_required_info: "crwdns20720:0crwdne20720:0"
|
confirmation_required_info: "crwdns20720:0crwdne20720:0"
|
||||||
confirmation_is_required: "crwdns20722:0crwdne20722:0"
|
confirmation_is_required: "crwdns20722:0crwdne20722:0"
|
||||||
wallet_module: "crwdns20724:0crwdne20724:0"
|
wallet_module: "crwdns20724:0crwdne20724:0"
|
||||||
|
public_agenda_module: "crwdns21866:0crwdne21866:0"
|
||||||
statistics_module: "crwdns20864:0crwdne20864:0"
|
statistics_module: "crwdns20864:0crwdne20864:0"
|
||||||
upcoming_events_shown: "crwdns20898:0crwdne20898:0"
|
upcoming_events_shown: "crwdns20898:0crwdne20898:0"
|
||||||
general:
|
general:
|
||||||
@ -1207,6 +1206,9 @@ zu:
|
|||||||
wallet: "crwdns20786:0crwdne20786:0"
|
wallet: "crwdns20786:0crwdne20786:0"
|
||||||
wallet_info_html: "crwdns20788:0crwdne20788:0"
|
wallet_info_html: "crwdns20788:0crwdne20788:0"
|
||||||
enable_wallet: "crwdns20790:0crwdne20790:0"
|
enable_wallet: "crwdns20790:0crwdne20790:0"
|
||||||
|
public_agenda: "crwdns21868:0crwdne21868:0"
|
||||||
|
public_agenda_info_html: "crwdns21870:0crwdne21870:0"
|
||||||
|
enable_public_agenda: "crwdns21872:0crwdne21872:0"
|
||||||
statistics: "crwdns20866:0crwdne20866:0"
|
statistics: "crwdns20866:0crwdne20866:0"
|
||||||
statistics_info_html: "crwdns20868:0crwdne20868:0"
|
statistics_info_html: "crwdns20868:0crwdne20868:0"
|
||||||
enable_statistics: "crwdns20870:0crwdne20870:0"
|
enable_statistics: "crwdns20870:0crwdne20870:0"
|
||||||
|
@ -525,3 +525,4 @@ de:
|
|||||||
payzen_public_key: "PayZen client public key"
|
payzen_public_key: "PayZen client public key"
|
||||||
payzen_hmac: "PayZen HMAC-SHA-256 key"
|
payzen_hmac: "PayZen HMAC-SHA-256 key"
|
||||||
payzen_currency: "PayZen currency"
|
payzen_currency: "PayZen currency"
|
||||||
|
public_agenda_module: "Public agenda module"
|
||||||
|
@ -525,3 +525,4 @@ en:
|
|||||||
payzen_public_key: "PayZen client public key"
|
payzen_public_key: "PayZen client public key"
|
||||||
payzen_hmac: "PayZen HMAC-SHA-256 key"
|
payzen_hmac: "PayZen HMAC-SHA-256 key"
|
||||||
payzen_currency: "PayZen currency"
|
payzen_currency: "PayZen currency"
|
||||||
|
public_agenda_module: "Public agenda module"
|
||||||
|
@ -525,3 +525,4 @@ es:
|
|||||||
payzen_public_key: "PayZen client public key"
|
payzen_public_key: "PayZen client public key"
|
||||||
payzen_hmac: "PayZen HMAC-SHA-256 key"
|
payzen_hmac: "PayZen HMAC-SHA-256 key"
|
||||||
payzen_currency: "PayZen currency"
|
payzen_currency: "PayZen currency"
|
||||||
|
public_agenda_module: "Public agenda module"
|
||||||
|
@ -525,3 +525,4 @@ fr:
|
|||||||
payzen_public_key: "Clé publique du client PayZen"
|
payzen_public_key: "Clé publique du client PayZen"
|
||||||
payzen_hmac: "Clef HMAC-SHA-256 PayZen"
|
payzen_hmac: "Clef HMAC-SHA-256 PayZen"
|
||||||
payzen_currency: "Devise PayZen"
|
payzen_currency: "Devise PayZen"
|
||||||
|
public_agenda_module: "Public agenda module"
|
||||||
|
@ -525,3 +525,4 @@ pt:
|
|||||||
payzen_public_key: "PayZen client public key"
|
payzen_public_key: "PayZen client public key"
|
||||||
payzen_hmac: "PayZen HMAC-SHA-256 key"
|
payzen_hmac: "PayZen HMAC-SHA-256 key"
|
||||||
payzen_currency: "PayZen currency"
|
payzen_currency: "PayZen currency"
|
||||||
|
public_agenda_module: "Public agenda module"
|
||||||
|
@ -525,3 +525,4 @@ zu:
|
|||||||
payzen_public_key: "crwdns21846:0crwdne21846:0"
|
payzen_public_key: "crwdns21846:0crwdne21846:0"
|
||||||
payzen_hmac: "crwdns21848:0crwdne21848:0"
|
payzen_hmac: "crwdns21848:0crwdne21848:0"
|
||||||
payzen_currency: "crwdns21850:0crwdne21850:0"
|
payzen_currency: "crwdns21850:0crwdne21850:0"
|
||||||
|
public_agenda_module: "crwdns21874:0crwdne21874:0"
|
||||||
|
@ -895,6 +895,8 @@ Setting.set('upcoming_events_shown', 'until_start') unless Setting.find_by(name:
|
|||||||
|
|
||||||
Setting.set('trainings_module', true) unless Setting.find_by(name: 'trainings_module').try(:value)
|
Setting.set('trainings_module', true) unless Setting.find_by(name: 'trainings_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('public_agenda_module', true) unless Setting.find_by(name: 'public_agenda_module').try(:value)
|
||||||
|
|
||||||
if StatisticCustomAggregation.count.zero?
|
if StatisticCustomAggregation.count.zero?
|
||||||
# available reservations hours for machines
|
# available reservations hours for machines
|
||||||
machine_hours = StatisticType.find_by(key: 'hour', statistic_index_id: 2)
|
machine_hours = StatisticType.find_by(key: 'hour', statistic_index_id: 2)
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "fab-manager",
|
"name": "fab-manager",
|
||||||
"version": "5.0.3",
|
"version": "5.0.4",
|
||||||
"description": "Fab-manager is the FabLab management solution. It provides a comprehensive, web-based, open-source tool to simplify your administrative tasks and your marker's projects.",
|
"description": "Fab-manager is the FabLab management solution. It provides a comprehensive, web-based, open-source tool to simplify your administrative tasks and your marker's projects.",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"fablab",
|
"fablab",
|
||||||
@ -59,7 +59,7 @@
|
|||||||
"angular-growl-v2": "https://github.com/JanStevens/angular-growl-2.git#0.7.9",
|
"angular-growl-v2": "https://github.com/JanStevens/angular-growl-2.git#0.7.9",
|
||||||
"angular-i18n": "1.7",
|
"angular-i18n": "1.7",
|
||||||
"angular-loading-bar": "^0.9.0",
|
"angular-loading-bar": "^0.9.0",
|
||||||
"angular-medium-editor": "https://github.com/thijsw/angular-medium-editor.git#0.1.1",
|
"angular-medium-editor": "^1.2.1",
|
||||||
"angular-minicolors": "https://github.com/kaihenzler/angular-minicolors.git#0.0.5",
|
"angular-minicolors": "https://github.com/kaihenzler/angular-minicolors.git#0.0.5",
|
||||||
"angular-moment": "1.3",
|
"angular-moment": "1.3",
|
||||||
"angular-recaptcha": "^4.2.0",
|
"angular-recaptcha": "^4.2.0",
|
||||||
@ -93,7 +93,7 @@
|
|||||||
"jasny-bootstrap": "3.1",
|
"jasny-bootstrap": "3.1",
|
||||||
"jquery": ">=3.5.0",
|
"jquery": ">=3.5.0",
|
||||||
"jquery-ujs": "^1.2.2",
|
"jquery-ujs": "^1.2.2",
|
||||||
"medium-editor": "4.4.0",
|
"medium-editor": "^5.23.3",
|
||||||
"moment": "2.22",
|
"moment": "2.22",
|
||||||
"moment-timezone": "0.5",
|
"moment-timezone": "0.5",
|
||||||
"ng-caps-lock": "https://github.com/FabioMR/ng-caps-lock.git#1.0.3",
|
"ng-caps-lock": "https://github.com/FabioMR/ng-caps-lock.git#1.0.3",
|
||||||
|
163
test/fixtures/history_values.yml
vendored
163
test/fixtures/history_values.yml
vendored
File diff suppressed because one or more lines are too long
5
test/fixtures/settings.yml
vendored
5
test/fixtures/settings.yml
vendored
@ -497,3 +497,8 @@ setting_84:
|
|||||||
created_at: 2020-04-15 14:38:40.000421500 Z
|
created_at: 2020-04-15 14:38:40.000421500 Z
|
||||||
updated_at: 2020-04-15 14:38:40.000421500 Z
|
updated_at: 2020-04-15 14:38:40.000421500 Z
|
||||||
|
|
||||||
|
setting_85:
|
||||||
|
id: 85
|
||||||
|
name: public_agenda_module
|
||||||
|
created_at: 2020-04-15 14:38:40.000421500 Z
|
||||||
|
updated_at: 2020-04-15 14:38:40.000421500 Z
|
||||||
|
15
yarn.lock
15
yarn.lock
@ -1488,9 +1488,10 @@ angular-loading-bar@^0.9.0:
|
|||||||
resolved "https://registry.yarnpkg.com/angular-loading-bar/-/angular-loading-bar-0.9.0.tgz#37ef52c25f102c216e7b3cdfd2fc5a5df9628e45"
|
resolved "https://registry.yarnpkg.com/angular-loading-bar/-/angular-loading-bar-0.9.0.tgz#37ef52c25f102c216e7b3cdfd2fc5a5df9628e45"
|
||||||
integrity sha1-N+9Swl8QLCFuezzf0vxaXflijkU=
|
integrity sha1-N+9Swl8QLCFuezzf0vxaXflijkU=
|
||||||
|
|
||||||
"angular-medium-editor@https://github.com/thijsw/angular-medium-editor.git#0.1.1":
|
angular-medium-editor@^1.2.1:
|
||||||
version "0.1.1"
|
version "1.2.1"
|
||||||
resolved "https://github.com/thijsw/angular-medium-editor.git#1683d0f4ada6e4e0011c4372335c702df9680fde"
|
resolved "https://registry.yarnpkg.com/angular-medium-editor/-/angular-medium-editor-1.2.1.tgz#3f336d0fffb26f0948e49b6cf50682f8b90d68fa"
|
||||||
|
integrity sha1-PzNtD/+ybwlI5Jts9QaC+LkNaPo=
|
||||||
|
|
||||||
"angular-minicolors@https://github.com/kaihenzler/angular-minicolors.git#0.0.5":
|
"angular-minicolors@https://github.com/kaihenzler/angular-minicolors.git#0.0.5":
|
||||||
version "0.0.0"
|
version "0.0.0"
|
||||||
@ -5240,10 +5241,10 @@ media-typer@0.3.0:
|
|||||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
||||||
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
|
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
|
||||||
|
|
||||||
medium-editor@4.4.0:
|
medium-editor@^5.23.3:
|
||||||
version "4.4.0"
|
version "5.23.3"
|
||||||
resolved "https://registry.yarnpkg.com/medium-editor/-/medium-editor-4.4.0.tgz#ef188cc9cc5cba87177da8cb657a885dfbbe5760"
|
resolved "https://registry.yarnpkg.com/medium-editor/-/medium-editor-5.23.3.tgz#6fb638759ae2fc76c423feb056f346d9c518d3b7"
|
||||||
integrity sha1-7xiMycxcuocXfajLZXqIXfu+V2A=
|
integrity sha512-he9/TdjX8f8MGdXGfCs8AllrYnqXJJvjNkDKmPg3aPW/uoIrlRqtkFthrwvmd+u4QyzEiadhCCM0EwTiRdUCJw==
|
||||||
|
|
||||||
memoize-one@^5.0.0:
|
memoize-one@^5.0.0:
|
||||||
version "5.2.1"
|
version "5.2.1"
|
||||||
|
Loading…
Reference in New Issue
Block a user