diff --git a/app/frontend/src/javascript/components/plans/plan-form.tsx b/app/frontend/src/javascript/components/plans/plan-form.tsx index 7384b17ba..ba5a3caf7 100644 --- a/app/frontend/src/javascript/components/plans/plan-form.tsx +++ b/app/frontend/src/javascript/components/plans/plan-form.tsx @@ -293,6 +293,7 @@ export const PlanForm: React.FC = ({ action, plan, onError, onSuc formState={formState} nullable id="machines_visibility" + rules={{ min: { value: 7, message: t('app.admin.plan_form.visibility_minimum') } }} type="number" label={t('app.admin.plan_form.machines_visibility')} /> diff --git a/app/models/cart_item/reservation.rb b/app/models/cart_item/reservation.rb index 95bc0e5b9..da522c3b0 100644 --- a/app/models/cart_item/reservation.rb +++ b/app/models/cart_item/reservation.rb @@ -67,7 +67,7 @@ class CartItem::Reservation < CartItem::BaseItem unless ReservationLimitService.authorized?(plan, customer, self, all_items) errors.add(:reservation, I18n.t('cart_item_validation.limit_reached', { - HOURS: ReservationLimitService.limit(plan, reservable), + HOURS: ReservationLimitService.limit(plan, reservable).limit, RESERVABLE: reservable.name })) return false diff --git a/app/services/availabilities/availabilities_service.rb b/app/services/availabilities/availabilities_service.rb index 3f21c2d17..093c37337 100644 --- a/app/services/availabilities/availabilities_service.rb +++ b/app/services/availabilities/availabilities_service.rb @@ -119,7 +119,7 @@ class Availabilities::AvailabilitiesService end # @param availabilities [ActiveRecord::Relation] - # @param type [String] + # @param type [String] 'training', 'space', 'machines' or 'event' # @param user [User] # @param range_start [ActiveSupport::TimeWithZone] # @param range_end [ActiveSupport::TimeWithZone] diff --git a/app/services/availabilities/visibility_service.rb b/app/services/availabilities/visibility_service.rb index f5e953986..ef15901e0 100644 --- a/app/services/availabilities/visibility_service.rb +++ b/app/services/availabilities/visibility_service.rb @@ -11,7 +11,7 @@ class Availabilities::VisibilityService end # @param user [User,NilClass] - # @param available_type [String] 'training', 'space', 'machine' or 'event' + # @param available_type [String] 'training', 'space', 'machines' or 'event' # @param range_start [ActiveSupport::TimeWithZone] # @param range_end [ActiveSupport::TimeWithZone] # @return [Array] as: [start,end] @@ -44,7 +44,7 @@ class Availabilities::VisibilityService # @return [Time,NilClass] def subscription_visibility(user, available_type) return nil unless user&.subscribed_plan - return nil unless available_type == 'machine' + return nil unless available_type == 'machines' machines = user&.subscribed_plan&.machines_visibility machines&.hours&.since diff --git a/config/locales/app.admin.de.yml b/config/locales/app.admin.de.yml index 6cd621a7f..fd8c77906 100644 --- a/config/locales/app.admin.de.yml +++ b/config/locales/app.admin.de.yml @@ -194,6 +194,7 @@ de: slots_visibility: "Slots visibility" slots_visibility_help: "You can determine how far in advance subscribers can view and reserve machine slots. When this setting is set, it takes precedence over the general settings." machines_visibility: "Visibility time limit, in hours (machines)" + visibility_minimum: "Visibility cannot be less than 7 hours" save: "Save" create_success: "Plan(s) successfully created. Don't forget to redefine prices." update_success: "The plan was updated successfully" diff --git a/config/locales/app.admin.en.yml b/config/locales/app.admin.en.yml index 6eea26de2..134b94549 100644 --- a/config/locales/app.admin.en.yml +++ b/config/locales/app.admin.en.yml @@ -194,6 +194,7 @@ en: slots_visibility: "Slots visibility" slots_visibility_help: "You can determine how far in advance subscribers can view and reserve machine slots. When this setting is set, it takes precedence over the general settings." machines_visibility: "Visibility time limit, in hours (machines)" + visibility_minimum: "Visibility cannot be less than 7 hours" save: "Save" create_success: "Plan(s) successfully created. Don't forget to redefine prices." update_success: "The plan was updated successfully" diff --git a/config/locales/app.admin.es.yml b/config/locales/app.admin.es.yml index f77d12f35..b738d7aaa 100644 --- a/config/locales/app.admin.es.yml +++ b/config/locales/app.admin.es.yml @@ -194,6 +194,7 @@ es: slots_visibility: "Slots visibility" slots_visibility_help: "You can determine how far in advance subscribers can view and reserve machine slots. When this setting is set, it takes precedence over the general settings." machines_visibility: "Visibility time limit, in hours (machines)" + visibility_minimum: "Visibility cannot be less than 7 hours" save: "Save" create_success: "Plan(s) successfully created. Don't forget to redefine prices." update_success: "The plan was updated successfully" diff --git a/config/locales/app.admin.fr.yml b/config/locales/app.admin.fr.yml index 335c91335..a541806a4 100644 --- a/config/locales/app.admin.fr.yml +++ b/config/locales/app.admin.fr.yml @@ -194,6 +194,7 @@ fr: slots_visibility: "Visibilité des créneaux" slots_visibility_help: "Vous pouvez déterminer combien de temps en avance les abonnés peuvent voir et réserver les créneaux machines. Lorsque ce paramètre est défini, il devient prioritaire sur les paramètres généraux." machines_visibility: "Délai de visibilité, en heures (machines)" + visibility_minimum: "La visibilité ne peut pas être inférieure à 7 heures" save: "Enregistrer" create_success: "Création du/des formule(s) d'abonnement réussie(s). N'oubliez pas de redéfinir les tarifs." update_success: "La formule d'abonnement a bien été mise à jour" diff --git a/config/locales/app.admin.no.yml b/config/locales/app.admin.no.yml index 5eac37840..89f491ec3 100644 --- a/config/locales/app.admin.no.yml +++ b/config/locales/app.admin.no.yml @@ -194,6 +194,7 @@ slots_visibility: "Slots visibility" slots_visibility_help: "You can determine how far in advance subscribers can view and reserve machine slots. When this setting is set, it takes precedence over the general settings." machines_visibility: "Visibility time limit, in hours (machines)" + visibility_minimum: "Visibility cannot be less than 7 hours" save: "Save" create_success: "Plan(s) successfully created. Don't forget to redefine prices." update_success: "The plan was updated successfully" diff --git a/config/locales/app.admin.pt.yml b/config/locales/app.admin.pt.yml index f3ceb1d62..71bcc156b 100644 --- a/config/locales/app.admin.pt.yml +++ b/config/locales/app.admin.pt.yml @@ -194,6 +194,7 @@ pt: slots_visibility: "Slots visibility" slots_visibility_help: "You can determine how far in advance subscribers can view and reserve machine slots. When this setting is set, it takes precedence over the general settings." machines_visibility: "Visibility time limit, in hours (machines)" + visibility_minimum: "Visibility cannot be less than 7 hours" save: "Save" create_success: "Plan(s) successfully created. Don't forget to redefine prices." update_success: "The plan was updated successfully" diff --git a/config/locales/app.admin.zu.yml b/config/locales/app.admin.zu.yml index 75fb54e28..710aad67a 100644 --- a/config/locales/app.admin.zu.yml +++ b/config/locales/app.admin.zu.yml @@ -194,6 +194,7 @@ zu: slots_visibility: "crwdns37491:0crwdne37491:0" slots_visibility_help: "crwdns37493:0crwdne37493:0" machines_visibility: "crwdns37495:0crwdne37495:0" + visibility_minimum: "crwdns37589:0crwdne37589:0" save: "crwdns37411:0crwdne37411:0" create_success: "crwdns31957:0crwdne31957:0" update_success: "crwdns31959:0crwdne31959:0" diff --git a/config/locales/de.yml b/config/locales/de.yml index c5fc2ebb7..b3f2de629 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -521,7 +521,7 @@ de: availability: "The availaility doesn't exist" full: "The slot is already fully reserved" deadline: "You can't reserve a slot %{MINUTES} minutes prior to its start" - limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription" + limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription. Please adjust your reservation." restricted: "This availability is restricted for subscribers" plan: "This subscription plan is disabled" plan_group: "This subscription plan is reserved for members of group %{GROUP}" diff --git a/config/locales/devise.pt.yml b/config/locales/devise.pt.yml old mode 100755 new mode 100644 diff --git a/config/locales/devise.zu.yml b/config/locales/devise.zu.yml index 805d9dc73..51e859cd4 100644 --- a/config/locales/devise.zu.yml +++ b/config/locales/devise.zu.yml @@ -2,62 +2,62 @@ zu: devise: confirmations: - confirmed: "crwdns3771:0crwdne3771:0" - send_instructions: "crwdns3773:0crwdne3773:0" - send_paranoid_instructions: "crwdns3775:0crwdne3775:0" + confirmed: "crwdns37497:0crwdne37497:0" + send_instructions: "crwdns37499:0crwdne37499:0" + send_paranoid_instructions: "crwdns37501:0crwdne37501:0" failure: - already_authenticated: "crwdns3777:0crwdne3777:0" - inactive: "crwdns3779:0crwdne3779:0" - invalid: "crwdns3781:0crwdne3781:0" - locked: "crwdns3783:0crwdne3783:0" - last_attempt: "crwdns3785:0crwdne3785:0" - not_found_in_database: "crwdns3787:0crwdne3787:0" - timeout: "crwdns3789:0crwdne3789:0" - unauthenticated: "crwdns3791:0crwdne3791:0" - unconfirmed: "crwdns19573:0crwdne19573:0" + already_authenticated: "crwdns37503:0crwdne37503:0" + inactive: "crwdns37505:0crwdne37505:0" + invalid: "crwdns37507:0crwdne37507:0" + locked: "crwdns37509:0crwdne37509:0" + last_attempt: "crwdns37511:0crwdne37511:0" + not_found_in_database: "crwdns37513:0crwdne37513:0" + timeout: "crwdns37515:0crwdne37515:0" + unauthenticated: "crwdns37517:0crwdne37517:0" + unconfirmed: "crwdns37519:0crwdne37519:0" mailer: confirmation_instructions: - action: "crwdns20182:0crwdne20182:0" - instruction: "crwdns20184:0crwdne20184:0" - subject: "crwdns3799:0crwdne3799:0" + action: "crwdns37521:0crwdne37521:0" + instruction: "crwdns37523:0crwdne37523:0" + subject: "crwdns37525:0crwdne37525:0" reset_password_instructions: - action: "crwdns20186:0crwdne20186:0" - instruction: "crwdns20188:0crwdne20188:0" - ignore_otherwise: "crwdns20190:0crwdne20190:0" - subject: "crwdns3807:0crwdne3807:0" + action: "crwdns37527:0crwdne37527:0" + instruction: "crwdns37529:0crwdne37529:0" + ignore_otherwise: "crwdns37531:0crwdne37531:0" + subject: "crwdns37533:0crwdne37533:0" unlock_instructions: - subject: "crwdns3809:0crwdne3809:0" + subject: "crwdns37535:0crwdne37535:0" omniauth_callbacks: - failure: "crwdns3811:0%{kind}crwdnd3811:0%{reason}crwdne3811:0" - success: "crwdns3813:0%{kind}crwdne3813:0" + failure: "crwdns37537:0%{kind}crwdnd37537:0%{reason}crwdne37537:0" + success: "crwdns37539:0%{kind}crwdne37539:0" passwords: - no_token: "crwdns3815:0crwdne3815:0" - send_instructions: "crwdns3817:0crwdne3817:0" - send_paranoid_instructions: "crwdns3819:0crwdne3819:0" - updated: "crwdns3821:0crwdne3821:0" - updated_not_active: "crwdns3823:0crwdne3823:0" + no_token: "crwdns37541:0crwdne37541:0" + send_instructions: "crwdns37543:0crwdne37543:0" + send_paranoid_instructions: "crwdns37545:0crwdne37545:0" + updated: "crwdns37547:0crwdne37547:0" + updated_not_active: "crwdns37549:0crwdne37549:0" registrations: - destroyed: "crwdns3825:0crwdne3825:0" - signed_up: "crwdns3827:0crwdne3827:0" - signed_up_but_inactive: "crwdns3829:0crwdne3829:0" - signed_up_but_locked: "crwdns3831:0crwdne3831:0" - signed_up_but_unconfirmed: "crwdns3833:0crwdne3833:0" - update_needs_confirmation: "crwdns3835:0crwdne3835:0" - updated: "crwdns3837:0crwdne3837:0" + destroyed: "crwdns37551:0crwdne37551:0" + signed_up: "crwdns37553:0crwdne37553:0" + signed_up_but_inactive: "crwdns37555:0crwdne37555:0" + signed_up_but_locked: "crwdns37557:0crwdne37557:0" + signed_up_but_unconfirmed: "crwdns37559:0crwdne37559:0" + update_needs_confirmation: "crwdns37561:0crwdne37561:0" + updated: "crwdns37563:0crwdne37563:0" sessions: - signed_in: "crwdns3839:0crwdne3839:0" - signed_out: "crwdns3841:0crwdne3841:0" + signed_in: "crwdns37565:0crwdne37565:0" + signed_out: "crwdns37567:0crwdne37567:0" unlocks: - send_instructions: "crwdns3843:0crwdne3843:0" - send_paranoid_instructions: "crwdns3845:0crwdne3845:0" - unlocked: "crwdns3847:0crwdne3847:0" + send_instructions: "crwdns37569:0crwdne37569:0" + send_paranoid_instructions: "crwdns37571:0crwdne37571:0" + unlocked: "crwdns37573:0crwdne37573:0" errors: messages: - already_confirmed: "crwdns19575:0crwdne19575:0" - confirmation_period_expired: "crwdns3851:0%{period}crwdne3851:0" - expired: "crwdns3853:0crwdne3853:0" - not_found: "crwdns19577:0crwdne19577:0" - not_locked: "crwdns3857:0crwdne3857:0" + already_confirmed: "crwdns37575:0crwdne37575:0" + confirmation_period_expired: "crwdns37577:0%{period}crwdne37577:0" + expired: "crwdns37579:0crwdne37579:0" + not_found: "crwdns37581:0crwdne37581:0" + not_locked: "crwdns37583:0crwdne37583:0" not_saved: - one: "crwdns3859:1%{resource}crwdne3859:1" - other: "crwdns3859:5%{count}crwdnd3859:5%{resource}crwdne3859:5" + one: "crwdns37585:1%{resource}crwdne37585:1" + other: "crwdns37585:5%{count}crwdnd37585:5%{resource}crwdne37585:5" diff --git a/config/locales/en.yml b/config/locales/en.yml index 7efcadac9..0ed2ff13f 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -521,7 +521,7 @@ en: availability: "The availaility doesn't exist" full: "The slot is already fully reserved" deadline: "You can't reserve a slot %{MINUTES} minutes prior to its start" - limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription" + limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription. Please adjust your reservation." restricted: "This availability is restricted for subscribers" plan: "This subscription plan is disabled" plan_group: "This subscription plan is reserved for members of group %{GROUP}" diff --git a/config/locales/es.yml b/config/locales/es.yml index 5814ffea2..6998d5048 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -521,7 +521,7 @@ es: availability: "The availaility doesn't exist" full: "The slot is already fully reserved" deadline: "You can't reserve a slot %{MINUTES} minutes prior to its start" - limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription" + limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription. Please adjust your reservation." restricted: "This availability is restricted for subscribers" plan: "This subscription plan is disabled" plan_group: "This subscription plan is reserved for members of group %{GROUP}" diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 268f297da..3f34fa9da 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -521,7 +521,7 @@ fr: availability: "La disponibilité n'existe pas" full: "Le créneau est déjà entièrement réservé" deadline: "Vous ne pouvez pas réserver un créneau %{MINUTES} minutes avant son début" - limit_reached: "Vous avez atteint la limite de réservation de %{HOURS}H par jour pour la %{RESERVABLE}, pour votre abonnement actuel" + limit_reached: "Vous avez atteint la limite de réservation de %{HOURS}H par jour pour la %{RESERVABLE}, pour votre abonnement actuel. Merci d'ajuster votre réservation." restricted: "Cette disponibilité n'est disponible que pour les abonnés" plan: "Cette formule d'abonnement est désactivé" plan_group: "Cette formule d'abonnement est réservée aux membres du groupe %{GROUP}" diff --git a/config/locales/no.yml b/config/locales/no.yml index 88c958a75..990c70005 100644 --- a/config/locales/no.yml +++ b/config/locales/no.yml @@ -521,7 +521,7 @@ availability: "The availaility doesn't exist" full: "The slot is already fully reserved" deadline: "You can't reserve a slot %{MINUTES} minutes prior to its start" - limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription" + limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription. Please adjust your reservation." restricted: "This availability is restricted for subscribers" plan: "This subscription plan is disabled" plan_group: "This subscription plan is reserved for members of group %{GROUP}" diff --git a/config/locales/pt.yml b/config/locales/pt.yml index a191da464..8586f8c2c 100644 --- a/config/locales/pt.yml +++ b/config/locales/pt.yml @@ -521,7 +521,7 @@ pt: availability: "The availaility doesn't exist" full: "The slot is already fully reserved" deadline: "You can't reserve a slot %{MINUTES} minutes prior to its start" - limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription" + limit_reached: "You have reached the booking limit of %{HOURS}H per day for the %{RESERVABLE}, for your current subscription. Please adjust your reservation." restricted: "This availability is restricted for subscribers" plan: "This subscription plan is disabled" plan_group: "This subscription plan is reserved for members of group %{GROUP}" diff --git a/config/locales/zu.yml b/config/locales/zu.yml index d85098d04..760884db6 100644 --- a/config/locales/zu.yml +++ b/config/locales/zu.yml @@ -521,7 +521,7 @@ zu: availability: "crwdns36269:0crwdne36269:0" full: "crwdns36271:0crwdne36271:0" deadline: "crwdns36273:0%{MINUTES}crwdne36273:0" - limit_reached: "crwdns37475:0%{HOURS}crwdnd37475:0%{RESERVABLE}crwdne37475:0" + limit_reached: "crwdns37587:0%{HOURS}crwdnd37587:0%{RESERVABLE}crwdne37587:0" restricted: "crwdns36275:0crwdne36275:0" plan: "crwdns36277:0crwdne36277:0" plan_group: "crwdns37207:0%{GROUP}crwdne37207:0" diff --git a/test/services/availabilities/visibility_service_test.rb b/test/services/availabilities/visibility_service_test.rb index 631d9c0d1..b461ed38f 100644 --- a/test/services/availabilities/visibility_service_test.rb +++ b/test/services/availabilities/visibility_service_test.rb @@ -123,7 +123,7 @@ class Availabilities::VisibilityServiceTest < ActiveSupport::TestCase plan.update(machines_visibility: 48) starting = Time.current.beginning_of_day ending = 1.month.from_now.end_of_day - window = Availabilities::VisibilityService.new.visibility(@with_subscription, 'machine', starting, ending) + window = Availabilities::VisibilityService.new.visibility(@with_subscription, 'machines', starting, ending) assert_datetimes_equal Time.current, window[0] assert_datetimes_equal 48.hours.from_now, window[1] end