From 3aa184a1b613952068af02e55960413b759e1701 Mon Sep 17 00:00:00 2001
From: rislai <risheng.lai@capgemini.com>
Date: 星期四, 25 七月 2024 10:32:21 +0800
Subject: [PATCH] 添加产量对比报表
---
_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl | 44 ++
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsEndDate_OnChanged.def | 16
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick#613.def | 18
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def | 62 ++
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl | 97 ++++
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslPower_OnCreated.def | 20
_Main/BL/Type_LocalColumn/Attribute_CustomIndex.qbl | 7
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl | 16
_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl | 25 +
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def | 16
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslGeneration_OnCreated.def | 20
_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl | 33 +
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def | 18
_Main/UI/MacroPlannerWebApp/Views/OfflinePlanComparisonReport.vw | 16
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslMQBMLB_OnCreated.def | 20
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixEditorActionBarPageDemandComparison#1.def | 10
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl | 7
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl | 118 +++++
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison#634.def | 84 +++
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Gap.qbl | 7
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhFinelProduct_OnCreated.def | 16
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon.def | 16
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl | 39 +
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhStartDate_OnCreated.def | 16
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsStartDate_OnChanged.def | 16
_Main/BL/Type_LocalCell_ProductionComparison/Function_CalcGap.qbl | 13
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl | 32 +
_Main/BL/Type_LocalColumn/DefaultValue_CustomIndex.qbl | 7
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged.def | 21
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport.def | 17
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl | 6
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged.def | 20
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl | 14
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Actual.qbl | 7
_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl | 9
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter#119.def | 96 ++++
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def | 26 +
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl | 36 +
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl | 22
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def | 11
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Plan.qbl | 7
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl | 7
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl | 6
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhEndDate_OnCreated.def | 16
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl | 30 +
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor#988.def | 102 ++++
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl | 2
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixeditorContextMenuDemandComparison#1.def | 10
48 files changed, 1,251 insertions(+), 23 deletions(-)
diff --git "a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport\0431.qbl" "b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport\0431.qbl"
index 19ebdae..ddece8a 100644
--- "a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport\0431.qbl"
+++ "b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport\0431.qbl"
@@ -12,16 +12,16 @@
// rislai Jul-9-2024 (created)
table := owner.LocalTable( relnew,Name := "缁煎悎宸ユ椂鍒舵姤琛�");
- //column1 := table.LocalColumn( relnew,Name := "宸ュ巶" ,Index := 1);
- //column2 := table.LocalColumn( relnew,Name := "浜х嚎" ,Index := 2);
+ //column1 := table.LocalColumn( relnew,Name := "宸ュ巶" ,CustomIndex := 1);
+ //column2 := table.LocalColumn( relnew,Name := "浜х嚎" ,CustomIndex := 2);
- column3 := table.LocalColumn( relnew,Name := "鐢熶骇澶╂暟" ,Index := 3);
+ column3 := table.LocalColumn( relnew,Name := "鐢熶骇澶╂暟" ,CustomIndex := 3);
- column4 := table.LocalColumn( relnew,Name := "鍔犵彮/娆犲伐鏃堕暱" ,Index := 4);
- column5 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝椂闀�" ,Index := 6);
+ column4 := table.LocalColumn( relnew,Name := "鍔犵彮/娆犲伐鏃堕暱" ,CustomIndex := 4);
+ column5 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝椂闀�" ,CustomIndex := 6);
- column6 := table.LocalColumn( relnew,Name := "鍔犵彮/娆犲伐璐�" ,Index := 8);
- column7 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝垂" ,Index := 10);
+ column6 := table.LocalColumn( relnew,Name := "鍔犵彮/娆犲伐璐�" ,CustomIndex := 8);
+ column7 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝垂" ,CustomIndex := 10);
units := selectset( shiftPlans,Elements.UnitPeriodTime.Unit,unit,true );
diff --git a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
index b88493c..bf0aaa9 100644
--- a/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
+++ b/_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
@@ -12,20 +12,20 @@
// rislai Jul-4-2024 (created)
table := owner.LocalTable( relnew,Name := "鏍囧噯宸ユ椂鍒舵姤琛�");
- //column1 := table.LocalColumn( relnew,Name := "宸ュ巶" ,Index := 1);
- //column2 := table.LocalColumn( relnew,Name := "浜х嚎" ,Index := 2);
+ //column1 := table.LocalColumn( relnew,Name := "宸ュ巶" ,CustomIndex := 1);
+ //column2 := table.LocalColumn( relnew,Name := "浜х嚎" ,CustomIndex := 2);
- column3 := table.LocalColumn( relnew,Name := "鐢熶骇澶╂暟" ,Index := 3);
+ column3 := table.LocalColumn( relnew,Name := "鐢熶骇澶╂暟" ,CustomIndex := 3);
- column4 := table.LocalColumn( relnew,Name := "骞虫棩鍔犵彮鏃堕暱" ,Index := 4);
- column5 := table.LocalColumn( relnew,Name := "浼戞伅鏃ュ姞鐝椂闀�" ,Index := 5);
- column6 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝椂闀�" ,Index := 6);
- column7 := table.LocalColumn( relnew,Name := "娆犲伐鏃堕暱" ,Index := 7);
+ column4 := table.LocalColumn( relnew,Name := "骞虫棩鍔犵彮鏃堕暱" ,CustomIndex := 4);
+ column5 := table.LocalColumn( relnew,Name := "浼戞伅鏃ュ姞鐝椂闀�" ,CustomIndex := 5);
+ column6 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝椂闀�" ,CustomIndex := 6);
+ column7 := table.LocalColumn( relnew,Name := "娆犲伐鏃堕暱" ,CustomIndex := 7);
- column8 := table.LocalColumn( relnew,Name := "骞虫棩鍔犵彮璐�" ,Index := 8);
- column9 := table.LocalColumn( relnew,Name := "浼戞伅鏃ュ姞鐝垂" ,Index := 9);
- column10 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝垂" ,Index := 10);
- column11 := table.LocalColumn( relnew,Name := "娆犲伐璐�" ,Index := 11);
+ column8 := table.LocalColumn( relnew,Name := "骞虫棩鍔犵彮璐�" ,CustomIndex := 8);
+ column9 := table.LocalColumn( relnew,Name := "浼戞伅鏃ュ姞鐝垂" ,CustomIndex := 9);
+ column10 := table.LocalColumn( relnew,Name := "鑺傚亣鏃ュ姞鐝垂" ,CustomIndex := 10);
+ column11 := table.LocalColumn( relnew,Name := "娆犲伐璐�" ,CustomIndex := 11);
units := selectset( shiftPlans,Elements.UnitPeriodTime.Unit,unit,true );
diff --git a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl
index 5bdd4f8..44609af 100644
--- a/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl
+++ b/_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl
@@ -30,7 +30,7 @@
// 2023/01/01
index := [Number]generalColumn.Name().ReplaceAll( "/", "" );
}
- column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),Index := index );
+ column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),CustomIndex := index );
columns.Add( column );
columnTree.Root().AddChild( tempHandle,columns.Size() - 1 );
}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Actual.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Actual.qbl
new file mode 100644
index 0000000..e46be0b
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Actual.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Actual
+{
+ #keys: '3[412672.1.64753749][412672.1.64753748][412672.1.64753750]'
+ ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl
new file mode 100644
index 0000000..7abefbe
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BaseVersionValue
+{
+ #keys: '3[412672.1.64753763][412672.1.64753762][412672.1.64753764]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl
new file mode 100644
index 0000000..8e0d3b4
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CompareVersionValue
+{
+ #keys: '3[412672.1.64753752][412672.1.64753751][412672.1.64753753]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Gap.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Gap.qbl
new file mode 100644
index 0000000..e066a00
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Gap.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Gap
+{
+ #keys: '3[412672.1.64753755][412672.1.64753754][412672.1.64753756]'
+ ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Plan.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Plan.qbl
new file mode 100644
index 0000000..7592aad
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Plan.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Plan
+{
+ #keys: '3[412672.1.64753743][412672.1.64753742][412672.1.64753744]'
+ ValueType: Real
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl
new file mode 100644
index 0000000..2f8d5c8
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: BaseVersionValue
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl
new file mode 100644
index 0000000..3f4ebb7
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: CompareVersionValue
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Function_CalcGap.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Function_CalcGap.qbl
new file mode 100644
index 0000000..dcff02a
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/Function_CalcGap.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcGap
+{
+ TextBody:
+ [*
+ // rislai Jun-21-2024 (created)
+
+ value := this.Plan() - this.Actual();
+
+ this.Gap( value );
+ *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl
new file mode 100644
index 0000000..f235f04
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl
@@ -0,0 +1,44 @@
+Quintiq file version 2.0
+#parent: #root
+Method GetAttributeByName (
+ String attributeName
+) const declarative as String
+{
+ TextBody:
+ [*
+ // rislai Jun-21-2024 (created)
+ value := "";
+
+ if( attributeName = "BaseVersion" ){
+ if( not this.LocalColumn().IsAttrbuteColumn() ){
+ value := this.Plan().Format( "N(Dec)" );
+ }
+ }
+ if( attributeName = "CompareVersion" ){
+ if( not this.LocalColumn().IsAttrbuteColumn() ){
+ value := this.Actual().Format( "N(Dec)" );
+ }
+ }
+ if( attributeName = "Gap" ){
+ if( not this.LocalColumn().IsAttrbuteColumn() ){
+ value := this.Gap().Format( "N(Dec)" );
+ }
+ }
+ if( attributeName = "BaseVersionValue" ){
+ if( not this.LocalColumn().IsAttrbuteColumn() ){
+ value := "0";
+ }else{
+ value := this.BaseVersionValue();
+ }
+ }
+ if( attributeName = "CompareVersionValue" ){
+ if( not this.LocalColumn().IsAttrbuteColumn() ){
+ value := "0";
+ }else{
+ value := this.CompareVersionValue();
+ }
+ }
+
+ return value;
+ *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl
new file mode 100644
index 0000000..d19420b
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl
@@ -0,0 +1,32 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod AsyncExport (
+ RecycleBin recycleBin,
+ const constcontent LocalRows rows,
+ const constcontent LocalColumns columns,
+ const MacroPlan macroPlan
+)
+{
+ TextBody:
+ [*
+ // rislai Jun-20-2024 (created)
+ sortColumns := selectsortedset( columns,Elements,column,true,column.Index());
+
+ attributeNames := LocalCell_DemandComparison::GetAttributeNames();
+
+ columnstring := emit( "" );
+ flag := true;
+ traverse( sortColumns,Elements,sortColumn ){
+ if( flag ){
+ attributeXML := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames,"attribute",macroPlan );
+ columnstring := columnstring.Merge( attributeXML )
+ flag := false;
+ }
+
+ cellxml := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames ,"data",macroPlan );
+ columnstring := columnstring.Merge( cellxml);
+ }
+
+ columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),"Sheet1") );
+ *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl
new file mode 100644
index 0000000..3c0055a
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl
@@ -0,0 +1,118 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Compared (
+ RecycleBin recycleBin,
+ String baseVersionPath,
+ String compareVersionPath,
+ String baseVersionName,
+ String compareVersionName
+) as LocalTable
+{
+ TextBody:
+ [*
+ // rislai Jun-20-2024 (created)
+ localTable := recycleBin.LocalTable( relnew,Name := baseVersionName + "__" + compareVersionName );
+
+ baseVersionFile := OSFile::Construct();
+ compareVersionFile := OSFile::Construct();
+
+ try {
+ baseVersionFile.Open( baseVersionPath, "Read", false );
+ baseVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, baseVersionFile.ReadBinary(), baseVersionPath );
+ baseVersionDataSource.ReadStructure();
+
+ compareVersionFile.Open( compareVersionPath, "Read", false );
+ compareVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, compareVersionFile.ReadBinary(), compareVersionPath );
+ compareVersionDataSource.ReadStructure();
+
+ baseVersionTable := select( baseVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
+ compareVersionTable := select( compareVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
+
+ if( not isnull( baseVersionTable ) and not isnull( compareVersionTable )){
+
+ //鐢熸垚琛屾暟鎹�
+ rowKeys := construct( Strings );
+ baseVersionRowTree := NamedValueTree::Create();
+ baseVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
+ compareVersionRowTree := NamedValueTree::Create();
+ compareVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
+ LocalCell_DemandComparison::FillRows( baseVersionTable,rowKeys,baseVersionRowTree,baseVersionRows );
+ LocalCell_DemandComparison::FillRows( compareVersionTable,rowKeys,compareVersionRowTree,compareVersionRows );
+
+ // 鐢熸垚鍒楁暟鎹�
+ columnTree := NamedValueTree::Create();
+ columns := construct( LocalColumns );
+ LocalCell_DemandComparison::GenerateColumnIndex( baseVersionTable,localTable,columnTree,columns );
+ LocalCell_DemandComparison::GenerateColumnIndex( compareVersionTable,localTable,columnTree,columns );
+ columnNames := selectvalues( columns,Elements,column,true,column.Name() );
+
+ // 鐢熸垚鏁版嵁
+
+ for ( rowIndex := 0; rowIndex < rowKeys.Size(); rowIndex++ ) {
+ rowKey := rowKeys.Element( rowIndex );
+
+ baseVersionCellTree := NamedValueTree::Create();
+ baseVersionCells := construct( GeneralExcelImportAndExportDataCells ,constcontent);
+
+ compareVersionCellTree := NamedValueTree::Create();
+ compareVersionCells := construct( GeneralExcelImportAndExportDataCells ,constcontent);
+
+ LocalCell_DemandComparison::FillCells( rowKey,baseVersionRowTree,baseVersionRows,baseVersionCellTree,baseVersionCells );
+ LocalCell_DemandComparison::FillCells( rowKey,compareVersionRowTree,compareVersionRows,compareVersionCellTree,compareVersionCells );
+
+ row := localTable.LocalRow( relnew,Index := localTable.GetRowIndexCache() );
+
+ traverse( columnNames,Elements,columnName ){
+ columnHandle := columnTree.GetHandle( columnName );
+ columnIndex := columnTree.Root().Child( columnHandle ).GetValueAsNumber();
+ column := columns.Element( columnIndex );
+
+ baseVersionCell := constnull( GeneralExcelImportAndExportDataCell );
+ baseVersionCellHandle := baseVersionCellTree.GetHandle( columnName );
+ try{
+ baseVersionCellIndex := baseVersionCellTree.Root().Child( baseVersionCellHandle ).GetValueAsNumber();
+ baseVersionCell := baseVersionCells.Element( baseVersionCellIndex );
+ }onerror{}
+
+ compareVersionCell := constnull( GeneralExcelImportAndExportDataCell );
+ compareVersionCellHandle := compareVersionCellTree.GetHandle( columnName );
+ try{
+ compareVersionCellIndex := compareVersionCellTree.Root().Child( compareVersionCellHandle ).GetValueAsNumber();
+ compareVersionCell := compareVersionCells.Element( compareVersionCellIndex );
+ }onerror{}
+
+ if( columnName = "浜у湴" or columnName = "杞﹀瀷" or columnName = "鍙戝姩鏈洪浂浠跺彿" or columnName = "鍙戝姩鏈哄洓浣嶇爜" ){
+ row.LocalCell( relnew,LocalCell_DemandComparison,LocalColumn := column,
+ BaseVersionValue := ifexpr( isnull( baseVersionCell ), "绌�", baseVersionCell.Value()),
+ CompareVersionValue := ifexpr( isnull( compareVersionCell ),"绌�",compareVersionCell.Value()));
+ column.IsAttrbuteColumn( true );
+ if( columnName = "鍙戝姩鏈洪浂浠跺彿" ){
+ row.CustomName( ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"绌�",compareVersionCell.Value()), baseVersionCell.Value()) );
+ }
+ }else{
+ row.LocalCell( relnew,LocalCell_DemandComparison,LocalColumn := column,
+ BaseVersion := ifexpr( isnull( baseVersionCell ),0,[Real]baseVersionCell.Value()),
+ CompareVersion := ifexpr( isnull( compareVersionCell ), 0 ,[Real]compareVersionCell.Value() ));
+ }
+ }
+ }
+ }
+ // 鍚庣画鍒犻櫎
+ baseVersionDataSource.Delete();
+ compareVersionDataSource.Delete();
+
+ baseVersionFile.Close();
+ compareVersionFile.Close();
+ } onerror {
+ if( not isnull( baseVersionFile )){
+ baseVersionFile.Close();
+ }
+ if( not isnull( compareVersionFile )){
+ compareVersionFile.Close();
+ }
+ error( e );
+ }
+
+ return localTable;
+ *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl
new file mode 100644
index 0000000..6aeded1
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl
@@ -0,0 +1,30 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FillCells (
+ String rowName,
+ NamedValueTree rowTree,
+ constcontent GeneralExcelImportAndExportDataRows rows,
+ NamedValueTree cellTree,
+ constcontent GeneralExcelImportAndExportDataCells cells
+)
+{
+ TextBody:
+ [*
+ // rislai Jun-22-2024 (created)
+ rowHandel := rowTree.GetHandle( rowName );
+ try{
+ rowIndex := rowTree.Root().Child( rowHandel ).GetValueAsNumber();
+ row := rows.Element( rowIndex );
+
+ temp_cells := selectsortedset( row,GeneralExcelImportAndExportDataCell,cell,true,cell.GeneralExcelImportAndExportDataColumn().ColumnIndex() );
+ for( i := 0 ; i<temp_cells.Size();i++ ){
+ cell := temp_cells.Element( i );
+ tempHandle := cellTree.GetHandle( cell.GeneralExcelImportAndExportDataColumn().Name() );
+
+ cells.Add( cell );
+ cellTree.Root().AddChild( tempHandle,cells.Size() - 1 );
+
+ }
+ }onerror{}
+ *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl
new file mode 100644
index 0000000..391100a
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod FillRows (
+ const GeneralExcelImportAndExportDataTable general,
+ Strings rowKeys,
+ NamedValueTree rowTree,
+ constcontent GeneralExcelImportAndExportDataRows rows
+)
+{
+ TextBody:
+ [*
+ // rislai Jun-22-2024 (created)
+ rowKeyColumn1 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "浜у湴" );
+ rowKeyColumn2 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "杞﹀瀷" );
+ rowKeyColumn3 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "鍙戝姩鏈洪浂浠跺彿" );
+ rowKeyColumn4 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "鍙戝姩鏈哄洓浣嶇爜" );
+ tempRowKeyCells1 := selectset( rowKeyColumn1,GeneralExcelImportAndExportDataCell,cell,true );
+ tempRowKeyCells2 := selectset( rowKeyColumn2,GeneralExcelImportAndExportDataCell,cell,true );
+ tempRowKeyCells3 := selectset( rowKeyColumn3,GeneralExcelImportAndExportDataCell,cell,true );
+ tempRowKeyCells4 := selectset( rowKeyColumn4,GeneralExcelImportAndExportDataCell,cell,true );
+
+ for( i := 0; i< tempRowKeyCells1.Size(); i++ ){
+ tempRowKeyCell1 := tempRowKeyCells1.Element( i );
+ tempRowKeyCell2 := tempRowKeyCells2.Element( i );
+ tempRowKeyCell3 := tempRowKeyCells3.Element( i );
+ tempRowKeyCell4 := tempRowKeyCells4.Element( i );
+
+ rowKey := tempRowKeyCell1.Value() + tempRowKeyCell2.Value() + tempRowKeyCell3.Value() + tempRowKeyCell4.Value();
+
+ tempHandle := rowTree.GetHandle( rowKey );
+ rowTree.Root().AddChild( tempHandle ,i);
+ rows.Add( tempRowKeyCell1.GeneralExcelImportAndExportDataRow());
+ rowKeys.Add( rowKey );
+ }
+ *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl
new file mode 100644
index 0000000..44609af
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl
@@ -0,0 +1,39 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GenerateColumnIndex (
+ const GeneralExcelImportAndExportDataTable table,
+ LocalTable localTable,
+ NamedValueTree columnTree,
+ LocalColumns columns
+)
+{
+ TextBody:
+ [*
+ // rislai Jun-22-2024 (created)
+ tableColumns := selectset( table,GeneralExcelImportAndExportDataColumn,column,true );
+ for( i := 0; i< tableColumns.Size(); i++ ){
+ generalColumn := tableColumns.Element( i );
+ tempHandle := columnTree.GetHandle( generalColumn.Name() );
+
+ nameValue := guard( columnTree.Root().Child( tempHandle ),null( NamedValue ));
+ if( isnull( nameValue )){
+ index := 999;
+ if( generalColumn.Name() = "浜у湴" ){
+ index := 1;
+ }else if( generalColumn.Name() = "杞﹀瀷" ){
+ index := 2;
+ }else if( generalColumn.Name() = "鍙戝姩鏈洪浂浠跺彿" ){
+ index := 3;
+ }else if( generalColumn.Name() = "鍙戝姩鏈哄洓浣嶇爜" ){
+ index := 4;
+ }else{
+ // 2023/01/01
+ index := [Number]generalColumn.Name().ReplaceAll( "/", "" );
+ }
+ column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),CustomIndex := index );
+ columns.Add( column );
+ columnTree.Root().AddChild( tempHandle,columns.Size() - 1 );
+ }
+ }
+ *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl
new file mode 100644
index 0000000..1072935
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetAttributeNames () const declarative as owning Strings
+{
+ TextBody:
+ [*
+ // rislai Jun-21-2024 (created)
+ attributeNames := construct( Strings );
+
+ attributeNames.Add( "BaseVersion" );
+ attributeNames.Add( "CompareVersion" );
+ attributeNames.Add( "Gap" );
+
+ return &attributeNames;
+ *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl
new file mode 100644
index 0000000..6d45dc4
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl
@@ -0,0 +1,97 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetColumnXML (
+ const constcontent LocalRows rows,
+ const LocalColumn column,
+ const Strings attributeNames,
+ String type,
+ const MacroPlan macroPlan
+) const as String
+{
+ TextBody:
+ [*
+ // rislai Jun-21-2024 (created)
+ // rislai Jun-20-2024 (created)
+ columnXML := "";
+ cells := selectsortedset( column, LocalCell.astype( LocalCell_DemandComparison ), cell,
+ exists( rows,Elements,element,element = cell.LocalRow()), cell.LocalRow().Index());
+ if( type = "data" ){
+ columnXML := "";
+ if( column.IsAttrbuteColumn() ){
+ columnXML := "<column><name>" + column.Name() + "</name><type>String</type>";
+ }else{
+ columnXML := "<column><name>" + column.Name() + "</name><type>Number</type>";
+ }
+ traverse ( cells, Elements, cell ) {
+ traverse( attributeNames ,Elements,e ){
+ cellXML := '<cell value="' + cell.GetAttributeByName( e ) + '"/>'
+ columnXML := columnXML + cellXML;
+ }
+ }
+ columnXML := columnXML + "</column>";
+ }
+ if( type = "attribute" ){
+ columnXML0_1 := "<column><name>Sales Segment</name><type>String</type>";
+ columnXML0_2 := "<column><name>Generation</name><type>String</type>";
+ columnXML0_3 := "<column><name>MQB/MLB</name><type>String</type>";
+ columnXML0_4 := "<column><name>鍔熺巼</name><type>String</type>";
+
+ columnXML1 := "<column><name>Product ID</name><type>String</type>";
+ columnXML2 := "<column><name>Attribute</name><type>String</type>";
+
+ traverse ( cells, Elements, cell ) {
+ flag := true;
+ traverse( attributeNames ,Elements,e ){
+ if( flag ){
+ cellXML := '<cell value="' + cell.LocalRow().Name() + '"/>'
+ columnXML1 := columnXML1 + cellXML;
+
+ salesSegment := select( cell.LocalRow().LocalTable(),LocalColumn.LocalCell.astype( LocalCell_DemandComparison ),temp_cell,temp_cell.LocalRow() = cell.LocalRow() and temp_cell.LocalColumn().Name() = "浜у湴");
+ if( not isnull( salesSegment )){
+ cellXML0_1 := '<cell value="' + ifexpr( salesSegment.BaseVersionValue() <> "绌�",salesSegment.BaseVersionValue(),salesSegment.CompareVersionValue()) + '"/>';
+ columnXML0_1 := columnXML0_1 + cellXML0_1;
+ }else{
+ cellXML0_1 := '<cell value=" "/>'
+ columnXML0_1 := columnXML0_1 + cellXML0_1;
+ }
+
+ product := select( macroPlan,Product_MP,product,product.ID() = cell.LocalRow().Name() );
+ if( not isnull( product )){
+ cellXML0_2 := '<cell value="' + product.Generation() + '"/>';
+ cellXML0_3 := '<cell value="' + product.MQBMLB() + '"/>';
+ cellXML0_4 := '<cell value="' + product.Power() + '"/>';
+ columnXML0_2 := columnXML0_2 + cellXML0_2;
+ columnXML0_3 := columnXML0_3 + cellXML0_3;
+ columnXML0_4 := columnXML0_4 + cellXML0_4;
+ }else{
+ cellXML0_2 := '<cell value=" "/>';
+ cellXML0_3 := '<cell value=" "/>';
+ cellXML0_4 := '<cell value=" "/>';
+ columnXML0_2 := columnXML0_2 + cellXML0_2;
+ columnXML0_3 := columnXML0_3 + cellXML0_3;
+ columnXML0_4 := columnXML0_4 + cellXML0_4;
+ }
+
+ flag := false;
+ }else{
+ cellXML := '<cell value=" "/>'
+ columnXML1 := columnXML1 + cellXML;
+ cellXML0_1 := '<cell value=" "/>'
+ cellXML0_2 := '<cell value=" "/>';
+ cellXML0_3 := '<cell value=" "/>';
+ cellXML0_4 := '<cell value=" "/>';
+ columnXML0_1 := columnXML0_1 + cellXML0_1;
+ columnXML0_2 := columnXML0_2 + cellXML0_2;
+ columnXML0_3 := columnXML0_3 + cellXML0_3;
+ columnXML0_4 := columnXML0_4 + cellXML0_4;
+ }
+ cellXML := '<cell value="' + e + '"/>'
+ columnXML2 := columnXML2 + cellXML;
+ }
+ }
+ columnXML := columnXML0_1 + "</column>" + columnXML0_2 + "</column>" + columnXML0_3 + "</column>" + columnXML0_4 + "</column>" + columnXML1 + "</column>" + columnXML2 + "</column>";
+ }
+
+ return columnXML;
+ *]
+}
diff --git a/_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl b/_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl
new file mode 100644
index 0000000..3271cca
--- /dev/null
+++ b/_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+TypeSpecialization LocalCell_ProductionComparison
+{
+ #keys: '2[412672.1.64753741][412672.1.64753740]'
+ Parent: LocalCell
+ StructuredName: 'LocalCell_ProductionComparisons'
+}
diff --git a/_Main/BL/Type_LocalColumn/Attribute_CustomIndex.qbl b/_Main/BL/Type_LocalColumn/Attribute_CustomIndex.qbl
new file mode 100644
index 0000000..08e7058
--- /dev/null
+++ b/_Main/BL/Type_LocalColumn/Attribute_CustomIndex.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CustomIndex
+{
+ #keys: '3[412672.1.64721865][412672.1.64721864][412672.1.64721866]'
+ ValueType: Number
+}
diff --git a/_Main/BL/Type_LocalColumn/DefaultValue_CustomIndex.qbl b/_Main/BL/Type_LocalColumn/DefaultValue_CustomIndex.qbl
new file mode 100644
index 0000000..d26aba3
--- /dev/null
+++ b/_Main/BL/Type_LocalColumn/DefaultValue_CustomIndex.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ ISOValue: '-999'
+ TargetAttribute: CustomIndex
+}
diff --git a/_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl b/_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl
new file mode 100644
index 0000000..8319f34
--- /dev/null
+++ b/_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl
@@ -0,0 +1,25 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIndex
+{
+ TextBody:
+ [*
+ // rislai Jul-24-2024 (created)
+ year := this.Date().Year();
+ month := this.Date().Month();
+ day := this.Date().Day();
+
+ index := [String]year;
+ if( month < 10 ){
+ index := index + "0" + [String]month;
+ }
+ if( day < 10 ){
+ index := index + "0" + [String]day;
+ }
+
+
+ value := ifexpr( this.CustomIndex() = -999,[Number]index,this.CustomIndex() );
+
+ this.Index( value );
+ *]
+}
diff --git a/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl b/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
index cb7d860..9434ec7 100644
--- a/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
+++ b/_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
@@ -8,7 +8,16 @@
[*
// rislai Jul-17-2024 (created)
macroPlan := this.MacroPlan();
- table := recycleBin.LocalTable( relnew,Name := "");
+ table := recycleBin.LocalTable( relnew,Name := "浜ч噺瀵规瘮鎶ヨ〃");
+
+ actualDailyProductionDatas := selectset( macroPlan,ActualDailyProductionData,data,true );
+ actualDailyProductionDataIndexTree := NamedValueTree::Create();
+ for( i := 0; i< actualDailyProductionDatas.Size(); i++ ){
+ actualDailyProductionData := actualDailyProductionDatas.Element( i );
+ actualDailyProductionDataKey := actualDailyProductionData.Product() + actualDailyProductionData.Date().AsQUILL();
+ actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey );
+ actualDailyProductionDataIndexTree.Root().AddChild( actualDailyProductionDataHandle,i );
+ }
localColumns := construct( LocalColumns );
localColumnIndexTree := NamedValueTree::Create();
@@ -18,20 +27,36 @@
localColumns.Add( localColumn );
localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
}
+
traverse( this,OfflinePlanRow,row,row.Type() = "1" ){
productID := row.ProductID();
-
+ productLine := row.ProductionLine();
localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := productID );
traverse( row,OfflinePlanCell,cell,cell.OfflinePlanColumn().ColumnDate() >= macroPlan.StartOfPlanning().Date() ){
localColumnHandle := localColumnIndexTree.GetHandle( cell.OfflinePlanColumn().ColumnDate().AsQUILL() );
localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
if( not isnull( localColumnIndex )){
+ actualDailyProductionDataKey := productID + cell.OfflinePlanColumn().ColumnDate().AsQUILL();
+ actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey );
+ actualDailyProductionDataIndex := guard( actualDailyProductionDataIndexTree.Root().Child( actualDailyProductionDataHandle ),null( NamedValue ));
+
+ actualDailyProductionVolume := 0.0;
+ if( not isnull( actualDailyProductionDataIndex )){
+ actualDailyProductionData := actualDailyProductionDatas.Element( actualDailyProductionDataIndex.GetValueAsNumber() );
+ actualDailyProductionVolume := actualDailyProductionData.ProductionVolume();
+ }
localColumn := localColumns.Element( localColumnIndex.GetValueAsNumber() );
- localCell := localRow.LocalCell( relnew,LocalCell_DemandComparison ,LocalColumn := localColumn,
- BaseVersion := cell.Quantity(),CompareVersion := 0.0);
+ localRow.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := localColumn,
+ Plan := cell.Quantity(),Actual := actualDailyProductionVolume );
}
}
}
+ traverse( table,LocalColumn,column ){
+ if( column.LocalCell( relsize ) = 0 ){
+ column.Delete();
+ }
+ }
+
return table;
*]
}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
index 8417130..7f3a077 100644
--- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -71,6 +71,17 @@
Taborder: 5
]
}
+ Component ButtonOfflinePlanComparisonReport
+ {
+ #keys: '[412672.1.66051424]'
+ BaseType: 'WebButton'
+ Properties:
+ [
+ Image: 'DOCUMENT_INFO'
+ Label: '浜ч噺瀵规瘮鎶ヨ〃'
+ Taborder: 6
+ ]
+ }
]
Properties:
[
diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport.def
new file mode 100644
index 0000000..76d3138
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport.def
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: ActionBarGroupReport/ButtonOfflinePlanComparisonReport
+Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport_OnClick
+{
+ #keys: '[412672.1.66051682]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebButton_OnClick'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ // Open view
+ ApplicationMacroPlanner.OpenView( 'OfflinePlanComparisonReport', this );
+ *]
+ }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def"
new file mode 100644
index 0000000..9fe94ea
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor\043988.def"
@@ -0,0 +1,102 @@
+Quintiq file version 2.0
+Component MatrixEditor id:MatrixEditor_988
+{
+ #keys: '[412672.1.61940674]'
+ BaseType: 'WebMatrixEditor'
+ Children:
+ [
+ Component MatrixEditorCell
+ {
+ #keys: '[412672.1.61940675]'
+ BaseType: 'WebMatrixEditorCell'
+ Children:
+ [
+ Component DataExtractorCells
+ {
+ #keys: '[412672.1.61940676]'
+ BaseType: 'WebDataExtractor'
+ Properties:
+ [
+ DataType: 'LocalTable'
+ Source: 'dhComparisonData'
+ Taborder: 0
+ Transformation: 'LocalRow.LocalCell.astype(LocalCell_ProductionComparison)'
+ ]
+ }
+ ]
+ Properties:
+ [
+ Attributes: 'Plan;Actual;Gap'
+ Column: 'LocalColumn'
+ Row: 'LocalRow'
+ Taborder: 0
+ ]
+ }
+ Component MatrixEditorRows
+ {
+ #keys: '[412672.1.61940677]'
+ BaseType: 'WebMatrixEditorHeaderLevel'
+ Children:
+ [
+ Component DataExtractorRows
+ {
+ #keys: '[412672.1.61940678]'
+ BaseType: 'WebDataExtractor'
+ Properties:
+ [
+ DataType: 'LocalTable'
+ FilterArguments: 'checkedProduct:QMacroPlanner::FormOfflinePlanComparison.dhFinelProduct'
+ FixedFilter: 'exists( checkedProduct,Elements,product,product.ID() = object.Name() )'
+ Source: 'dhComparisonData'
+ Taborder: 0
+ Transformation: 'LocalRow'
+ ]
+ }
+ ]
+ Properties:
+ [
+ Legend: 'Name'
+ SortCriteria: 'Index'
+ Taborder: 1
+ ]
+ }
+ Component MatrixEditorColumns
+ {
+ #keys: '[412672.1.61940679]'
+ BaseType: 'WebMatrixEditorHeaderLevel'
+ Children:
+ [
+ Component DataExtractorColumns
+ {
+ #keys: '[412672.1.61940680]'
+ BaseType: 'WebDataExtractor'
+ Properties:
+ [
+ DataType: 'LocalTable'
+ FilterArguments: 'startDate:QMacroPlanner::FormOfflinePlanComparison.dhStartDate;endDate:QMacroPlanner::FormOfflinePlanComparison.dhEndDate'
+ FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date()'
+ Source: 'dhComparisonData'
+ Taborder: 0
+ Transformation: 'LocalColumn'
+ ]
+ }
+ ]
+ Properties:
+ [
+ Legend: 'Date'
+ SortCriteria: 'Index'
+ Taborder: 2
+ ]
+ }
+ #child: matrixEditorActionBarPageDemandComparison_1
+ #child: matrixeditorContextMenuDemandComparison_1
+ ]
+ Properties:
+ [
+ AllowMultipleAttributes: true
+ Columns: 'MatrixEditorColumns'
+ ContextMenu: 'matrixeditorContextMenuDemandComparison'
+ Rows: 'MatrixEditorRows'
+ Taborder: 0
+ ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison\043634.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison\043634.def"
new file mode 100644
index 0000000..d1923c2
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison\043634.def"
@@ -0,0 +1,84 @@
+Quintiq file version 2.0
+Component PanelDemandComparison id:PanelDemandComparison_634
+{
+ #keys: '[412672.1.61940673]'
+ BaseType: 'WebPanel'
+ Children:
+ [
+ #child: MatrixEditor_988
+ Component dhComparisonData
+ {
+ #keys: '[412672.1.61940683]'
+ BaseType: 'WebDataHolder'
+ Databinding: 'LocalTable'
+ Properties:
+ [
+ Taborder: 1
+ ]
+ }
+ Component dhCheckedProduct
+ {
+ #keys: '[412672.1.61940684]'
+ BaseType: 'WebDataHolder'
+ Databinding: 'structured[Product_MP]*'
+ Children:
+ [
+ Component deCheckedProduct
+ {
+ #keys: '[412672.1.61940685]'
+ BaseType: 'WebDataExtractor'
+ Properties:
+ [
+ DataType: 'structured[Product_MP]'
+ Source: 'ApplicationMacroPlanner.DataHolderCheckedProduct'
+ Taborder: 0
+ Transformation: 'Elements'
+ ]
+ }
+ ]
+ Properties:
+ [
+ Taborder: 3
+ ]
+ }
+ Component dhFinelProduct
+ {
+ #keys: '[412672.1.61940686]'
+ BaseType: 'WebDataHolder'
+ Databinding: 'structured[Product_MP]*'
+ Properties:
+ [
+ Taborder: 2
+ ]
+ }
+ Component dhCheckedSalesSegment
+ {
+ #keys: '[412672.1.61940687]'
+ BaseType: 'WebDataHolder'
+ Databinding: 'structured[SalesSegment_MP]*'
+ Children:
+ [
+ Component deCheckedSalesSegment
+ {
+ #keys: '[412672.1.61940688]'
+ BaseType: 'WebDataExtractor'
+ Properties:
+ [
+ DataType: 'structured[SalesSegment_MP]'
+ Source: 'ApplicationMacroPlanner.DataHolderCheckedSalesSegment'
+ Taborder: 0
+ Transformation: 'Elements'
+ ]
+ }
+ ]
+ Properties:
+ [
+ Taborder: 4
+ ]
+ }
+ ]
+ Properties:
+ [
+ Taborder: 1
+ ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter\043119.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter\043119.def"
new file mode 100644
index 0000000..688487d
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter\043119.def"
@@ -0,0 +1,96 @@
+Quintiq file version 2.0
+Component PanelFilter id:PanelFilter_119
+{
+ #keys: '[412672.1.61991354]'
+ BaseType: 'WebPanel'
+ Children:
+ [
+ Component ddslGeneration
+ {
+ #keys: '[412672.1.61991355]'
+ BaseType: 'WebDropDownStringList'
+ Properties:
+ [
+ Label: 'Generation'
+ Taborder: 0
+ ]
+ }
+ Component ddslMQBMLB
+ {
+ #keys: '[412672.1.61991356]'
+ BaseType: 'WebDropDownStringList'
+ Properties:
+ [
+ Label: 'MQB/MLB'
+ Taborder: 1
+ ]
+ }
+ Component ddslPower
+ {
+ #keys: '[412672.1.61991357]'
+ BaseType: 'WebDropDownStringList'
+ Properties:
+ [
+ Label: '鍔熺巼'
+ Taborder: 2
+ ]
+ }
+ Component dsStartDate
+ {
+ #keys: '[412672.1.61991358]'
+ BaseType: 'WebDateSelector'
+ Properties:
+ [
+ Label: 'Start Date'
+ Taborder: 3
+ ]
+ }
+ Component dsEndDate
+ {
+ #keys: '[412672.1.61991359]'
+ BaseType: 'WebDateSelector'
+ Properties:
+ [
+ Date: 9999-12-31
+ Label: 'End Date'
+ Taborder: 5
+ ]
+ }
+ Component ButtonFilter
+ {
+ #keys: '[412672.1.61991360]'
+ BaseType: 'WebButton'
+ Properties:
+ [
+ Label: '杩囨护'
+ Taborder: 7
+ ]
+ }
+ Component dhStartDate
+ {
+ #keys: '[412672.1.61991361]'
+ BaseType: 'WebDataHolder'
+ Databinding: 'Date*'
+ Properties:
+ [
+ Taborder: 4
+ ]
+ }
+ Component dhEndDate
+ {
+ #keys: '[412672.1.61991362]'
+ BaseType: 'WebDataHolder'
+ Databinding: 'Date*'
+ Properties:
+ [
+ Taborder: 6
+ ]
+ }
+ ]
+ Properties:
+ [
+ FixedSize: true
+ Orientation: 'horizontal'
+ Taborder: 1
+ ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon.def
new file mode 100644
index 0000000..8c81a3d
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+Component PanelRibbon
+{
+ #keys: '[412672.1.64210439]'
+ BaseType: 'WebPanel'
+ Children:
+ [
+ #child: PanelFilter_119
+ #child: PanelRibbon504
+ ]
+ Properties:
+ [
+ FixedSize: true
+ Taborder: 0
+ ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
new file mode 100644
index 0000000..abb2e55
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
@@ -0,0 +1,62 @@
+Quintiq file version 2.0
+Component PanelRibbon504
+{
+ #keys: '[412672.1.64850929]'
+ BaseType: 'WebPanel'
+ Children:
+ [
+ Component ddlOfflinePlanTable
+ {
+ #keys: '[412672.1.64850982]'
+ BaseType: 'WebDropDownList'
+ Databinding: 'OfflinePlanTable'
+ Children:
+ [
+ Component DataExtractorRibbon
+ {
+ #keys: '[412672.1.64850983]'
+ BaseType: 'WebDataExtractor'
+ Properties:
+ [
+ DataType: 'MacroPlan'
+ Source: 'MacroPlan'
+ Taborder: 0
+ Transformation: 'OfflinePlanTable'
+ ]
+ }
+ ]
+ Properties:
+ [
+ DisplayField: 'SaveDateTime'
+ Label: '涓嬬嚎璁″垝:'
+ Taborder: 0
+ ]
+ }
+ Component bComparison
+ {
+ #keys: '[412672.1.64851009]'
+ BaseType: 'WebButton'
+ Properties:
+ [
+ Label: '寮�濮嬪姣�'
+ Taborder: 1
+ ]
+ }
+ Component LabelRibbon
+ {
+ #keys: '[412672.1.66018113]'
+ BaseType: 'WebLabel'
+ Properties:
+ [
+ DataBinding: 'ddlOfflinePlanTable.Data.SaveDateTime'
+ Taborder: 2
+ ]
+ }
+ ]
+ Properties:
+ [
+ FixedSize: true
+ Orientation: 'horizontal'
+ Taborder: 0
+ ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixEditorActionBarPageDemandComparison\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixEditorActionBarPageDemandComparison\0431.def"
new file mode 100644
index 0000000..f0083f7
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixEditorActionBarPageDemandComparison\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixEditorActionBarPageDemandComparison id:matrixEditorActionBarPageDemandComparison_1
+{
+ #keys: '[412672.1.61940681]'
+ BaseType: 'matrixEditorActionBarPage'
+ Properties:
+ [
+ Taborder: 3
+ ]
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixeditorContextMenuDemandComparison\0431.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixeditorContextMenuDemandComparison\0431.def"
new file mode 100644
index 0000000..5cd9345
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixeditorContextMenuDemandComparison\0431.def"
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+Component matrixeditorContextMenuDemandComparison id:matrixeditorContextMenuDemandComparison_1
+{
+ #keys: '[412672.1.61940682]'
+ BaseType: 'matrixeditorContextMenu'
+ Properties:
+ [
+ Taborder: 4
+ ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged.def
new file mode 100644
index 0000000..15c2b22
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelDemandComparison_634/dhCheckedProduct
+Response OnDataChanged () id:Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged
+{
+ #keys: '[412672.1.61940669]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ if( this.Data().Size() <> 0 ){
+ dhFinelProduct.Data( this.Data().Copy() );
+ }else{
+ dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
+ }
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged.def
new file mode 100644
index 0000000..48ec71e
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged.def
@@ -0,0 +1,21 @@
+Quintiq file version 2.0
+#parent: PanelDemandComparison_634/dhCheckedSalesSegment
+Response OnDataChanged () id:Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged
+{
+ #keys: '[412672.1.61940667]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ if( this.Data().Size() <> 0 ){
+ prods := selectset( dhFinelProduct.Data(),Elements,element,exists( this.Data(),Elements.SalesDemand.Product_MP,prod,element = prod ));
+ dhFinelProduct.Data( &prods );
+ }else{
+ dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
+ }
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def
new file mode 100644
index 0000000..0142a22
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelDemandComparison_634/dhComparisonData
+Response OnDataChanged () id:Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged
+{
+ #keys: '[412672.1.61940670]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ PanelDemandComparison.Title( this.Data().Name() );
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhFinelProduct_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhFinelProduct_OnCreated.def
new file mode 100644
index 0000000..c3eacc2
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhFinelProduct_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelDemandComparison_634/dhFinelProduct
+Response OnCreated () id:Response_PanelDemandComparison_634_dhFinelProduct_OnCreated
+{
+ #keys: '[412672.1.61940668]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebComponent_OnCreated'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ this.Data( DataHolderProduct.Data().Copy() );
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def
new file mode 100644
index 0000000..a4f3788
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: PanelFilter_119/ButtonFilter
+Response OnClick () id:Response_PanelFilter_119_ButtonFilter_OnClick
+{
+ #keys: '[412672.1.61991348]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebButton_OnClick'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ products := dhCheckedProduct.Data().Copy();
+ if( ddslGeneration.Text() <> "<All>" ){
+ products := selectset( products,Elements,element,element.Generation() <> ddslGeneration.Text());
+ }
+ if( ddslMQBMLB.Text() <> "<All>" ){
+ products := selectset( products,Elements,element,element.MQBMLB() <> ddslMQBMLB.Text());
+ }
+ if( ddslPower.Text() <> "<All>" ){
+ products := selectset( products,Elements,element,element.Power() <> ddslPower.Text());
+ }
+ dhFinelProduct.Data( &products );
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslGeneration_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslGeneration_OnCreated.def
new file mode 100644
index 0000000..d7286fc
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslGeneration_OnCreated.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelFilter_119/ddslGeneration
+Response OnCreated () id:Response_PanelFilter_119_ddslGeneration_OnCreated
+{
+ #keys: '[412672.1.61991353]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebComponent_OnCreated'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.Generation() );
+
+ res := strings.Concatenate( ";" );
+
+ this.Strings( "<All>;" + res );
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslMQBMLB_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslMQBMLB_OnCreated.def
new file mode 100644
index 0000000..3228a00
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslMQBMLB_OnCreated.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelFilter_119/ddslMQBMLB
+Response OnCreated () id:Response_PanelFilter_119_ddslMQBMLB_OnCreated
+{
+ #keys: '[412672.1.61991352]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebComponent_OnCreated'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.MQBMLB() );
+
+ res := strings.Concatenate( ";" );
+
+ this.Strings( "<All>;" + res );
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslPower_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslPower_OnCreated.def
new file mode 100644
index 0000000..7d8370b
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslPower_OnCreated.def
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: PanelFilter_119/ddslPower
+Response OnCreated () id:Response_PanelFilter_119_ddslPower_OnCreated
+{
+ #keys: '[412672.1.61991351]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebComponent_OnCreated'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.Power() );
+
+ res := strings.Concatenate( ";" );
+
+ this.Strings( "<All>;" + res );
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhEndDate_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhEndDate_OnCreated.def
new file mode 100644
index 0000000..2aedb4a
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhEndDate_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelFilter_119/dhEndDate
+Response OnCreated () id:Response_PanelFilter_119_dhEndDate_OnCreated
+{
+ #keys: '[412672.1.61991346]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebComponent_OnCreated'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ this.Data( Date::MaxDate() );
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhStartDate_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhStartDate_OnCreated.def
new file mode 100644
index 0000000..a2dc135
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhStartDate_OnCreated.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelFilter_119/dhStartDate
+Response OnCreated () id:Response_PanelFilter_119_dhStartDate_OnCreated
+{
+ #keys: '[412672.1.61991347]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebComponent_OnCreated'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ this.Data( Date::MinDate() );
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsEndDate_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsEndDate_OnChanged.def
new file mode 100644
index 0000000..79ee881
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsEndDate_OnChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelFilter_119/dsEndDate
+Response OnChanged () id:Response_PanelFilter_119_dsEndDate_OnChanged
+{
+ #keys: '[412672.1.61991349]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ dhEndDate.Data( this.Date() );
+ *]
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsStartDate_OnChanged.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsStartDate_OnChanged.def
new file mode 100644
index 0000000..1b7e133
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsStartDate_OnChanged.def
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: PanelFilter_119/dsStartDate
+Response OnChanged () id:Response_PanelFilter_119_dsStartDate_OnChanged
+{
+ #keys: '[412672.1.61991350]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
+ GroupServerCalls: true
+ QuillAction
+ {
+ Body:
+ [*
+ dhStartDate.Data( this.Date() );
+ *]
+ }
+}
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick\043613.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick\043613.def"
new file mode 100644
index 0000000..99add2b
--- /dev/null
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick\043613.def"
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#parent: PanelRibbon504/bComparison
+Response OnClick () id:Response_PanelRibbon504_bComparison_OnClick_613
+{
+ #keys: '[412672.1.64851008]'
+ CanBindMultiple: false
+ DefinitionID: 'Responsedef_WebButton_OnClick'
+ QuillAction
+ {
+ Body:
+ [*
+ opt := ddlOfflinePlanTable.Data();
+
+ dhComparisonData.Data( opt.Comparison( RecycleBin ));
+ *]
+ GroupServerCalls: false
+ }
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def
new file mode 100644
index 0000000..064466f
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def
@@ -0,0 +1,18 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormOfflinePlanComparison
+{
+ #keys: '[412672.1.61921213]'
+ BaseType: 'WebForm'
+ Children:
+ [
+ #child: PanelRibbon
+ #child: PanelDemandComparison_634
+ ]
+ Properties:
+ [
+ Image: 'DOCUMENT_INFO'
+ Title: '浜ч噺瀵规瘮鎶ヨ〃'
+ ]
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Views/OfflinePlanComparisonReport.vw b/_Main/UI/MacroPlannerWebApp/Views/OfflinePlanComparisonReport.vw
new file mode 100644
index 0000000..0bb5878
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Views/OfflinePlanComparisonReport.vw
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+{
+ viewcontents
+ {
+ page: ''
+ group: ''
+ index: 0
+ image: 'DOCUMENT_INFO'
+ description: ''
+ }
+ formatversion: 2
+ id: 'OfflinePlanComparisonReport'
+ name: 'OfflinePlanComparisonReport'
+ isglobal: false
+ isroot: true
+}
--
Gitblit v1.9.3