From 8cdeea17a4b0516bf0293c4d91460277c09fbecd Mon Sep 17 00:00:00 2001
From: lazhen <17772815105@139.com>
Date: 星期四, 27 六月 2024 16:10:43 +0800
Subject: [PATCH] 财务销量报表后端结构建立
---
_Main/BL/Type_FinancialSalesRow/_ROOT_Type_FinancialSalesRow.qbl | 10
_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl | 16
_Main/BL/Type_FinancialSalesSearch/DefaultValue_Generation.qbl | 6
_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl | 22 +
_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl | 85 +++
_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl | 15
_Main/BL/Type_FinancialSalesColumn/Function_CalcIndex.qbl | 13
_Main/BL/Type_FinancialSalesReport/Attribute_ID.qbl | 8
_Main/BL/Relations/Relation_FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_Fina.qbl | 23 +
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_column.qbl | 27 +
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_table.qbl | 27 +
_Main/BL/Type_FinancialSalesColumn/Attribute_Index.qbl | 7
_Main/BL/Type_FinancialSalesSource/Attribute_UploadUser.qbl | 7
_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl | 10
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_Key.qbl | 7
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_Key.qbl | 7
_Main/BL/Type_FinancialSalesRow/Attribute_Unit.qbl | 8
_Main/BL/Type_FinancialSalesSearch/DefaultValue_Unit.qbl | 6
_Main/BL/Type_FinancialSalesSource/Attribute_FileBinaryValue.qbl | 7
_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultCCUnit.qbl | 10
_Main/BL/Type_FinancialSalesRow/DefaultValue_Name.qbl | 6
_Main/BL/Type_FinancialSalesColumn/DefaultValue_Name.qbl | 6
_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl | 44 ++
_Main/BL/Type_FinancialSalesSource/Attribute_IsXLSX.qbl | 7
_Main/BL/Type_FinancialSalesSearch/DefaultValue_Power.qbl | 6
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_table.qbl | 27 +
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/_ROOT_XML_FinancialSalesReportXMLHeaders.qbl | 8
_Main/BL/Type_FinancialSalesSource/Attribute_Name.qbl | 7
_Main/BL/Type_FinancialSalesSearch/Attribute_Power.qbl | 7
_Main/BL/Type_FinancialSalesRow/Method_Filter.qbl | 22 +
_Main/BL/Relations/Relation_FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource.qbl | 23 +
_Main/BL/Type_FinancialSalesReport/Attribute_IsShow.qbl | 7
_Main/BL/Type_FinancialSalesRow/Attribute_DuplicateValueMarker.qbl | 8
_Main/BL/Type_FinancialSalesReport/Attribute_Name.qbl | 8
_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl | 20
_Main/BL/Type_FinancialSalesReport/Method_ImportVerification.qbl | 57 ++
_Main/BL/Type_FinancialSalesSource/Attribute_IsImport.qbl | 7
_Main/BL/Type_FinancialSalesReport/Method_IdentifyNullValues.qbl | 53 ++
_Main/BL/Type_FinancialSalesSearch/_ROOT_Type_FinancialSalesSearch.qbl | 10
_Main/BL/Type_FinancialSalesCell/_ROOT_Type_FinancialSalesCell.qbl | 10
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_QuintiqType.qbl | 7
_Main/BL/Type_FinancialSalesReport/Method_SyncRows.qbl | 39 +
_Main/BL/Type_FinancialSalesReport/Method_Clear.qbl | 13
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_QuintiqType.qbl | 7
_Main/BL/Type_FinancialSalesColumn/Attribute_Period.qbl | 7
_Main/BL/Type_FinancialSalesRow/Attribute_RowNr.qbl | 7
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_cell.qbl | 17
_Main/BL/Type_FinancialSalesRow/DefaultValue_Unit.qbl | 6
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_column.qbl | 17
_Main/BL/Type_FinancialSalesColumn/Attribute_Name.qbl | 7
_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl | 40 +
_Main/BL/Type_FinancialSalesReport/Attribute_IsImport.qbl | 7
_Main/BL/Type_FinancialSalesCell/Attribute_Value.qbl | 7
_Main/BL/Relations/Relation_FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_Financia.qbl | 26 +
_Main/BL/Type_FinancialSalesReport/DefaultValue_Name.qbl | 6
_Main/BL/Type_FinancialSalesSource/Attribute_UploadDateTime.qbl | 7
_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultAllUnit.qbl | 10
_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_Financi.qbl | 23 +
_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl | 41 +
_Main/BL/Type_FinancialSalesSource/Method_ReadStructure.qbl | 36 +
_Main/BL/Type_FinancialSalesSearch/Attribute_MqbMlb.qbl | 7
_Main/BL/Type_FinancialSalesRow/DefaultValue_DuplicateValueMarker.qbl | 6
_Main/BL/Type_FinancialSalesReport/DefaultValue_ID.qbl | 6
_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/_ROOT_XML_FinancialSalesReportXML.qbl | 8
_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def | 31 +
_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_Fina.qbl | 26 +
_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadUser.qbl | 6
_Main/BL/Type_FinancialSalesCell/DefaultValue_Value.qbl | 6
_Main/BL/Type_FinancialSalesSource/Method_IsExistFutureMonthData.qbl | 12
_Main/BL/Type_FinancialSalesSearch/Attribute_Generation.qbl | 7
_Main/BL/Type_FinancialSalesSearch/Attribute_Unit.qbl | 8
_Main/BL/Type_FinancialSalesSource/DefaultValue_Name.qbl | 6
_Main/BL/Type_FinancialSalesReport/_ROOT_Type_FinancialSalesReport.qbl | 10
_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSa.qbl | 23 +
_Main/BL/Type_FinancialSalesRow/Attribute_Name.qbl | 7
_Main/BL/Type_FinancialSalesSource/_ROOT_Type_FinancialSalesSource.qbl | 10
_Main/BL/Type_FinancialSalesSearch/DefaultValue_MqbMlb.qbl | 6
_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_Fina.qbl | 23 +
_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl | 78 +++
_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultDLUnit.qbl | 10
_Main/BL/Type_FinancialSalesColumn/_ROOT_Type_FinancialSalesColumn.qbl | 10
_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadDateTime.qbl | 6
82 files changed, 1,306 insertions(+), 0 deletions(-)
diff --git a/_Main/BL/Relations/Relation_FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_Financia.qbl b/_Main/BL/Relations/Relation_FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_Financia.qbl
new file mode 100644
index 0000000..bfe2c42
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_Financia.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesColumn_FinancialSalesCell_FinancialSalesCell_FinancialSalesColumn
+{
+ #keys: '1[415136.0.857450656]'
+ ProceduralSequenceRelationStrategy
+ {
+ #keys: '13[0.0.0][415136.0.857450675][415136.0.857450669][415136.0.857450676][415136.0.857450670][415136.0.857450677][415136.0.857450671][415136.0.857450678][415136.0.857450672][415136.0.857450679][415136.0.857450673][415136.0.857450680][415136.0.857450674]'
+ SequenceElementSuffix: 'CellInColumn'
+ SequenceSuffix: 'CellInColumn'
+ }
+ RelationSide.LeftSide FinancialSalesCell
+ {
+ #keys: '3[415136.0.857450658][415136.0.857450657][415136.0.857450659]'
+ Cardinality: '1toN'
+ ObjectDefinition: FinancialSalesColumn
+ OwningSide: 'Owned'
+ }
+ RelationSide.RightSide FinancialSalesColumn
+ {
+ #keys: '3[415136.0.857450661][415136.0.857450660][415136.0.857450662]'
+ Cardinality: '0to1'
+ ObjectDefinition: FinancialSalesCell
+ OwningSide: 'Reference'
+ }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_Fina.qbl b/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_Fina.qbl
new file mode 100644
index 0000000..107d9d8
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_Fina.qbl
@@ -0,0 +1,26 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesReport_FinancialSalesColumn_FinancialSalesColumn_FinancialSalesReport
+{
+ #keys: '1[415136.0.857450615]'
+ ProceduralSequenceRelationStrategy
+ {
+ #keys: '13[0.0.0][415136.0.857450634][415136.0.857450628][415136.0.857450635][415136.0.857450629][415136.0.857450636][415136.0.857450630][415136.0.857450637][415136.0.857450631][415136.0.857450638][415136.0.857450632][415136.0.857450639][415136.0.857450633]'
+ SequenceElementSuffix: 'Column'
+ SequenceSuffix: 'Column'
+ }
+ RelationSide.LeftSide FinancialSalesColumn
+ {
+ #keys: '3[415136.0.857450617][415136.0.857450616][415136.0.857450618]'
+ Cardinality: '1toN'
+ ObjectDefinition: FinancialSalesReport
+ OwningSide: 'Owned'
+ }
+ RelationSide.RightSide FinancialSalesReport
+ {
+ #keys: '3[415136.0.857450620][415136.0.857450619][415136.0.857450621]'
+ Cardinality: '0to1'
+ ObjectDefinition: FinancialSalesColumn
+ OwningSide: 'Reference'
+ }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_Fina.qbl b/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_Fina.qbl
new file mode 100644
index 0000000..8993e50
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_Fina.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesReport_FinancialSalesSource_FinancialSalesSource_FinancialSalesReport
+{
+ #keys: '1[415136.0.857450551]'
+ DefaultRelationStrategy
+ {
+ }
+ RelationSide.LeftSide FinancialSalesSource
+ {
+ #keys: '3[415136.0.857450553][415136.0.857450552][415136.0.857450554]'
+ Cardinality: '0to1'
+ ObjectDefinition: FinancialSalesReport
+ OwningSide: 'Reference'
+ }
+ RelationSide.RightSide FinancialSalesReport
+ {
+ #keys: '3[415136.0.857450556][415136.0.857450555][415136.0.857450557]'
+ Cardinality: '1toN'
+ ObjectDefinition: FinancialSalesSource
+ OwningSide: 'Owned'
+ }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSa.qbl b/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSa.qbl
new file mode 100644
index 0000000..e8a093d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSa.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesRow_FinancialSalesCell_FinancialSalesCell_FinancialSalesRow
+{
+ #keys: '1[415136.0.857450694]'
+ DefaultRelationStrategy
+ {
+ }
+ RelationSide.LeftSide FinancialSalesCell
+ {
+ #keys: '3[415136.0.857450696][415136.0.857450695][415136.0.857450697]'
+ Cardinality: '1toN'
+ ObjectDefinition: FinancialSalesRow
+ OwningSide: 'Reference'
+ }
+ RelationSide.RightSide FinancialSalesRow
+ {
+ #keys: '3[415136.0.857450699][415136.0.857450698][415136.0.857450700]'
+ Cardinality: '0to1'
+ ObjectDefinition: FinancialSalesCell
+ OwningSide: 'Reference'
+ }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_Financi.qbl b/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_Financi.qbl
new file mode 100644
index 0000000..5515d5d
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_Financi.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesRow_FinancialSalesReport_FinancialSalesReport_FinancialSalesRow
+{
+ #keys: '1[415136.0.857450585]'
+ DefaultRelationStrategy
+ {
+ }
+ RelationSide.LeftSide FinancialSalesReport
+ {
+ #keys: '3[415136.0.857450587][415136.0.857450586][415136.0.857450588]'
+ Cardinality: '0to1'
+ ObjectDefinition: FinancialSalesRow
+ OwningSide: 'Reference'
+ }
+ RelationSide.RightSide FinancialSalesRow
+ {
+ #keys: '3[415136.0.857450590][415136.0.857450589][415136.0.857450591]'
+ Cardinality: '1toN'
+ ObjectDefinition: FinancialSalesReport
+ OwningSide: 'Owned'
+ }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_Fina.qbl b/_Main/BL/Relations/Relation_FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_Fina.qbl
new file mode 100644
index 0000000..ac423a9
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_Fina.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesSearch_FinancialSalesSource_FinancialSalesSource_FinancialSalesSearch
+{
+ #keys: '1[415136.0.857450518]'
+ DefaultRelationStrategy
+ {
+ }
+ RelationSide.LeftSide FinancialSalesSource
+ {
+ #keys: '3[415136.0.857450520][415136.0.857450519][415136.0.857450521]'
+ Cardinality: '0to1'
+ ObjectDefinition: FinancialSalesSearch
+ OwningSide: 'Reference'
+ }
+ RelationSide.RightSide FinancialSalesSearch
+ {
+ #keys: '3[415136.0.857450523][415136.0.857450522][415136.0.857450524]'
+ Cardinality: '1toN'
+ ObjectDefinition: FinancialSalesSource
+ OwningSide: 'Owned'
+ }
+}
diff --git a/_Main/BL/Relations/Relation_FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource.qbl b/_Main/BL/Relations/Relation_FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource.qbl
new file mode 100644
index 0000000..0986a76
--- /dev/null
+++ b/_Main/BL/Relations/Relation_FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation FinancialSalesSource_MacroPlan_MacroPlan_FinancialSalesSource
+{
+ #keys: '1[415136.0.857450485]'
+ DefaultRelationStrategy
+ {
+ }
+ RelationSide.LeftSide MacroPlan
+ {
+ #keys: '3[415136.0.857450487][415136.0.857450486][415136.0.857450488]'
+ Cardinality: '0to1'
+ ObjectDefinition: FinancialSalesSource
+ OwningSide: 'Reference'
+ }
+ RelationSide.RightSide FinancialSalesSource
+ {
+ #keys: '3[415136.0.857450490][415136.0.857450489][415136.0.857450491]'
+ Cardinality: '1toN'
+ ObjectDefinition: MacroPlan
+ OwningSide: 'Owned'
+ }
+}
diff --git a/_Main/BL/Type_FinancialSalesCell/Attribute_Value.qbl b/_Main/BL/Type_FinancialSalesCell/Attribute_Value.qbl
new file mode 100644
index 0000000..4cd3ade
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesCell/Attribute_Value.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Value
+{
+ #keys: '3[415136.0.857450650][415136.0.857450649][415136.0.857450651]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesCell/DefaultValue_Value.qbl b/_Main/BL/Type_FinancialSalesCell/DefaultValue_Value.qbl
new file mode 100644
index 0000000..913414b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesCell/DefaultValue_Value.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: Value
+}
diff --git a/_Main/BL/Type_FinancialSalesCell/_ROOT_Type_FinancialSalesCell.qbl b/_Main/BL/Type_FinancialSalesCell/_ROOT_Type_FinancialSalesCell.qbl
new file mode 100644
index 0000000..f1bc544
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesCell/_ROOT_Type_FinancialSalesCell.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesCell
+{
+ #keys: '5[415136.0.857450647][415136.0.857450645][0.0.0][415136.0.857450646][415136.0.857450648]'
+ BaseType: Object
+ Description: '璐㈠姟閿�閲忔姤琛ㄥ崟鍏冩牸'
+ StructuredName: 'FinancialSalesCells'
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/Attribute_Index.qbl b/_Main/BL/Type_FinancialSalesColumn/Attribute_Index.qbl
new file mode 100644
index 0000000..ff0c958
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/Attribute_Index.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Index
+{
+ #keys: '3[415136.0.857450603][415136.0.857450602][415136.0.857450604]'
+ ValueType: Number
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/Attribute_Name.qbl b/_Main/BL/Type_FinancialSalesColumn/Attribute_Name.qbl
new file mode 100644
index 0000000..fc78517
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+ #keys: '3[415136.0.857450606][415136.0.857450605][415136.0.857450607]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/Attribute_Period.qbl b/_Main/BL/Type_FinancialSalesColumn/Attribute_Period.qbl
new file mode 100644
index 0000000..4f47768
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/Attribute_Period.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Period
+{
+ #keys: '3[415136.0.857450609][415136.0.857450608][415136.0.857450610]'
+ ValueType: Date
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialSalesColumn/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/Function_CalcIndex.qbl b/_Main/BL/Type_FinancialSalesColumn/Function_CalcIndex.qbl
new file mode 100644
index 0000000..56bbf20
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/Function_CalcIndex.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Function CalcIndex
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-21-2024 (created)
+
+ value := ifexpr( isnull( this.PreviousColumn() ), 0, this.PreviousColumn().Index() + 1 );
+
+ this.Index( value );
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesColumn/_ROOT_Type_FinancialSalesColumn.qbl b/_Main/BL/Type_FinancialSalesColumn/_ROOT_Type_FinancialSalesColumn.qbl
new file mode 100644
index 0000000..3e9adbd
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesColumn/_ROOT_Type_FinancialSalesColumn.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesColumn
+{
+ #keys: '5[415136.0.857450600][415136.0.857450598][0.0.0][415136.0.857450599][415136.0.857450601]'
+ BaseType: Object
+ Description: '璐㈠姟閿�閲忓垪'
+ StructuredName: 'FinancialSalesColumns'
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Attribute_ID.qbl b/_Main/BL/Type_FinancialSalesReport/Attribute_ID.qbl
new file mode 100644
index 0000000..bc94ba1
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+ #keys: '3[415136.0.857450536][415136.0.857450535][415136.0.857450537]'
+ IsReadOnly: true
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Attribute_IsImport.qbl b/_Main/BL/Type_FinancialSalesReport/Attribute_IsImport.qbl
new file mode 100644
index 0000000..b8c1b97
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Attribute_IsImport.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsImport
+{
+ #keys: '3[415136.0.857450539][415136.0.857450538][415136.0.857450540]'
+ ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Attribute_IsShow.qbl b/_Main/BL/Type_FinancialSalesReport/Attribute_IsShow.qbl
new file mode 100644
index 0000000..86e138b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Attribute_IsShow.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsShow
+{
+ #keys: '3[415136.0.857450542][415136.0.857450541][415136.0.857450543]'
+ ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Attribute_Name.qbl b/_Main/BL/Type_FinancialSalesReport/Attribute_Name.qbl
new file mode 100644
index 0000000..5c81481
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+ #keys: '3[415136.0.857450545][415136.0.857450544][415136.0.857450546]'
+ Description: '鍚嶇О'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/DefaultValue_ID.qbl b/_Main/BL/Type_FinancialSalesReport/DefaultValue_ID.qbl
new file mode 100644
index 0000000..049abc0
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/DefaultValue_ID.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: ID
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialSalesReport/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_Clear.qbl b/_Main/BL/Type_FinancialSalesReport/Method_Clear.qbl
new file mode 100644
index 0000000..60fd446
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_Clear.qbl
@@ -0,0 +1,13 @@
+Quintiq file version 2.0
+#parent: #root
+Method Clear
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-25-2024 (created)
+ this.FinancialSalesColumn( relflush );
+ this.FinancialSalesRow( relflush );
+
+ this.GenerateColumn( this.FinancialSalesSource().MacroPlan() );
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl b/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
new file mode 100644
index 0000000..1c7bb7b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_Generate.qbl
@@ -0,0 +1,44 @@
+Quintiq file version 2.0
+#parent: #root
+Method Generate (
+ FinancialProductionSearch search,
+ Product_MPs products
+)
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-25-2024 (created)
+ table := selectobject( this, FinancialSalesSource.FinancialSalesReport, report, not report.IsShow() );
+ allunit := '<All>';
+ //娓呯┖涔嬪墠瀛樺偍鐨勬樉绀烘暟鎹�
+ this.Clear();
+ //杩囨护鍚庣殑浜у搧id
+ productids := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
+ and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
+ and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
+ sumrow := this.FinancialSalesRow( relnew, Name := 'SUM', Unit := search.Unit(), RowNr := table.FinancialSalesRow( relsize ) );
+ traverse( table, FinancialSalesRow, row, row.Unit() = search.Unit() ){
+ productid := construct( Strings );
+ productid.Add( row.Name() );
+
+ if( productids.ContainsAll( productid ) ){
+ showrow := this.FinancialSalesRow( relnew, Name := row.Name(), Unit := row.Unit(), RowNr := row.RowNr() );
+
+ traverse( row, FinancialSalesCell, cell ){
+ column := selectobject( this, FinancialSalesColumn, column, column.Name() = cell.FinancialSalesColumn().Name() );
+
+ sumcell := selectobject( column, FinancialSalesCell, c, c.FinancialSalesRow() = sumrow );
+ if( isnull( sumcell ) ){
+ sumcell := column.FinancialSalesCell( relnew, Value := '0' );
+ sumrow.FinancialSalesCell( relinsert, sumcell );
+ }
+
+ showcell := column.FinancialSalesCell( relnew, Value := cell.Value() );
+ showrow.FinancialSalesCell( relinsert, showcell );
+ value := [Real]cell.Value() + [Real]sumcell.Value();
+ sumcell.Value( [String]value );
+ }
+ }
+ }
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl b/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl
new file mode 100644
index 0000000..8aed8c8
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_GenerateColumn.qbl
@@ -0,0 +1,20 @@
+Quintiq file version 2.0
+#parent: #root
+Method GenerateColumn (
+ MacroPlan owner
+)
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-25-2024 (created)
+ startofplanning := owner.StartOfPlanning();
+ startofyear := startofplanning.StartOfYear();
+ startofnextyear := startofplanning.StartOfNextYear();
+
+ for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
+ periodtime := start.Date();
+ periodname := periodtime.Format( "M2/D2/Y" );
+ this.FinancialSalesColumn( relnew, Name := periodname, Period := periodtime );
+ }
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_IdentifyNullValues.qbl b/_Main/BL/Type_FinancialSalesReport/Method_IdentifyNullValues.qbl
new file mode 100644
index 0000000..efa6489
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_IdentifyNullValues.qbl
@@ -0,0 +1,53 @@
+Quintiq file version 2.0
+#parent: #root
+Method IdentifyNullValues
+{
+ TextBody:
+ [*
+ // 鍒犻櫎绌鸿鏁版嵁
+ productcolumn := selectobject( this, FinancialSalesColumn, column, column.Index() = 0 );
+ unitcolumn := selectobject( this, FinancialSalesColumn, column, column.Index() = 1 );
+ //鍒犻櫎娌℃湁瀵瑰簲鏃ユ湡鏁版嵁鐨勮
+ traverse ( this, FinancialSalesRow, row ) {
+ if ( forall( row, FinancialSalesCell, cell, true, ( cell.FinancialSalesColumn() <> productcolumn or cell.FinancialSalesColumn() <> unitcolumn ) and cell.Value().TrimBoth() = "" ) ) {
+ row.Delete();
+ }
+ }
+
+ // 鍒ゆ柇鏄惁瀛樺湪璐熸暟
+ traverse ( this, FinancialSalesRow.FinancialSalesCell, cell ) {
+ if ( cell.FinancialSalesColumn().Index() <= 1 ) {
+ if ( cell.Value().TrimBoth() = "" ) {
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyNullStrings() );
+ }
+ } else {
+ if ( cell.Value().TrimBoth() = "" ) {
+ cell.Value( '0' );
+ // error( Translations::AC_SalesForecastInputSource_Error6() );
+ } else {
+ stn := StringToReal::StandardConverter();
+ if ( not stn.CanConvert( cell.Value().TrimBoth() ) ) {
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyIllegalCharacter() );
+ } else {
+ if ( stn.Convert( cell.Value().TrimBoth() ) >= 0 ) {
+ cell.Value( [String]ceil( stn.Convert( cell.Value().TrimBoth() ) ) );
+ } else {
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyNegativeNumber() );
+ }
+ }
+ }
+ }
+
+ cell.FinancialSalesRow().DuplicateValueMarker( cell.FinancialSalesRow().DuplicateValueMarker() +
+ ifexpr( cell.FinancialSalesColumn().Index() = 0, "", "-" ) +
+ cell.Value()
+ );
+ }
+
+ // 鍒ゆ柇鏄惁瀛樺湪閲嶅鏁版嵁
+ row := selectduplicates( this, FinancialSalesRow, row, true, row.DuplicateValueMarker() );
+ if ( row.Size() > 1 ) {
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyDuplicateData() );
+ }
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_ImportVerification.qbl b/_Main/BL/Type_FinancialSalesReport/Method_ImportVerification.qbl
new file mode 100644
index 0000000..73d9cf9
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_ImportVerification.qbl
@@ -0,0 +1,57 @@
+Quintiq file version 2.0
+#parent: #root
+Method ImportVerification
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-27-2024 (created)
+ owner := this.FinancialSalesSource().MacroPlan();
+ startofthisyear := owner.StartOfPlanning().StartOfYear().Date();
+ startofnextyear := owner.StartOfPlanning().StartOfNextYear().Date();
+
+ if ( exists( this, FinancialSalesColumn, column, ( column.Index() = 0 and column.Name() <> "Product" ) or
+ ( column.Index() = 1 and column.Name() <> "Unit" ) ) ){
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyNullStrings() );
+ }
+
+ indexcolumn := select( this, FinancialSalesColumn, column, column.Index() = 2 );
+ if ( isnull( indexcolumn ) ) {
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyNullStrings() );
+ } else {
+ cnv2 := StringToDate::StandardConverter();
+ cnv2.SetCustomConversion();
+ cnv2.CustomFormatString( "dd/MM/yyyy" );
+
+ while ( not isnull( indexcolumn ) ) {
+ if ( not cnv2.CanConvert( indexcolumn.Name() ) ) {
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyIllegalTime() );
+ }
+ period := cnv2.Convert( indexcolumn.Name() );
+ // info( "寮�濮嬫椂闂达細", this.SalesForecastInputSource().PlanningStartDate().Format( "Y-M2-D2" ),
+ // "缁撴潫鏃堕棿锛�", this.SalesForecastInputSource().PlanningEndDate().Format( "Y-M2-D2" ),
+ // "鍒楁椂闂达細", cnv2.Convert( indexColumn.name() ).Format( "Y-M2-D2" ) );
+ // 鍒ゆ柇鏄惁鍦ㄨ鍒掑懆鏈熷唴
+ if ( period <= startofthisyear or period >= startofnextyear ) {
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyOverPeriod() );
+ }
+ indexcolumn := indexcolumn.NextColumn();
+ }
+ }
+
+ productcolumn := selectobject( this, FinancialSalesColumn, column, column.Index() = 0 );
+ unitcolumn := selectobject( this, FinancialSalesColumn, column, column.Index() = 1 );
+
+ units := selectuniquevalues( unitcolumn, FinancialSalesCell, cell, cell.Value() );
+ if( units.Size() <> 2 or ( units.Find( FinancialProductionReport::GetDefaultCCUnit() ) >= 0
+ and units.Find( FinancialProductionReport::GetDefaultDLUnit() ) >= 0 ) ){
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyFactoryNoExist() );
+ }
+
+ products := selectuniquevalues( productcolumn, FinancialSalesCell, cell, cell.Value() );
+ productnames := selectuniquevalues( owner, Product_MP, product, product.ID() );
+
+ if( not productnames.ContainsAll( products ) ){
+ error( Translations::MP_FinancialProductionReport_ImportIndetifyProductNoExist() );
+ }
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/Method_SyncRows.qbl b/_Main/BL/Type_FinancialSalesReport/Method_SyncRows.qbl
new file mode 100644
index 0000000..d58822b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/Method_SyncRows.qbl
@@ -0,0 +1,39 @@
+Quintiq file version 2.0
+#parent: #root
+Method SyncRows
+{
+ TextBody:
+ [*
+ totalRows := 0;
+ totalColumns := this.FinancialSalesColumn( relsize );
+
+ if ( totalColumns > 0 ) {
+ randomCol := select( this, FinancialSalesColumn, tempFPC, true );
+ totalRows := randomCol.FinancialSalesCell( relsize );
+
+ this.FinancialSalesRow( relflush );
+
+ cells := construct( FinancialSalesCells );
+ traverse ( this, FinancialSalesColumn, fpc ) {
+ cells.Add( fpc.FirstCellInColumn() );
+ }
+
+ for ( i := 0; i < totalRows; i++ ) {
+ assert( selectvalues( cells, Elements, c, true, c.FinancialSalesColumn().Index() ).ToString( "" ) =
+ selectvalues( selectsortedset( cells, Elements, c, true, c.FinancialSalesColumn().Index() ), Elements, c, true, c.FinancialSalesColumn().Index() ).ToString( "" ),
+ "Assertion error in FrockDataTable::syncRows: Cells not sorted by column index" );
+ row := this.FinancialSalesRow( relnew, RowNr := i );
+
+ newCells := construct( FinancialSalesCells );
+
+ traverse ( cells, Elements, c ) {
+ row.FinancialSalesCell( relinsert, c );
+
+ newCells.Add( c.NextCellInColumn() );
+ }
+
+ cells := &newCells;
+ }
+ }
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultAllUnit.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultAllUnit.qbl
new file mode 100644
index 0000000..e912c3f
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultAllUnit.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultAllUnit () const declarative as String
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-25-2024 (created)
+ return '<All>';
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultCCUnit.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultCCUnit.qbl
new file mode 100644
index 0000000..e469589
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultCCUnit.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultCCUnit () const as String
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-25-2024 (created)
+ return '闀挎槬';
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultDLUnit.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultDLUnit.qbl
new file mode 100644
index 0000000..71132d4
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultDLUnit.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultDLUnit () const as String
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-25-2024 (created)
+ return '澶ц繛';
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl
new file mode 100644
index 0000000..99eb092
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/StaticMethod_GetDefaultName.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod GetDefaultName () const as String
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-25-2024 (created)
+ return 'Financial productions';
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_Key.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_Key.qbl
new file mode 100644
index 0000000..4f408a0
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_Key.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+ XMLAddressType { }
+ XMLID Key { }
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_QuintiqType.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_QuintiqType.qbl
new file mode 100644
index 0000000..7468757
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLElementId_QuintiqType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+ XMLID QuintiqType { }
+ XMLQualifierType { }
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_cell.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_cell.qbl
new file mode 100644
index 0000000..b72febd
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_cell.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+ IdField: Key
+ ObjectTypeField: QuintiqType
+ TargetType: FinancialSalesCell
+ XMLID cell { }
+ Attributes:
+ [
+ XMLAttribute
+ {
+ Attribute: Value
+ XMLID value { }
+ }
+ ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_column.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_column.qbl
new file mode 100644
index 0000000..7ff067e
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_column.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+ IdField: Key
+ ObjectTypeField: QuintiqType
+ TargetType: FinancialSalesColumn
+ XMLID column { }
+ Aggregates:
+ [
+ XMLAggregate
+ {
+ ElementDefinition: cell
+ GenerateOutput: false
+ Relation: FinancialSalesCell
+ XMLID FinancialSalesCell { }
+ }
+ ]
+ Attributes:
+ [
+ XMLAttribute
+ {
+ Attribute: Name
+ XMLID name { }
+ }
+ ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_table.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_table.qbl
new file mode 100644
index 0000000..1a8667a
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/XMLObjectBase_table.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+ IdField: Key
+ ObjectTypeField: QuintiqType
+ TargetType: FinancialSalesReport
+ XMLID table { }
+ Aggregates:
+ [
+ XMLAggregate
+ {
+ ElementDefinition: column
+ GenerateOutput: false
+ Relation: FinancialSalesColumn
+ XMLID FinancialSalesColumn { }
+ }
+ ]
+ Attributes:
+ [
+ XMLAttribute
+ {
+ Attribute: Name
+ XMLID name { }
+ }
+ ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/_ROOT_XML_FinancialSalesReportXML.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/_ROOT_XML_FinancialSalesReportXML.qbl
new file mode 100644
index 0000000..2cd2b1c
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXML/_ROOT_XML_FinancialSalesReportXML.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#root
+#parent: #root
+XML FinancialSalesReportXML
+{
+ Direction: 'ImportExport'
+ Root: table
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_Key.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_Key.qbl
new file mode 100644
index 0000000..4f408a0
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_Key.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+ XMLAddressType { }
+ XMLID Key { }
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_QuintiqType.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_QuintiqType.qbl
new file mode 100644
index 0000000..7468757
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLElementId_QuintiqType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+XMLElementId
+{
+ XMLID QuintiqType { }
+ XMLQualifierType { }
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_column.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_column.qbl
new file mode 100644
index 0000000..341842b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_column.qbl
@@ -0,0 +1,17 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+ IdField: Key
+ ObjectTypeField: QuintiqType
+ TargetType: FinancialSalesColumn
+ XMLID column { }
+ Attributes:
+ [
+ XMLAttribute
+ {
+ Attribute: Name
+ XMLID name { }
+ }
+ ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_table.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_table.qbl
new file mode 100644
index 0000000..1a8667a
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/XMLObjectBase_table.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+XMLObjectBase.ObjectDefinitions
+{
+ IdField: Key
+ ObjectTypeField: QuintiqType
+ TargetType: FinancialSalesReport
+ XMLID table { }
+ Aggregates:
+ [
+ XMLAggregate
+ {
+ ElementDefinition: column
+ GenerateOutput: false
+ Relation: FinancialSalesColumn
+ XMLID FinancialSalesColumn { }
+ }
+ ]
+ Attributes:
+ [
+ XMLAttribute
+ {
+ Attribute: Name
+ XMLID name { }
+ }
+ ]
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/_ROOT_XML_FinancialSalesReportXMLHeaders.qbl b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/_ROOT_XML_FinancialSalesReportXMLHeaders.qbl
new file mode 100644
index 0000000..205104a
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/XML_FinancialSalesReportXMLHeaders/_ROOT_XML_FinancialSalesReportXMLHeaders.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#root
+#parent: #root
+XML FinancialSalesReportXMLHeaders
+{
+ Direction: 'ImportExport'
+ Root: table
+}
diff --git a/_Main/BL/Type_FinancialSalesReport/_ROOT_Type_FinancialSalesReport.qbl b/_Main/BL/Type_FinancialSalesReport/_ROOT_Type_FinancialSalesReport.qbl
new file mode 100644
index 0000000..645566f
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesReport/_ROOT_Type_FinancialSalesReport.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesReport
+{
+ #keys: '5[415136.0.857450533][415136.0.857450531][0.0.0][415136.0.857450532][415136.0.857450534]'
+ BaseType: Object
+ Description: '璐㈠姟閿�閲忔姤琛�'
+ StructuredName: 'FinancialSalesReports'
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Attribute_DuplicateValueMarker.qbl b/_Main/BL/Type_FinancialSalesRow/Attribute_DuplicateValueMarker.qbl
new file mode 100644
index 0000000..57e3d1f
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Attribute_DuplicateValueMarker.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DuplicateValueMarker
+{
+ #keys: '3[415136.0.857450578][415136.0.857450577][415136.0.857450579]'
+ Description: '鍒ゆ柇鏄惁瀛樺湪閲嶅鍊�'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Attribute_Name.qbl b/_Main/BL/Type_FinancialSalesRow/Attribute_Name.qbl
new file mode 100644
index 0000000..98dcd0d
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+ #keys: '3[415136.0.857450569][415136.0.857450568][415136.0.857450570]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Attribute_RowNr.qbl b/_Main/BL/Type_FinancialSalesRow/Attribute_RowNr.qbl
new file mode 100644
index 0000000..b0377b7
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Attribute_RowNr.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute RowNr
+{
+ #keys: '3[415136.0.857450572][415136.0.857450571][415136.0.857450573]'
+ ValueType: Number
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Attribute_Unit.qbl b/_Main/BL/Type_FinancialSalesRow/Attribute_Unit.qbl
new file mode 100644
index 0000000..c8effb6
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+ #keys: '3[415136.0.857450575][415136.0.857450574][415136.0.857450576]'
+ Description: '浜х嚎'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/DefaultValue_DuplicateValueMarker.qbl b/_Main/BL/Type_FinancialSalesRow/DefaultValue_DuplicateValueMarker.qbl
new file mode 100644
index 0000000..bbb8a45
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/DefaultValue_DuplicateValueMarker.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: DuplicateValueMarker
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialSalesRow/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/DefaultValue_Unit.qbl b/_Main/BL/Type_FinancialSalesRow/DefaultValue_Unit.qbl
new file mode 100644
index 0000000..7e60e2c
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/DefaultValue_Unit.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: Unit
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_Filter.qbl b/_Main/BL/Type_FinancialSalesRow/Method_Filter.qbl
new file mode 100644
index 0000000..8c62e9b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Method_Filter.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+Method Filter (
+ FinancialProductionSearch search,
+ Product_MPs products
+) declarative remote as Boolean
+{
+ Description: '杩囨护'
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-24-2024 (created)
+ allunit := '<All>';
+ productids := selectuniquevalues( products, Elements, product, ( search.Generation() = allunit or product.Generation() = search.Generation() )
+ and ( search.MqbMlb() = allunit or product.MQBMLB() = search.MqbMlb() )
+ and ( search.Power() = allunit or product.Power() = search.Power() ), product.ID() );
+
+ productid := construct( Strings );
+ productid.Add( this.Name() );
+
+ return productids.ContainsAll( productid ) and this.Unit() = search.Unit();
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl b/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
new file mode 100644
index 0000000..e262727
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Method_Initialize.qbl
@@ -0,0 +1,15 @@
+Quintiq file version 2.0
+#parent: #root
+Method Initialize (
+ FinancialSalesColumn column,
+ String unit
+)
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-24-2024 (created)
+ cell := column.FinancialSalesCell( relnew, Value := '' );
+
+ this.FinancialSalesCell( relinsert, cell );
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl b/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl
new file mode 100644
index 0000000..5581869
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/Method_Initialize0.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+Method Initialize0 (
+ FinancialSalesColumn column,
+ Real quantity
+)
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-24-2024 (created)
+ cell := selectobject( this, FinancialSalesCell, cell, cell.FinancialSalesColumn() = column );
+
+ value := [Real]cell.Value() + quantity;
+ cell.Value( [String]value );
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesRow/_ROOT_Type_FinancialSalesRow.qbl b/_Main/BL/Type_FinancialSalesRow/_ROOT_Type_FinancialSalesRow.qbl
new file mode 100644
index 0000000..99a2b84
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesRow/_ROOT_Type_FinancialSalesRow.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesRow
+{
+ #keys: '5[415136.0.857450566][415136.0.857450564][0.0.0][415136.0.857450565][415136.0.857450567]'
+ BaseType: Object
+ Description: '璐㈠姟閿�閲忚'
+ StructuredName: 'FinancialSalesRows'
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/Attribute_Generation.qbl b/_Main/BL/Type_FinancialSalesSearch/Attribute_Generation.qbl
new file mode 100644
index 0000000..2f19f9d
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/Attribute_Generation.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Generation
+{
+ #keys: '3[415136.0.857450503][415136.0.857450502][415136.0.857450504]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/Attribute_MqbMlb.qbl b/_Main/BL/Type_FinancialSalesSearch/Attribute_MqbMlb.qbl
new file mode 100644
index 0000000..239bdc6
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/Attribute_MqbMlb.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute MqbMlb
+{
+ #keys: '3[415136.0.857450506][415136.0.857450505][415136.0.857450507]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/Attribute_Power.qbl b/_Main/BL/Type_FinancialSalesSearch/Attribute_Power.qbl
new file mode 100644
index 0000000..97f1960
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/Attribute_Power.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Power
+{
+ #keys: '3[415136.0.857450509][415136.0.857450508][415136.0.857450510]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/Attribute_Unit.qbl b/_Main/BL/Type_FinancialSalesSearch/Attribute_Unit.qbl
new file mode 100644
index 0000000..8491b88
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/Attribute_Unit.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Unit
+{
+ #keys: '3[415136.0.857450512][415136.0.857450511][415136.0.857450513]'
+ Description: '浜х嚎'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Generation.qbl b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Generation.qbl
new file mode 100644
index 0000000..9e5b51e
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Generation.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: Generation
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/DefaultValue_MqbMlb.qbl b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_MqbMlb.qbl
new file mode 100644
index 0000000..78982c5
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_MqbMlb.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: MqbMlb
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Power.qbl b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Power.qbl
new file mode 100644
index 0000000..4922731
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Power.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: Power
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Unit.qbl b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Unit.qbl
new file mode 100644
index 0000000..7e60e2c
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/DefaultValue_Unit.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: Unit
+}
diff --git a/_Main/BL/Type_FinancialSalesSearch/_ROOT_Type_FinancialSalesSearch.qbl b/_Main/BL/Type_FinancialSalesSearch/_ROOT_Type_FinancialSalesSearch.qbl
new file mode 100644
index 0000000..a529cb1
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSearch/_ROOT_Type_FinancialSalesSearch.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesSearch
+{
+ #keys: '5[415136.0.857450500][415136.0.857450498][0.0.0][415136.0.857450499][415136.0.857450501]'
+ BaseType: Object
+ Description: '鏌ヨ绫�'
+ StructuredName: 'FinancialSalesSearchs'
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_FileBinaryValue.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_FileBinaryValue.qbl
new file mode 100644
index 0000000..9872597
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_FileBinaryValue.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute FileBinaryValue
+{
+ #keys: '3[415136.0.857450463][415136.0.857450462][415136.0.857450464]'
+ ValueType: BinaryValue
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_IsImport.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_IsImport.qbl
new file mode 100644
index 0000000..51e3fe5
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_IsImport.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsImport
+{
+ #keys: '3[415136.0.857450466][415136.0.857450465][415136.0.857450467]'
+ ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_IsXLSX.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_IsXLSX.qbl
new file mode 100644
index 0000000..60d01bb
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_IsXLSX.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsXLSX
+{
+ #keys: '3[415136.0.857450469][415136.0.857450468][415136.0.857450470]'
+ ValueType: Boolean
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_Name.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_Name.qbl
new file mode 100644
index 0000000..1e9a85d
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+ #keys: '3[415136.0.857450472][415136.0.857450471][415136.0.857450473]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_UploadDateTime.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_UploadDateTime.qbl
new file mode 100644
index 0000000..609affc
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_UploadDateTime.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UploadDateTime
+{
+ #keys: '3[415136.0.857450475][415136.0.857450474][415136.0.857450476]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Attribute_UploadUser.qbl b/_Main/BL/Type_FinancialSalesSource/Attribute_UploadUser.qbl
new file mode 100644
index 0000000..f7b6f0f
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Attribute_UploadUser.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UploadUser
+{
+ #keys: '3[415136.0.857450478][415136.0.857450477][415136.0.857450479]'
+ ValueType: String
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/DefaultValue_Name.qbl b/_Main/BL/Type_FinancialSalesSource/DefaultValue_Name.qbl
new file mode 100644
index 0000000..86c3d59
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/DefaultValue_Name.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: Name
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadDateTime.qbl b/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadDateTime.qbl
new file mode 100644
index 0000000..8dde94e
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadDateTime.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: UploadDateTime
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadUser.qbl b/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadUser.qbl
new file mode 100644
index 0000000..3dbb1dc
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/DefaultValue_UploadUser.qbl
@@ -0,0 +1,6 @@
+Quintiq file version 2.0
+#parent: #root
+DefaultValue
+{
+ TargetAttribute: UploadUser
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl b/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
new file mode 100644
index 0000000..1ddcfd6
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Method_AfterImport.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+Method AfterImport
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-24-2024 (created)
+ allunit := FinancialProductionReport::GetDefaultAllUnit();
+ table := selectobject( this.MacroPlan(), FinancialSalesSource.FinancialSalesReport, table, not table.IsImport() and not table.IsShow() );
+ //info( '--------------------------', table.Name() );
+ traverse( this, FinancialSalesReport, report ){
+ productcolumn := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Product' );
+ unitcolumn := selectobject( report, FinancialSalesColumn, column, column.Name() = 'Unit' );
+ // info( '----------------------1-----------------', productcolumn.Name(), unitcolumn.Name() );
+
+ traverse( report, FinancialSalesRow, row ){
+ product := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = productcolumn );
+ unit := selectobject( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() = unitcolumn );
+ // info( '----------------------2-----------------', product.Value(), unit.Value() );
+
+ unitrow := selectobject( table, FinancialSalesRow, unitrow, unitrow.Name() = product.Value() and unitrow.Unit() = unit.Value() );
+ allrow := selectobject( table, FinancialSalesRow, allrow, allrow.Name() = product.Value() and allrow.Unit() = allunit );
+ // info( '----------------------3-----------------', unitrow.Name(), unitrow.Unit() );
+ // and product.Value() = '120 kW Rotor' and unit.Value() = 'Assembly Plant (Spain)'
+ traverse( row, FinancialSalesCell, cell, cell.FinancialSalesColumn() <> productcolumn and cell.FinancialSalesColumn() <> unitcolumn ){
+ column := cell.FinancialSalesColumn();
+ unitcell := selectobject( unitrow, FinancialSalesCell, unitcell, unitcell.FinancialSalesColumn().Name() = column.Name() );
+ allcell := selectobject( allrow, FinancialSalesCell, allcell, allcell.FinancialSalesColumn().Name() = column.Name() );
+ // info( isnull( unitcell ), isnull( allcell ), cell.Value(), unitcell.Value(), allcell.Value() );
+ if( not isnull( unitcell ) ){
+ unitcell.Value( cell.Value() );
+ }
+ if( not isnull( allcell ) ){
+ value := [Real]cell.Value() + [Real]allcell.Value();
+ allcell.Value( [String]value );
+ }
+ }
+ }
+ }
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Method_IsExistFutureMonthData.qbl b/_Main/BL/Type_FinancialSalesSource/Method_IsExistFutureMonthData.qbl
new file mode 100644
index 0000000..3bd0498
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Method_IsExistFutureMonthData.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+Method IsExistFutureMonthData () as Boolean
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-26-2024 (created)
+ startofplanning := this.MacroPlan().StartOfPlanning().Date().Format( 'M2/D2/Y' );
+ columns := selectset( this, FinancialSalesReport.FinancialSalesColumn, column, column.Name() > startofplanning );
+ return exists( columns, Elements.FinancialSalesCell, cell, cell.Value() <> '' );
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/Method_ReadStructure.qbl b/_Main/BL/Type_FinancialSalesSource/Method_ReadStructure.qbl
new file mode 100644
index 0000000..95c9a0a
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/Method_ReadStructure.qbl
@@ -0,0 +1,36 @@
+Quintiq file version 2.0
+#parent: #root
+Method ReadStructure
+{
+ TextBody:
+ [*
+ tableGroupHandle := TableGroupHandle::Create( this.Name() );
+ tableGroupHandle := XLS::LoadTableGroupFromBinaryData( this.FileBinaryValue().AsBinaryData(), tableGroupHandle, true, this.IsXLSX() );
+ sheets := tableGroupHandle.TableNames();
+
+ traverse ( sheets, Elements, sheetName ) {
+ tableHandle := tableGroupHandle.Table( sheetName );
+ tableXML := TableHandle::ExportXML( tableHandle );
+
+ // info( tableXML.AsQUILL() );
+
+ FinancialSalesReport::XMLImportFinancialSalesReportXMLHeaders( tableXML );
+ xlstable := FinancialSalesReport::XMLImportFinancialSalesReportXML( tableXML );
+
+ xlstable.SyncRows();
+
+ xlstable.Name( sheetName );
+ xlstable.IsImport( true );
+ this.FinancialSalesReport( relinsert, &xlstable );
+
+ Transaction::Transaction().Propagate( attribute( FinancialSalesColumn, Index ) );
+
+ // 锛堝鍏ュ墠锛夌粰绌哄�艰祴浜堥粯璁ゅ�硷紙N/A锛�,骞朵笖鍒犻櫎绌鸿鏁版嵁鍜屾暟鎹牎楠�
+ xlstable.IdentifyNullValues();
+
+ xlstable.ImportVerification();
+ }
+ //瀵煎叆鍚庡鐞嗘暟鎹�
+ //this.AfterImport();
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
new file mode 100644
index 0000000..87f56b0
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Download.qbl
@@ -0,0 +1,78 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Download (
+ MacroPlan macroPlan
+) as BinaryValue
+{
+ Description: '涓嬭浇璐㈠姟鎶ヨ〃鏁版嵁'
+ TextBody:
+ [*
+
+ table := selectobject( macroPlan, FinancialProductionSource.FinancialProductionReport, table, not table.IsImport() and table.IsShow() );
+
+ xmlDOMI := XMLDOMImplementation::Create();
+ xmlDOM := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + table.Name() + '</name></table>' );
+
+ tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+ //Product
+ productcolumnelement := xmlDOM.CreateElement( "column" );
+ productnameelement := xmlDOM.CreateElement( "name" );
+ producttypeelement := xmlDOM.CreateElement( "type" );
+ productnameelement.TextContent( 'Product' );
+ producttypeelement.TextContent( "String" );
+ productcolumnelement.AppendChild( productnameelement );
+ productcolumnelement.AppendChild( producttypeelement );
+ //Unit
+ unitcolumnelement := xmlDOM.CreateElement( "column" );
+ unitnameelement := xmlDOM.CreateElement( "name" );
+ unittypeelement := xmlDOM.CreateElement( "type" );
+ unitnameelement.TextContent( 'Unit' );
+ unittypeelement.TextContent( "String" );
+ unitcolumnelement.AppendChild( unitnameelement );
+ unitcolumnelement.AppendChild( unittypeelement );
+
+ tableElement.AppendChild( productcolumnelement );
+ tableElement.AppendChild( unitcolumnelement );
+ traverse ( table, FinancialProductionColumn, column ) {
+ columnelement := xmlDOM.CreateElement( "column" );
+ nameelement := xmlDOM.CreateElement( "name" );
+ typeelement := xmlDOM.CreateElement( "type" );
+ nameelement.TextContent( column.Name() );
+ typeelement.TextContent( "String" );
+ columnelement.AppendChild( nameelement );
+ columnelement.AppendChild( typeelement );
+
+ cells := selectsortedset( column, FinancialProductionCell, cell, cell.FinancialProductionRow().RowNr() );
+
+ traverse ( cells, Elements, c ) {
+ if( column.Index() = 0 ){
+ row := c.FinancialProductionRow();
+ //Product
+ productcellElement := xmlDOM.CreateElement( "cell" );
+ productcellElement.SetAttribute( "value", row.Name() );
+ productcolumnelement.AppendChild( productcellElement );
+ //Unit
+ unitcellElement := xmlDOM.CreateElement( "cell" );
+ unitcellElement.SetAttribute( "value", row.Unit() );
+ unitcolumnelement.AppendChild( unitcellElement );
+ }
+ cellElement := xmlDOM.CreateElement( "cell" );
+ cellElement.SetAttribute( "value", c.Value() );
+ columnelement.AppendChild( cellElement );
+ }
+ tableElement.AppendChild( columnelement );
+ }
+
+ xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+
+ //info( xmlString );
+
+ tableGroupHandle := TableGroupHandle::Create( FinancialProductionReport::GetDefaultName() );
+ tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+ tableGroupHandle.Add( tableHandle );
+
+ binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+
+ return binaryData.AsBinaryValue();
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl
new file mode 100644
index 0000000..10e878b
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_DownloadTemplate.qbl
@@ -0,0 +1,40 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod DownloadTemplate (
+ MacroPlan macroPlan
+) as BinaryValue
+{
+ TextBody:
+ [*
+ xmlDOMI := XMLDOMImplementation::Create();
+ xmlDOM := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>Sheet1</name><column><name>Product</name><type>String</type></column><column><name>Unit</name><type>String</type></column></table>' );
+
+ tableElement := xmlDOM.GetElementByTagName( "table", 0 );
+
+ startofyear := macroPlan.StartOfPlanning().StartOfYear();
+ startofnextyear := macroPlan.StartOfPlanning().StartOfNextYear();
+
+ for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
+ columnElement := xmlDOM.CreateElement( "column" );
+ nameElement := xmlDOM.CreateElement( "name" );
+ typeElement := xmlDOM.CreateElement( "type" );
+ nameElement.TextContent( start.Format( "M2/D2/Y" ) );
+ typeElement.TextContent( "String" );
+ columnElement.AppendChild( nameElement );
+ columnElement.AppendChild( typeElement );
+ tableElement.AppendChild( columnElement );
+ }
+
+ xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
+
+ //info( xmlString );
+
+ tableGroupHandle := TableGroupHandle::Create( FinancialProductionReport::GetDefaultName() );
+ tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
+ tableGroupHandle.Add( tableHandle );
+
+ binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
+
+ return binaryData.AsBinaryValue();
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
new file mode 100644
index 0000000..7a5ef26
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Initialize.qbl
@@ -0,0 +1,85 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Initialize (
+ MacroPlan owner
+)
+{
+ TextBody:
+ [*
+ // 鐢勫叞楦� Jun-24-2024 (created)
+ owner.FinancialProductionSource( relflush );
+ ccunit := FinancialProductionReport::GetDefaultCCUnit();
+ dlunit := FinancialProductionReport::GetDefaultDLUnit();
+ allunit := FinancialProductionReport::GetDefaultAllUnit();
+ source := owner.FinancialProductionSource( relnew, IsImport := false, Name := FinancialProductionReport::GetDefaultName() );
+ table := source.FinancialProductionReport( relnew, ID := source.Name(), Name := source.Name(), IsImport := false );
+ showtable := source.FinancialProductionReport( relnew, ID := source.Name() + 'Show', Name := source.Name(), IsImport := false, IsShow := true );
+ startofplanning := owner.StartOfPlanning();
+ startofnextmonth := owner.StartOfPlanning().StartOfNextMonth();
+ startofyear := startofplanning.StartOfYear();
+ startofnextyear := startofplanning.StartOfNextYear();
+
+ search := source.FinancialProductionSearch( relnew, Unit := allunit, Generation := allunit, MqbMlb := allunit, Power := allunit );
+
+ products := construct( Product_MPs );
+
+ table.GenerateColumn( owner );
+
+ traverse( owner, Product_MP.ProductInStockingPoint_MP, pisp, pisp.Product_MP().IsLeaf() and ( pisp.StockingPoint_MP().UnitID() = ccunit or pisp.StockingPoint_MP().UnitID() = dlunit ) ){
+ unit := pisp.StockingPoint_MP().UnitID();
+ info( unit, pisp.ProductID() );
+ ccrow := null( FinancialProductionRow );
+ dlrow := null( FinancialProductionRow );
+ allrow := selectobject( table, FinancialProductionRow, row, row.Name() = pisp.ProductID() and row.Unit() = allunit );
+ if( unit = ccunit ){
+ ccrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := unit );
+ }else{
+ dlrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := unit );
+ }
+ if( isnull( allrow ) ){
+ products.Add( pisp.Product_MP() );
+ allrow := table.FinancialProductionRow( relnew, Name := pisp.ProductID(), Unit := allunit );
+ }
+
+ for( start := startofyear; start < startofnextyear; start := start.StartOfNextMonth() ){
+ periodtime := start.Date();
+ periodname := periodtime.Format( "M2/D2/Y" );
+ column := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime );
+
+ if( not isnull( ccrow ) ){
+ ccrow.Initialize( column, ccunit );
+ }
+ if( not isnull( dlrow ) ){
+ dlrow.Initialize( column, dlunit );
+ }
+ if( not exists( allrow, FinancialProductionCell, allcell, allcell.FinancialProductionColumn() = column ) ){
+ allrow.Initialize( column, allunit );
+ }
+ }
+
+ traverse( pisp, ProductInStockingPointInPeriod, pispip, pispip.Start() >= startofplanning
+ and ( ( pispip.Start() < startofnextmonth and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Day() )
+ or ( pispip.Start() < startofnextyear and pispip.Period_MP().TimeUnit() = Translations::MP_GlobalParameters_Month() ) ) ){
+ periodtime := pispip.Start().StartOfMonth().Date();
+ periodname := periodtime.Format( "M2/D2/Y" );
+
+ column := selectobject( table, FinancialProductionColumn, column, column.Name() = periodname and column.Period() = periodtime );
+
+ if( not isnull( ccrow ) ){
+ ccrow.Initialize( column, pispip.NewSupplyProductionQuantity() );
+ }
+ if( not isnull( dlrow ) ){
+ dlrow.Initialize( column, pispip.NewSupplyProductionQuantity() );
+ }
+ allrow.Initialize( column, pispip.NewSupplyProductionQuantity() );
+ }
+ }
+ rows := selectsortedset( table, FinancialProductionRow, row, row.Name() );
+ i := 0;
+ traverse( rows, Elements, e ){
+ e.RowNr( i );
+ i := i + 1;
+ }
+ showtable.Generate( search, products );
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl
new file mode 100644
index 0000000..2e3f777
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/StaticMethod_Upload.qbl
@@ -0,0 +1,22 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod Upload (
+ MacroPlan owner,
+ BinaryValue binaryValue,
+ String filePath
+) as FinancialProductionSource
+{
+ TextBody:
+ [*
+ fileName := filePath.Tokenize( "\" ).Element( filePath.Tokenize( "\" ).Size() - 1 );
+
+ source := owner.FinancialProductionSource( relnew, FileBinaryValue := binaryValue,
+ Name := fileName,
+ IsXLSX := fileName.EndsWith( "xlsx" ),
+ IsImport := true,
+ UploadDateTime := DateTime::ActualTime().Format( "Y-M2-D2 H:m:s" ),
+ UploadUser := guard( QuintiqUser::CurrentUser().Username(), "" ) );
+
+ return source;
+ *]
+}
diff --git a/_Main/BL/Type_FinancialSalesSource/_ROOT_Type_FinancialSalesSource.qbl b/_Main/BL/Type_FinancialSalesSource/_ROOT_Type_FinancialSalesSource.qbl
new file mode 100644
index 0000000..96ba160
--- /dev/null
+++ b/_Main/BL/Type_FinancialSalesSource/_ROOT_Type_FinancialSalesSource.qbl
@@ -0,0 +1,10 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type FinancialSalesSource
+{
+ #keys: '5[415136.0.857450460][415136.0.857450458][0.0.0][415136.0.857450459][415136.0.857450461]'
+ BaseType: Object
+ Description: '璐㈠姟閿�閲忔姤琛�'
+ StructuredName: 'FinancialSalesSources'
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
new file mode 100644
index 0000000..1819247
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_FormFinancialSalesReport/_ROOT_Component_FormFinancialSalesReport.def
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#root
+#parent: MacroPlannerWebApp
+OrphanComponent FormFinancialSalesReport
+{
+ #keys: '[415136.0.857870750]'
+ BaseType: 'WebForm'
+ Children:
+ [
+ Component DataHolderTable id:DataHolderTable_847
+ {
+ #keys: '[415136.0.857870828]'
+ BaseType: 'WebDataHolder'
+ Databinding: 'FinancialSalesReport'
+ Properties:
+ [
+ Taborder: 0
+ ]
+ }
+ Component dhSearch id:dhSearch_424
+ {
+ #keys: '[415136.0.857870874]'
+ BaseType: 'WebDataHolder'
+ Databinding: 'FinancialSalesSearch'
+ Properties:
+ [
+ Taborder: 1
+ ]
+ }
+ ]
+}
--
Gitblit v1.9.3