1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-02-20 14:54:15 +01:00

Merge branch 'dev' for release 5.0.5

This commit is contained in:
Sylvain 2021-06-18 17:43:10 +02:00
commit 32ff3fed8d
25 changed files with 53 additions and 48 deletions

View File

@ -1,13 +1,7 @@
# Ignore bundler config.
.bundle
vendor/cache
config/database.yml
config/application.yml
# Ignore database files.
db/*.sqlite3
db/*.sqlite3-journal
postgresql
elasticsearch
redis
@ -15,7 +9,6 @@ redis
# Ignore public assets
public/uploads
public/assets
public/packs
# Ignore all logfiles and tempfiles.
@ -23,8 +16,7 @@ log
*.log
tmp
# Ignore platform dependent files
*.DS_Store
# Ignore IDE configuration files
.idea
# PDF invoices
@ -39,10 +31,7 @@ imports
# accounting archives
accounting
.DS_Store
# Development files
.vagrant
Vagrantfile
provision
.git*

View File

@ -1,5 +1,16 @@
# Changelog Fab-manager
## v5.0.5 2021 June 18
- Fix a bug: during the upgrade, unable to detect the target when not explicitly specified
- Fix a bug: unable to sync users on stripe if one of them have an invalid email address
- Fix a bug: unable to book a free event
- Fix a bug: can't see the dates for the next booked training session, when the user is reserving a machine without the appropriate training
- Fix a bug: invalid link to the user's manual
- Fix a bug: unable to sync coupons on stripe
- Fix a bug: ignored coupon when booking an event with card payment
- Fix a bug: deleting a coupon displays an error message
## v5.0.4 2021 June 15
- Ability to disable the public agenda

View File

@ -126,8 +126,8 @@ Application.Controllers.controller('EventsController', ['$scope', '$state', 'Eve
}
]);
Application.Controllers.controller('ShowEventController', ['$scope', '$state', '$stateParams', '$rootScope', 'Event', '$uibModal', 'Member', 'Reservation', 'Price', 'CustomAsset', 'Slot', 'eventPromise', 'growl', '_t', 'Wallet', 'AuthService', 'helpers', 'dialogs', 'priceCategoriesPromise', 'settingsPromise',
function ($scope, $state, $stateParams, $rootScope, Event, $uibModal, Member, Reservation, Price, CustomAsset, Slot, eventPromise, growl, _t, Wallet, AuthService, helpers, dialogs, priceCategoriesPromise, settingsPromise) {
Application.Controllers.controller('ShowEventController', ['$scope', '$state', '$stateParams', '$rootScope', 'Event', '$uibModal', 'Member', 'Reservation', 'Price', 'CustomAsset', 'Slot', 'eventPromise', 'growl', '_t', 'Wallet', 'AuthService', 'helpers', 'dialogs', 'priceCategoriesPromise', 'settingsPromise', 'LocalPayment',
function ($scope, $state, $stateParams, $rootScope, Event, $uibModal, Member, Reservation, Price, CustomAsset, Slot, eventPromise, growl, _t, Wallet, AuthService, helpers, dialogs, priceCategoriesPromise, settingsPromise, LocalPayment) {
/* PUBLIC SCOPE */
// reservations for the currently shown event
@ -366,7 +366,7 @@ Application.Controllers.controller('ShowEventController', ['$scope', '$state', '
// set the attempting marker
$scope.attempting = true;
// save the reservation to the API
return Reservation.save(cartItems, function (reservation) {
return LocalPayment.confirm(cartItems, function (reservation) {
// reservation successful
afterPayment(reservation);
return $scope.attempting = false;
@ -715,7 +715,7 @@ Application.Controllers.controller('ShowEventController', ['$scope', '$state', '
growl.error(_t('app.shared.cart.online_payment_disabled'));
} else {
$scope.toggleOnlinePaymentModal(() => {
$scope.onlinePayment.cartItems = mkCartItems(reservation, 'card');
$scope.onlinePayment.cartItems = mkCartItems(reservation, $scope.coupon.applied, 'card');
});
}
};

View File

@ -28,7 +28,7 @@ Application.Services.factory('Help', ['$rootScope', '$uibModal', '$state', 'Auth
// if no tour, just open the guide
if (tourName === undefined) {
return window.open('https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf', '_blank');
return window.open('http://guide-fr.fab.mn', '_blank');
}
$uibModal.open({

View File

@ -3,7 +3,7 @@
</div>
<div class="modal-body">
<p translate> {{ 'app.shared.training_reservation_modal.you_must_wait_for_your_training_is_being_validated_by_the_fablab_team_to_book_this_machine' }}</p>
<p>{{ 'app.shared.training_reservation_modal.your_training_will_occur_' | translate }} <span class="sbold">{{machine.current_user_training_reservation.slots[0].start_at | amDateFormat: 'LL'}} : {{machine.current_user_training_reservation.slots[0].start_at | amDateFormat:'LT'}} - {{machine.current_user_training_reservation.slots[0].end_at | amDateFormat:'LT'}}</span></p>
<p>{{ 'app.shared.training_reservation_modal.your_training_will_occur_' | translate }} <span class="sbold">{{machine.current_user_training_reservation.slots_attributes[0].start_at | amDateFormat: 'LL'}} : {{machine.current_user_training_reservation.slots_attributes[0].start_at | amDateFormat:'LT'}} - {{machine.current_user_training_reservation.slots_attributes[0].end_at | amDateFormat:'LT'}}</span></p>
</div>
<div class="modal-footer">
<button class="btn btn-warning" ng-click="cancel()" translate>{{ 'app.shared.buttons.close' }}</button>

View File

@ -13,7 +13,7 @@
<div class="row text-center m-t-lg m-b-md">
<a class="btn btn-default"
ng-click="onGuide()"
href="https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf"
href="http://guide-fr.fab.mn"
target="_blank"
translate>{{ 'app.shared.help.guide' }}</a>
</div>

View File

@ -6,7 +6,7 @@ class Coupon < ApplicationRecord
has_many :payment_schedule
after_create :create_gateway_coupon
after_commit :delete_gateway_coupon, on: [:destroy]
before_destroy :delete_gateway_coupon
validates :name, presence: true
validates :code, presence: true

View File

@ -11,10 +11,14 @@ class SyncObjectsOnStripeWorker
User.online_payers.each_with_index do |member, index|
logger.debug "#{index} / #{total}"
begin
stp_customer = member.payment_gateway_object.gateway_object.retrieve
stp_customer = member.payment_gateway_object&.gateway_object&.retrieve
StripeWorker.new.create_stripe_customer(member.id) if stp_customer.nil? || stp_customer[:deleted]
rescue Stripe::InvalidRequestError
StripeWorker.new.create_stripe_customer(member.id)
begin
StripeWorker.new.create_stripe_customer(member.id)
rescue Stripe::InvalidRequestError => e
puts "Unable to create the customer #{member.id} do to a Stripe error: #{e}"
end
end
end
@ -22,9 +26,9 @@ class SyncObjectsOnStripeWorker
total = Coupon.all.count
Coupon.all.each_with_index do |coupon, index|
logger.debug "#{index} / #{total}"
Stripe::Coupon.retrieve(c.code, api_key: Setting.get('stripe_secret_key'))
Stripe::Coupon.retrieve(coupon.code, api_key: Setting.get('stripe_secret_key'))
rescue Stripe::InvalidRequestError
Stripe::Service.create_coupon(c.id)
Stripe::Service.create_coupon(coupon.id)
end
w = StripeWorker.new

View File

@ -1325,7 +1325,7 @@ de:
tour:
conclusion:
title: "Vielen Dank für Ihre Aufmerksamkeit"
content: "<p>Um diese kontextabhängige Hilfe neu zu starten, können Sie jederzeit <strong>F1</strong> drücken oder klicken Sie im Benutzermenu auf [? Hilfe].</p><p>Zusätzliche Hilfe finden Sie in der <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>Benutzeranleitung</a> (nur auf Französisch).</p><p>Das Fab-Manager-Team bietet auch personalisierten Support (Hilfe beim Einstieg, Hilfe bei der Installation, Anpassung etc.), <a href='mailto:contact@fab-manager.com'>kontaktieren Sie uns</a> für weitere Informationen.</p>"
content: "<p>Um diese kontextabhängige Hilfe neu zu starten, können Sie jederzeit <strong>F1</strong> drücken oder klicken Sie im Benutzermenu auf [? Hilfe].</p><p>Zusätzliche Hilfe finden Sie in der <a href='http://guide-fr.fab.mn' target='_blank'>Benutzeranleitung</a> (nur auf Französisch).</p><p>Das Fab-Manager-Team bietet auch personalisierten Support (Hilfe beim Einstieg, Hilfe bei der Installation, Anpassung etc.), <a href='mailto:contact@fab-manager.com'>kontaktieren Sie uns</a> für weitere Informationen.</p>"
trainings:
welcome:
title: "Schulungen"

View File

@ -1325,7 +1325,7 @@ en:
tour:
conclusion:
title: "Thank you for your attention"
content: "<p>If you want to restart this contextual help, press <strong>F1</strong> at any time or click on [? Help] from the user's menu.</p><p>If you need additional help, you can <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>check the user guide</a> (only in French for now).</p><p>The Fab-manager's team also provides personalized support (help with getting started, help with installation, customization, etc.), <a href='mailto:contact@fab-manager.com'>contact-us</a> for more info.</p>"
content: "<p>If you want to restart this contextual help, press <strong>F1</strong> at any time or click on [? Help] from the user's menu.</p><p>If you need additional help, you can <a href='http://guide-fr.fab.mn' target='_blank'>check the user guide</a> (only in French for now).</p><p>The Fab-manager's team also provides personalized support (help with getting started, help with installation, customization, etc.), <a href='mailto:contact@fab-manager.com'>contact-us</a> for more info.</p>"
trainings:
welcome:
title: "Trainings"

View File

@ -1325,7 +1325,7 @@ es:
tour:
conclusion:
title: "Thank you for your attention"
content: "<p>If you want to restart this contextual help, press <strong>F1</strong> at any time or click on [? Help] from the user's menu.</p><p>If you need additional help, you can <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>check the user guide</a> (only in French for now).</p><p>The Fab-manager's team also provides personalized support (help with getting started, help with installation, customization, etc.), <a href='mailto:contact@fab-manager.com'>contact-us</a> for more info.</p>"
content: "<p>If you want to restart this contextual help, press <strong>F1</strong> at any time or click on [? Help] from the user's menu.</p><p>If you need additional help, you can <a href='http://guide-fr.fab.mn' target='_blank'>check the user guide</a> (only in French for now).</p><p>The Fab-manager's team also provides personalized support (help with getting started, help with installation, customization, etc.), <a href='mailto:contact@fab-manager.com'>contact-us</a> for more info.</p>"
trainings:
welcome:
title: "Trainings"

View File

@ -1325,7 +1325,7 @@ fr:
tour:
conclusion:
title: "Merci de votre attention"
content: "<p>Si vous souhaitez relancer cette aide contextuelle, appuyez sur <strong>F1</strong> à n'importe quel moment ou cliquez sur [? Aide] depuis le menu utilisateur.</p><p>Si vous avez besoin d'aide supplémentaire, vous pouvez <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>consulter le guide d'utilisation</a> disponible en Français.</p><p>L'équipe de Fab-manager propose également du support personnalisé (aide à la prise en main, aide à l'installation, personnalisation, etc.), <a href='mailto:contact@fab-manager.com'>contactez-nous</a> pour plus d'informations.</p>"
content: "<p>Si vous souhaitez relancer cette aide contextuelle, appuyez sur <strong>F1</strong> à n'importe quel moment ou cliquez sur [? Aide] depuis le menu utilisateur.</p><p>Si vous avez besoin d'aide supplémentaire, vous pouvez <a href='http://guide-fr.fab.mn' target='_blank'>consulter le guide d'utilisation</a> disponible en Français.</p><p>L'équipe de Fab-manager propose également du support personnalisé (aide à la prise en main, aide à l'installation, personnalisation, etc.), <a href='mailto:contact@fab-manager.com'>contactez-nous</a> pour plus d'informations.</p>"
trainings:
welcome:
title: "Formations"

View File

@ -1325,7 +1325,7 @@ pt:
tour:
conclusion:
title: "Obrigado pela sua atenção"
content: "<p>Se você deseja reiniciar esta ajuda contextual, pressione <strong>F1</strong> a qualquer momento ou clique em [? Ajuda] do menu do usuário.</p><p>Se precisar de ajuda adicional, você pode <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>verificar o guia do usuário</a> (apenas em francês por enquanto).</p><p>A equipe do Fab-Gerente também fornece suporte personalizado (ajuda para começar, ajuda com a instalação, personalização, etc.), <a href='mailto:contact@fab-manager.com'>contacte-nos</a> para mais informações.</p>"
content: "<p>Se você deseja reiniciar esta ajuda contextual, pressione <strong>F1</strong> a qualquer momento ou clique em [? Ajuda] do menu do usuário.</p><p>Se precisar de ajuda adicional, você pode <a href='http://guide-fr.fab.mn' target='_blank'>verificar o guia do usuário</a> (apenas em francês por enquanto).</p><p>A equipe do Fab-Gerente também fornece suporte personalizado (ajuda para começar, ajuda com a instalação, personalização, etc.), <a href='mailto:contact@fab-manager.com'>contacte-nos</a> para mais informações.</p>"
trainings:
welcome:
title: "Treinamentos"

View File

@ -1325,7 +1325,7 @@ zu:
tour:
conclusion:
title: "crwdns19898:0crwdne19898:0"
content: "crwdns21088:0crwdne21088:0"
content: "crwdns21876:0crwdne21876:0"
trainings:
welcome:
title: "crwdns19902:0crwdne19902:0"

View File

@ -362,7 +362,7 @@ de:
tour:
conclusion:
title: "Vielen Dank für Ihre Aufmerksamkeit"
content: "<p>Um diese kontextabhängige Hilfe neu zu starten, können Sie jederzeit <strong>F1</strong> drücken oder klicken Sie im Benutzermenu auf [? Hilfe].</p><p>Zusätzliche Hilfe finden Sie in der <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>Benutzeranleitung</a> (nur auf Französisch).</p><p>Das Fab-Manager-Team bietet auch personalisierten Support (Hilfe beim Einstieg, Hilfe bei der Installation, Anpassung etc.), <a href='mailto:contact@fab-manager.com'>kontaktieren Sie uns</a> für weitere Informationen.</p>"
content: "<p>Um diese kontextabhängige Hilfe neu zu starten, können Sie jederzeit <strong>F1</strong> drücken oder klicken Sie im Benutzermenu auf [? Hilfe].</p><p>Zusätzliche Hilfe finden Sie in der <a href='http://guide-fr.fab.mn' target='_blank'>Benutzeranleitung</a> (nur auf Französisch).</p><p>Das Fab-Manager-Team bietet auch personalisierten Support (Hilfe beim Einstieg, Hilfe bei der Installation, Anpassung etc.), <a href='mailto:contact@fab-manager.com'>kontaktieren Sie uns</a> für weitere Informationen.</p>"
welcome:
welcome:
title: "Willkommen bei Fab-Manager"

View File

@ -362,7 +362,7 @@ en:
tour:
conclusion:
title: "Thank you for your attention"
content: "<p>If you want to restart this contextual help, press <strong>F1</strong> at any time or click on « ? Help » from the user's menu.</p><p>If you need additional help, you can <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>check the user guide</a> (only in French for now).</p><p>The Fab-manager's team also provides personalized support (help with getting started, help with installation, customization, etc.), <a href='mailto:contact@fab-manager.com'>contact-us</a> for more info.</p>"
content: "<p>If you want to restart this contextual help, press <strong>F1</strong> at any time or click on « ? Help » from the user's menu.</p><p>If you need additional help, you can <a href='http://guide-fr.fab.mn' target='_blank'>check the user guide</a> (only in French for now).</p><p>The Fab-manager's team also provides personalized support (help with getting started, help with installation, customization, etc.), <a href='mailto:contact@fab-manager.com'>contact-us</a> for more info.</p>"
welcome:
welcome:
title: "Welcome to Fab-manager"

View File

@ -362,7 +362,7 @@ es:
tour:
conclusion:
title: "Thank you for your attention"
content: "<p>If you want to restart this contextual help, press <strong>F1</strong> at any time or click on « ? Help » from the user's menu.</p><p>If you need additional help, you can <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>check the user guide</a> (only in French for now).</p><p>The Fab-manager's team also provides personalized support (help with getting started, help with installation, customization, etc.), <a href='mailto:contact@fab-manager.com'>contact-us</a> for more info.</p>"
content: "<p>If you want to restart this contextual help, press <strong>F1</strong> at any time or click on « ? Help » from the user's menu.</p><p>If you need additional help, you can <a href='http://guide-fr.fab.mn' target='_blank'>check the user guide</a> (only in French for now).</p><p>The Fab-manager's team also provides personalized support (help with getting started, help with installation, customization, etc.), <a href='mailto:contact@fab-manager.com'>contact-us</a> for more info.</p>"
welcome:
welcome:
title: "Welcome to Fab-manager"

View File

@ -362,7 +362,7 @@ fr:
tour:
conclusion:
title: "Merci de votre attention"
content: "<p>Si vous souhaitez relancer cette aide contextuelle, appuyez sur <strong>F1</strong> à n'importe quel moment ou cliquez sur « ? Aide » depuis le menu utilisateur.</p><p>Si vous avez besoin d'aide supplémentaire, vous pouvez <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>consulter le guide d'utilisation</a> disponible en Français.</p><p>L'équipe de Fab-manager propose également du support personnalisé (aide à la prise en main, aide à l'installation, personnalisation, etc.), <a href='mailto:contact@fab-manager.com'>contactez-nous</a> pour plus d'informations.</p>"
content: "<p>Si vous souhaitez relancer cette aide contextuelle, appuyez sur <strong>F1</strong> à n'importe quel moment ou cliquez sur « ? Aide » depuis le menu utilisateur.</p><p>Si vous avez besoin d'aide supplémentaire, vous pouvez <a href='http://guide-fr.fab.mn' target='_blank'>consulter le guide d'utilisation</a> disponible en Français.</p><p>L'équipe de Fab-manager propose également du support personnalisé (aide à la prise en main, aide à l'installation, personnalisation, etc.), <a href='mailto:contact@fab-manager.com'>contactez-nous</a> pour plus d'informations.</p>"
welcome:
welcome:
title: "Bienvenue dans Fab-manager"

View File

@ -362,7 +362,7 @@ pt:
tour:
conclusion:
title: "Obrigado pela sua atenção"
content: "<p>Se você deseja reiniciar esta ajuda contextual, pressione <strong>F1</strong> a qualquer momento ou clique em « ? Ajuda » no menu do usuário.</p><p>Se precisar de ajuda adicional, você pode <a href='https://github.com/sleede/fab-manager/raw/master/doc/fr/guide_utilisation_fab_manager_v4.7.pdf' target='_blank'>verificar o guia do usuário</a> (apenas em francês por enquanto).</p><p>A equipe do Fab-Gerente também fornece suporte personalizado (ajuda para começar, ajuda com a instalação, personalização, etc.) , <a href='mailto:contact@fab-manager.com'>contacte-nos</a> para mais informações.</p>"
content: "<p>Se você deseja reiniciar esta ajuda contextual, pressione <strong>F1</strong> a qualquer momento ou clique em « ? Ajuda » no menu do usuário.</p><p>Se precisar de ajuda adicional, você pode <a href='http://guide-fr.fab.mn' target='_blank'>verificar o guia do usuário</a> (apenas em francês por enquanto).</p><p>A equipe do Fab-Gerente também fornece suporte personalizado (ajuda para começar, ajuda com a instalação, personalização, etc.) , <a href='mailto:contact@fab-manager.com'>contacte-nos</a> para mais informações.</p>"
welcome:
welcome:
title: "Bem-vindo ao Fab-manager"

View File

@ -362,7 +362,7 @@ zu:
tour:
conclusion:
title: "crwdns19646:0crwdne19646:0"
content: "crwdns21054:0crwdne21054:0"
content: "crwdns21878:0crwdne21878:0"
welcome:
welcome:
title: "crwdns19650:0crwdne19650:0"

View File

@ -250,11 +250,11 @@ fr:
common_url: "URL commune"
common_url_is_required: "L'URL commune est requise."
provided_url_is_not_a_valid_url: "L'URL fournie n'est pas une URL valide."
authorization_endpoint: "Terminaison d'autorisation"
oauth2_authorization_endpoint_is_required: "La terminaison d'autorisation OAuth 2 est requise."
provided_endpoint_is_not_valid: "La terminaison fournie n'est pas valide."
token_acquisition_endpoint: "Terminaison d'acquisition du jeton"
oauth2_token_acquisition_endpoint_is_required: "La terminaison d'acquisition du jeton OAuth 2 est requise."
authorization_endpoint: "Point d'accès pour l'autorisation"
oauth2_authorization_endpoint_is_required: "Le point d'accès pour l'autorisation OAuth 2 est requis."
provided_endpoint_is_not_valid: "Le point d'accès fourni n'est pas valide."
token_acquisition_endpoint: "Point d'accès d'acquisition du jeton"
oauth2_token_acquisition_endpoint_is_required: "Le point d'accès d'acquisition du jeton OAuth 2 est requis."
profil_edition_url: "URL d'édition du profil"
profile_edition_url_is_required: "L'adresse d'édition du profil utilisateur est requise."
client_identifier: "Identifiant client"
@ -266,7 +266,7 @@ fr:
add_a_match: "Ajouter une correspondance"
model: "Modèle"
field: "Champ"
api_endpoint_url: "Terminaison/URL de l'API"
api_endpoint_url: "Point d'accès/URL de l'API"
api_type: "Type d'API"
api_fields: "Champ de l'API"
#machine/training slot modification modal

View File

@ -525,4 +525,4 @@ fr:
payzen_public_key: "Clé publique du client PayZen"
payzen_hmac: "Clef HMAC-SHA-256 PayZen"
payzen_currency: "Devise PayZen"
public_agenda_module: "Public agenda module"
public_agenda_module: "Module d'agenda public"

View File

@ -78,9 +78,10 @@ Rails.application.routes.draw do
resources :prices, only: %i[index update] do
post 'compute', on: :collection
end
resources :coupons
post 'coupons/validate' => 'coupons#validate'
post 'coupons/send' => 'coupons#send_to'
resources :coupons do
post 'validate', action: 'validate', on: :collection
post 'send', action: 'send_to', on: :collection
end
resources :trainings_pricings, only: %i[index update]

View File

@ -1,6 +1,6 @@
{
"name": "fab-manager",
"version": "5.0.4",
"version": "5.0.5",
"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": [
"fablab",

View File

@ -88,7 +88,7 @@ target_version()
if [[ "$TAG" =~ ^:release-v[\.0-9]+$ ]]; then
TARGET=$(echo "$TAG" | grep -Eo '[\.0-9]{5}')
elif [ "$TAG" = ":latest" ]; then
elif [ "$TAG" = ":latest" ] || [ "$TAG" = "" ]; then
TARGET=$(\curl -sSL "https://hub.fab-manager.com/api/versions/latest" | jq -r '.semver')
else
TARGET='custom'