From 5cdca97116fb1db2ff6e3a19a65a0b54040d852a Mon Sep 17 00:00:00 2001 From: Saksham Arora Date: Mon, 8 Jan 2024 14:07:48 +0100 Subject: [PATCH] circulation: Made loan request start date to be configurable and validated at the backend --- invenio_app_ils/circulation/config.py | 2 ++ .../circulation/loaders/schemas/json/loan_request.py | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/invenio_app_ils/circulation/config.py b/invenio_app_ils/circulation/config.py index e1045d51e..5a26649b7 100644 --- a/invenio_app_ils/circulation/config.py +++ b/invenio_app_ils/circulation/config.py @@ -74,6 +74,8 @@ ILS_CIRCULATION_NOTIFICATION_OVERDUE_REMINDER_INTERVAL = 3 #: The maximum duration of a loan request ILS_CIRCULATION_LOAN_REQUEST_DURATION_DAYS = 60 +#: Loan Request Offset Value +ILS_CIRCULATION_LOAD_REQUEST_OFFSET = 0 #: Period of time in days, before loans expire, for notifications etc. ILS_CIRCULATION_LOAN_WILL_EXPIRE_DAYS = 7 #: Optional delivery methods when requesting a new loan. Set to empty object to diff --git a/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py b/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py index b6dfc884a..71e0777b0 100644 --- a/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py +++ b/invenio_app_ils/circulation/loaders/schemas/json/loan_request.py @@ -83,6 +83,7 @@ def postload_checks(self, data, **kwargs): start = arrow.get(data["request_start_date"]).date() end = arrow.get(data["request_expire_date"]).date() duration_days = current_app.config["ILS_CIRCULATION_LOAN_REQUEST_DURATION_DAYS"] + loan_request_offset = timedelta(days=current_app.config["ILS_CIRCULATION_LOAD_REQUEST_OFFSET"]) duration = timedelta(days=duration_days) if end < start: @@ -106,4 +107,12 @@ def postload_checks(self, data, **kwargs): "request_expire_date": [message], } ) + elif end - start < loan_request_offset: + message = "The request end date can only be {} days after the request start date.".format(loan_request_offset.days) + raise ValidationError( + { + "request_start_date": [message], + "request_expire_date": [message], + } + ) return data