Skip to content
Snippets Groups Projects
Commit d93bd2f9 authored by Johannes Hörmann's avatar Johannes Hörmann
Browse files

Forecast salesproject view improved

parent b7c5aad3
No related branches found
No related tags found
No related merge requests found
Showing
with 1572 additions and 1349 deletions
import("system.logging");
import("system.result");
import("system.db");
import("system.vars");
import("Sql_lib");
logging.log("grantDelete " + (parseInt(db.cell(SqlCondition.begin()
.andPrepare("CLASSIFICATION.CLASSIFICATIONTYPE_ID", vars.get("$field.CLASSIFICATIONTYPEID"))
.buildSql("select count(*) from CLASSIFICATION", "1=2"))) <= 0))
result.object(parseInt(db.cell(SqlCondition.begin()
.andPrepare("CLASSIFICATION.CLASSIFICATIONTYPE_ID", vars.get("$field.CLASSIFICATIONTYPEID"))
.buildSql("select count(*) from CLASSIFICATION", "1=2"))) <= 0);
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.6">
<name>ObjectTree_entity</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<title>Object relation</title>
<titlePlural>Relations</titlePlural>
<recordContainer>jdito</recordContainer>
<entityFields>
<entityProvider>
<name>#PROVIDER</name>
</entityProvider>
<entityProvider>
<name>TreeProvider</name>
<targetContextField>TARGET_CONTEXT</targetContextField>
<targetIdField>TARGET_ID</targetIdField>
<dependencies>
<entityDependency>
<name>f4c0605f-3ccb-4ff1-b460-7268e8553857</name>
<entityName>Organisation_entity</entityName>
<fieldName>ObjectTrees</fieldName>
<isConsumer v="false" />
</entityDependency>
<entityDependency>
<name>423acf79-e2c5-46e4-9fb5-7b1a7078d4f4</name>
<entityName>Person_entity</entityName>
<fieldName>ObjectTrees</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>ObjectId_param</name>
<expose v="true" />
<mandatory v="true" />
</entityParameter>
<entityParameter>
<name>ObjectType_param</name>
<expose v="true" />
<mandatory v="true" />
</entityParameter>
<entityParameter>
<name>RelationType_param</name>
<expose v="false" />
</entityParameter>
<entityParameter>
<name>Uid_param</name>
<expose v="false" />
</entityParameter>
</children>
</entityProvider>
<entityParameter>
<name>ObjectId_param</name>
<expose v="true" />
<mandatory v="true" />
<description>PARAMETER</description>
</entityParameter>
<entityField>
<name>UID</name>
<searchable v="false" />
</entityField>
<entityField>
<name>PARENT_ID</name>
<searchable v="false" />
<tooltip></tooltip>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/parent_id/valueProcess.js</valueProcess>
</entityField>
<entityField>
<name>TITLE</name>
<title>Object</title>
<linkedContextProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/title/linkedContextProcess.js</linkedContextProcess>
<searchable v="false" />
</entityField>
<entityField>
<name>ICON</name>
<contentType>IMAGE</contentType>
<searchable v="false" />
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/icon/valueProcess.js</valueProcess>
</entityField>
<entityConsumer>
<name>ObjectRelationTypes</name>
<dependency>
<name>dependency</name>
<entityName>ObjectRelationType_entity</entityName>
<fieldName>ObjectRelationTypes</fieldName>
</dependency>
<children>
<entityParameter>
<name>SourceObjectType_param</name>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttype_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityParameter>
<name>ObjectType_param</name>
<expose v="true" />
<mandatory v="true" />
<description>PARAMETER</description>
</entityParameter>
<entityField>
<name>EXPANDED</name>
<searchable v="false" />
</entityField>
<entityField>
<name>NODEID</name>
<searchable v="false" />
</entityField>
<entityField>
<name>TARGET_ID</name>
<title>Object</title>
<consumer>Objects</consumer>
<linkedContextProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/target_id/linkedContextProcess.js</linkedContextProcess>
<mandatory v="true" />
<searchable v="false" />
<stateProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/target_id/stateProcess.js</stateProcess>
<displayValueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/target_id/displayValueProcess.js</displayValueProcess>
</entityField>
<entityField>
<name>TARGET_CONTEXT</name>
<searchable v="false" />
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js</valueProcess>
</entityField>
<entityField>
<name>INFO</name>
<title>Description</title>
<contentType>LONG_TEXT</contentType>
<searchable v="false" />
<tooltipProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/info/tooltipProcess.js</tooltipProcess>
</entityField>
<entityField>
<name>OBJECTRELATIONTYPEID</name>
<title>Relationtype</title>
<consumer>ObjectRelationTypes</consumer>
<mandatory v="true" />
<stateProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypeid/stateProcess.js</stateProcess>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypeid/valueProcess.js</valueProcess>
<displayValueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypeid/displayValueProcess.js</displayValueProcess>
<onValueChange>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypeid/onValueChange.js</onValueChange>
</entityField>
<entityConsumer>
<name>Objects</name>
<dependency>
<name>dependency</name>
<entityName>Object_entity</entityName>
<fieldName>FilteredObjects</fieldName>
</dependency>
<children>
<entityParameter>
<name>ObjectType_param</name>
<title></title>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objects/children/objecttype_param/valueProcess.js</valueProcess>
<triggerRecalculation v="true" />
</entityParameter>
<entityParameter>
<name>ExcludedObjectIds_param</name>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objects/children/excludedobjectids_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityActionGroup>
<name>alter</name>
<children>
<entityActionField>
<name>insert</name>
<onActionProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/alter/children/insert/onActionProcess.js</onActionProcess>
<iconId>VAADIN:FILE_TREE_SMALL</iconId>
<stateProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/alter/children/insert/stateProcess.js</stateProcess>
</entityActionField>
<entityActionField>
<name>edit</name>
<onActionProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/alter/children/edit/onActionProcess.js</onActionProcess>
<iconId>NEON:PENCIL</iconId>
<stateProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/alter/children/edit/stateProcess.js</stateProcess>
</entityActionField>
</children>
</entityActionGroup>
<entityParameter>
<name>RelationType_param</name>
<expose v="true" />
<description>PARAMETER</description>
</entityParameter>
<entityParameter>
<name>Uid_param</name>
<expose v="true" />
<description>Needed to load ONE Objectrelation together with ObjectId_param and ObjectType_param to determine the side</description>
</entityParameter>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
<name>jdito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<isFilterable v="true" />
<contentProcess>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<onInsert>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js</onInsert>
<onUpdate>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
<onDelete>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/onDelete.js</onDelete>
<recordFields>
<element>UID.value</element>
<element>TITLE.value</element>
<element>PARENT_ID.value</element>
<element>EXPANDED.value</element>
<element>TARGET_ID.value</element>
<element>TARGET_CONTEXT.value</element>
<element>INFO.value</element>
<element>OBJECTRELATIONTYPEID.value</element>
</recordFields>
</jDitoRecordContainer>
</recordContainers>
</entity>
<?xml version="1.0" encoding="UTF-8"?>
<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.6">
<name>ObjectTree_entity</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<title>Object relation</title>
<grantDeleteProcess>%aditoprj%/entity/ObjectTree_entity/grantDeleteProcess.js</grantDeleteProcess>
<titlePlural>Relations</titlePlural>
<recordContainer>jdito</recordContainer>
<entityFields>
<entityProvider>
<name>#PROVIDER</name>
</entityProvider>
<entityProvider>
<name>TreeProvider</name>
<targetContextField>TARGET_CONTEXT</targetContextField>
<targetIdField>TARGET_ID</targetIdField>
<dependencies>
<entityDependency>
<name>f4c0605f-3ccb-4ff1-b460-7268e8553857</name>
<entityName>Organisation_entity</entityName>
<fieldName>ObjectTrees</fieldName>
<isConsumer v="false" />
</entityDependency>
<entityDependency>
<name>423acf79-e2c5-46e4-9fb5-7b1a7078d4f4</name>
<entityName>Person_entity</entityName>
<fieldName>ObjectTrees</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>ObjectId_param</name>
<expose v="true" />
<mandatory v="true" />
</entityParameter>
<entityParameter>
<name>ObjectType_param</name>
<expose v="true" />
<mandatory v="true" />
</entityParameter>
<entityParameter>
<name>RelationType_param</name>
<expose v="false" />
</entityParameter>
<entityParameter>
<name>Uid_param</name>
<expose v="false" />
</entityParameter>
</children>
</entityProvider>
<entityParameter>
<name>ObjectId_param</name>
<expose v="true" />
<mandatory v="true" />
<description>PARAMETER</description>
</entityParameter>
<entityField>
<name>UID</name>
<searchable v="false" />
</entityField>
<entityField>
<name>PARENT_ID</name>
<searchable v="false" />
<tooltip></tooltip>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/parent_id/valueProcess.js</valueProcess>
</entityField>
<entityField>
<name>TITLE</name>
<title>Object</title>
<linkedContextProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/title/linkedContextProcess.js</linkedContextProcess>
<searchable v="false" />
</entityField>
<entityField>
<name>ICON</name>
<contentType>IMAGE</contentType>
<searchable v="false" />
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/icon/valueProcess.js</valueProcess>
</entityField>
<entityConsumer>
<name>ObjectRelationTypes</name>
<dependency>
<name>dependency</name>
<entityName>ObjectRelationType_entity</entityName>
<fieldName>ObjectRelationTypes</fieldName>
</dependency>
<children>
<entityParameter>
<name>SourceObjectType_param</name>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypes/children/sourceobjecttype_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityParameter>
<name>ObjectType_param</name>
<expose v="true" />
<mandatory v="true" />
<description>PARAMETER</description>
</entityParameter>
<entityField>
<name>EXPANDED</name>
<searchable v="false" />
</entityField>
<entityField>
<name>NODEID</name>
<searchable v="false" />
</entityField>
<entityField>
<name>TARGET_ID</name>
<title>Object</title>
<consumer>Objects</consumer>
<linkedContextProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/target_id/linkedContextProcess.js</linkedContextProcess>
<mandatory v="true" />
<searchable v="false" />
<stateProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/target_id/stateProcess.js</stateProcess>
<displayValueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/target_id/displayValueProcess.js</displayValueProcess>
</entityField>
<entityField>
<name>TARGET_CONTEXT</name>
<searchable v="false" />
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js</valueProcess>
</entityField>
<entityField>
<name>INFO</name>
<title>Description</title>
<contentType>LONG_TEXT</contentType>
<searchable v="false" />
<tooltipProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/info/tooltipProcess.js</tooltipProcess>
</entityField>
<entityField>
<name>OBJECTRELATIONTYPEID</name>
<title>Relationtype</title>
<consumer>ObjectRelationTypes</consumer>
<mandatory v="true" />
<stateProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypeid/stateProcess.js</stateProcess>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypeid/valueProcess.js</valueProcess>
<displayValueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypeid/displayValueProcess.js</displayValueProcess>
<onValueChange>%aditoprj%/entity/ObjectTree_entity/entityfields/objectrelationtypeid/onValueChange.js</onValueChange>
</entityField>
<entityConsumer>
<name>Objects</name>
<dependency>
<name>dependency</name>
<entityName>Object_entity</entityName>
<fieldName>FilteredObjects</fieldName>
</dependency>
<children>
<entityParameter>
<name>ObjectType_param</name>
<title></title>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objects/children/objecttype_param/valueProcess.js</valueProcess>
<triggerRecalculation v="true" />
</entityParameter>
<entityParameter>
<name>ExcludedObjectIds_param</name>
<valueProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/objects/children/excludedobjectids_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityActionGroup>
<name>alter</name>
<children>
<entityActionField>
<name>insert</name>
<onActionProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/alter/children/insert/onActionProcess.js</onActionProcess>
<iconId>VAADIN:FILE_TREE_SMALL</iconId>
<stateProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/alter/children/insert/stateProcess.js</stateProcess>
</entityActionField>
<entityActionField>
<name>edit</name>
<onActionProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/alter/children/edit/onActionProcess.js</onActionProcess>
<iconId>NEON:PENCIL</iconId>
<stateProcess>%aditoprj%/entity/ObjectTree_entity/entityfields/alter/children/edit/stateProcess.js</stateProcess>
</entityActionField>
</children>
</entityActionGroup>
<entityParameter>
<name>RelationType_param</name>
<expose v="true" />
<description>PARAMETER</description>
</entityParameter>
<entityParameter>
<name>Uid_param</name>
<expose v="true" />
<description>Needed to load ONE Objectrelation together with ObjectId_param and ObjectType_param to determine the side</description>
</entityParameter>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
<name>jdito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<isFilterable v="true" />
<contentProcess>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<onInsert>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/onInsert.js</onInsert>
<onUpdate>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
<onDelete>%aditoprj%/entity/ObjectTree_entity/recordcontainers/jdito/onDelete.js</onDelete>
<recordFields>
<element>UID.value</element>
<element>TITLE.value</element>
<element>PARENT_ID.value</element>
<element>EXPANDED.value</element>
<element>TARGET_ID.value</element>
<element>TARGET_CONTEXT.value</element>
<element>INFO.value</element>
<element>OBJECTRELATIONTYPEID.value</element>
</recordFields>
</jDitoRecordContainer>
</recordContainers>
</entity>
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8"?>
<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.6">
<name>TurnoverTree_entity</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<title>Tree</title>
<iconId>NEON:LOGO</iconId>
<recordContainer>jdito</recordContainer>
<entityFields>
<entityProvider>
<name>#PROVIDER</name>
</entityProvider>
<entityField>
<name>UID</name>
</entityField>
<entityField>
<name>CATEGORY</name>
<groupable v="true" />
</entityField>
<entityField>
<name>TURNOVERPRICE</name>
<title>Turnover</title>
<contentType>NUMBER</contentType>
<outputFormat>#,##0.00</outputFormat>
<inputFormat>#,##0.00</inputFormat>
</entityField>
<entityParameter>
<name>YearCountToShow_param</name>
<valueProcess>%aditoprj%/entity/TurnoverTree_entity/entityfields/yearcounttoshow_param/valueProcess.js</valueProcess>
<expose v="true" />
<triggerRecalculation v="true" />
<mandatory v="false" />
<documentation>%aditoprj%/entity/TurnoverTree_entity/entityfields/yearcounttoshow_param/documentation.adoc</documentation>
<description>PARAMETER</description>
</entityParameter>
<entityParameter>
<name>MaxYear_param</name>
<valueProcess>%aditoprj%/entity/TurnoverTree_entity/entityfields/maxyear_param/valueProcess.js</valueProcess>
<expose v="true" />
<triggerRecalculation v="true" />
<mandatory v="false" />
<documentation>%aditoprj%/entity/TurnoverTree_entity/entityfields/maxyear_param/documentation.adoc</documentation>
<description>PARAMETER</description>
</entityParameter>
<entityProvider>
<name>FilteredTurnovers</name>
<dependencies>
<entityDependency>
<name>0ea4ad47-985b-4a9c-81d8-946be324ae04</name>
<entityName>Turnover_entity</entityName>
<fieldName>Turnover_tree</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>YearCountToShow_param</name>
<expose v="true" />
</entityParameter>
</children>
</entityProvider>
<entityField>
<name>PARENT</name>
</entityField>
<entityField>
<name>GROUP</name>
<title>Product group</title>
</entityField>
<entityField>
<name>FORECASTPRICE</name>
<title>Forecast</title>
<contentType>NUMBER</contentType>
<outputFormat>#,##0.00</outputFormat>
<inputFormat>#,##0.00</inputFormat>
</entityField>
<entityField>
<name>YEAR</name>
</entityField>
<entityField>
<name>MONTH</name>
</entityField>
<entityField>
<name>LAYER</name>
</entityField>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
<name>jdito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<contentProcess>%aditoprj%/entity/TurnoverTree_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<recordFields>
<element>UID.value</element>
<element>PARENT.value</element>
<element>GROUP.value</element>
<element>CATEGORY.value</element>
<element>TURNOVERPRICE.value</element>
<element>FORECASTPRICE.value</element>
<element>YEAR.value</element>
<element>MONTH.value</element>
<element>LAYER.value</element>
</recordFields>
</jDitoRecordContainer>
</recordContainers>
</entity>
<?xml version="1.0" encoding="UTF-8"?>
<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.6">
<name>TurnoverTree_entity</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<title>Tree</title>
<iconId>NEON:LOGO</iconId>
<recordContainer>jdito</recordContainer>
<entityFields>
<entityProvider>
<name>#PROVIDER</name>
</entityProvider>
<entityField>
<name>UID</name>
</entityField>
<entityField>
<name>CATEGORY</name>
<groupable v="true" />
</entityField>
<entityField>
<name>TURNOVERPRICE</name>
<title>Turnover</title>
<contentType>NUMBER</contentType>
<outputFormat>#,##0.00</outputFormat>
<inputFormat>#,##0.00</inputFormat>
</entityField>
<entityParameter>
<name>YearCountToShow_param</name>
<valueProcess>%aditoprj%/entity/TurnoverTree_entity/entityfields/yearcounttoshow_param/valueProcess.js</valueProcess>
<expose v="true" />
<triggerRecalculation v="true" />
<mandatory v="false" />
<documentation>%aditoprj%/entity/TurnoverTree_entity/entityfields/yearcounttoshow_param/documentation.adoc</documentation>
<description>PARAMETER</description>
</entityParameter>
<entityParameter>
<name>MaxYear_param</name>
<valueProcess>%aditoprj%/entity/TurnoverTree_entity/entityfields/maxyear_param/valueProcess.js</valueProcess>
<expose v="true" />
<triggerRecalculation v="true" />
<mandatory v="false" />
<documentation>%aditoprj%/entity/TurnoverTree_entity/entityfields/maxyear_param/documentation.adoc</documentation>
<description>PARAMETER</description>
</entityParameter>
<entityParameter>
<name>SalesprojectId_param</name>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>ShowForecast_param</name>
<valueProcess>%aditoprj%/entity/TurnoverTree_entity/entityfields/showforecast_param/valueProcess.js</valueProcess>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>ShowTurnover_param</name>
<valueProcess>%aditoprj%/entity/TurnoverTree_entity/entityfields/showturnover_param/valueProcess.js</valueProcess>
<expose v="true" />
</entityParameter>
<entityProvider>
<name>FilteredTurnovers</name>
<dependencies>
<entityDependency>
<name>0ea4ad47-985b-4a9c-81d8-946be324ae04</name>
<entityName>Turnover_entity</entityName>
<fieldName>Turnover_tree</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>YearCountToShow_param</name>
<expose v="true" />
</entityParameter>
</children>
</entityProvider>
<entityField>
<name>PARENT</name>
</entityField>
<entityField>
<name>GROUP</name>
<title>Product group</title>
</entityField>
<entityField>
<name>FORECASTPRICE</name>
<title>Forecast</title>
<contentType>NUMBER</contentType>
<outputFormat>#,##0.00</outputFormat>
<inputFormat>#,##0.00</inputFormat>
</entityField>
<entityField>
<name>YEAR</name>
</entityField>
<entityField>
<name>MONTH</name>
</entityField>
<entityField>
<name>LAYER</name>
</entityField>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
<name>jdito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<contentProcess>%aditoprj%/entity/TurnoverTree_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<recordFields>
<element>UID.value</element>
<element>PARENT.value</element>
<element>GROUP.value</element>
<element>CATEGORY.value</element>
<element>TURNOVERPRICE.value</element>
<element>FORECASTPRICE.value</element>
<element>YEAR.value</element>
<element>MONTH.value</element>
<element>LAYER.value</element>
</recordFields>
</jDitoRecordContainer>
</recordContainers>
</entity>
import("Turnover_lib");
import("system.vars");
import("system.result");
import("Money_lib");
import("Util_lib");
import("system.datetime");
import("KeywordRegistry_basic");
import("Keyword_lib");
import("system.translate");
var turnoverCategory = translate.text('Turnover');
var forecastCategory = translate.text('Forecast');
var maxYear = parseInt(vars.get("$param.MaxYear_param"));
var yearCountToShow = parseInt(vars.get("$param.YearCountToShow_param"));
var minYear = maxYear - yearCountToShow + 1;
var turnover = TurnoverUtil.getTurnoverData(maxYear, yearCountToShow);
var forecast = TurnoverUtil.getForecastData(maxYear, yearCountToShow);
var columns = {
type: 0,
year: 1,
month: 2,
discount: 3,
vat: 4,
price: 5,
quantity: 6,
groupcodeId: 7,
groupcodeName: 8
};
// combine both data sources
var treeData = [];
var countData = {};
turnover.forEach(function(row)
{
var monthDate = new Date(row[columns.year], row[columns.month]-1);
monthDate = datetime.toDate(monthDate.getTime(), "MMM yyyy", "UTC");
_addCount([row[columns.year], [row[columns.month], monthDate], [row[columns.groupcodeId], row[columns.groupcodeName]]], row[columns.type], row[columns.year], row[columns.month],
MoneyUtils.getGross(
(row[columns.vat] ? parseFloat(row[columns.vat]) : 0.0),
(row[columns.price] ? parseFloat(row[columns.price]) : 0.0),
(row[columns.quantity] ? parseFloat(row[columns.quantity]) : 0.0),
(row[columns.discount] ? parseFloat(row[columns.discount]) : 0.0)));
});
forecast.forEach(function(row)
{
var monthDate = new Date(row[columns.year], row[columns.month]-1);
monthDate = datetime.toDate(monthDate.getTime(), "MMM yyyy", "UTC");
_addCount([row[columns.year], [row[columns.month], monthDate], [row[columns.groupcodeId], row[columns.groupcodeName]]], row[columns.type], row[columns.year], row[columns.month], row[columns.price]);
});
// create tree
for (let key in countData) {
var countDataSet = countData[key];
treeData.push([key, countDataSet.parent, countDataSet.groupName, countDataSet.category, countDataSet[turnoverCategory], countDataSet[forecastCategory], parseInt(countDataSet.year), parseInt(countDataSet.month), parseInt(countDataSet.layer)]);
}
treeData = TreeUtils.treeOrderBy(treeData, 8, [[6, true], [7, false], [2, false]])
result.object(treeData);
/**
* add the counts to countData for the given key and value
* @param {Array} pKeys an array containing all keys for this value. If the x-value for one key is different from the key-value: add an array [key, value] instead of only the key
* the first key is year
* @param {String} pCategory the category to add
* @param {integer} pYear the year
* @param {integer} pMonth the month
* @param {float} pValue the value to display
*/
function _addCount(pKeys, pCategory, pYear, pMonth, pValue) {
var key = "";
for (let i = 0; i < pKeys.length; i++) {
let keyId;
let keyName;
if (typeof pKeys[i] != "object")
{
keyId = pKeys[i];
keyName = pKeys[i];
}
else // handle array: first is id seccond is name for X-value
{
keyId = pKeys[i][0];
keyName = pKeys[i][1];
}
var parent = key;
key += ";" + keyId;
if (countData[key] == undefined)
{
countData[key] = {parent: parent, category: pCategory, groupName: keyName, data: pKeys[i], year: pYear, month: pMonth, layer: i}; // keys[0] is the category
countData[key][forecastCategory] = 0.0;
countData[key][turnoverCategory] = 0.0;
}
countData[key][pCategory] += parseFloat(pValue);
}
import("Turnover_lib");
import("system.vars");
import("system.result");
import("Money_lib");
import("Util_lib");
import("system.datetime");
import("KeywordRegistry_basic");
import("Keyword_lib");
import("system.translate");
var turnoverCategory = translate.text('Turnover');
var forecastCategory = translate.text('Forecast');
var maxYear = parseInt(vars.get("$param.MaxYear_param"));
var yearCountToShow = parseInt(vars.get("$param.YearCountToShow_param"));
var minYear = maxYear - yearCountToShow + 1;
var salesprojectId = vars.exists("$param.SalesprojectId_param") && vars.get("$param.SalesprojectId_param") ? vars.get("$param.SalesprojectId_param") : undefined;
var showForecast = vars.exists("$param.ShowForecast_param") && vars.get("$param.ShowForecast_param") == "true";
var showTurnover = vars.exists("$param.ShowTurnover_param") && vars.get("$param.ShowTurnover_param") == "true";
var turnover = [];
var forecast = [];
if (showTurnover)
turnover = TurnoverUtil.getTurnoverData(maxYear, yearCountToShow, salesprojectId);
if (showForecast)
forecast = TurnoverUtil.getForecastData(maxYear, yearCountToShow, salesprojectId);
var columns = {
type: 0,
year: 1,
month: 2,
discount: 3,
vat: 4,
price: 5,
quantity: 6,
groupcodeId: 7,
groupcodeName: 8
};
// combine both data sources
var treeData = [];
var countData = {};
turnover.forEach(function(row)
{
var monthDate = new Date(row[columns.year], row[columns.month]-1);
monthDate = datetime.toDate(monthDate.getTime(), "MMM yyyy", "UTC");
_addCount([row[columns.year], [row[columns.month], monthDate], [row[columns.groupcodeId], row[columns.groupcodeName]]], row[columns.type], row[columns.year], row[columns.month],
MoneyUtils.getGross(
(row[columns.vat] ? parseFloat(row[columns.vat]) : 0.0),
(row[columns.price] ? parseFloat(row[columns.price]) : 0.0),
(row[columns.quantity] ? parseFloat(row[columns.quantity]) : 0.0),
(row[columns.discount] ? parseFloat(row[columns.discount]) : 0.0)));
});
forecast.forEach(function(row)
{
var monthDate = new Date(row[columns.year], row[columns.month]-1);
monthDate = datetime.toDate(monthDate.getTime(), "MMM yyyy", "UTC");
_addCount([row[columns.year], [row[columns.month], monthDate], [row[columns.groupcodeId], row[columns.groupcodeName]]], row[columns.type], row[columns.year], row[columns.month], row[columns.price]);
});
// create tree
for (let key in countData) {
var countDataSet = countData[key];
treeData.push([key, countDataSet.parent, countDataSet.groupName, countDataSet.category, countDataSet[turnoverCategory], countDataSet[forecastCategory], parseInt(countDataSet.year), parseInt(countDataSet.month), parseInt(countDataSet.layer)]);
}
treeData = TreeUtils.treeOrderBy(treeData, 8, [[6, true], [7, false], [2, false]])
result.object(treeData);
/**
* add the counts to countData for the given key and value
* @param {Array} pKeys an array containing all keys for this value. If the x-value for one key is different from the key-value: add an array [key, value] instead of only the key
* the first key is year
* @param {String} pCategory the category to add
* @param {integer} pYear the year
* @param {integer} pMonth the month
* @param {float} pValue the value to display
*/
function _addCount(pKeys, pCategory, pYear, pMonth, pValue) {
var key = "";
for (let i = 0; i < pKeys.length; i++) {
let keyId;
let keyName;
if (typeof pKeys[i] != "object")
{
keyId = pKeys[i];
keyName = pKeys[i];
}
else // handle array: first is id seccond is name for X-value
{
keyId = pKeys[i][0];
keyName = pKeys[i][1];
}
var parent = key;
key += ";" + keyId;
if (countData[key] == undefined)
{
countData[key] = {parent: parent, category: pCategory, groupName: keyName, data: pKeys[i], year: pYear, month: pMonth, layer: i}; // keys[0] is the category
countData[key][forecastCategory] = 0.0;
countData[key][turnoverCategory] = 0.0;
}
countData[key][pCategory] += parseFloat(pValue);
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.6">
<name>Turnover_entity</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<documentation>%aditoprj%/entity/Turnover_entity/documentation.adoc</documentation>
<title>Turnover</title>
<iconId>VAADIN:CHART</iconId>
<recordContainer>jdito</recordContainer>
<entityFields>
<entityProvider>
<name>#PROVIDER</name>
<recordContainer>jdito</recordContainer>
</entityProvider>
<entityField>
<name>UID</name>
<title>Year</title>
</entityField>
<entityField>
<name>Y</name>
<titleProcess>%aditoprj%/entity/Turnover_entity/entityfields/y/titleProcess.js</titleProcess>
</entityField>
<entityField>
<name>PARENT</name>
<title>Parent</title>
</entityField>
<entityField>
<name>CATEGORY</name>
<title>Category</title>
</entityField>
<entityField>
<name>X</name>
<title>Year</title>
<contentType>TEXT</contentType>
</entityField>
<entityParameter>
<name>YearCountToShow_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/yearcounttoshow_param/valueProcess.js</valueProcess>
<expose v="true" />
<triggerRecalculation v="true" />
<mandatory v="false" />
<documentation>%aditoprj%/entity/Turnover_entity/entityfields/yearcounttoshow_param/documentation.adoc</documentation>
<description>PARAMETER</description>
</entityParameter>
<entityParameter>
<name>MaxYear_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/maxyear_param/valueProcess.js</valueProcess>
<expose v="true" />
<triggerRecalculation v="true" />
<mandatory v="false" />
<documentation>%aditoprj%/entity/Turnover_entity/entityfields/maxyear_param/documentation.adoc</documentation>
<description>PARAMETER</description>
</entityParameter>
<entityProvider>
<name>FilteredTurnovers</name>
<children>
<entityParameter>
<name>MaxYear_param</name>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>YearCountToShow_param</name>
<expose v="true" />
</entityParameter>
</children>
</entityProvider>
<entityConsumer>
<name>Turnover_tree</name>
<dependency>
<name>dependency</name>
<entityName>TurnoverTree_entity</entityName>
<fieldName>FilteredTurnovers</fieldName>
</dependency>
<children>
<entityParameter>
<name>MaxYear_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/turnover_tree/children/maxyear_param/valueProcess.js</valueProcess>
</entityParameter>
<entityParameter>
<name>YearCountToShow_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/turnover_tree/children/yearcounttoshow_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
<name>jdito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<contentProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<recordFields>
<element>UID.value</element>
<element>PARENT.value</element>
<element>CATEGORY.value</element>
<element>X.value</element>
<element>Y.value</element>
</recordFields>
</jDitoRecordContainer>
</recordContainers>
</entity>
<?xml version="1.0" encoding="UTF-8"?>
<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.6" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.6">
<name>Turnover_entity</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<documentation>%aditoprj%/entity/Turnover_entity/documentation.adoc</documentation>
<title>Turnover</title>
<iconId>VAADIN:CHART</iconId>
<recordContainer>jdito</recordContainer>
<entityFields>
<entityProvider>
<name>#PROVIDER</name>
<recordContainer>jdito</recordContainer>
</entityProvider>
<entityField>
<name>UID</name>
<title>Year</title>
</entityField>
<entityField>
<name>Y</name>
<titleProcess>%aditoprj%/entity/Turnover_entity/entityfields/y/titleProcess.js</titleProcess>
</entityField>
<entityField>
<name>PARENT</name>
<title>Parent</title>
</entityField>
<entityField>
<name>CATEGORY</name>
<title>Category</title>
</entityField>
<entityField>
<name>X</name>
<title>Year</title>
<contentType>TEXT</contentType>
</entityField>
<entityParameter>
<name>YearCountToShow_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/yearcounttoshow_param/valueProcess.js</valueProcess>
<expose v="true" />
<triggerRecalculation v="true" />
<mandatory v="false" />
<documentation>%aditoprj%/entity/Turnover_entity/entityfields/yearcounttoshow_param/documentation.adoc</documentation>
<description>PARAMETER</description>
</entityParameter>
<entityParameter>
<name>MaxYear_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/maxyear_param/valueProcess.js</valueProcess>
<expose v="true" />
<triggerRecalculation v="true" />
<mandatory v="false" />
<documentation>%aditoprj%/entity/Turnover_entity/entityfields/maxyear_param/documentation.adoc</documentation>
<description>PARAMETER</description>
</entityParameter>
<entityProvider>
<name>FilteredTurnovers</name>
<dependencies>
<entityDependency>
<name>51106aba-bd82-4ac5-8de6-fc56d53c6117</name>
<entityName>Salesproject_entity</entityName>
<fieldName>SalesprojectForecastCharts</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>MaxYear_param</name>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>YearCountToShow_param</name>
<expose v="true" />
</entityParameter>
</children>
</entityProvider>
<entityConsumer>
<name>Turnover_tree</name>
<dependency>
<name>dependency</name>
<entityName>TurnoverTree_entity</entityName>
<fieldName>FilteredTurnovers</fieldName>
</dependency>
<children>
<entityParameter>
<name>MaxYear_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/turnover_tree/children/maxyear_param/valueProcess.js</valueProcess>
</entityParameter>
<entityParameter>
<name>YearCountToShow_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/turnover_tree/children/yearcounttoshow_param/valueProcess.js</valueProcess>
</entityParameter>
<entityParameter>
<name>ShowForecast_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/turnover_tree/children/showforecast_param/valueProcess.js</valueProcess>
</entityParameter>
<entityParameter>
<name>ShowTurnover_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/turnover_tree/children/showturnover_param/valueProcess.js</valueProcess>
</entityParameter>
<entityParameter>
<name>SalesprojectId_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/turnover_tree/children/salesprojectid_param/valueProcess.js</valueProcess>
</entityParameter>
</children>
</entityConsumer>
<entityParameter>
<name>SalesprojectId_param</name>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>ShowForecast_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/showforecast_param/valueProcess.js</valueProcess>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>ShowTurnover_param</name>
<valueProcess>%aditoprj%/entity/Turnover_entity/entityfields/showturnover_param/valueProcess.js</valueProcess>
<expose v="true" />
</entityParameter>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
<name>jdito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<contentProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<recordFields>
<element>UID.value</element>
<element>PARENT.value</element>
<element>CATEGORY.value</element>
<element>X.value</element>
<element>Y.value</element>
</recordFields>
</jDitoRecordContainer>
</recordContainers>
</entity>
import("system.logging");
import("Turnover_lib");
import("system.vars");
import("system.result");
......@@ -14,7 +15,12 @@ var maxYear = parseInt(vars.get("$param.MaxYear_param"));
var yearCountToShow = parseInt(vars.get("$param.YearCountToShow_param"));
var minYear = maxYear - yearCountToShow + 1;
var data = TurnoverUtil.getTurnoverAndForecastData(maxYear, yearCountToShow);
var showForecast = vars.exists("$param.ShowForecast_param") && vars.get("$param.ShowForecast_param") == "true";
var showTurnover = vars.exists("$param.ShowTurnover_param") && vars.get("$param.ShowTurnover_param") == "true";
var salesprojectId = vars.exists("$param.SalesprojectId_param") && vars.get("$param.SalesprojectId_param") ? vars.get("$param.SalesprojectId_param") : undefined;
var data = TurnoverUtil.getTurnoverAndForecastData(maxYear, yearCountToShow, showForecast, showTurnover, salesprojectId);
var columns = {
type: 0,
......@@ -40,8 +46,12 @@ for (let y = minYear; y <= maxYear; y++)
{
monthDate = new Date(y, m-1);
monthDate = datetime.toDate(monthDate.getTime(), "MMM yyyy", "UTC");
_addCount([forecastCategory, ""+y, [m, monthDate]], 0.0);
_addCount([turnoverCategory, ""+y, [m, monthDate]], 0.0);
if (showForecast)
_addCount([forecastCategory, ""+y, [m, monthDate]], 0.0);
if (showTurnover)
_addCount([turnoverCategory, ""+y, [m, monthDate]], 0.0);
}
}
......
......@@ -58,5 +58,9 @@
<name>99f70216-c195-4c08-a6ab-3a4d5acc759b</name>
<view>SalesprojectClassScoreAttribute_view</view>
</neonViewReference>
<neonViewReference>
<name>b3e34681-eef6-48d3-a4e6-975a6fe77e7b</name>
<view>SalesprojectOfferForecastChart_view</view>
</neonViewReference>
</references>
</neonContext>
<?xml version="1.0" encoding="UTF-8"?>
<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
<name>Turnover</name>
<title>Turnover</title>
<majorModelMode>DISTRIBUTED</majorModelMode>
<filterview>TurnoverChart_view</filterview>
<entity>Turnover_entity</entity>
<references>
<neonViewReference>
<name>41a2a339-d41d-47e7-8416-4bd788a269af</name>
<view>TurnoverChart_view</view>
</neonViewReference>
</references>
</neonContext>
<?xml version="1.0" encoding="UTF-8"?>
<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
<name>Turnover</name>
<title>Turnover</title>
<majorModelMode>DISTRIBUTED</majorModelMode>
<filterview>TurnoverChart_view</filterview>
<entity>Turnover_entity</entity>
<references>
<neonViewReference>
<name>41a2a339-d41d-47e7-8416-4bd788a269af</name>
<view>TurnoverChart_view</view>
</neonViewReference>
<neonViewReference>
<name>539f403e-f2c2-4459-9193-fefc236204ad</name>
<view>TurnoverChartForecast_view</view>
</neonViewReference>
</references>
</neonContext>
<?xml version="1.0" encoding="UTF-8"?>
<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
<name>TurnoverTree</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<filterview>TurnoverTree_view</filterview>
<entity>TurnoverTree_entity</entity>
<references>
<neonViewReference>
<name>b8135e50-da8e-424c-9073-e721b4822736</name>
<view>TurnoverTree_view</view>
</neonViewReference>
</references>
</neonContext>
<?xml version="1.0" encoding="UTF-8"?>
<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.0">
<name>TurnoverTree</name>
<majorModelMode>DISTRIBUTED</majorModelMode>
<filterview>TurnoverTree_view</filterview>
<entity>TurnoverTree_entity</entity>
<references>
<neonViewReference>
<name>b8135e50-da8e-424c-9073-e721b4822736</name>
<view>TurnoverTree_view</view>
</neonViewReference>
<neonViewReference>
<name>407eda43-5b44-4bae-980a-8ba522b0a5fe</name>
<view>TurnoverTreeForecast_view</view>
</neonViewReference>
</references>
</neonContext>
......@@ -30,9 +30,9 @@
<view>SalesprojectClassScoreAttribute_view</view>
</neonViewReference>
<neonViewReference>
<name>16ef2fde-0b5f-4545-b065-80738b2388fc</name>
<name>3da4532a-716f-4ff2-a8bc-c29d4f7cb9fb</name>
<entityField>#ENTITY</entityField>
<view>SalesprojectOfferForecast_view</view>
<view>SalesprojectOfferForecastChart_view</view>
</neonViewReference>
<neonViewReference>
<name>aa801bbd-df49-419b-959a-1664b2c31274</name>
......
<?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.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
<name>SalesprojectOfferForecastChart_view</name>
<title>Forecast</title>
<majorModelMode>DISTRIBUTED</majorModelMode>
<layout>
<boxLayout>
<name>layout</name>
<direction>HORIZONTAL</direction>
</boxLayout>
</layout>
<children>
<neonViewReference>
<name>d37e05d3-659f-4d96-9d86-277b4d95090b</name>
<entityField>#ENTITY</entityField>
<view>SalesprojectOfferForecast_view</view>
</neonViewReference>
<neonViewReference>
<name>58ff872a-234f-44ce-a670-99521cdcfd8d</name>
<entityField>SalesprojectForecastCharts</entityField>
<view>TurnoverChartForecast_view</view>
</neonViewReference>
</children>
</neonView>
<?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.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.1">
<name>TurnoverChartForecast_view</name>
<title>Forecast</title>
<majorModelMode>DISTRIBUTED</majorModelMode>
<dashletConfigurations>
<neonDashletConfiguration>
<name>TurnoverDashlet</name>
<title>Turnover</title>
<fragment>Turnover/full</fragment>
<singleton v="true" />
<storeRoles>
<element>INTERNAL_ADMINISTRATOR</element>
<element>INTERNAL_DASHBOARDSTOREADMIN</element>
</storeRoles>
<icon>VAADIN:CHART</icon>
<categories>
<neonDashletCategory>
<name>turnover</name>
<title>Turnover</title>
</neonDashletCategory>
</categories>
</neonDashletConfiguration>
</dashletConfigurations>
<layout>
<groupLayout>
<name>layout</name>
</groupLayout>
</layout>
<children>
<multiDataChartViewTemplate>
<name>ColumnChart</name>
<chartType>COLUMN</chartType>
<xAxis>X</xAxis>
<yAxis>Y</yAxis>
<parentField>PARENT</parentField>
<categoryField>CATEGORY</categoryField>
<entityField>#ENTITY</entityField>
</multiDataChartViewTemplate>
<multiDataChartViewTemplate>
<name>LineChart</name>
<chartType>LINE</chartType>
<xAxis>X</xAxis>
<yAxis>Y</yAxis>
<parentField>PARENT</parentField>
<categoryField>CATEGORY</categoryField>
<entityField>#ENTITY</entityField>
</multiDataChartViewTemplate>
<multiDataChartViewTemplate>
<name>AreaChart</name>
<chartType>AREA</chartType>
<xAxis>X</xAxis>
<yAxis>Y</yAxis>
<parentField>PARENT</parentField>
<categoryField>CATEGORY</categoryField>
<entityField>#ENTITY</entityField>
</multiDataChartViewTemplate>
<multiDataChartViewTemplate>
<name>BarChart</name>
<chartType>BAR</chartType>
<xAxis>X</xAxis>
<yAxis>Y</yAxis>
<parentField>PARENT</parentField>
<categoryField>CATEGORY</categoryField>
<entityField>#ENTITY</entityField>
</multiDataChartViewTemplate>
<multiDataChartViewTemplate>
<name>SplineChart</name>
<chartType>SPLINE</chartType>
<xAxis>X</xAxis>
<yAxis>Y</yAxis>
<parentField>PARENT</parentField>
<categoryField>CATEGORY</categoryField>
<entityField>#ENTITY</entityField>
</multiDataChartViewTemplate>
</children>
</neonView>
import("system.translate");
import("KeywordRegistry_basic");
import("Keyword_lib");
import("system.SQLTYPES");
import("system.db");
import("system.neon");
import("Context_lib");
/**
* Methods used for turnover data.
* Do not create an instance of this!
*
* @class
*/
function TurnoverUtil() {}
/**
* get all turnover data.
*
* @param {Number} pMaxYear the maximum year
* @param {Number} pYearCount count of years to select
*
* @return {String[][]}
*/
TurnoverUtil.getTurnoverData = function (pMaxYear, pYearCount)
{
var turnoverCategory = translate.text('Turnover');
var minYear = pMaxYear - pYearCount + 1;
// load data
var data = db.table(SqlCondition.begin()
.and("SALESORDERITEM.OPTIONAL <> 1")
.andPrepare("SALESORDER.SALESORDERDATE", pMaxYear, "year(#) <= ?", SQLTYPES.INTEGER)
.andPrepare("SALESORDER.SALESORDERDATE", minYear, "year(#) >= ?", SQLTYPES.INTEGER)
.buildSql("select '" + turnoverCategory + "', year(SALESORDERDATE) yearNum, month(SALESORDERDATE) monthNum, SALESORDERITEM.DISCOUNT discount, SALESORDERITEM.VAT vat, SALESORDERITEM.PRICE price, sum(SALESORDERITEM.QUANTITY) quantity, SALESORDERITEM.GROUPCODEID prodGroup, (" + KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "SALESORDERITEM.GROUPCODEID") + ") prodGroupName \n\
from SALESORDER \n\
join SALESORDERITEM on SALESORDERITEM.SALESORDER_ID = SALESORDER.SALESORDERID", "1=2", "group by year(SALESORDERDATE), month(SALESORDERDATE), SALESORDERITEM.GROUPCODEID, SALESORDERITEM.DISCOUNT, SALESORDERITEM.VAT, SALESORDERITEM.PRICE \n\
order by yearNum, monthNum "));
return data;
}
/**
* get forecast data
*
* @param {Number} pMaxYear the maximum year
* @param {Number} pYearCount count of years to select
*
* @return {String[][]}
*/
TurnoverUtil.getForecastData = function (pMaxYear, pYearCount)
{
var forecastCategory = translate.text('Forecast');
var minYear = pMaxYear - pYearCount + 1;
// load data
var data = db.table(SqlCondition.begin()
.andPrepare("FORECAST.DATE_START", pMaxYear, "year(#) <= ?", SQLTYPES.INTEGER)
.andPrepare("FORECAST.DATE_START", minYear, "year(#) >= ?", SQLTYPES.INTEGER)
.buildSql("select '" + forecastCategory + "', year(DATE_START) yearNum, month(DATE_START) monthNum, 0 discount, 0 vat, sum(VOLUME) price, 1 quantity, GROUPCODE prodGroup, (" + KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "GROUPCODE") + ") prodGroupName from FORECAST", "1=2", " group by year(DATE_START), month(DATE_START), GROUPCODE order by yearNum, monthNum"))
return data;
}
/**
* get turnover data
*
* @param {Number} pMaxYear the maximum year
* @param {Number} pYearCount count of years to select
*
* @return {String[][]}
*/
TurnoverUtil.getTurnoverAndForecastData = function (pMaxYear, pYearCount)
{
return TurnoverUtil.getTurnoverData(pMaxYear, pYearCount).concat(TurnoverUtil.getForecastData(pMaxYear, pYearCount));
import("Sql_lib");
import("system.translate");
import("KeywordRegistry_basic");
import("Keyword_lib");
import("system.SQLTYPES");
import("system.db");
import("system.neon");
import("Context_lib");
/**
* Methods used for turnover data.
* Do not create an instance of this!
*
* @class
*/
function TurnoverUtil() {}
/**
* get all turnover data.
*
* @param {Number} pMaxYear the maximum year
* @param {Number} pYearCount count of years to select
* @param {String} [pSalesprojectId = undefined] if set, select only from this salesproject
*
* @return {String[][]}
*/
TurnoverUtil.getTurnoverData = function (pMaxYear, pYearCount, pSalesprojectId)
{
var turnoverCategory = translate.text('Turnover');
var minYear = pMaxYear - pYearCount + 1;
// load data
var data = db.table(SqlCondition.begin()
.and("SALESORDERITEM.OPTIONAL <> 1")
.andPrepare("SALESORDER.SALESORDERDATE", pMaxYear, "year(#) <= ?", SQLTYPES.INTEGER)
.andPrepare("SALESORDER.SALESORDERDATE", minYear, "year(#) >= ?", SQLTYPES.INTEGER)
.andPrepareIfSet("SALESORDER.SALESPROJECT_ID", pSalesprojectId)
.buildSql("select '" + turnoverCategory + "', year(SALESORDERDATE) yearNum, month(SALESORDERDATE) monthNum, SALESORDERITEM.DISCOUNT discount, SALESORDERITEM.VAT vat, SALESORDERITEM.PRICE price, sum(SALESORDERITEM.QUANTITY) quantity, SALESORDERITEM.GROUPCODEID prodGroup, (" + KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "SALESORDERITEM.GROUPCODEID") + ") prodGroupName \n\
from SALESORDER \n\
join SALESORDERITEM on SALESORDERITEM.SALESORDER_ID = SALESORDER.SALESORDERID", "1=2", "group by year(SALESORDERDATE), month(SALESORDERDATE), SALESORDERITEM.GROUPCODEID, SALESORDERITEM.DISCOUNT, SALESORDERITEM.VAT, SALESORDERITEM.PRICE \n\
order by yearNum, monthNum "));
return data;
}
/**
* get forecast data
*
* @param {Number} pMaxYear the maximum year
* @param {Number} pYearCount count of years to select
* @param {String} [pSalesprojectId = undefined] if set, select only from this salesproject
*
* @return {String[][]}
*/
TurnoverUtil.getForecastData = function (pMaxYear, pYearCount, pSalesprojectId)
{
var forecastCategory = translate.text('Forecast');
var minYear = pMaxYear - pYearCount + 1;
// load data
var cond = SqlCondition.begin()
.andPrepare("FORECAST.DATE_START", pMaxYear, "year(#) <= ?", SQLTYPES.INTEGER)
.andPrepare("FORECAST.DATE_START", minYear, "year(#) >= ?", SQLTYPES.INTEGER)
if (pSalesprojectId)
{
cond.andPrepare("FORECAST.OBJECT_TYPE", 'Salesproject')
cond.andPrepare("FORECAST.OBJECT_ROWID", pSalesprojectId)
}
return db.table(cond.buildSql("select '" + forecastCategory + "', year(DATE_START) yearNum, month(DATE_START) monthNum, 0 discount, 0 vat, sum(VOLUME) price, 1 quantity, GROUPCODE prodGroup, (" + KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "GROUPCODE") + ") prodGroupName from FORECAST", "1=2", " group by year(DATE_START), month(DATE_START), GROUPCODE order by yearNum, monthNum"));
}
/**
* get turnover data
*
* @param {Number} pMaxYear the maximum year
* @param {Number} pYearCount count of years to select
* @param {Boolean} pShowForecast
* @param {Boolean} pShowTurnover
* @param {String} [pSalesprojectId = undefined] if set, select only from this salesproject
*
* @return {String[][]}
*/
TurnoverUtil.getTurnoverAndForecastData = function (pMaxYear, pYearCount, pShowForecast, pShowTurnover, pSalesprojectId)
{
var data = [];
if (pShowTurnover)
data = data.concat(TurnoverUtil.getTurnoverData(pMaxYear, pYearCount, pSalesprojectId));
if (pShowForecast)
data = data.concat(TurnoverUtil.getForecastData(pMaxYear, pYearCount, pSalesprojectId));
return data;
}
\ 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