From 6993d10cf20cf7711d956ae54826a1c6ffe7ded1 Mon Sep 17 00:00:00 2001 From: Florian Spreckelsen <f.spreckelsen@indiscale.com> Date: Thu, 20 Feb 2025 18:21:43 +0100 Subject: [PATCH] ENH: Make more parts of the datamodel configurable in js --- .../src/ext/js/a_box_loan_config.js | 18 ++- .../caosdb-webui/src/ext/js/box_loan.js | 142 +++++++++--------- 2 files changed, 85 insertions(+), 75 deletions(-) diff --git a/loan-custom/caosdb-server/caosdb-webui/src/ext/js/a_box_loan_config.js b/loan-custom/caosdb-server/caosdb-webui/src/ext/js/a_box_loan_config.js index 096613e..3ad17f3 100644 --- a/loan-custom/caosdb-server/caosdb-webui/src/ext/js/a_box_loan_config.js +++ b/loan-custom/caosdb-server/caosdb-webui/src/ext/js/a_box_loan_config.js @@ -21,20 +21,30 @@ -var box_loan_config = function () { +var box_loan_config = function() { var datamodel = { loan: "Loan", box: "Box", returned: "returned", + returnAccepted: "returnAccepted", + returnRequested: "returnRequested", + lent: "lent", + loanAccepted: "loanAccepted", + loanRequested: "loanRequested", + location: "Location", + firstName: "firstName", + lastName: "lastName", + email: "email", + number: "Number", + expectedReturn: "expectedReturn", } - var init = function () { - } + var init = function() {} return { init: init, - datamodel: datamodel + datamodel: datamodel }; }(); diff --git a/loan-custom/caosdb-server/caosdb-webui/src/ext/js/box_loan.js b/loan-custom/caosdb-server/caosdb-webui/src/ext/js/box_loan.js index da61f5d..f48b25e 100644 --- a/loan-custom/caosdb-server/caosdb-webui/src/ext/js/box_loan.js +++ b/loan-custom/caosdb-server/caosdb-webui/src/ext/js/box_loan.js @@ -37,17 +37,17 @@ var getHTMLForm = async function(pageName, variables) { var site = await connection.get("webinterface/html/forms/" + pageName + ".html", "html"); var htmltext = site.getElementById("caosdb-form").innerHTML; var req = /\{([0-9a-z-A-Z_]+)\}/g; - return htmltext.replace(req, (match, p1) => { - return variables[p1] || ""; - }); + return htmltext.replace(req, (match, p1) => { + return variables[p1] || ""; + }); } /** * Box Loan, refactored code. */ -var box_loan = function (logger, box_loan_config) { +var box_loan = function(logger, box_loan_config) { - var datamodel = box_loan_config.datamodel; + const datamodel = box_loan_config.datamodel; const _dismiss_button = '<button class="btn btn-secondary box-loan-btn">OK</button>' const _server_did_not_respond = "The server did not respond. Please reload the page."; @@ -78,21 +78,21 @@ var box_loan = function (logger, box_loan_config) { * @param text * @return HTMLElement */ - var getPleaseWaitSpan = function (text = "Processing. Please wait...") { + var getPleaseWaitSpan = function(text = "Processing. Please wait...") { return $('<span>' + text + '</span>')[0]; } /** * Return the actions panel of a box entity. */ - var get_actions_panel = function (box) { + var get_actions_panel = function(box) { return $(box).find('.caosdb-entity-actions-panel'); } /** * Open a mail with recepient address address, subject subject and body text. */ - this.open_mail_generic = function (address, subject, text) { + this.open_mail_generic = function(address, subject, text) { const mailto = 'mailto:' + address + '?subject=' + subject + '&body=' + text; location.href = mailto; } @@ -102,7 +102,7 @@ var box_loan = function (logger, box_loan_config) { * is present in the property list p. * This function is used for determining the loan state. */ - var loan_state_function = function (p, name) { + var loan_state_function = function(p, name) { var p1 = p.filter(x => x.name == name); if (p1.length == 1 && p1[0].value.length > 0) { return true; @@ -113,24 +113,24 @@ var box_loan = function (logger, box_loan_config) { /** * This function returns a string on the state of the loan. */ - var get_loan_state_string = function (loan) { + var get_loan_state_string = function(loan) { const p = getProperties(loan); if (loan_state_function(p, datamodel.returned)) { return "returned"; } - if (loan_state_function(p, "returnAccepted")) { + if (loan_state_function(p, datamodel.returnAccepted)) { return "return_accepted"; } - if (loan_state_function(p, "returnRequested")) { + if (loan_state_function(p, datamodel.returnRequested)) { return "return_requested"; } - if (loan_state_function(p, "lent")) { + if (loan_state_function(p, datamodel.lent)) { return "lent"; } - if (loan_state_function(p, "loanAccepted")) { + if (loan_state_function(p, datamodel.loanAccepted)) { return "loan_accepted"; } - if (loan_state_function(p, "loanRequested")) { + if (loan_state_function(p, datamodel.loanRequested)) { return "loan_requested"; } @@ -143,14 +143,14 @@ var box_loan = function (logger, box_loan_config) { * Query for a Loan entity which references the box and which has no * `returned` property. */ - var get_active_loans = async function (box) { + var get_active_loans = async function(box) { return await query(`FIND ${datamodel.loan} WITH ${datamodel.box} -> ${box.id} AND WHICH DOES NOT HAVE A ${datamodel.returned}`); } /** * Returns detailed information about the loan state of this box: */ - var get_loan_state = async function (box) { + var get_loan_state = async function(box) { const loan_state = { loan: undefined, state: undefined, @@ -167,7 +167,7 @@ var box_loan = function (logger, box_loan_config) { return loan_state; } - var run_script = async function (script, data) { + var run_script = async function(script, data) { const json_str = JSON.stringify(data); const params = { "-p0": { @@ -185,7 +185,7 @@ var box_loan = function (logger, box_loan_config) { } } - var show_result = function (container, result, box) { + var show_result = function(container, result, box) { const dismissable = $('<div/>'); const restore = $(container).children(); restore.hide(); @@ -208,7 +208,7 @@ var box_loan = function (logger, box_loan_config) { } const dismiss_btn = $(_dismiss_button); - dismiss_btn.click(function () { + dismiss_btn.click(function() { dismissable.remove(); restore.show(); init(box); @@ -217,7 +217,7 @@ var box_loan = function (logger, box_loan_config) { } - var get_request_data = function (form) { + var get_request_data = function(form) { const email = $(form).find("#email").val(); const first_name = $(form).find("#first-name").val(); const last_name = $(form).find("#last-name").val(); @@ -252,7 +252,7 @@ var box_loan = function (logger, box_loan_config) { * Generate a borrow function for a box. * This function can also be used to assign values to multiple boxes. */ - var borrow_function = async function (form, box) { + var borrow_function = async function(form, box) { const wait = getPleaseWaitSpan(); const actions_panel = get_actions_panel(box); $(actions_panel).append(wait).find('btn').hide() @@ -271,7 +271,7 @@ var box_loan = function (logger, box_loan_config) { show_result(actions_panel, result, box); } - var _add_form = async function (box, form_generator, submit_callback) { + var _add_form = async function(box, form_generator, submit_callback) { const form = $(await form_generator(box)); form.insertAfter($(box).find('.caosdb-entity-actions-panel')).hide(); form.submit(() => { @@ -290,7 +290,7 @@ var box_loan = function (logger, box_loan_config) { return form[0]; } - var _init_validator = function (form) { + var _init_validator = function(form) { // initiate validator // Workaround for missing checkValidity function: if (form.checkValidity == undefined) { @@ -307,7 +307,7 @@ var box_loan = function (logger, box_loan_config) { /** * Add Return button to boxes' actions panels. */ - var add_return_button = async function (box) { + var add_return_button = async function(box) { const but = $(_return_box_button); get_actions_panel(box).append(but); @@ -317,7 +317,7 @@ var box_loan = function (logger, box_loan_config) { name: "location", label: "", required: true, - query: "FIND Record Location", + query: `FIND Record ${datamodel.location}`, make_desc: getEntityName, } const dd = form_elements.make_form_field(config); @@ -339,7 +339,7 @@ var box_loan = function (logger, box_loan_config) { * If the user is administrator (or a data curator) a button is added * to accept the borrow request. Else a message is added "pending loan request". */ - var add_borrow_accept_button = function (box, loan) { + var add_borrow_accept_button = function(box, loan) { const actionPanel = get_actions_panel(box); if (userIsAdministrator() === true || userHasRole("curator") === true) { const but = $(_accept_loan_button); @@ -354,7 +354,7 @@ var box_loan = function (logger, box_loan_config) { } } - var create_link_to_loan = function (loan, text) { + var create_link_to_loan = function(loan, text) { const loan_id = getEntityID(loan); const href = `${connection.getBasePath()}Entity/${loan_id}`; const title = "Open loan entity."; @@ -366,7 +366,7 @@ var box_loan = function (logger, box_loan_config) { /** * Add Borrow buttons to the boxes' action panels */ - var add_borrow_button = async function (box) { + var add_borrow_button = async function(box) { const but = $(_borrow_box_button); get_actions_panel(box).append(but); @@ -375,7 +375,7 @@ var box_loan = function (logger, box_loan_config) { name: "destination", label: "", required: true, - query: "FIND Record Location", + query: `FIND Record ${datamodel.location}`, make_desc: getEntityName, } const dd = form_elements.make_form_field(config); @@ -394,19 +394,19 @@ var box_loan = function (logger, box_loan_config) { } - var open_accept_loan_mail = async function (loan, box) { + var open_accept_loan_mail = async function(loan, box) { try { const borrower = (await retrieve(getProperty(loan, "Borrower"), case_sensitive = false))[0]; - const email = getProperty(borrower, "email", case_sensitive = false); - const firstName = getProperty(borrower, "firstName", case_sensitive = false); - const lastName = getProperty(borrower, "lastName", case_sensitive = false); - const bn = getProperty(box, "Number", case_sensitive = false); - const date = getProperty(loan, "expectedReturn", case_sensitive = false); + const email = getProperty(borrower, datamodel.email, case_sensitive = false); + const firstName = getProperty(borrower, datamodel.firstName, case_sensitive = false); + const lastName = getProperty(borrower, datamodel.lastName, case_sensitive = false); + const bn = getProperty(box, datamodel.number, case_sensitive = false); + const date = getProperty(loan, datamodel.expectedReturn, case_sensitive = false); - const subject = `Loan Request for Box ${bn} accepted`; + const subject = `Loan Request for ${datamodel.box} ${bn} accepted`; const body = `Dear ${firstName} ${lastName}, %0D%0D` + - `You can pickup box number ${bn} on ${date}. %0D%0D` + + `You can pickup ${datamodel.box} number ${bn} on ${date}. %0D%0D` + `Kind Regards,%0D%0D ${getUserName()}`; open_mail_generic(email, subject, body) } catch (err) { @@ -415,7 +415,7 @@ var box_loan = function (logger, box_loan_config) { } - var accept_loan_function = async function (box) { + var accept_loan_function = async function(box) { const wait = getPleaseWaitSpan(); const actions_panel = get_actions_panel(box); $(actions_panel).append(wait).find('btn').hide() @@ -433,7 +433,7 @@ var box_loan = function (logger, box_loan_config) { open_accept_loan_mail(loan, box); } - var manual_return_function = async function (box) { + var manual_return_function = async function(box) { const wait = getPleaseWaitSpan(); const actions_panel = get_actions_panel(box); $(actions_panel).append(wait).find('btn').hide() @@ -452,7 +452,7 @@ var box_loan = function (logger, box_loan_config) { /** * Add Manual Return button to boxes' actions panels. */ - var add_manual_return_button = function (box, loan) { + var add_manual_return_button = function(box, loan) { const actionPanel = get_actions_panel(box); if (userIsAdministrator() === true || userHasRole("curator") === true) { const but = $(_manual_return_button); @@ -483,7 +483,7 @@ var box_loan = function (logger, box_loan_config) { } - var confirm_loan_function = async function (box) { + var confirm_loan_function = async function(box) { const wait = getPleaseWaitSpan(); const actions_panel = get_actions_panel(box); $(actions_panel).append(wait).find('btn').hide() @@ -500,18 +500,18 @@ var box_loan = function (logger, box_loan_config) { } - var open_reject_return_mail = async function (loan, box) { + var open_reject_return_mail = async function(loan, box) { try { const borrower = (await retrieve(getProperty(loan, "Borrower"), case_sensitive = false))[0]; - const email = getProperty(borrower, "email", case_sensitive = false); - const firstName = getProperty(borrower, "firstName", case_sensitive = false); - const lastName = getProperty(borrower, "lastName", case_sensitive = false); - const bn = getProperty(box, "Number", case_sensitive = false); + const email = getProperty(borrower, datamodel.email, case_sensitive = false); + const firstName = getProperty(borrower, datamodel.firstName, case_sensitive = false); + const lastName = getProperty(borrower, datamodel.lastName, case_sensitive = false); + const bn = getProperty(box, datamodel.number, case_sensitive = false); - const subject = `Return Request for Box ${bn} rejected`; + const subject = `Return Request for ${datamodel.box} ${bn} rejected`; const body = `Dear ${firstName} ${lastName}, %0D%0D` + - `your return request for box number ${bn} cannot be accepted.` + + `your return request for ${datamodel.box} number ${bn} cannot be accepted.` + `Kind Regards,%0D ${getUserName()}`; open_mail_generic(email, subject, body) } catch (err) { @@ -520,18 +520,18 @@ var box_loan = function (logger, box_loan_config) { } - var open_accept_return_mail = async function (loan, box) { + var open_accept_return_mail = async function(loan, box) { try { const borrower = (await retrieve(getProperty(loan, "Borrower"), case_sensitive = false))[0]; - const email = getProperty(borrower, "email", case_sensitive = false); - const firstName = getProperty(borrower, "firstName", case_sensitive = false); - const lastName = getProperty(borrower, "lastName", case_sensitive = false); - const bn = getProperty(box, "Number", case_sensitive = false); - const date = getProperty(loan, "expectedReturn", case_sensitive = false); - const subject = `Return Request for Box ${bn} accepted`; + const email = getProperty(borrower, datamodel.email, case_sensitive = false); + const firstName = getProperty(borrower, datamodel.firstName, case_sensitive = false); + const lastName = getProperty(borrower, datamodel.lastName, case_sensitive = false); + const bn = getProperty(box, datamodel.number, case_sensitive = false); + const date = getProperty(loan, datamodel.expectedReturn, case_sensitive = false); + const subject = `Return Request for ${datamodel.box} ${bn} accepted`; const body = `Dear ${firstName} ${lastName}, %0D%0D` + - `please return box number ${bn} on ${date}. %0D%0D` + + `please return ${datamodel.box} number ${bn} on ${date}. %0D%0D` + `Kind Regards,%0D ${getUserName()}`; open_mail_generic(email, subject, body) } catch (err) { @@ -540,7 +540,7 @@ var box_loan = function (logger, box_loan_config) { } - var accept_return_function = async function (box) { + var accept_return_function = async function(box) { const wait = getPleaseWaitSpan(); const actions_panel = get_actions_panel(box); $(actions_panel).append(wait).find('btn').hide() @@ -559,7 +559,7 @@ var box_loan = function (logger, box_loan_config) { } - var reject_return_function = async function (box) { + var reject_return_function = async function(box) { const wait = getPleaseWaitSpan(); const actions_panel = get_actions_panel(box); $(actions_panel).append(wait).find('btn').hide() @@ -583,7 +583,7 @@ var box_loan = function (logger, box_loan_config) { /** * Add two buttons for confirming or rejecting a return request. */ - var add_confirm_reject_return = function (box, loan) { + var add_confirm_reject_return = function(box, loan) { const actionPanel = get_actions_panel(box); if (userIsAdministrator() === true || userHasRole("curator") === true) { const confirmButton = $(_accept_return_button); @@ -611,7 +611,7 @@ var box_loan = function (logger, box_loan_config) { /** * Add a button for confirming the loan. */ - var add_confirm_loan_button = function (box, loan) { + var add_confirm_loan_button = function(box, loan) { const actionsPanel = get_actions_panel(box); if (userIsAdministrator() === true || userHasRole("curator") === true) { const but = $(_confirm_loan_button); @@ -626,7 +626,7 @@ var box_loan = function (logger, box_loan_config) { } } - var return_function = async function (form, box) { + var return_function = async function(form, box) { const wait = getPleaseWaitSpan(); const actions_panel = get_actions_panel(box); $(actions_panel).append(wait).find('btn').hide() @@ -653,9 +653,9 @@ var box_loan = function (logger, box_loan_config) { /** * Add buttons for borrowing boxes. */ - var add_buttons = function (boxes) { + var add_buttons = function(boxes) { $(boxes).find('.box-loan-btn').remove(); - $(boxes).each(async function () { + $(boxes).each(async function() { const loan_state = await get_loan_state(this); if (typeof loan_state.loan !== "undefined") { if (loan_state.state == "loan_requested") { @@ -680,7 +680,7 @@ var box_loan = function (logger, box_loan_config) { * selectform can be used to generate the form for multiple boxes. * In case selectform is true, box will be ignored. */ - var generate_form_borrow_checkout = async function (box) { + var generate_form_borrow_checkout = async function(box) { const email = window.localStorage["borrower_email"]; const firstname = window.localStorage["borrower_first_name"]; const lastname = window.localStorage["borrower_last_name"]; @@ -714,16 +714,16 @@ var box_loan = function (logger, box_loan_config) { * currentlocation (pre-filled) * comment */ - var generate_return_form = async function (box) { + var generate_return_form = async function(box) { const loan = (await get_active_loans(box))[0]; const borrower = (await retrieve(getProperty(loan, "Borrower", case_sensitive = false)))[0]; - var email = getProperty(borrower, "email", case_sensitive = false); - var first_name = getProperty(borrower, "firstName", + var email = getProperty(borrower, datamodel.email, case_sensitive = false); + var first_name = getProperty(borrower, datamodel.firstName, case_sensitive = false); - var last_name = getProperty(borrower, "lastName", + var last_name = getProperty(borrower, datamodel.lastName, case_sensitive = false); - var exp_return = getProperty(loan, "expectedReturn", + var exp_return = getProperty(loan, datamodel.expectedReturn, case_sensitive = false); var cur_loc = getProperty(loan, "destination", case_sensitive = false); @@ -738,7 +738,7 @@ var box_loan = function (logger, box_loan_config) { }); } - var init = function (boxes) { + var init = function(boxes) { const init_boxes = boxes || $(".caosdb-entity-panel") .not("[data-version-successor]") .filter(function() { -- GitLab