From 7deec282d3c37aac8d4a83e2a0b7a51b2ad7ce85 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com>
Date: Thu, 30 Jan 2025 10:11:52 +0100
Subject: [PATCH] ENH: added a check that a loan does not reference the same
 box twice

---
 loanpy/src/loan/request_loan.py | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/loanpy/src/loan/request_loan.py b/loanpy/src/loan/request_loan.py
index 15ecf67..16eb783 100755
--- a/loanpy/src/loan/request_loan.py
+++ b/loanpy/src/loan/request_loan.py
@@ -24,6 +24,7 @@ from __future__ import absolute_import
 
 import linkahead as db
 from caosadvancedtools.serverside.helper import get_timestamp, print_success
+from linkahead.common.models import get_id_from_versionid, value_matches_versionid
 
 from .box_loan import (BORROWER, BOX, COMMENT, DESTINATION, EXHAUST_CONTENTS, EXPECTED_RETURN,
                        F_BOX, F_COMMENT, F_DESTINATION, F_EMAIL, F_EXHAUST_CONTENTS,
@@ -32,13 +33,17 @@ from .box_loan import (BORROWER, BOX, COMMENT, DESTINATION, EXHAUST_CONTENTS, EX
                        insert_or_update_person, main, send_loan_request_mail)
 
 
-def create_loan(box, borrower, expected_return, exhaust_contents, comment,
-                destination):
+def create_loan(box, borrower, expected_return, exhaust_contents, comment, destination):
     """ Create a new loan record. """
 
+    if isinstance(box, list):
+        ids = [get_id_from_versionid(val) if value_matches_versionid(val) else val for val in box]
+        ids = [str(val) for val in ids]
+        if len(ids) != len(set(ids)):
+            raise ValueError("The loan must not reference the same item twice")
     loan = db.Record().add_parent(LOAN)
-
-    loan.add_property(BOX, box, datatype=(db.LIST(BOX.name) if isinstance(box, list) else BOX.name))
+    loan.add_property(BOX, box, datatype=(
+        db.LIST(BOX.name) if isinstance(box, list) else BOX.name))
     loan.add_property(BORROWER, borrower)
     loan.add_property(EXPECTED_RETURN, expected_return)
     loan.add_property(EXHAUST_CONTENTS, exhaust_contents)
-- 
GitLab