diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 6d1230ed169ba156b4e6982d4a50d5617f592de9..0d46bf7b97d26c3887302b467074d26dc7c070c9 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -1188,6 +1188,20 @@ <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/newsupportticket/onActionProcess.js</onActionProcess> <iconId>VAADIN:TICKET</iconId> </entityActionField> + <entityConsumer> + <name>KeywordProductGroup</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/keywordproductgroup/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -1477,6 +1491,24 @@ <filterConditionProcess>%aditoprj%/entity/Offer_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js</filterConditionProcess> <filtertype>BASIC</filtertype> </filterExtension> + <filterExtension> + <name>Product_filter</name> + <title>Product</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>Products</consumer> + <filterConditionProcess>%aditoprj%/entity/Offer_entity/recordcontainers/db/filterextensions/product_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>ProductGroup_filter</name> + <title>Product Group</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>KeywordProductGroup</consumer> + <filterConditionProcess>%aditoprj%/entity/Offer_entity/recordcontainers/db/filterextensions/productgroup_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> </filterExtensions> </dbRecordContainer> <indexRecordContainer> diff --git a/entity/Offer_entity/entityfields/keywordproductgroup/children/containername_param/valueProcess.js b/entity/Offer_entity/entityfields/keywordproductgroup/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..348d170e288cbba65e430534569dbfe5a6c432a0 --- /dev/null +++ b/entity/Offer_entity/entityfields/keywordproductgroup/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.productGroupcode()); diff --git a/entity/Offer_entity/recordcontainers/db/conditionProcess.js b/entity/Offer_entity/recordcontainers/db/conditionProcess.js index 687c5f8bf92623d65bbfef791ffe4b1bc0caded9..19f424e1795b65b633573c117462ba15877fb29b 100644 --- a/entity/Offer_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Offer_entity/recordcontainers/db/conditionProcess.js @@ -25,4 +25,4 @@ else if(approval == 2) cond.andIfSet("OFFER.STATUS", "$param.OfferStatus_param") -result.string(cond.toString()); \ No newline at end of file +result.string(cond.toString()); diff --git a/entity/Offer_entity/recordcontainers/db/filterextensions/product_filter/filterConditionProcess.js b/entity/Offer_entity/recordcontainers/db/filterextensions/product_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..312b90d05770c6e704d84ff025148a4d454afc6e --- /dev/null +++ b/entity/Offer_entity/recordcontainers/db/filterextensions/product_filter/filterConditionProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("Sql_lib"); + +var sql = newSelect("OFFERITEM.OFFERITEMID").from("OFFERITEM") + .where("OFFER.OFFERID = OFFERITEM.OFFER_ID") + .and("OFFERITEM.PRODUCT_ID", "$local.rawvalue", SqlUtils.getSqlConditionalOperator()); +result.string("exists (" + sql.toString() + ")"); diff --git a/entity/Offer_entity/recordcontainers/db/filterextensions/productgroup_filter/filterConditionProcess.js b/entity/Offer_entity/recordcontainers/db/filterextensions/productgroup_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..083921950f36d98a95c61bdac6c881306a37cf23 --- /dev/null +++ b/entity/Offer_entity/recordcontainers/db/filterextensions/productgroup_filter/filterConditionProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +var sql = newSelect("OFFERITEM.OFFERITEMID").from("OFFERITEM") + .join("PRODUCT", "PRODUCT.PRODUCTID = OFFERITEM.PRODUCT_ID") + .where("OFFER.OFFERID = OFFERITEM.OFFER_ID") + .and("PRODUCT.GROUPCODEID", "$local.rawvalue", SqlUtils.getSqlConditionalOperator()); +result.string("exists (" + sql.toString() + ")"); diff --git a/entity/Offeritem_entity/Offeritem_entity.aod b/entity/Offeritem_entity/Offeritem_entity.aod index 5596dfc0c5e704d971d9e0b41c0c573a319bf256..11fa6807168d590f9d7c5db1b894b0d63e4e0860 100644 --- a/entity/Offeritem_entity/Offeritem_entity.aod +++ b/entity/Offeritem_entity/Offeritem_entity.aod @@ -23,8 +23,6 @@ <name>DISCOUNT</name> <title>Discount</title> <contentType>NUMBER</contentType> - <maxValue v="100" /> - <minValue v="0" /> <outputFormat>0.00'%'</outputFormat> <inputFormat>0.00</inputFormat> <onValidation>%aditoprj%/entity/Offeritem_entity/entityfields/discount/onValidation.js</onValidation> @@ -76,7 +74,6 @@ <inputFormat>#,##0.00</inputFormat> <mandatory v="true" /> <displayValueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/price/displayValueProcess.js</displayValueProcess> - <onValidation>%aditoprj%/entity/Offeritem_entity/entityfields/price/onValidation.js</onValidation> </entityField> <entityField> <name>PRODUCT_ID</name> @@ -87,7 +84,6 @@ <mandatory v="true" /> <stateProcess>%aditoprj%/entity/Offeritem_entity/entityfields/product_id/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/product_id/valueProcess.js</valueProcess> - <displayValueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/product_id/displayValueProcess.js</displayValueProcess> <onValueChange>%aditoprj%/entity/Offeritem_entity/entityfields/product_id/onValueChange.js</onValueChange> <onValueChangeTypes> <element>MASK</element> @@ -108,7 +104,6 @@ <onValueChangeTypes> <element>MASK</element> </onValueChangeTypes> - <onValidation>%aditoprj%/entity/Offeritem_entity/entityfields/quantity/onValidation.js</onValidation> </entityField> <entityField> <name>UNIT</name> @@ -301,6 +296,65 @@ <state>READONLY</state> <valueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/currency/valueProcess.js</valueProcess> </entityField> + <entityField> + <name>OFFER_CODE</name> + <title>Offer number</title> + <linkedContext>Offer</linkedContext> + <state>READONLY</state> + </entityField> + <entityField> + <name>OFFER_PERSON_ID</name> + <title>Person</title> + <linkedContext>Person</linkedContext> + <state>READONLY</state> + </entityField> + <entityField> + <name>OFFER_ORGANISATION_ID</name> + <title>Company</title> + <linkedContext>Organisation</linkedContext> + <state>READONLY</state> + </entityField> + <entityField> + <name>OFFER_STATUS</name> + <title>Status</title> + <state>READONLY</state> + </entityField> + <entityField> + <name>OFFER_IMAGE</name> + <contentType>IMAGE</contentType> + <state>READONLY</state> + <valueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/offer_image/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>OFFER_NET</name> + <title>Total net</title> + <contentType>NUMBER</contentType> + <state>READONLY</state> + <displayValueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/offer_net/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>OFFER_CURRENCY</name> + <title>Currency</title> + <state>READONLY</state> + </entityField> + <entityField> + <name>OFFER_DATE</name> + <title>Date</title> + <contentType>DATE</contentType> + <resolution>DAY</resolution> + <outputFormat>dd.MM.yyyy</outputFormat> + <state>READONLY</state> + </entityField> + <entityField> + <name>OFFER_PROBABILITY</name> + <title>Probability</title> + <contentType>NUMBER</contentType> + <outputFormat>0'%'</outputFormat> + <state>READONLY</state> + </entityField> + <entityField> + <name>PRODUCT_GROUPCODEID</name> + </entityField> <entityField> <name>PICTURE</name> <contentType>IMAGE</contentType> @@ -317,6 +371,7 @@ <maximumDbRows v="0" /> <isPageable v="false" /> <hasDependentRecords v="true" /> + <fromClauseProcess>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> <conditionProcess>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js</conditionProcess> <orderClauseProcess>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> <onDBInsert>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js</onDBInsert> @@ -416,12 +471,64 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>PRODUCT_ID.displayValue</name> - <expression>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js</expression> + <recordfield>PRODUCT.PRODUCTNAME</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DISCOUNT.displayValue</name> <expression>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/discount.displayvalue/expression.js</expression> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_CODE.value</name> + <recordfield>OFFER.OFFERID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_CODE.displayValue</name> + <expression>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_code.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_PERSON_ID.value</name> + <recordfield>CONTACT.PERSON_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_ORGANISATION_ID.value</name> + <recordfield>CONTACT.ORGANISATION_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_PERSON_ID.displayValue</name> + <expression>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_person_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_ORGANISATION_ID.displayValue</name> + <recordfield>ORGANISATION.NAME</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_STATUS.value</name> + <recordfield>OFFER.STATUS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_STATUS.displayValue</name> + <expression>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_status.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_NET.value</name> + <recordfield>OFFER.NET</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_CURRENCY.value</name> + <recordfield>OFFER.CURRENCY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_DATE.value</name> + <recordfield>OFFER.OFFERDATE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OFFER_PROBABILITY.value</name> + <recordfield>OFFER.PROBABILITY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PRODUCT_GROUPCODEID.value</name> + <recordfield>PRODUCT.GROUPCODEID</recordfield> + </dbRecordFieldMapping> <dbRecordFieldMapping> <name>PICTURE.value</name> <expression>%aditoprj%/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/picture.value/expression.js</expression> @@ -433,12 +540,47 @@ </recordFieldMappings> <linkInformation> <linkInformation> - <name>1894a7fa-bc31-43c2-9ba9-d432892efdaa</name> + <name>94b18d52-4cb7-4685-bf9f-44fc50b34812</name> <tableName>OFFERITEM</tableName> <primaryKey>OFFERITEMID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> + <linkInformation> + <name>321ad9b2-5d2e-4bb6-8c55-924a00b80178</name> + <tableName>PRODUCT</tableName> + <primaryKey>PRODUCTID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>813cea70-5156-4f5c-8b11-ebdaff5f3d76</name> + <tableName>OFFER</tableName> + <primaryKey>OFFERID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>d4a5de75-fb96-4836-996c-b28d74158879</name> + <tableName>CONTACT</tableName> + <primaryKey>CONTACTID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>691e743c-4996-44b6-9f95-14befae0edb9</name> + <tableName>ORGANISATION</tableName> + <primaryKey>ORGANISATIONID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>d2849657-01db-4ddc-804e-7e7df8a98acc</name> + <tableName>PERSON</tableName> + <primaryKey>PERSONID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> </linkInformation> </dbRecordContainer> </recordContainers> diff --git a/entity/Offeritem_entity/entityfields/discount/onValidation.js b/entity/Offeritem_entity/entityfields/discount/onValidation.js index 595a5d9aae549242aaa2246e2e4b6e6d602249a0..0b9a98a1edddc669cfbff7a14bdc32c085393df3 100644 --- a/entity/Offeritem_entity/entityfields/discount/onValidation.js +++ b/entity/Offeritem_entity/entityfields/discount/onValidation.js @@ -1,10 +1,11 @@ import("system.result"); import("system.vars"); import("Util_lib"); -import("Entity_lib"); var value = vars.get("local.value"); var validationResult = NumberUtils.validateIsBetweenFloat("Discount", value, 0, 100); -if (validationResult) - result.string(validationResult); \ No newline at end of file +if(validationResult) +{ + result.string(validationResult); +} diff --git a/entity/Offeritem_entity/entityfields/offer_image/valueProcess.js b/entity/Offeritem_entity/entityfields/offer_image/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..864c2a3fc4f412eb30a1315d41297c72137f0b74 --- /dev/null +++ b/entity/Offeritem_entity/entityfields/offer_image/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.vars"); + +result.string("TEXT:" + vars.get("$field.OFFER_STATUS.displayValue")); diff --git a/entity/Offeritem_entity/entityfields/offer_net/displayValueProcess.js b/entity/Offeritem_entity/entityfields/offer_net/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a68fd5e5434fd2f9b47f0e714fca92973ae0fc4d --- /dev/null +++ b/entity/Offeritem_entity/entityfields/offer_net/displayValueProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.vars"); +import("system.translate"); +import("Util_lib"); + +result.string(NumberUtils.formatWithCurrency( + vars.get("$this.value"), + translate.text("#,##0.00"), + vars.get("$field.OFFER_CURRENCY")) +); diff --git a/entity/Offeritem_entity/entityfields/price/displayValueProcess.js b/entity/Offeritem_entity/entityfields/price/displayValueProcess.js index e637f9b6adf09bb49a711742f90d24389c9bddfe..9e3aa2e595d4fd0732a6453bf676edd66fe0685a 100644 --- a/entity/Offeritem_entity/entityfields/price/displayValueProcess.js +++ b/entity/Offeritem_entity/entityfields/price/displayValueProcess.js @@ -1,22 +1,8 @@ -import("Sql_lib"); -import("system.db"); -import("Util_lib"); +import("system.result"); import("system.vars"); import("system.translate"); -import("system.result"); - - if (vars.get("$param.Currency_param")) - { -var curr = vars.get("$param.Currency_param") - - -} - -else { - curr = newSelect("CURRENCY") - .from("OFFER") - .whereIfSet("OFFER.OFFERID", "$field.OFFER_ID") - .cell(true); -} +import("Util_lib"); -result.string(NumberUtils.formatWithCurrency(vars.get("$field.PRICE"), translate.text("#,##0.00"), curr)); \ No newline at end of file +var currency = vars.get("$param.Currency_param") || vars.get("$field.OFFER_CURRENCY"); +result.string(NumberUtils.formatWithCurrency( + vars.get("$this.value"), translate.text("#,##0.00"), currency)); diff --git a/entity/Offeritem_entity/entityfields/price/minValueProcess.js b/entity/Offeritem_entity/entityfields/price/minValueProcess.js index 451af92dfde3bab6aa84cfecb241b4d00fb6493e..9e32e3b8c7b037eedceacc696f0850c24ca52a0b 100644 --- a/entity/Offeritem_entity/entityfields/price/minValueProcess.js +++ b/entity/Offeritem_entity/entityfields/price/minValueProcess.js @@ -1,23 +1,7 @@ -import("KeywordRegistry_basic"); import("system.result"); -import("Sql_lib"); import("system.vars"); +import("KeywordRegistry_basic"); -//allow negative values if product is discount -var minValue = 0; - -var productId = vars.get("$field.PRODUCT_ID"); -if(productId) -{ - var productGroup = newSelect("PRODUCT.GROUPCODEID") - .from("PRODUCT") - .where("PRODUCT.PRODUCTID", productId) - .cell(); - - if(productGroup == $KeywordRegistry.productGroupcode$discount()) - { - minValue = ""; - } -} - -result.string(minValue); \ No newline at end of file +// allow negative values if product is discount +var allowNegative = vars.get("$field.GROUPCODEID") == $KeywordRegistry.productGroupcode$discount(); +result.string(allowNegative ? "" : 0); diff --git a/entity/Offeritem_entity/entityfields/price/onValidation.js b/entity/Offeritem_entity/entityfields/price/onValidation.js deleted file mode 100644 index 3ccd297cc74a4edb1a45f0e84755546882d8ed52..0000000000000000000000000000000000000000 --- a/entity/Offeritem_entity/entityfields/price/onValidation.js +++ /dev/null @@ -1,27 +0,0 @@ -import("system.result"); -import("Util_lib"); -import("KeywordRegistry_basic"); -import("system.vars"); -import("Sql_lib"); - -var value = vars.get("local.value"); -var minValue = 0; - -var productId = vars.get("$field.PRODUCT_ID"); -if(productId) -{ - var productGroup = newSelect("PRODUCT.GROUPCODEID") - .from("PRODUCT") - .where("PRODUCT.PRODUCTID", productId) - .cell(); - - if(productGroup != $KeywordRegistry.productGroupcode$discount()) - { - var validationResult = NumberUtils.validateIsBetweenFloat("Unit price", value, minValue, Number.MAX_VALUE); - - if (validationResult) - { - result.string(validationResult); - } - } -} \ No newline at end of file diff --git a/entity/Offeritem_entity/entityfields/product_id/displayValueProcess.js b/entity/Offeritem_entity/entityfields/product_id/displayValueProcess.js deleted file mode 100644 index 34b95afc4d4ac6372590ed4ff00a350dee2fd895..0000000000000000000000000000000000000000 --- a/entity/Offeritem_entity/entityfields/product_id/displayValueProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.neon"); -import("Product_lib"); -import("system.vars"); -import("system.result"); -import("Sql_lib"); - -if(vars.get("$field.PRODUCT_ID") && vars.get("$sys.viewmode") != neon.FRAME_VIEWMODE_TABLE) -{ - result.string(ProductUtils.getProductName(vars.get("$field.PRODUCT_ID"))); -} \ No newline at end of file diff --git a/entity/Offeritem_entity/entityfields/quantity/onValidation.js b/entity/Offeritem_entity/entityfields/quantity/onValidation.js deleted file mode 100644 index 0e56a1cc6269ecd23927fb2ef9746b2cc41b0c03..0000000000000000000000000000000000000000 --- a/entity/Offeritem_entity/entityfields/quantity/onValidation.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.translate"); -import("system.result"); -import("system.vars"); -import("Entity_lib"); - -var quatity = vars.get("$local.value") ? vars.get("$local.value") : ""; - -if (parseInt(quatity) <= 0) -{ - result.string(translate.text("${QUANTITY_LOWER_THAN_1}")); -} diff --git a/entity/Offeritem_entity/entityfields/totalprice/displayValueProcess.js b/entity/Offeritem_entity/entityfields/totalprice/displayValueProcess.js index f23c116341674384a3368d928d986d2fb04466e3..9e3aa2e595d4fd0732a6453bf676edd66fe0685a 100644 --- a/entity/Offeritem_entity/entityfields/totalprice/displayValueProcess.js +++ b/entity/Offeritem_entity/entityfields/totalprice/displayValueProcess.js @@ -1,22 +1,8 @@ -import("Sql_lib"); -import("system.db"); -import("Util_lib"); +import("system.result"); import("system.vars"); import("system.translate"); -import("system.result"); - - if (vars.get("$param.Currency_param")) - { -var curr = vars.get("$param.Currency_param") - - -} - -else { - curr = newSelect("CURRENCY") - .from("OFFER") - .whereIfSet("OFFER.OFFERID", "$field.OFFER_ID") - .cell(true); -} +import("Util_lib"); -result.string(NumberUtils.formatWithCurrency(vars.get("$field.TotalPrice"), translate.text("#,##0.00"), curr)); \ No newline at end of file +var currency = vars.get("$param.Currency_param") || vars.get("$field.OFFER_CURRENCY"); +result.string(NumberUtils.formatWithCurrency( + vars.get("$this.value"), translate.text("#,##0.00"), currency)); diff --git a/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js b/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js index ee1e6cbd8479673064d2d5aa2350046f148b9102..e8141826948ed7afc1bb97b45474637d4d04d044 100644 --- a/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Offeritem_entity/recordcontainers/db/conditionProcess.js @@ -4,5 +4,5 @@ import("system.result"); import("system.vars"); var cond = newWhereIfSet("OFFERITEM.OFFER_ID", "$param.OfferId_param") - -result.string(cond.toString()); \ No newline at end of file +cond.andIfSet("OFFERITEM.PRODUCT_ID", "$param.ProductId_param"); +result.string(cond.toString()); diff --git a/entity/Offeritem_entity/recordcontainers/db/fromClauseProcess.js b/entity/Offeritem_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..13de50c53bbf75cca27f7ef396ac092e2adb16cc --- /dev/null +++ b/entity/Offeritem_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,12 @@ +import("system.result"); +import("Sql_lib"); + +result.string( + new SqlBuilder().from("OFFERITEM") + .leftJoin("PRODUCT", "OFFERITEM.PRODUCT_ID = PRODUCT.PRODUCTID") + .leftJoin("OFFER", "OFFERITEM.OFFER_ID = OFFER.OFFERID") + .leftJoin("CONTACT", "OFFER.CONTACT_ID = CONTACT.CONTACTID") + .leftJoin("ORGANISATION", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID") + .leftJoin("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID") + .toString() +); diff --git a/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_code.displayvalue/expression.js b/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_code.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..f8f8ed97d21b5701f915fb9172d40b20ecc4847f --- /dev/null +++ b/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_code.displayvalue/expression.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.SQLTYPES"); +import("Sql_lib"); + +var maskingUtils = new SqlMaskingUtils(); +var fields = [ + maskingUtils.cast("OFFER.OFFERCODE", SQLTYPES.CHAR, 20), + maskingUtils.cast("OFFER.VERSNR", SQLTYPES.CHAR, 20) +]; +result.string(maskingUtils.concatWithSeparator(fields, "-", false)); diff --git a/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_person_id.displayvalue/expression.js b/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_person_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..d4103521bd79b8917c79a03420fff2cdd57e895d --- /dev/null +++ b/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_person_id.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Person_lib"); + +result.string(PersUtils.getDisplaySqlExpression()); diff --git a/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_status.displayvalue/expression.js b/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_status.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..1c6eb20489ed9336c66eeb1f2d5736ba6cdaec39 --- /dev/null +++ b/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/offer_status.displayvalue/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getResolvedTitleSqlPart( + $KeywordRegistry.offerStatus(), "OFFER.STATUS")); diff --git a/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js b/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js deleted file mode 100644 index a3c7e1a4b082e21f94f25a8af225a5a526c38bdc..0000000000000000000000000000000000000000 --- a/entity/Offeritem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js +++ /dev/null @@ -1,6 +0,0 @@ -import("Product_lib"); -import("system.vars"); -import("system.result"); - -// TODO: remove when #title is used as display value for lookups -result.string(ProductUtils.getProductNameSubSql("OFFERITEM.PRODUCT_ID")); \ No newline at end of file diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index 009030c597027c4e0639d914222e7789da0703bb..7e2f3776198f36560ce47649f0b4e064ee1eb483 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -1030,6 +1030,20 @@ <expose v="true" /> <documentation>%aditoprj%/entity/Order_entity/entityfields/links_param/documentation.adoc</documentation> </entityParameter> + <entityConsumer> + <name>KeywordProductGroup</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Order_entity/entityfields/keywordproductgroup/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -1294,6 +1308,24 @@ <filterConditionProcess>%aditoprj%/entity/Order_entity/recordcontainers/db/filterextensions/favorite_filter/filterConditionProcess.js</filterConditionProcess> <filtertype>BASIC</filtertype> </filterExtension> + <filterExtension> + <name>Product_filter</name> + <title>Product</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>Products</consumer> + <filterConditionProcess>%aditoprj%/entity/Order_entity/recordcontainers/db/filterextensions/product_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>ProductGroup_filter</name> + <title>Product Group</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>KeywordProductGroup</consumer> + <filterConditionProcess>%aditoprj%/entity/Order_entity/recordcontainers/db/filterextensions/productgroup_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> </filterExtensions> </dbRecordContainer> <indexRecordContainer> diff --git a/entity/Order_entity/entityfields/keywordproductgroup/children/containername_param/valueProcess.js b/entity/Order_entity/entityfields/keywordproductgroup/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..348d170e288cbba65e430534569dbfe5a6c432a0 --- /dev/null +++ b/entity/Order_entity/entityfields/keywordproductgroup/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.productGroupcode()); diff --git a/entity/Order_entity/recordcontainers/db/filterextensions/product_filter/filterConditionProcess.js b/entity/Order_entity/recordcontainers/db/filterextensions/product_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..722a004ef2fb54a378dc073941a32de91b8f4591 --- /dev/null +++ b/entity/Order_entity/recordcontainers/db/filterextensions/product_filter/filterConditionProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("Sql_lib"); + +var sql = newSelect("SALESORDERITEM.SALESORDERITEMID").from("SALESORDERITEM") + .where("SALESORDER.SALESORDERID = SALESORDERITEM.SALESORDER_ID") + .and("SALESORDERITEM.PRODUCT_ID", "$local.rawvalue", SqlUtils.getSqlConditionalOperator()); +result.string("exists (" + sql.toString() + ")"); diff --git a/entity/Order_entity/recordcontainers/db/filterextensions/productgroup_filter/filterConditionProcess.js b/entity/Order_entity/recordcontainers/db/filterextensions/productgroup_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c3610fbcd88739511a5f3aaa5708ba87346b171c --- /dev/null +++ b/entity/Order_entity/recordcontainers/db/filterextensions/productgroup_filter/filterConditionProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +var sql = newSelect("SALESORDERITEM.SALESORDERITEMID").from("SALESORDERITEM") + .join("PRODUCT", "PRODUCT.PRODUCTID = SALESORDERITEM.PRODUCT_ID") + .where("SALESORDER.SALESORDERID = SALESORDERITEM.SALESORDER_ID") + .and("PRODUCT.GROUPCODEID", "$local.rawvalue", SqlUtils.getSqlConditionalOperator()); +result.string("exists (" + sql.toString() + ")"); diff --git a/entity/Orderitem_entity/Orderitem_entity.aod b/entity/Orderitem_entity/Orderitem_entity.aod index 5fc63065077dc806467c8fc3444b4e5b7a98fc6c..d88495d1e76c565cfe288026f0688f41ad2c3fc6 100644 --- a/entity/Orderitem_entity/Orderitem_entity.aod +++ b/entity/Orderitem_entity/Orderitem_entity.aod @@ -23,8 +23,8 @@ <name>DISCOUNT</name> <title>Discount</title> <contentType>NUMBER</contentType> - <minValue v="0" /> <outputFormat>#,##0.00</outputFormat> + <onValidation>%aditoprj%/entity/Orderitem_entity/entityfields/discount/onValidation.js</onValidation> </entityField> <entityField> <name>GROUPCODEID</name> @@ -64,7 +64,6 @@ <inputFormat>#,##0.00</inputFormat> <mandatory v="true" /> <displayValueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/price/displayValueProcess.js</displayValueProcess> - <onValidation>%aditoprj%/entity/Orderitem_entity/entityfields/price/onValidation.js</onValidation> </entityField> <entityField> <name>PRODUCT_ID</name> @@ -73,7 +72,6 @@ <consumer>Products</consumer> <linkedContext>Product</linkedContext> <valueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/product_id/valueProcess.js</valueProcess> - <displayValueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/product_id/displayValueProcess.js</displayValueProcess> <onValueChange>%aditoprj%/entity/Orderitem_entity/entityfields/product_id/onValueChange.js</onValueChange> <onValueChangeTypes> <element>MASK</element> @@ -92,7 +90,6 @@ <onValueChangeTypes> <element>MASK</element> </onValueChangeTypes> - <onValidation></onValidation> </entityField> <entityField> <name>UNIT</name> @@ -135,7 +132,6 @@ <state>READONLY</state> <valueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/totalprice/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/totalprice/displayValueProcess.js</displayValueProcess> - <onValidation></onValidation> </entityField> <entityField> <name>IMAGE</name> @@ -283,6 +279,70 @@ <state>READONLY</state> <valueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/currency/valueProcess.js</valueProcess> </entityField> + <entityField> + <name>ORDER_CODE</name> + <title>Receipt number</title> + <linkedContext>Order</linkedContext> + <state>READONLY</state> + </entityField> + <entityField> + <name>ORDER_PERSON_ID</name> + <title>Person</title> + <linkedContext>Person</linkedContext> + <state>READONLY</state> + </entityField> + <entityField> + <name>ORDER_ORGANISATION_ID</name> + <title>Company</title> + <linkedContext>Organisation</linkedContext> + <state>READONLY</state> + </entityField> + <entityField> + <name>ORDER_TYPE</name> + <title>Order Type</title> + <state>READONLY</state> + </entityField> + <entityField> + <name>ORDER_IMAGE</name> + <contentType>IMAGE</contentType> + <state>READONLY</state> + <valueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/order_image/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>ORDER_NET</name> + <title>Total net</title> + <contentType>NUMBER</contentType> + <state>READONLY</state> + <displayValueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/order_net/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>ORDER_CURRENCY</name> + <title>Currency</title> + <state>READONLY</state> + </entityField> + <entityField> + <name>ORDER_DATE</name> + <title>Date</title> + <contentType>DATE</contentType> + <resolution>DAY</resolution> + <outputFormat>dd.MM.yyyy</outputFormat> + <state>READONLY</state> + </entityField> + <entityField> + <name>ORDER_STATUS</name> + <title>Sent</title> + <contentType>BOOLEAN</contentType> + <state>READONLY</state> + </entityField> + <entityField> + <name>ORDER_CANCELLATION</name> + <title>${ORDER_CANCELLED}</title> + <contentType>BOOLEAN</contentType> + <state>READONLY</state> + </entityField> + <entityField> + <name>PRODUCT_GROUPCODEID</name> + </entityField> <entityField> <name>PICTURE</name> <contentType>IMAGE</contentType> @@ -294,6 +354,7 @@ <maximumDbRows v="0" /> <isPageable v="false" /> <hasDependentRecords v="true" /> + <fromClauseProcess>%aditoprj%/entity/Orderitem_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> <conditionProcess>%aditoprj%/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js</conditionProcess> <orderClauseProcess>%aditoprj%/entity/Orderitem_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> <onDBInsert>%aditoprj%/entity/Orderitem_entity/recordcontainers/db/onDBInsert.js</onDBInsert> @@ -369,7 +430,7 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>PRODUCT_ID.displayValue</name> - <expression>%aditoprj%/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js</expression> + <recordfield>PRODUCT.PRODUCTNAME</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>INFO.value</name> @@ -377,6 +438,62 @@ <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_CODE.value</name> + <recordfield>SALESORDER.SALESORDERID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_CODE.displayValue</name> + <recordfield>SALESORDER.SALESORDERCODE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_PERSON_ID.value</name> + <recordfield>CONTACT.PERSON_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_ORGANISATION_ID.value</name> + <recordfield>CONTACT.ORGANISATION_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_PERSON_ID.displayValue</name> + <expression>%aditoprj%/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/order_person_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_ORGANISATION_ID.displayValue</name> + <recordfield>ORGANISATION.NAME</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_TYPE.value</name> + <recordfield>SALESORDER.ORDERTYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_TYPE.displayValue</name> + <expression>%aditoprj%/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/order_type.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_NET.value</name> + <recordfield>SALESORDER.NET</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_CURRENCY.value</name> + <recordfield>SALESORDER.CURRENCY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_CANCELLATION.value</name> + <recordfield>SALESORDER.CANCELLATION</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_DATE.value</name> + <recordfield>SALESORDER.SALESORDERDATE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORDER_STATUS.value</name> + <recordfield>SALESORDER.ORDERSTATUS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PRODUCT_GROUPCODEID.value</name> + <recordfield>PRODUCT.GROUPCODEID</recordfield> + </dbRecordFieldMapping> <dbRecordFieldMapping> <name>PICTURE.value</name> <expression>%aditoprj%/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/picture.value/expression.js</expression> @@ -384,12 +501,47 @@ </recordFieldMappings> <linkInformation> <linkInformation> - <name>cb0f1bfa-92eb-4ee9-bb02-8ac0ef3f987d</name> + <name>ee2c33c1-dfef-433c-8f39-48f9cb38bb34</name> <tableName>SALESORDERITEM</tableName> <primaryKey>SALESORDERITEMID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> + <linkInformation> + <name>9f18fe6b-c7d5-42ba-a101-d1b2533c782e</name> + <tableName>PRODUCT</tableName> + <primaryKey>PRODUCTID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>db05edd5-c3be-4b90-acfd-a9d58c467651</name> + <tableName>SALESORDER</tableName> + <primaryKey>SALESORDERID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>d78b1f3f-280b-44a0-aabe-c01876ae3f21</name> + <tableName>CONTACT</tableName> + <primaryKey>CONTACTID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>6b072218-faa8-47c8-984d-e641d81733df</name> + <tableName>ORGANISATION</tableName> + <primaryKey>ORGANISATIONID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>2767e19d-01ff-46bf-8c9c-626665d36758</name> + <tableName>PERSON</tableName> + <primaryKey>PERSONID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> </linkInformation> </dbRecordContainer> </recordContainers> diff --git a/entity/Orderitem_entity/entityfields/discount/onValidation.js b/entity/Orderitem_entity/entityfields/discount/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..0b9a98a1edddc669cfbff7a14bdc32c085393df3 --- /dev/null +++ b/entity/Orderitem_entity/entityfields/discount/onValidation.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); +import("Util_lib"); + +var value = vars.get("local.value"); +var validationResult = NumberUtils.validateIsBetweenFloat("Discount", value, 0, 100); + +if(validationResult) +{ + result.string(validationResult); +} diff --git a/entity/Orderitem_entity/entityfields/order_image/valueProcess.js b/entity/Orderitem_entity/entityfields/order_image/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f73b1f79ff13fb32f3050f9295ed4d72a54ee862 --- /dev/null +++ b/entity/Orderitem_entity/entityfields/order_image/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.vars"); + +result.string("TEXT:" + vars.get("$field.ORDER_TYPE.displayValue")); diff --git a/entity/Orderitem_entity/entityfields/order_net/displayValueProcess.js b/entity/Orderitem_entity/entityfields/order_net/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..daee08ce7b43ec30ebd392341cc76062626811ba --- /dev/null +++ b/entity/Orderitem_entity/entityfields/order_net/displayValueProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.vars"); +import("system.translate"); +import("Util_lib"); + +result.string(NumberUtils.formatWithCurrency( + vars.get("$this.value"), + translate.text("#,##0.00"), + vars.get("$field.ORDER_CURRENCY")) +); diff --git a/entity/Orderitem_entity/entityfields/price/displayValueProcess.js b/entity/Orderitem_entity/entityfields/price/displayValueProcess.js index 489768c6520532d4126779e42cc7282d49c9b7c7..371d20d026cf2c99b48ba2dee82c4129d1d07ac6 100644 --- a/entity/Orderitem_entity/entityfields/price/displayValueProcess.js +++ b/entity/Orderitem_entity/entityfields/price/displayValueProcess.js @@ -1,21 +1,8 @@ -import("Sql_lib"); -import("system.db"); -import("Util_lib"); +import("system.result"); import("system.vars"); import("system.translate"); -import("system.result"); - -var curr; -if (vars.get("$param.Currency_param")) -{ - curr = vars.get("$param.Currency_param"); -} -else -{ - curr = newSelect("CURRENCY") - .from("SALESORDER") - .whereIfSet("SALESORDER.SALESORDERID", "$field.SALESORDER_ID") - .cell(true); -} +import("Util_lib"); -result.string(NumberUtils.formatWithCurrency(vars.get("$field.PRICE"), translate.text("#,##0.00"), curr)); \ No newline at end of file +var currency = vars.get("$param.Currency_param") || vars.get("$field.ORDER_CURRENCY"); +result.string(NumberUtils.formatWithCurrency( + vars.get("$this.value"), translate.text("#,##0.00"), currency)); diff --git a/entity/Orderitem_entity/entityfields/price/minValueProcess.js b/entity/Orderitem_entity/entityfields/price/minValueProcess.js index 451af92dfde3bab6aa84cfecb241b4d00fb6493e..9e32e3b8c7b037eedceacc696f0850c24ca52a0b 100644 --- a/entity/Orderitem_entity/entityfields/price/minValueProcess.js +++ b/entity/Orderitem_entity/entityfields/price/minValueProcess.js @@ -1,23 +1,7 @@ -import("KeywordRegistry_basic"); import("system.result"); -import("Sql_lib"); import("system.vars"); +import("KeywordRegistry_basic"); -//allow negative values if product is discount -var minValue = 0; - -var productId = vars.get("$field.PRODUCT_ID"); -if(productId) -{ - var productGroup = newSelect("PRODUCT.GROUPCODEID") - .from("PRODUCT") - .where("PRODUCT.PRODUCTID", productId) - .cell(); - - if(productGroup == $KeywordRegistry.productGroupcode$discount()) - { - minValue = ""; - } -} - -result.string(minValue); \ No newline at end of file +// allow negative values if product is discount +var allowNegative = vars.get("$field.GROUPCODEID") == $KeywordRegistry.productGroupcode$discount(); +result.string(allowNegative ? "" : 0); diff --git a/entity/Orderitem_entity/entityfields/price/onValidation.js b/entity/Orderitem_entity/entityfields/price/onValidation.js deleted file mode 100644 index 0a8a01d7ceb9605da7d6826ad4a17557f690a087..0000000000000000000000000000000000000000 --- a/entity/Orderitem_entity/entityfields/price/onValidation.js +++ /dev/null @@ -1,27 +0,0 @@ -import("system.result"); -import("Util_lib"); -import("KeywordRegistry_basic"); -import("Sql_lib"); -import("system.vars"); - -var value = vars.get("local.value"); -var minValue = 0; - -var productId = vars.get("$field.PRODUCT_ID"); -if(productId) -{ - var productGroup = newSelect("PRODUCT.GROUPCODEID") - .from("PRODUCT") - .where("PRODUCT.PRODUCTID", productId) - .cell(); - - if(productGroup != $KeywordRegistry.productGroupcode$discount()) - { - var validationResult = NumberUtils.validateIsBetweenFloat("Unit price", value, minValue, Number.MAX_VALUE); - - if (validationResult) - { - result.string(validationResult); - } - } -} diff --git a/entity/Orderitem_entity/entityfields/product_id/displayValueProcess.js b/entity/Orderitem_entity/entityfields/product_id/displayValueProcess.js deleted file mode 100644 index 99ef423450f5d49e1c13a16fc2aa5c6ad7814b90..0000000000000000000000000000000000000000 --- a/entity/Orderitem_entity/entityfields/product_id/displayValueProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("Product_lib"); -import("system.neon"); -import("system.vars"); -import("system.result"); -import("Sql_lib"); - -if(vars.get("$field.PRODUCT_ID") && vars.get("$sys.viewmode") != neon.FRAME_VIEWMODE_TABLE) -{ - result.string(ProductUtils.getProductName(vars.get("$field.PRODUCT_ID"))); -} \ No newline at end of file diff --git a/entity/Orderitem_entity/entityfields/totalprice/displayValueProcess.js b/entity/Orderitem_entity/entityfields/totalprice/displayValueProcess.js index 8085abfa370c8eb212417a32206a189721995b59..371d20d026cf2c99b48ba2dee82c4129d1d07ac6 100644 --- a/entity/Orderitem_entity/entityfields/totalprice/displayValueProcess.js +++ b/entity/Orderitem_entity/entityfields/totalprice/displayValueProcess.js @@ -1,20 +1,8 @@ -import("system.translate"); -import("Util_lib"); import("system.result"); -import("Sql_lib"); import("system.vars"); +import("system.translate"); +import("Util_lib"); -var curr; -if (vars.get("$param.Currency_param")) -{ - curr = vars.get("$param.Currency_param"); -} -else -{ - curr = newSelect("CURRENCY") - .from("SALESORDER") - .whereIfSet("SALESORDER.SALESORDERID", "$field.SALESORDER_ID") - .cell(true); -} - -result.string(NumberUtils.formatWithCurrency(vars.get("$field.TotalPrice"), translate.text("#,##0.00"), curr)); \ No newline at end of file +var currency = vars.get("$param.Currency_param") || vars.get("$field.ORDER_CURRENCY"); +result.string(NumberUtils.formatWithCurrency( + vars.get("$this.value"), translate.text("#,##0.00"), currency)); diff --git a/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js b/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js index 6794f43bc98a7ee4099be70e2d1ce4215cccab26..84af1c615dda7e633df13aac4266308991716559 100644 --- a/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Orderitem_entity/recordcontainers/db/conditionProcess.js @@ -4,5 +4,5 @@ import("system.result"); import("system.vars"); var cond = newWhereIfSet("SALESORDERITEM.SALESORDER_ID", "$param.OrderId_param") - -result.string(cond.toString()); \ No newline at end of file +cond.andIfSet("SALESORDERITEM.PRODUCT_ID", "$param.ProductId_param"); +result.string(cond.toString()); diff --git a/entity/Orderitem_entity/recordcontainers/db/fromClauseProcess.js b/entity/Orderitem_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7eebea002d9c2231c0f06d06e1163b42137e3d2c --- /dev/null +++ b/entity/Orderitem_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,12 @@ +import("system.result"); +import("Sql_lib"); + +result.string( + new SqlBuilder().from("SALESORDERITEM") + .leftJoin("PRODUCT", "SALESORDERITEM.PRODUCT_ID = PRODUCT.PRODUCTID") + .leftJoin("SALESORDER", "SALESORDERITEM.SALESORDER_ID = SALESORDER.SALESORDERID") + .leftJoin("CONTACT", "SALESORDER.CONTACT_ID = CONTACT.CONTACTID") + .leftJoin("ORGANISATION", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID") + .leftJoin("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID") + .toString() +); diff --git a/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/order_person_id.displayvalue/expression.js b/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/order_person_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..d4103521bd79b8917c79a03420fff2cdd57e895d --- /dev/null +++ b/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/order_person_id.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Person_lib"); + +result.string(PersUtils.getDisplaySqlExpression()); diff --git a/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/order_type.displayvalue/expression.js b/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/order_type.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..d5641dae10a69e2cdb5092dca53e05b718bc72a4 --- /dev/null +++ b/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/order_type.displayvalue/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getResolvedTitleSqlPart( + $KeywordRegistry.orderType(), "SALESORDER.ORDERTYPE")); diff --git a/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js b/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js deleted file mode 100644 index 60e5f9a4434937d2d26444ca803b138d12a14961..0000000000000000000000000000000000000000 --- a/entity/Orderitem_entity/recordcontainers/db/recordfieldmappings/product_id.displayvalue/expression.js +++ /dev/null @@ -1,6 +0,0 @@ -import("Product_lib"); -import("system.vars"); -import("system.result"); - -// TODO: remove when #title is used as display value for lookups -result.string(ProductUtils.getProductNameSubSql("SALESORDERITEM.PRODUCT_ID")); \ No newline at end of file diff --git a/entity/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod index 5c71823a29dcd605c022b835bbef23f6979df02f..bf2d0e8493d6330b1ae9d73060dbfd7f923dd462 100644 --- a/entity/Product_entity/Product_entity.aod +++ b/entity/Product_entity/Product_entity.aod @@ -550,6 +550,34 @@ <name>ADVERTISING_TILEVIEW</name> <documentation>%aditoprj%/entity/Product_entity/entityfields/advertising_tileview/documentation.adoc</documentation> </entityField> + <entityConsumer> + <name>Offeritems</name> + <dependency> + <name>dependency</name> + <entityName>Offeritem_entity</entityName> + <fieldName>OfferItems</fieldName> + </dependency> + <children> + <entityParameter> + <name>ProductId_param</name> + <valueProcess>%aditoprj%/entity/Product_entity/entityfields/offeritems/children/productid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Orderitems</name> + <dependency> + <name>dependency</name> + <entityName>Orderitem_entity</entityName> + <fieldName>Orderitems</fieldName> + </dependency> + <children> + <entityParameter> + <name>ProductId_param</name> + <valueProcess>%aditoprj%/entity/Product_entity/entityfields/orderitems/children/productid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Product_entity/entityfields/offeritems/children/productid_param/valueProcess.js b/entity/Product_entity/entityfields/offeritems/children/productid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..85f8124d67a3ce24425ed32b9e73d296ad29be05 --- /dev/null +++ b/entity/Product_entity/entityfields/offeritems/children/productid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.vars"); + +result.string(vars.get("$field.PRODUCTID")); diff --git a/entity/Product_entity/entityfields/orderitems/children/productid_param/valueProcess.js b/entity/Product_entity/entityfields/orderitems/children/productid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..85f8124d67a3ce24425ed32b9e73d296ad29be05 --- /dev/null +++ b/entity/Product_entity/entityfields/orderitems/children/productid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.vars"); + +result.string(vars.get("$field.PRODUCTID")); diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index d62cbad3ec744f918545c5b6b6fc893d6651956b..6f6dbc6a5635870dcf32121f1c827b59fcc34e20 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -14646,7 +14646,7 @@ Bitte Datumseingabe prüfen</value> <key>Service ticket category</key> </entry> <entry> - <key>Use all service ticket categories</key> + <key>Use all serviceticket categories</key> </entry> <entry> <key>Contact & Service ticket</key> @@ -14655,6 +14655,14 @@ Bitte Datumseingabe prüfen</value> <key>Reveal the price in the offer</key> <value>Preis im Angebot ausweisen</value> </entry> + <entry> + <key>Offers / Receipts</key> + <value>Angebote / Belege</value> + </entry> + <entry> + <key>Calculate sum</key> + <value>Summe berechnen</value> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/Offeritem/Offeritem.aod b/neonContext/Offeritem/Offeritem.aod index 052bf2f4d36deb49a9d04ac7461ab2ebbe145d3f..b42f5346f0d7a1fbfc4d5afb214771cdfcae3fce 100644 --- a/neonContext/Offeritem/Offeritem.aod +++ b/neonContext/Offeritem/Offeritem.aod @@ -24,5 +24,9 @@ <name>9571eef4-1b84-4f4f-9109-7c5f63571a93</name> <view>OfferitemEdit_view</view> </neonViewReference> + <neonViewReference> + <name>3acc3773-580f-40ec-948e-23a70a46cd5e</name> + <view>OfferitemProduct_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/Order/Order.aod b/neonContext/Order/Order.aod index 21a230bfa7bb72f8f316727148a524b777c7ae91..06062207e428e9ed550351e9dfad9e0c9374bdb4 100644 --- a/neonContext/Order/Order.aod +++ b/neonContext/Order/Order.aod @@ -55,5 +55,9 @@ <name>777804d0-fe8d-43b6-9599-18fc46951d8f</name> <view>OrderAddress_view</view> </neonViewReference> + <neonViewReference> + <name>511215ef-6813-49c5-ac11-6841d046de62</name> + <view>OrderDrawer_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/Orderitem/Orderitem.aod b/neonContext/Orderitem/Orderitem.aod index 7317e72be684374f98fb8797603cf4d6a3ec1819..8c9590905f4adce52dcf83cdb3b2d565b1157205 100644 --- a/neonContext/Orderitem/Orderitem.aod +++ b/neonContext/Orderitem/Orderitem.aod @@ -23,5 +23,9 @@ <name>7da75934-7cc5-4271-a054-a6e82007b25c</name> <view>OrderitemEdit_view</view> </neonViewReference> + <neonViewReference> + <name>099ed5c4-0905-44a9-b547-459f44f60d15</name> + <view>OrderitemProduct_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/Product/Product.aod b/neonContext/Product/Product.aod index 4a1a49078e0a59b2fd6643f45972170c2e52f505..a351e0477842e17e1b6413477923289f3f45e36b 100644 --- a/neonContext/Product/Product.aod +++ b/neonContext/Product/Product.aod @@ -35,5 +35,9 @@ <name>8088a294-78dd-4f7b-8bd3-add1b9fe3d90</name> <view>ProductDescritption_view</view> </neonViewReference> + <neonViewReference> + <name>bcc36a52-f97f-4883-b1eb-21b9daef82f4</name> + <view>ProductOfferOrder_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonView/OfferitemProduct_view/OfferitemProduct_view.aod b/neonView/OfferitemProduct_view/OfferitemProduct_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..c59eb6c5bd723837c2496ddf0f13406d53b39c8d --- /dev/null +++ b/neonView/OfferitemProduct_view/OfferitemProduct_view.aod @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>OfferitemProduct_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <drawerLayout> + <name>layout</name> + <layoutCaption>Offers</layoutCaption> + <fixedDrawer v="true" /> + </drawerLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <columns> + <neonTableColumn> + <name>b79722bf-cc93-4cf2-814b-a23271a66972</name> + <entityField>OFFER_IMAGE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>95dc000b-be3f-4c8e-8791-b94011aa2989</name> + <entityField>OFFER_CODE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>60ee7841-f38e-495a-bc21-eed1e5da2d01</name> + <entityField>QUANTITY</entityField> + </neonTableColumn> + <neonTableColumn> + <name>5b87fdd1-c222-4b4d-856c-4f93aa239d07</name> + <entityField>UNIT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>1ce4d845-5377-4040-8603-d85624afaf22</name> + <entityField>PRICE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>1004b07f-13b3-4f95-ab37-69bfe49d8702</name> + <entityField>DISCOUNT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8e31c124-59e9-4a33-8e0b-9ca3956ec740</name> + <entityField>OFFER_ORGANISATION_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8bff92d5-3fcb-4bdc-8e15-e4735b58770c</name> + <entityField>OFFER_PERSON_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>9a209746-67a7-4eb9-ac60-9cb2ee8fa8b9</name> + <entityField>OFFER_STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>c079f182-8f72-491c-95d8-05152a951c15</name> + <entityField>OFFER_DATE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>fd2eebae-ef6e-4d3e-a2ce-b8473f63696a</name> + <entityField>OFFER_NET</entityField> + </neonTableColumn> + <neonTableColumn> + <name>67cec124-9243-4844-9f58-77e76521b6f2</name> + <entityField>OFFER_PROBABILITY</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/OrderDrawer_view/OrderDrawer_view.aod b/neonView/OrderDrawer_view/OrderDrawer_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..592ec2f30cff6eb2f8941b4fee9372f08cefdb55 --- /dev/null +++ b/neonView/OrderDrawer_view/OrderDrawer_view.aod @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>OrderDrawer_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <drawerLayout> + <name>layout</name> + <layoutCaption>Receipts</layoutCaption> + <fixedDrawer v="true" /> + </drawerLayout> + </layout> + <children> + <neonViewReference> + <name>2f7a251b-7bfb-42ac-b19f-4682ccf33996</name> + <entityField>#ENTITY</entityField> + <view>OrderFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/OrderitemProduct_view/OrderitemProduct_view.aod b/neonView/OrderitemProduct_view/OrderitemProduct_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..fbe940c2b2dc5a4302b140419d1289b4d29363e4 --- /dev/null +++ b/neonView/OrderitemProduct_view/OrderitemProduct_view.aod @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>OrderitemProduct_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <drawerLayout> + <name>layout</name> + <layoutCaption>Receipts</layoutCaption> + <fixedDrawer v="true" /> + </drawerLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <columns> + <neonTableColumn> + <name>ed0bd6a4-e097-4a06-936e-48fa11b150ca</name> + <entityField>ORDER_IMAGE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>7a415c49-45b2-4ad6-987b-4f22ae50d4b4</name> + <entityField>ORDER_CODE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>f205ed09-b2b9-419b-9895-b5f491b63f5c</name> + <entityField>QUANTITY</entityField> + </neonTableColumn> + <neonTableColumn> + <name>3b8afd79-15aa-4726-8ce6-59ef66132603</name> + <entityField>UNIT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>5f0f750c-9508-4e1b-ab39-c4d9cf7db4ca</name> + <entityField>PRICE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>63dfff3b-01f3-47c1-bd65-58e9c1d2d3b4</name> + <entityField>DISCOUNT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>d357bef5-4057-4f66-88ad-5b753802114b</name> + <entityField>ORDER_TYPE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>22c35bad-ebda-443e-bb14-2804051ad16f</name> + <entityField>ORDER_ORGANISATION_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>935ac8a0-04f0-41ec-ad14-534f3b01f8bd</name> + <entityField>ORDER_PERSON_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>a64577dc-00fc-4899-9738-795ee93fb731</name> + <entityField>ORDER_STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8c4afba0-3e80-463d-8e8d-3c0fd3e3c5f5</name> + <entityField>ORDER_DATE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>286852c4-8749-4f39-8eb8-c01117afd650</name> + <entityField>ORDER_CANCELLATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>f245b6d4-1018-42be-bfee-c0d88b5ae7ea</name> + <entityField>ORDER_NET</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/ProductMain_view/ProductMain_view.aod b/neonView/ProductMain_view/ProductMain_view.aod index ef39735d8175cab955b0be9e0f0b896e84475d1b..27dc6309ff4b0b8771dcdc9b67b17a884d0b8a7b 100644 --- a/neonView/ProductMain_view/ProductMain_view.aod +++ b/neonView/ProductMain_view/ProductMain_view.aod @@ -29,6 +29,11 @@ <entityField>#ENTITY</entityField> <view>ProductDescritption_view</view> </neonViewReference> + <neonViewReference> + <name>db635367-7397-45d6-835c-c8ce7f75a38b</name> + <entityField>#ENTITY</entityField> + <view>ProductOfferOrder_view</view> + </neonViewReference> <neonViewReference> <name>6ee1258f-b571-45c1-b833-f292361b5a04</name> <entityField>AttributeTree</entityField> diff --git a/neonView/ProductOfferOrder_view/ProductOfferOrder_view.aod b/neonView/ProductOfferOrder_view/ProductOfferOrder_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..178f190a76721f10f125a5d848b601df58e586ec --- /dev/null +++ b/neonView/ProductOfferOrder_view/ProductOfferOrder_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>ProductOfferOrder_view</name> + <title>Offers / Receipts</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>b56f3664-bb9f-4b84-8963-32704f9752a3</name> + <entityField>Offeritems</entityField> + <view>OfferitemProduct_view</view> + </neonViewReference> + <neonViewReference> + <name>6f8f14a2-c5b0-4697-a0b6-bd12ae89bb43</name> + <entityField>Orderitems</entityField> + <view>OrderitemProduct_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js index c9189834b596e98d9a40ab8be3e5f838f704e281..2a72f327942d4adb6a0472566e15163f23a90256 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -4297,6 +4297,7 @@ SqlUtils.escapeVars = function (pValue) SqlUtils.getSqlConditionalOperator = function(pOperator) { + pOperator = pOperator || vars.get("$local.operator"); switch(parseInt(pOperator)) { case 1: