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