From b0a6c17d7e8222e830ee7837fa1cf7f581aecf22 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 14 Aug 2024 12:15:13 +0200 Subject: [PATCH 1/8] Initial implement --- src/redturtle/prenotazioni/adapters/booker.py | 5 ++++- .../browser/prenotazioni_context_state.py | 6 ++++++ .../prenotazioni/content/prenotazioni_folder.py | 12 ++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/redturtle/prenotazioni/adapters/booker.py b/src/redturtle/prenotazioni/adapters/booker.py index 90542a57..4cced620 100644 --- a/src/redturtle/prenotazioni/adapters/booker.py +++ b/src/redturtle/prenotazioni/adapters/booker.py @@ -146,7 +146,10 @@ def check_future_days(self, booking, data): Managers bypass this check """ future_days = booking.getFutureDays() - if future_days and not self.prenotazioni.user_can_manage_prenotazioni: + if future_days and not ( + self.prenotazioni.user_can_manage_prenotazioni + and not self.prenotazioni.bookins_manager_is_restricted_by_dates + ): if exceedes_date_limit(data, future_days): msg = _("Sorry, you can not book this slot for now.") raise BookerException(api.portal.translate(msg)) diff --git a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py index 09782db0..cf33035a 100644 --- a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py +++ b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py @@ -93,6 +93,12 @@ def user_can_manage_prenotazioni(self): "redturtle.prenotazioni: Manage Prenotazioni", obj=self.context ) + @property + @memoize + def bookins_manager_is_restricted_by_dates(self): + """Bookings manager is restricted by dates as an usual user""" + return self.context.apply_date_restrictions_to_manager + @property @memoize def booker(self): diff --git a/src/redturtle/prenotazioni/content/prenotazioni_folder.py b/src/redturtle/prenotazioni/content/prenotazioni_folder.py index def41f69..d04d2c59 100644 --- a/src/redturtle/prenotazioni/content/prenotazioni_folder.py +++ b/src/redturtle/prenotazioni/content/prenotazioni_folder.py @@ -212,6 +212,17 @@ class IPrenotazioniFolder(model.Schema): required=False, ) + apply_date_restrictions_to_manager = schema.Bool( + title=_( + "Apply restrictions to Bookings Manager", + ), + description=_( + "If selected, Bookings Manager will be restricted by selected dates as an usual user." + ), + required=False, + default=False, + ) + def get_options(): """Return the options for this widget""" options = [ @@ -512,6 +523,7 @@ def data_validation(data): "holidays", "futureDays", "notBeforeDays", + "apply_date_restrictions_to_manager", ], ) From b000867a516e97297a57ce822f3e3ca527ed62ff Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 14 Aug 2024 14:50:45 +0200 Subject: [PATCH 2/8] Add dates validation --- src/redturtle/prenotazioni/adapters/booker.py | 24 +++++++++++++------ .../browser/prenotazioni_context_state.py | 20 +++++++++++++++- .../prenotazioni/utilities/dateutils.py | 19 --------------- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/redturtle/prenotazioni/adapters/booker.py b/src/redturtle/prenotazioni/adapters/booker.py index 4cced620..a0f8c375 100644 --- a/src/redturtle/prenotazioni/adapters/booker.py +++ b/src/redturtle/prenotazioni/adapters/booker.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- import math -from datetime import timedelta +from datetime import timedelta, datetime from random import choice from DateTime import DateTime @@ -140,17 +140,27 @@ def get_available_gate(self, booking_date, booking_expiration_date=None): # less_used_gates = free_time_map[max_free_time] # return choice(less_used_gates) - def check_future_days(self, booking, data): + def check_date_validity(self, booking, data): """ Check if date is in the right range. Managers bypass this check """ future_days = booking.getFutureDays() - if future_days and not ( + + booking_date = data.get("booking_date", None) + + if not isinstance(booking_date, datetime): + return False + + bypass_user_restrictions = ( self.prenotazioni.user_can_manage_prenotazioni and not self.prenotazioni.bookins_manager_is_restricted_by_dates - ): - if exceedes_date_limit(data, future_days): + ) + + if future_days and not self.prenotazioni.user_can_manage_prenotazioni: + if not self.prenotazioni.is_valid_day( + booking_date, bypass_user_restrictions=bypass_user_restrictions + ): msg = _("Sorry, you can not book this slot for now.") raise BookerException(api.portal.translate(msg)) @@ -295,7 +305,7 @@ def book(self, data, force_gate=None, duration=-1): """ data["booking_date"] = datetime_with_tz(data["booking_date"]) - self.check_future_days(booking=self.context, data=data) + self.check_date_validity(booking=self.context, data=data) conflict_manager = self.prenotazioni.conflict_manager if conflict_manager.conflicts(data, force_gate=force_gate): @@ -347,7 +357,7 @@ def move(self, booking, data): ) raise BookerException(api.portal.translate(msg)) - self.check_future_days(booking=booking, data=data) + self.check_date_validity(booking=booking, data=data) # move the booking duration = booking.getDuration() diff --git a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py index cf33035a..493b1a27 100644 --- a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py +++ b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py @@ -155,6 +155,11 @@ def last_bookable_day(self): return return adata + @property + @memoize + def future_days_limit(self): + return self.context.getFutureDays() + @memoize def is_vacation_day(self, date): """ @@ -296,12 +301,25 @@ def is_valid_day(self, day, bypass_user_restrictions=False): return False if self.is_vacation_day(day): return False - if self.last_bookable_day and day > self.last_bookable_day: + if ( + self.last_bookable_day and day > self.last_bookable_day + ) or not bypass_user_restrictions: return False if self.is_before_allowed_period( day, bypass_user_restrictions=bypass_user_restrictions ): return False + + date_limit = tznow() + timedelta(self.future_days_limit) + + if not day.tzinfo: + tzinfo = date_limit.tzinfo + if tzinfo: + day = tzinfo.localize(day) + + if day <= date_limit or not bypass_user_restrictions: + return False + return self.is_configured_day(day) @property diff --git a/src/redturtle/prenotazioni/utilities/dateutils.py b/src/redturtle/prenotazioni/utilities/dateutils.py index bbb73e45..1c55613f 100644 --- a/src/redturtle/prenotazioni/utilities/dateutils.py +++ b/src/redturtle/prenotazioni/utilities/dateutils.py @@ -73,22 +73,3 @@ def hm2seconds(hm): return None h, m = hm2handm(hm) return int(h) * 3600 + int(m) * 60 - - -def exceedes_date_limit(data, future_days): - """ - Check if the booking date exceedes the date limit - """ - if not future_days: - return False - booking_date = data.get("booking_date", None) - if not isinstance(booking_date, datetime): - return False - date_limit = tznow() + timedelta(future_days) - if not booking_date.tzinfo: - tzinfo = date_limit.tzinfo - if tzinfo: - booking_date = tzinfo.localize(booking_date) - if booking_date <= date_limit: - return False - return True From 9b4df26f8936ff6b22d7a5175800cc9cdfc1c369 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 14 Aug 2024 17:03:37 +0200 Subject: [PATCH 3/8] Intermediate commit --- src/redturtle/prenotazioni/adapters/booker.py | 1 - .../browser/prenotazioni_context_state.py | 31 +++++++++++++------ .../tests/test_prenotazioni_search.py | 1 + .../prenotazioni/utilities/dateutils.py | 19 ++++++++++++ 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/redturtle/prenotazioni/adapters/booker.py b/src/redturtle/prenotazioni/adapters/booker.py index a0f8c375..dfbb08f9 100644 --- a/src/redturtle/prenotazioni/adapters/booker.py +++ b/src/redturtle/prenotazioni/adapters/booker.py @@ -30,7 +30,6 @@ from redturtle.prenotazioni.interfaces import IBookingEmailMessage from redturtle.prenotazioni.interfaces import IBookingNotificationSender from redturtle.prenotazioni.prenotazione_event import MovedPrenotazione -from redturtle.prenotazioni.utilities.dateutils import exceedes_date_limit class IBooker(Interface): diff --git a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py index 493b1a27..eff83f70 100644 --- a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py +++ b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py @@ -297,30 +297,41 @@ def is_before_allowed_period(self, day, bypass_user_restrictions=False): @memoize def is_valid_day(self, day, bypass_user_restrictions=False): """Returns True if the day is valid""" + + if isinstance(day, datetime): + day = day.date() + + is_configured_day = self.is_configured_day(day) + + if ( + is_configured_day + and self.user_can_manage_prenotazioni + and not self.bookins_manager_is_restricted_by_dates + ): + return True + if day < self.first_bookable_day: return False + if self.is_vacation_day(day): return False - if ( + + if not bypass_user_restrictions and ( self.last_bookable_day and day > self.last_bookable_day - ) or not bypass_user_restrictions: + ): return False + if self.is_before_allowed_period( day, bypass_user_restrictions=bypass_user_restrictions ): return False - date_limit = tznow() + timedelta(self.future_days_limit) - - if not day.tzinfo: - tzinfo = date_limit.tzinfo - if tzinfo: - day = tzinfo.localize(day) + date_limit = date.today() + timedelta(days=self.future_days_limit) - if day <= date_limit or not bypass_user_restrictions: + if day >= date_limit and not bypass_user_restrictions: return False - return self.is_configured_day(day) + return is_configured_day @property @memoize diff --git a/src/redturtle/prenotazioni/tests/test_prenotazioni_search.py b/src/redturtle/prenotazioni/tests/test_prenotazioni_search.py index 2838c9a3..c62cef9b 100644 --- a/src/redturtle/prenotazioni/tests/test_prenotazioni_search.py +++ b/src/redturtle/prenotazioni/tests/test_prenotazioni_search.py @@ -618,6 +618,7 @@ def test_search_own_bookings(self): res = self.anon_session.get( f"{self.folder_prenotazioni.absolute_url()}/@available-slots" ) + booking_date = res.json()["items"][0] # anonymous user 1 res = self.add_booking( diff --git a/src/redturtle/prenotazioni/utilities/dateutils.py b/src/redturtle/prenotazioni/utilities/dateutils.py index 1c55613f..bbb73e45 100644 --- a/src/redturtle/prenotazioni/utilities/dateutils.py +++ b/src/redturtle/prenotazioni/utilities/dateutils.py @@ -73,3 +73,22 @@ def hm2seconds(hm): return None h, m = hm2handm(hm) return int(h) * 3600 + int(m) * 60 + + +def exceedes_date_limit(data, future_days): + """ + Check if the booking date exceedes the date limit + """ + if not future_days: + return False + booking_date = data.get("booking_date", None) + if not isinstance(booking_date, datetime): + return False + date_limit = tznow() + timedelta(future_days) + if not booking_date.tzinfo: + tzinfo = date_limit.tzinfo + if tzinfo: + booking_date = tzinfo.localize(booking_date) + if booking_date <= date_limit: + return False + return True From 526071a4f5bdbe1751a7b215f1b444dda2a73d1c Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 14 Aug 2024 17:28:14 +0200 Subject: [PATCH 4/8] Intermediate commit --- .../prenotazioni/browser/prenotazioni_context_state.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py index eff83f70..de3d75ae 100644 --- a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py +++ b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py @@ -326,10 +326,11 @@ def is_valid_day(self, day, bypass_user_restrictions=False): ): return False - date_limit = date.today() + timedelta(days=self.future_days_limit) + if self.future_days_limit: + date_limit = date.today() + timedelta(days=self.future_days_limit) - if day >= date_limit and not bypass_user_restrictions: - return False + if day >= date_limit and not bypass_user_restrictions: + return False return is_configured_day From 8e90e17dc9afc3effc28962c8be53006e72b6ab7 Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 19 Aug 2024 12:23:13 +0200 Subject: [PATCH 5/8] * Fix tests \n * Changelog \n * Translations --- CHANGES.rst | 8 +- src/redturtle/prenotazioni/adapters/booker.py | 16 ++- .../content/prenotazioni_folder.py | 2 +- .../en/LC_MESSAGES/redturtle.prenotazioni.po | 114 ++++++++++-------- .../it/LC_MESSAGES/redturtle.prenotazioni.po | 114 ++++++++++-------- .../locales/redturtle.prenotazioni.pot | 114 ++++++++++-------- .../prenotazioni/tests/test_add_booking.py | 67 ++++++++++ .../tests/test_pauses_overrides.py | 7 +- 8 files changed, 270 insertions(+), 172 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index fad186f6..74c969a5 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -5,7 +5,11 @@ Changelog 2.7.7 (unreleased) ------------------ -- Nothing changed yet. +- Apply validity dates restrictions for the Bookings Manger if selected flag 'apply_date_restrictions_to_manager'. + [folix-01] + +- Fixed missing validity dates check during the booking creation. + [folix-01] 2.7.6 (2024-06-27) @@ -35,7 +39,7 @@ Changelog 2.7.3 (2024-06-14) ------------------ -- With an experimental envionment `SEE_OWN_ANONYMOUS_BOOKINGS` set to `True`, the endpoint will return +- With an experimental envionment `SEE_OWN_ANONYMOUS_BOOKINGS` set to `True`, the endpoint will return also the bookings created by anonymous users with the same fiscalcode of the authenticated user. [mamico] diff --git a/src/redturtle/prenotazioni/adapters/booker.py b/src/redturtle/prenotazioni/adapters/booker.py index dfbb08f9..95307c4d 100644 --- a/src/redturtle/prenotazioni/adapters/booker.py +++ b/src/redturtle/prenotazioni/adapters/booker.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import math -from datetime import timedelta, datetime +from datetime import datetime +from datetime import timedelta from random import choice from DateTime import DateTime @@ -144,8 +145,6 @@ def check_date_validity(self, booking, data): Check if date is in the right range. Managers bypass this check """ - future_days = booking.getFutureDays() - booking_date = data.get("booking_date", None) if not isinstance(booking_date, datetime): @@ -156,12 +155,11 @@ def check_date_validity(self, booking, data): and not self.prenotazioni.bookins_manager_is_restricted_by_dates ) - if future_days and not self.prenotazioni.user_can_manage_prenotazioni: - if not self.prenotazioni.is_valid_day( - booking_date, bypass_user_restrictions=bypass_user_restrictions - ): - msg = _("Sorry, you can not book this slot for now.") - raise BookerException(api.portal.translate(msg)) + if not self.prenotazioni.is_valid_day( + booking_date, bypass_user_restrictions=bypass_user_restrictions + ): + msg = _("Sorry, you can not book this slot for now.") + raise BookerException(api.portal.translate(msg)) def generate_params(self, data, force_gate, duration): # remove empty fields diff --git a/src/redturtle/prenotazioni/content/prenotazioni_folder.py b/src/redturtle/prenotazioni/content/prenotazioni_folder.py index d04d2c59..4502d1ff 100644 --- a/src/redturtle/prenotazioni/content/prenotazioni_folder.py +++ b/src/redturtle/prenotazioni/content/prenotazioni_folder.py @@ -374,7 +374,7 @@ def get_options(): ) notBeforeDays = schema.Int( - default=2, + default=0, title=_("Days booking is not allowed before"), description=_( "notBeforeDays", diff --git a/src/redturtle/prenotazioni/locales/en/LC_MESSAGES/redturtle.prenotazioni.po b/src/redturtle/prenotazioni/locales/en/LC_MESSAGES/redturtle.prenotazioni.po index aaf89786..e6c97ab2 100644 --- a/src/redturtle/prenotazioni/locales/en/LC_MESSAGES/redturtle.prenotazioni.po +++ b/src/redturtle/prenotazioni/locales/en/LC_MESSAGES/redturtle.prenotazioni.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-06-27 14:15+0000\n" +"POT-Creation-Date: 2024-08-19 10:07+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -31,11 +31,15 @@ msgstr "" msgid "Add" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:433 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:444 #: redturtle/prenotazioni/content/validators.py:222 msgid "Afternoon start should not be greater than end." msgstr "" +#: redturtle/prenotazioni/content/prenotazioni_folder.py:216 +msgid "Apply restrictions to Bookings Manager" +msgstr "" + #: redturtle/prenotazioni/browser/templates/prenotazione.pt:29 msgid "Attention" msgstr "" @@ -130,11 +134,11 @@ msgstr "" msgid "Data inizio validità" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:507 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:518 msgid "Date validità" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:367 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:378 msgid "Days booking is not allowed before" msgstr "" @@ -182,6 +186,10 @@ msgstr "" msgid "How to get here" msgstr "" +#: redturtle/prenotazioni/content/prenotazioni_folder.py:219 +msgid "If selected, Bookings Manager will be restricted by selected dates as an usual user." +msgstr "" + #: redturtle/prenotazioni/content/validators.py:93 msgid "In the same day there are overlapping intervals" msgstr "" @@ -194,7 +202,7 @@ msgstr "" msgid "Inserire il testo di presentazione dell'agenda corrente" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:405 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:416 msgid "Insert a list of email addresses that will be notified when new bookings get created." msgstr "" @@ -222,11 +230,11 @@ msgstr "" msgid "Insert here the contact phone" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:317 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:328 msgid "Insert pause table schema." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:240 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:251 msgid "Insert week table schema." msgstr "" @@ -238,7 +246,7 @@ msgstr "" msgid "Installs the redturtle.prenotazioni.demo add-on (demo site purpose only)." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:355 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:366 msgid "Max days in the future" msgstr "" @@ -246,7 +254,7 @@ msgstr "" msgid "Monday" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:430 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:441 #: redturtle/prenotazioni/content/validators.py:217 msgid "Morning start should not be greater than end." msgstr "" @@ -265,7 +273,7 @@ msgstr "" msgid "Nessuno slot creato, verificare la corretteza dei dati inseriti" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:219 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:230 msgid "No" msgstr "" @@ -297,7 +305,7 @@ msgstr "" msgid "Pause should be included in morning slot or afternoon slot" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:316 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:327 msgid "Pause table" msgstr "" @@ -333,7 +341,7 @@ msgstr "" msgid "Required input is missing." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:404 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:415 msgid "Responsible email" msgstr "" @@ -349,16 +357,16 @@ msgstr "" msgid "Select a day" msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:299 +#: redturtle/prenotazioni/adapters/booker.py:310 #: redturtle/prenotazioni/restapi/services/booking/add.py:63 msgid "Sorry, this slot is not available anymore." msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:342 +#: redturtle/prenotazioni/adapters/booker.py:353 msgid "Sorry, this slot is not available or does not fit your booking." msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:151 +#: redturtle/prenotazioni/adapters/booker.py:162 msgid "Sorry, you can not book this slot for now." msgstr "" @@ -454,11 +462,11 @@ msgstr "" msgid "The phone number of the user who made the reservation." msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:391 +#: redturtle/prenotazioni/adapters/booker.py:402 msgid "This day is not valid." msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:386 +#: redturtle/prenotazioni/adapters/booker.py:397 msgid "This gate has some booking schedule in this time period." msgstr "" @@ -496,11 +504,11 @@ msgstr "" msgid "Wednesday" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:239 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:250 msgid "Week table" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:218 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:229 msgid "Yes" msgstr "" @@ -512,22 +520,22 @@ msgstr "" msgid "You must set both start and end" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:427 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:438 #: redturtle/prenotazioni/content/validators.py:212 msgid "You should set a start time for afternoon." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:423 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:434 #: redturtle/prenotazioni/content/validators.py:204 msgid "You should set a start time for morning." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:425 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:436 #: redturtle/prenotazioni/content/validators.py:208 msgid "You should set an end time for afternoon." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:421 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:432 #: redturtle/prenotazioni/content/validators.py:200 msgid "You should set an end time for morning." msgstr "" @@ -580,22 +588,22 @@ msgid "all" msgstr "" #. Default: "Automatically confirm." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:385 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:396 msgid "auto_confirm" msgstr "" #. Default: "All bookings will be automatically accepted." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:386 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:397 msgid "auto_confirm_help" msgstr "" #. Default: "Automatically confirmfor managers." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:394 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:405 msgid "auto_confirm_manager" msgstr "" #. Default: "All bookings created by Managers will be automatically accepted." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:395 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:406 msgid "auto_confirm_manager_help" msgstr "" @@ -640,7 +648,7 @@ msgid "booking_deleted_success" msgstr "" #. Default: "Booking fields" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:536 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:548 msgid "booking_fields_label" msgstr "" @@ -935,17 +943,17 @@ msgid "fullname" msgstr "" #. Default: "Limit booking in the future to an amount of days in the future starting from the current day. \nKeep 0 to give no limits." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:356 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:367 msgid "futureDays" msgstr "" #. Default: "Put gates here (one per line)." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:378 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:389 msgid "gates_help" msgstr "" #. Default: "Gates" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:377 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:388 msgid "gates_label" msgstr "" @@ -959,7 +967,7 @@ msgid "help_required_booking_fields" msgstr "" #. Default: "States if it is not allowed to reserve a booking during the current day" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:229 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:240 msgid "help_same_day_booking_disallowed" msgstr "" @@ -1029,12 +1037,12 @@ msgid "history_sms_transition_sent" msgstr "" #. Default: "Set holidays (one for line) in DD/MM/YYYY. you can write * for the year, if this event is yearly." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:330 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:341 msgid "holidays_help" msgstr "" #. Default: "Holidays" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:329 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:340 msgid "holidays_label" msgstr "" @@ -1193,7 +1201,7 @@ msgid "label_required_booking_fields" msgstr "" #. Default: "Disallow same day booking" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:225 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:236 msgid "label_same_day_booking_disallowed" msgstr "" @@ -1255,12 +1263,12 @@ msgid "legend_note" msgstr "" #. Default: "The number of simultaneous bookings allowed for the same user." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:485 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:496 msgid "max_bookings_allowed_description" msgstr "" #. Default: "Maximum bookings number allowed" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:481 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:492 msgid "max_bookings_allowed_label" msgstr "" @@ -1310,7 +1318,7 @@ msgid "next-week" msgstr "" #. Default: "Booking is not allowed before the amount of days specified. \nKeep 0 to give no limits." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:368 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:379 msgid "notBeforeDays" msgstr "" @@ -1335,7 +1343,7 @@ msgid "notifications_email_enabled_label" msgstr "" #. Default: "Notifications" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:544 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:556 msgid "notifications_label" msgstr "" @@ -1405,7 +1413,7 @@ msgid "notify_as_reminder_subject_help" msgstr "" #. Default: "Notify when canceled." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:472 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:483 msgid "notify_on_cancel" msgstr "" @@ -1420,7 +1428,7 @@ msgid "notify_on_cancel_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been canceled." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:473 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:484 msgid "notify_on_cancel_help" msgstr "" @@ -1466,7 +1474,7 @@ msgid "notify_on_cancel_subject_help" msgstr "" #. Default: "Notify when confirmed." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:445 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:456 msgid "notify_on_confirm" msgstr "" @@ -1481,7 +1489,7 @@ msgid "notify_on_confirm_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been confirmed." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:446 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:457 msgid "notify_on_confirm_help" msgstr "" @@ -1527,7 +1535,7 @@ msgid "notify_on_confirm_subject_help" msgstr "" #. Default: "Notify when moved." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:454 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:465 msgid "notify_on_move" msgstr "" @@ -1542,7 +1550,7 @@ msgid "notify_on_move_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been moved." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:455 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:466 msgid "notify_on_move_help" msgstr "" @@ -1588,7 +1596,7 @@ msgid "notify_on_move_subject_help" msgstr "" #. Default: "Notify when rejected." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:463 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:474 msgid "notify_on_refuse" msgstr "" @@ -1603,7 +1611,7 @@ msgid "notify_on_refuse_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been rejected." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:464 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:475 msgid "notify_on_refuse_help" msgstr "" @@ -1649,7 +1657,7 @@ msgid "notify_on_refuse_subject_help" msgstr "" #. Default: "Notify when created." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:436 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:447 msgid "notify_on_submit" msgstr "" @@ -1664,7 +1672,7 @@ msgid "notify_on_submit_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been created. If auto-confirm flag is selected and confirm notify is selected, this one will be ignored." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:437 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:448 msgid "notify_on_submit_help" msgstr "" @@ -1791,12 +1799,12 @@ msgid "reject_booking" msgstr "" #. Default: "Set how many days before of a booking date the user will be notified about it." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:497 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:508 msgid "reminder_notification_gap_description" msgstr "" #. Default: "Booking reminder days" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:493 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:504 msgid "reminder_notification_gap_label" msgstr "" @@ -1905,12 +1913,12 @@ msgid "view_booking" msgstr "" #. Default: "Insert here week schema for some custom date intervals." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:307 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:318 msgid "week_table_overrides_help" msgstr "" #. Default: "Week table overrides" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:306 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:317 msgid "week_table_overrides_label" msgstr "" diff --git a/src/redturtle/prenotazioni/locales/it/LC_MESSAGES/redturtle.prenotazioni.po b/src/redturtle/prenotazioni/locales/it/LC_MESSAGES/redturtle.prenotazioni.po index e324b0a6..13bd74bf 100644 --- a/src/redturtle/prenotazioni/locales/it/LC_MESSAGES/redturtle.prenotazioni.po +++ b/src/redturtle/prenotazioni/locales/it/LC_MESSAGES/redturtle.prenotazioni.po @@ -1,7 +1,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" -"POT-Creation-Date: 2024-06-27 14:15+0000\n" +"POT-Creation-Date: 2024-08-19 10:07+0000\n" "PO-Revision-Date: 2014-05-27 17:36+0200\n" "Last-Translator: Alessandro Pisa \n" "Language-Team: American English \n" @@ -33,11 +33,15 @@ msgstr "Una cartella che conterrà le prenotazioni per questo day" msgid "Add" msgstr "Aggiungi" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:433 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:444 #: redturtle/prenotazioni/content/validators.py:222 msgid "Afternoon start should not be greater than end." msgstr "L'orario di inizio del pomeriggio non può essere successivo alla chiusura." +#: redturtle/prenotazioni/content/prenotazioni_folder.py:216 +msgid "Apply restrictions to Bookings Manager" +msgstr "Applica le restrizioni al Gestore Prenotazioni." + #: redturtle/prenotazioni/browser/templates/prenotazione.pt:29 msgid "Attention" msgstr "Attenzione!" @@ -132,11 +136,11 @@ msgstr "Data fine validità" msgid "Data inizio validità" msgstr "Data inizio validità" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:507 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:518 msgid "Date validità" msgstr "Date Validità" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:367 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:378 msgid "Days booking is not allowed before" msgstr "Giorni da cui si può effettuare una prenotazione" @@ -184,6 +188,10 @@ msgstr "Gruppo" msgid "How to get here" msgstr "Indicazioni su come raggiungere l'ufficio" +#: redturtle/prenotazioni/content/prenotazioni_folder.py:219 +msgid "If selected, Bookings Manager will be restricted by selected dates as an usual user." +msgstr "Se selezionato, il gestore prenotazioni sarà ristretto dalle date di validita della stanza." + #: redturtle/prenotazioni/content/validators.py:93 msgid "In the same day there are overlapping intervals" msgstr "Ci sono pause che si sovrappongono nello stesso giorno" @@ -196,7 +204,7 @@ msgstr "Informazioni relativa ad una singola prenotazione" msgid "Inserire il testo di presentazione dell'agenda corrente" msgstr "Inserire il testo di presentazione dell'agenda corrente" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:405 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:416 msgid "Insert a list of email addresses that will be notified when new bookings get created." msgstr "Inserisci una lista di indirizzi email che verranno notificati alla creazione di una nuova prenotazione." @@ -224,11 +232,11 @@ msgstr "Inserire il numero di FAX per per contattare l'ufficio" msgid "Insert here the contact phone" msgstr "Inserire il numero di telefono per contattare l'ufficio" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:317 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:328 msgid "Insert pause table schema." msgstr "Inserisci le pause giornaliere. Esistono tre tipi di vincolo: una data di termine pausa deve essere maggiore della data di inizio pausa; le pause nello stesso giorno non possono sovrapporsi; le pause devono essere comprese fra l'inizio e la fine dell'orario di lavoro." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:240 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:251 msgid "Insert week table schema." msgstr "Compila la tabella degli orari della settimana." @@ -240,7 +248,7 @@ msgstr "Install redturtle.prenotazioni" msgid "Installs the redturtle.prenotazioni.demo add-on (demo site purpose only)." msgstr "Installa il profilo redturtle.prenotazioni.demo." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:355 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:366 msgid "Max days in the future" msgstr "Massimi giorni nel futuro" @@ -248,7 +256,7 @@ msgstr "Massimi giorni nel futuro" msgid "Monday" msgstr "Lunedì" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:430 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:441 #: redturtle/prenotazioni/content/validators.py:217 msgid "Morning start should not be greater than end." msgstr "L'orario di inizio della mattina non può essere successivo alla fine." @@ -267,7 +275,7 @@ msgstr "Sposta in su" msgid "Nessuno slot creato, verificare la corretteza dei dati inseriti" msgstr "Nessuno slot creato, verificare la corretteza dei dati inseriti" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:219 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:230 msgid "No" msgstr "No" @@ -299,7 +307,7 @@ msgstr "Il termine della pausa non può avvenire prima del suo inizio" msgid "Pause should be included in morning slot or afternoon slot" msgstr "Le pause devono essere comprese tra l'orario di inizio o di termine dell'intervallo di orari di lavoro" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:316 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:327 msgid "Pause table" msgstr "Schedulazione delle pause" @@ -335,7 +343,7 @@ msgstr "Campo obbligatorio '${field}' mancante." msgid "Required input is missing." msgstr "Manca l'input obbligatorio." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:404 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:415 msgid "Responsible email" msgstr "Email del responsabile" @@ -351,16 +359,16 @@ msgstr "Parametri di ricerca" msgid "Select a day" msgstr "Seleziona un giorno" -#: redturtle/prenotazioni/adapters/booker.py:299 +#: redturtle/prenotazioni/adapters/booker.py:310 #: redturtle/prenotazioni/restapi/services/booking/add.py:63 msgid "Sorry, this slot is not available anymore." msgstr "Ci dispiace, ma questo intervallo di tempo non è più disponibile" -#: redturtle/prenotazioni/adapters/booker.py:342 +#: redturtle/prenotazioni/adapters/booker.py:353 msgid "Sorry, this slot is not available or does not fit your booking." msgstr "Ci dispiace questo intervallo di tempo non è disponibile o non è adatto alla tua prenotazione." -#: redturtle/prenotazioni/adapters/booker.py:151 +#: redturtle/prenotazioni/adapters/booker.py:162 msgid "Sorry, you can not book this slot for now." msgstr "Ci dispiace, ma questo intervallo di tempo non è al momento disponibile" @@ -456,11 +464,11 @@ msgstr "Le informazioni per raggiungere l'ufficio presso cui si prenota" msgid "The phone number of the user who made the reservation." msgstr "Il numero di telefono di chi ha prenotato" -#: redturtle/prenotazioni/adapters/booker.py:391 +#: redturtle/prenotazioni/adapters/booker.py:402 msgid "This day is not valid." msgstr "Il giorno inserito non è valido." -#: redturtle/prenotazioni/adapters/booker.py:386 +#: redturtle/prenotazioni/adapters/booker.py:397 msgid "This gate has some booking schedule in this time period." msgstr "Lo sportello selezionato ha già delle prenotazioni nel periodo indicato." @@ -498,11 +506,11 @@ msgstr "Vista" msgid "Wednesday" msgstr "Mercoledì" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:239 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:250 msgid "Week table" msgstr "Schedulazione Settimanale" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:218 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:229 msgid "Yes" msgstr "Si" @@ -514,22 +522,22 @@ msgstr "Non hai i permessi necessari a forzare lo sportello." msgid "You must set both start and end" msgstr "Devi impostare sia un orario di inizio che di termine della pausa" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:427 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:438 #: redturtle/prenotazioni/content/validators.py:212 msgid "You should set a start time for afternoon." msgstr "Devi impostare una data di inizio per il pomeriggio." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:423 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:434 #: redturtle/prenotazioni/content/validators.py:204 msgid "You should set a start time for morning." msgstr "Devi impostare una data di inizio per la mattina." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:425 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:436 #: redturtle/prenotazioni/content/validators.py:208 msgid "You should set an end time for afternoon." msgstr "Devi impostare una data di fine per il pomeriggio." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:421 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:432 #: redturtle/prenotazioni/content/validators.py:200 msgid "You should set an end time for morning." msgstr "Devi impostare una data di fine per la mattina." @@ -582,22 +590,22 @@ msgid "all" msgstr "Tutti" #. Default: "Automatically confirm." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:385 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:396 msgid "auto_confirm" msgstr "Conferma automatica delle prenotazioni" #. Default: "All bookings will be automatically accepted." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:386 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:397 msgid "auto_confirm_help" msgstr "Tutte le prenotazioni verranno accettate automaticamente" #. Default: "Automatically confirmfor managers." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:394 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:405 msgid "auto_confirm_manager" msgstr "Conferma automatica delle prenotazioni dei Gestori" #. Default: "All bookings created by Managers will be automatically accepted." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:395 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:406 msgid "auto_confirm_manager_help" msgstr "Tutte le prenotazioni create dai Gestori verranno accettate automaticamente." @@ -643,7 +651,7 @@ msgid "booking_deleted_success" msgstr "La tua prenotazione è stata cancellata." #. Default: "Booking fields" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:536 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:548 msgid "booking_fields_label" msgstr "Campi Prenotazioni" @@ -938,17 +946,17 @@ msgid "fullname" msgstr "Nome completo" #. Default: "Limit booking in the future to an amount of days in the future starting from the current day. \nKeep 0 to give no limits." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:356 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:367 msgid "futureDays" msgstr "Limita la prenotazione ad un certo numero di giorni nel futuro partendo dal day corrente.Lascia 0 per non dare limiti." #. Default: "Put gates here (one per line)." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:378 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:389 msgid "gates_help" msgstr "Inserisci le postazioni preposte (uno per riga)." #. Default: "Gates" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:377 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:388 msgid "gates_label" msgstr "Postazioni preposte" @@ -962,7 +970,7 @@ msgid "help_required_booking_fields" msgstr "Gli utenti non saranno in grado di creare una prenotazione senza compilare i seguenti campi. Gli utenti saranno comunque sempre obbligati ad inserire un'email o un recapito telefonico." #. Default: "States if it is not allowed to reserve a booking during the current day" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:229 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:240 msgid "help_same_day_booking_disallowed" msgstr "Se selezionato, impedisce agli utenti di prenotare per il giorno corrente." @@ -1032,12 +1040,12 @@ msgid "history_sms_transition_sent" msgstr "Inviata notifica SMS per il cambio di stato della prenotazione: ${transition}" #. Default: "Set holidays (one for line) in DD/MM/YYYY. you can write * for the year, if this event is yearly." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:330 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:341 msgid "holidays_help" msgstr "Imposta eventuali festività (una per riga) nel formato GG/MM/AAAA. Se la data si ripete ogni anno, puoi scrivere * al posto dell'anno." #. Default: "Holidays" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:329 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:340 msgid "holidays_label" msgstr "Festività" @@ -1198,7 +1206,7 @@ msgid "label_required_booking_fields" msgstr "Campi obbligatori" #. Default: "Disallow same day booking" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:225 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:236 msgid "label_same_day_booking_disallowed" msgstr "Disabilita la prenotazione per lo stesso giorno" @@ -1260,12 +1268,12 @@ msgid "legend_note" msgstr "L'unità di tempo minima è 5 minuti. La tua prenotazione non può eccedere il tempo disponibile." #. Default: "The number of simultaneous bookings allowed for the same user." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:485 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:496 msgid "max_bookings_allowed_description" msgstr "Numero massimo delle prenotazioni contemporanee per una stessa tipologia, per lo stesso utente. Impostare '0' o lasciare vuoto per non porre limitazioni. Per attivare questo controllo è necessario richiedere obbligatoriamente all'utente il campo 'codice fiscale'" #. Default: "Maximum bookings number allowed" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:481 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:492 msgid "max_bookings_allowed_label" msgstr "Numero massimo delle prenotazioni" @@ -1315,7 +1323,7 @@ msgid "next-week" msgstr "Settimana successiva" #. Default: "Booking is not allowed before the amount of days specified. \nKeep 0 to give no limits." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:368 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:379 msgid "notBeforeDays" msgstr "La prenotazione non e' permessa prima del numero di giorni specificata. Impostare il valore 0 per non imporre limitazioni." @@ -1340,7 +1348,7 @@ msgid "notifications_email_enabled_label" msgstr "Notifiche Email" #. Default: "Notifications" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:544 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:556 msgid "notifications_label" msgstr "Gestione delle Notifiche" @@ -1412,7 +1420,7 @@ msgid "notify_as_reminder_subject_help" msgstr "L'oggetto del messaggio inviato come promemoria." #. Default: "Notify when canceled." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:472 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:483 msgid "notify_on_cancel" msgstr "Notifica alla cancellazione" @@ -1427,7 +1435,7 @@ msgid "notify_on_cancel_appio_subject_default_value" msgstr "[${prenotazioni_folder_title}] Prenotazione cancellata per ${title}" #. Default: "Notify via mail the user when his booking has been canceled." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:473 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:484 msgid "notify_on_cancel_help" msgstr "Notifica l'utente via mail se la prenotazione viene cancellata" @@ -1473,7 +1481,7 @@ msgid "notify_on_cancel_subject_help" msgstr "L'oggetto del messaggio quando una prenotazione è stata cancellata." #. Default: "Notify when confirmed." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:445 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:456 msgid "notify_on_confirm" msgstr "Notifica alla conferma" @@ -1490,7 +1498,7 @@ msgid "notify_on_confirm_appio_subject_default_value" msgstr "[${prenotazioni_folder_title}] Prenotazione del ${booking_date} alle ${booking_time} accettata" #. Default: "Notify via mail the user when his booking has been confirmed." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:446 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:457 msgid "notify_on_confirm_help" msgstr "Notifica l'utente quando la prenotazione viene confermata." @@ -1538,7 +1546,7 @@ msgid "notify_on_confirm_subject_help" msgstr "L'oggetto del messaggio quando una prenotazione è stata confermata." #. Default: "Notify when moved." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:454 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:465 msgid "notify_on_move" msgstr "Notifica allo spostamento" @@ -1556,7 +1564,7 @@ msgid "notify_on_move_appio_subject_default_value" msgstr "[${prenotazioni_folder_title}] Data di prenotazione modificata per ${title}" #. Default: "Notify via mail the user when his booking has been moved." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:455 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:466 msgid "notify_on_move_help" msgstr "Notifica l'utente quando la prenotazione viene spostata di giorno/orario." @@ -1604,7 +1612,7 @@ msgid "notify_on_move_subject_help" msgstr "L'oggetto del messaggio quando una prenotazione è stata spostata." #. Default: "Notify when rejected." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:463 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:474 msgid "notify_on_refuse" msgstr "Notifica al rifiuto" @@ -1619,7 +1627,7 @@ msgid "notify_on_refuse_appio_subject_default_value" msgstr "[${prenotazioni_folder_title}] Prenotazione rifiutata per ${title}" #. Default: "Notify via mail the user when his booking has been rejected." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:464 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:475 msgid "notify_on_refuse_help" msgstr "Notifica l'utente via mail se la prenotazione viene rifiutata" @@ -1667,7 +1675,7 @@ msgid "notify_on_refuse_subject_help" msgstr "L'oggetto del messaggio quando una prenotazione è stata rifiutata." #. Default: "Notify when created." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:436 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:447 msgid "notify_on_submit" msgstr "Notifica alla creazione" @@ -1684,7 +1692,7 @@ msgid "notify_on_submit_appio_subject_default_value" msgstr "[${prenotazioni_folder_title}] Prenotazione creata" #. Default: "Notify via mail the user when his booking has been created. If auto-confirm flag is selected and confirm notify is selected, this one will be ignored." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:437 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:448 msgid "notify_on_submit_help" msgstr "Notifica l'utente quando la prenotazione viene creata. Se il flag di conferma automatica e di notifica alla conferma sono selezionati, questa opzione verrà ignorata." @@ -1811,12 +1819,12 @@ msgid "reject_booking" msgstr "Rifiuta la prenotazione" #. Default: "Set how many days before of a booking date the user will be notified about it." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:497 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:508 msgid "reminder_notification_gap_description" msgstr "Indicare quanti giorni prima della data di prenotazione, inviare un promemoria agli utenti." #. Default: "Booking reminder days" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:493 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:504 msgid "reminder_notification_gap_label" msgstr "Promemoria prenotazione" @@ -1925,12 +1933,12 @@ msgid "view_booking" msgstr "Vedi la prenotazione" #. Default: "Insert here week schema for some custom date intervals." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:307 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:318 msgid "week_table_overrides_help" msgstr "Inserisci qui eventuali personalizzazioni nella schedulazione settimanale che andranno a vincere su quella standard per un determinato periodo di tempo." #. Default: "Week table overrides" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:306 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:317 msgid "week_table_overrides_label" msgstr "Personalizzazioni Schedulazione Settimanale" diff --git a/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot b/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot index 201824b9..610877ef 100644 --- a/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot +++ b/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot @@ -4,7 +4,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" -"POT-Creation-Date: 2024-06-27 14:16+0000\n" +"POT-Creation-Date: 2024-08-19 10:07+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI +ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -34,11 +34,15 @@ msgstr "" msgid "Add" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:433 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:444 #: redturtle/prenotazioni/content/validators.py:222 msgid "Afternoon start should not be greater than end." msgstr "" +#: redturtle/prenotazioni/content/prenotazioni_folder.py:216 +msgid "Apply restrictions to Bookings Manager" +msgstr "" + #: redturtle/prenotazioni/browser/templates/prenotazione.pt:29 msgid "Attention" msgstr "" @@ -133,11 +137,11 @@ msgstr "" msgid "Data inizio validità" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:507 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:518 msgid "Date validità" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:367 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:378 msgid "Days booking is not allowed before" msgstr "" @@ -185,6 +189,10 @@ msgstr "" msgid "How to get here" msgstr "" +#: redturtle/prenotazioni/content/prenotazioni_folder.py:219 +msgid "If selected, Bookings Manager will be restricted by selected dates as an usual user." +msgstr "" + #: redturtle/prenotazioni/content/validators.py:93 msgid "In the same day there are overlapping intervals" msgstr "" @@ -197,7 +205,7 @@ msgstr "" msgid "Inserire il testo di presentazione dell'agenda corrente" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:405 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:416 msgid "Insert a list of email addresses that will be notified when new bookings get created." msgstr "" @@ -225,11 +233,11 @@ msgstr "" msgid "Insert here the contact phone" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:317 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:328 msgid "Insert pause table schema." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:240 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:251 msgid "Insert week table schema." msgstr "" @@ -241,7 +249,7 @@ msgstr "" msgid "Installs the redturtle.prenotazioni.demo add-on (demo site purpose only)." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:355 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:366 msgid "Max days in the future" msgstr "" @@ -249,7 +257,7 @@ msgstr "" msgid "Monday" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:430 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:441 #: redturtle/prenotazioni/content/validators.py:217 msgid "Morning start should not be greater than end." msgstr "" @@ -268,7 +276,7 @@ msgstr "" msgid "Nessuno slot creato, verificare la corretteza dei dati inseriti" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:219 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:230 msgid "No" msgstr "" @@ -300,7 +308,7 @@ msgstr "" msgid "Pause should be included in morning slot or afternoon slot" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:316 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:327 msgid "Pause table" msgstr "" @@ -336,7 +344,7 @@ msgstr "" msgid "Required input is missing." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:404 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:415 msgid "Responsible email" msgstr "" @@ -352,16 +360,16 @@ msgstr "" msgid "Select a day" msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:299 +#: redturtle/prenotazioni/adapters/booker.py:310 #: redturtle/prenotazioni/restapi/services/booking/add.py:63 msgid "Sorry, this slot is not available anymore." msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:342 +#: redturtle/prenotazioni/adapters/booker.py:353 msgid "Sorry, this slot is not available or does not fit your booking." msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:151 +#: redturtle/prenotazioni/adapters/booker.py:162 msgid "Sorry, you can not book this slot for now." msgstr "" @@ -457,11 +465,11 @@ msgstr "" msgid "The phone number of the user who made the reservation." msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:391 +#: redturtle/prenotazioni/adapters/booker.py:402 msgid "This day is not valid." msgstr "" -#: redturtle/prenotazioni/adapters/booker.py:386 +#: redturtle/prenotazioni/adapters/booker.py:397 msgid "This gate has some booking schedule in this time period." msgstr "" @@ -499,11 +507,11 @@ msgstr "" msgid "Wednesday" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:239 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:250 msgid "Week table" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:218 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:229 msgid "Yes" msgstr "" @@ -515,22 +523,22 @@ msgstr "" msgid "You must set both start and end" msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:427 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:438 #: redturtle/prenotazioni/content/validators.py:212 msgid "You should set a start time for afternoon." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:423 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:434 #: redturtle/prenotazioni/content/validators.py:204 msgid "You should set a start time for morning." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:425 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:436 #: redturtle/prenotazioni/content/validators.py:208 msgid "You should set an end time for afternoon." msgstr "" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:421 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:432 #: redturtle/prenotazioni/content/validators.py:200 msgid "You should set an end time for morning." msgstr "" @@ -583,22 +591,22 @@ msgid "all" msgstr "" #. Default: "Automatically confirm." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:385 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:396 msgid "auto_confirm" msgstr "" #. Default: "All bookings will be automatically accepted." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:386 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:397 msgid "auto_confirm_help" msgstr "" #. Default: "Automatically confirmfor managers." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:394 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:405 msgid "auto_confirm_manager" msgstr "" #. Default: "All bookings created by Managers will be automatically accepted." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:395 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:406 msgid "auto_confirm_manager_help" msgstr "" @@ -643,7 +651,7 @@ msgid "booking_deleted_success" msgstr "" #. Default: "Booking fields" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:536 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:548 msgid "booking_fields_label" msgstr "" @@ -938,17 +946,17 @@ msgid "fullname" msgstr "" #. Default: "Limit booking in the future to an amount of days in the future starting from the current day. \nKeep 0 to give no limits." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:356 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:367 msgid "futureDays" msgstr "" #. Default: "Put gates here (one per line)." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:378 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:389 msgid "gates_help" msgstr "" #. Default: "Gates" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:377 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:388 msgid "gates_label" msgstr "" @@ -962,7 +970,7 @@ msgid "help_required_booking_fields" msgstr "" #. Default: "States if it is not allowed to reserve a booking during the current day" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:229 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:240 msgid "help_same_day_booking_disallowed" msgstr "" @@ -1032,12 +1040,12 @@ msgid "history_sms_transition_sent" msgstr "" #. Default: "Set holidays (one for line) in DD/MM/YYYY. you can write * for the year, if this event is yearly." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:330 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:341 msgid "holidays_help" msgstr "" #. Default: "Holidays" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:329 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:340 msgid "holidays_label" msgstr "" @@ -1196,7 +1204,7 @@ msgid "label_required_booking_fields" msgstr "" #. Default: "Disallow same day booking" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:225 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:236 msgid "label_same_day_booking_disallowed" msgstr "" @@ -1258,12 +1266,12 @@ msgid "legend_note" msgstr "" #. Default: "The number of simultaneous bookings allowed for the same user." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:485 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:496 msgid "max_bookings_allowed_description" msgstr "" #. Default: "Maximum bookings number allowed" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:481 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:492 msgid "max_bookings_allowed_label" msgstr "" @@ -1313,7 +1321,7 @@ msgid "next-week" msgstr "" #. Default: "Booking is not allowed before the amount of days specified. \nKeep 0 to give no limits." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:368 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:379 msgid "notBeforeDays" msgstr "" @@ -1338,7 +1346,7 @@ msgid "notifications_email_enabled_label" msgstr "" #. Default: "Notifications" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:544 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:556 msgid "notifications_label" msgstr "" @@ -1408,7 +1416,7 @@ msgid "notify_as_reminder_subject_help" msgstr "" #. Default: "Notify when canceled." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:472 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:483 msgid "notify_on_cancel" msgstr "" @@ -1423,7 +1431,7 @@ msgid "notify_on_cancel_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been canceled." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:473 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:484 msgid "notify_on_cancel_help" msgstr "" @@ -1469,7 +1477,7 @@ msgid "notify_on_cancel_subject_help" msgstr "" #. Default: "Notify when confirmed." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:445 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:456 msgid "notify_on_confirm" msgstr "" @@ -1484,7 +1492,7 @@ msgid "notify_on_confirm_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been confirmed." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:446 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:457 msgid "notify_on_confirm_help" msgstr "" @@ -1530,7 +1538,7 @@ msgid "notify_on_confirm_subject_help" msgstr "" #. Default: "Notify when moved." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:454 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:465 msgid "notify_on_move" msgstr "" @@ -1545,7 +1553,7 @@ msgid "notify_on_move_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been moved." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:455 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:466 msgid "notify_on_move_help" msgstr "" @@ -1591,7 +1599,7 @@ msgid "notify_on_move_subject_help" msgstr "" #. Default: "Notify when rejected." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:463 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:474 msgid "notify_on_refuse" msgstr "" @@ -1606,7 +1614,7 @@ msgid "notify_on_refuse_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been rejected." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:464 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:475 msgid "notify_on_refuse_help" msgstr "" @@ -1652,7 +1660,7 @@ msgid "notify_on_refuse_subject_help" msgstr "" #. Default: "Notify when created." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:436 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:447 msgid "notify_on_submit" msgstr "" @@ -1667,7 +1675,7 @@ msgid "notify_on_submit_appio_subject_default_value" msgstr "" #. Default: "Notify via mail the user when his booking has been created. If auto-confirm flag is selected and confirm notify is selected, this one will be ignored." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:437 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:448 msgid "notify_on_submit_help" msgstr "" @@ -1794,12 +1802,12 @@ msgid "reject_booking" msgstr "" #. Default: "Set how many days before of a booking date the user will be notified about it." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:497 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:508 msgid "reminder_notification_gap_description" msgstr "" #. Default: "Booking reminder days" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:493 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:504 msgid "reminder_notification_gap_label" msgstr "" @@ -1908,12 +1916,12 @@ msgid "view_booking" msgstr "" #. Default: "Insert here week schema for some custom date intervals." -#: redturtle/prenotazioni/content/prenotazioni_folder.py:307 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:318 msgid "week_table_overrides_help" msgstr "" #. Default: "Week table overrides" -#: redturtle/prenotazioni/content/prenotazioni_folder.py:306 +#: redturtle/prenotazioni/content/prenotazioni_folder.py:317 msgid "week_table_overrides_label" msgstr "" diff --git a/src/redturtle/prenotazioni/tests/test_add_booking.py b/src/redturtle/prenotazioni/tests/test_add_booking.py index f8f233f8..ae119316 100644 --- a/src/redturtle/prenotazioni/tests/test_add_booking.py +++ b/src/redturtle/prenotazioni/tests/test_add_booking.py @@ -147,6 +147,50 @@ def test_add_booking_anonymous(self): self.assertEqual(res.json()["email"], "mario.rossi@example") self.assertEqual(res.json()["id"], "mario-rossi") + def test_add_booking_anonymous_over_validity_dates(self): + self.folder_prenotazioni.aData = date.today() - timedelta(days=1) + + transaction.commit() + + self.api_session.auth = None + booking_date = "{}T09:00:00+00:00".format( + (date.today() + timedelta(1)).strftime("%Y-%m-%d") + ) + res = self.api_session.post( + self.folder_prenotazioni.absolute_url() + "/@booking", + json={ + "booking_date": booking_date, + "booking_type": "Type A", + "fields": [ + {"name": "title", "value": "Mario Rossi"}, + {"name": "email", "value": "mario.rossi@example"}, + ], + }, + ) + + self.assertEqual(res.status_code, 400) + + def test_add_booking_anonymous_before_validity_dates(self): + self.folder_prenotazioni.aData = date.today() + timedelta(days=1) + + transaction.commit() + + self.api_session.auth = None + booking_date = "{}T09:00:00+00:00".format((date.today()).strftime("%Y-%m-%d")) + res = self.api_session.post( + self.folder_prenotazioni.absolute_url() + "/@booking", + json={ + "booking_date": booking_date, + "booking_type": "Type A", + "fields": [ + {"name": "title", "value": "Mario Rossi"}, + {"name": "email", "value": "mario.rossi@example"}, + ], + }, + ) + + self.assertEqual(res.status_code, 400) + def test_add_booking_anonymous_wrong_booking_type(self): self.api_session.auth = None res = self.api_session.post( @@ -704,3 +748,26 @@ def test_booker_bypass_futureDays_check_if_manager(self): } ) self.assertEqual(book.booking_date.date(), future_date.date()) + + @freeze_time(DATE_STR) + def test_booker_do_not_bypass_futureDays_check_if_manager_and_flag_selected(self): + today = date.today() + self.folder_prenotazioni.daData = today + self.folder_prenotazioni.futureDays = 6 + self.folder_prenotazioni.apply_date_restrictions_to_manager = True + + logout() + login(self.portal, "jdoe") + + future_date = datetime.fromisoformat(today.isoformat()) + timedelta( + hours=8, days=8 + ) + with self.assertRaises(BookerException): + self.create_booking( + data={ + "booking_date": future_date, + "booking_type": "Type A", + "title": "foo", + "email": "jdoe@redturtle.it", + } + ) diff --git a/src/redturtle/prenotazioni/tests/test_pauses_overrides.py b/src/redturtle/prenotazioni/tests/test_pauses_overrides.py index 6fc91b20..66d45ec7 100644 --- a/src/redturtle/prenotazioni/tests/test_pauses_overrides.py +++ b/src/redturtle/prenotazioni/tests/test_pauses_overrides.py @@ -4,6 +4,7 @@ from datetime import date import transaction +from freezegun import freeze_time from plone import api from plone.app.testing import SITE_OWNER_NAME from plone.app.testing import SITE_OWNER_PASSWORD @@ -15,6 +16,8 @@ from redturtle.prenotazioni.testing import REDTURTLE_PRENOTAZIONI_FUNCTIONAL_TESTING from redturtle.prenotazioni.tests.helpers import WEEK_TABLE_SCHEMA +TESTING_DATE = "2023-01-05" + class TestPausesOverride(unittest.TestCase): layer = REDTURTLE_PRENOTAZIONI_FUNCTIONAL_TESTING @@ -193,7 +196,7 @@ def setUp(self): container=self.portal, type="PrenotazioniFolder", title="Prenota foo", - daData=date.today(), + daData=date(year=2023, month=1, day=5), gates=["Gate A"], pause_table=[ {"day": "0", "pause_start": "0900", "pause_end": "0915"}, @@ -277,6 +280,7 @@ def setUp(self): def tearDown(self): self.api_session.close() + @freeze_time(TESTING_DATE) def test_add_booking_in_overrided_pause_return_400(self): self.api_session.auth = None booking_date = "{}T11:00:00+00:00".format( @@ -300,6 +304,7 @@ def test_add_booking_in_overrided_pause_return_400(self): res.json()["message"], "Sorry, this slot is not available anymore." ) + @freeze_time(TESTING_DATE) def test_add_booking_outside_overrided_pause_return_200(self): self.api_session.auth = None booking_date = "{}T09:00:00+00:00".format( From c6ab84e66e7e265cd16400e76681b6c6cce1600f Mon Sep 17 00:00:00 2001 From: Roman Kysil Date: Wed, 18 Sep 2024 17:00:59 +0200 Subject: [PATCH 6/8] Docs + tests fix --- buildout.cfg | 1 + .../browser/prenotazioni_context_state.py | 23 ++++++++++++------- src/redturtle/prenotazioni/tests/test_day.py | 6 ++--- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/buildout.cfg b/buildout.cfg index 48dac86f..2f233661 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -9,3 +9,4 @@ extends = eggs += Products.PrintingMailHost design.plone.ioprenoto + diff --git a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py index de3d75ae..8a5ea422 100644 --- a/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py +++ b/src/redturtle/prenotazioni/browser/prenotazioni_context_state.py @@ -296,13 +296,24 @@ def is_before_allowed_period(self, day, bypass_user_restrictions=False): @memoize def is_valid_day(self, day, bypass_user_restrictions=False): - """Returns True if the day is valid""" + """Returns True if the day is valid + Day is not valid in those conditions: + - day is out of validity range + (not applied to BookingManager if PrenotazioniFolder.bookins_manager_is_restricted_by_dates is False) + - day is vacation day + - day is out of PrenotazioniFolder.futures_day range + (not applied to BookingManager if PrenotazioniFolder.bookins_manager_is_restricted_by_dates is False) + - week day is not configured + """ if isinstance(day, datetime): day = day.date() is_configured_day = self.is_configured_day(day) + if bypass_user_restrictions: + return True + if ( is_configured_day and self.user_can_manage_prenotazioni @@ -316,20 +327,16 @@ def is_valid_day(self, day, bypass_user_restrictions=False): if self.is_vacation_day(day): return False - if not bypass_user_restrictions and ( - self.last_bookable_day and day > self.last_bookable_day - ): + if self.last_bookable_day and day > self.last_bookable_day: return False - if self.is_before_allowed_period( - day, bypass_user_restrictions=bypass_user_restrictions - ): + if self.is_before_allowed_period(day, bypass_user_restrictions=False): return False if self.future_days_limit: date_limit = date.today() + timedelta(days=self.future_days_limit) - if day >= date_limit and not bypass_user_restrictions: + if day >= date_limit: return False return is_configured_day diff --git a/src/redturtle/prenotazioni/tests/test_day.py b/src/redturtle/prenotazioni/tests/test_day.py index b8d2ca6f..38e824a5 100644 --- a/src/redturtle/prenotazioni/tests/test_day.py +++ b/src/redturtle/prenotazioni/tests/test_day.py @@ -187,6 +187,6 @@ def test_requested_day_is_out_of_range(self): results = response.json() - self.assertEquals(results["gates"], []) - self.assertEquals(results["pauses"], []) - self.assertEquals(results["bookings"], []) + self.assertEqual(results["gates"], []) + self.assertEqual(results["pauses"], []) + self.assertEqual(results["bookings"], []) From 2773254ad6d2981c051057746434668fe318f9e0 Mon Sep 17 00:00:00 2001 From: Roman Kysil Date: Mon, 21 Oct 2024 14:43:06 +0200 Subject: [PATCH 7/8] Update src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot Co-authored-by: Giulia Ghisini <51911425+giuliaghisini@users.noreply.github.com> --- src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot b/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot index 33c2f84a..2f85dcb9 100644 --- a/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot +++ b/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot @@ -191,7 +191,7 @@ msgstr "" #: redturtle/prenotazioni/content/prenotazioni_folder.py:219 msgid "If selected, Bookings Manager will be restricted by selected dates as an usual user." -msgstr "" +msgstr "Se selezionato, gli operatori avranno le stesse restrizioni sulle date come un qualsiasi utente" #: redturtle/prenotazioni/content/validators.py:93 msgid "In the same day there are overlapping intervals" From 418aaf33253e668d9703682294d615d180b9a73c Mon Sep 17 00:00:00 2001 From: Roman Kysil Date: Mon, 21 Oct 2024 14:43:38 +0200 Subject: [PATCH 8/8] Update src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot Co-authored-by: Giulia Ghisini <51911425+giuliaghisini@users.noreply.github.com> --- src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot b/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot index 2f85dcb9..37b860f0 100644 --- a/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot +++ b/src/redturtle/prenotazioni/locales/redturtle.prenotazioni.pot @@ -41,7 +41,7 @@ msgstr "" #: redturtle/prenotazioni/content/prenotazioni_folder.py:216 msgid "Apply restrictions to Bookings Manager" -msgstr "" +msgstr "Applica le restrizioni sulle date anche agli operatori" #: redturtle/prenotazioni/browser/templates/prenotazione.pt:29 msgid "Attention"