Skip to content
Snippets Groups Projects
Commit 1bc423b9 authored by Sebastian Pongratz's avatar Sebastian Pongratz :ping_pong:
Browse files

Merge branch 'sales_1081505_FeatureMultiCurrencyCapability' into 'master'

Sales 1081505 feature multi currency capability

See merge request xrm/basic!1445
parents 6df4768b 29be9175
No related branches found
No related tags found
No related merge requests found
Showing
with 159 additions and 126 deletions
import("Util_lib");
import("system.result");
import("system.vars");
var targetAmount = vars.get("$this.value");
if(targetAmount)
{
var currency = vars.get("$param.Currency_param") ? vars.get("$param.Currency_param") : "";
result.string(NumberUtils.formatWithCurrency(targetAmount, "#,##0.00", currency));
}
\ No newline at end of file
import("Currency_lib");
import("system.result");
result.string(CurrencyRateUtils.getFieldStateChildEntity("CurrencyAndCurrencyRate_param"));
\ No newline at end of file
import("Currency_lib");
import("system.result");
import("system.vars");
import("system.translate");
result.string(translate.withArguments("Target Amount in %0", [vars.get("$param.Currency_param")]));
\ No newline at end of file
result.string(translate.withArguments("Target Amount (%0)", [CurrencyUtils.getLocalCurrency()]));
\ No newline at end of file
import("Util_lib");
import("system.result");
import("system.vars");
if(vars.get("$field.PRODUCT_ID") && vars.exists("$param.ProductObject_param"))
{
var quantity = vars.get("$field.QUANTITY");
//The original price of the product is used as a fallback while the price field can still be edited by the user
var productObj = JSON.parse(vars.get("$param.ProductObject_param"));
var price = (productObj.PriceListToUse != null) ? productObj.PriceListToUse.price : vars.get("$field.PRICE");
var ret = (Utils.toBoolean(price)) ? price * quantity : 0;
result.string(ret);
}
import("Currency_lib");
CurrencyRateUtils.setOtherValueFieldChildEntity("CurrencyAndCurrencyRate_param", "TARGETAMOUNT");
\ No newline at end of file
import("Currency_lib");
import("system.result");
result.string(CurrencyRateUtils.getFieldStateChildEntity("CurrencyAndCurrencyRate_param", true));
\ No newline at end of file
import("system.translate");
import("system.result");
import("Context_lib");
import("system.vars");
var currencyParam = JSON.parse(vars.get("$param.CurrencyAndCurrencyRate_param"));
var currency = ContextUtils.loadContentTitle("Currency_entity", currencyParam["currency"]);
result.string(translate.withArguments("Target Amount (%0)", [currency]));
\ No newline at end of file
import("system.SQLTYPES");
import("system.result");
import("Sql_lib");
var sqlHelper = new SqlMaskingUtils();
result.string(sqlHelper.concatenate([sqlHelper.cast(sqlHelper.cast("ADVERTISINGITEM.PRICE*ADVERTISINGITEM.QUANTITY", SQLTYPES.DECIMAL, [30, 2]), SQLTYPES.VARCHAR, 20), "' '", sqlHelper.cast("ADVERTISING.CURRENCY", SQLTYPES.VARCHAR, 20)]))
\ No newline at end of file
import("system.vars");
import("system.result");
import("Sql_lib");
var currencyParam = vars.get("$param.CurrencyAndCurrencyRate_param");
var price = SqlBuilder.caseWhen(newWhere("ADVERTISINGITEM.PRICE", "0", SqlBuilder.GREATER()))
.then("ADVERTISINGITEM.PRICE /" + JSON.parse(currencyParam)["currencyRate"])
.elseValue("0")
.toString();
result.string(price + " * ADVERTISINGITEM.QUANTITY");
import("system.SQLTYPES");
import("system.result");
import("Sql_lib");
var sqlHelper = new SqlMaskingUtils();
result.string(sqlHelper.concatenate([sqlHelper.cast("ADVERTISINGITEM.PRICE", SQLTYPES.VARCHAR, 20), "' '", sqlHelper.cast("ADVERTISING.CURRENCY", SQLTYPES.VARCHAR, 20)]))
\ No newline at end of file
import("system.vars");
import("system.result");
import("Sql_lib");
var currencyParam = vars.get("$param.CurrencyAndCurrencyRate_param");
var price = SqlBuilder.caseWhen(newWhere("ADVERTISINGITEM.PRICE", "0", SqlBuilder.GREATER()))
.then("ADVERTISINGITEM.PRICE /" + JSON.parse(currencyParam)["currencyRate"])
.elseValue("0")
.toString();
result.string(price);
\ No newline at end of file
import("system.SQLTYPES");
import("system.result");
import("Sql_lib");
var sqlHelper = new SqlMaskingUtils();
result.string(sqlHelper.concatenate([sqlHelper.cast("ADVERTISINGITEM.TARGETAMOUNT", SQLTYPES.VARCHAR, 20), "' '", sqlHelper.cast("ADVERTISING.CURRENCY", SQLTYPES.VARCHAR, 20)]))
\ No newline at end of file
import("system.vars");
import("system.result");
import("Sql_lib");
var currencyParam = vars.get("$param.CurrencyAndCurrencyRate_param");
var price = SqlBuilder.caseWhen(newWhere("ADVERTISINGITEM.TARGETAMOUNT", "0", SqlBuilder.GREATER()))
.then("ADVERTISINGITEM.TARGETAMOUNT /" + JSON.parse(currencyParam)["currencyRate"])
.elseValue("0")
.toString();
result.string(price);
......@@ -26,15 +26,6 @@
<state>EDITABLE</state>
<displayValueProcess>%aditoprj%/entity/Advertising_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess>
</entityField>
<entityField>
<name>CURRENCY</name>
<title>Currency</title>
<consumer>KeywordCurrencies</consumer>
<mandatory v="true" />
<stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/currency/stateProcess.js</stateProcess>
<valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/currency/valueProcess.js</valueProcess>
<displayValueProcess>%aditoprj%/entity/Advertising_entity/entityfields/currency/displayValueProcess.js</displayValueProcess>
</entityField>
<entityField>
<name>OBJECT_TYPE</name>
</entityField>
......@@ -122,6 +113,10 @@
<name>AdvertisingId_param</name>
<valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/advertisingitemsconsumer/children/advertisingid_param/valueProcess.js</valueProcess>
</entityParameter>
<entityParameter>
<name>CurrencyAndCurrencyRate_param</name>
<valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/advertisingitemsconsumer/children/currencyandcurrencyrate_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityField>
......@@ -183,23 +178,6 @@
</entityParameter>
</children>
</entityConsumer>
<entityActionField>
<name>startWorkflow</name>
<title>Start Workflow</title>
<onActionProcess>%aditoprj%/entity/Advertising_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess>
<iconId>VAADIN:PLAY</iconId>
<stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/startworkflow/stateProcess.js</stateProcess>
<tooltip>Start advertising material workflow</tooltip>
<tooltipProcess>%aditoprj%/entity/Advertising_entity/entityfields/startworkflow/tooltipProcess.js</tooltipProcess>
</entityActionField>
<entityActionField>
<name>newMail</name>
<title>new Email</title>
<onActionProcess>%aditoprj%/entity/Advertising_entity/entityfields/newmail/onActionProcess.js</onActionProcess>
<iconId>VAADIN:AT</iconId>
<stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/newmail/stateProcess.js</stateProcess>
<tooltip>Send digital Advertising materials &amp; complete Workflow Task</tooltip>
</entityActionField>
<entityField>
<name>USER_EDIT</name>
<title>USER_EDIT</title>
......@@ -210,13 +188,6 @@
<title>USER_NEW</title>
<valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/user_new/valueProcess.js</valueProcess>
</entityField>
<entityActionField>
<name>openAdminView</name>
<title>Open admin view</title>
<onActionProcess>%aditoprj%/entity/Advertising_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
<iconId>VAADIN:CURLY_BRACKETS</iconId>
<stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/openadminview/stateProcess.js</stateProcess>
</entityActionField>
<entityParameter>
<name>IsInsertAdvertising_param</name>
<expose v="true" />
......@@ -245,10 +216,50 @@
<name>PICTURE</name>
<contentType>IMAGE</contentType>
</entityField>
<entityField>
<name>CURRENCYRATE_ID</name>
<title>Currency</title>
<mandatory v="true" />
<dropDownProcess>%aditoprj%/entity/Advertising_entity/entityfields/currencyrate_id/dropDownProcess.js</dropDownProcess>
<stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/currencyrate_id/stateProcess.js</stateProcess>
<valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/currencyrate_id/valueProcess.js</valueProcess>
</entityField>
<entityActionField>
<name>startWorkflow</name>
<title>Start Workflow</title>
<onActionProcess>%aditoprj%/entity/Advertising_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess>
<iconId>VAADIN:PLAY</iconId>
<stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/startworkflow/stateProcess.js</stateProcess>
<tooltip>Start advertising material workflow</tooltip>
<tooltipProcess>%aditoprj%/entity/Advertising_entity/entityfields/startworkflow/tooltipProcess.js</tooltipProcess>
</entityActionField>
<entityActionField>
<name>newMail</name>
<title>new Email</title>
<onActionProcess>%aditoprj%/entity/Advertising_entity/entityfields/newmail/onActionProcess.js</onActionProcess>
<iconId>VAADIN:AT</iconId>
<stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/newmail/stateProcess.js</stateProcess>
<tooltip>Send digital Advertising materials &amp; complete Workflow Task</tooltip>
</entityActionField>
<entityActionField>
<name>refreshCurrencyRate</name>
<onActionProcess>%aditoprj%/entity/Advertising_entity/entityfields/refreshcurrencyrate/onActionProcess.js</onActionProcess>
<iconId>NEON:RECURRING_APPOINTMENT</iconId>
<stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/refreshcurrencyrate/stateProcess.js</stateProcess>
<titleProcess>%aditoprj%/entity/Advertising_entity/entityfields/refreshcurrencyrate/titleProcess.js</titleProcess>
</entityActionField>
<entityActionField>
<name>openAdminView</name>
<title>Open admin view</title>
<onActionProcess>%aditoprj%/entity/Advertising_entity/entityfields/openadminview/onActionProcess.js</onActionProcess>
<iconId>VAADIN:CURLY_BRACKETS</iconId>
<stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/openadminview/stateProcess.js</stateProcess>
</entityActionField>
</entityFields>
<recordContainers>
<dbRecordContainer>
<name>db</name>
<fromClauseProcess>%aditoprj%/entity/Advertising_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
<conditionProcess>%aditoprj%/entity/Advertising_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
<orderClauseProcess>%aditoprj%/entity/Advertising_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess>
<alias>Data_alias</alias>
......@@ -262,11 +273,6 @@
<recordfield>ADVERTISING.CONTACT_ID</recordfield>
<isFilterable v="true" />
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>CURRENCY.value</name>
<recordfield>ADVERTISING.CURRENCY</recordfield>
<isFilterable v="true" />
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>OBJECT_TYPE.value</name>
<recordfield>ADVERTISING.OBJECT_TYPE</recordfield>
......@@ -301,10 +307,6 @@
<name>STATUS.displayValue</name>
<expression>%aditoprj%/entity/Advertising_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>CURRENCY.displayValue</name>
<expression>%aditoprj%/entity/Advertising_entity/recordcontainers/db/recordfieldmappings/currency.displayvalue/expression.js</expression>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>RESPONSIBLE_ID.displayValue</name>
<expression>%aditoprj%/entity/Advertising_entity/recordcontainers/db/recordfieldmappings/responsible_id.displayvalue/expression.js</expression>
......@@ -335,15 +337,26 @@
<name>PICTURE.value</name>
<expression>%aditoprj%/entity/Advertising_entity/recordcontainers/db/recordfieldmappings/picture.value/expression.js</expression>
</dbRecordFieldMapping>
<dbRecordFieldMapping>
<name>CURRENCYRATE_ID.value</name>
<recordfield>ADVERTISING.CURRENCYRATE_ID</recordfield>
</dbRecordFieldMapping>
</recordFieldMappings>
<linkInformation>
<linkInformation>
<name>f0bfd671-33ec-4106-b89e-5e2b198ec987</name>
<name>5509be9c-7c45-4bfe-ae69-72626c38f63f</name>
<tableName>ADVERTISING</tableName>
<primaryKey>ADVERTISINGID</primaryKey>
<isUIDTable v="true" />
<readonly v="false" />
</linkInformation>
<linkInformation>
<name>9494beff-1a9c-4541-8b3b-5ab163556b29</name>
<tableName>CURRENCYRATE</tableName>
<primaryKey>CURRENCYRATEID</primaryKey>
<isUIDTable v="false" />
<readonly v="true" />
</linkInformation>
</linkInformation>
</dbRecordContainer>
</recordContainers>
......
import("Currency_lib");
import("system.result");
import("system.vars");
var currencyAndRate = CurrencyRateUtils.getCurrencyRateById(vars.get("$field.CURRENCYRATE_ID"), true)
var res = {
currency: currencyAndRate[1]
, currencyRate: currencyAndRate[0]
}
result.string(JSON.stringify(res));
\ No newline at end of file
import("system.result");
import("system.vars");
import("Keyword_lib");
import("KeywordRegistry_basic");
result.string(KeywordUtils.getViewValue($KeywordRegistry.currency(), vars.get("$field.CURRENCY")));
\ No newline at end of file
import("Advertising_lib");
import("system.entities");
import("system.result");
import("system.neon");
import("system.vars");
var loadConfig = entities.createConfigForLoadingRows()
.entity("AdvertisingItem_entity")
.addParameter("AdvertisingId_param", vars.get("$field.ADVERTISINGID"));
var adverttisingItemCount = entities.getRowCount(loadConfig);
if(adverttisingItemCount > 0)
{
result.string(neon.COMPONENTSTATE_DISABLED);
}
else
{
result.string(AdvertisingUtils.isEditable(vars.get("$field.STATUS")) ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED);
}
import("system.neon");
import("system.result");
import("system.vars");
import("KeywordRegistry_basic");
if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$this.value") == null)
{
result.string($KeywordRegistry.currency$eur());
}
\ No newline at end of file
import("system.vars");
import("Currency_lib");
import("system.result");
result.object(CurrencyRateUtils.getCurrencies(true, false, vars.get("$sys.recordstate")));
\ No newline at end of file
import("Advertising_lib");
import("system.vars");
import("system.result");
import("system.neon");
import("Offer_lib");
import("system.entities");
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
{
var loadConfig = entities.createConfigForLoadingRows()
.entity("AdvertisingItem_entity")
.addParameter("AdvertisingId_param", vars.get("$field.ADVERTISINGID"));
var advertisingItemCount = entities.getRowCount(loadConfig);
var state;
if(advertisingItemCount > 0)
{
state = neon.COMPONENTSTATE_DISABLED;
}
else if(AdvertisingUtils.isEditable(vars.get("$field.STATUS")))
{
state = neon.COMPONENTSTATE_AUTO;
}
else
{
state = neon.COMPONENTSTATE_DISABLED;
}
result.string(state);
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment