mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2024-11-28 09:24:24 +01:00
configure the plans module from the admin UI
This commit is contained in:
parent
6cc6bba7ce
commit
537743a740
@ -81,8 +81,6 @@ angular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.rout
|
|||||||
$state.prevParams = fromParams;
|
$state.prevParams = fromParams;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Global config: if true, the whole 'Plans & Subscriptions' feature will be disabled in the application
|
|
||||||
$rootScope.fablabWithoutPlans = Fablab.withoutPlans;
|
|
||||||
// Global config: if true, all payments will be disabled in the application for the members (only admins will be able to proceed reservations)
|
// Global config: if true, all payments will be disabled in the application for the members (only admins will be able to proceed reservations)
|
||||||
$rootScope.fablabWithoutOnlinePayment = Fablab.withoutOnlinePayment;
|
$rootScope.fablabWithoutOnlinePayment = Fablab.withoutOnlinePayment;
|
||||||
// Global config: if true, no invoices will be generated
|
// Global config: if true, no invoices will be generated
|
||||||
|
@ -179,7 +179,7 @@ Application.Controllers.controller('StatisticsController', ['$scope', '$state',
|
|||||||
*/
|
*/
|
||||||
$scope.hiddenTab = function (tab) {
|
$scope.hiddenTab = function (tab) {
|
||||||
if (tab.table) {
|
if (tab.table) {
|
||||||
if ((tab.es_type_key === 'subscription') && $rootScope.fablabWithoutPlans) {
|
if ((tab.es_type_key === 'subscription') && !$rootScope.plansModule) {
|
||||||
return true;
|
return true;
|
||||||
} else return (tab.es_type_key === 'space') && !$rootScope.spacesModule;
|
} else return (tab.es_type_key === 'space') && !$rootScope.spacesModule;
|
||||||
} else {
|
} else {
|
||||||
|
@ -58,7 +58,7 @@ Application.Controllers.controller('MainNavController', ['$scope', function ($sc
|
|||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
if (!Fablab.withoutPlans) {
|
if ($scope.plansModule) {
|
||||||
$scope.navLinks.push({
|
$scope.navLinks.push({
|
||||||
state: 'app.public.plans',
|
state: 'app.public.plans',
|
||||||
linkText: 'app.public.common.subscriptions',
|
linkText: 'app.public.common.subscriptions',
|
||||||
|
@ -37,15 +37,17 @@ 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; }],
|
||||||
spacesModulePromise: ['Setting', function (Setting) { return Setting.get({ name: 'spaces_module' }).$promise; }]
|
spacesModulePromise: ['Setting', function (Setting) { return Setting.get({ name: 'spaces_module' }).$promise; }],
|
||||||
|
plansModulePromise: ['Setting', function (Setting) { return Setting.get({ name: 'plans_module' }).$promise; }]
|
||||||
},
|
},
|
||||||
onEnter: ['$rootScope', 'logoFile', 'logoBlackFile', 'spacesModulePromise', 'CSRF', function ($rootScope, logoFile, logoBlackFile, spacesModulePromise, CSRF) {
|
onEnter: ['$rootScope', 'logoFile', 'logoBlackFile', 'spacesModulePromise', 'plansModulePromise', 'CSRF', function ($rootScope, logoFile, logoBlackFile, spacesModulePromise, plansModulePromise, CSRF) {
|
||||||
// Retrieve Anti-CSRF tokens from cookies
|
// Retrieve Anti-CSRF tokens from cookies
|
||||||
CSRF.setMetaTags();
|
CSRF.setMetaTags();
|
||||||
// Application logo
|
// Application logo
|
||||||
$rootScope.logo = logoFile.custom_asset;
|
$rootScope.logo = logoFile.custom_asset;
|
||||||
$rootScope.logoBlack = logoBlackFile.custom_asset;
|
$rootScope.logoBlack = logoBlackFile.custom_asset;
|
||||||
$rootScope.spacesModule = (spacesModulePromise.setting.value === 'true');
|
$rootScope.spacesModule = (spacesModulePromise.setting.value === 'true');
|
||||||
|
$rootScope.plansModule = (plansModulePromise.setting.value === 'true');
|
||||||
}]
|
}]
|
||||||
})
|
})
|
||||||
.state('app.public', {
|
.state('app.public', {
|
||||||
@ -512,7 +514,7 @@ angular.module('application.router', ['ui.router'])
|
|||||||
// pricing
|
// pricing
|
||||||
.state('app.public.plans', {
|
.state('app.public.plans', {
|
||||||
url: '/plans',
|
url: '/plans',
|
||||||
abstract: Fablab.withoutPlans,
|
abstract: !Fablab.plansModule,
|
||||||
views: {
|
views: {
|
||||||
'main@': {
|
'main@': {
|
||||||
templateUrl: '<%= asset_path "plans/index.html.erb" %>',
|
templateUrl: '<%= asset_path "plans/index.html.erb" %>',
|
||||||
@ -1028,7 +1030,7 @@ angular.module('application.router', ['ui.router'])
|
|||||||
'space_explications_alert', 'booking_window_start', 'booking_window_end', 'events_in_calendar', \
|
'space_explications_alert', 'booking_window_start', 'booking_window_end', 'events_in_calendar', \
|
||||||
'booking_move_enable', 'booking_move_delay', 'booking_cancel_enable', \
|
'booking_move_enable', 'booking_move_delay', 'booking_cancel_enable', \
|
||||||
'booking_cancel_delay', 'main_color', 'secondary_color', 'spaces_module', \
|
'booking_cancel_delay', 'main_color', 'secondary_color', 'spaces_module', \
|
||||||
'fablab_name', 'name_genre', 'reminder_enable', \
|
'fablab_name', 'name_genre', 'reminder_enable', 'plans_module', \
|
||||||
'reminder_delay', 'visibility_yearly', 'visibility_others', \
|
'reminder_delay', 'visibility_yearly', 'visibility_others', \
|
||||||
'display_name_enable', 'machines_sort_by', 'fab_analytics', \
|
'display_name_enable', 'machines_sort_by', 'fab_analytics', \
|
||||||
'link_name', 'home_content', 'home_css', 'phone_required']` }).$promise;
|
'link_name', 'home_content', 'home_css', 'phone_required']` }).$promise;
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
</form>
|
</form>
|
||||||
</uib-tab>
|
</uib-tab>
|
||||||
|
|
||||||
<uib-tab heading="{{ 'app.admin.members_edit.subscription' | translate }}" ng-if="!fablabWithoutPlans">
|
<uib-tab heading="{{ 'app.admin.members_edit.subscription' | translate }}" ng-if="plansModule">
|
||||||
|
|
||||||
|
|
||||||
<section class="panel panel-default bg-light m-lg">
|
<section class="panel panel-default bg-light m-lg">
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
<a class="btn btn-default" ng-href="api/members/export_members.xlsx" target="export-frame" ng-click="alertExport('members')">
|
<a class="btn btn-default" ng-href="api/members/export_members.xlsx" target="export-frame" ng-click="alertExport('members')">
|
||||||
<i class="fa fa-file-excel-o"></i> {{ 'app.admin.members.members' | translate }}
|
<i class="fa fa-file-excel-o"></i> {{ 'app.admin.members.members' | translate }}
|
||||||
</a>
|
</a>
|
||||||
<a class="btn btn-default" ng-href="api/members/export_subscriptions.xlsx" target="export-frame" ng-if="!fablabWithoutPlans" ng-click="alertExport('subscriptions')">
|
<a class="btn btn-default" ng-href="api/members/export_subscriptions.xlsx" target="export-frame" ng-if="plansModule" ng-click="alertExport('subscriptions')">
|
||||||
<i class="fa fa-file-excel-o"></i> {{ 'app.admin.members.subscriptions' | translate }}
|
<i class="fa fa-file-excel-o"></i> {{ 'app.admin.members.subscriptions' | translate }}
|
||||||
</a>
|
</a>
|
||||||
<a class="btn btn-default" ng-href="api/members/export_reservations.xlsx" target="export-frame" ng-click="alertExport('reservations')">
|
<a class="btn btn-default" ng-href="api/members/export_reservations.xlsx" target="export-frame" ng-click="alertExport('reservations')">
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
<h2 translate>{{ 'app.admin.pricing.list_of_the_subscription_plans' }}</h2>
|
<h2 translate>{{ 'app.admin.pricing.list_of_the_subscription_plans' }}</h2>
|
||||||
|
|
||||||
<div ng-show="fablabWithoutPlans" class="alert alert-warning m-t">
|
<div ng-hide="plansModule"
|
||||||
{{ 'app.admin.pricing.beware_the_subscriptions_are_disabled_on_this_application' | translate }}
|
class="alert alert-warning m-t"
|
||||||
{{ 'app.admin.pricing.you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager' | translate }}
|
ng-bind-html="'app.admin.pricing.disabled_plans_info_html' | translate">
|
||||||
<br>{{ 'app.admin.pricing.for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later' | translate }}
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="m-t-lg">
|
<div class="m-t-lg">
|
||||||
|
@ -364,5 +364,15 @@
|
|||||||
yes-label="app.shared.buttons.yes"
|
yes-label="app.shared.buttons.yes"
|
||||||
no-label="app.shared.buttons.no"></boolean-setting>
|
no-label="app.shared.buttons.no"></boolean-setting>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<h3 class="m-l" translate>{{ 'app.admin.settings.plans' }}</h3>
|
||||||
|
<p class="alert alert-warning m-h-md" ng-bind-html="'app.admin.settings.plans_info_html' | translate"></p>
|
||||||
|
<boolean-setting name="plans_module"
|
||||||
|
settings="allSettings"
|
||||||
|
label="app.admin.settings.enable_plans"
|
||||||
|
classes="m-l"
|
||||||
|
yes-label="app.shared.buttons.yes"
|
||||||
|
no-label="app.shared.buttons.no"></boolean-setting>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -102,7 +102,7 @@
|
|||||||
</form>
|
</form>
|
||||||
|
|
||||||
<uib-tabset justified="true">
|
<uib-tabset justified="true">
|
||||||
<uib-tab ng-repeat="stat in statistics" heading="{{stat.label}}" select="setActiveTab(stat)" ng-if="stat.graph && !(stat.es_type_key == 'subscription' && fablabWithoutPlans)" class="row">
|
<uib-tab ng-repeat="stat in statistics" heading="{{stat.label}}" select="setActiveTab(stat)" ng-if="stat.graph && !(stat.es_type_key == 'subscription' && plansModule)" class="row">
|
||||||
|
|
||||||
<div ng-if="stat.graph.chart_type == 'discreteBarChart'">
|
<div ng-if="stat.graph.chart_type == 'discreteBarChart'">
|
||||||
<div id="rankingFilters">
|
<div id="rankingFilters">
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
<button class="btn btn-success m-t" ng-click="selectGroup()">Changer mon groupe</button>
|
<button class="btn btn-success m-t" ng-click="selectGroup()">Changer mon groupe</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div ng-hide="fablabWithoutPlans">
|
<div ng-show="plansModule">
|
||||||
<h3 class="text-u-c" translate>{{ 'app.logged.dashboard.settings.subscription' }}</h3>
|
<h3 class="text-u-c" translate>{{ 'app.logged.dashboard.settings.subscription' }}</h3>
|
||||||
<div ng-show="user.subscribed_plan">
|
<div ng-show="user.subscribed_plan">
|
||||||
<uib-alert type="warning">
|
<uib-alert type="warning">
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<div class="row no-gutter machine-reserve">
|
<div class="row no-gutter machine-reserve">
|
||||||
<div class="col-sm-12 col-md-12 col-lg-9">
|
<div class="col-sm-12 col-md-12 col-lg-9">
|
||||||
<div ui-calendar="calendarConfig" ng-model="eventSources" calendar="calendar" class="wrapper-lg" ng-show="!plansAreShown"></div>
|
<div ui-calendar="calendarConfig" ng-model="eventSources" calendar="calendar" class="wrapper-lg" ng-show="!plansAreShown"></div>
|
||||||
<ng-include ng-if="!fablabWithoutPlans" src="'<%= asset_path "plans/_plan.html" %>'"></ng-include>
|
<ng-include ng-if="plansModule" src="'<%= asset_path "plans/_plan.html" %>'"></ng-include>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
|
|
||||||
<coupon show="isSlotsValid() && (!modePlans || selectedPlan)" coupon="coupon.applied" total="totalNoCoupon" user-id="{{user.id}}"></coupon>
|
<coupon show="isSlotsValid() && (!modePlans || selectedPlan)" coupon="coupon.applied" total="totalNoCoupon" user-id="{{user.id}}"></coupon>
|
||||||
|
|
||||||
<div ng-hide="fablabWithoutPlans">
|
<div ng-show="plansModule">
|
||||||
<div ng-if="isSlotsValid() && !user.subscribed_plan" ng-show="!modePlans">
|
<div ng-if="isSlotsValid() && !user.subscribed_plan" ng-show="!modePlans">
|
||||||
<p class="font-sbold text-base l-h-2x" translate>{{ 'app.shared.cart.to_benefit_from_attractive_prices' }}</p>
|
<p class="font-sbold text-base l-h-2x" translate>{{ 'app.shared.cart.to_benefit_from_attractive_prices' }}</p>
|
||||||
<div><button class="btn btn-warning-full rounded btn-block text-xs" ng-click="showPlans()" translate>{{ 'app.shared.cart.view_our_subscriptions' }}</button></div>
|
<div><button class="btn btn-warning-full rounded btn-block text-xs" ng-click="showPlans()" translate>{{ 'app.shared.cart.view_our_subscriptions' }}</button></div>
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
<div class="row no-gutter training-reserve">
|
<div class="row no-gutter training-reserve">
|
||||||
<div class="col-sm-12 col-md-12 col-lg-9">
|
<div class="col-sm-12 col-md-12 col-lg-9">
|
||||||
<div ui-calendar="calendarConfig" ng-model="eventSources" calendar="calendar" class="wrapper-lg" ng-show="!plansAreShown"></div>
|
<div ui-calendar="calendarConfig" ng-model="eventSources" calendar="calendar" class="wrapper-lg" ng-show="!plansAreShown"></div>
|
||||||
<ng-include ng-if="!fablabWithoutPlans" src="'<%= asset_path "plans/_plan.html" %>'"></ng-include>
|
<ng-include ng-if="plansModule" src="'<%= asset_path "plans/_plan.html" %>'"></ng-include>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
<div class="row no-gutter training-reserve">
|
<div class="row no-gutter training-reserve">
|
||||||
<div class="col-sm-12 col-md-12 col-lg-9">
|
<div class="col-sm-12 col-md-12 col-lg-9">
|
||||||
<div ui-calendar="calendarConfig" ng-model="eventSources" calendar="calendar" class="wrapper-lg" ng-show="!plansAreShown"></div>
|
<div ui-calendar="calendarConfig" ng-model="eventSources" calendar="calendar" class="wrapper-lg" ng-show="!plansAreShown"></div>
|
||||||
<ng-include ng-if="!fablabWithoutPlans" src="'<%= asset_path "plans/_plan.html" %>'"></ng-include>
|
<ng-include ng-if="plansModule" src="'<%= asset_path "plans/_plan.html" %>'"></ng-include>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
# API Controller for resources of type Availability
|
# API Controller for resources of type Availability
|
||||||
class API::AvailabilitiesController < API::ApiController
|
class API::AvailabilitiesController < API::ApiController
|
||||||
include FablabConfiguration
|
|
||||||
|
|
||||||
before_action :authenticate_user!, except: [:public]
|
before_action :authenticate_user!, except: [:public]
|
||||||
before_action :set_availability, only: %i[show update reservations lock]
|
before_action :set_availability, only: %i[show update reservations lock]
|
||||||
before_action :define_max_visibility, only: %i[machine trainings spaces]
|
before_action :define_max_visibility, only: %i[machine trainings spaces]
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
module FablabConfiguration
|
|
||||||
def fablab_plans_deactivated?
|
|
||||||
Rails.application.secrets.fablab_without_plans
|
|
||||||
end
|
|
||||||
end
|
|
@ -81,7 +81,8 @@ class Setting < ApplicationRecord
|
|||||||
book_overlapping_slots
|
book_overlapping_slots
|
||||||
slot_duration
|
slot_duration
|
||||||
events_in_calendar
|
events_in_calendar
|
||||||
spaces_module] }
|
spaces_module
|
||||||
|
plans_module] }
|
||||||
def value
|
def value
|
||||||
last_value = history_values.order(HistoryValue.arel_table['created_at'].desc).first
|
last_value = history_values.order(HistoryValue.arel_table['created_at'].desc).first
|
||||||
last_value&.value
|
last_value&.value
|
||||||
|
@ -2,9 +2,8 @@
|
|||||||
|
|
||||||
# Check the access policies for API::SubscriptionsController
|
# Check the access policies for API::SubscriptionsController
|
||||||
class SubscriptionPolicy < ApplicationPolicy
|
class SubscriptionPolicy < ApplicationPolicy
|
||||||
include FablabConfiguration
|
|
||||||
def create?
|
def create?
|
||||||
!fablab_plans_deactivated? && (user.admin? || (user.manager? && record.user_id != user.id) || record.price.zero?)
|
Setting.get('plans_module') && (user.admin? || (user.manager? && record.user_id != user.id) || record.price.zero?)
|
||||||
end
|
end
|
||||||
|
|
||||||
def show?
|
def show?
|
||||||
|
@ -39,7 +39,7 @@ class HealthService
|
|||||||
admins: User.admins.count,
|
admins: User.admins.count,
|
||||||
availabilities: last_week_availabilities,
|
availabilities: last_week_availabilities,
|
||||||
reservations: last_week_new_reservations,
|
reservations: last_week_new_reservations,
|
||||||
plans: !Rails.application.secrets.fablab_without_plans,
|
plans: Settings.get('plans_module'),
|
||||||
spaces: Setting.get('spaces_module'),
|
spaces: Setting.get('spaces_module'),
|
||||||
online_payment: !Rails.application.secrets.fablab_without_online_payments,
|
online_payment: !Rails.application.secrets.fablab_without_online_payments,
|
||||||
invoices: !Rails.application.secrets.fablab_without_invoices,
|
invoices: !Rails.application.secrets.fablab_without_invoices,
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var Fablab = Fablab || {};
|
var Fablab = Fablab || {};
|
||||||
|
|
||||||
Fablab.withoutPlans = ('<%= Rails.application.secrets.fablab_without_plans %>' === 'true');
|
Fablab.plansModule = ('<%= Setting.get('plans_module') %>' === 'true');
|
||||||
Fablab.spacesModule = ('<%= Setting.get('spaces_module') %>' === 'true');
|
Fablab.spacesModule = ('<%= Setting.get('spaces_module') %>' === 'true');
|
||||||
Fablab.withoutOnlinePayment = ('<%= Rails.application.secrets.fablab_without_online_payments %>' === 'true');
|
Fablab.withoutOnlinePayment = ('<%= Rails.application.secrets.fablab_without_online_payments %>' === 'true');
|
||||||
Fablab.withoutInvoices = ('<%= Rails.application.secrets.fablab_without_invoices %>' === 'true');
|
Fablab.withoutInvoices = ('<%= Rails.application.secrets.fablab_without_invoices %>' === 'true');
|
||||||
|
@ -270,6 +270,7 @@ en:
|
|||||||
subscriptions: "Subscriptions"
|
subscriptions: "Subscriptions"
|
||||||
trainings: "Trainings"
|
trainings: "Trainings"
|
||||||
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>"
|
||||||
beware_the_subscriptions_are_disabled_on_this_application: "Beware, the subscriptions are disabled on this application."
|
beware_the_subscriptions_are_disabled_on_this_application: "Beware, the subscriptions are disabled on this application."
|
||||||
you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager: "You can create some but they won't be available until the project is redeployed by the server manager."
|
you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager: "You can create some but they won't be available until the project is redeployed by the server manager."
|
||||||
for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later: "For safety reasons, please don't create subscriptions if you don't intend to use them later."
|
for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later: "For safety reasons, please don't create subscriptions if you don't intend to use them later."
|
||||||
@ -1045,6 +1046,10 @@ en:
|
|||||||
spaces_info_html: "<p>A space can be, for example, a woodshop or a meeting room. Their particularity is that they can be booked by several people at the same time.</p><p><strong>Warning:</strong> It is not recommended to disable spaces if at least one space reservation was made on the system.</p>"
|
spaces_info_html: "<p>A space can be, for example, a woodshop or a meeting room. Their particularity is that they can be booked by several people at the same time.</p><p><strong>Warning:</strong> It is not recommended to disable spaces if at least one space reservation was made on the system.</p>"
|
||||||
enable_spaces: "Enable the spaces"
|
enable_spaces: "Enable the spaces"
|
||||||
spaces_module: "spaces module"
|
spaces_module: "spaces module"
|
||||||
|
plans: "Plans"
|
||||||
|
plans_info_html: "<p>Subscriptions provide a way to segment your prices and provide benefits to regular users.</p><p><strong>Warning:</strong> It is not recommended to disable plans if at least one subscription is active on the system.</p>"
|
||||||
|
enable_plans: "Enable the plans"
|
||||||
|
plans_module: "plans module"
|
||||||
sort_by:
|
sort_by:
|
||||||
default: "Default"
|
default: "Default"
|
||||||
name: "Name"
|
name: "Name"
|
||||||
|
@ -270,9 +270,7 @@ fr:
|
|||||||
subscriptions: "Abonnements"
|
subscriptions: "Abonnements"
|
||||||
trainings: "Formations"
|
trainings: "Formations"
|
||||||
list_of_the_subscription_plans: "Liste des formules d'abonnements"
|
list_of_the_subscription_plans: "Liste des formules d'abonnements"
|
||||||
beware_the_subscriptions_are_disabled_on_this_application: "Attention, les abonnements sont désactivés sur cette application."
|
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>"
|
||||||
you_can_create_some_but_they_wont_be_available_until_the_project_is_redeployed_by_the_server_manager: "Vous pouvez tout de même en créer mais ils ne seront disponibles qu'après un redéploiement du projet par le responsable du serveur."
|
|
||||||
for_safety_reasons_please_dont_create_subscriptions_if_you_dont_want_intend_to_use_them_later: "Pour des raisons de sécurité, veuillez ne pas créer d'abonnements si vous ne comptez pas les utiliser par la suite."
|
|
||||||
add_a_new_subscription_plan: "Ajouter une nouvelle formule d'abonnement"
|
add_a_new_subscription_plan: "Ajouter une nouvelle formule d'abonnement"
|
||||||
type: "Type"
|
type: "Type"
|
||||||
partner: "Partenaire"
|
partner: "Partenaire"
|
||||||
@ -1045,6 +1043,10 @@ fr:
|
|||||||
spaces_info_html: "<p>Un espace peut-être, par exemple, un atelier bois ou une salle de réunion. Leur particularité est qu'ils peuvent être réservés par plusieurs personnes en même temps.</p><p><strong>Attention :</strong> Il n'est pas recommandé de désactiver les espaces si au moins une réservation est en cours sur un espace.</p>"
|
spaces_info_html: "<p>Un espace peut-être, par exemple, un atelier bois ou une salle de réunion. Leur particularité est qu'ils peuvent être réservés par plusieurs personnes en même temps.</p><p><strong>Attention :</strong> Il n'est pas recommandé de désactiver les espaces si au moins une réservation est en cours sur un espace.</p>"
|
||||||
enable_spaces: "Activer les espaces"
|
enable_spaces: "Activer les espaces"
|
||||||
spaces_module: "module espace"
|
spaces_module: "module espace"
|
||||||
|
plans: "Abonnements"
|
||||||
|
plans_info_html: "<p>Les abonnements offrent un moyen de segmenter vos tarifs et d'accorder des avantages aux utilisateurs réguliers.</p><p><strong>Attention :</strong> Il n'est pas recommandé de désactiver les abonnements si au moins un abonnement est en cours.</p>"
|
||||||
|
enable_plans: "Activer les abonnements"
|
||||||
|
plans_module: "module abonnements"
|
||||||
sort_by:
|
sort_by:
|
||||||
default: "Défaut"
|
default: "Défaut"
|
||||||
name: "Nom"
|
name: "Nom"
|
||||||
|
@ -16,7 +16,6 @@ development:
|
|||||||
stripe_publishable_key: <%= ENV["STRIPE_PUBLISHABLE_KEY"] %>
|
stripe_publishable_key: <%= ENV["STRIPE_PUBLISHABLE_KEY"] %>
|
||||||
stripe_currency: <%= ENV["STRIPE_CURRENCY"] %>
|
stripe_currency: <%= ENV["STRIPE_CURRENCY"] %>
|
||||||
disqus_shortname: <%= ENV["DISQUS_SHORTNAME"] %>
|
disqus_shortname: <%= ENV["DISQUS_SHORTNAME"] %>
|
||||||
fablab_without_plans: <%= ENV["FABLAB_WITHOUT_PLANS"] %>
|
|
||||||
fablab_without_online_payments: <%= ENV["FABLAB_WITHOUT_ONLINE_PAYMENT"] %>
|
fablab_without_online_payments: <%= ENV["FABLAB_WITHOUT_ONLINE_PAYMENT"] %>
|
||||||
fablab_without_invoices: <%= ENV["FABLAB_WITHOUT_INVOICES"] %>
|
fablab_without_invoices: <%= ENV["FABLAB_WITHOUT_INVOICES"] %>
|
||||||
fablab_without_wallet: <%= ENV["FABLAB_WITHOUT_WALLET"] %>
|
fablab_without_wallet: <%= ENV["FABLAB_WITHOUT_WALLET"] %>
|
||||||
@ -59,7 +58,6 @@ test:
|
|||||||
stripe_publishable_key: <%= ENV["STRIPE_PUBLISHABLE_KEY"] %>
|
stripe_publishable_key: <%= ENV["STRIPE_PUBLISHABLE_KEY"] %>
|
||||||
stripe_currency: usd
|
stripe_currency: usd
|
||||||
disqus_shortname: fablab-sleede
|
disqus_shortname: fablab-sleede
|
||||||
fablab_without_plans: false
|
|
||||||
fablab_without_online_payments: false
|
fablab_without_online_payments: false
|
||||||
fablab_without_invoices: false
|
fablab_without_invoices: false
|
||||||
fablab_without_wallet: false
|
fablab_without_wallet: false
|
||||||
@ -102,7 +100,6 @@ staging:
|
|||||||
stripe_publishable_key: <%= ENV["STRIPE_PUBLISHABLE_KEY"] %>
|
stripe_publishable_key: <%= ENV["STRIPE_PUBLISHABLE_KEY"] %>
|
||||||
stripe_currency: <%= ENV["STRIPE_CURRENCY"] %>
|
stripe_currency: <%= ENV["STRIPE_CURRENCY"] %>
|
||||||
disqus_shortname: <%= ENV["DISQUS_SHORTNAME"] %>
|
disqus_shortname: <%= ENV["DISQUS_SHORTNAME"] %>
|
||||||
fablab_without_plans: <%= ENV["FABLAB_WITHOUT_PLANS"] %>
|
|
||||||
fablab_without_online_payments: <%= ENV["FABLAB_WITHOUT_ONLINE_PAYMENT"] %>
|
fablab_without_online_payments: <%= ENV["FABLAB_WITHOUT_ONLINE_PAYMENT"] %>
|
||||||
fablab_without_invoices: <%= ENV["FABLAB_WITHOUT_INVOICES"] %>
|
fablab_without_invoices: <%= ENV["FABLAB_WITHOUT_INVOICES"] %>
|
||||||
fablab_without_wallet: <%= ENV["FABLAB_WITHOUT_WALLET"] %>
|
fablab_without_wallet: <%= ENV["FABLAB_WITHOUT_WALLET"] %>
|
||||||
@ -156,7 +153,6 @@ production:
|
|||||||
stripe_publishable_key: <%= ENV["STRIPE_PUBLISHABLE_KEY"] %>
|
stripe_publishable_key: <%= ENV["STRIPE_PUBLISHABLE_KEY"] %>
|
||||||
stripe_currency: <%= ENV["STRIPE_CURRENCY"] %>
|
stripe_currency: <%= ENV["STRIPE_CURRENCY"] %>
|
||||||
disqus_shortname: <%= ENV["DISQUS_SHORTNAME"] %>
|
disqus_shortname: <%= ENV["DISQUS_SHORTNAME"] %>
|
||||||
fablab_without_plans: <%= ENV["FABLAB_WITHOUT_PLANS"] %>
|
|
||||||
fablab_without_online_payments: <%= ENV["FABLAB_WITHOUT_ONLINE_PAYMENT"] %>
|
fablab_without_online_payments: <%= ENV["FABLAB_WITHOUT_ONLINE_PAYMENT"] %>
|
||||||
fablab_without_invoices: <%= ENV["FABLAB_WITHOUT_INVOICES"] %>
|
fablab_without_invoices: <%= ENV["FABLAB_WITHOUT_INVOICES"] %>
|
||||||
fablab_without_wallet: <%= ENV["FABLAB_WITHOUT_WALLET"] %>
|
fablab_without_wallet: <%= ENV["FABLAB_WITHOUT_WALLET"] %>
|
||||||
|
@ -81,12 +81,6 @@ So set this setting carefully before starting the application for the first time
|
|||||||
|
|
||||||
When payments are done on the platform, an invoice will be generated as a PDF file.
|
When payments are done on the platform, an invoice will be generated as a PDF file.
|
||||||
The PDF file name will be of the form "(INVOICE_PREFIX) - (invoice ID) _ (invoice date) .pdf".
|
The PDF file name will be of the form "(INVOICE_PREFIX) - (invoice ID) _ (invoice date) .pdf".
|
||||||
<a name="FABLAB_WITHOUT_PLANS"></a>
|
|
||||||
|
|
||||||
FABLAB_WITHOUT_PLANS
|
|
||||||
|
|
||||||
If set to 'true', the subscription plans will be fully disabled and invisible in the application.
|
|
||||||
It is not recommended to disable plans if at least one subscription was took on the platform.
|
|
||||||
<a name="FABLAB_WITHOUT_ONLINE_PAYMENT"></a>
|
<a name="FABLAB_WITHOUT_ONLINE_PAYMENT"></a>
|
||||||
|
|
||||||
FABLAB_WITHOUT_ONLINE_PAYMENT
|
FABLAB_WITHOUT_ONLINE_PAYMENT
|
||||||
|
@ -16,7 +16,6 @@ STRIPE_CURRENCY=eur
|
|||||||
INVOICE_PREFIX=Demo-FabLab_facture
|
INVOICE_PREFIX=Demo-FabLab_facture
|
||||||
|
|
||||||
# FabLab optional modules
|
# FabLab optional modules
|
||||||
FABLAB_WITHOUT_PLANS=false
|
|
||||||
FABLAB_WITHOUT_ONLINE_PAYMENT=false
|
FABLAB_WITHOUT_ONLINE_PAYMENT=false
|
||||||
FABLAB_WITHOUT_INVOICES=false
|
FABLAB_WITHOUT_INVOICES=false
|
||||||
PHONE_REQUIRED=true
|
PHONE_REQUIRED=true
|
||||||
|
@ -111,7 +111,8 @@ namespace :fablab do
|
|||||||
%w[_ BOOK_SLOT_AT_SAME_TIME book_overlapping_slots true],
|
%w[_ BOOK_SLOT_AT_SAME_TIME book_overlapping_slots true],
|
||||||
%w[_ SLOT_DURATION slot_duration 60],
|
%w[_ SLOT_DURATION slot_duration 60],
|
||||||
%w[_ EVENTS_IN_CALENDAR events_in_calendar false],
|
%w[_ EVENTS_IN_CALENDAR events_in_calendar false],
|
||||||
%w[! FABLAB_WITHOUT_SPACES spaces_module true]
|
%w[! FABLAB_WITHOUT_SPACES spaces_module true],
|
||||||
|
%w[! FABLAB_WITHOUT_PLANS plans_module false]
|
||||||
]
|
]
|
||||||
|
|
||||||
mapping.each do |m|
|
mapping.each do |m|
|
||||||
|
@ -9,7 +9,6 @@ STRIPE_PUBLISHABLE_KEY=
|
|||||||
STRIPE_CURRENCY=eur
|
STRIPE_CURRENCY=eur
|
||||||
|
|
||||||
INVOICE_PREFIX=Demo-FabLab_facture
|
INVOICE_PREFIX=Demo-FabLab_facture
|
||||||
FABLAB_WITHOUT_PLANS=false
|
|
||||||
FABLAB_WITHOUT_ONLINE_PAYMENT=false
|
FABLAB_WITHOUT_ONLINE_PAYMENT=false
|
||||||
FABLAB_WITHOUT_INVOICES=false
|
FABLAB_WITHOUT_INVOICES=false
|
||||||
PHONE_REQUIRED=false
|
PHONE_REQUIRED=false
|
||||||
|
@ -234,7 +234,7 @@ configure_env_file()
|
|||||||
|
|
||||||
local doc variables secret
|
local doc variables secret
|
||||||
doc=$(\curl -sSL https://raw.githubusercontent.com/sleede/fab-manager/master/doc/environment.md)
|
doc=$(\curl -sSL https://raw.githubusercontent.com/sleede/fab-manager/master/doc/environment.md)
|
||||||
variables=(STRIPE_API_KEY STRIPE_PUBLISHABLE_KEY STRIPE_CURRENCY INVOICE_PREFIX FABLAB_WITHOUT_PLANS FABLAB_WITHOUT_ONLINE_PAYMENT FABLAB_WITHOUT_INVOICES FABLAB_WITHOUT_WALLET \
|
variables=(STRIPE_API_KEY STRIPE_PUBLISHABLE_KEY STRIPE_CURRENCY INVOICE_PREFIX FABLAB_WITHOUT_ONLINE_PAYMENT FABLAB_WITHOUT_INVOICES FABLAB_WITHOUT_WALLET \
|
||||||
USER_CONFIRMATION_NEEDED_TO_SIGN_IN DEFAULT_MAIL_FROM DELIVERY_METHOD DEFAULT_HOST DEFAULT_PROTOCOL SMTP_ADDRESS SMTP_PORT SMTP_USER_NAME SMTP_PASSWORD SMTP_AUTHENTICATION \
|
USER_CONFIRMATION_NEEDED_TO_SIGN_IN DEFAULT_MAIL_FROM DELIVERY_METHOD DEFAULT_HOST DEFAULT_PROTOCOL SMTP_ADDRESS SMTP_PORT SMTP_USER_NAME SMTP_PASSWORD SMTP_AUTHENTICATION \
|
||||||
SMTP_ENABLE_STARTTLS_AUTO SMTP_OPENSSL_VERIFY_MODE SMTP_TLS RECAPTCHA_SITE_KEY RECAPTCHA_SECRET_KEY DISQUS_SHORTNAME TWITTER_NAME \
|
SMTP_ENABLE_STARTTLS_AUTO SMTP_OPENSSL_VERIFY_MODE SMTP_TLS RECAPTCHA_SITE_KEY RECAPTCHA_SECRET_KEY DISQUS_SHORTNAME TWITTER_NAME \
|
||||||
FACEBOOK_APP_ID LOG_LEVEL ALLOWED_EXTENSIONS ALLOWED_MIME_TYPES MAX_IMAGE_SIZE MAX_CAO_SIZE MAX_IMPORT_SIZE DISK_SPACE_MB_ALERT FEATURE_TOUR_DISPLAY \
|
FACEBOOK_APP_ID LOG_LEVEL ALLOWED_EXTENSIONS ALLOWED_MIME_TYPES MAX_IMAGE_SIZE MAX_CAO_SIZE MAX_IMPORT_SIZE DISK_SPACE_MB_ALERT FEATURE_TOUR_DISPLAY \
|
||||||
|
Loading…
Reference in New Issue
Block a user