From f6c58f327dfacbcfe13dd35c606e73cdae2865fd Mon Sep 17 00:00:00 2001 From: Mark Zelesky Date: Thu, 13 Apr 2023 10:05:53 -0400 Subject: [PATCH 1/2] add transaction prefixes to all transactions --- IDS_NCIP_Client.lua => ALMA_NCIP_Client.lua | 1011 ++++++++++--------- Config.xml | 107 +- 2 files changed, 561 insertions(+), 557 deletions(-) rename IDS_NCIP_Client.lua => ALMA_NCIP_Client.lua (94%) mode change 100755 => 100644 mode change 100755 => 100644 Config.xml diff --git a/IDS_NCIP_Client.lua b/ALMA_NCIP_Client.lua old mode 100755 new mode 100644 similarity index 94% rename from IDS_NCIP_Client.lua rename to ALMA_NCIP_Client.lua index 8d7ae52..64dbd1d --- a/IDS_NCIP_Client.lua +++ b/ALMA_NCIP_Client.lua @@ -1,505 +1,506 @@ ---About IDS_NCIP_Client 1.5 --- ---Author: Bill Jones III, SUNY Geneseo, IDS Project, jonesw@geneseo.edu ---Modified by: Tom McNulty, VCU Libraries, tmcnulty@vcu.edu ---System Addon used for ILLiad to communicate with Alma through NCIP protocol --- ---Description of Registered Event Handlers for ILLiad --- ---BorrowingRequestCheckedInFromLibrary ---This will trigger whenever a non-cancelled transaction is processed from the Check In From Lending Library ---batch processing form using the Check In, Check In Scan Now, or Check In Scan Later buttons. --- ---BorrowingRequestCheckedInFromCustomer ---This will trigger whenever an item is processed from the Check Item In batch processing form, ---regardless of its status (such as if it were cancelled or never picked up by the customer). --- ---LendingRequestCheckOut ---This will trigger whenever a transaction is processed from the Lending Update Stacks Searching form ---using the Mark Found or Mark Found Scan Now buttons. This will also work on the Lending Processing ribbon ---of the Request form for the Mark Found and Mark Found Scan Now buttons. --- ---LendingRequestCheckIn ---This will trigger whenever a transaction is processed from the Lending Returns batch processing form. --- ---Queue names have a limit of 40 characters (including spaces). - - -local Settings = {}; - ---NCIP Responder URL -Settings.NCIP_Responder_URL = GetSetting("NCIP_Responder_URL"); - ---Change Prefix Settings for Transactions -Settings.Use_Prefixes = GetSetting("Use_Prefixes"); -Settings.Prefix_for_LibraryUseOnly = GetSetting("Prefix_for_LibraryUseOnly"); -Settings.Prefix_for_RenewablesAllowed = GetSetting("Prefix_for_RenewablesAllowed"); -Settings.Prefix_for_LibraryUseOnly_and_RenewablesAllowed = GetSetting("Prefix_for_LibraryUseOnly_and_RenewablesAllowed"); - ---NCIP Error Status Changes -Settings.BorrowingAcceptItemFailQueue = GetSetting("BorrowingAcceptItemFailQueue"); -Settings.BorrowingCheckInItemFailQueue = GetSetting("BorrowingCheckInItemFailQueue"); -Settings.LendingCheckOutItemFailQueue = GetSetting("LendingCheckOutItemFailQueue"); -Settings.LendingCheckInItemFailQueue = GetSetting("LendingCheckInItemFailQueue"); - ---acceptItem settings -Settings.acceptItem_from_uniqueAgency_value = GetSetting("acceptItem_from_uniqueAgency_value"); -Settings.acceptItem_Transaction_Prefix = GetSetting("checkInItem_Transaction_Prefix"); - ---checkInItem settings -Settings.checkInItem_EnablePatronBorrowingReturns = GetSetting("EnablePatronBorrowingReturns"); -Settings.ApplicationProfileType = GetSetting("ApplicationProfileType"); -Settings.checkInItem_Transaction_Prefix = GetSetting("checkInItem_Transaction_Prefix"); - ---checkOutItem settings -Settings.checkOutItem_RequestIdentifierValue_Prefix = GetSetting("checkOutItem_RequestIdentifierValue_Prefix"); - -function Init() - RegisterSystemEventHandler("BorrowingRequestCheckedInFromLibrary", "BorrowingAcceptItem"); - RegisterSystemEventHandler("BorrowingRequestCheckedInFromCustomer", "BorrowingCheckInItem"); - RegisterSystemEventHandler("LendingRequestCheckOut", "LendingCheckOutItem"); - RegisterSystemEventHandler("LendingRequestCheckIn", "LendingCheckInItem"); -end - ---Borrowing Functions -function BorrowingAcceptItem(transactionProcessedEventArgs) - LogDebug("BorrowingAcceptItem - start"); - - if GetFieldValue("Transaction", "RequestType") == "Loan" then - - LogDebug("Item Request has been identified as a Loan and not Article - process started."); - - luanet.load_assembly("System"); - local ncipAddress = Settings.NCIP_Responder_URL; - local BAImessage = buildAcceptItem(); - LogDebug("creating BorrowingAcceptItem message[" .. BAImessage .. "]"); - local WebClient = luanet.import_type("System.Net.WebClient"); - local myWebClient = WebClient(); - LogDebug("WebClient Created"); - LogDebug("Adding Header"); - - LogDebug("Setting Upload String"); - local BAIresponseArray = myWebClient:UploadString(ncipAddress, BAImessage); - LogDebug("Upload response was[" .. BAIresponseArray .. "]"); - - LogDebug("Starting error catch") - local currentTN = GetFieldValue("Transaction", "TransactionNumber"); - - if string.find (BAIresponseArray, "Item Not Checked Out") then - LogDebug("NCIP Error: Item Not Checked Out"); - ExecuteCommand("Route", {currentTN, "NCIP Error: BorAcceptItem-NotCheckedOut"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, BAIresponseArray}); - SaveDataSource("Transaction"); - - elseif string.find(BAIresponseArray, "User Authentication Failed") then - LogDebug("NCIP Error: User Authentication Failed"); - ExecuteCommand("Route", {currentTN, "NCIP Error: BorAcceptItem-UserAuthFail"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, BAIresponseArray}); - SaveDataSource("Transaction"); - - --this error came up from non-standard characters in the title (umlauts) - elseif string.find(BAIresponseArray, "Service is not known") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, "NCIP Error: BorAcceptItem-SrvcNotKnown"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, BAIresponseArray}); - SaveDataSource("Transaction"); - - elseif string.find(BAIresponseArray, "Problem") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, Settings.BorrowingAcceptItemFailQueue}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, BAIresponseArray}); - SaveDataSource("Transaction"); - - else - LogDebug("No Problems found in NCIP Response.") - ExecuteCommand("AddNote", {currentTN, "NCIP Response for BorrowingAcceptItem received successfully"}); - SaveDataSource("Transaction"); - end - end -end - - -function BorrowingCheckInItem(transactionProcessedEventArgs) - - LogDebug("BorrowingCheckInItem - start"); - luanet.load_assembly("System"); - local ncipAddress = Settings.NCIP_Responder_URL; - local BCIImessage = buildCheckInItemBorrowing(); - LogDebug("creating BorrowingCheckInItem message[" .. BCIImessage .. "]"); - local WebClient = luanet.import_type("System.Net.WebClient"); - local myWebClient = WebClient(); - LogDebug("WebClient Created"); - LogDebug("Adding Header"); - myWebClient.Headers:Add("Content-Type", "text/xml; charset=UTF-8"); - LogDebug("Setting Upload String"); - local BCIIresponseArray = myWebClient:UploadString(ncipAddress, BCIImessage); - LogDebug("Upload response was[" .. BCIIresponseArray .. "]"); - - LogDebug("Starting error catch") - local currentTN = GetFieldValue("Transaction", "TransactionNumber"); - - if string.find(BCIIresponseArray, "Unknown Item") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, "NCIP Error: BorCheckIn-UnknownItem"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, BCIIresponseArray}); - SaveDataSource("Transaction"); - - elseif string.find(BCIIresponseArray, "Item Not Checked Out") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, "NCIP Error: BorCheckIn-NotCheckedOut"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, BCIIresponseArray}); - SaveDataSource("Transaction"); - - elseif string.find(BCIIresponseArray, "Problem") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, Settings.BorrowingCheckInItemFailQueue}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, BCIIresponseArray}); - SaveDataSource("Transaction"); - - else - LogDebug("No Problems found in NCIP Response.") - ExecuteCommand("AddNote", {currentTN, "NCIP Response for BorrowingCheckInItem received successfully"}); - SaveDataSource("Transaction"); - end -end - ---Lending Functions -function LendingCheckOutItem(transactionProcessedEventArgs) - LogDebug("DEBUG -- LendingCheckOutItem - start"); - luanet.load_assembly("System"); - local ncipAddress = Settings.NCIP_Responder_URL; - local LCOImessage = buildCheckOutItem(); - LogDebug("creating LendingCheckOutItem message[" .. LCOImessage .. "]"); - local WebClient = luanet.import_type("System.Net.WebClient"); - local myWebClient = WebClient(); - LogDebug("WebClient Created"); - LogDebug("Adding Header"); - myWebClient.Headers:Add("Content-Type", "text/xml; charset=UTF-8"); - LogDebug("Setting Upload String"); - local LCOIresponseArray = myWebClient:UploadString(ncipAddress, LCOImessage); - LogDebug("Upload response was[" .. LCOIresponseArray .. "]"); - - LogDebug("Starting error catch") - local currentTN = GetFieldValue("Transaction", "TransactionNumber"); - - if string.find(LCOIresponseArray, "Apply to circulation desk - Loan cannot be renewed (no change in due date)") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckOut-No Change Due Date"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, LCOIresponseArray}); - SaveDataSource("Transaction"); - - elseif string.find(LCOIresponseArray, "User Ineligible To Check Out This Item") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckOut-User Ineligible"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, LCOIresponseArray}); - SaveDataSource("Transaction"); - - elseif string.find(LCOIresponseArray, "User Unknown") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckOut-User Unknown"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, LCOIresponseArray}); - SaveDataSource("Transaction"); - - elseif string.find(LCOIresponseArray, "Problem") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, Settings.LendingCheckOutItemFailQueue}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, LCOIresponseArray}); - SaveDataSource("Transaction"); - - else - LogDebug("No Problems found in NCIP Response.") - ExecuteCommand("AddNote", {currentTN, "NCIP Response for LendingCheckOutItem received successfully"}); - SaveDataSource("Transaction"); - end -end - -function LendingCheckInItem(transactionProcessedEventArgs) - LogDebug("LendingCheckInItem - start"); - luanet.load_assembly("System"); - local ncipAddress = Settings.NCIP_Responder_URL; - local LCIImessage = buildCheckInItemLending(); - LogDebug("creating LendingCheckInItem message[" .. LCIImessage .. "]"); - local WebClient = luanet.import_type("System.Net.WebClient"); - local myWebClient = WebClient(); - LogDebug("WebClient Created"); - LogDebug("Adding Header"); - myWebClient.Headers:Add("Content-Type", "text/xml; charset=UTF-8"); - LogDebug("Setting Upload String"); - local LCIIresponseArray = myWebClient:UploadString(ncipAddress, LCIImessage); - LogDebug("Upload response was[" .. LCIIresponseArray .. "]"); - - LogDebug("Starting error catch") - local currentTN = GetFieldValue("Transaction", "TransactionNumber"); - - if string.find(LCIIresponseArray, "Unknown Item") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckIn-Unknown Item"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, LCIIresponseArray}); - SaveDataSource("Transaction"); - - elseif string.find(LCIIresponseArray, "Item Not Checked Out") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckIn-Not Checked Out"}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, LCIIresponseArray}); - SaveDataSource("Transaction"); - - elseif string.find(LCIIresponseArray, "Problem") then - LogDebug("NCIP Error: ReRouting Transaction"); - ExecuteCommand("Route", {currentTN, Settings.LendingCheckInItemFailQueue}); - LogDebug("Adding Note to Transaction with NCIP Client Error"); - ExecuteCommand("AddNote", {currentTN, LCIIresponseArray}); - SaveDataSource("Transaction"); - - else - LogDebug("No Problems found in NCIP Response.") - ExecuteCommand("AddNote", {currentTN, "NCIP Response for LendingCheckInItem received successfully"}); - SaveDataSource("Transaction"); - end -end - ---AcceptItem XML Builder for Borrowing ---sometimes Author fields and Title fields are blank -function buildAcceptItem() -local tn = ""; -local dr = tostring(GetFieldValue("Transaction", "DueDate")); -local df = string.match(dr, "%d+\/%d+\/%d+"); -local mn, dy, yr = string.match(df, "(%d+)/(%d+)/(%d+)"); -local mnt = string.format("%02d",mn); -local dya = string.format("%02d",dy); -local user = GetFieldValue("Transaction", "Username"); -if Settings.Use_Prefixes then - local t = GetFieldValue("Transaction", "TransactionNumber"); - if GetFieldValue("Transaction", "LibraryUseOnly") and GetFieldValue("Transaction", "RenewalsAllowed") then - tn = Settings.Prefix_for_LibraryUseOnly_and_RenewablesAllowed .. t; - end - if GetFieldValue("Transaction", "LibraryUseOnly") and GetFieldValue("Transaction", "RenewalsAllowed") ~= true then - tn = Settings.Prefix_for_LibraryUseOnly .. t; - end - if GetFieldValue("Transaction", "RenewalsAllowed") and GetFieldValue("Transaction", "LibraryUseOnly") ~= true then - tn = Settings.Prefix_for_RenewablesAllowed .. t; - end - if GetFieldValue("Transaction", "LibraryUseOnly") ~= true and GetFieldValue("Transaction", "RenewalsAllowed") ~= true then - tn = Settings.acceptItem_Transaction_Prefix .. t; - end -else - tn = Settings.acceptItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); -end - -local author = GetFieldValue("Transaction", "LoanAuthor"); - if author == nil then - author = ""; - end - if string.find(author, "&") ~= nil then - author = string.gsub(author, "&", "and"); - end -local title = GetFieldValue("Transaction", "LoanTitle"); - if title == nil then - title = ""; - end - if string.find(title, "&") ~= nil then - title = string.gsub(title, "&", "and"); - end - -local pickup_location_full = GetFieldValue("Transaction", "Location"); -local sublibraries = assert(io.open(AddonInfo.Directory .. "\\sublibraries.txt", "r")); -local pickup_location = ""; -local templine = nil; - if sublibraries ~= nil then - for line in sublibraries:lines() do - if string.find(line, pickup_location_full) ~= nil then - pickup_location = string.sub(line, line:len() - 2); - break; - - else - pickup_location = "nothing"; - end - end - sublibraries:close(); - end - -local m = ''; - m = m .. '' - m = m .. '' - m = m .. '' - m = m .. '' - m = m .. '' - m = m .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - m = m .. '' - m = m .. '' - m = m .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - m = m .. '' - m = m .. '' .. Settings.ApplicationProfileType .. '' - m = m .. '' - m = m .. '' - m = m .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - m = m .. '' .. tn .. '' - m = m .. '' - m = m .. 'Hold For Pickup And Notify' - m = m .. '' - m = m .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - m = m .. 'Barcode Id' - m = m .. '' .. user .. '' - m = m .. '' - m = m .. '' - m = m .. '' .. tn .. '' - m = m .. '' - m = m .. '' .. yr .. '-' .. mnt .. '-' .. dya .. 'T23:59:00' .. '' --- m = m .. '' .. pickup_location .. '' - m = m .. '' - m = m .. '' - m = m .. '' .. author .. '' - m = m .. '' .. title .. '' - m = m .. '' - m = m .. '' - m = m .. '' - m = m .. '' - return m; - end - ---ReturnedItem XML Builder for Borrowing (Patron Returns) -function buildCheckInItemBorrowing() -local tn = ""; -local user = GetFieldValue("Transaction", "Username"); -if Settings.Use_Prefixes then - local t = GetFieldValue("Transaction", "TransactionNumber"); - if GetFieldValue("Transaction", "LibraryUseOnly") and GetFieldValue("Transaction", "RenewalsAllowed") then - tn = Settings.Prefix_for_LibraryUseOnly_and_RenewablesAllowed .. t; - end - if GetFieldValue("Transaction", "LibraryUseOnly") and GetFieldValue("Transaction", "RenewalsAllowed") ~= true then - tn = Settings.Prefix_for_LibraryUseOnly .. t; - end - if GetFieldValue("Transaction", "RenewalsAllowed") and GetFieldValue("Transaction", "LibraryUseOnly") ~= true then - tn = Settings.Prefix_for_RenewablesAllowed .. t; - end - if GetFieldValue("Transaction", "LibraryUseOnly") ~= true and GetFieldValue("Transaction", "RenewalsAllowed") ~= true then - tn = Settings.acceptItem_Transaction_Prefix .. t; - end -else - tn = Settings.acceptItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); -end - -local cib = ''; - cib = cib .. '' - cib = cib .. '' - cib = cib .. '' - cib = cib .. '' - cib = cib .. '' - cib = cib .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - cib = cib .. '' - cib = cib .. '' - cib = cib .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - cib = cib .. '' - cib = cib .. '' .. Settings.ApplicationProfileType .. '' - cib = cib .. '' - cib = cib .. '' - cib = cib .. '' .. user .. '' - cib = cib .. '' - cib = cib .. '' - cib = cib .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - cib = cib .. '' .. tn .. '' - cib = cib .. '' - cib = cib .. '' - cib = cib .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - cib = cib .. '' .. tn .. '' - cib = cib .. '' - cib = cib .. '' - cib = cib .. '' - return cib; -end - ---ReturnedItem XML Builder for Lending (Library Returns) -function buildCheckInItemLending() -local ttype = ""; -local user = GetFieldValue("Transaction", "Username"); -local refnumber = GetFieldValue("Transaction", "ReferenceNumber"); -local trantype = GetFieldValue("Transaction", "ProcessType"); - if trantype == "Borrowing" then - ttype = Settings.checkInItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); - elseif trantype == "Lending" then - ttype = GetFieldValue("Transaction", "ReferenceNumber"); - else - ttype = Settings.checkInItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); - end - -local cil = ''; - cil = cil .. '' - cil = cil .. '' - cil = cil .. '' - cil = cil .. '' - cil = cil .. '' - cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - cil = cil .. '' - cil = cil .. '' - cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - cil = cil .. '' - cil = cil .. '' .. Settings.ApplicationProfileType .. '' - cil = cil .. '' - cil = cil .. '' - cil = cil .. '' .. user .. '' - cil = cil .. '' - cil = cil .. '' - cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - cil = cil .. '' .. refnumber .. '' - cil = cil .. '' - cil = cil .. '' - cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - cil = cil .. '' .. ttype .. '' - cil = cil .. '' - cil = cil .. '' - cil = cil .. '' - return cil; -end - ---CheckOutItem XML Builder for Lending -function buildCheckOutItem() -local dr = tostring(GetFieldValue("Transaction", "DueDate")); -local df = string.match(dr, "%d+\/%d+\/%d+"); -local mn, dy, yr = string.match(df, "(%d+)/(%d+)/(%d+)"); -local mnt = string.format("%02d",mn); -local dya = string.format("%02d",dy); -local pseudopatron = 'pseudopatron'; -local refnumber = GetFieldValue("Transaction", "ReferenceNumber"); -local tn = Settings.checkOutItem_RequestIdentifierValue_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); -local coi = ''; - coi = coi .. '' - coi = coi .. '' - coi = coi .. '' - coi = coi .. '' - coi = coi .. '' - coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - coi = coi .. '' - coi = coi .. '' - coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - coi = coi .. '' - coi = coi .. '' .. Settings.ApplicationProfileType .. '' - coi = coi .. '' - coi = coi .. '' - coi = coi .. '' .. pseudopatron .. '' - coi = coi .. '' - coi = coi .. '' - coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - coi = coi .. '' .. refnumber .. '' - coi = coi .. '' - coi = coi .. '' - coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - coi = coi .. '' .. tn .. '' - coi = coi .. '' - coi = coi .. '' .. yr .. '-' .. mnt .. '-' .. dya .. 'T23:59:00' .. '' - coi = coi .. '' - coi = coi .. '' - return coi; - -end +--About IDS_NCIP_Client 1.5 +-- +--Author: Bill Jones III, SUNY Geneseo, IDS Project, jonesw@geneseo.edu +--Modified by: Tom McNulty, VCU Libraries, tmcnulty@vcu.edu +--Modified by: Kevin Reiss, Princeton University Library, kr2@princeton.edu; Peter Green, Princeton University Library, pmgreen@princeton.edu; Mark Zelesky, Princeton University Library, mzelesky@princeton.edu +--System Addon used for ILLiad to communicate with Alma through NCIP protocol +-- +--Description of Registered Event Handlers for ILLiad +-- +--BorrowingRequestCheckedInFromLibrary +--This will trigger whenever a non-cancelled transaction is processed from the Check In From Lending Library +--batch processing form using the Check In, Check In Scan Now, or Check In Scan Later buttons. +-- +--BorrowingRequestCheckedInFromCustomer +--This will trigger whenever an item is processed from the Check Item In batch processing form, +--regardless of its status (such as if it were cancelled or never picked up by the customer). +-- +--LendingRequestCheckOut +--This will trigger whenever a transaction is processed from the Lending Update Stacks Searching form +--using the Mark Found or Mark Found Scan Now buttons. This will also work on the Lending Processing ribbon +--of the Request form for the Mark Found and Mark Found Scan Now buttons. +-- +--LendingRequestCheckIn +--This will trigger whenever a transaction is processed from the Lending Returns batch processing form. +-- +--Queue names have a limit of 40 characters (including spaces). + + +local Settings = {}; + +--NCIP Responder URL +Settings.NCIP_Responder_URL = GetSetting("NCIP_Responder_URL"); + +--Change Prefix Settings for Transactions +Settings.Use_Prefixes = GetSetting("Use_Prefixes"); +Settings.Prefix_for_LibraryUseOnly = GetSetting("Prefix_for_LibraryUseOnly"); +Settings.Prefix_for_RenewablesAllowed = GetSetting("Prefix_for_RenewablesAllowed"); +Settings.Prefix_for_LibraryUseOnly_and_RenewablesAllowed = GetSetting("Prefix_for_LibraryUseOnly_and_RenewablesAllowed"); + +--NCIP Error Status Changes +Settings.BorrowingAcceptItemFailQueue = GetSetting("BorrowingAcceptItemFailQueue"); +Settings.BorrowingCheckInItemFailQueue = GetSetting("BorrowingCheckInItemFailQueue"); +Settings.LendingCheckOutItemFailQueue = GetSetting("LendingCheckOutItemFailQueue"); +Settings.LendingCheckInItemFailQueue = GetSetting("LendingCheckInItemFailQueue"); + +--acceptItem settings +Settings.acceptItem_from_uniqueAgency_value = GetSetting("acceptItem_from_uniqueAgency_value"); +Settings.acceptItem_Transaction_Prefix = GetSetting("checkInItem_Transaction_Prefix"); + +--checkInItem settings +Settings.checkInItem_EnablePatronBorrowingReturns = GetSetting("EnablePatronBorrowingReturns"); +Settings.ApplicationProfileType = GetSetting("ApplicationProfileType"); +Settings.checkInItem_Transaction_Prefix = GetSetting("checkInItem_Transaction_Prefix"); + +--checkOutItem settings +Settings.checkOutItem_RequestIdentifierValue_Prefix = GetSetting("checkOutItem_RequestIdentifierValue_Prefix"); + +function Init() + RegisterSystemEventHandler("BorrowingRequestCheckedInFromLibrary", "BorrowingAcceptItem"); + RegisterSystemEventHandler("BorrowingRequestCheckedInFromCustomer", "BorrowingCheckInItem"); + RegisterSystemEventHandler("LendingRequestCheckOut", "LendingCheckOutItem"); + RegisterSystemEventHandler("LendingRequestCheckIn", "LendingCheckInItem"); +end + +--Borrowing Functions +function BorrowingAcceptItem(transactionProcessedEventArgs) + LogDebug("BorrowingAcceptItem - start"); + + if GetFieldValue("Transaction", "RequestType") == "Loan" then + + LogDebug("Item Request has been identified as a Loan and not Article - process started."); + + luanet.load_assembly("System"); + local ncipAddress = Settings.NCIP_Responder_URL; + local BAImessage = buildAcceptItem(); + LogDebug("creating BorrowingAcceptItem message[" .. BAImessage .. "]"); + local WebClient = luanet.import_type("System.Net.WebClient"); + local myWebClient = WebClient(); + LogDebug("WebClient Created"); + LogDebug("Adding Header"); + + LogDebug("Setting Upload String"); + local BAIresponseArray = myWebClient:UploadString(ncipAddress, BAImessage); + LogDebug("Upload response was[" .. BAIresponseArray .. "]"); + + LogDebug("Starting error catch") + local currentTN = GetFieldValue("Transaction", "TransactionNumber"); + + if string.find (BAIresponseArray, "Item Not Checked Out") then + LogDebug("NCIP Error: Item Not Checked Out"); + ExecuteCommand("Route", {currentTN, "NCIP Error: BorAcceptItem-NotCheckedOut"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, BAIresponseArray}); + SaveDataSource("Transaction"); + + elseif string.find(BAIresponseArray, "User Authentication Failed") then + LogDebug("NCIP Error: User Authentication Failed"); + ExecuteCommand("Route", {currentTN, "NCIP Error: BorAcceptItem-UserAuthFail"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, BAIresponseArray}); + SaveDataSource("Transaction"); + + --this error came up from non-standard characters in the title (umlauts) + elseif string.find(BAIresponseArray, "Service is not known") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, "NCIP Error: BorAcceptItem-SrvcNotKnown"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, BAIresponseArray}); + SaveDataSource("Transaction"); + + elseif string.find(BAIresponseArray, "Problem") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, Settings.BorrowingAcceptItemFailQueue}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, BAIresponseArray}); + SaveDataSource("Transaction"); + + else + LogDebug("No Problems found in NCIP Response.") + ExecuteCommand("AddNote", {currentTN, "NCIP Response for BorrowingAcceptItem received successfully"}); + SaveDataSource("Transaction"); + end + end +end + + +function BorrowingCheckInItem(transactionProcessedEventArgs) + + LogDebug("BorrowingCheckInItem - start"); + luanet.load_assembly("System"); + local ncipAddress = Settings.NCIP_Responder_URL; + local BCIImessage = buildCheckInItemBorrowing(); + LogDebug("creating BorrowingCheckInItem message[" .. BCIImessage .. "]"); + local WebClient = luanet.import_type("System.Net.WebClient"); + local myWebClient = WebClient(); + LogDebug("WebClient Created"); + LogDebug("Adding Header"); + myWebClient.Headers:Add("Content-Type", "text/xml; charset=UTF-8"); + LogDebug("Setting Upload String"); + local BCIIresponseArray = myWebClient:UploadString(ncipAddress, BCIImessage); + LogDebug("Upload response was[" .. BCIIresponseArray .. "]"); + + LogDebug("Starting error catch") + local currentTN = GetFieldValue("Transaction", "TransactionNumber"); + + if string.find(BCIIresponseArray, "Unknown Item") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, "NCIP Error: BorCheckIn-UnknownItem"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, BCIIresponseArray}); + SaveDataSource("Transaction"); + + elseif string.find(BCIIresponseArray, "Item Not Checked Out") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, "NCIP Error: BorCheckIn-NotCheckedOut"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, BCIIresponseArray}); + SaveDataSource("Transaction"); + + elseif string.find(BCIIresponseArray, "Problem") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, Settings.BorrowingCheckInItemFailQueue}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, BCIIresponseArray}); + SaveDataSource("Transaction"); + + else + LogDebug("No Problems found in NCIP Response.") + ExecuteCommand("AddNote", {currentTN, "NCIP Response for BorrowingCheckInItem received successfully"}); + SaveDataSource("Transaction"); + end +end + +--Lending Functions +function LendingCheckOutItem(transactionProcessedEventArgs) + LogDebug("DEBUG -- LendingCheckOutItem - start"); + luanet.load_assembly("System"); + local ncipAddress = Settings.NCIP_Responder_URL; + local LCOImessage = buildCheckOutItem(); + LogDebug("creating LendingCheckOutItem message[" .. LCOImessage .. "]"); + local WebClient = luanet.import_type("System.Net.WebClient"); + local myWebClient = WebClient(); + LogDebug("WebClient Created"); + LogDebug("Adding Header"); + myWebClient.Headers:Add("Content-Type", "text/xml; charset=UTF-8"); + LogDebug("Setting Upload String"); + local LCOIresponseArray = myWebClient:UploadString(ncipAddress, LCOImessage); + LogDebug("Upload response was[" .. LCOIresponseArray .. "]"); + + LogDebug("Starting error catch") + local currentTN = GetFieldValue("Transaction", "TransactionNumber"); + + if string.find(LCOIresponseArray, "Apply to circulation desk - Loan cannot be renewed (no change in due date)") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckOut-No Change Due Date"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, LCOIresponseArray}); + SaveDataSource("Transaction"); + + elseif string.find(LCOIresponseArray, "User Ineligible To Check Out This Item") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckOut-User Ineligible"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, LCOIresponseArray}); + SaveDataSource("Transaction"); + + elseif string.find(LCOIresponseArray, "User Unknown") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckOut-User Unknown"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, LCOIresponseArray}); + SaveDataSource("Transaction"); + + elseif string.find(LCOIresponseArray, "Problem") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, Settings.LendingCheckOutItemFailQueue}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, LCOIresponseArray}); + SaveDataSource("Transaction"); + + else + LogDebug("No Problems found in NCIP Response.") + ExecuteCommand("AddNote", {currentTN, "NCIP Response for LendingCheckOutItem received successfully"}); + SaveDataSource("Transaction"); + end +end + +function LendingCheckInItem(transactionProcessedEventArgs) + LogDebug("LendingCheckInItem - start"); + luanet.load_assembly("System"); + local ncipAddress = Settings.NCIP_Responder_URL; + local LCIImessage = buildCheckInItemLending(); + LogDebug("creating LendingCheckInItem message[" .. LCIImessage .. "]"); + local WebClient = luanet.import_type("System.Net.WebClient"); + local myWebClient = WebClient(); + LogDebug("WebClient Created"); + LogDebug("Adding Header"); + myWebClient.Headers:Add("Content-Type", "text/xml; charset=UTF-8"); + LogDebug("Setting Upload String"); + local LCIIresponseArray = myWebClient:UploadString(ncipAddress, LCIImessage); + LogDebug("Upload response was[" .. LCIIresponseArray .. "]"); + + LogDebug("Starting error catch") + local currentTN = GetFieldValue("Transaction", "TransactionNumber"); + + if string.find(LCIIresponseArray, "Unknown Item") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckIn-Unknown Item"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, LCIIresponseArray}); + SaveDataSource("Transaction"); + + elseif string.find(LCIIresponseArray, "Item Not Checked Out") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, "NCIP Error: LCheckIn-Not Checked Out"}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, LCIIresponseArray}); + SaveDataSource("Transaction"); + + elseif string.find(LCIIresponseArray, "Problem") then + LogDebug("NCIP Error: ReRouting Transaction"); + ExecuteCommand("Route", {currentTN, Settings.LendingCheckInItemFailQueue}); + LogDebug("Adding Note to Transaction with NCIP Client Error"); + ExecuteCommand("AddNote", {currentTN, LCIIresponseArray}); + SaveDataSource("Transaction"); + + else + LogDebug("No Problems found in NCIP Response.") + ExecuteCommand("AddNote", {currentTN, "NCIP Response for LendingCheckInItem received successfully"}); + SaveDataSource("Transaction"); + end +end + +--AcceptItem XML Builder for Borrowing +--sometimes Author fields and Title fields are blank +function buildAcceptItem() +local tn = ""; +local dr = tostring(GetFieldValue("Transaction", "DueDate")); +local df = string.match(dr, "%d+\/%d+\/%d+"); +local mn, dy, yr = string.match(df, "(%d+)/(%d+)/(%d+)"); +local mnt = string.format("%02d",mn); +local dya = string.format("%02d",dy); +local user = GetFieldValue("Transaction", "Username"); +local t = GetFieldValue("Transaction", "TransactionNumber"); +if Settings.Use_Prefixes then + if GetFieldValue("Transaction", "LibraryUseOnly") and GetFieldValue("Transaction", "RenewalsAllowed") then + tn = Settings.Prefix_for_LibraryUseOnly_and_RenewablesAllowed .. t; + end + if GetFieldValue("Transaction", "LibraryUseOnly") and GetFieldValue("Transaction", "RenewalsAllowed") ~= true then + tn = Settings.Prefix_for_LibraryUseOnly .. t; + end + if GetFieldValue("Transaction", "RenewalsAllowed") and GetFieldValue("Transaction", "LibraryUseOnly") ~= true then + tn = Settings.Prefix_for_RenewablesAllowed .. t; + end + if GetFieldValue("Transaction", "LibraryUseOnly") ~= true and GetFieldValue("Transaction", "RenewalsAllowed") ~= true then + tn = Settings.acceptItem_Transaction_Prefix .. t; + end +else + tn = Settings.acceptItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); +end + +local author = GetFieldValue("Transaction", "LoanAuthor"); + if author == nil then + author = ""; + end + if string.find(author, "&") ~= nil then + author = string.gsub(author, "&", "and"); + end +local title = GetFieldValue("Transaction", "LoanTitle"); + if title == nil then + title = ""; + end + if string.find(title, "&") ~= nil then + title = string.gsub(title, "&", "and"); + end + +local pickup_location_full = GetFieldValue("Transaction", "Location"); +local sublibraries = assert(io.open(AddonInfo.Directory .. "\\sublibraries.txt", "r")); +local pickup_location = ""; +local templine = nil; + if sublibraries ~= nil then + for line in sublibraries:lines() do + if string.find(line, pickup_location_full) ~= nil then + pickup_location = string.sub(line, line:len() - 2); + break; + + else + pickup_location = "nothing"; + end + end + sublibraries:close(); + end + +local m = ''; + m = m .. '' + m = m .. '' + m = m .. '' + m = m .. '' + m = m .. '' + m = m .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + m = m .. '' + m = m .. '' + m = m .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + m = m .. '' + m = m .. '' .. Settings.ApplicationProfileType .. '' + m = m .. '' + m = m .. '' + m = m .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + m = m .. '' .. tn .. '' + m = m .. '' + m = m .. 'Hold For Pickup And Notify' + m = m .. '' + m = m .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + m = m .. 'Barcode Id' + m = m .. '' .. user .. '' + m = m .. '' + m = m .. '' + m = m .. '' .. t .. '' + m = m .. '' + m = m .. '' .. yr .. '-' .. mnt .. '-' .. dya .. 'T23:59:00' .. '' +-- m = m .. '' .. pickup_location .. '' + m = m .. '' + m = m .. '' + m = m .. '' .. author .. '' + m = m .. '' .. title .. '' + m = m .. '' + m = m .. '' + m = m .. '' + m = m .. '' + return m; + end + +--ReturnedItem XML Builder for Borrowing (Patron Returns) +function buildCheckInItemBorrowing() +local tn = ""; +local t = GetFieldValue("Transaction", "TransactionNumber"); +local user = GetFieldValue("Transaction", "Username"); +if Settings.Use_Prefixes then + if GetFieldValue("Transaction", "LibraryUseOnly") and GetFieldValue("Transaction", "RenewalsAllowed") then + tn = Settings.Prefix_for_LibraryUseOnly_and_RenewablesAllowed .. t; + end + if GetFieldValue("Transaction", "LibraryUseOnly") and GetFieldValue("Transaction", "RenewalsAllowed") ~= true then + tn = Settings.Prefix_for_LibraryUseOnly .. t; + end + if GetFieldValue("Transaction", "RenewalsAllowed") and GetFieldValue("Transaction", "LibraryUseOnly") ~= true then + tn = Settings.Prefix_for_RenewablesAllowed .. t; + end + if GetFieldValue("Transaction", "LibraryUseOnly") ~= true and GetFieldValue("Transaction", "RenewalsAllowed") ~= true then + tn = Settings.acceptItem_Transaction_Prefix .. t; + end +else + tn = Settings.acceptItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); +end + +local cib = ''; + cib = cib .. '' + cib = cib .. '' + cib = cib .. '' + cib = cib .. '' + cib = cib .. '' + cib = cib .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + cib = cib .. '' + cib = cib .. '' + cib = cib .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + cib = cib .. '' + cib = cib .. '' .. Settings.ApplicationProfileType .. '' + cib = cib .. '' + cib = cib .. '' + cib = cib .. '' .. user .. '' + cib = cib .. '' + cib = cib .. '' + cib = cib .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + cib = cib .. '' .. t .. '' + cib = cib .. '' + cib = cib .. '' + cib = cib .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + cib = cib .. '' .. tn .. '' + cib = cib .. '' + cib = cib .. '' + cib = cib .. '' + return cib; +end + +--ReturnedItem XML Builder for Lending (Library Returns) +function buildCheckInItemLending() +local ttype = ""; +local user = GetFieldValue("Transaction", "Username"); +local refnumber = GetFieldValue("Transaction", "ReferenceNumber"); +local trantype = GetFieldValue("Transaction", "ProcessType"); + if trantype == "Borrowing" then + ttype = Settings.checkInItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); + elseif trantype == "Lending" then + ttype = GetFieldValue("Transaction", "ReferenceNumber"); + else + ttype = Settings.checkInItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); + end + +local cil = ''; + cil = cil .. '' + cil = cil .. '' + cil = cil .. '' + cil = cil .. '' + cil = cil .. '' + cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + cil = cil .. '' + cil = cil .. '' + cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + cil = cil .. '' + cil = cil .. '' .. Settings.ApplicationProfileType .. '' + cil = cil .. '' + cil = cil .. '' + cil = cil .. '' .. user .. '' + cil = cil .. '' + cil = cil .. '' + cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + cil = cil .. '' .. refnumber .. '' + cil = cil .. '' + cil = cil .. '' + cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + cil = cil .. '' .. ttype .. '' + cil = cil .. '' + cil = cil .. '' + cil = cil .. '' + return cil; +end + +--CheckOutItem XML Builder for Lending +function buildCheckOutItem() +local dr = tostring(GetFieldValue("Transaction", "DueDate")); +local df = string.match(dr, "%d+\/%d+\/%d+"); +local mn, dy, yr = string.match(df, "(%d+)/(%d+)/(%d+)"); +local mnt = string.format("%02d",mn); +local dya = string.format("%02d",dy); +local pseudopatron = 'pseudopatron'; +local refnumber = GetFieldValue("Transaction", "ReferenceNumber"); +local tn = Settings.checkOutItem_RequestIdentifierValue_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); +local coi = ''; + coi = coi .. '' + coi = coi .. '' + coi = coi .. '' + coi = coi .. '' + coi = coi .. '' + coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + coi = coi .. '' + coi = coi .. '' + coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + coi = coi .. '' + coi = coi .. '' .. Settings.ApplicationProfileType .. '' + coi = coi .. '' + coi = coi .. '' + coi = coi .. '' .. pseudopatron .. '' + coi = coi .. '' + coi = coi .. '' + coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + coi = coi .. '' .. refnumber .. '' + coi = coi .. '' + coi = coi .. '' + coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' + coi = coi .. '' .. tn .. '' + coi = coi .. '' + coi = coi .. '' .. yr .. '-' .. mnt .. '-' .. dya .. 'T23:59:00' .. '' + coi = coi .. '' + coi = coi .. '' + return coi; + +end diff --git a/Config.xml b/Config.xml old mode 100755 new mode 100644 index 3662f09..aacbcdb --- a/Config.xml +++ b/Config.xml @@ -1,52 +1,55 @@ - - - ALMA_NCIP_Client - Tom McNulty, VCU Libraries - Bill Jones, IDS Project - 2.0 - True - System - This system level addon allows for ILLiad to communicate with Alma via NCIP protocol. - - - - This setting value is the address for the NCIP Responder URL. For Alma this will always be https://alma.exlibrisgroup.com/view/NCIPServlet unless you are testing on a sandbox version of Alma. - - - This is your institutional Alma Code. - - - Input the Resource Sharing Partner code used in Alma. - - - This designates the name of the queue a Borrowing Transaction will be moved to if the BorrowingAcceptItem function fails. - - - This designates the name of the queue a Borrowing Transaction will be moved to if the BorrowingCheckInItem function fails. - - - This designates the name of the queue a Lending Transaction will be moved to if the CheckOutItem function fails. - - - This designates the name of the queue a Lending Transaction will be moved to if the CheckInItem function fails. - - - When this setting is enabled, patron returns will go through ILLiad and a message is sent to Alma. When this setting is disabled, patron returns will go through ILLiad and will need to also be returned through Alma. - - - Determines whether or not you want to change prefixes of a transaction based on specific criteria (below). - - - This setting allows you to change the prefix of a transaction that is marked LibraryUseOnly Yes. - - - This setting allows you to change the prefix of a transaction that is marked RenewalsAllowed Yes. - - - This setting allows you to change the prefix of a transaction that is marked both LibraryUseOnly and RenewalsAllowed Yes. - - - - IDS_NCIP_Client.lua - - \ No newline at end of file + + + ALMA_NCIP_Client + Tom McNulty, VCU Libraries + Bill Jones, IDS Project + 2.0 + True + System + This system level addon allows for ILLiad to communicate with Alma via NCIP protocol. + + + + This setting value is the address for the NCIP Responder URL. For Alma this will always be https://alma.exlibrisgroup.com/view/NCIPServlet unless you are testing on a sandbox version of Alma. + + + This is your institutional Alma Code. + + + Input the Resource Sharing Partner code used in Alma. + + + This designates the name of the queue a Borrowing Transaction will be moved to if the BorrowingAcceptItem function fails. + + + This designates the name of the queue a Borrowing Transaction will be moved to if the BorrowingCheckInItem function fails. + + + This designates the name of the queue a Lending Transaction will be moved to if the CheckOutItem function fails. + + + This designates the name of the queue a Lending Transaction will be moved to if the CheckInItem function fails. + + + When this setting is enabled, patron returns will go through ILLiad and a message is sent to Alma. When this setting is disabled, patron returns will go through ILLiad and will need to also be returned through Alma. + + + Determines whether or not you want to change prefixes of a transaction based on specific criteria (below). + + + This setting allows you to change the prefix of a transaction that is marked LibraryUseOnly Yes. + + + This setting allows you to change the prefix of a transaction that is marked RenewalsAllowed Yes. + + + This setting allows you to change the prefix of a transaction that is marked both LibraryUseOnly and RenewalsAllowed Yes. + + + Default transaction prefix for the request identifier value in NCIP calls. + + + + ALMA_NCIP_Client.lua + + From 85d3464f4d8aaea1e9fd6459b095ef0b1b87d6eb Mon Sep 17 00:00:00 2001 From: Peter Green Date: Fri, 21 Apr 2023 12:08:13 -0400 Subject: [PATCH 2/2] restoring ItemNumber and pickup locations --- ALMA_NCIP_Client.lua | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/ALMA_NCIP_Client.lua b/ALMA_NCIP_Client.lua index 64dbd1d..e6e4cf3 100644 --- a/ALMA_NCIP_Client.lua +++ b/ALMA_NCIP_Client.lua @@ -313,23 +313,23 @@ local title = GetFieldValue("Transaction", "LoanTitle"); if string.find(title, "&") ~= nil then title = string.gsub(title, "&", "and"); end - -local pickup_location_full = GetFieldValue("Transaction", "Location"); -local sublibraries = assert(io.open(AddonInfo.Directory .. "\\sublibraries.txt", "r")); -local pickup_location = ""; + +--account for multiple site pickup locations local templine = nil; - if sublibraries ~= nil then - for line in sublibraries:lines() do - if string.find(line, pickup_location_full) ~= nil then - pickup_location = string.sub(line, line:len() - 2); - break; - - else - pickup_location = "nothing"; - end - end - sublibraries:close(); - end +local pickup_location = ""; +local pickup_location_full = GetFieldValue("Transaction", "Site"); + if pickup_location_full == "Architecture" then pickup_location = "arch"; + elseif pickup_location_full == "East Asian" then pickup_location = "eastasian"; + elseif pickup_location_full == "Engineering" then pickup_location = "engineer"; + elseif pickup_location_full == "Firestone" then pickup_location = "firestone"; + elseif pickup_location_full == "Lewis" then pickup_location = "lewis"; + elseif pickup_location_full == "Marquand" then pickup_location = "marquand"; + elseif pickup_location_full == "Music" then pickup_location = "mendel"; + elseif pickup_location_full == "PPL" then pickup_location = "plasma"; + elseif pickup_location_full == "Stokes" then pickup_location = "stokes"; + else + pickup_location = "EMPTY"; +end local m = ''; m = m .. '' @@ -425,12 +425,12 @@ end function buildCheckInItemLending() local ttype = ""; local user = GetFieldValue("Transaction", "Username"); -local refnumber = GetFieldValue("Transaction", "ReferenceNumber"); +local itemnumber = GetFieldValue("Transaction", "ItemNumber"); local trantype = GetFieldValue("Transaction", "ProcessType"); if trantype == "Borrowing" then ttype = Settings.checkInItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); elseif trantype == "Lending" then - ttype = GetFieldValue("Transaction", "ReferenceNumber"); + ttype = GetFieldValue("Transaction", "ItemNumber"); else ttype = Settings.checkInItem_Transaction_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); end @@ -453,7 +453,7 @@ local cil = ''; cil = cil .. '' cil = cil .. '' cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - cil = cil .. '' .. refnumber .. '' + cil = cil .. '' .. itemnumber .. '' cil = cil .. '' cil = cil .. '' cil = cil .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' @@ -472,7 +472,7 @@ local mn, dy, yr = string.match(df, "(%d+)/(%d+)/(%d+)"); local mnt = string.format("%02d",mn); local dya = string.format("%02d",dy); local pseudopatron = 'pseudopatron'; -local refnumber = GetFieldValue("Transaction", "ReferenceNumber"); +local itemnumber = GetFieldValue("Transaction", "ItemNumber"); local tn = Settings.checkOutItem_RequestIdentifierValue_Prefix .. GetFieldValue("Transaction", "TransactionNumber"); local coi = ''; coi = coi .. '' @@ -492,7 +492,7 @@ local coi = ''; coi = coi .. '' coi = coi .. '' coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' - coi = coi .. '' .. refnumber .. '' + coi = coi .. '' .. itemnumber .. '' coi = coi .. '' coi = coi .. '' coi = coi .. '' .. Settings.acceptItem_from_uniqueAgency_value .. '' @@ -503,4 +503,4 @@ local coi = ''; coi = coi .. '' return coi; -end +end \ No newline at end of file