From 8c5557b992ac917c11f0f24d9716af1a16045777 Mon Sep 17 00:00:00 2001
From: hongjli <3117313295@qq.com>
Date: 星期一, 18 九月 2023 21:04:27 +0800
Subject: [PATCH] 全局代理

---
 _Main/BL/Type_GlobalDTOTable/Method_ApiBuildPostRequestBody.qbl                                                                      |   27 +
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_KeyProduct.qbl                                                                      |    7 
 _Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingConversionFactor_Global_MappingConvers.qbl                                  |   23 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_CurrencyID.qbl                                                                 |    7 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_ShelfLife.qbl                                                                       |    7 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_EndDate.qbl                                                                         |    7 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl                                                  |   24 +
 _Main/BL/Type_Global_MappingConversionFactor/Attribute_ProductID.qbl                                                                 |    8 
 _Main/BL/Type_Global_MappingConversionFactor/Attribute_SourceUnitOfMeasureName.qbl                                                   |    8 
 _Main/BL/Type_Global_MappingProduct_MP/_ROOT_Type_Global_MappingProduct_MP.qbl                                                       |    9 
 _Main/BL/Type_Global_MappingConversionFactor/Attribute_IsEnabled.qbl                                                                 |    8 
 _Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_id.qbl                                                                        |    7 
 _Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_UnitID.qbl                                                                    |    7 
 _Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_Name.qbl                                                                       |    8 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_ProductSubclassType.qbl                                                             |    7 
 _Main/BL/Type_Global_MappingUnitOfMeasure_MP/Attribute_IsDefault.qbl                                                                 |    7 
 _Main/BL/Type_Global_MappingConversionFactor/TypeIndex_TypeIndex.qbl                                                                 |   24 +
 _Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl                                                             |   41 +
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_ID.qbl                                                                              |    8 
 _Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_BusinessType.qbl                                                               |    8 
 _Main/BL/Type_Global_MappingStockingPoint_MP/_ROOT_Type_Global_MappingStockingPoint_MP.qbl                                           |    9 
 _Main/BL/Type_Global_MappingConversionFactor/Attribute_Factor.qbl                                                                    |    7 
 _Main/BL/Type_Global_MappingConversionFactor/_ROOT_Type_Global_MappingConversionFactor.qbl                                           |    9 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_Start.qbl                                                                      |    7 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_BusinessType.qbl                                                                    |    8 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_UnitOfMeasureName.qbl                                                               |    7 
 _Main/BL/EDI/Broker_GlobalOTDTable_Product_MP.qbl                                                                                    |  169 +++++++
 _Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingCurrency_MP_Global_MappingCurrency_MP_.qbl                                  |   23 
 _Main/BL/EDI/Broker_GlobalOTDTable_ConversionFactor.qbl                                                                              |   78 +++
 _Main/BL/EDI/Broker_GlobalOTDTable_UnitOfMeasure_MP.qbl                                                                              |   55 ++
 _Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingProduct_MP_Global_MappingProduct_MP_Gl.qbl                                  |   23 
 _Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl                                                            |   38 +
 _Main/BL/Type_Global_MappingCurrency_MP/Attribute_ID.qbl                                                                             |    7 
 _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_CopyScenario.def                                               |   29 +
 _Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationStockingPoint_MP.qbl                                                        |    8 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/_ROOT_Type_Global_MappingCurrencyRate_MP.qbl                                             |    9 
 _Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl                                                                       |  104 +---
 _Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingCurrencyRate_MP_Global_MappingCurrency.qbl                                  |   23 
 _Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_ParentName.qbl                                                                 |    7 
 _Main/BL/Type_Global_MappingCurrency_MP/_ROOT_Type_Global_MappingCurrency_MP.qbl                                                     |    9 
 _Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl                                                                 |   38 +
 _Main/BL/Type_Global_MappingSalesSegment_MP/_ROOT_Type_Global_MappingSalesSegment_MP.qbl                                             |    9 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationUnitOfMeasure_MP.qbl                                                        |   23 
 _Main/BL/Type_Global_MappingCurrency_MP/Attribute_IsBase.qbl                                                                         |    7 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_CommonBusiness.qbl                                                                  |    7 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_IsCommon.qbl                                                                        |    7 
 _Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_Name.qbl                                                                      |    7 
 _Main/BL/Type_Global_MappingConversionFactor/Attribute_TargetUnitOfMeasureName.qbl                                                   |    8 
 _Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Component_SplitterWndScenarioManager.def                                |  113 ++++
 _Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingUnitOfMeasure_MP_Global_MappingUnitOfM.qbl                                  |   23 
 _Main/BL/Type_Global_MappingUnitOfMeasure_MP/TypeIndex_TypeIndexName.qbl                                                             |   12 
 _Main/BL/EDI/Broker_GlobalOTDTable_SalesSegment_MP.qbl                                                                               |   92 +++
 _Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_TIANMA_JITUAN_SplitterWndScenarioManager_Button897_OnClick.def |   12 
 _Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingStockingPoint_MP_Global_MappingStockin.qbl                                  |   23 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_Name.qbl                                                                            |    7 
 _Main/BL/Type_Global_MappingProduct_MP/TypeIndex_TypeIndexIDAndBusinessType.qbl                                                      |   16 
 _Main/BL/Type_Global_MappingSalesSegment_MP/TypeIndex_TypeIndexBusinessTypeAndName.qbl                                               |   16 
 _Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_Rate.qbl                                                                       |    7 
 _Main/BL/Type_Global_MappingCurrency_MP/Attribute_Name.qbl                                                                           |    7 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_Notes.qbl                                                                           |    7 
 _Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingSalesSegment_MP_Global_MappingSalesSeg.qbl                                  |   23 
 _Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_DisplayIndex.qbl                                                               |    7 
 _Main/BL/Type_Global_MappingProduct_MP/Attribute_ProductMajorType.qbl                                                                |    7 
 _Main/BL/Type_Global_MappingUnitOfMeasure_MP/_ROOT_Type_Global_MappingUnitOfMeasure_MP.qbl                                           |    9 
 _Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationSalesSegment_MP.qbl                                                         |   31 +
 _Main/BL/Type_Global_MappingUnitOfMeasure_MP/Attribute_Name.qbl                                                                      |    8 
 66 files changed, 1,328 insertions(+), 79 deletions(-)

diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_ConversionFactor.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_ConversionFactor.qbl
new file mode 100644
index 0000000..a3d464b
--- /dev/null
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_ConversionFactor.qbl
@@ -0,0 +1,78 @@
+Quintiq file version 2.0
+#parent: #root
+EDIBroker GlobalOTDTable_ConversionFactor
+{
+  MDSDefinition: GlobalOTDTable
+  TimeZone: 'ACT'
+  UseOSTimeZone: false
+  EDIModelLink.Destination Destination4
+  {
+    EDIMLTable Global_MappingConversionFactor
+    {
+      PrimaryKeyColumns: IsEnabled
+      PrimaryKeyColumns: ProductID
+      PrimaryKeyColumns: SourceUnitOfMeasureName
+      PrimaryKeyColumns: TargetUnitOfMeasureName
+      TargetType: Global_MappingConversionFactor
+      TypeIndex: TypeIndex
+      EDIMLColumn Factor { Attribute: Factor ValueType: Real }
+      EDIMLColumn IsEnabled { Attribute: IsEnabled ValueType: Boolean }
+      EDIMLColumn ProductID { Attribute: ProductID ValueType: String }
+      EDIMLColumn SourceUnitOfMeasureName { Attribute: SourceUnitOfMeasureName ValueType: String }
+      EDIMLColumn TargetUnitOfMeasureName { Attribute: TargetUnitOfMeasureName ValueType: String }
+    }
+  }
+  EDIODBCLink.Source Source3
+  {
+    DataIntegrityStrategy: 'Disabled'
+    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
+    EDIODBCLinkTable MID_BASECONVERSIONFACTORS
+    {
+      OthersMayCreateTable: true
+      OthersMayDeleteRow: true
+      OthersMayDropTable: true
+      OthersMayFlushTable: true
+      OthersMayInsertRow: true
+      Parameters: '/owner="OTD"'
+      RecordModificationHintStrategy: 'None'
+      EDIODBCLinkColumn FACTOR
+      {
+        OthersMayUpdateColumn: true
+        ValueType: Real
+      }
+      EDIODBCLinkColumn ISENABLED
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn PRODUCTID
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn SOURCEUNITOFMEASURENAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn TARGETUNITOFMEASURENAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+    }
+  }
+  EDITransformation.Transformation Transformation3
+  {
+    EDITableTransformation
+    {
+      InputTable: MID_BASECONVERSIONFACTORS
+      OutputTable: Global_MappingConversionFactor
+      EDIColumnMatch { InputColumn: FACTOR OutputColumn: Factor }
+      EDIColumnMatch { InputColumn: ISENABLED OutputColumn: IsEnabled }
+      EDIColumnMatch { InputColumn: PRODUCTID OutputColumn: ProductID }
+      EDIColumnMatch { InputColumn: SOURCEUNITOFMEASURENAME OutputColumn: SourceUnitOfMeasureName }
+      EDIColumnMatch { InputColumn: TARGETUNITOFMEASURENAME OutputColumn: TargetUnitOfMeasureName }
+    }
+  }
+}
diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_Product_MP.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_Product_MP.qbl
new file mode 100644
index 0000000..5ff2900
--- /dev/null
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_Product_MP.qbl
@@ -0,0 +1,169 @@
+Quintiq file version 2.0
+#parent: #root
+EDIBroker GlobalOTDTable_Product_MP
+{
+  MDSDefinition: GlobalOTDTable
+  TimeZone: 'ACT'
+  UseOSTimeZone: false
+  EDIModelLink.Destination Destination3
+  {
+    EDIMLTable Global_MappingProduct_MP
+    {
+      PrimaryKeyColumns: BusinessType
+      PrimaryKeyColumns: ID
+      TargetType: Global_MappingProduct_MP
+      TypeIndex: TypeIndexIDAndBusinessType
+      EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
+      EDIMLColumn CommonBusiness { Attribute: CommonBusiness ValueType: String }
+      EDIMLColumn EndDate { Attribute: EndDate ValueType: Date }
+      EDIMLColumn ID { Attribute: ID ValueType: String }
+      EDIMLColumn IsCommon { Attribute: IsCommon ValueType: Boolean }
+      EDIMLColumn KeyProduct { Attribute: KeyProduct ValueType: Boolean }
+      EDIMLColumn Name { Attribute: Name ValueType: String }
+      EDIMLColumn Notes { Attribute: Notes ValueType: String }
+      EDIMLColumn ProductMajorType { Attribute: ProductMajorType ValueType: String }
+      EDIMLColumn ProductSubclassType { Attribute: ProductSubclassType ValueType: String }
+      EDIMLColumn ShelfLife { Attribute: ShelfLife ValueType: Real }
+      EDIMLColumn UnitOfMeasureName { Attribute: UnitOfMeasureName ValueType: String }
+    }
+  }
+  EDIODBCLink.Source Source2
+  {
+    DataIntegrityStrategy: 'Disabled'
+    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
+    EDIODBCLinkTable MID_PRODUCT
+    {
+      OthersMayCreateTable: true
+      OthersMayDeleteRow: true
+      OthersMayDropTable: true
+      OthersMayFlushTable: true
+      OthersMayInsertRow: true
+      Parameters: '/owner="OTD"'
+      PrimaryKeyColumns: BUSINESSTYPE
+      PrimaryKeyColumns: ID
+      RecordModificationHintStrategy: 'None'
+      EDIODBCLinkColumn BUSINESSTYPE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn COMMONBUSINESS
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn COST
+      {
+        OthersMayUpdateColumn: true
+        ValueType: Real
+      }
+      EDIODBCLinkColumn ENDDATE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: DateTime
+      }
+      EDIODBCLinkColumn ID
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn INTEGRATIONDEGREE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: Real
+      }
+      EDIODBCLinkColumn ISCOMMON
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn KEYPRODUCT
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MATERIALFLAG1
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn MATERIALFLAG2
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn NAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn NOTE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn NUMBEROFLAYOUTS
+      {
+        OthersMayUpdateColumn: true
+        ValueType: Real
+      }
+      EDIODBCLinkColumn PRODUCTMAJORTYPE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn PRODUCTSUBCLASSTYPE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn SHELFLIFE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: Real
+      }
+      EDIODBCLinkColumn UNITOFMEAURENAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+    }
+  }
+  EDITransformation.Transformation Transformation2
+  {
+    EDITableTransformation
+    {
+      InputTable: MID_PRODUCT
+      OutputTable: Global_MappingProduct_MP
+      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
+      EDIColumnMatch { InputColumn: COMMONBUSINESS OutputColumn: CommonBusiness }
+      EDIColumnMatch
+      {
+        InputColumn: ENDDATE
+        OutputColumn: EndDate
+        Converter
+        {
+          XMLDefinition:
+          [*
+            <?xml version="1.0" encoding="UTF-16"?>
+            <DateTimeToDate xmlns="http://www.quintiq.com/GEB/DateTimeToDate" Key="@1">
+              <IsStandard>true</IsStandard>
+              <IsISO>false</IsISO>
+              <IsCustom>false</IsCustom>
+              <ConversionType>0</ConversionType>
+            </DateTimeToDate>
+          *]
+        }
+      }
+      EDIColumnMatch { InputColumn: ID OutputColumn: ID }
+      EDIColumnMatch { InputColumn: ISCOMMON OutputColumn: IsCommon }
+      EDIColumnMatch { InputColumn: KEYPRODUCT OutputColumn: KeyProduct }
+      EDIColumnMatch { InputColumn: NAME OutputColumn: Name }
+      EDIColumnMatch { InputColumn: NOTE OutputColumn: Notes }
+      EDIColumnMatch { InputColumn: PRODUCTMAJORTYPE OutputColumn: ProductMajorType }
+      EDIColumnMatch { InputColumn: PRODUCTSUBCLASSTYPE OutputColumn: ProductSubclassType }
+      EDIColumnMatch { InputColumn: SHELFLIFE OutputColumn: ShelfLife }
+      EDIColumnMatch { InputColumn: UNITOFMEAURENAME OutputColumn: UnitOfMeasureName }
+    }
+  }
+}
diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_SalesSegment_MP.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_SalesSegment_MP.qbl
new file mode 100644
index 0000000..26442e4
--- /dev/null
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_SalesSegment_MP.qbl
@@ -0,0 +1,92 @@
+Quintiq file version 2.0
+#parent: #root
+EDIBroker GlobalOTDTable_SalesSegment_MP
+{
+  MDSDefinition: GlobalOTDTable
+  TimeZone: 'ACT'
+  UseOSTimeZone: false
+  EDIModelLink.Destination Destination2
+  {
+    EDIMLTable Global_MappingSalesSegment_MP
+    {
+      PrimaryKeyColumns: BusinessType
+      PrimaryKeyColumns: Name
+      TargetType: Global_MappingSalesSegment_MP
+      TypeIndex: TypeIndexBusinessTypeAndName
+      EDIMLColumn BusinessType { Attribute: BusinessType ValueType: String }
+      EDIMLColumn DisplayIndex { Attribute: DisplayIndex ValueType: Number }
+      EDIMLColumn Name { Attribute: Name ValueType: String }
+      EDIMLColumn ParentName { Attribute: ParentName ValueType: String }
+    }
+  }
+  EDIODBCLink.Source Source1
+  {
+    DataIntegrityStrategy: 'Disabled'
+    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
+    EDIODBCLinkTable MID_SALESSEGMENT
+    {
+      OthersMayCreateTable: true
+      OthersMayDeleteRow: true
+      OthersMayDropTable: true
+      OthersMayFlushTable: true
+      OthersMayInsertRow: true
+      Parameters: '/owner="OTD"'
+      PrimaryKeyColumns: BUSINESSTYPE
+      PrimaryKeyColumns: NAME
+      RecordModificationHintStrategy: 'None'
+      EDIODBCLinkColumn BUSINESSTYPE
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn DISPLAYINDEX
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn NAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn PARENTNAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+    }
+  }
+  EDITransformation.Transformation Transformation1
+  {
+    EDITableTransformation
+    {
+      InputTable: MID_SALESSEGMENT
+      OutputTable: Global_MappingSalesSegment_MP
+      EDIColumnMatch { InputColumn: BUSINESSTYPE OutputColumn: BusinessType }
+      EDIColumnMatch
+      {
+        InputColumn: DISPLAYINDEX
+        OutputColumn: DisplayIndex
+        Converter
+        {
+          XMLDefinition:
+          [*
+            <?xml version="1.0" encoding="UTF-16"?>
+            <StringToNumber xmlns="http://www.quintiq.com/GEB/StringToNumber" Key="@1">
+              <IsStandard>true</IsStandard>
+              <IsISO>false</IsISO>
+              <IsCustom>false</IsCustom>
+              <ConversionType>0</ConversionType>
+              <NumericFormatString>Standard</NumericFormatString>
+              <LocaleString>Chinese (China)</LocaleString>
+              <CurrencyString></CurrencyString>
+              <CustomFormatString></CustomFormatString>
+            </StringToNumber>
+          *]
+        }
+      }
+      EDIColumnMatch { InputColumn: NAME OutputColumn: Name }
+      EDIColumnMatch { InputColumn: PARENTNAME OutputColumn: ParentName }
+    }
+  }
+}
diff --git a/_Main/BL/EDI/Broker_GlobalOTDTable_UnitOfMeasure_MP.qbl b/_Main/BL/EDI/Broker_GlobalOTDTable_UnitOfMeasure_MP.qbl
new file mode 100644
index 0000000..2311cb5
--- /dev/null
+++ b/_Main/BL/EDI/Broker_GlobalOTDTable_UnitOfMeasure_MP.qbl
@@ -0,0 +1,55 @@
+Quintiq file version 2.0
+#parent: #root
+EDIBroker GlobalOTDTable_UnitOfMeasure_MP
+{
+  MDSDefinition: GlobalOTDTable
+  TimeZone: 'ACT'
+  UseOSTimeZone: false
+  EDIModelLink.Destination Destination1
+  {
+    EDIMLTable Global_MappingUnitOfMeasure_MP
+    {
+      PrimaryKeyColumns: Name
+      TargetType: Global_MappingUnitOfMeasure_MP
+      TypeIndex: TypeIndexName
+      EDIMLColumn IsDefault { Attribute: IsDefault ValueType: Boolean }
+      EDIMLColumn Name { Attribute: Name ValueType: String }
+    }
+  }
+  EDIODBCLink.Source Source
+  {
+    DataIntegrityStrategy: 'Disabled'
+    SettingsEngineLink: 'domainmodel.ediremotedatasourcedefinition.remotestorage.oracle'
+    EDIODBCLinkTable MID_UNITOFMEASURES
+    {
+      OthersMayCreateTable: true
+      OthersMayDeleteRow: true
+      OthersMayDropTable: true
+      OthersMayFlushTable: true
+      OthersMayInsertRow: true
+      Parameters: '/owner="OTD"'
+      PrimaryKeyColumns: NAME
+      RecordModificationHintStrategy: 'None'
+      EDIODBCLinkColumn ISDEFAULT
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+      EDIODBCLinkColumn NAME
+      {
+        OthersMayUpdateColumn: true
+        ValueType: String
+      }
+    }
+  }
+  EDITransformation.Transformation Transformation0
+  {
+    EDITableTransformation
+    {
+      InputTable: MID_UNITOFMEASURES
+      OutputTable: Global_MappingUnitOfMeasure_MP
+      EDIColumnMatch { InputColumn: ISDEFAULT OutputColumn: IsDefault }
+      EDIColumnMatch { InputColumn: NAME OutputColumn: Name }
+    }
+  }
+}
diff --git a/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingConversionFactor_Global_MappingConvers.qbl b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingConversionFactor_Global_MappingConvers.qbl
new file mode 100644
index 0000000..9f0aefd
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingConversionFactor_Global_MappingConvers.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalOTDTable_Global_MappingConversionFactor_Global_MappingConversionFactor_GlobalOTDTable
+{
+  #keys: '1[414702.0.247716835]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingConversionFactor
+  {
+    #keys: '3[414702.0.247716837][414702.0.247716836][414702.0.247716838]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.247716840][414702.0.247716839][414702.0.247716841]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingConversionFactor
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingCurrencyRate_MP_Global_MappingCurrency.qbl b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingCurrencyRate_MP_Global_MappingCurrency.qbl
new file mode 100644
index 0000000..e3219cd
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingCurrencyRate_MP_Global_MappingCurrency.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalOTDTable_Global_MappingCurrencyRate_MP_Global_MappingCurrencyRate_MP_GlobalOTDTable
+{
+  #keys: '1[414702.0.247665116]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingCurrencyRate_MP
+  {
+    #keys: '3[414702.0.247665118][414702.0.247665117][414702.0.247665119]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.247665121][414702.0.247665120][414702.0.247665122]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingCurrencyRate_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingCurrency_MP_Global_MappingCurrency_MP_.qbl b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingCurrency_MP_Global_MappingCurrency_MP_.qbl
new file mode 100644
index 0000000..fdfa37e
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingCurrency_MP_Global_MappingCurrency_MP_.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalOTDTable_Global_MappingCurrency_MP_Global_MappingCurrency_MP_GlobalOTDTable
+{
+  #keys: '1[414702.0.247705877]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingCurrency_MP
+  {
+    #keys: '3[414702.0.247705879][414702.0.247705878][414702.0.247705880]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.247705882][414702.0.247705881][414702.0.247705883]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingCurrency_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingProduct_MP_Global_MappingProduct_MP_Gl.qbl b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingProduct_MP_Global_MappingProduct_MP_Gl.qbl
new file mode 100644
index 0000000..3b3a458
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingProduct_MP_Global_MappingProduct_MP_Gl.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalOTDTable_Global_MappingProduct_MP_Global_MappingProduct_MP_GlobalOTDTable
+{
+  #keys: '1[414702.0.247665570]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingProduct_MP
+  {
+    #keys: '3[414702.0.247665572][414702.0.247665571][414702.0.247665573]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.247665575][414702.0.247665574][414702.0.247665576]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingProduct_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingSalesSegment_MP_Global_MappingSalesSeg.qbl b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingSalesSegment_MP_Global_MappingSalesSeg.qbl
new file mode 100644
index 0000000..47895e9
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingSalesSegment_MP_Global_MappingSalesSeg.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalOTDTable_Global_MappingSalesSegment_MP_Global_MappingSalesSegment_MP_GlobalOTDTable
+{
+  #keys: '1[414702.0.238159190]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingSalesSegment_MP
+  {
+    #keys: '3[414702.0.238159192][414702.0.238159191][414702.0.238159193]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.238159195][414702.0.238159194][414702.0.238159196]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingSalesSegment_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingStockingPoint_MP_Global_MappingStockin.qbl b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingStockingPoint_MP_Global_MappingStockin.qbl
new file mode 100644
index 0000000..3861954
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingStockingPoint_MP_Global_MappingStockin.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalOTDTable_Global_MappingStockingPoint_MP_Global_MappingStockingPoint_MP_GlobalOTDTable
+{
+  #keys: '1[414702.0.239762044]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingStockingPoint_MP
+  {
+    #keys: '3[414702.0.239762046][414702.0.239762045][414702.0.239762047]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.239762049][414702.0.239762048][414702.0.239762050]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingStockingPoint_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingUnitOfMeasure_MP_Global_MappingUnitOfM.qbl b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingUnitOfMeasure_MP_Global_MappingUnitOfM.qbl
new file mode 100644
index 0000000..a312b2f
--- /dev/null
+++ b/_Main/BL/Relations/Relation_GlobalOTDTable_Global_MappingUnitOfMeasure_MP_Global_MappingUnitOfM.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+Relation GlobalOTDTable_Global_MappingUnitOfMeasure_MP_Global_MappingUnitOfMeasure_MP_GlobalOTDTable
+{
+  #keys: '1[414702.0.238140119]'
+  DefaultRelationStrategy
+  {
+  }
+  RelationSide.LeftSide Global_MappingUnitOfMeasure_MP
+  {
+    #keys: '3[414702.0.238140121][414702.0.238140120][414702.0.238140122]'
+    Cardinality: '1toN'
+    ObjectDefinition: GlobalOTDTable
+    OwningSide: 'Owned'
+  }
+  RelationSide.RightSide GlobalOTDTable
+  {
+    #keys: '3[414702.0.238140124][414702.0.238140123][414702.0.238140125]'
+    Cardinality: '0to1'
+    ObjectDefinition: Global_MappingUnitOfMeasure_MP
+    OwningSide: 'Reference'
+  }
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/Method_ApiBuildPostRequestBody.qbl b/_Main/BL/Type_GlobalDTOTable/Method_ApiBuildPostRequestBody.qbl
new file mode 100644
index 0000000..d7970e3
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/Method_ApiBuildPostRequestBody.qbl
@@ -0,0 +1,27 @@
+Quintiq file version 2.0
+#parent: #root
+Method ApiBuildPostRequestBody (
+  String bodynumber
+) as String
+{
+  TextBody:
+  [*
+    // Administrator Aug-18-2023 (created)
+    
+    postrequestbody := JSON::Object()
+                        .Add( "serviceInterfaceCode", "ESBOTDH000" + bodynumber )
+                        .Add( "fromSystemCode", "OTDH000" + bodynumber )
+                        .Add( "toInterfaceCode", "QIDH000" + bodynumber )
+                        .Add( "ouZone", "OU_TMSH" )
+                        .Add( "uuid", "1617355496bb588e353e80147eea5f45" )
+                        .Add( "requestTime", DateTime::Now().Format( "Y-M2-D2 H:m:s" ) )
+                        .Add( "dataType", "JSON" )
+                        .Add( "data", JSON::Object()
+                                      .Add( "pageIndex", "1" ) ).Build();
+    
+    info( DateTime::Now().Format( "Y-M2-D2 H:m:s" ) );
+    postrequestbodystring := postrequestbody.AsString();
+    
+    return postrequestbodystring;
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl
new file mode 100644
index 0000000..65c9dda
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationAllMappingBrokerAndAPI.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizationAllMappingBrokerAndAPI (
+  MacroPlan macroPlan,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    //globalOTDTable.GlobalOTDTable_UnitOfMeasure_MP().Execute();
+    
+    //globalOTDTable.GlobalOTDTable_SalesSegment_MP().Execute();
+    
+    //Global_MappingStockingPoint_MP::CreateByAPI( globalOTDTable );
+    
+    //Global_MappingCurrency_MP::CreateByAPI( globalOTDTable );
+    
+    //Global_MappingCurrencyRate_MP::CreateByAPI( globalOTDTable );
+    
+    //globalOTDTable.GlobalOTDTable_Product_MP().Execute();
+    
+    //globalOTDTable.GlobalOTDTable_ConversionFactor().Execute();
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationSalesSegment_MP.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationSalesSegment_MP.qbl
new file mode 100644
index 0000000..01a32c3
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationSalesSegment_MP.qbl
@@ -0,0 +1,31 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizationSalesSegment_MP (
+  MacroPlan macroPlan,
+  GlobalOTDTable globalOTDTable,
+  Strings businessTypes
+)
+{
+  TextBody:
+  [*
+    businessType := businessTypes.Element( 0 );
+    
+    targetGlobal_MappingSalesSegment_MPs := selectsortedset( globalOTDTable, 
+                                                             Global_MappingSalesSegment_MP,
+                                                             tempGMSSMP,
+                                                             tempGMSSMP.BusinessType() = businessType,
+                                                             tempGMSSMP.DisplayIndex()
+                                                            );
+    
+    maxLevel := 0;
+    traverse ( targetGlobal_MappingSalesSegment_MPs, Elements, gmssmp ) {
+      targetParentSalesSegment_MP := select( macroPlan, SalesSegment_MP, tempSSMP, tempSSMP.Name() = gmssmp.ParentName() );
+      SalesSegment_MP::Create( macroPlan, targetParentSalesSegment_MP, gmssmp.Name(), gmssmp.DisplayIndex(), false );
+      maxLevel := maxvalue( maxLevel, gmssmp.DisplayIndex() );
+    }
+    
+    for ( i := 1; i <= maxLevel; i++ ) {
+      SalesLevel_MP::Create( [String]i, macroPlan, false ); 
+    }
+  *]
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationStockingPoint_MP.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationStockingPoint_MP.qbl
new file mode 100644
index 0000000..d933711
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationStockingPoint_MP.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizationStockingPoint_MP (
+  MacroPlan macroPlan,
+  GlobalOTDTable globalOTDTable
+)
+{
+}
diff --git a/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationUnitOfMeasure_MP.qbl b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationUnitOfMeasure_MP.qbl
new file mode 100644
index 0000000..d4805bf
--- /dev/null
+++ b/_Main/BL/Type_GlobalDTOTable/StaticMethod_SynchronizationUnitOfMeasure_MP.qbl
@@ -0,0 +1,23 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod SynchronizationUnitOfMeasure_MP (
+  MacroPlan macroPlan,
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    info( "鍒濆鍖栧畬鎴�, 寮�濮嬫墽琛� UnitOfMeasure_MP Data Broker" );
+    //globalOTDTable.GlobalOTDTable_UnitOfMeasure_MP().Execute();
+    
+    info( "UnitOfMeasure_MP Data Broker 鎵ц瀹屾垚, Start UnitOfMeasure_MP Mapping" )
+    traverse ( globalOTDTable, Global_MappingUnitOfMeasure_MP, tempGMUOMMP, true ) {
+      if ( isnull( UnitOfMeasure_MP::FindByName( macroPlan, tempGMUOMMP.Name() ) ) ) {
+        targetUnitOfMeasure_MP := UnitOfMeasure_MP::Create( macroPlan, tempGMUOMMP.Name(), false, false );
+        if ( tempGMUOMMP.IsDefault() ) {
+          targetUnitOfMeasure_MP.SetAsDefault();
+        }
+      }
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/Attribute_Factor.qbl b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_Factor.qbl
new file mode 100644
index 0000000..cad933e
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_Factor.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Factor
+{
+  #keys: '3[414702.0.247716851][414702.0.247716850][414702.0.247716852]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/Attribute_IsEnabled.qbl b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_IsEnabled.qbl
new file mode 100644
index 0000000..74bd9eb
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_IsEnabled.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsEnabled
+{
+  #keys: '3[414702.0.247716861][414702.0.247716860][414702.0.247716862]'
+  IsReadOnly: true
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/Attribute_ProductID.qbl b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_ProductID.qbl
new file mode 100644
index 0000000..ffb1677
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_ProductID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductID
+{
+  #keys: '3[414702.0.247716871][414702.0.247716870][414702.0.247716872]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/Attribute_SourceUnitOfMeasureName.qbl b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_SourceUnitOfMeasureName.qbl
new file mode 100644
index 0000000..547cf24
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_SourceUnitOfMeasureName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute SourceUnitOfMeasureName
+{
+  #keys: '3[414702.0.247716881][414702.0.247716880][414702.0.247716882]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/Attribute_TargetUnitOfMeasureName.qbl b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_TargetUnitOfMeasureName.qbl
new file mode 100644
index 0000000..9ef2e49
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingConversionFactor/Attribute_TargetUnitOfMeasureName.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute TargetUnitOfMeasureName
+{
+  #keys: '3[414702.0.247716891][414702.0.247716890][414702.0.247716892]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/TypeIndex_TypeIndex.qbl b/_Main/BL/Type_Global_MappingConversionFactor/TypeIndex_TypeIndex.qbl
new file mode 100644
index 0000000..370a05f
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingConversionFactor/TypeIndex_TypeIndex.qbl
@@ -0,0 +1,24 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex TypeIndex
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: IsEnabled
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: ProductID
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: SourceUnitOfMeasureName
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: TargetUnitOfMeasureName
+    }
+  ]
+}
diff --git a/_Main/BL/Type_Global_MappingConversionFactor/_ROOT_Type_Global_MappingConversionFactor.qbl b/_Main/BL/Type_Global_MappingConversionFactor/_ROOT_Type_Global_MappingConversionFactor.qbl
new file mode 100644
index 0000000..3d26d6d
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingConversionFactor/_ROOT_Type_Global_MappingConversionFactor.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingConversionFactor
+{
+  #keys: '5[414702.0.247716832][414702.0.247716830][0.0.0][414702.0.247716831][414702.0.247716833]'
+  BaseType: Object
+  StructuredName: 'Global_MappingConversionFactors'
+}
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_CurrencyID.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_CurrencyID.qbl
new file mode 100644
index 0000000..70588bf
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_CurrencyID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CurrencyID
+{
+  #keys: '3[414702.0.247706552][414702.0.247706551][414702.0.247706553]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_Rate.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_Rate.qbl
new file mode 100644
index 0000000..a601632
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_Rate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Rate
+{
+  #keys: '3[414702.0.247706562][414702.0.247706561][414702.0.247706563]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_Start.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_Start.qbl
new file mode 100644
index 0000000..0300fcf
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/Attribute_Start.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Start
+{
+  #keys: '3[414702.0.247706575][414702.0.247706574][414702.0.247706576]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
new file mode 100644
index 0000000..b927816
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/StaticMethod_CreateByAPI.qbl
@@ -0,0 +1,41 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateByAPI (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingCurrencyRate_MP( relflush );
+    
+    bodynumber := "5";
+    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
+    address := "api-uat-sgc.tianma.cn";
+    url := "/otdService/https/GetCurrencyRatesInfo";
+    port := 443;
+    i := HTTPInterface::Create( address, port);
+    i.URL( url );
+    i.SSL( true );
+    i.SSLKeystore( "MyKeystore" );
+    i.PostMethod( true ); //it's a POST method
+    
+    i.Call( postrequestbody ); // Call's argument is for POST method's content.
+    htmlresult := i.Result();
+    
+    htmlresponse := JSON::Parse( htmlresult );
+    reponseDataJson := htmlresponse.Get( "responseData" );
+    datalist := reponseDataJson.Get( "dataList" );
+    
+    cnv2 := StringToDate::StandardConverter();
+    cnv2.SetCustomConversion();
+    cnv2.CustomFormatString( 'yyyy-MM-dd' );
+    total := datalist.Size();
+    for ( j := 0; j < total; j++ ) {
+      globalOTDTable.Global_MappingCurrencyRate_MP( relnew,
+                                                    CurrencyID := guard( datalist.Get( j ).Get( "currencyid" ).GetString(), "" ),
+                                                    Rate       := guard( [Real]datalist.Get( j ).Get( "rate" ).GetString(), 0.0 ),
+                                                    Start      := guard( cnv2.Convert( datalist.Get( j ).Get( "start" ).GetString() ), Date::MinDate() )
+                                                   );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCurrencyRate_MP/_ROOT_Type_Global_MappingCurrencyRate_MP.qbl b/_Main/BL/Type_Global_MappingCurrencyRate_MP/_ROOT_Type_Global_MappingCurrencyRate_MP.qbl
new file mode 100644
index 0000000..95c9609
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrencyRate_MP/_ROOT_Type_Global_MappingCurrencyRate_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingCurrencyRate_MP
+{
+  #keys: '5[414702.0.247665113][414702.0.247665111][0.0.0][414702.0.247665112][414702.0.247665114]'
+  BaseType: Object
+  StructuredName: 'Global_MappingCurrencyRate_MPs'
+}
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/Attribute_ID.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/Attribute_ID.qbl
new file mode 100644
index 0000000..1ffa886
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/Attribute_ID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.247705924][414702.0.247705923][414702.0.247705925]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/Attribute_IsBase.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/Attribute_IsBase.qbl
new file mode 100644
index 0000000..ec6c69b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/Attribute_IsBase.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsBase
+{
+  #keys: '3[414702.0.247664837][414702.0.247664836][414702.0.247664838]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/Attribute_Name.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/Attribute_Name.qbl
new file mode 100644
index 0000000..59d3a9c
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[414702.0.247664827][414702.0.247664826][414702.0.247664828]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
new file mode 100644
index 0000000..a2f745b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/StaticMethod_CreateByAPI.qbl
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateByAPI (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingCurrency_MP( relflush );
+    
+    bodynumber := "1";
+    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
+    address := "api-uat-sgc.tianma.cn";
+    url := "/otdService/https/GetCurrenciesInfo";
+    port := 443;
+    i := HTTPInterface::Create( address, port);
+    i.URL( url );
+    i.SSL( true );
+    i.SSLKeystore( "MyKeystore" );
+    i.PostMethod( true ); //it's a POST method
+    
+    i.Call( postrequestbody ); // Call's argument is for POST method's content.
+    htmlresult := i.Result();
+    
+    htmlresponse := JSON::Parse( htmlresult );
+    reponseDataJson := htmlresponse.Get( "responseData" );
+    datalist := reponseDataJson.Get( "dataList" );
+    
+    total := datalist.Size();
+    for ( j := 0; j < total; j++ ) {
+      globalOTDTable.Global_MappingCurrency_MP( relnew,
+                                                ID     := guard( datalist.Get( j ).Get( "id" ).GetString(), "" ),
+                                                Name   := guard( datalist.Get( j ).Get( "name" ).GetString(), "" ),
+                                                IsBase := guard( datalist.Get( j ).Get( "isbase" ).GetBoolean(), false )
+                                               );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingCurrency_MP/_ROOT_Type_Global_MappingCurrency_MP.qbl b/_Main/BL/Type_Global_MappingCurrency_MP/_ROOT_Type_Global_MappingCurrency_MP.qbl
new file mode 100644
index 0000000..d93f74c
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingCurrency_MP/_ROOT_Type_Global_MappingCurrency_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingCurrency_MP
+{
+  #keys: '5[414702.0.247705874][414702.0.247705872][0.0.0][414702.0.247705873][414702.0.247705875]'
+  BaseType: Object
+  StructuredName: 'Global_MappingCurrency_MPs'
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_BusinessType.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..0d9f5ca
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414702.0.247710960][414702.0.247710959][414702.0.247710961]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_CommonBusiness.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_CommonBusiness.qbl
new file mode 100644
index 0000000..f2d8b21
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_CommonBusiness.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute CommonBusiness
+{
+  #keys: '3[414702.0.247710970][414702.0.247710969][414702.0.247710971]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_EndDate.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_EndDate.qbl
new file mode 100644
index 0000000..efb4082
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_EndDate.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute EndDate
+{
+  #keys: '3[414702.0.247710980][414702.0.247710979][414702.0.247710981]'
+  ValueType: Date
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ID.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ID.qbl
new file mode 100644
index 0000000..927e312
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ID.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.247710990][414702.0.247710989][414702.0.247710991]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_IsCommon.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_IsCommon.qbl
new file mode 100644
index 0000000..32fd75c
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_IsCommon.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsCommon
+{
+  #keys: '3[414702.0.247711000][414702.0.247710999][414702.0.247711001]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_KeyProduct.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_KeyProduct.qbl
new file mode 100644
index 0000000..431f730
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_KeyProduct.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute KeyProduct
+{
+  #keys: '3[414702.0.247711010][414702.0.247711009][414702.0.247711011]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_Name.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_Name.qbl
new file mode 100644
index 0000000..befa0dc
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[414702.0.247711020][414702.0.247711019][414702.0.247711021]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_Notes.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_Notes.qbl
new file mode 100644
index 0000000..81b9008
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_Notes.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Notes
+{
+  #keys: '3[414702.0.247711030][414702.0.247711029][414702.0.247711031]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ProductMajorType.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ProductMajorType.qbl
new file mode 100644
index 0000000..0fd5b40
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ProductMajorType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductMajorType
+{
+  #keys: '3[414702.0.247711040][414702.0.247711039][414702.0.247711041]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ProductSubclassType.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ProductSubclassType.qbl
new file mode 100644
index 0000000..935fa0b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ProductSubclassType.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ProductSubclassType
+{
+  #keys: '3[414702.0.247711050][414702.0.247711049][414702.0.247711051]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ShelfLife.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ShelfLife.qbl
new file mode 100644
index 0000000..2dbff7f
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_ShelfLife.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ShelfLife
+{
+  #keys: '3[414702.0.247711060][414702.0.247711059][414702.0.247711061]'
+  ValueType: Real
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/Attribute_UnitOfMeasureName.qbl b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_UnitOfMeasureName.qbl
new file mode 100644
index 0000000..741605b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/Attribute_UnitOfMeasureName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitOfMeasureName
+{
+  #keys: '3[414702.0.247711070][414702.0.247711069][414702.0.247711071]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/TypeIndex_TypeIndexIDAndBusinessType.qbl b/_Main/BL/Type_Global_MappingProduct_MP/TypeIndex_TypeIndexIDAndBusinessType.qbl
new file mode 100644
index 0000000..bca6c7b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/TypeIndex_TypeIndexIDAndBusinessType.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex TypeIndexIDAndBusinessType
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: ID
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: BusinessType
+    }
+  ]
+}
diff --git a/_Main/BL/Type_Global_MappingProduct_MP/_ROOT_Type_Global_MappingProduct_MP.qbl b/_Main/BL/Type_Global_MappingProduct_MP/_ROOT_Type_Global_MappingProduct_MP.qbl
new file mode 100644
index 0000000..7265bc5
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingProduct_MP/_ROOT_Type_Global_MappingProduct_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingProduct_MP
+{
+  #keys: '5[414702.0.247665567][414702.0.247665565][0.0.0][414702.0.247665566][414702.0.247665568]'
+  BaseType: Object
+  StructuredName: 'Global_MappingProduct_MPs'
+}
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_BusinessType.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_BusinessType.qbl
new file mode 100644
index 0000000..81da35c
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_BusinessType.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute BusinessType
+{
+  #keys: '3[414702.0.238159206][414702.0.238159205][414702.0.238159207]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_DisplayIndex.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_DisplayIndex.qbl
new file mode 100644
index 0000000..92e49ea
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_DisplayIndex.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute DisplayIndex
+{
+  #keys: '3[414702.0.238159219][414702.0.238159218][414702.0.238159220]'
+  ValueType: Number
+}
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_Name.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_Name.qbl
new file mode 100644
index 0000000..b9b05d0
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[414702.0.238159229][414702.0.238159228][414702.0.238159230]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_ParentName.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_ParentName.qbl
new file mode 100644
index 0000000..4b2842b
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/Attribute_ParentName.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ParentName
+{
+  #keys: '3[414702.0.238159239][414702.0.238159238][414702.0.238159240]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/TypeIndex_TypeIndexBusinessTypeAndName.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/TypeIndex_TypeIndexBusinessTypeAndName.qbl
new file mode 100644
index 0000000..fef133c
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/TypeIndex_TypeIndexBusinessTypeAndName.qbl
@@ -0,0 +1,16 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex TypeIndexBusinessTypeAndName
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: BusinessType
+    }
+    TypeIndexAttribute
+    {
+      ModelElement: Name
+    }
+  ]
+}
diff --git a/_Main/BL/Type_Global_MappingSalesSegment_MP/_ROOT_Type_Global_MappingSalesSegment_MP.qbl b/_Main/BL/Type_Global_MappingSalesSegment_MP/_ROOT_Type_Global_MappingSalesSegment_MP.qbl
new file mode 100644
index 0000000..644aaf7
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingSalesSegment_MP/_ROOT_Type_Global_MappingSalesSegment_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingSalesSegment_MP
+{
+  #keys: '5[414702.0.238159187][414702.0.238159185][0.0.0][414702.0.238159186][414702.0.238159188]'
+  BaseType: Object
+  StructuredName: 'Global_MappingSalesSegment_MPs'
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_Name.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_Name.qbl
new file mode 100644
index 0000000..bc1f32a
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_Name.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[414702.0.247664695][414702.0.247664694][414702.0.247664696]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_UnitID.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_UnitID.qbl
new file mode 100644
index 0000000..bd54057
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_UnitID.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute UnitID
+{
+  #keys: '3[414702.0.247664705][414702.0.247664704][414702.0.247664706]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_id.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_id.qbl
new file mode 100644
index 0000000..739ec3d
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/Attribute_id.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute ID
+{
+  #keys: '3[414702.0.247705763][414702.0.247705762][414702.0.247705764]'
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
new file mode 100644
index 0000000..58e6677
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/StaticMethod_CreateByAPI.qbl
@@ -0,0 +1,38 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod CreateByAPI (
+  GlobalOTDTable globalOTDTable
+)
+{
+  TextBody:
+  [*
+    globalOTDTable.Global_MappingStockingPoint_MP( relflush );
+    
+    bodynumber := "2";
+    postrequestbody := globalOTDTable.ApiBuildPostRequestBody( bodynumber );
+    address := "api-uat-sgc.tianma.cn";
+    url := "/otdService/https/GetStockingPointsInfo";
+    port := 443;
+    i := HTTPInterface::Create( address, port);
+    i.URL( url );
+    i.SSL( true );
+    i.SSLKeystore( "MyKeystore" );
+    i.PostMethod( true ); //it's a POST method
+    
+    i.Call( postrequestbody ); // Call's argument is for POST method's content.
+    htmlresult := i.Result();
+    
+    htmlresponse := JSON::Parse( htmlresult );
+    reponseDataJson := htmlresponse.Get( "responseData" );
+    datalist := reponseDataJson.Get( "dataList" );
+    
+    total := datalist.Size();
+    for ( j := 0; j < total; j++ ) {
+      globalOTDTable.Global_MappingStockingPoint_MP( relnew,
+                                                     ID     := guard( datalist.Get( j ).Get( "id" ).GetString(), "" ),
+                                                     Name   := guard( datalist.Get( j ).Get( "name" ).GetString(), "" ),
+                                                     UnitID := guard( datalist.Get( j ).Get( "unitid" ).GetString(), "" )
+                                                    );
+    }
+  *]
+}
diff --git a/_Main/BL/Type_Global_MappingStockingPoint_MP/_ROOT_Type_Global_MappingStockingPoint_MP.qbl b/_Main/BL/Type_Global_MappingStockingPoint_MP/_ROOT_Type_Global_MappingStockingPoint_MP.qbl
new file mode 100644
index 0000000..4281efe
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingStockingPoint_MP/_ROOT_Type_Global_MappingStockingPoint_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingStockingPoint_MP
+{
+  #keys: '5[414702.0.239762041][414702.0.239762039][0.0.0][414702.0.239762040][414702.0.239762042]'
+  BaseType: Object
+  StructuredName: 'Global_MappingStockingPoint_MPs'
+}
diff --git a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/Attribute_IsDefault.qbl b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/Attribute_IsDefault.qbl
new file mode 100644
index 0000000..cbf856e
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/Attribute_IsDefault.qbl
@@ -0,0 +1,7 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute IsDefault
+{
+  #keys: '3[414702.0.238140135][414702.0.238140134][414702.0.238140136]'
+  ValueType: Boolean
+}
diff --git a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/Attribute_Name.qbl b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/Attribute_Name.qbl
new file mode 100644
index 0000000..6673dd3
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/Attribute_Name.qbl
@@ -0,0 +1,8 @@
+Quintiq file version 2.0
+#parent: #root
+Attribute Name
+{
+  #keys: '3[414702.0.238140145][414702.0.238140144][414702.0.238140146]'
+  IsReadOnly: true
+  ValueType: String
+}
diff --git a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/TypeIndex_TypeIndexName.qbl b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/TypeIndex_TypeIndexName.qbl
new file mode 100644
index 0000000..c459f2c
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/TypeIndex_TypeIndexName.qbl
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: #root
+TypeIndex TypeIndexName
+{
+  Attributes:
+  [
+    TypeIndexAttribute
+    {
+      ModelElement: Name
+    }
+  ]
+}
diff --git a/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/_ROOT_Type_Global_MappingUnitOfMeasure_MP.qbl b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/_ROOT_Type_Global_MappingUnitOfMeasure_MP.qbl
new file mode 100644
index 0000000..cadf447
--- /dev/null
+++ b/_Main/BL/Type_Global_MappingUnitOfMeasure_MP/_ROOT_Type_Global_MappingUnitOfMeasure_MP.qbl
@@ -0,0 +1,9 @@
+Quintiq file version 2.0
+#root
+#parent: #DomainModel
+Type Global_MappingUnitOfMeasure_MP
+{
+  #keys: '5[414702.0.238140113][414702.0.238140111][0.0.0][414702.0.238140112][414702.0.238140114]'
+  BaseType: Object
+  StructuredName: 'Global_MappingUnitOfMeasure_MPs'
+}
diff --git a/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl b/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
index d030255..767523f 100644
--- a/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
+++ b/_Main/BL/Type_MacroPlan/Method_InitialUnitAndStockingPoint.qbl
@@ -6,105 +6,51 @@
   [*
     // Administrator Sep-1-2023 (created)
     
+    unitOfMeasure_MP := UnitOfMeasure_MP::FindByName( this, "PCS" );
+    if ( isnull( unitOfMeasure_MP ) ) {
+      unitOfMeasure_MP := UnitOfMeasure_MP::Create( this, "PCS", false, false );
+    }
+    
     //Set the Default values
     unitofmeasurename := "PCS";
-    currencyid := "CNY";
-    startdate := Date::Date( 1900, 1, 1 );
-    enddate := Date::Date( 9999, 12, 31 );
     capacitytype := "Transport quantity";
     
-    if( isnull( Unit::FindById( this, "绌鸿繍" ) ) ){
-      this.Unit( relnew, 
-                 ID := "绌鸿繍", 
-                 Name := "绌鸿繍", 
-                 UnitOfMeasureName := unitofmeasurename, 
-                 CurrencyID := currencyid, 
-                 StartDate := startdate, 
-                 EndDate := enddate, 
-                 CapacityType := capacitytype );
-      }
+    if ( isnull( Unit::FindById( this, "绌鸿繍" ) ) ) {
+      Unit::Create( "绌鸿繍", this, "绌鸿繍", unitOfMeasure_MP, null( Unit ), capacitytype, "", null( SupplyChainView ), 0, 0, false ); 
+    }
     
-    if( isnull( Unit::FindById( this, "搴撳瓨浜嬪姟澶勭悊" ) ) ){
-      this.Unit( relnew, 
-                 ID := "搴撳瓨浜嬪姟澶勭悊", 
-                 Name := "搴撳瓨浜嬪姟澶勭悊", 
-                 UnitOfMeasureName := unitofmeasurename, 
-                 CurrencyID := currencyid, 
-                 StartDate := startdate, 
-                 EndDate := enddate, 
-                 CapacityType := capacitytype );
+    if ( isnull( Unit::FindById( this, "搴撳瓨浜嬪姟澶勭悊" ) ) ) {
+      Unit::Create( "搴撳瓨浜嬪姟澶勭悊", this, "搴撳瓨浜嬪姟澶勭悊", unitOfMeasure_MP, null( Unit ), capacitytype, "", null( SupplyChainView ), 0, 0, false ); 
     }
     
     unitofmeasurename := "PCS";
-    name := "鎵嬪姩鍒涘缓搴撳瓨鐐�";
-    currencyname := "CNY";
-    isplannedinfinite := false;
-    datestart := Date::Construct(1900, 1, 1) ;
-    dateend := Date::Construct(9999, 12, 31);
-    groupname := " ";
-    description := " ";
-    isfromdb := true;
     
-    if( isnull( StockingPoint_MP::FindById( this, "F13_FG_STOCK" ) ) ){
-      StockingPoint_MP::Create( this, 
-                                "F13_FG_STOCK", 
-                                "F13", 
-                                name, 
-                                unitofmeasurename, 
-                                currencyname, 
-                                isplannedinfinite, 
-                                datestart, 
-                                dateend, 
-                                groupname, 
-                                description, 
-                                isfromdb );
+    if ( isnull( StockingPoint_MP::FindById( this, "F13_FG_STOCK" ) ) ) {
+      StockingPoint_MP::Create( "F13_FG_STOCK", this, null( Unit ), "F13_FG_STOCK", null( SupplyChainView ), 0, 0, false );
     }
     
-    if( isnull( StockingPoint_MP::FindById( this, "H10_SA_STOCK" ) ) ){
-      StockingPoint_MP::Create( this, 
-                                "H10_SA_STOCK", 
-                                "H10", 
-                                name, 
-                                unitofmeasurename, 
-                                currencyname, 
-                                isplannedinfinite, 
-                                datestart, 
-                                dateend, 
-                                groupname, 
-                                description, 
-                                isfromdb );
+    if ( isnull( StockingPoint_MP::FindById( this, "H10_SA_STOCK" ) ) ) {
+      StockingPoint_MP::Create( "H10_SA_STOCK", this, null( Unit ), "H10_SA_STOCK", null( SupplyChainView ), 0, 0, false );
     }
     
-    if( isnull( StockingPoint_MP::FindById( this, "Q10_FG_STOCK" ) ) ){
-      StockingPoint_MP::Create( this, 
-                                "Q10_FG_STOCK", 
-                                "Q10", 
-                                name, 
-                                unitofmeasurename, 
-                                currencyname, 
-                                isplannedinfinite, 
-                                datestart, 
-                                dateend, 
-                                groupname, 
-                                description, 
-                                isfromdb );
+    if ( isnull( StockingPoint_MP::FindById( this, "Q10_FG_STOCK" ) ) ) {
+      StockingPoint_MP::Create( "Q10_FG_STOCK", this, null( Unit ), "Q10_FG_STOCK", null( SupplyChainView ), 0, 0, false );
     }
     
-    existcurrency := Currency_MP::FindById( this, "CNY" );
-    if( isnull( existcurrency ) ){
-      Currency_MP::CreateCurrency( this, "CNY", "CNY", "", true );
-      currency := Currency_MP::FindById( this, "EUR" );
-      currency.IsBase(false);
-      Transaction::Transaction().Propagate();
-      }
+    if ( isnull( Currency_MP::FindById( this, "CNY" ) ) ) {
+      Currency_MP::Create( "CNY", this, "CNY", "", false, false );
+    }
     
     isproductcatagory := false;
     isfromdb := false;
-    existproductlevel := ProductLevel_MP::FindProductLevelTypeIndex( "2" );
-    if( isnull( existproductlevel ) ){
+    if ( isnull( ProductLevel_MP::FindProductLevelTypeIndex( "1" ) ) ) {
       ProductLevel_MP::Create( "1", isproductcatagory, this, isfromdb );
+    }
+    if ( isnull( ProductLevel_MP::FindProductLevelTypeIndex( "2" ) ) ) {
       ProductLevel_MP::Create( "2", isproductcatagory, this, isfromdb );
+    }
+    if ( isnull( ProductLevel_MP::FindProductLevelTypeIndex( "3" ) ) ) {
       ProductLevel_MP::Create( "3", isproductcatagory, this, isfromdb );
-      }
+    }
   *]
 }
diff --git a/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Component_SplitterWndScenarioManager.def b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Component_SplitterWndScenarioManager.def
index 3c15ce4..51ce736 100644
--- a/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Component_SplitterWndScenarioManager.def
+++ b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Component_SplitterWndScenarioManager.def
@@ -5,9 +5,122 @@
   [
     Component SplitterPaneScenario #extension
     {
+      GBLayout
+      {
+        Type: 'internal[GBLayoutDefinition]'
+        Columns:
+        [
+          GBFlow.Column { grow: 0 id: 9 parent: 0 }
+          GBFlow.Column { grow: 0 id: 22 parent: 0 }
+          GBFlow.Column { grow: 0 id: 35 parent: 0 }
+          GBFlow.Column { grow: 0 id: 37 parent: 0 }
+          GBFlow.Column { grow: 0 id: 24 parent: 0 }
+          GBFlow.Column { grow: 0 id: 138 parent: 0 }
+          GBFlow.Column { grow: 0 id: 588 parent: 0 }
+          GBFlow.Column { grow: 0 id: 780 parent: 0 }
+          GBFlow.Column { grow: 0 id: 508 parent: 0 }
+          GBFlow.Column { grow: 128 id: 27 parent: 0 }
+        ]
+        Elements:
+        [
+          GBElement
+          {
+            Component => /SplitterWnd1
+            Position { startcolumn: 9 startrow: 2 endcolumn: 27 endrow: 2 }
+          }
+          GBElement
+          {
+            Component => ButtonRefreshKPIs
+            Position { startcolumn: 9 startrow: 5 endcolumn: 9 endrow: 5 }
+          }
+          GBElement
+          {
+            Component => LabelImportExportStatusTitle
+            Position { startcolumn: 22 startrow: 5 endcolumn: 22 endrow: 5 }
+          }
+          GBElement
+          {
+            Component => LabelLastDataExchangeDate
+            Position { startcolumn: 24 startrow: 5 endcolumn: 24 endrow: 5 }
+          }
+          GBElement
+          {
+            Component => LabelLastDataExchangeAction
+            Position { startcolumn: 35 startrow: 5 endcolumn: 35 endrow: 5 }
+          }
+          GBElement
+          {
+            Component => LabelActionOn
+            Position { startcolumn: 37 startrow: 5 endcolumn: 37 endrow: 5 }
+          }
+          GBElement
+          {
+            Component => ButtonCreateScenariosFromDatasets
+            Position { startcolumn: 138 startrow: 5 endcolumn: 138 endrow: 5 }
+          }
+          GBElement
+          {
+            Component => ButtonRefreshScenarios
+            Position { startcolumn: 588 startrow: 5 endcolumn: 588 endrow: 5 }
+          }
+          GBElement
+          {
+            Component: 'Button897'
+            Position { startcolumn: 780 startrow: 5 endcolumn: 780 endrow: 5 }
+          }
+          GBElement
+          {
+            Component: 'Button482'
+            Position { startcolumn: 508 startrow: 5 endcolumn: 508 endrow: 5 }
+          }
+        ]
+        Gaps: [ left: 0 right: 0 top: 0 bottom: 0 inner: 5 ]
+        Rows:
+        [
+          GBFlow.Row { grow: 0 id: 5 parent: 0 }
+          GBFlow.Row { grow: 128 id: 2 parent: 0 }
+        ]
+      }
       Children:
       [
         #child: SplitterWnd1
+        Component Button897
+        {
+          #keys: '[414702.0.239704572]'
+          BaseType: 'Button'
+          Properties:
+          [
+            Image: 'BIRD'
+            LayoutGroup: 'Button0'
+            Text: '鎵ц鍏ㄥ眬浠g悊'
+          ]
+        }
+        Component Button482
+        {
+          #keys: '[414702.0.239704587]'
+          BaseType: 'Button'
+          Properties:
+          [
+            LayoutGroup: 'Button0'
+            Text: 'Button'
+          ]
+        }
+      ]
+      Properties:
+      [
+        ModeledStringList ChildOrdering
+        {
+          c: ButtonRefreshKPIs
+          c: LabelImportExportStatusTitle
+          c: ButtonCreateScenariosFromDatasets
+          c: LabelLastDataExchangeAction
+          c: SplitterWnd1
+          c: LabelLastDataExchangeDate
+          c: LabelActionOn
+          c: ButtonRefreshScenarios
+          c: Button897
+          c: Button482
+        }
       ]
     }
   ]
diff --git a/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_TIANMA_JITUAN_SplitterWndScenarioManager_Button897_OnClick.def b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_TIANMA_JITUAN_SplitterWndScenarioManager_Button897_OnClick.def
new file mode 100644
index 0000000..d5aa442
--- /dev/null
+++ b/_Main/UI/MacroPlanner/Component_ScenarioManager_FormScenario/Response_TIANMA_JITUAN_SplitterWndScenarioManager_Button897_OnClick.def
@@ -0,0 +1,12 @@
+Quintiq file version 2.0
+#parent: SplitterWndScenarioManager/Button897
+Response OnClick () id:Response_TIANMA_JITUAN_SplitterWndScenarioManager_Button897_OnClick
+{
+  #keys: '[414702.0.239704677]'
+  Body:
+  [*
+    GlobalOTDTable::SynchronizationAllMappingBroker( MacroPlan, GlobalOTDTable );
+  *]
+  CanBindMultiple: false
+  DefinitionID: 'Responsedef_GUIButtonBase_OnClick'
+}
diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_CopyScenario.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_CopyScenario.def
new file mode 100644
index 0000000..c0a6fa5
--- /dev/null
+++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditScenario/Method_CopyScenario.def
@@ -0,0 +1,29 @@
+Quintiq file version 2.0
+#parent: #root
+Method CopyScenario (
+  ScenarioMP source
+) id:Method_DialogCreateEditScenario_CopyScenario #extension
+{
+  Body:
+  [*
+    // Copy scenario
+    scenario := ScenarioManager.ScenarioNode( relshadow,
+                                              ScenarioMP,
+                                              Parent := source,
+                                              Name := ScenarioManager.GetUniqueScenarioName( source.Name() ),
+                                              SelectedStrategy := source.SelectedStrategy(),
+                                              State := source.State() );
+    
+    DataHolderActionCopy.Data( true );
+    DataHolderDialogData.Data( &scenario );
+    
+    // do not distribute
+    DataHolderDialogData.Data().EnableSync( false );
+    checkboxEnableSync.Visible( false );
+    dropDownStringListGeneral.Visible( false );
+    checkboxIsKeyProduct.Visible( false );
+    checkboxCreatePurchaseSupplyProduct.Visible( false );
+    
+    ApplicationMacroPlanner.ShowFormModal( this );
+  *]
+}

--
Gitblit v1.9.3