From d422c65938a35209499699d7174732c09d79c6ed Mon Sep 17 00:00:00 2001 From: juanf <juanf@bsse-bs-dock-dhcp-490.ethz.ch> Date: Fri, 26 Oct 2018 15:46:46 +0200 Subject: [PATCH] SSDM-7346 : Order loads fixed when status = NOT_ORDERED --- .../html/js/config/StandardProfile.js | 591 +++++++++--------- 1 file changed, 300 insertions(+), 291 deletions(-) diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js index 10f04cce499..c04e7b62a87 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/StandardProfile.js @@ -372,173 +372,278 @@ $.extend(StandardProfile.prototype, DefaultProfile.prototype, { } else if(sampleTypeCode === "ORDER") { var isExisting = mainController.currentView._sampleFormModel.mode === FormMode.VIEW; var isFromState = false; - if(isExisting) { - // - // Data Structures to Help the reports functionality - // - var order = mainController.currentView._sampleFormModel.sample; - if(order.properties["ORDER_STATE"]) { - isFromState = true; - order = JSON.parse(decodeURIComponent(escape(window.atob(order.properties["ORDER_STATE"])))); - } - - var requests = order.parents; - var providerByPermId = {}; - var productsByProviderPermId = {}; - var quantityByProductPermId = {}; - var absoluteTotalByCurrency = {}; - - // - // Fills data structures - // - for(var rIdx = 0; rIdx < requests.length; rIdx++) { - var request = requests[rIdx]; - var requestProductsAnnotations = FormUtil.getAnnotationsFromSample(request); - var requestProducts = request.parents; - for(var pIdx = 0; pIdx < requestProducts.length; pIdx++) { - var requestProduct = requestProducts[pIdx]; - var requestProductAnnotations = requestProductsAnnotations[requestProduct.permId]; - - if(requestProduct.parents.length === 0) { - Util.showUserError("Product " + requestProduct.code + " does not have a provider, FIX IT!."); - return; - } - var provider = requestProduct.parents[0]; - var providerProducts = productsByProviderPermId[provider.permId]; - if(!providerProducts) { - providerProducts = []; - productsByProviderPermId[provider.permId] = providerProducts; - providerByPermId[provider.permId] = provider; - } - var quantity = quantityByProductPermId[requestProduct.permId]; - if(!quantity) { - quantity = 0; - } - quantity += parseInt(requestProductAnnotations["QUANTITY_OF_ITEMS"]); - if(!quantity) { - Util.showUserError("Product " + requestProduct.code + " from request " + request.code + " does not have a quantity, FIX IT!."); - return; - } - var currencyCode = requestProduct.properties["CURRENCY"]; - if(!currencyCode) { - currencyCode = "N/A"; - } - - var absoluteTotalForCurrency = absoluteTotalByCurrency[currencyCode]; - if(!absoluteTotalForCurrency) { - absoluteTotalForCurrency = 0; - } - - if(requestProduct.properties["PRICE_PER_UNIT"]) { - absoluteTotalForCurrency += parseFloat(requestProduct.properties["PRICE_PER_UNIT"]) * quantity; + if(isExisting) { + var showOrderSummary = function(order) { + var requests = order.parents; + var providerByPermId = {}; + var productsByProviderPermId = {}; + var quantityByProductPermId = {}; + var absoluteTotalByCurrency = {}; + + // + // Fills data structures + // + for(var rIdx = 0; rIdx < requests.length; rIdx++) { + var request = requests[rIdx]; + var requestProductsAnnotations = FormUtil.getAnnotationsFromSample(request); + var requestProducts = request.parents; + for(var pIdx = 0; pIdx < requestProducts.length; pIdx++) { + var requestProduct = requestProducts[pIdx]; + var requestProductAnnotations = requestProductsAnnotations[requestProduct.permId]; + + if(requestProduct.parents.length === 0) { + Util.showUserError("Product " + requestProduct.code + " does not have a provider, FIX IT!."); + return; + } + var provider = requestProduct.parents[0]; + var providerProducts = productsByProviderPermId[provider.permId]; + if(!providerProducts) { + providerProducts = []; + productsByProviderPermId[provider.permId] = providerProducts; + providerByPermId[provider.permId] = provider; + } + var quantity = quantityByProductPermId[requestProduct.permId]; + if(!quantity) { + quantity = 0; + } + quantity += parseInt(requestProductAnnotations["QUANTITY_OF_ITEMS"]); + if(!quantity) { + Util.showUserError("Product " + requestProduct.code + " from request " + request.code + " does not have a quantity, FIX IT!."); + return; + } + var currencyCode = requestProduct.properties["CURRENCY"]; + if(!currencyCode) { + currencyCode = "N/A"; + } + + var absoluteTotalForCurrency = absoluteTotalByCurrency[currencyCode]; + if(!absoluteTotalForCurrency) { + absoluteTotalForCurrency = 0; + } + + if(requestProduct.properties["PRICE_PER_UNIT"]) { + absoluteTotalForCurrency += parseFloat(requestProduct.properties["PRICE_PER_UNIT"]) * quantity; + } + + absoluteTotalByCurrency[currencyCode] = absoluteTotalForCurrency; + + quantityByProductPermId[requestProduct.permId] = quantity; + providerProducts.push(requestProduct); } - - absoluteTotalByCurrency[currencyCode] = absoluteTotalForCurrency; - - quantityByProductPermId[requestProduct.permId] = quantity; - providerProducts.push(requestProduct); } - } - - // - // Button that prints an order report - // - var printOrder = FormUtil.getButtonWithIcon("glyphicon-print",function() { - //Create an order page for each provider - var orderPages = []; - for(var providerPermId in productsByProviderPermId) { - var provider = providerByPermId[providerPermId]; - var preferredSupplierLanguage = provider.properties["COMPANY_LANGUAGE"]; - - var languageLabels = profile.orderLanguage[preferredSupplierLanguage]; - if(!languageLabels) { - languageLabels = profile.orderLanguage["ENGLISH"]; - } - - var providerProducts = productsByProviderPermId[providerPermId]; - - var registrationDate = null; - if(order.registrationDetails && order.registrationDetails.modificationDate) { - registrationDate = order.registrationDetails.modificationDate; - } else if(mainController.currentView._sampleFormModel.sample.registrationDetails && - mainController.currentView._sampleFormModel.sample.registrationDetails.modificationDate) { - registrationDate = mainController.currentView._sampleFormModel.sample.registrationDetails.modificationDate; - } - - var page = languageLabels["ORDER_FORM"]; - page += "\n"; - page += "\n"; - page += languageLabels["ORDER_INFORMATION"]; - page += "\n"; - page += "- " + languageLabels["ORDER_DATE"] + ": " + Util.getFormatedDate(new Date(registrationDate)); - page += "\n"; - page += "- " + languageLabels["ORDER_STATUS"] + ": " + order.properties["ORDER_STATUS"]; - page += "\n"; - page += "- " + languageLabels["ORDER_CODE"] + ": " + order.code; - page += "\n"; - page += "\n"; - page += "\n"; - page += languageLabels["COSTUMER_INFORMATION"]; - page += "\n"; - if(order.properties["SHIP_TO"]) { - page += "- " + languageLabels["SHIP_TO"] + ": " + order.properties["SHIP_TO"]; - page += "\n"; + + // + // Button that prints an order report + // + var printOrder = FormUtil.getButtonWithIcon("glyphicon-print",function() { + //Create an order page for each provider + var orderPages = []; + for(var providerPermId in productsByProviderPermId) { + var provider = providerByPermId[providerPermId]; + var preferredSupplierLanguage = provider.properties["COMPANY_LANGUAGE"]; + + var languageLabels = profile.orderLanguage[preferredSupplierLanguage]; + if(!languageLabels) { + languageLabels = profile.orderLanguage["ENGLISH"]; } - if(order.properties["BILL_TO"]) { - page += "- " + languageLabels["BILL_TO"] + ": " + order.properties["BILL_TO"]; - page += "\n"; + + var providerProducts = productsByProviderPermId[providerPermId]; + + var registrationDate = null; + if(order.registrationDetails && order.registrationDetails.modificationDate) { + registrationDate = order.registrationDetails.modificationDate; + } else if(mainController.currentView._sampleFormModel.sample.registrationDetails && + mainController.currentView._sampleFormModel.sample.registrationDetails.modificationDate) { + registrationDate = mainController.currentView._sampleFormModel.sample.registrationDetails.modificationDate; } - if(order.properties["SHIP_ADDRESS"]) { - page += "- " + languageLabels["SHIP_ADDRESS"] + ": " + order.properties["SHIP_ADDRESS"]; + + var page = languageLabels["ORDER_FORM"]; page += "\n"; - } - if(order.properties["CONTACT_PHONE"]) { - page += "- " + languageLabels["PHONE"] + ": " + order.properties["CONTACT_PHONE"]; page += "\n"; - } - if(order.properties["CONTACT_FAX"]) { - page += "- " + languageLabels["FAX"] + ": " + order.properties["CONTACT_FAX"]; + page += languageLabels["ORDER_INFORMATION"]; page += "\n"; - } - page += "\n"; - page += "\n"; - page += languageLabels["SUPPLIER_INFORMATION"]; - page += "\n"; - if(provider.properties["NAME"]) { - page += "- " + languageLabels["SUPPLIER"] + ": " + provider.properties["NAME"]; + page += "- " + languageLabels["ORDER_DATE"] + ": " + Util.getFormatedDate(new Date(registrationDate)); page += "\n"; - } - if(provider.properties["COMPANY_ADDRESS_LINE_1"]) { - page += "- " + languageLabels["SUPPLIER_ADDRESS_LINE_1"] + ": " + provider.properties["COMPANY_ADDRESS_LINE_1"] + page += "- " + languageLabels["ORDER_STATUS"] + ": " + order.properties["ORDER_STATUS"]; page += "\n"; - } - if(provider.properties["COMPANY_ADDRESS_LINE_2"]) { - page += " " + languageLabels["SUPPLIER_ADDRESS_LINE_2"] + " " + provider.properties["COMPANY_ADDRESS_LINE_2"] + page += "- " + languageLabels["ORDER_CODE"] + ": " + order.code; page += "\n"; - } - if(provider.properties["COMPANY_PHONE"]) { - page += "- " + languageLabels["SUPPLIER_PHONE"] + ": " + provider.properties["COMPANY_PHONE"]; page += "\n"; - } - if(provider.properties["COMPANY_FAX"]) { - page += "- " + languageLabels["SUPPLIER_FAX"] + ": " + provider.properties["COMPANY_FAX"]; page += "\n"; - } - if(provider.properties["COMPANY_EMAIL"]) { - page += "- " + languageLabels["SUPPLIER_EMAIL"] + ": " + provider.properties["COMPANY_EMAIL"]; + page += languageLabels["COSTUMER_INFORMATION"]; page += "\n"; - } - if(provider.properties["CUSTOMER_NUMBER"]) { - page += "- " + languageLabels["CUSTOMER_NUMBER"] + ": " + provider.properties["CUSTOMER_NUMBER"]; + if(order.properties["SHIP_TO"]) { + page += "- " + languageLabels["SHIP_TO"] + ": " + order.properties["SHIP_TO"]; + page += "\n"; + } + if(order.properties["BILL_TO"]) { + page += "- " + languageLabels["BILL_TO"] + ": " + order.properties["BILL_TO"]; + page += "\n"; + } + if(order.properties["SHIP_ADDRESS"]) { + page += "- " + languageLabels["SHIP_ADDRESS"] + ": " + order.properties["SHIP_ADDRESS"]; + page += "\n"; + } + if(order.properties["CONTACT_PHONE"]) { + page += "- " + languageLabels["PHONE"] + ": " + order.properties["CONTACT_PHONE"]; + page += "\n"; + } + if(order.properties["CONTACT_FAX"]) { + page += "- " + languageLabels["FAX"] + ": " + order.properties["CONTACT_FAX"]; + page += "\n"; + } page += "\n"; - } - page += "\n"; - page += "\n"; - page += languageLabels["REQUESTED_PRODUCTS_LABEL"]; - page += "\n"; - page += languageLabels["PRODUCTS_COLUMN_NAMES_LABEL"]; - page += "\n"; - var providerTotalByCurrency = {}; + page += "\n"; + page += languageLabels["SUPPLIER_INFORMATION"]; + page += "\n"; + if(provider.properties["NAME"]) { + page += "- " + languageLabels["SUPPLIER"] + ": " + provider.properties["NAME"]; + page += "\n"; + } + if(provider.properties["COMPANY_ADDRESS_LINE_1"]) { + page += "- " + languageLabels["SUPPLIER_ADDRESS_LINE_1"] + ": " + provider.properties["COMPANY_ADDRESS_LINE_1"] + page += "\n"; + } + if(provider.properties["COMPANY_ADDRESS_LINE_2"]) { + page += " " + languageLabels["SUPPLIER_ADDRESS_LINE_2"] + " " + provider.properties["COMPANY_ADDRESS_LINE_2"] + page += "\n"; + } + if(provider.properties["COMPANY_PHONE"]) { + page += "- " + languageLabels["SUPPLIER_PHONE"] + ": " + provider.properties["COMPANY_PHONE"]; + page += "\n"; + } + if(provider.properties["COMPANY_FAX"]) { + page += "- " + languageLabels["SUPPLIER_FAX"] + ": " + provider.properties["COMPANY_FAX"]; + page += "\n"; + } + if(provider.properties["COMPANY_EMAIL"]) { + page += "- " + languageLabels["SUPPLIER_EMAIL"] + ": " + provider.properties["COMPANY_EMAIL"]; + page += "\n"; + } + if(provider.properties["CUSTOMER_NUMBER"]) { + page += "- " + languageLabels["CUSTOMER_NUMBER"] + ": " + provider.properties["CUSTOMER_NUMBER"]; + page += "\n"; + } + page += "\n"; + page += "\n"; + page += languageLabels["REQUESTED_PRODUCTS_LABEL"]; + page += "\n"; + page += languageLabels["PRODUCTS_COLUMN_NAMES_LABEL"]; + page += "\n"; + var providerTotalByCurrency = {}; + for(var pIdx = 0; pIdx < providerProducts.length; pIdx++) { + var product = providerProducts[pIdx]; + var quantity = quantityByProductPermId[product.permId]; + var unitPriceAsString = product.properties["PRICE_PER_UNIT"]; + var unitPrice = "N/A"; + if(unitPriceAsString) { + unitPrice = parseFloat(unitPriceAsString); + } + var currencyCode = product.properties["CURRENCY"]; + if(!currencyCode) { + currencyCode = "N/A"; + } + page += quantity + "\t\t" + product.properties["NAME"] + "\t\t" + product.properties["CATALOG_NUM"] + "\t\t" + unitPrice + " " + currencyCode; + page += "\n"; + + if(unitPriceAsString) { + var totalForCurrency = providerTotalByCurrency[product.properties["CURRENCY"]]; + if(!totalForCurrency) { + totalForCurrency = 0; + } + totalForCurrency += unitPrice * quantity; + + providerTotalByCurrency[product.properties["CURRENCY"]] = totalForCurrency; + } else { + providerTotalByCurrency[product.properties["CURRENCY"]] = "N/A"; + } + } + page += "\n"; + page += "\n"; + page += "\n"; + + var showTotals = false; + for(var currency in providerTotalByCurrency) { + if(providerTotalByCurrency[currency] > 0) { + showTotals = true; + } + } + if(showTotals) { + page += languageLabels["PRICE_TOTALS_LABEL"] + ":"; + page += "\n"; + for(var currency in providerTotalByCurrency) { + page += providerTotalByCurrency[currency] + " " + currency; + page += "\n"; + } + page += "\n"; + page += "\n"; + page += "\n"; + } + page += languageLabels["ADDITIONAL_INFO_LABEL"]; + page += "\n"; + var additionalInfo = order.properties["ADDITIONAL_INFORMATION"]; + if(!additionalInfo) { + additionalInfo = "N/A"; + } + page += additionalInfo; + orderPages.push(page); + } + + //Print Pages + for(var pageIdx = 0; pageIdx < orderPages.length; pageIdx++) { + Util.downloadTextFile(orderPages[pageIdx], "order_" + sample.code + "_p" + pageIdx + ".txt"); + } + + }, "Print Order"); + + // + // Order Summary Grid + // + var columns = [ { + label : 'Catalog Num', + property : 'catalogNum', + isExportable: true, + sortable : true, + render : function(data) { + return FormUtil.getFormLink(data.catalogNum, "Sample", data.permId); + } + },{ + label : 'Supplier', + property : 'supplier', + isExportable: true, + sortable : true + }, { + label : 'Name', + property : 'name', + isExportable: true, + sortable : true + }, { + label : 'Quantity', + property : 'quantity', + isExportable: true, + sortable : true, + }, { + label : 'Unit Price', + property : 'unitPrice', + isExportable: true, + sortable : true + }, { + label : 'Total Product Cost', + property : 'totalProductCost', + isExportable: true, + sortable : true + }, { + label : 'Currency', + property : 'currency', + isExportable: true, + sortable : true + }]; + + var getDataRows = function(callback) { + var rows = []; + for(var providerPermId in productsByProviderPermId) { + var provider = providerByPermId[providerPermId]; + var providerProducts = productsByProviderPermId[providerPermId]; for(var pIdx = 0; pIdx < providerProducts.length; pIdx++) { var product = providerProducts[pIdx]; var quantity = quantityByProductPermId[product.permId]; @@ -547,157 +652,61 @@ $.extend(StandardProfile.prototype, DefaultProfile.prototype, { if(unitPriceAsString) { unitPrice = parseFloat(unitPriceAsString); } + var rowData = {}; + rowData.permId = product.permId; + rowData.supplier = provider.properties["NAME"]; + rowData.name = product.properties["NAME"]; + rowData.catalogNum = product.properties["CATALOG_NUM"]; + rowData.quantity = quantity; + rowData.unitPrice = unitPrice; + if(unitPrice !== "N/A") { + rowData.totalProductCost = rowData.quantity * rowData.unitPrice; + } else { + rowData.totalProductCost = "N/A"; + } var currencyCode = product.properties["CURRENCY"]; if(!currencyCode) { currencyCode = "N/A"; } - page += quantity + "\t\t" + product.properties["NAME"] + "\t\t" + product.properties["CATALOG_NUM"] + "\t\t" + unitPrice + " " + currencyCode; - page += "\n"; - - if(unitPriceAsString) { - var totalForCurrency = providerTotalByCurrency[product.properties["CURRENCY"]]; - if(!totalForCurrency) { - totalForCurrency = 0; - } - totalForCurrency += unitPrice * quantity; - - providerTotalByCurrency[product.properties["CURRENCY"]] = totalForCurrency; - } else { - providerTotalByCurrency[product.properties["CURRENCY"]] = "N/A"; - } + rowData.currency = currencyCode; + rows.push(rowData); } - page += "\n"; - page += "\n"; - page += "\n"; - var showTotals = false; - for(var currency in providerTotalByCurrency) { - if(providerTotalByCurrency[currency] > 0) { - showTotals = true; - } - } - if(showTotals) { - page += languageLabels["PRICE_TOTALS_LABEL"] + ":"; - page += "\n"; - for(var currency in providerTotalByCurrency) { - page += providerTotalByCurrency[currency] + " " + currency; - page += "\n"; - } - page += "\n"; - page += "\n"; - page += "\n"; - } - page += languageLabels["ADDITIONAL_INFO_LABEL"]; - page += "\n"; - var additionalInfo = order.properties["ADDITIONAL_INFORMATION"]; - if(!additionalInfo) { - additionalInfo = "N/A"; - } - page += additionalInfo; - orderPages.push(page); - } + } + callback(rows); + }; - //Print Pages - for(var pageIdx = 0; pageIdx < orderPages.length; pageIdx++) { - Util.downloadTextFile(orderPages[pageIdx], "order_" + sample.code + "_p" + pageIdx + ".txt"); + var orderSummaryContainer = $("<div>"); + var repTitle = "Order Summary"; + if(isFromState) { + repTitle += " (as saved when ordered)" } - }, "Print Order"); - - // - // Order Summary Grid - // - var columns = [ { - label : 'Catalog Num', - property : 'catalogNum', - isExportable: true, - sortable : true, - render : function(data) { - return FormUtil.getFormLink(data.catalogNum, "Sample", data.permId); - } - },{ - label : 'Supplier', - property : 'supplier', - isExportable: true, - sortable : true - }, { - label : 'Name', - property : 'name', - isExportable: true, - sortable : true - }, { - label : 'Quantity', - property : 'quantity', - isExportable: true, - sortable : true, - }, { - label : 'Unit Price', - property : 'unitPrice', - isExportable: true, - sortable : true - }, { - label : 'Total Product Cost', - property : 'totalProductCost', - isExportable: true, - sortable : true - }, { - label : 'Currency', - property : 'currency', - isExportable: true, - sortable : true - }]; - - var getDataRows = function(callback) { - var rows = []; - for(var providerPermId in productsByProviderPermId) { - var provider = providerByPermId[providerPermId]; - var providerProducts = productsByProviderPermId[providerPermId]; - for(var pIdx = 0; pIdx < providerProducts.length; pIdx++) { - var product = providerProducts[pIdx]; - var quantity = quantityByProductPermId[product.permId]; - var unitPriceAsString = product.properties["PRICE_PER_UNIT"]; - var unitPrice = "N/A"; - if(unitPriceAsString) { - unitPrice = parseFloat(unitPriceAsString); - } - var rowData = {}; - rowData.permId = product.permId; - rowData.supplier = provider.properties["NAME"]; - rowData.name = product.properties["NAME"]; - rowData.catalogNum = product.properties["CATALOG_NUM"]; - rowData.quantity = quantity; - rowData.unitPrice = unitPrice; - if(unitPrice !== "N/A") { - rowData.totalProductCost = rowData.quantity * rowData.unitPrice; - } else { - rowData.totalProductCost = "N/A"; - } - var currencyCode = product.properties["CURRENCY"]; - if(!currencyCode) { - currencyCode = "N/A"; - } - rowData.currency = currencyCode; - rows.push(rowData); - } - + var orderSummary = new DataGridController(repTitle, columns, [], null, getDataRows, null, false, "ORDER_SUMMARY"); + orderSummary.init(orderSummaryContainer); + + var totalsByCurrencyContainer = $("<div>").append($("<br>")).append($("<legend>").append("Total:")); + for(var currency in absoluteTotalByCurrency) { + totalsByCurrencyContainer.append(absoluteTotalByCurrency[currency] + " " + currency).append($("<br>")); } - callback(rows); - }; - - var orderSummaryContainer = $("<div>"); - var repTitle = "Order Summary"; - if(isFromState) { - repTitle += " (as saved when ordered)" + $("#" + containerId).append(orderSummaryContainer).append(totalsByCurrencyContainer).append($("<br>")).append(printOrder); } - var orderSummary = new DataGridController(repTitle, columns, [], null, getDataRows, null, false, "ORDER_SUMMARY"); - orderSummary.init(orderSummaryContainer); - - var totalsByCurrencyContainer = $("<div>").append($("<br>")).append($("<legend>").append("Total:")); - for(var currency in absoluteTotalByCurrency) { - totalsByCurrencyContainer.append(absoluteTotalByCurrency[currency] + " " + currency).append($("<br>")); + // + // Data Structures to Help the reports functionality + // + var orderSample = mainController.currentView._sampleFormModel.sample; + if(orderSample.properties["ORDER_STATE"]) { + isFromState = true; + var order = JSON.parse(decodeURIComponent(escape(window.atob(orderSample.properties["ORDER_STATE"])))); + showOrderSummary(order); + } else { + var searchSamples = { entityKind : "SAMPLE", logicalOperator : "OR", rules : { "UUIDv4" : { type : "Attribute", name : "PERM_ID", value : orderSample.permId } } }; + mainController.serverFacade.searchForSamplesAdvanced(searchSamples, { only : true, withProperties : true, withAncestors : true, withAncestorsProperties : true }, function(result) { + var order = mainController.serverFacade.getV3SamplesAsV1(result.objects)[0]; + showOrderSummary(order); + }); } - $("#" + containerId).append(orderSummaryContainer).append(totalsByCurrencyContainer).append($("<br>")).append(printOrder); } } else if(sampleTypeCode === "REQUEST") { var isEnabled = mainController.currentView._sampleFormModel.mode !== FormMode.VIEW; -- GitLab