mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-01-22 11:52:21 +01:00
(merge) merge branch dev
This commit is contained in:
commit
4fc181480b
11
CHANGELOG.md
11
CHANGELOG.md
@ -1,6 +1,17 @@
|
||||
# Changelog Fab-manager
|
||||
|
||||
- Fix a bug: unable to confirm payment of store for admin
|
||||
- Fix a bug: unable to update payment schedule item
|
||||
|
||||
|
||||
## v6.0.9 2023 July 07
|
||||
|
||||
- Fix a bug: unable to show project step image in markdown file
|
||||
- Fix a bug: unable to update Store Order sub type in statistics
|
||||
- Fix a bug: unable to create plan with plan limitation
|
||||
- Ability to show all availabilities in calender for admin
|
||||
- Improved performance when marking all notifications as read
|
||||
- [TODO DEPLOY] `rails fablab:maintenance:regenerate_statistics[2014,1]`
|
||||
|
||||
## v6.0.8 2023 July 03
|
||||
|
||||
|
@ -529,6 +529,7 @@ GEM
|
||||
|
||||
PLATFORMS
|
||||
x86_64-darwin-20
|
||||
x86_64-darwin-21
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
|
@ -31,7 +31,7 @@ class API::CheckoutController < API::APIController
|
||||
|
||||
def confirm_payment
|
||||
authorize @current_order, policy_class: CheckoutPolicy
|
||||
res = Checkout::PaymentService.new.confirm_payment(@current_order, current_user, params[:coupon_code], params[:payment_id])
|
||||
res = Checkout::PaymentService.new.confirm_payment(@current_order, params[:coupon_code], params[:payment_id])
|
||||
render json: res
|
||||
rescue StandardError => e
|
||||
render json: e, status: :unprocessable_entity
|
||||
|
@ -65,7 +65,8 @@ class API::NotificationsController < API::APIController
|
||||
end
|
||||
|
||||
def update_all
|
||||
current_user.notifications.where(is_read: false).find_each(&:mark_as_read)
|
||||
current_user.notifications.where(is_read: false)
|
||||
.update_all(is_read: true, updated_at: Time.current) # rubocop:disable Rails/SkipsModelValidations
|
||||
head :no_content
|
||||
end
|
||||
|
||||
|
@ -8,7 +8,7 @@ class PlanLimitation < ApplicationRecord
|
||||
belongs_to :machine, foreign_key: 'limitable_id', inverse_of: :plan_limitations
|
||||
belongs_to :machine_category, foreign_key: 'limitable_id', inverse_of: :plan_limitations
|
||||
|
||||
validates :limitable_id, :limitable_type, :limit, :plan_id, presence: true
|
||||
validates :limitable_id, :limitable_type, :limit, presence: true
|
||||
validates :limitable_id, uniqueness: { scope: %i[limitable_type plan_id] }
|
||||
|
||||
# @return [Array<Machine,Event,Space,Training>]
|
||||
|
@ -22,7 +22,7 @@ class Availabilities::VisibilityService
|
||||
# @return [Array<ActiveSupport::TimeWithZone,Date,Time>] as: [start,end]
|
||||
def visibility(user, available_type, range_start, range_end)
|
||||
if user&.privileged?
|
||||
window_start = [range_start, 1.month.ago].max
|
||||
window_start = range_start
|
||||
window_end = range_end
|
||||
else
|
||||
end_at = @maximum_visibility[:other]
|
||||
|
@ -29,9 +29,7 @@ class Checkout::PaymentService
|
||||
end
|
||||
end
|
||||
|
||||
def confirm_payment(order, operator, coupon_code, payment_id = '')
|
||||
return unless operator.member?
|
||||
|
||||
def confirm_payment(order, coupon_code, payment_id = '')
|
||||
if Stripe::Helper.enabled?
|
||||
Payments::StripeService.new.confirm_payment(order, coupon_code, payment_id)
|
||||
elsif PayZen::Helper.enabled?
|
||||
|
@ -45,7 +45,13 @@ class Orders::OrderService
|
||||
|
||||
# update in elasticsearch (statistics)
|
||||
stat_order = Stats::Order.search(query: { term: { orderId: order.id } })
|
||||
stat_order.map { |s| s.update(state: state) }
|
||||
sub_type = if state.in?(%w[paid in_progress ready delivered])
|
||||
'paid-processed'
|
||||
elsif state.in?(%w[payment_failed refunded canceled])
|
||||
'aborted'
|
||||
end
|
||||
|
||||
stat_order.map { |s| s.update(subType: sub_type, state: state) } if sub_type.present?
|
||||
|
||||
order
|
||||
end
|
||||
|
@ -455,8 +455,8 @@ fr:
|
||||
open_lab_app_secret: "Secret"
|
||||
openlab_default_info_html: "Dans la galerie de projets, les visiteurs peuvent choisir entre deux vues : tous les projets de l'ensemble du réseau OpenLab, ou uniquement les projets documentés dans votre Fab Lab.<br/>Ici, vous pouvez choisir quelle vue est affichée par défaut."
|
||||
default_to_openlab: "Afficher OpenLab par défaut"
|
||||
filters: Filtres de la liste des projets
|
||||
project_categories: Catégories
|
||||
filters: Affichage des filtres
|
||||
project_categories: Personnalisation du filtre Catégories
|
||||
project_categories:
|
||||
name: "Nom"
|
||||
projects_setting:
|
||||
@ -1821,10 +1821,10 @@ fr:
|
||||
extended_prices_in_same_day: "Prix étendus le même jour"
|
||||
public_registrations: "Inscriptions publiques"
|
||||
show_username_in_admin_list: "Afficher le nom d'utilisateur dans la liste"
|
||||
projects_list_member_filter_presence: "Présence de filtre des membres dans la liste des projets"
|
||||
projects_list_date_filters_presence: "Filtres de date présents dans la liste des projets"
|
||||
project_categories_filter_placeholder: "Placeholder pour le filtre des catégories dans la galerie de projet"
|
||||
project_categories_wording: "Mots utilisés pour remplacer les \"catégories\" sur les pages publiques"
|
||||
projects_list_member_filter_presence: "Permettre la recherche de projets par membre"
|
||||
projects_list_date_filters_presence: "Permettre la recherche de projets par dates"
|
||||
project_categories_filter_placeholder: "Dans la galerie de projets, renommer le filtre \"Toutes les catégories\""
|
||||
project_categories_wording: "Dans la fiche projet, renommer l'intitulé de l'encart Catégories"
|
||||
family_account: "Compte famille"
|
||||
family_account_info_html: "Le compte Famille permet à vos membres d'ajouter leurs enfants de moins de 18 ans sur leur propre compte et de les inscrire directement aux évènements de type Famille. Vous pouvez aussi demander des justificatifs pour chaque enfant et valider leur compte."
|
||||
enable_family_account: "Activer l'option Compte Famille"
|
||||
|
@ -186,8 +186,8 @@ fr:
|
||||
load_next_projects: "Charger les projets suivants"
|
||||
rough_draft: "Brouillon"
|
||||
filter_by_member: "Filtrer par membre"
|
||||
created_from: Créé depuis
|
||||
created_to: Créés le
|
||||
created_from: Créés depuis le
|
||||
created_to: Créés jusqu'au
|
||||
download_archive: Télécharger
|
||||
status_filter:
|
||||
all_statuses: "Tous les statuts"
|
||||
|
@ -403,6 +403,7 @@ de:
|
||||
state_new: "Not yet due"
|
||||
state_pending_check: "Waiting for the cashing of the check"
|
||||
state_pending_transfer: "Waiting for the tranfer confirmation"
|
||||
state_pending_card: "Waiting for the card payment"
|
||||
state_requires_payment_method: "The credit card must be updated"
|
||||
state_requires_action: "Action required"
|
||||
state_paid: "Paid"
|
||||
|
@ -406,6 +406,7 @@ en:
|
||||
state_new: "Not yet due"
|
||||
state_pending_check: "Waiting for the cashing of the check"
|
||||
state_pending_transfer: "Waiting for the tranfer confirmation"
|
||||
state_pending_card: "Waiting for the card payment"
|
||||
state_requires_payment_method: "The credit card must be updated"
|
||||
state_requires_action: "Action required"
|
||||
state_paid: "Paid"
|
||||
|
@ -403,6 +403,7 @@ es:
|
||||
state_new: "Not yet due"
|
||||
state_pending_check: "Waiting for the cashing of the check"
|
||||
state_pending_transfer: "Waiting for the tranfer confirmation"
|
||||
state_pending_card: "Waiting for the card payment"
|
||||
state_requires_payment_method: "The credit card must be updated"
|
||||
state_requires_action: "Action required"
|
||||
state_paid: "Paid"
|
||||
|
@ -406,6 +406,7 @@ fr:
|
||||
state_new: "Pas encore à l'échéance"
|
||||
state_pending_check: "En attente de l'encaissement du chèque"
|
||||
state_pending_transfer: "En attente de la confirmation du prélèvement"
|
||||
state_pending_card: "En attente du paiement par carte"
|
||||
state_requires_payment_method: "La carte bancaire doit être mise à jour"
|
||||
state_requires_action: "Action requise"
|
||||
state_paid: "Payée"
|
||||
|
@ -403,6 +403,7 @@ it:
|
||||
state_new: "Non ancora scaduto"
|
||||
state_pending_check: "In attesa di incasso dell'assegno"
|
||||
state_pending_transfer: "In attesa conferma del bonifico bancario"
|
||||
state_pending_card: "Waiting for the card payment"
|
||||
state_requires_payment_method: "La carta di credito deve essere aggiornata"
|
||||
state_requires_action: "Azione richiesta"
|
||||
state_paid: "Pagato"
|
||||
|
@ -403,6 +403,7 @@
|
||||
state_new: "Not yet due"
|
||||
state_pending_check: "Waiting for the cashing of the check"
|
||||
state_pending_transfer: "Waiting for the tranfer confirmation"
|
||||
state_pending_card: "Waiting for the card payment"
|
||||
state_requires_payment_method: "The credit card must be updated"
|
||||
state_requires_action: "Action required"
|
||||
state_paid: "Paid"
|
||||
|
@ -403,6 +403,7 @@ pt:
|
||||
state_new: "Ainda não vencido"
|
||||
state_pending_check: "Esperando a validação manual"
|
||||
state_pending_transfer: "Aguardando a confirmação da transferência"
|
||||
state_pending_card: "Waiting for the card payment"
|
||||
state_requires_payment_method: "O cartão de crédito deve ser atualizado"
|
||||
state_requires_action: "Ação necessária"
|
||||
state_paid: "Pago"
|
||||
|
@ -403,6 +403,7 @@ zu:
|
||||
state_new: "crwdns29422:0crwdne29422:0"
|
||||
state_pending_check: "crwdns29424:0crwdne29424:0"
|
||||
state_pending_transfer: "crwdns29426:0crwdne29426:0"
|
||||
state_pending_card: "crwdns37663:0crwdne37663:0"
|
||||
state_requires_payment_method: "crwdns29428:0crwdne29428:0"
|
||||
state_requires_action: "crwdns29430:0crwdne29430:0"
|
||||
state_paid: "crwdns29432:0crwdne29432:0"
|
||||
|
@ -720,10 +720,10 @@ fr:
|
||||
trainings_authorization_validity_duration: "Durée de la période de validité des formations"
|
||||
trainings_invalidation_rule: "Invalidation automatique des formations"
|
||||
trainings_invalidation_rule_period: "Période de grâce avant d'invalider une formation"
|
||||
projects_list_member_filter_presence: "Présence de filtre des membres dans la liste des projets"
|
||||
projects_list_member_filter_presence: "Permettre la recherche de projets par membre"
|
||||
projects_list_date_filters_presence: "Filtre de présence de dates sur la liste des projets"
|
||||
project_categories_filter_placeholder: "Placeholder pour le filtre des catégories dans la galerie de projet"
|
||||
project_categories_wording: "Mots utilisés pour remplacer les \"catégories\" sur les pages publiques"
|
||||
project_categories_filter_placeholder: "Dans la galerie de projets, renommer le filtre \"Toutes les catégories\""
|
||||
project_categories_wording: "Dans la fiche projet, renommer l'intitulé de l'encart Catégories"
|
||||
#statuses of projects
|
||||
statuses:
|
||||
new: "Nouveau"
|
||||
|
@ -24,7 +24,7 @@ class PayZen::Service < Payment::Service
|
||||
rrule: rrule(payment_schedule),
|
||||
order_id: order_id
|
||||
}
|
||||
unless first_item.details['adjustment']&.zero? && first_item.details['other_items']&.zero?
|
||||
if first_item.details['adjustment']&.zero? && first_item.details['other_items']&.zero?
|
||||
initial_amount = first_item.amount
|
||||
initial_amount -= payment_schedule.wallet_amount if payment_schedule.wallet_amount
|
||||
if initial_amount.zero?
|
||||
@ -140,7 +140,7 @@ class PayZen::Service < Payment::Service
|
||||
transaction_date = Time.zone.parse(transaction['creationDate']).to_date
|
||||
|
||||
amount = payment_schedule_item.amount
|
||||
if !payment_schedule_item.details['adjustment']&.zero? && payment_schedule_item.payment_schedule.wallet_amount
|
||||
if payment_schedule_item.details['adjustment']&.zero? && payment_schedule_item.payment_schedule.wallet_amount
|
||||
amount -= payment_schedule_item.payment_schedule.wallet_amount
|
||||
end
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "fab-manager",
|
||||
"version": "6.0.8",
|
||||
"version": "6.0.9",
|
||||
"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",
|
||||
|
@ -35,12 +35,12 @@ class Availabilities::AvailabilitiesServiceTest < ActiveSupport::TestCase
|
||||
assert_empty slots
|
||||
end
|
||||
|
||||
test 'admin cannot see past availabilities further than 1 month' do
|
||||
test 'admin can see past availabilities further than 1 month' do
|
||||
service = Availabilities::AvailabilitiesService.new(@admin)
|
||||
slots = service.machines([Machine.find(2)], @no_subscription,
|
||||
{ start: Time.zone.parse('2015-06-15').beginning_of_day, end: Time.zone.parse('2015-06-15').end_of_day })
|
||||
|
||||
assert_empty slots
|
||||
assert_not_empty slots
|
||||
end
|
||||
|
||||
test 'admin can see past availabilities in 1 month ago' do
|
||||
|
Loading…
x
Reference in New Issue
Block a user