diff --git a/LabPurchasing/resources/queries/labpurchasing/purchases.js b/LabPurchasing/resources/queries/labpurchasing/purchases.js index 602ce37ff..cbcfa7d50 100644 --- a/LabPurchasing/resources/queries/labpurchasing/purchases.js +++ b/LabPurchasing/resources/queries/labpurchasing/purchases.js @@ -4,6 +4,31 @@ var console = require("console"); var triggerHelper = new org.labkey.labpurchasing.LabPurchasingTriggerHelper(LABKEY.Security.currentUser.id, LABKEY.Security.currentContainer.id); function beforeInsert(row, errors){ + beforeUpsert(row, errors) +} + +function beforeUpdate(row, oldRow, errors){ + beforeUpsert(row, errors) +} + +function beforeUpsert(row, errors){ + // Validate requestor: + if (row.requestor) { + if (!isNaN(row.requestor) && !triggerHelper.isValidUserId(row.requestor)) { + errors.requestor = 'Unknown userId for requestor: ' + row.requestor; + } + // Try to resolve strings: + else if (isNaN(row.requestor)) { + var id = triggerHelper.resolveUserId(String(row.requestor)); + if (!id) { + errors.requestor = 'Unknown userId for requestor: ' + row.requestor; + } + else { + row.requestor = id; + } + } + } + // The purpose of this is to allow the user to provide a string value for // vendorId or vendorName, and attempt to resolve this against known vendors: if (!row.vendorId || isNaN(row.vendorId)) { diff --git a/LabPurchasing/src/org/labkey/labpurchasing/LabPurchasingTriggerHelper.java b/LabPurchasing/src/org/labkey/labpurchasing/LabPurchasingTriggerHelper.java index f79c3688e..2625a0dca 100644 --- a/LabPurchasing/src/org/labkey/labpurchasing/LabPurchasingTriggerHelper.java +++ b/LabPurchasing/src/org/labkey/labpurchasing/LabPurchasingTriggerHelper.java @@ -112,4 +112,16 @@ public void sendNotifications(List rowIds) { _log.error("Unable to send purchasing email", e); } } + + public boolean isValidUserId(int userId) + { + return UserManager.getUser(userId) != null; + } + + public Integer resolveUserId(String userNameOrEmail) + { + User u = UserManager.getUserByDisplayName(userNameOrEmail); + + return u == null ? null : u.getUserId(); + } }