lihongji
2024-07-26 23f7cd51d607dead573dfa5b251d402d502111a2
Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev
已修改42个文件
已添加194个文件
已删除4个文件
5336 ■■■■■ 文件已修改
Calendars/BL/Relations/Relation_LibCal_ExplicitTimeInterval_LeadingETI_LibCal_ExplicitTimeInterval_.qbl 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_Event/Method_UpdateRecurrencePattern.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_LeadingParticipation/Method_AddSubscribers.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_LeadingParticipation/Method_SetSubscribers.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_LeadingParticipation/Method_Update.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_LeadingParticipation/Method_UpdateCalendarWhenChanged.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_Participation/Attribute_EndTime.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_Participation/Method_CreateTimeInterval.qbl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_Participation/Method_UpdateRecurrencePeriod.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_Subscription/Method_CopyOccurrences#486.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Type_LibCal_Subscription/Method_CopyOccurrences.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Dataset_InterfaceDataset/Daemon_MachineStockInterface.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Dataset_InterfaceDataset/Daemon_ShippingActualInterface.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/InfoMessages.qbl 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ActualDailyProductionData_MacroPlan_MacroPlan_ActualDailyProduction.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_FinishedEngineInventory_InterfaceLoginfo_InterfaceLoginfo_FinishedE.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_InterfaceLoginfo_InterfaceDataset_InterfaceDataset_InterfaceLoginfo.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_InterfaceLoginfo_ShippingActualData_ShippingActualData_InterfaceLog.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_MachineStockData_InterfaceLoginfo_InterfaceLoginfo_MachineStockData.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ShippingActualCell_ShippingActualColumn_ShippingActualColumn_Shippi.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ShippingActualCell_ShippingActualRow_ShippingActualRow_ShippingActu.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ShippingActualColumn_InterfaceDataset_InterfaceDataset_ShippingActu.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Relations/Relation_ShippingActualRow_InterfaceDataset_InterfaceDataset_ShippingActualR.qbl 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/Attribute_Date.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/Attribute_Product.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/Attribute_ProductLine.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/Attribute_ProductionVolume.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/Attribute_Shift.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/Attribute_ShiftProductionVolume.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/Attribute_ShiftSequence.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/StaticMethod_GetRequestBody.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/StaticMethod_Synchronize.qbl 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ActualDailyProductionReport/_ROOT_Type_ActualDailyProductionData.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_Amount.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_BIPlace.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_Brand.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_DDay.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_DMonth.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_DType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_DWeek.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_EngineModularPlatform.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_EngineType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_Fac.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_FourCode.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_FullName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_Price.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_ReceiptPlace.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_SpellName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_Total.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/Attribute_VehicleType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/DefaultValue_Fac.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/StaticMethod_GenerateData.qbl 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/StaticMethod_GetRequestBody.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/StaticMethod_Synchronize.qbl 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_FinishedEngineInventory/_ROOT_Type_FinishedEngineInventory.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceDataset/StaticMethod_GetResponseJsonData.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_ExecuteUser.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_FinishTime.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_InterfaceDateTime.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_Last.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_Message.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_Name.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_RequestBody.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_Response.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnMsg.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnSuccess.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_Success.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Attribute_TotalRow.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/DefaultValue_Message.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/DefaultValue_Name.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/DefaultValue_Response.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/Method_UpdateLast.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_InterfaceLoginfo/_ROOT_Type_InterfaceLoginfo.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_Event/Attribute_IsMultiple.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI0.qbl 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_Event/StaticMethod_ValidDate.qbl 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_ExplicitTimeInterval/StaticMethod_Delete.qbl 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_ExplicitTimeInterval/_ROOT_Type_LibCal_ExplicitTimeInterval.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventColumn/Attribute_TimeUnit.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventColumn/Method_FilterByDatePeriod.qbl 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventColumn/Method_GetCellByTimeUnit.qbl 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventRow/Attribute_Name.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventRow/Function_CalcName.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventRow/Method_GetTimeByTimeUnit.qbl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventRow/Method_InitializeDate.qbl 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventTable/Method_GetColumnByTimeUnit.qbl 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeDay.qbl 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeMonth.qbl 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeTable.qbl 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeWeek.qbl 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_InitializeTable.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_Subscription/Method_CopyOccurrences#486.qbl 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LibCal_Subscription/_ROOT_Type_LibCal_Subscription.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Actual.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Gap.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Plan.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Function_CalcGap.qbl 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl 118 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Attribute_CustomDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Attribute_CustomIndex.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/DefaultValue_CustomIndex.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Function_CalcDate.qbl 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_AllTotal.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_DDay.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_Date.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_Fac.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_FacName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_Inventory.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_LineType.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_MaterialName.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_MaterialNo.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_Product.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_Total.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/Attribute_Unit.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/StaticMethod_GenerateData.qbl 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/StaticMethod_GetRequestBody.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/StaticMethod_Synchronize.qbl 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_MachineStockData/_ROOT_Type_MachineStockData.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualCell/Attribute_Quantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualCell/_ROOT_Type_ShippingActualCell.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualColumn/Attribute_Index.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualColumn/Attribute_StartDate.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualColumn/_ROOT_Type_ShippingActualColumn.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/Attribute_CreateTime.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/Attribute_DDay.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/Attribute_Fac.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/Attribute_FourCode.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/Attribute_ID.qbl 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/Attribute_Quantity.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/StaticMethod_Export.qbl 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/StaticMethod_GenerateData.qbl 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/StaticMethod_GetDefalutName.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/StaticMethod_GetRequestBody.qbl 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/StaticMethod_Synchronize.qbl 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualData/_ROOT_Type_ShippingActualData.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualRow/Attribute_Name.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualRow/Attribute_RowNr.qbl 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/BL/Type_ShippingActualRow/_ROOT_Type_ShippingActualRow.qbl 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDebug.def 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuFinishedEngineInventory_OnCli.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuInterface_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuMachineStockData_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bShippingActualData_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelPeriods.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged.def 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_ListFinishedEngineInventory.def 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listActionBarPageFinishedEngineInventory.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listContextMenuFinishedEngineInventory.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/_ROOT_Component_FormFinishedEngineInventory.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_ListInterfaceLoginfo.def 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listActionBarPageInterfaceLoginfo.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listContextMenuInterfaceLoginfo.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/_ROOT_Component_FormInterfaceLoginfo.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_ListMachineStockData.def 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listActionBarPageMachineStockData.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listContextMenuMachineStockData.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/_ROOT_Component_FormMachineStockData.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor#988.def 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison#634.def 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter#119.def 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixEditorActionBarPageDemandComparison#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixeditorContextMenuDemandComparison#1.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhFinelProduct_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslGeneration_OnCreated.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslMQBMLB_OnCreated.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslPower_OnCreated.def 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhEndDate_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhStartDate_OnCreated.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsEndDate_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsStartDate_OnChanged.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_ButtonRibbon_OnClick.def 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick#613.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_MatrixEditorTable.def 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_PanelButton.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_PanelTable.def 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_matrixEditorActionBarPageTable.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_matrixeditorContextMenuTable.def 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Response_PanelButton_ButtonButton_OnClick.def 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/_ROOT_Component_FormShippingActualData.def 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateEvent#791.def 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_EditEvent.def 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader#144.def 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent#778.def 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowAllDay.def 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuDelete_OnClick.def 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuEdit_OnClick.def 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ButtonCreate_OnClick.def 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ckbIsAllDay_OnChanged.def 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsEndDate_OnChanged.def 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Finished_engine_inventory.vw 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Interface_loginfo_view.vw 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Machine_stock_data.vw 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/OfflinePlanComparisonReport.vw 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
_Main/UI/MacroPlannerWebApp/Views/Shipping_actual_data_view.vw 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Calendars/BL/Relations/Relation_LibCal_ExplicitTimeInterval_LeadingETI_LibCal_ExplicitTimeInterval_.qbl
@@ -12,7 +12,6 @@
    Cardinality: '0to1'
    ObjectDefinition: LibCal_ExplicitTimeInterval
    OwningSide: 'Reference'
    InterfaceProperties { Accessibility: 'Module' }
  }
  RelationSide.RightSide SubscribingETI
  {
@@ -20,6 +19,5 @@
    Cardinality: '1toN'
    ObjectDefinition: LibCal_ExplicitTimeInterval
    OwningSide: 'Reference'
    InterfaceProperties { Accessibility: 'Module' }
  }
}
Calendars/BL/Type_LibCal_Event/Method_UpdateRecurrencePattern.qbl
@@ -74,5 +74,5 @@
    // Directly update the relation from the Participations to the RecurrencePattern.
    Transaction::Transaction().Propagate( relation( LibCal_Participation, RecurrencePattern ) );
  *]
  InterfaceProperties { Accessibility: 'Module' }
  InterfaceProperties { Accessibility: 'Extensible' }
}
Calendars/BL/Type_LibCal_LeadingParticipation/Method_AddSubscribers.qbl
@@ -14,5 +14,4 @@
      this.AddSubscriber( subscriber, useLeadingPeriod_i );
    }
  *]
  InterfaceProperties { Accessibility: 'Module' }
}
Calendars/BL/Type_LibCal_LeadingParticipation/Method_SetSubscribers.qbl
@@ -11,5 +11,5 @@
    
    this.SetSubscribers( subscribers_i, useLeadingPeriod );
  *]
  InterfaceProperties { Accessibility: 'Module' }
  InterfaceProperties { Accessibility: 'Extensible' }
}
Calendars/BL/Type_LibCal_LeadingParticipation/Method_Update.qbl
@@ -36,5 +36,5 @@
      subscription.EndDate(   endDate_i   );
    }
  *]
  InterfaceProperties { Accessibility: 'Module' }
  InterfaceProperties { Accessibility: 'Extensible' }
}
Calendars/BL/Type_LibCal_LeadingParticipation/Method_UpdateCalendarWhenChanged.qbl
@@ -9,5 +9,5 @@
    onlyWhenChanged := true;
    this.UpdateCalendar( onlyWhenChanged );
  *]
  InterfaceProperties { Accessibility: 'Module' }
  InterfaceProperties { Accessibility: 'Extensible' }
}
Calendars/BL/Type_LibCal_Participation/Attribute_EndTime.qbl
@@ -5,5 +5,4 @@
  #keys: '3[131094.0.1190114209][131094.0.1190114208][131094.0.1190114210]'
  Description: 'EndTime of the event. Is only relevant for non-recurring events.'
  ValueType: DateTime
  InterfaceProperties { Accessibility: 'Module' }
}
Calendars/BL/Type_LibCal_Participation/Method_CreateTimeInterval.qbl
@@ -19,5 +19,4 @@
    
    return timeInterval;
  *]
  InterfaceProperties { Accessibility: 'Module' }
}
Calendars/BL/Type_LibCal_Participation/Method_UpdateRecurrencePeriod.qbl
@@ -50,5 +50,5 @@
    // this.CalcIsRecurring(); is not good enough here, explicit propagation is required.
    Transaction::Transaction().Propagate( attribute( LibCal_Participation, IsRecurring ) );
  *]
  InterfaceProperties { Accessibility: 'Module' }
  InterfaceProperties { Accessibility: 'Extensible' }
}
Calendars/BL/Type_LibCal_Subscription/Method_CopyOccurrences#486.qbl
@@ -31,5 +31,5 @@
      }
    }
  *]
  InterfaceProperties { Accessibility: 'Module' }
  InterfaceProperties { Accessibility: 'Extensible' }
}
Calendars/BL/Type_LibCal_Subscription/Method_CopyOccurrences.qbl
@@ -28,5 +28,5 @@
      }            
    }
  *]
  InterfaceProperties { Accessibility: 'Module' }
  InterfaceProperties { Accessibility: 'Extensible' }
}
_Main/BL/Dataset_InterfaceDataset/Daemon_MachineStockInterface.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
Daemon MachineStockInterface
{
  Frequency: P1DT0H0M0S
  Priority: 'Default'
  StartDate: 2024-07-19
  StartTimeOfDay: P0DT9H0M0S
  Text:
  [*
    options := DatasetFindOptions::Construct( 'InterfaceDataset' ).IncludeOffline( true ); //to load we must search offline datasets.
    mdskey := DatasetController::FindUnique( options );
    MDSInterfaceDataset::Root( mdskey ) -> MachineStockData::Synchronize( "Administrator" );
  *]
}
_Main/BL/Dataset_InterfaceDataset/Daemon_ShippingActualInterface.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
Daemon ShippingActualInterface
{
  Frequency: P1DT0H0M0S
  Priority: 'Default'
  StartDate: 2024-07-19
  StartTimeOfDay: P0DT23H30M0S
  Text:
  [*
    options := DatasetFindOptions::Construct( 'InterfaceDataset' ).IncludeOffline( true ); //to load we must search offline datasets.
    mdskey := DatasetController::FindUnique( options );
    MDSInterfaceDataset::Root( mdskey ) -> ShippingActualData::Synchronize( "Administrator" );
  *]
}
_Main/BL/InfoMessages.qbl
@@ -86,6 +86,66 @@
  {
    DefaultText: 'There are duplicate three digit codes present'
  }
  InfoMessage InterfaceDataset_ActualDailyProductionData_Name
  {
    DefaultText: 'Actual daily production data'
  }
  InfoMessage InterfaceDataset_ActualDailyProductionData_Secret
  {
    DefaultText: '527086842571391021'
  }
  InfoMessage InterfaceDataset_ActualDailyProductionData_URL
  {
    DefaultText: '/data-service/api/service/post-data/V1.101/e014325a6be14dab818303ef90c2968a'
  }
  InfoMessage InterfaceDataset_Address
  {
    DefaultText: 'ds-yunrong-gw.dmp.vwfawedl.mobi'
  }
  InfoMessage InterfaceDataset_ContentType
  {
    DefaultText: 'application/json'
  }
  InfoMessage InterfaceDataset_FinishedEngineInventory_Name
  {
    DefaultText: 'Finished engine inventory'
  }
  InfoMessage InterfaceDataset_FinishedEngineInventory_Secret
  {
    DefaultText: '527100497300029474'
  }
  InfoMessage InterfaceDataset_FinishedEngineInventory_URL
  {
    DefaultText: '/data-service/api/service/post-data/V1.101/f084aa52d19c48d090416936a94f1dab'
  }
  InfoMessage InterfaceDataset_MachineStockData_Name
  {
    DefaultText: 'Machine stock data'
  }
  InfoMessage InterfaceDataset_MachineStockData_Secret
  {
    DefaultText: '527077575449641087'
  }
  InfoMessage InterfaceDataset_MachineStockData_URL
  {
    DefaultText: '/data-service/api/service/post-data/V1.101/2f6c42fe895c45bdb2e8e1ca8489b5a2'
  }
  InfoMessage InterfaceDataset_ShippingActualData_Name
  {
    DefaultText: 'Shipping actual data'
  }
  InfoMessage InterfaceDataset_ShippingActualData_Secret
  {
    DefaultText: '527088907855069215'
  }
  InfoMessage InterfaceDataset_ShippingActualData_URL
  {
    DefaultText: '/data-service/api/service/post-data/V1.101/f4f94c47c1a2440898b5e1e2c0c5cbc8'
  }
  InfoMessage InterfaceDataset_Token_URL
  {
    DefaultText: '/authorization/token/api/open/token/generateToken?grant_type=client_credentials&client_id=19KxoxPF25cy96K8TL&client_secret='
  }
  InfoMessage MP_ChangeLossSetting_CheckNull
  {
    DefaultText: 'The required field is blank.'
@@ -142,6 +202,14 @@
  {
    DefaultText: 'The Event type of binding Event exists.'
  }
  InfoMessage MP_LibCal_Event_ValidDate
  {
    DefaultText: 'This date is not within the planned cycle!'
  }
  InfoMessage MP_LibCal_Event_ValidDatePeriod
  {
    DefaultText: 'The start date must be less than the end date!'
  }
  InfoMessage MP_Routing_IllegalDateRange
  {
    DefaultText: 'The start date cannot be longer than the end date.'
_Main/BL/Relations/Relation_ActualDailyProductionData_MacroPlan_MacroPlan_ActualDailyProduction.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ActualDailyProductionData_MacroPlan_MacroPlan_ActualDailyProductionData
{
  #keys: '1[412672.1.61744699]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide MacroPlan
  {
    #keys: '3[412672.1.61744701][412672.1.61744700][412672.1.61744702]'
    Cardinality: '0to1'
    ObjectDefinition: ActualDailyProductionData
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ActualDailyProductionData
  {
    #keys: '3[412672.1.61744704][412672.1.61744703][412672.1.61744705]'
    Cardinality: '1toN'
    ObjectDefinition: MacroPlan
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_FinishedEngineInventory_InterfaceLoginfo_InterfaceLoginfo_FinishedE.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation FinishedEngineInventory_InterfaceLoginfo_InterfaceLoginfo_FinishedEngineInventory
{
  #keys: '1[415136.0.932110028]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide InterfaceLoginfo
  {
    #keys: '3[415136.0.932110030][415136.0.932110029][415136.0.932110031]'
    Cardinality: '0to1'
    ObjectDefinition: FinishedEngineInventory
    OwningSide: 'Reference'
  }
  RelationSide.RightSide FinishedEngineInventory
  {
    #keys: '3[415136.0.932110033][415136.0.932110032][415136.0.932110034]'
    Cardinality: '1toN'
    ObjectDefinition: InterfaceLoginfo
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_InterfaceLoginfo_InterfaceDataset_InterfaceDataset_InterfaceLoginfo.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation InterfaceLoginfo_InterfaceDataset_InterfaceDataset_InterfaceLoginfo
{
  #keys: '1[415136.0.917964687]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide InterfaceDataset
  {
    #keys: '3[415136.0.917964689][415136.0.917964688][415136.0.917964690]'
    Cardinality: '0to1'
    ObjectDefinition: InterfaceLoginfo
    OwningSide: 'Reference'
  }
  RelationSide.RightSide InterfaceLoginfo
  {
    #keys: '3[415136.0.917964692][415136.0.917964691][415136.0.917964693]'
    Cardinality: '1toN'
    ObjectDefinition: InterfaceDataset
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_InterfaceLoginfo_ShippingActualData_ShippingActualData_InterfaceLog.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation InterfaceLoginfo_ShippingActualData_ShippingActualData_InterfaceLoginfo
{
  #keys: '1[415136.0.917964760]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide ShippingActualData
  {
    #keys: '3[415136.0.917964762][415136.0.917964761][415136.0.917964763]'
    Cardinality: '1toN'
    ObjectDefinition: InterfaceLoginfo
    OwningSide: 'Owned'
  }
  RelationSide.RightSide InterfaceLoginfo
  {
    #keys: '3[415136.0.917964765][415136.0.917964764][415136.0.917964766]'
    Cardinality: '0to1'
    ObjectDefinition: ShippingActualData
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_MachineStockData_InterfaceLoginfo_InterfaceLoginfo_MachineStockData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation MachineStockData_InterfaceLoginfo_InterfaceLoginfo_MachineStockData
{
  #keys: '1[415136.0.931886865]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide InterfaceLoginfo
  {
    #keys: '3[415136.0.931886867][415136.0.931886866][415136.0.931886868]'
    Cardinality: '0to1'
    ObjectDefinition: MachineStockData
    OwningSide: 'Reference'
  }
  RelationSide.RightSide MachineStockData
  {
    #keys: '3[415136.0.931886870][415136.0.931886869][415136.0.931886871]'
    Cardinality: '1toN'
    ObjectDefinition: InterfaceLoginfo
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_ShippingActualCell_ShippingActualColumn_ShippingActualColumn_Shippi.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ShippingActualCell_ShippingActualColumn_ShippingActualColumn_ShippingActualCell
{
  #keys: '1[415136.0.904040097]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide ShippingActualColumn
  {
    #keys: '3[415136.0.904040099][415136.0.904040098][415136.0.904040100]'
    Cardinality: '0to1'
    ObjectDefinition: ShippingActualCell
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ShippingActualCell
  {
    #keys: '3[415136.0.904040102][415136.0.904040101][415136.0.904040103]'
    Cardinality: '1toN'
    ObjectDefinition: ShippingActualColumn
    OwningSide: 'Reference'
  }
}
_Main/BL/Relations/Relation_ShippingActualCell_ShippingActualRow_ShippingActualRow_ShippingActu.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ShippingActualCell_ShippingActualRow_ShippingActualRow_ShippingActualCell
{
  #keys: '1[415136.0.904040084]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide ShippingActualRow
  {
    #keys: '3[415136.0.904040086][415136.0.904040085][415136.0.904040087]'
    Cardinality: '0to1'
    ObjectDefinition: ShippingActualCell
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ShippingActualCell
  {
    #keys: '3[415136.0.904040089][415136.0.904040088][415136.0.904040090]'
    Cardinality: '1toN'
    ObjectDefinition: ShippingActualRow
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_ShippingActualColumn_InterfaceDataset_InterfaceDataset_ShippingActu.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ShippingActualColumn_InterfaceDataset_InterfaceDataset_ShippingActualColumn
{
  #keys: '1[415136.0.904040009]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide InterfaceDataset
  {
    #keys: '3[415136.0.904040011][415136.0.904040010][415136.0.904040012]'
    Cardinality: '0to1'
    ObjectDefinition: ShippingActualColumn
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ShippingActualColumn
  {
    #keys: '3[415136.0.904040014][415136.0.904040013][415136.0.904040015]'
    Cardinality: '1toN'
    ObjectDefinition: InterfaceDataset
    OwningSide: 'Owned'
  }
}
_Main/BL/Relations/Relation_ShippingActualRow_InterfaceDataset_InterfaceDataset_ShippingActualR.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
Quintiq file version 2.0
#parent: #root
Relation ShippingActualRow_InterfaceDataset_InterfaceDataset_ShippingActualRow
{
  #keys: '1[415136.0.904040037]'
  DefaultRelationStrategy
  {
  }
  RelationSide.LeftSide InterfaceDataset
  {
    #keys: '3[415136.0.904040039][415136.0.904040038][415136.0.904040040]'
    Cardinality: '0to1'
    ObjectDefinition: ShippingActualRow
    OwningSide: 'Reference'
  }
  RelationSide.RightSide ShippingActualRow
  {
    #keys: '3[415136.0.904040042][415136.0.904040041][415136.0.904040043]'
    Cardinality: '1toN'
    ObjectDefinition: InterfaceDataset
    OwningSide: 'Owned'
  }
}
_Main/BL/Type_ActualDailyProductionReport/Attribute_Date.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Date
{
  #keys: '3[412672.1.61744627][412672.1.61744626][412672.1.61744628]'
  Description: '日期'
  ValueType: Date
}
_Main/BL/Type_ActualDailyProductionReport/Attribute_Product.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Product
{
  #keys: '3[412672.1.61744620][412672.1.61744619][412672.1.61744621]'
  Description: '物料号'
  ValueType: String
}
_Main/BL/Type_ActualDailyProductionReport/Attribute_ProductLine.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductLine
{
  #keys: '3[412672.1.61744610][412672.1.61744609][412672.1.61744611]'
  Description: '产线'
  ValueType: String
}
_Main/BL/Type_ActualDailyProductionReport/Attribute_ProductionVolume.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ProductionVolume
{
  #keys: '3[412672.1.61744637][412672.1.61744636][412672.1.61744638]'
  Description: '对应日期的实际生产数量'
  ValueType: Real
}
_Main/BL/Type_ActualDailyProductionReport/Attribute_Shift.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Shift
{
  #keys: '3[412672.1.61744647][412672.1.61744646][412672.1.61744648]'
  Description: '对应日期的实际生产班次'
  ValueType: String
}
_Main/BL/Type_ActualDailyProductionReport/Attribute_ShiftProductionVolume.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ShiftProductionVolume
{
  #keys: '3[412672.1.61744657][412672.1.61744656][412672.1.61744658]'
  Description: '对应班次的实际生产数量'
  ValueType: Real
}
_Main/BL/Type_ActualDailyProductionReport/Attribute_ShiftSequence.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ShiftSequence
{
  #keys: '3[412672.1.61744667][412672.1.61744666][412672.1.61744668]'
  Description: '班次顺序'
  ValueType: String
}
_Main/BL/Type_ActualDailyProductionReport/StaticMethod_GetRequestBody.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetRequestBody (
  Date date
) as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-19-2024 (created)
    json := JSON::Object()
                  .Add( "inParam", JSON::Object().Add( "productiondate", date.Format( "Y-M2-D2" ) ) ).Build();
    requestbody := json.AsString();
    return requestbody
  *]
}
_Main/BL/Type_ActualDailyProductionReport/StaticMethod_Synchronize.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Synchronize (
  MacroPlan owner,
  InterfaceDataset interfaceDataset
)
{
  TextBody:
  [*
    // rislai Jul-23-2024 (created)
    date    := Date::ActualDate();
    loginfo := interfaceDataset.InterfaceLoginfo( relnew, ExecuteUser := QuintiqUser::CurrentUser().ShortName()
                                       , Name := Translations::InterfaceDataset_ActualDailyProductionData_Name()
                                       , InterfaceDateTime := DateTime::ActualTime()
                                       , Message := '生产实际数据'
                                       , RequestBody := ActualDailyProductionData::GetRequestBody( date ) );
    data := InterfaceLoginfo::CallInterface( interfaceDataset,loginfo );
    if( not isnull( data ) ){
      cnv1 := StringToDateTime::StandardConverter();
      cnv1.SetCustomConversion();
      cnv1.CustomFormatString( 'yyyy-MM-dd HH:mm:ss' );
      cnv2 := StringToDate::StandardConverter();
      cnv2.SetCustomConversion();
      cnv2.CustomFormatString( 'yyyy-MM-dd' );
      info( data.AsString() );
    }
  *]
}
_Main/BL/Type_ActualDailyProductionReport/_ROOT_Type_ActualDailyProductionData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ActualDailyProductionData
{
  #keys: '5[412672.1.61744606][412672.1.61744604][0.0.0][412672.1.61744605][412672.1.61744607]'
  BaseType: Object
  Description: 'Actual daily production report'
  StructuredName: 'ActualDailyProductionDatas'
}
_Main/BL/Type_FinishedEngineInventory/Attribute_Amount.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Amount
{
  #keys: '3[415136.0.931887050][415136.0.931887049][415136.0.931887051]'
  Description: '金额'
  ValueType: Real
}
_Main/BL/Type_FinishedEngineInventory/Attribute_BIPlace.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute BIPlace
{
  #keys: '3[415136.0.931887027][415136.0.931887026][415136.0.931887028]'
  Description: '统计分析的库存地点'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_Brand.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Brand
{
  #keys: '3[415136.0.932110085][415136.0.932110084][415136.0.932110086]'
  Description: '品牌'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_DDay.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute DDay
{
  #keys: '3[415136.0.931887060][415136.0.931887059][415136.0.931887061]'
  Description: '日期'
  ValueType: Date
}
_Main/BL/Type_FinishedEngineInventory/Attribute_DMonth.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute DMonth
{
  #keys: '3[415136.0.932110115][415136.0.932110114][415136.0.932110116]'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_DType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute DType
{
  #keys: '3[415136.0.932110105][415136.0.932110104][415136.0.932110106]'
  Description: 'SAP\\WZK\\ZT;SAP系统 é•¿æ˜¥å¤–族库 å¤§è¿žåœ¨é€”'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_DWeek.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute DWeek
{
  #keys: '3[415136.0.931887068][415136.0.931887067][415136.0.931887069]'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_EngineModularPlatform.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute EngineModularPlatform
{
  #keys: '3[415136.0.931887017][415136.0.931887016][415136.0.931887018]'
  Description: '发动机模块化平台'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_EngineType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute EngineType
{
  #keys: '3[415136.0.932110075][415136.0.932110074][415136.0.932110076]'
  Description: '发动机类型,横置、纵置'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_Fac.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Fac
{
  #keys: '3[415136.0.931887064][415136.0.931887063][415136.0.931887065]'
  Description: '工厂code'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_FourCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute FourCode
{
  #keys: '3[415136.0.932110043][415136.0.932110042][415136.0.932110044]'
  Description: '四位码'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_FullName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute FullName
{
  #keys: '3[415136.0.932110063][415136.0.932110062][415136.0.932110064]'
  Description: '完整型号名称'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_Price.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Price
{
  #keys: '3[415136.0.931887037][415136.0.931887036][415136.0.931887038]'
  Description: '单价'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_ReceiptPlace.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ReceiptPlace
{
  #keys: '3[415136.0.931886999][415136.0.931886998][415136.0.931887000]'
  Description: '收货地点'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_SpellName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute SpellName
{
  #keys: '3[415136.0.931887007][415136.0.931887006][415136.0.931887008]'
  Description: '简写型号名称'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/Attribute_Total.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Total
{
  #keys: '3[415136.0.932110095][415136.0.932110094][415136.0.932110096]'
  Description: '库存量'
  ValueType: Real
}
_Main/BL/Type_FinishedEngineInventory/Attribute_VehicleType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute VehicleType
{
  #keys: '3[415136.0.932110053][415136.0.932110052][415136.0.932110054]'
  Description: '发动机车型'
  ValueType: String
}
_Main/BL/Type_FinishedEngineInventory/DefaultValue_Fac.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Fac
}
_Main/BL/Type_FinishedEngineInventory/StaticMethod_GenerateData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GenerateData (
  InterfaceLoginfo owner,
  StringToDate cnv,
  JSON item
) as FinishedEngineInventory
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-17-2024 (created)
    four_code                  := guard( item.Get( "four_code").GetString(),"");
    vehicle_type               := guard( item.Get( "vehicle_type").GetString(),"");
    receipt_place              := guard( item.Get( "receipt_place").GetString(),"");
    full_name                  := guard( item.Get( "full_name").GetString(),"");
    spell_name                 := guard( item.Get( "spell_name").GetString(),"");
    engine_type                := guard( item.Get( "engine_type").GetString(),"");
    engine_modular_platform    := guard( item.Get( "engine_modular_platform").GetString(),"");
    brand                      := guard( item.Get( "brand").GetString(),"");
    bi_place                   := guard( item.Get( "bi_place").GetString(),"");
    price                      := guard( item.Get( "price").GetString(),"");
    total                      := guard( item.Get( "total").GetReal(),0);
    amount                     := guard( item.Get( "amount").GetReal(),0);
    dtype                      := guard( item.Get( "dtype").GetString(),"");
    fac                        := guard( item.Get( "fac").GetString(),"");
    dday                       := guard( item.Get( "dday").GetString(),"");
    dweek                      := guard( item.Get( "dweek").GetString(),"");
    dmonth                     := guard( item.Get( "dmonth").GetString(),"");
    msdata           := owner.FinishedEngineInventory( relnew, FourCode := four_code
                                                       , VehicleType := vehicle_type
                                                       , ReceiptPlace := receipt_place
                                                       , FullName := full_name
                                                       , SpellName := spell_name
                                                       , EngineType := engine_type
                                                       , EngineModularPlatform := engine_modular_platform
                                                       , Brand := brand
                                                       , BIPlace := bi_place
                                                       , Price := price
                                                       , Total := total
                                                       , Amount := amount
                                                       , DType := dtype
                                                       , Fac := fac
                                                       , DDay := cnv.Convert( dday )
                                                       , DWeek := dweek
                                                       , DMonth := dmonth );
    return msdata;
  *]
}
_Main/BL/Type_FinishedEngineInventory/StaticMethod_GetRequestBody.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetRequestBody (
  Date date
) as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-19-2024 (created)
    json := JSON::Object()
                  .Add( "inParam", JSON::Object().Add( "dday", date.Format( "Y-M2-D2" ) ) ).Build();
    requestbody := json.AsString();
    return requestbody
  *]
}
_Main/BL/Type_FinishedEngineInventory/StaticMethod_Synchronize.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Synchronize (
  InterfaceDataset owner,
  String executor
)
{
  TextBody:
  [*
    //// ç”„兰鸽 Jul-17-2024 (created)
    date    := Date::ActualDate();
    loginfo := owner.InterfaceLoginfo( relnew, ExecuteUser := executor
                                       , Name := Translations::InterfaceDataset_FinishedEngineInventory_Name()
                                       , InterfaceDateTime := DateTime::ActualTime()
                                       , Message := '库存数据(发动机成品库存)'
                                       , RequestBody := FinishedEngineInventory::GetRequestBody( date ) );
    data := InterfaceLoginfo::CallInterface( owner, loginfo );
    if( not isnull( data ) ){
      cnv2 := StringToDate::StandardConverter();
      cnv2.SetCustomConversion();
      cnv2.CustomFormatString( 'yyyy-MM-dd' );
    //  sadatalist := construct( ShippingActualDatas );
      for( seq := 0;seq < data.Size();seq++){
        item := data.Get(seq);
        FinishedEngineInventory::GenerateData( loginfo, cnv2, item );
    //    sadatalist.Add( sadata );
      }
    }
  *]
}
_Main/BL/Type_FinishedEngineInventory/_ROOT_Type_FinishedEngineInventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type FinishedEngineInventory
{
  #keys: '5[415136.0.932110025][415136.0.932110023][0.0.0][415136.0.932110024][415136.0.932110026]'
  BaseType: Object
  Description: '库存数据(发动机成品库存)'
  StructuredName: 'FinishedEngineInventorys'
}
_Main/BL/Type_InterfaceDataset/StaticMethod_GetResponseJsonData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetResponseJsonData (
  String result
) as owning JSON
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-17-2024 (created)
    resultJson     := JSON::Parse( result );
    //returnsuccess  := resultJson.Get( "success");
    //msg            := resultJson.Get( "msg");
    data           := resultJson.Get( "data");
    return &data;
  *]
}
_Main/BL/Type_InterfaceLoginfo/Attribute_ExecuteUser.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ExecuteUser
{
  #keys: '3[415136.0.917964722][415136.0.917964721][415136.0.917964723]'
  Description: '执行人'
  ValueType: String
}
_Main/BL/Type_InterfaceLoginfo/Attribute_FinishTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute FinishTime
{
  #keys: '3[415136.0.917964701][415136.0.917964700][415136.0.917964702]'
  Description: '完成时间'
  ValueType: DateTime
}
_Main/BL/Type_InterfaceLoginfo/Attribute_InterfaceDateTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute InterfaceDateTime
{
  #keys: '3[415136.0.917964734][415136.0.917964733][415136.0.917964735]'
  Description: '触发时间'
  ValueType: DateTime
}
_Main/BL/Type_InterfaceLoginfo/Attribute_Last.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Last
{
  #keys: '3[415136.0.917964713][415136.0.917964712][415136.0.917964714]'
  Description: '是否是最新的接口数据'
  ValueType: Boolean
}
_Main/BL/Type_InterfaceLoginfo/Attribute_Message.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Message
{
  #keys: '3[415136.0.917964728][415136.0.917964727][415136.0.917964729]'
  Description: '接口信息'
  ValueType: String
}
_Main/BL/Type_InterfaceLoginfo/Attribute_Name.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Name
{
  #keys: '3[415136.0.917964704][415136.0.917964703][415136.0.917964705]'
  Description: '接口名称'
  ValueType: String
}
_Main/BL/Type_InterfaceLoginfo/Attribute_RequestBody.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute RequestBody
{
  #keys: '3[415136.0.917964731][415136.0.917964730][415136.0.917964732]'
  Description: '接口入参'
  ValueType: String
}
_Main/BL/Type_InterfaceLoginfo/Attribute_Response.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Response
{
  #keys: '3[415136.0.917964710][415136.0.917964709][415136.0.917964711]'
  Description: '接口返回数据'
  ValueType: String
}
_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnMsg.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ReturnMsg
{
  #keys: '3[415136.0.917964719][415136.0.917964718][415136.0.917964720]'
  Description: '返回信息'
  ValueType: String
}
_Main/BL/Type_InterfaceLoginfo/Attribute_ReturnSuccess.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute ReturnSuccess
{
  #keys: '3[415136.0.917964737][415136.0.917964736][415136.0.917964738]'
  ValueType: Boolean
}
_Main/BL/Type_InterfaceLoginfo/Attribute_Success.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Success
{
  #keys: '3[415136.0.917964716][415136.0.917964715][415136.0.917964717]'
  ValueType: Boolean
}
_Main/BL/Type_InterfaceLoginfo/Attribute_TotalRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute TotalRow
{
  #keys: '3[415136.0.917964725][415136.0.917964724][415136.0.917964726]'
  Description: '总行数'
  ValueType: Number
}
_Main/BL/Type_InterfaceLoginfo/DefaultValue_Message.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Message
}
_Main/BL/Type_InterfaceLoginfo/DefaultValue_Name.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Name
}
_Main/BL/Type_InterfaceLoginfo/DefaultValue_Response.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: Response
}
_Main/BL/Type_InterfaceLoginfo/Method_UpdateLast.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
Method UpdateLast
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-22-2024 (created)
    if( this.Success() and this.ReturnSuccess() ){
      traverse( this,InterfaceDataset.InterfaceLoginfo,item,item.Last() = true and item.Name() = this.Name()){
        item.Last(false);
      }
      this.Last(true);
    }
  *]
}
_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallInterface.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CallInterface (
  InterfaceDataset owner,
  InterfaceLoginfo loginfo
) as owning JSON
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-22-2024 (created)
    address       := Translations::InterfaceDataset_Address();
    httpinterface := HTTPInterface::Create( address,80);
    try{
      if( loginfo.Name() = Translations::InterfaceDataset_ShippingActualData_Name() ){//发运实际数据
        httpinterface.URL( Translations::InterfaceDataset_ShippingActualData_URL() );
        httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
        httpinterface.PostMethod( true );
        httpinterface.AddHeader("Authorization",InterfaceLoginfo::CallToken( Translations::InterfaceDataset_ShippingActualData_Secret() ))
        httpinterface.Call( loginfo.RequestBody() );
        result := httpinterface.Result();
        loginfo.Response( result );
        loginfo.Success( true );
      } else if ( loginfo.Name() = Translations::InterfaceDataset_MachineStockData_Name() ){//库存数据(机加库存)
        httpinterface.URL( Translations::InterfaceDataset_MachineStockData_URL() );
        httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
        httpinterface.PostMethod( true );
        httpinterface.AddHeader("Authorization",InterfaceLoginfo::CallToken( Translations::InterfaceDataset_MachineStockData_Secret() ))
        httpinterface.Call( loginfo.RequestBody() );
        result := httpinterface.Result();
        loginfo.Response( result );
        loginfo.Success( true );
      } else if ( loginfo.Name() = Translations::InterfaceDataset_FinishedEngineInventory_Name() ){//库存数据(发动机成品库存)
        httpinterface.URL( Translations::InterfaceDataset_FinishedEngineInventory_URL() );
        httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
        httpinterface.PostMethod( true );
        httpinterface.AddHeader("Authorization",InterfaceLoginfo::CallToken( Translations::InterfaceDataset_FinishedEngineInventory_Secret() ))
        httpinterface.Call( loginfo.RequestBody() );
        result := httpinterface.Result();
        loginfo.Response( result );
        loginfo.Success( true );
      } else if( loginfo.Name() = Translations::InterfaceDataset_ActualDailyProductionData_Name() ){//生产实际数据
        httpinterface.URL( Translations::InterfaceDataset_ActualDailyProductionData_URL() );
        httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
        httpinterface.PostMethod( true );
        httpinterface.AddHeader("Authorization",InterfaceLoginfo::CallToken( Translations::InterfaceDataset_ActualDailyProductionData_Secret() ))
        httpinterface.Call( loginfo.RequestBody() );
        result := httpinterface.Result();
        loginfo.Response( result );
        loginfo.Success( true );
      }
    }onerror{
      loginfo.ReturnMsg( e.GeneralInformation() );
    }
    //后续公共处理
    loginfo.FinishTime( DateTime::ActualTime() );
    data             := JSON::Null().Build();
    if( loginfo.Success() ){
      resultJson     := JSON::Parse( loginfo.Response() );
      code           := resultJson.Get( "code" ).AsString();
      msg            := resultJson.Get( "message" ).AsString();
      data           := resultJson.Get( "data" );
      loginfo.ReturnMsg( msg );
      if( code = "200" ){
        total        := resultJson.Get( "dataSize" ).GetNumber();
        loginfo.ReturnSuccess( true );
        loginfo.TotalRow( total );
        loginfo.UpdateLast();
      }
    }
    return &data;
  *]
}
_Main/BL/Type_InterfaceLoginfo/StaticMethod_CallToken.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CallToken (
  String secret
) as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-22-2024 (created)
    address       := Translations::InterfaceDataset_Address();
    httpinterface := HTTPInterface::Create( address,80);
    httpinterface.URL( Translations::InterfaceDataset_Token_URL() + secret );
    httpinterface.MediaType( Translations::InterfaceDataset_ContentType() );
    httpinterface.PostMethod( false );
    httpinterface.Call();
    result := httpinterface.Result();
    resultJson     := JSON::Parse( result );
    token          := resultJson.Get( "access_token" ).GetString();
    return token;
  *]
}
_Main/BL/Type_InterfaceLoginfo/_ROOT_Type_InterfaceLoginfo.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type InterfaceLoginfo
{
  #keys: '5[415136.0.917964684][415136.0.917964682][0.0.0][415136.0.917964683][415136.0.917964685]'
  BaseType: Object
  StructuredName: 'InterfaceLoginfos'
}
_Main/BL/Type_LibCal_Event/Attribute_IsMultiple.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute IsMultiple
{
  #keys: '3[415136.0.918010824][415136.0.918010823][415136.0.918010825]'
  Description: '是否通过批量界面创建'
  ValueType: Boolean
}
_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI.qbl
@@ -41,55 +41,39 @@
  TextBody:
  [*
    //事件创建二开方法
    //info( startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, recurrenceInterval_i, patternType_i
    //      , patternDaily_IsEveryWeekday_i, periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i );
    //查询是否已有同名事件
    //查询是否已有同名在批量界面创建的事件s
    event := selectobject( owner_i, Event, event, event.Subject() = subject_i 
                     and event.StartTimeOfDay() = startTimeOfDay_i
                     and event.EndTimeOfDay() = endTimeOfDay_i
                     and event.EventType() = eventtype_i );
                           and event.EventType() = eventtype_i );
    //只有通过批量创建界面且已有同名事件进入下面操作
    if( ismultiple and not isnull( event ) ){
      startdate := startDate_i;
      enddate   := startDate_i;
      dates := construct( Dates );
      dates.Add( startDate_i );
      //获取旧事件的开始事件和结束事件,以及所有时间点
      traverse( event, Participation.ExplicitTimeInterval, eti ){
        if( startdate > eti.Start().Date() ){
          startdate := eti.Start().Date();
        }
        if( enddate < eti.Start().Date() ) {
          enddate := eti.Start().Date();
        }
        if( not exists( dates, Elements, e, e = eti.Start().Date() ) ){
          dates.Add( eti.Start().Date() );
      event.IsMultiple( true );
      lp        := event.LeadingParticipation();
      timezone  := lp.Calendar().GetTimeZone();
      starttime := startDate_i.DateTime( timezone ).AddAsPeriod( timezone, startTimeOfDay_i );
      endtime   := endDate_i.DateTime( timezone ).AddAsPeriod( timezone, endTimeOfDay_i );
      etis      := selectset( lp, Subscription.ExplicitTimeInterval, eti, true );
    //  startDate := starttime.Date( timezone );
    //  endDate   := endtime.Date( timezone ) - ifexpr( endtime = endtime.StartOfDay( timezone ), 1, 0 );
      leadingETI := selectobject( lp, ExplicitTimeInterval, eti, eti.Start() = starttime and eti.End() = endtime );
      if( isnull( leadingETI ) ){
        leadingETI := lp.CreateTimeInterval( starttime, endtime, event.Capacity() );
      }
      lp.AddSubscribers( subscribers_i, true );
      if( not isnull( leadingETI ) ){
        traverse( lp, Subscription, subscription, subscribers_i.Find( subscription.Calendar() ) >= 0 ){
          traverse( subscription, ExplicitTimeInterval, eti, etis.Find( eti ) < 0 ){
            eti.Delete();
          }
          subscribingETI := subscription.CreateTimeInterval( starttime, endtime, event.Capacity() );
          if( not isnull( subscribingETI ) ){
            subscribingETI.LeadingETI( relset, leadingETI );
          }
        }
      }
      //修改旧事件的间隔
      nrOfOccurrences_i := enddate - startdate + 1;
      startDate_i := startdate;
      endDate_i   := startdate;
      periodStartDate_i := startdate;
      periodEndDate_i := enddate;
    //  info( startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, recurrenceInterval_i, patternType_i
    //      , patternDaily_IsEveryWeekday_i, periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i );
      event := LibCal_Event::CreateUpdateFromUI( owner_i, event.LeadingParticipation(), subject_i, description_i, type_i, capacity_i, category_i, isDefault_i,
                                      startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i,
                                      isRecurring_i, recurrenceInterval_i,
                                      patternType_i, patternDaily_IsEveryWeekday_i, patternWeekly_Weekdays_i,
                                      patternMonthly_IsDay_i, patternMonthly_Day_i, patternMonthly_WeekOfMonth_i, patternMonthly_DayOfWeek_i,
                                      patternYearly_IsDate_i, patternYearly_Month_i, patternYearly_Day_i, patternYearly_WeekOfMonth_i, patternYearly_DayOfWeek_i,
                                      periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i, subscribers_i );
      //删掉不需要的时间点
      timeIntervals := construct( LibCal_ExplicitTimeIntervals );
      traverse( event, Participation.ExplicitTimeInterval, eti ){
    //    info( '------------------------------', eti.Start(), eti.End(), exists( dates, Elements, e, e = eti.Start().Date() ), '------------------', dates.Find( eti.Start().Date() ) );
        if( dates.Find( eti.Start().Date() ) < 0 ){
          timeIntervals.Add( eti );
        }
      }
      LibCal_ExplicitTimeInterval::Delete( timeIntervals, true );
    } else {
      event := LibCal_Event::CreateUpdateFromUI( owner_i, participation_i, subject_i, description_i, type_i, capacity_i, category_i, isDefault_i, 
                                      startDate_i, startTimeOfDay_i, endDate_i, endTimeOfDay_i, isAllDay_i, 
@@ -97,8 +81,9 @@
                                      patternType_i, patternDaily_IsEveryWeekday_i, patternWeekly_Weekdays_i, 
                                      patternMonthly_IsDay_i, patternMonthly_Day_i, patternMonthly_WeekOfMonth_i, patternMonthly_DayOfWeek_i,
                                      patternYearly_IsDate_i, patternYearly_Month_i, patternYearly_Day_i, patternYearly_WeekOfMonth_i, patternYearly_DayOfWeek_i,
                                      periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i, subscribers_i );
                                      periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i, subscribers_i, ismultiple );
    }
    if( not isnull( event ) ){
      event.EventType( relset, eventtype_i );
    }
_Main/BL/Type_LibCal_Event/StaticMethod_CreateUpdateFromUI0.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
Quintiq file version 2.0
#parent: #root
StaticMethod CreateUpdateFromUI (
  LibCal_Calendar owner_i,
  LibCal_LeadingParticipation participation_i,
  String subject_i,
  String description_i,
  String type_i,
  Real capacity_i,
  LibCal_EventCategory category_i,
  Boolean isDefault_i,
  Date startDate_i,
  Duration startTimeOfDay_i,
  Date endDate_i,
  Duration endTimeOfDay_i,
  Boolean isAllDay_i,
  Boolean isRecurring_i,
  Number recurrenceInterval_i,
  String patternType_i,
  Boolean patternDaily_IsEveryWeekday_i,
  String patternWeekly_Weekdays_i,
  Boolean patternMonthly_IsDay_i,
  Number patternMonthly_Day_i,
  String patternMonthly_WeekOfMonth_i,
  String patternMonthly_DayOfWeek_i,
  Boolean patternYearly_IsDate_i,
  Number patternYearly_Month_i,
  Number patternYearly_Day_i,
  String patternYearly_WeekOfMonth_i,
  String patternYearly_DayOfWeek_i,
  String periodType_i,
  Date periodStartDate_i,
  Number nrOfOccurrences_i,
  Date periodEndDate_i,
  LibCal_Calendars subscribers_i,
  Boolean is_multiple
) as LibCal_Event
{
  Description: 'Create and/or update an Event and its LeadingParticipation, based on information from the UI.'
  TextBody:
  [*
    event    := null( LibCal_Event );
    leadPart := participation_i;
    timezone := owner_i.GetTimeZone();
    if( isnull( leadPart ) )
    {
      // Create a new Event. This also creates a new LeadingParticipation.
      event    := LibCal_Event::Create( owner_i, "", Date::Today( timezone ), 1 );
      leadPart := event.LeadingParticipation();
    }
    else
    {
      // Get the event of the participation.
      event := leadPart.Event();
    }
    if( is_multiple ){
      event.IsMultiple( is_multiple );
    }
    // Update the event...
    duration := endDate_i.Add( timezone, endTimeOfDay_i ) - startDate_i.Add( timezone, startTimeOfDay_i );
    isFromUI := true;
    event.Update( subject_i, description_i, type_i, capacity_i, isDefault_i, startTimeOfDay_i, endTimeOfDay_i, duration, isAllDay_i, isFromUI );
    // Changing the category is a different kind of change, with no impact on the event itself.
    event.EventCategory( relset, category_i );
    // ...and its recurrence pattern.
    event.UpdateRecurrencePattern( isRecurring_i, patternType_i, recurrenceInterval_i,
                                   patternDaily_IsEveryWeekday_i,
                                   patternWeekly_Weekdays_i,
                                   patternMonthly_IsDay_i, patternMonthly_Day_i,  patternMonthly_WeekOfMonth_i, patternMonthly_DayOfWeek_i,
                                   patternYearly_IsDate_i, patternYearly_Month_i, patternYearly_Day_i, patternYearly_WeekOfMonth_i, patternYearly_DayOfWeek_i );
    // Update the participation...
    leadPart.Update( startDate_i, endDate_i );
    // ...and its recurrence period.
    leadPart.UpdateRecurrencePeriod( isRecurring_i, periodType_i, periodStartDate_i, nrOfOccurrences_i, periodEndDate_i );
    // Effectuate the changes.
    leadPart.UpdateCalendarWhenChanged();
    // Set the subscribers. Must be done *after* UpdateCalendar.
    leadPart.SetSubscribers( subscribers_i );
    // Call a post-processing method that can be extended to implement additional logic.
    event.OnCreateUpdateFromUI();
    return event;
  *]
}
_Main/BL/Type_LibCal_Event/StaticMethod_ValidDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: #root
StaticMethod ValidDate (
  output String feedback_o,
  MacroPlan owner,
  DateTime startdate,
  DateTime endtime
) declarative remote as Boolean
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-26-2024 (created)
    feedback_o := '';
    if( startdate > endtime ){
      feedback_o := Translations::MP_LibCal_Event_ValidDatePeriod();
    }
    if( not exists( owner, Period_MP, period, not period.IsHistorical()
                and period.TimeUnit() = Translations::MP_GlobalParameters_Day()
                and period.StartDate() = startdate.Date()
                and ( period.EndDate() = endtime.Date() or period.StartDate() = endtime.Date() ) ) ){
      feedback_o := Translations::MP_LibCal_Event_ValidDate();
    }
    return feedback_o = '';
  *]
}
_Main/BL/Type_LibCal_ExplicitTimeInterval/StaticMethod_Delete.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Delete (
  LibCal_ExplicitTimeIntervals timeIntervals_i
)
{
  TextBody:
  [*
    traverse( timeIntervals_i, Elements, eti ){
      leadingeti := eti.LeadingETI();
      if( leadingeti.SubscribingETI( relsize ) = 1 ){
        part     := leadingeti.Participation();
        if( part.ExplicitTimeInterval( relsize ) = 1 ){
          part.Event().Delete();
        }
        if( not isnull( leadingeti ) ){
          leadingeti.Delete();
        }
      }
      if( not isnull( leadingeti ) ){
        eti.Delete();
      }
    }
  *]
}
_Main/BL/Type_LibCal_ExplicitTimeInterval/_ROOT_Type_LibCal_ExplicitTimeInterval.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type LibCal_ExplicitTimeInterval #extension
{
}
_Main/BL/Type_LibCal_SubscriberEventColumn/Attribute_TimeUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute TimeUnit
{
  #keys: '3[415136.0.941300421][415136.0.941300420][415136.0.941300422]'
  Description: '时间类型'
  ValueType: String
}
_Main/BL/Type_LibCal_SubscriberEventColumn/Method_FilterByDatePeriod.qbl
@@ -2,7 +2,8 @@
#parent: #root
Method FilterByDatePeriod (
  Date start,
  Date end
  Date end,
  String timeunit
) declarative remote as Boolean
{
  TextBody:
@@ -10,7 +11,7 @@
    // ç”„兰鸽 May-29-2024 (created)
    value := false;
    //info( this.Index(), this.LibCal_SubscriberEventTable().Name(), this.Period(), start, end );
    if( this.Index() < 2 or ( this.Period() >= start and this.Period() <= end ) ){
    if( this.Period() >= start and this.Period() <= end and this.TimeUnit() = timeunit ){
        value := true;
    }
    
_Main/BL/Type_LibCal_SubscriberEventColumn/Method_GetCellByTimeUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: #root
Method GetCellByTimeUnit (
  LibCal_SubscriberEventRow row,
  String desc
) as LibCal_SubscriberEventCell
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-26-2024 (created)
    cell := selectobject( this, LibCal_SubscriberEventCell, cell, cell.LibCal_SubscriberEventRow() = row );
    if( isnull( cell ) ){
      cell := this.LibCal_SubscriberEventCell( relnew, Value := '0'
                                                     , Description := desc );
      row.LibCal_SubscriberEventCell( relinsert, cell );
    }
    return cell;
  *]
}
_Main/BL/Type_LibCal_SubscriberEventRow/Attribute_Name.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Name
{
  #keys: '3[415136.0.918010439][415136.0.918010438][415136.0.918010440]'
  Description: '产线In事件'
  ValueType: String
}
_Main/BL/Type_LibCal_SubscriberEventRow/Function_CalcName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcName
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-23-2024 (created)
    value := this.Subscriber().Concat( " in " ).Concat( this.Event() );
    this.Name( value );
  *]
}
_Main/BL/Type_LibCal_SubscriberEventRow/Method_GetTimeByTimeUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
Quintiq file version 2.0
#parent: #root
Method GetTimeByTimeUnit (
  DateTime starttime,
  DateTime starttimetmp,
  String timeunit
) as Date
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-26-2024 (created)
    time := starttime.Date();
    if( starttime = starttimetmp ){
      if ( timeunit = Translations::MP_GlobalParameters_Week() ){
        time := starttime.StartOfWeek().Date();
      } else if ( timeunit = Translations::MP_GlobalParameters_Month() ){
        time := starttime.StartOfMonth().Date();
      }
    }
    return time;
  *]
}
_Main/BL/Type_LibCal_SubscriberEventRow/Method_InitializeDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
Quintiq file version 2.0
#parent: #root
Method InitializeDate (
  LibCal_SubscriberEventTable table,
  DateTime starttime,
  DateTime endtime,
  String desc
)
{
  TextBody:
  [*
    // ç”„兰鸽 May-29-2024 (created)
    startTime     := starttime;
    nextweektime  := starttime;
    nextmonthtime := starttime;
    while( startTime < endtime ){
    //for(  startTime := starttime; startTime < endtime; startTime := startTime.StartOfNextDay() ){
      //天
      daytime         := this.GetTimeByTimeUnit( starttime, startTime, Translations::MP_GlobalParameters_Day() );
      daycolumn       := table.GetColumnByTimeUnit( table, daytime, Translations::MP_GlobalParameters_Day() );
      daycell         := daycolumn.GetCellByTimeUnit( this, desc );
      dayvalue        := [Real]daycell.Value();
      if( startTime.StartOfNextDay() > endtime ){
        duration      := endtime - startTime;
        dayvalue      := dayvalue + duration.HoursAsReal();
        daycell.Period( relnew, Start := startTime.Format( 'M/D/Y H:m' ), End := endtime.Format( 'M/D/Y H:m' ) );
      }else{
        duration      := startTime.StartOfNextDay() - startTime;
        dayvalue      := dayvalue + duration.HoursAsReal();
        daycell.Period( relnew, Start := startTime.Format( 'M/D/Y H:m' ), End := startTime.StartOfNextDay().Format( 'M/D/Y H:m' ) );
      }
      daycell.Value( [String]dayvalue );
      //周
      if( nextweektime = startTime ){
        weektime      := this.GetTimeByTimeUnit( starttime, startTime, Translations::MP_GlobalParameters_Week() );
        weekcolumn    := table.GetColumnByTimeUnit( table, weektime, Translations::MP_GlobalParameters_Week() );
        weekcell      := weekcolumn.GetCellByTimeUnit( this, desc );
        weekvalue     := [Real]weekcell.Value();
        if( startTime.StartOfNextWeek() > endtime ){
          duration    := endtime - startTime;
          weekvalue   := weekvalue + duration.HoursAsReal();
          weekcell.Period( relnew, Start := startTime.Format( 'M/D/Y H:m' ), End := endtime.Format( 'M/D/Y H:m' ) );
        }else{
          duration    := startTime.StartOfNextWeek() - startTime;
          weekvalue   := weekvalue + duration.HoursAsReal();
          weekcell.Period( relnew, Start := startTime.Format( 'M/D/Y H:m' ), End := startTime.StartOfNextWeek().Format( 'M/D/Y H:m' ) );
        }
        weekcell.Value( [String]weekvalue );
        nextweektime := startTime.StartOfNextWeek();
      }
    //  info( '-----------------------------1------------------------', nextmonthtime, startTime, nextweektime );
      //月
      if( nextmonthtime = startTime ){
        monthtime     := this.GetTimeByTimeUnit( starttime, startTime, Translations::MP_GlobalParameters_Month() );
        monthcolumn   := table.GetColumnByTimeUnit( table, monthtime, Translations::MP_GlobalParameters_Month() );
        monthcell     := monthcolumn.GetCellByTimeUnit( this, desc );
        info( nextmonthtime, startTime, monthtime, isnull( monthcolumn ), isnull( monthcell ) );
        monthvalue    := [Real]monthcell.Value();
        if( startTime.StartOfNextMonth() > endtime ){
          duration    := endtime - startTime;
          monthvalue  := monthvalue + duration.HoursAsReal();
          monthcell.Period( relnew, Start := startTime.Format( 'M/D/Y H:m' ), End := endtime.Format( 'M/D/Y H:m' ) );
        }else{
          duration    := startTime.StartOfNextMonth() - startTime;
          monthvalue  := monthvalue + duration.HoursAsReal();
          monthcell.Period( relnew, Start := startTime.Format( 'M/D/Y H:m' ), End := startTime.StartOfNextMonth().Format( 'M/D/Y H:m' ) );
        }
        monthcell.Value( [String]monthvalue );
        nextmonthtime := startTime.StartOfNextMonth();
      }
      startTime := startTime.StartOfNextDay();
    }
  *]
}
_Main/BL/Type_LibCal_SubscriberEventTable/Method_GetColumnByTimeUnit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: #root
Method GetColumnByTimeUnit (
  LibCal_SubscriberEventTable table,
  Date time,
  String timeunit
) as LibCal_SubscriberEventColumn
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-26-2024 (created)
    column := selectobject( table, LibCal_SubscriberEventColumn, column, column.Name() = time.Format( 'M/D/Y' ) );
    if( isnull( column ) ){
      column := table.LibCal_SubscriberEventColumn( relnew, Name := time.Format( 'M/D/Y' ), Period := time, TimeUnit := timeunit );
    }
    return column;
  *]
}
_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeDay.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeMonth.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeTable.qbl
@@ -8,20 +8,10 @@
  [*
    // ç”„兰鸽 May-28-2024 (created)
    rownr                 := this.LibCal_SubscriberEventRow( relsize );
    subscribercolumn      := selectobject( this, LibCal_SubscriberEventColumn, column, column.RowName() = 'Line' );
    if( isnull( subscribercolumn ) ){
      subscribercolumn := this.LibCal_SubscriberEventColumn( relnew, RowName := 'Line' );
    }
    eventcolumn := selectobject( this, LibCal_SubscriberEventColumn, column, column.RowName() = 'Event' );
    if( isnull( eventcolumn ) ){
      eventcolumn := this.LibCal_SubscriberEventColumn( relnew, RowName := 'Event' );
    }
    
    traverse( subscribers, Elements, subscriber ){
    //  info( '------------------------', subscriber.CalendarID(), subscriber.CalendarType() );
    //  traverse( subscriber,Participation.astype( LibCal_Subscription ).LeadingParticipation, participation ){
      traverse( subscriber,Participation.astype( LibCal_Subscription ).LeadingParticipation, participation, participation.Event().EventCategory().Name() = 'Unavailable' ){
    //    info( '---------------1---------', participation.Event().Subject(), '------', participation.Event().EventCategory().Name() );
        event := participation.Event();
        
        row := selectobject( this, LibCal_SubscriberEventRow, row, row.Subscriber() = subscriber.CalendarID() 
@@ -34,32 +24,12 @@
                                                 Event := event.Subject(), 
                                                 EventType := event.EventType().Name() );
          
          subscribercell := subscribercolumn.LibCal_SubscriberEventCell( relnew, Value := row.Subscriber() );
          if( counter( this, LibCal_SubscriberEventRow, linerow, linerow.Subscriber() = row.Subscriber() ) <> 1 ){
            subscribercell.Value( '' );
          }
          row.LibCal_SubscriberEventCell( relinsert, subscribercell );
          eventcell := eventcolumn.LibCal_SubscriberEventCell( relnew, Value := row.Event() );
          row.LibCal_SubscriberEventCell( relinsert, eventcell );
          rownr := rownr + 1;
        }
        
        traverse( participation, ExplicitTimeInterval, eti ){
          info( eti.Start(), eti.End(), eti.DefinitionName() );
          if( this.ID() = 'Day' ){
            this.InitializeDay( this, row, eti.Start(), eti.End(), event.Description() );
          }else if( this.ID() = 'Week' ){
            this.InitializeWeek( this, row, eti.Start(), eti.End(), event.Description() );
          }else{
            this.InitializeMonth( this, row, eti.Start(), eti.End(), event.Description() );
          }
          row.InitializeDate( this, eti.Start(), eti.End(), event.Description() );
        }
    //
    //    endTime     := participation.EndDate().DateTime( timezone ).AddAsPeriod( timezone, event.EndTimeOfDay() );
    //    startTime   := participation.StartDate().DateTime( timezone ).AddAsPeriod( timezone, event.StartTimeOfDay() );
    
      }
    }
_Main/BL/Type_LibCal_SubscriberEventTable/Method_InitializeWeek.qbl
ÎļþÒÑɾ³ý
_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_Export.qbl
@@ -1,66 +1,81 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Export (
  LibCal_SubscriberEventTable table
  LibCal_SubscriberEventColumns columns,
  LibCal_SubscriberEventRows rows
) as BinaryValue
{
  TextBody:
  [*
    // ç”„兰鸽 May-30-2024 (created)
    // lihongji Jun-8-2023 (created)
    returnBinaryData := BinaryData::Construct();
    tableGroupHandle := TableGroupHandle::Create( "" );
    xmlDOMI := XMLDOMImplementation::Create();
    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + LibCal_SubscriberEventTable::GetDefaultName() + '</name></table>' );
    
    xmlImpl := XMLDOMImplementation::Create();
    xmlDoc := xmlImpl.CreateDocument();
    xmlSeri := xmlImpl.CreateSerializer();
    tableElement := xmlDOM.GetElementByTagName( "table", 0 );
    //产线
    subscribercolumnelement := xmlDOM.CreateElement( "column" );
    subscribernameelement   := xmlDOM.CreateElement( "name" );
    subscribertypeelement   := xmlDOM.CreateElement( "type" );
    subscribernameelement.TextContent( '产线' );
    subscribertypeelement.TextContent( "String" );
    subscribercolumnelement.AppendChild( subscribernameelement );
    subscribercolumnelement.AppendChild( subscribertypeelement );
    //事件
    eventcolumnelement := xmlDOM.CreateElement( "column" );
    eventnameelement   := xmlDOM.CreateElement( "name" );
    eventtypeelement   := xmlDOM.CreateElement( "type" );
    eventnameelement.TextContent( '事件' );
    eventtypeelement.TextContent( "String" );
    eventcolumnelement.AppendChild( eventnameelement );
    eventcolumnelement.AppendChild( eventtypeelement );
    tableElement.AppendChild( subscribercolumnelement );
    tableElement.AppendChild( eventcolumnelement );
    columns := selectsortedset( columns, Elements, column, column.Period() );
    isfirst := true;
    traverse ( columns, Elements, 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 );
      
    xmlTable := xmlDoc.CreateElement( "table" );
    xmlTableName := xmlDoc.CreateElement( "name" );
    xmlTableName.TextContent( table.Name() );
    xmlTable.AppendChild( xmlTableName );
    traverse ( table, LibCal_SubscriberEventColumn, column ) {
      xmlColumn := xmlDoc.CreateElement( "column" );
      xmlColumnName := xmlDoc.CreateElement( "name" );
      if( column.Index() = 0 ){
        xmlColumnName.TextContent( '产线' );
      }else if(column.Index() = 1 ){
        xmlColumnName.TextContent( '事件' );
      }else{
        xmlColumnName.TextContent( column.Name() );
      }
      xmlColumn.AppendChild( xmlColumnName );
      xmlColumnType := xmlDoc.CreateElement( "type" );
      xmlColumnType.TextContent( "String" );
      xmlColumn.AppendChild( xmlColumnType );
      rowTotal := table.LibCal_SubscriberEventRow( relsize );
      for ( i := 0; i < rowTotal; i++ ) {
        cell := select( column, LibCal_SubscriberEventCell, cell, cell.LibCal_SubscriberEventRow().RowNr() = i );
        row := cell.LibCal_SubscriberEventRow();
        xmlCell := xmlDoc.CreateElement( "cell" );
        if( column.Index() = 0 ){
          xmlCell.SetAttribute( "value", row.Subscriber() );
        }else if(column.Index() = 1 ){
          xmlCell.SetAttribute( "value", row.Event() );
        }else{
          xmlCell.SetAttribute( "value", cell.Value() );
      cells := selectsortedset( column, LibCal_SubscriberEventCell, cell, rows.Find( cell.LibCal_SubscriberEventRow() ) > -1, cell.LibCal_SubscriberEventRow().RowNr() );
      traverse ( cells, Elements, c ) {
        if( isfirst ){
          row := c.LibCal_SubscriberEventRow();
          //subscriber
          subscribercellElement := xmlDOM.CreateElement( "cell" );
          subscribercellElement.SetAttribute( "value", row.Subscriber() );
          subscribercolumnelement.AppendChild( subscribercellElement );
          //event
          eventcellElement := xmlDOM.CreateElement( "cell" );
          eventcellElement.SetAttribute( "value", row.Event() );
          eventcolumnelement.AppendChild( eventcellElement );
        }
        xmlColumn.AppendChild( xmlCell );
        cellElement := xmlDOM.CreateElement( "cell" );
        cellElement.SetAttribute( "value", c.Value() );
        columnelement.AppendChild( cellElement );
      }
      xmlTable.AppendChild( xmlColumn );
      tableElement.AppendChild( columnelement );
      isfirst := false;
    }
      
    xmlDoc.AppendChild( xmlTable );
    xmlStr := xmlSeri.WriteToString( xmlDoc );
    tableHandle := TableHandle::ImportXML( BinaryValue::Construct( xmlStr ) );
    xmlString := xmlDOMI.CreateSerializer().WriteToString( xmlDOM )
    //info( xmlString );
    tableGroupHandle := TableGroupHandle::Create( LibCal_SubscriberEventTable::GetDefaultName() );
    tableHandle      := TableHandle::ImportXML( BinaryValue::Construct( xmlString ) );
    tableGroupHandle.Add( tableHandle );
    //}
    
    returnBinaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
    binaryData := XLS::SaveTableGroupToBinaryData( tableGroupHandle, true );
    
    return returnBinaryData.AsBinaryValue();
    return binaryData.AsBinaryValue();
  *]
}
_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_GetDefaultName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetDefaultName () as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-23-2024 (created)
    return 'Calendar unavailable event';
  *]
}
_Main/BL/Type_LibCal_SubscriberEventTable/StaticMethod_InitializeTable.qbl
@@ -10,11 +10,9 @@
    // ç”„兰鸽 May-28-2024 (created)
    owner.LibCal_SubscriberEventTable( relflush );
    if( owner.LibCal_SubscriberEventTable( relsize ) < 1 ){
      owner.LibCal_SubscriberEventTable( relnew, ID := 'Day', Name := 'Day' );
      owner.LibCal_SubscriberEventTable( relnew, ID := 'Week', Name := 'Week' );
      owner.LibCal_SubscriberEventTable( relnew, ID := 'Month', Name := 'Month' );
      owner.LibCal_SubscriberEventTable( relnew, ID := LibCal_SubscriberEventTable::GetDefaultName(), Name := LibCal_SubscriberEventTable::GetDefaultName() );
    }
    info('-----------------------------', owner.LibCal_SubscriberEventTable( relsize ), subscribers.Size() );
    traverse( owner, LibCal_SubscriberEventTable, table ){
      table.InitializeTable( subscribers );
    }
_Main/BL/Type_LibCal_Subscription/Method_CopyOccurrences#486.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
Quintiq file version 2.0
#parent: #root
Method CopyOccurrences #extension
{
  TextBody:
  [*
    timezone := this.Calendar().GetTimeZone();
    if( this.IsRecurring() and not this.LeadingParticipation().Event().IsMultiple() )
    {
      // If the participation ends at the start of a day, this is the start of the next day.
      // In that case, one day should be subtracted in order to not take the next day into account.
      endDate := this.LeadingParticipation().RecurrencePeriod().EndDate()
               - ifexpr( this.LeadingParticipation().EndTime() = this.LeadingParticipation().EndTime().StartOfDay( timezone ), 1, 0 );
      this.CopyOccurrences( this.LeadingParticipation().RecurrencePeriod().StartDate(), endDate );
    }
    else
    {
      // In case of a non-recurring event, there is only one occurrence (i.e. ExplicitTimeInterval),
      // with an arbitrary Start and End. The Start and End of this occurrence must be used in order to have it copied to the subscription.
      leadingETI := select( this.LeadingParticipation(), ExplicitTimeInterval, eti, true, true );
      if( not isnull( leadingETI ) )
      {
        endDate := leadingETI.End().Date( timezone )
                 - ifexpr( leadingETI.End() = leadingETI.End().StartOfDay( timezone ), 1, 0 );
        this.CopyOccurrences( leadingETI.Start().Date( timezone ), endDate );
      }
    }
  *]
}
_Main/BL/Type_LibCal_Subscription/_ROOT_Type_LibCal_Subscription.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization LibCal_Subscription #extension
{
}
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateComprehensiveHoursReport#1.qbl
@@ -12,16 +12,16 @@
    // rislai Jul-9-2024 (created)
    table := owner.LocalTable( relnew,Name := "综合工时制报表");
    
    //column1  := table.LocalColumn( relnew,Name := "工厂" ,Index := 1);
    //column2  := table.LocalColumn( relnew,Name := "产线" ,Index := 2);
    //column1  := table.LocalColumn( relnew,Name := "工厂" ,CustomIndex := 1);
    //column2  := table.LocalColumn( relnew,Name := "产线" ,CustomIndex := 2);
    
    column3  := table.LocalColumn( relnew,Name := "生产天数" ,Index := 3);
    column3  := table.LocalColumn( relnew,Name := "生产天数" ,CustomIndex := 3);
    
    column4  := table.LocalColumn( relnew,Name := "加班/欠工时长" ,Index := 4);
    column5  := table.LocalColumn( relnew,Name := "节假日加班时长" ,Index := 6);
    column4  := table.LocalColumn( relnew,Name := "加班/欠工时长" ,CustomIndex := 4);
    column5  := table.LocalColumn( relnew,Name := "节假日加班时长" ,CustomIndex := 6);
    
    column6  := table.LocalColumn( relnew,Name := "加班/欠工费" ,Index := 8);
    column7 := table.LocalColumn( relnew,Name := "节假日加班费" ,Index := 10);
    column6  := table.LocalColumn( relnew,Name := "加班/欠工费" ,CustomIndex := 8);
    column7 := table.LocalColumn( relnew,Name := "节假日加班费" ,CustomIndex := 10);
    
    units := selectset( shiftPlans,Elements.UnitPeriodTime.Unit,unit,true );
    
_Main/BL/Type_LocalCell_Default/StaticMethod_GenerateStandardHoursReport.qbl
@@ -12,20 +12,20 @@
    // rislai Jul-4-2024 (created)
    table := owner.LocalTable( relnew,Name := "标准工时制报表");
    
    //column1  := table.LocalColumn( relnew,Name := "工厂" ,Index := 1);
    //column2  := table.LocalColumn( relnew,Name := "产线" ,Index := 2);
    //column1  := table.LocalColumn( relnew,Name := "工厂" ,CustomIndex := 1);
    //column2  := table.LocalColumn( relnew,Name := "产线" ,CustomIndex := 2);
    
    column3  := table.LocalColumn( relnew,Name := "生产天数" ,Index := 3);
    column3  := table.LocalColumn( relnew,Name := "生产天数" ,CustomIndex := 3);
    
    column4  := table.LocalColumn( relnew,Name := "平日加班时长" ,Index := 4);
    column5  := table.LocalColumn( relnew,Name := "休息日加班时长" ,Index := 5);
    column6  := table.LocalColumn( relnew,Name := "节假日加班时长" ,Index := 6);
    column7  := table.LocalColumn( relnew,Name := "欠工时长" ,Index := 7);
    column4  := table.LocalColumn( relnew,Name := "平日加班时长" ,CustomIndex := 4);
    column5  := table.LocalColumn( relnew,Name := "休息日加班时长" ,CustomIndex := 5);
    column6  := table.LocalColumn( relnew,Name := "节假日加班时长" ,CustomIndex := 6);
    column7  := table.LocalColumn( relnew,Name := "欠工时长" ,CustomIndex := 7);
    
    column8  := table.LocalColumn( relnew,Name := "平日加班费" ,Index := 8);
    column9  := table.LocalColumn( relnew,Name := "休息日加班费" ,Index := 9);
    column10 := table.LocalColumn( relnew,Name := "节假日加班费" ,Index := 10);
    column11 := table.LocalColumn( relnew,Name := "欠工费" ,Index := 11);
    column8  := table.LocalColumn( relnew,Name := "平日加班费" ,CustomIndex := 8);
    column9  := table.LocalColumn( relnew,Name := "休息日加班费" ,CustomIndex := 9);
    column10 := table.LocalColumn( relnew,Name := "节假日加班费" ,CustomIndex := 10);
    column11 := table.LocalColumn( relnew,Name := "欠工费" ,CustomIndex := 11);
    
    units := selectset( shiftPlans,Elements.UnitPeriodTime.Unit,unit,true );
    
_Main/BL/Type_LocalCell_DemandComparison/StaticMethod_GenerateColumnIndex.qbl
@@ -30,7 +30,7 @@
          // 2023/01/01
          index := [Number]generalColumn.Name().ReplaceAll( "/", "" );
        }
        column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),Index := index );
        column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),CustomIndex := index );
        columns.Add( column );
        columnTree.Root().AddChild( tempHandle,columns.Size() - 1 );
      }
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Actual.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Actual
{
  #keys: '3[412672.1.64753749][412672.1.64753748][412672.1.64753750]'
  ValueType: Real
}
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_BaseVersionValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute BaseVersionValue
{
  #keys: '3[412672.1.64753763][412672.1.64753762][412672.1.64753764]'
  ValueType: String
}
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_CompareVersionValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CompareVersionValue
{
  #keys: '3[412672.1.64753752][412672.1.64753751][412672.1.64753753]'
  ValueType: String
}
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Gap.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Gap
{
  #keys: '3[412672.1.64753755][412672.1.64753754][412672.1.64753756]'
  ValueType: Real
}
_Main/BL/Type_LocalCell_ProductionComparison/Attribute_Plan.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Plan
{
  #keys: '3[412672.1.64753743][412672.1.64753742][412672.1.64753744]'
  ValueType: Real
}
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_BaseVersionValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: BaseVersionValue
}
_Main/BL/Type_LocalCell_ProductionComparison/DefaultValue_CompareVersionValue.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  TargetAttribute: CompareVersionValue
}
_Main/BL/Type_LocalCell_ProductionComparison/Function_CalcGap.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
Quintiq file version 2.0
#parent: #root
Function CalcGap
{
  TextBody:
  [*
    // rislai Jun-21-2024 (created)
    value := this.Plan() - this.Actual();
    this.Gap( value );
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/Method_GetAttributeByName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
Quintiq file version 2.0
#parent: #root
Method GetAttributeByName (
  String attributeName
) const declarative as String
{
  TextBody:
  [*
    // rislai Jun-21-2024 (created)
    value := "";
    if( attributeName = "BaseVersion" ){
       if( not this.LocalColumn().IsAttrbuteColumn() ){
         value := this.Plan().Format( "N(Dec)" );
       }
    }
    if( attributeName = "CompareVersion" ){
      if( not this.LocalColumn().IsAttrbuteColumn() ){
        value := this.Actual().Format( "N(Dec)" );
      }
    }
    if( attributeName = "Gap" ){
      if( not this.LocalColumn().IsAttrbuteColumn() ){
        value := this.Gap().Format( "N(Dec)" );
      }
    }
    if( attributeName = "BaseVersionValue" ){
      if( not this.LocalColumn().IsAttrbuteColumn() ){
        value := "0";
      }else{
        value := this.BaseVersionValue();
      }
    }
    if( attributeName = "CompareVersionValue" ){
      if( not this.LocalColumn().IsAttrbuteColumn() ){
        value := "0";
      }else{
        value := this.CompareVersionValue();
      }
    }
    return value;
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_AsyncExport.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
Quintiq file version 2.0
#parent: #root
StaticMethod AsyncExport (
  RecycleBin recycleBin,
  const constcontent LocalRows rows,
  const constcontent LocalColumns columns,
  const MacroPlan macroPlan
)
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    sortColumns := selectsortedset( columns,Elements,column,true,column.Index());
    attributeNames := LocalCell_DemandComparison::GetAttributeNames();
    columnstring := emit( "" );
    flag := true;
    traverse( sortColumns,Elements,sortColumn ){
      if( flag ){
        attributeXML := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames,"attribute",macroPlan );
        columnstring := columnstring.Merge( attributeXML )
        flag := false;
      }
      cellxml := rows -> LocalCell_DemandComparison::GetColumnXML( sortColumn,attributeNames ,"data",macroPlan );
      columnstring := columnstring.Merge( cellxml);
    }
    columnstring -> GroupAll() -> ExportXMLManager::AwaitLocalTableXMLData( recycleBin,guard( rows.Element(0).LocalTable().Name(),"Sheet1") );
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_Compared.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,118 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Compared (
  RecycleBin recycleBin,
  String baseVersionPath,
  String compareVersionPath,
  String baseVersionName,
  String compareVersionName
) as LocalTable
{
  TextBody:
  [*
    // rislai Jun-20-2024 (created)
    localTable := recycleBin.LocalTable( relnew,Name := baseVersionName + "__" + compareVersionName );
    baseVersionFile := OSFile::Construct();
    compareVersionFile := OSFile::Construct();
    try {
      baseVersionFile.Open( baseVersionPath, "Read", false );
      baseVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, baseVersionFile.ReadBinary(), baseVersionPath );
      baseVersionDataSource.ReadStructure();
      compareVersionFile.Open( compareVersionPath, "Read", false );
      compareVersionDataSource := GeneralExcelImportAndExportDataSource::Upload( recycleBin, compareVersionFile.ReadBinary(), compareVersionPath );
      compareVersionDataSource.ReadStructure();
      baseVersionTable := select( baseVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
      compareVersionTable := select( compareVersionDataSource, GeneralExcelImportAndExportDataTable, tempGEIAEDT, true );
      if( not isnull( baseVersionTable ) and not isnull( compareVersionTable )){
        //生成行数据
        rowKeys := construct( Strings );
        baseVersionRowTree := NamedValueTree::Create();
        baseVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
        compareVersionRowTree := NamedValueTree::Create();
        compareVersionRows := construct( GeneralExcelImportAndExportDataRows ,constcontent);
        LocalCell_DemandComparison::FillRows( baseVersionTable,rowKeys,baseVersionRowTree,baseVersionRows );
        LocalCell_DemandComparison::FillRows( compareVersionTable,rowKeys,compareVersionRowTree,compareVersionRows );
        // ç”Ÿæˆåˆ—数据
        columnTree := NamedValueTree::Create();
        columns := construct( LocalColumns );
        LocalCell_DemandComparison::GenerateColumnIndex( baseVersionTable,localTable,columnTree,columns );
        LocalCell_DemandComparison::GenerateColumnIndex( compareVersionTable,localTable,columnTree,columns );
        columnNames := selectvalues( columns,Elements,column,true,column.Name() );
        // ç”Ÿæˆæ•°æ®
        for ( rowIndex := 0; rowIndex < rowKeys.Size(); rowIndex++ ) {
          rowKey := rowKeys.Element( rowIndex );
          baseVersionCellTree := NamedValueTree::Create();
          baseVersionCells := construct( GeneralExcelImportAndExportDataCells ,constcontent);
          compareVersionCellTree := NamedValueTree::Create();
          compareVersionCells := construct( GeneralExcelImportAndExportDataCells ,constcontent);
          LocalCell_DemandComparison::FillCells( rowKey,baseVersionRowTree,baseVersionRows,baseVersionCellTree,baseVersionCells );
          LocalCell_DemandComparison::FillCells( rowKey,compareVersionRowTree,compareVersionRows,compareVersionCellTree,compareVersionCells );
          row := localTable.LocalRow( relnew,Index := localTable.GetRowIndexCache()  );
          traverse( columnNames,Elements,columnName ){
            columnHandle := columnTree.GetHandle( columnName );
            columnIndex := columnTree.Root().Child( columnHandle ).GetValueAsNumber();
            column := columns.Element( columnIndex );
            baseVersionCell := constnull( GeneralExcelImportAndExportDataCell );
            baseVersionCellHandle := baseVersionCellTree.GetHandle( columnName );
            try{
              baseVersionCellIndex := baseVersionCellTree.Root().Child( baseVersionCellHandle ).GetValueAsNumber();
              baseVersionCell := baseVersionCells.Element( baseVersionCellIndex );
            }onerror{}
            compareVersionCell := constnull( GeneralExcelImportAndExportDataCell );
            compareVersionCellHandle := compareVersionCellTree.GetHandle( columnName );
            try{
              compareVersionCellIndex := compareVersionCellTree.Root().Child( compareVersionCellHandle ).GetValueAsNumber();
              compareVersionCell := compareVersionCells.Element( compareVersionCellIndex );
            }onerror{}
            if( columnName = "产地" or columnName = "车型" or columnName = "发动机零件号" or columnName = "发动机四位码" ){
              row.LocalCell( relnew,LocalCell_DemandComparison,LocalColumn := column,
                             BaseVersionValue := ifexpr( isnull( baseVersionCell ), "空", baseVersionCell.Value()),
                             CompareVersionValue := ifexpr( isnull( compareVersionCell ),"空",compareVersionCell.Value()));
              column.IsAttrbuteColumn( true );
              if( columnName = "发动机零件号" ){
                row.CustomName( ifexpr( isnull( baseVersionCell ), ifexpr( isnull( compareVersionCell ),"空",compareVersionCell.Value()), baseVersionCell.Value()) );
              }
            }else{
              row.LocalCell( relnew,LocalCell_DemandComparison,LocalColumn := column,
                             BaseVersion := ifexpr( isnull( baseVersionCell ),0,[Real]baseVersionCell.Value()),
                             CompareVersion := ifexpr( isnull( compareVersionCell ), 0 ,[Real]compareVersionCell.Value() ));
            }
          }
        }
      }
      // åŽç»­åˆ é™¤
      baseVersionDataSource.Delete();
      compareVersionDataSource.Delete();
      baseVersionFile.Close();
      compareVersionFile.Close();
    } onerror {
      if( not isnull( baseVersionFile )){
        baseVersionFile.Close();
      }
      if( not isnull( compareVersionFile )){
        compareVersionFile.Close();
      }
      error( e );
    }
    return localTable;
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillCells.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FillCells (
  String rowName,
  NamedValueTree rowTree,
  constcontent GeneralExcelImportAndExportDataRows rows,
  NamedValueTree cellTree,
  constcontent GeneralExcelImportAndExportDataCells cells
)
{
  TextBody:
  [*
    // rislai Jun-22-2024 (created)
    rowHandel := rowTree.GetHandle( rowName );
    try{
      rowIndex := rowTree.Root().Child( rowHandel ).GetValueAsNumber();
      row := rows.Element( rowIndex );
      temp_cells := selectsortedset( row,GeneralExcelImportAndExportDataCell,cell,true,cell.GeneralExcelImportAndExportDataColumn().ColumnIndex() );
      for( i := 0 ; i<temp_cells.Size();i++ ){
        cell := temp_cells.Element( i );
        tempHandle := cellTree.GetHandle( cell.GeneralExcelImportAndExportDataColumn().Name() );
        cells.Add( cell );
        cellTree.Root().AddChild( tempHandle,cells.Size() - 1 );
      }
    }onerror{}
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_FillRows.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
Quintiq file version 2.0
#parent: #root
StaticMethod FillRows (
  const GeneralExcelImportAndExportDataTable general,
  Strings rowKeys,
  NamedValueTree rowTree,
  constcontent GeneralExcelImportAndExportDataRows rows
)
{
  TextBody:
  [*
    // rislai Jun-22-2024 (created)
    rowKeyColumn1 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "产地" );
    rowKeyColumn2 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "车型" );
    rowKeyColumn3 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "发动机零件号" );
    rowKeyColumn4 := select( general, GeneralExcelImportAndExportDataColumn, column, column.Name() = "发动机四位码" );
    tempRowKeyCells1 := selectset( rowKeyColumn1,GeneralExcelImportAndExportDataCell,cell,true );
    tempRowKeyCells2 := selectset( rowKeyColumn2,GeneralExcelImportAndExportDataCell,cell,true );
    tempRowKeyCells3 := selectset( rowKeyColumn3,GeneralExcelImportAndExportDataCell,cell,true );
    tempRowKeyCells4 := selectset( rowKeyColumn4,GeneralExcelImportAndExportDataCell,cell,true );
    for( i := 0; i< tempRowKeyCells1.Size(); i++ ){
      tempRowKeyCell1 := tempRowKeyCells1.Element( i );
      tempRowKeyCell2 := tempRowKeyCells2.Element( i );
      tempRowKeyCell3 := tempRowKeyCells3.Element( i );
      tempRowKeyCell4 := tempRowKeyCells4.Element( i );
      rowKey := tempRowKeyCell1.Value() + tempRowKeyCell2.Value() + tempRowKeyCell3.Value() + tempRowKeyCell4.Value();
      tempHandle := rowTree.GetHandle( rowKey );
      rowTree.Root().AddChild( tempHandle ,i);
      rows.Add( tempRowKeyCell1.GeneralExcelImportAndExportDataRow());
      rowKeys.Add( rowKey );
    }
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GenerateColumnIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GenerateColumnIndex (
  const GeneralExcelImportAndExportDataTable table,
  LocalTable localTable,
  NamedValueTree columnTree,
  LocalColumns columns
)
{
  TextBody:
  [*
    // rislai Jun-22-2024 (created)
    tableColumns := selectset( table,GeneralExcelImportAndExportDataColumn,column,true );
    for( i := 0; i< tableColumns.Size(); i++ ){
      generalColumn := tableColumns.Element( i );
      tempHandle := columnTree.GetHandle( generalColumn.Name() );
      nameValue := guard( columnTree.Root().Child( tempHandle ),null( NamedValue ));
      if( isnull( nameValue )){
        index := 999;
        if( generalColumn.Name() = "产地" ){
          index := 1;
        }else if( generalColumn.Name() = "车型" ){
          index := 2;
        }else if( generalColumn.Name() = "发动机零件号" ){
          index := 3;
        }else if( generalColumn.Name() = "发动机四位码" ){
          index := 4;
        }else{
          // 2023/01/01
          index := [Number]generalColumn.Name().ReplaceAll( "/", "" );
        }
        column := localTable.LocalColumn( relnew, Name := generalColumn.Name(),CustomIndex := index );
        columns.Add( column );
        columnTree.Root().AddChild( tempHandle,columns.Size() - 1 );
      }
    }
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetAttributeNames.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetAttributeNames () const declarative as owning Strings
{
  TextBody:
  [*
    // rislai Jun-21-2024 (created)
    attributeNames := construct( Strings );
    attributeNames.Add( "BaseVersion" );
    attributeNames.Add( "CompareVersion" );
    attributeNames.Add( "Gap" );
    return &attributeNames;
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/StaticMethod_GetColumnXML.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetColumnXML (
  const constcontent LocalRows rows,
  const LocalColumn column,
  const Strings attributeNames,
  String type,
  const MacroPlan macroPlan
) const as String
{
  TextBody:
  [*
    // rislai Jun-21-2024 (created)
    // rislai Jun-20-2024 (created)
    columnXML := "";
    cells := selectsortedset( column, LocalCell.astype( LocalCell_DemandComparison ), cell,
                                  exists( rows,Elements,element,element = cell.LocalRow()), cell.LocalRow().Index());
    if( type = "data" ){
      columnXML := "";
      if( column.IsAttrbuteColumn() ){
        columnXML := "<column><name>" + column.Name() + "</name><type>String</type>";
      }else{
        columnXML := "<column><name>" + column.Name() + "</name><type>Number</type>";
      }
      traverse ( cells, Elements, cell ) {
        traverse( attributeNames ,Elements,e ){
          cellXML := '<cell value="' + cell.GetAttributeByName( e ) + '"/>'
          columnXML := columnXML + cellXML;
        }
      }
      columnXML := columnXML + "</column>";
    }
    if( type = "attribute" ){
      columnXML0_1 := "<column><name>Sales Segment</name><type>String</type>";
      columnXML0_2 := "<column><name>Generation</name><type>String</type>";
      columnXML0_3 := "<column><name>MQB/MLB</name><type>String</type>";
      columnXML0_4 := "<column><name>功率</name><type>String</type>";
      columnXML1 := "<column><name>Product ID</name><type>String</type>";
      columnXML2 := "<column><name>Attribute</name><type>String</type>";
      traverse ( cells, Elements, cell ) {
        flag := true;
        traverse( attributeNames ,Elements,e ){
          if( flag ){
            cellXML := '<cell value="' + cell.LocalRow().Name() + '"/>'
            columnXML1 := columnXML1 + cellXML;
            salesSegment := select( cell.LocalRow().LocalTable(),LocalColumn.LocalCell.astype( LocalCell_DemandComparison ),temp_cell,temp_cell.LocalRow() = cell.LocalRow() and temp_cell.LocalColumn().Name() = "产地");
            if( not isnull( salesSegment )){
              cellXML0_1 := '<cell value="' + ifexpr( salesSegment.BaseVersionValue() <> "空",salesSegment.BaseVersionValue(),salesSegment.CompareVersionValue()) + '"/>';
              columnXML0_1 := columnXML0_1 + cellXML0_1;
            }else{
              cellXML0_1 := '<cell value="  "/>'
              columnXML0_1 := columnXML0_1 + cellXML0_1;
            }
            product := select( macroPlan,Product_MP,product,product.ID() = cell.LocalRow().Name() );
            if( not isnull( product )){
              cellXML0_2 := '<cell value="' + product.Generation() + '"/>';
              cellXML0_3 := '<cell value="' + product.MQBMLB() + '"/>';
              cellXML0_4 := '<cell value="' + product.Power() + '"/>';
              columnXML0_2 := columnXML0_2 + cellXML0_2;
              columnXML0_3 := columnXML0_3 + cellXML0_3;
              columnXML0_4 := columnXML0_4 + cellXML0_4;
            }else{
              cellXML0_2 := '<cell value="  "/>';
              cellXML0_3 := '<cell value="  "/>';
              cellXML0_4 := '<cell value="  "/>';
              columnXML0_2 := columnXML0_2 + cellXML0_2;
              columnXML0_3 := columnXML0_3 + cellXML0_3;
              columnXML0_4 := columnXML0_4 + cellXML0_4;
            }
            flag := false;
          }else{
            cellXML := '<cell value="  "/>'
            columnXML1 := columnXML1 + cellXML;
            cellXML0_1 := '<cell value="  "/>'
            cellXML0_2 := '<cell value="  "/>';
            cellXML0_3 := '<cell value="  "/>';
            cellXML0_4 := '<cell value="  "/>';
            columnXML0_1 := columnXML0_1 + cellXML0_1;
            columnXML0_2 := columnXML0_2 + cellXML0_2;
            columnXML0_3 := columnXML0_3 + cellXML0_3;
            columnXML0_4 := columnXML0_4 + cellXML0_4;
          }
          cellXML := '<cell value="' + e + '"/>'
          columnXML2 := columnXML2 + cellXML;
        }
      }
      columnXML := columnXML0_1 + "</column>" + columnXML0_2 + "</column>" + columnXML0_3 + "</column>" + columnXML0_4 + "</column>" + columnXML1 + "</column>" + columnXML2 + "</column>";
    }
    return columnXML;
  *]
}
_Main/BL/Type_LocalCell_ProductionComparison/_ROOT_Type_LocalCell_ProductionComparison.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
TypeSpecialization LocalCell_ProductionComparison
{
  #keys: '2[412672.1.64753741][412672.1.64753740]'
  Parent: LocalCell
  StructuredName: 'LocalCell_ProductionComparisons'
}
_Main/BL/Type_LocalColumn/Attribute_CustomDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomDate
{
  #keys: '3[412672.1.50711484][412672.1.50711483][412672.1.50711485]'
  ValueType: Date
}
_Main/BL/Type_LocalColumn/Attribute_CustomIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute CustomIndex
{
  #keys: '3[412672.1.64721865][412672.1.64721864][412672.1.64721866]'
  ValueType: Number
}
_Main/BL/Type_LocalColumn/DefaultValue_CustomIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
DefaultValue
{
  ISOValue: '-999'
  TargetAttribute: CustomIndex
}
_Main/BL/Type_LocalColumn/Function_CalcDate.qbl
@@ -7,7 +7,7 @@
    // rislai Jun-28-2024 (created)
    if( not this.IsAttrbuteColumn() ){
      names := this.Name().Tokenize( "/" );
      this.Date( guard( Date::Construct( [Number]names.Element( 0 ),[Number]names.Element( 1 ),[Number]names.Element( 2 )),Date::MinDate() ));
      this.Date( ifexpr( this.CustomDate() <> Date::MinDate(),this.CustomDate(),guard( Date::Construct( [Number]names.Element( 0 ),[Number]names.Element( 1 ),[Number]names.Element( 2 )),Date::MinDate() )));
    }
  *]
}
_Main/BL/Type_LocalColumn/Function_CalcIndex.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
#parent: #root
Function CalcIndex
{
  TextBody:
  [*
    // rislai Jul-24-2024 (created)
    year := this.Date().Year();
    month := this.Date().Month();
    day := this.Date().Day();
    index := [String]year;
    if( month < 10 ){
      index := index + "0" + [String]month;
    }
    if( day < 10 ){
      index := index + "0" + [String]day;
    }
    value := ifexpr( this.CustomIndex() = -999,[Number]index,this.CustomIndex() );
    this.Index( value );
  *]
}
_Main/BL/Type_MachineStockData/Attribute_AllTotal.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute AllTotal
{
  #keys: '3[415136.0.931886946][415136.0.931886945][415136.0.931886947]'
  ValueType: Real
}
_Main/BL/Type_MachineStockData/Attribute_DDay.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute DDay
{
  #keys: '3[415136.0.931886953][415136.0.931886952][415136.0.931886954]'
  Description: '日期'
  ValueType: Date
}
_Main/BL/Type_MachineStockData/Attribute_Date.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Date
{
  #keys: '3[415136.0.931886848][415136.0.931886847][415136.0.931886849]'
  ValueType: Date
}
_Main/BL/Type_MachineStockData/Attribute_Fac.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Fac
{
  #keys: '3[415136.0.931886928][415136.0.931886927][415136.0.931886929]'
  Description: '工厂code'
  ValueType: String
}
_Main/BL/Type_MachineStockData/Attribute_FacName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute FacName
{
  #keys: '3[415136.0.931886918][415136.0.931886917][415136.0.931886919]'
  Description: '工厂名称'
  ValueType: String
}
_Main/BL/Type_MachineStockData/Attribute_Inventory.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Inventory
{
  #keys: '3[415136.0.931886842][415136.0.931886841][415136.0.931886843]'
  Description: '对应日期的实际库存数量'
  ValueType: Real
}
_Main/BL/Type_MachineStockData/Attribute_LineType.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute LineType
{
  #keys: '3[415136.0.931886957][415136.0.931886956][415136.0.931886958]'
  Description: '产线类型'
  ValueType: String
}
_Main/BL/Type_MachineStockData/Attribute_MaterialName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute MaterialName
{
  #keys: '3[415136.0.931886910][415136.0.931886909][415136.0.931886911]'
  Description: '零件名称'
  ValueType: String
}
_Main/BL/Type_MachineStockData/Attribute_MaterialNo.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute MaterialNo
{
  #keys: '3[415136.0.931886900][415136.0.931886899][415136.0.931886901]'
  Description: '零件号'
  ValueType: String
}
_Main/BL/Type_MachineStockData/Attribute_Product.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Product
{
  #keys: '3[415136.0.931886845][415136.0.931886844][415136.0.931886846]'
  Description: '产品'
  ValueType: String
}
_Main/BL/Type_MachineStockData/Attribute_Total.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Total
{
  #keys: '3[415136.0.931886936][415136.0.931886935][415136.0.931886937]'
  ValueType: Real
}
_Main/BL/Type_MachineStockData/Attribute_Unit.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Unit
{
  #keys: '3[415136.0.931886839][415136.0.931886838][415136.0.931886840]'
  Description: '库存点信息'
  ValueType: String
}
_Main/BL/Type_MachineStockData/StaticMethod_GenerateData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GenerateData (
  InterfaceLoginfo owner,
  StringToDate cnv,
  JSON item
) as MachineStockData
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-17-2024 (created)
    material_no       := guard( item.Get( "material_no").GetString(),"");
    material_name     := guard( item.Get( "material_name").GetString(),"");
    fac_name          := guard( item.Get( "fac_name").GetString(),"");
    fac               := guard( item.Get( "fac").GetString(),"");
    total             := guard( item.Get( "total").GetReal(), 0 );
    all_total         := guard( item.Get( "all_total").GetReal(), 0 );
    dday              := guard( item.Get( "dday").GetString(),"");
    line_type         := guard( item.Get( "fac").GetString(),"");
    msdata           := owner.MachineStockData( relnew, MaterialNo := material_no
                                                  , MaterialName := material_name
                                                  , Fac := fac
                                                  , FacName := fac_name
                                                  , Total := total
                                                  , AllTotal := all_total
                                                  , DDay := cnv.Convert( dday )
                                                  , LineType := line_type );
    return msdata;
  *]
}
_Main/BL/Type_MachineStockData/StaticMethod_GetRequestBody.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetRequestBody (
  Date date
) as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-19-2024 (created)
    json := JSON::Object()
                  .Add( "inParam", JSON::Object().Add( "dday", date.Format( "Y-M2-D2" ) ).Add( "fac", "" ) ).Build();
    requestbody := json.AsString();
    return requestbody
  *]
}
_Main/BL/Type_MachineStockData/StaticMethod_Synchronize.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Synchronize (
  InterfaceDataset owner,
  String executor
)
{
  TextBody:
  [*
    //// ç”„兰鸽 Jul-17-2024 (created)
    date    := Date::ActualDate();
    loginfo := owner.InterfaceLoginfo( relnew, ExecuteUser := executor
                                       , Name := Translations::InterfaceDataset_MachineStockData_Name()
                                       , InterfaceDateTime := DateTime::ActualTime()
                                       , Message := '库存数据(机加库存)'
                                       , RequestBody := MachineStockData::GetRequestBody( date ) );
    data := InterfaceLoginfo::CallInterface( owner, loginfo );
    if( not isnull( data ) ){
      cnv2 := StringToDate::StandardConverter();
      cnv2.SetCustomConversion();
      cnv2.CustomFormatString( 'yyyy-MM-dd' );
    //  sadatalist := construct( ShippingActualDatas );
      for( seq := 0;seq < data.Size();seq++){
        item := data.Get(seq);
        MachineStockData::GenerateData( loginfo, cnv2, item );
    //    sadatalist.Add( sadata );
      }
    }
  *]
}
_Main/BL/Type_MachineStockData/_ROOT_Type_MachineStockData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type MachineStockData
{
  #keys: '5[415136.0.931886835][415136.0.931886833][0.0.0][415136.0.931886834][415136.0.931886836]'
  BaseType: Object
  Description: '库存数据(机加库存)'
  StructuredName: 'MachineStockDatas'
}
_Main/BL/Type_OfflinePlanTable/Method_Comparison.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
Quintiq file version 2.0
#parent: #root
Method Comparison (
  RecycleBin recycleBin
) as LocalTable
{
  TextBody:
  [*
    // rislai Jul-17-2024 (created)
    macroPlan := this.MacroPlan();
    table := recycleBin.LocalTable( relnew,Name := "产量对比报表");
    actualDailyProductionDatas := selectset( macroPlan,ActualDailyProductionData,data,true );
    actualDailyProductionDataIndexTree := NamedValueTree::Create();
    for( i := 0; i< actualDailyProductionDatas.Size(); i++ ){
      actualDailyProductionData := actualDailyProductionDatas.Element( i );
      actualDailyProductionDataKey := actualDailyProductionData.Product() + actualDailyProductionData.Date().AsQUILL();
      actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey );
      actualDailyProductionDataIndexTree.Root().AddChild( actualDailyProductionDataHandle,i );
    }
    localColumns := construct( LocalColumns );
    localColumnIndexTree := NamedValueTree::Create();
    traverse( this,OfflinePlanColumn,column,column.ColumnDate() >=  macroPlan.StartOfPlanning().Date()){
      localColumn := table.LocalColumn( relnew,CustomDate := column.ColumnDate());
      localColumnHandle := localColumnIndexTree.GetHandle( column.ColumnDate().AsQUILL() );
      localColumns.Add( localColumn );
      localColumnIndexTree.Root().AddChild( localColumnHandle,localColumns.Size() - 1 );
    }
    traverse( this,OfflinePlanRow,row,row.Type() = "1" ){
      productID := row.ProductID();
      productLine := row.ProductionLine();
      localRow := table.LocalRow( relnew,Index := table.GetRowIndexCache(),CustomName := productID );
      traverse( row,OfflinePlanCell,cell,cell.OfflinePlanColumn().ColumnDate() >= macroPlan.StartOfPlanning().Date() ){
        localColumnHandle := localColumnIndexTree.GetHandle( cell.OfflinePlanColumn().ColumnDate().AsQUILL() );
        localColumnIndex := guard( localColumnIndexTree.Root().Child( localColumnHandle ),null( NamedValue ));
        if( not isnull( localColumnIndex )){
          actualDailyProductionDataKey := productID + cell.OfflinePlanColumn().ColumnDate().AsQUILL();
          actualDailyProductionDataHandle := actualDailyProductionDataIndexTree.GetHandle( actualDailyProductionDataKey );
          actualDailyProductionDataIndex := guard( actualDailyProductionDataIndexTree.Root().Child( actualDailyProductionDataHandle ),null( NamedValue ));
          actualDailyProductionVolume := 0.0;
          if( not isnull( actualDailyProductionDataIndex )){
            actualDailyProductionData := actualDailyProductionDatas.Element( actualDailyProductionDataIndex.GetValueAsNumber() );
            actualDailyProductionVolume := actualDailyProductionData.ProductionVolume();
          }
          localColumn := localColumns.Element( localColumnIndex.GetValueAsNumber() );
          localRow.LocalCell( relnew,LocalCell_ProductionComparison ,LocalColumn := localColumn,
                                           Plan := cell.Quantity(),Actual := actualDailyProductionVolume );
        }
      }
    }
    traverse( table,LocalColumn,column ){
      if( column.LocalCell( relsize ) = 0 ){
        column.Delete();
      }
    }
    return table;
  *]
}
_Main/BL/Type_ShippingActualCell/Attribute_Quantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Quantity
{
  #keys: '3[415136.0.904040075][415136.0.904040074][415136.0.904040076]'
  ValueType: Real
}
_Main/BL/Type_ShippingActualCell/_ROOT_Type_ShippingActualCell.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ShippingActualCell
{
  #keys: '5[415136.0.904040072][415136.0.904040070][0.0.0][415136.0.904040071][415136.0.904040073]'
  BaseType: Object
  Description: '实际发运数据单元格'
  StructuredName: 'ShippingActualCells'
}
_Main/BL/Type_ShippingActualColumn/Attribute_Index.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Index
{
  #keys: '3[415136.0.904040147][415136.0.904040146][415136.0.904040148]'
  ValueType: Number
}
_Main/BL/Type_ShippingActualColumn/Attribute_StartDate.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute StartDate
{
  #keys: '3[415136.0.904040023][415136.0.904040022][415136.0.904040024]'
  ValueType: Date
}
_Main/BL/Type_ShippingActualColumn/_ROOT_Type_ShippingActualColumn.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ShippingActualColumn
{
  #keys: '5[415136.0.904040006][415136.0.904040004][0.0.0][415136.0.904040005][415136.0.904040007]'
  BaseType: Object
  Description: '实际发运数据列'
  StructuredName: 'ShippingActualColumns'
}
_Main/BL/Type_ShippingActualData/Attribute_CreateTime.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute CreateTime
{
  #keys: '3[415136.0.904000065][415136.0.904000064][415136.0.904000066]'
  Description: '时间'
  ValueType: DateTime
}
_Main/BL/Type_ShippingActualData/Attribute_DDay.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute DDay
{
  #keys: '3[415136.0.904000085][415136.0.904000084][415136.0.904000086]'
  Description: '日期'
  ValueType: Date
}
_Main/BL/Type_ShippingActualData/Attribute_Fac.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute Fac
{
  #keys: '3[415136.0.904000115][415136.0.904000114][415136.0.904000116]'
  Description: '工厂代码'
  ValueType: String
}
_Main/BL/Type_ShippingActualData/Attribute_FourCode.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute FourCode
{
  #keys: '3[415136.0.904000095][415136.0.904000094][415136.0.904000096]'
  Description: '四位码'
  ValueType: String
}
_Main/BL/Type_ShippingActualData/Attribute_ID.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
Quintiq file version 2.0
#parent: #root
Attribute ID
{
  #keys: '3[415136.0.904000125][415136.0.904000124][415136.0.904000126]'
  Description: '零件名称'
  ValueType: Number
}
_Main/BL/Type_ShippingActualData/Attribute_Quantity.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Quantity
{
  #keys: '3[415136.0.904000105][415136.0.904000104][415136.0.904000106]'
  ValueType: Real
}
_Main/BL/Type_ShippingActualData/StaticMethod_Export.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Export (
  InterfaceDataset owner
) as BinaryValue
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-18-2024 (created)
    name := ShippingActualData::GetDefalutName();
    xmlDOMI := XMLDOMImplementation::Create();
    xmlDOM  := xmlDOMI.CreateDocumentFromString( '<?xml version="1.0" encoding="UTF-16"?><table><name>' + 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 );
    tableElement.AppendChild( productcolumnelement );
    traverse ( owner, ShippingActualColumn, column ) {
      columnelement := xmlDOM.CreateElement( "column" );
      nameelement   := xmlDOM.CreateElement( "name" );
      typeelement   := xmlDOM.CreateElement( "type" );
      nameelement.TextContent( column.StartDate().Format( "M2/D2/Y" ) );
      typeelement.TextContent( "String" );
      columnelement.AppendChild( nameelement );
      columnelement.AppendChild( typeelement );
      cells := selectsortedset( column, ShippingActualCell, cell, cell.ShippingActualRow().RowNr() );
      traverse ( cells, Elements, c ) {
        if( column.Index() = 0 ){
          row := c.ShippingActualRow();
          //Product
          productcellElement := xmlDOM.CreateElement( "cell" );
          productcellElement.SetAttribute( "value", row.Name() );
          productcolumnelement.AppendChild( productcellElement );
        }
        cellElement := xmlDOM.CreateElement( "cell" );
        cellElement.SetAttribute( "value", [String]c.Quantity() );
        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();
  *]
}
_Main/BL/Type_ShippingActualData/StaticMethod_GenerateData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GenerateData (
  InterfaceLoginfo owner,
  StringToDateTime cnv1,
  StringToDate cnv,
  JSON item
) as ShippingActualData
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-17-2024 (created)
    createtime       := guard( item.Get( "create_time").GetString(),"");
    dday             := guard( item.Get( "dday").GetString(),"");
    fourcode         := guard( item.Get( "four_code").GetString(),"");
    quantity         := guard( item.Get( "qty").GetReal(), 0);
    fac              := guard( item.Get( "fac").GetString(),"");
    id               := guard( item.Get( "id").GetNumber(),0);
    sadata           := owner.ShippingActualData( relnew, CreateTime := cnv1.Convert( createtime )
                                                  , Fac := fac
                                                  , FourCode := fourcode
                                                  , Quantity := quantity
                                                  , DDay := cnv.Convert( dday )
                                                  , ID := id);
    return sadata;
  *]
}
_Main/BL/Type_ShippingActualData/StaticMethod_GetDefalutName.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetDefalutName () as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-18-2024 (created)
    return "Shipping actual";
  *]
}
_Main/BL/Type_ShippingActualData/StaticMethod_GetRequestBody.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
Quintiq file version 2.0
#parent: #root
StaticMethod GetRequestBody (
  Date date
) as String
{
  TextBody:
  [*
    // ç”„兰鸽 Jul-19-2024 (created)
    json := JSON::Object()
                  .Add( "inParam", JSON::Object().Add( "dday", date.Format( "Y-M2-D2" ) ) ).Build();
    requestbody := json.AsString();
    return requestbody
  *]
}
_Main/BL/Type_ShippingActualData/StaticMethod_Synchronize.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
Quintiq file version 2.0
#parent: #root
StaticMethod Synchronize (
  InterfaceDataset owner,
  String executor
)
{
  TextBody:
  [*
    //// ç”„兰鸽 Jul-17-2024 (created)
    date    := Date::ActualDate();
    loginfo := owner.InterfaceLoginfo( relnew, ExecuteUser := executor
                                       , Name := Translations::InterfaceDataset_ShippingActualData_Name()
                                       , InterfaceDateTime := DateTime::ActualTime()
                                       , Message := '发运实际数据'
                                       , RequestBody := ShippingActualData::GetRequestBody( date ) );
    // vwedadmin Jul-18-2024 (created)
    //address := "ds-yunrong-gw.dmp.vwfawedl.mobi";
    //
    //           /// http://ds-yunrong-gw.dmp.vwfawedl.mobi/data-service/api/service/post-data/V1.101/f4f94c47c1a2440898b5e1e2c0c5cbc8
    //httpinterface := HTTPInterface::Create( address,80);
    //                httpinterface.URL("/data-service/api/service/post-data/V1.101/f4f94c47c1a2440898b5e1e2c0c5cbc8");
    //httpinterface.MediaType("application/json");
    ////httpinterface.SSL(true);
    ////httpinterface.SSLKeystore("MyKeystore");
    //httpinterface.PostMethod(true);
    ////str :='{
    ////    "inParam":
    ////        {
    ////            "dday" : "2024-07-11"
    ////        }
    ////}'
    //httpinterface.AddHeader("Authorization","MTlLeG94UEYyNWN5OTZLOFRMXzUyNzA4ODkwNzg1NTA2OTIxNV9wcml2YXRlS2V5XzE3MjEzMDM4Nzc0NTE=")
    //httpinterface.Call( ShippingActualData::GetRequestBody( column.StartDate() ) ); //Sends request with the header Authorization: 538baa9045a84c0e889f å¯ä»¥ä¼ é€’动态token çš„吧
    //result := httpinterface.Result();
    data := InterfaceLoginfo::CallInterface( owner, loginfo );
    if( not isnull( data ) ){
      cnv1 := StringToDateTime::StandardConverter();
      cnv1.SetCustomConversion();
      cnv1.CustomFormatString( 'yyyy-MM-dd HH:mm:ss' );
      cnv2 := StringToDate::StandardConverter();
      cnv2.SetCustomConversion();
      cnv2.CustomFormatString( 'yyyy-MM-dd' );
      column  := owner.ShippingActualColumn( relnew, StartDate := date, Index := owner.ShippingActualColumn( relsize ) );
      sadatalist := construct( ShippingActualDatas );
      for( seq := 0;seq < data.Size();seq++){
        item := data.Get(seq);
        sadata := ShippingActualData::GenerateData( loginfo, cnv1, cnv2, item );
        sadatalist.Add( sadata );
      }
      beforerowsize := owner.ShippingActualRow( relsize );
      traverse( sadatalist, Elements, e ){
        row := selectobject( owner, ShippingActualRow, row, row.Name() = e.FourCode() );
        if( isnull( row ) ){
          owner.ShippingActualRow( relnew, Name := e.FourCode() );
        }
        cell := row.ShippingActualCell( relnew, Quantity := e.Quantity() );
        column.ShippingActualCell( relinsert, cell );
      }
      if( beforerowsize <> owner.ShippingActualRow( relsize ) ){
        rows := selectsortedset( owner, ShippingActualRow, row, row.Name() );
        nr    := 0;
        traverse( rows, Elements, e ){
          e.RowNr( nr );
          nr := nr + 1;
        }
      }
    }
  *]
}
_Main/BL/Type_ShippingActualData/_ROOT_Type_ShippingActualData.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ShippingActualData
{
  #keys: '5[415136.0.904000038][415136.0.904000036][0.0.0][415136.0.904000037][415136.0.904000039]'
  BaseType: Object
  Description: '发运实际数据'
  StructuredName: 'ShippingActualDatas'
}
_Main/BL/Type_ShippingActualRow/Attribute_Name.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute Name
{
  #keys: '3[415136.0.904040051][415136.0.904040050][415136.0.904040052]'
  ValueType: String
}
_Main/BL/Type_ShippingActualRow/Attribute_RowNr.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
Quintiq file version 2.0
#parent: #root
Attribute RowNr
{
  #keys: '3[415136.0.904040061][415136.0.904040060][415136.0.904040062]'
  ValueType: Number
}
_Main/BL/Type_ShippingActualRow/_ROOT_Type_ShippingActualRow.qbl
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
#root
#parent: #DomainModel
Type ShippingActualRow
{
  #keys: '5[415136.0.904040034][415136.0.904040032][0.0.0][415136.0.904040033][415136.0.904040035]'
  BaseType: Object
  Description: '实际船运数据行'
  StructuredName: 'ShippingActualRows'
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupDebug.def
@@ -16,6 +16,21 @@
        Taborder: 0
      ]
    }
    Component ButtonInterface
    {
      #keys: '[415136.0.931576995]'
      BaseType: 'WebButton'
      Children:
      [
        #child: ContextMenuInterface
      ]
      Properties:
      [
        Image: 'ARROW_SHUFFLE'
        Label: 'Interface'
        Taborder: 1
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarGroupReport.def
@@ -71,6 +71,17 @@
        Taborder: 5
      ]
    }
    Component ButtonOfflinePlanComparisonReport
    {
      #keys: '[412672.1.66051424]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'DOCUMENT_INFO'
        Label: '产量对比报表'
        Taborder: 6
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuInterface.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
Quintiq file version 2.0
Component ContextMenuInterface
{
  #keys: '[415136.0.931500880]'
  BaseType: 'WebContextMenu'
  Children:
  [
    Component MenuInterface
    {
      #keys: '[415136.0.931500881]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DOCUMENT'
        Taborder: 0
        Title: 'Interface loginfo'
      ]
    }
    Component MenuMachineStockData
    {
      #keys: '[415136.0.931501127]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'SPREADSHEET'
        Taborder: 1
        Title: 'Machine stock data'
      ]
    }
    Component MenuFinishedEngineInventory
    {
      #keys: '[415136.0.933525462]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'SPREADSHEET'
        Taborder: 2
        Title: 'Finished engine inventory'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_abgSecondDevelopmentPlan.def
@@ -16,7 +16,7 @@
        Taborder: 0
      ]
    }
    Component bPackagingPlan
    Component bBlank
    {
      #keys: '[413988.0.1291640400]'
      BaseType: 'WebButton'
@@ -59,6 +59,17 @@
        Taborder: 4
      ]
    }
    Component bShippingActualData
    {
      #keys: '[415136.0.905520117]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'TABLE_CONNECTION'
        Label: 'Shipping data'
        Taborder: 5
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: ActionBarGroupReport/ButtonOfflinePlanComparisonReport
Response OnClick () id:Response_MacroPlanner_ActionBarGroupReport_ButtonOfflinePlanComparisonReport_OnClick
{
  #keys: '[412672.1.66051682]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      // Open view
      ApplicationMacroPlanner.OpenView( 'OfflinePlanComparisonReport', this );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuFinishedEngineInventory_OnCli.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: ContextMenuInterface/MenuFinishedEngineInventory
Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_MenuFinishedEngineInventory_OnClick
{
  #keys: '[415136.0.933525609]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMenu_OnClick'
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "Finished_engine_inventory", true);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuInterface_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: ContextMenuInterface/MenuInterface
Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_MenuInterface_OnClick
{
  #keys: '[415136.0.931500984]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMenu_OnClick'
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "Interface_loginfo_view", true);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuInterface_MenuMachineStockData_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: ContextMenuInterface/MenuMachineStockData
Response OnClick () id:Response_MacroPlanner_ContextMenuInterface_MenuMachineStockData_OnClick
{
  #keys: '[415136.0.932240790]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebMenu_OnClick'
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "Machine_stock_data", true);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_abgSecondDevelopmentPlan_bShippingActualData_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: abgSecondDevelopmentPlan/bShippingActualData
Response OnClick () id:Response_MacroPlanner_abgSecondDevelopmentPlan_bShippingActualData_OnClick
{
  #keys: '[415136.0.905520217]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      ApplicationScope.ViewManager().ResetUserViewById( "Shipping_actual_data_view", true);
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_MatrixEditorTable.def
@@ -17,10 +17,10 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LibCal_SubscriberEventTable'
            Source: 'dhTable'
            DataType: 'structured[LibCal_SubscriberEventColumn]'
            Source: 'dhColumns'
            Taborder: 0
            Transformation: 'LibCal_SubscriberEventColumn.LibCal_SubscriberEventCell'
            Transformation: 'Elements.LibCal_SubscriberEventCell'
          ]
        }
      ]
@@ -44,18 +44,16 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LibCal_SubscriberEventTable'
            FilterArguments: 'subscribers:dhSubscribers;eventtypes:dhEventTypes'
            FixedFilter: 'object.FilterBySubscriberAndEventType( subscribers, eventtypes )'
            Source: 'dhTable'
            DataType: 'structured[LibCal_SubscriberEventRow]'
            Source: 'dhRows'
            Taborder: 0
            Transformation: 'LibCal_SubscriberEventRow'
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Legend: 'RowNr'
        Legend: 'Name'
        SortCriteria: 'RowNr'
        Taborder: 1
      ]
@@ -72,20 +70,18 @@
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LibCal_SubscriberEventTable'
            DataType: 'structured[LibCal_SubscriberEventColumn]'
            Description: 'object.FilterByDatePeriod( Date::MinDate(), Date::MaxDate() )'
            FilterArguments: 'period:dhDate'
            FixedFilter: 'object.FilterByDatePeriod( period.Start(), period.End() )'
            Source: 'dhTable'
            Source: 'dhColumns'
            Taborder: 0
            Transformation: 'LibCal_SubscriberEventColumn'
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'Index'
        SortCriteria: 'Period'
        Taborder: 2
      ]
    }
@@ -110,6 +106,6 @@
    Columns: 'MatrixEditorTableColumns'
    ContextMenu: 'matrixeditorContextMenuTable'
    Rows: 'MatrixEditorTableRows'
    Taborder: 1
    Taborder: 2
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelExport.def
@@ -12,7 +12,7 @@
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 0
        Taborder: 1
      ]
    }
    Component ButtonInitialize
@@ -22,7 +22,17 @@
      Properties:
      [
        Image: 'ARROW_CIRCLE'
        Taborder: 1
        Taborder: 2
      ]
    }
    Component ButtonSearch
    {
      #keys: '[415136.0.922435407]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: 'Search'
        Taborder: 0
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelList.def
@@ -6,14 +6,24 @@
  Children:
  [
    #child: MatrixEditorTable
    Component dhTable
    Component dhColumns
    {
      #keys: '[415136.0.672310139]'
      BaseType: 'WebDataHolder'
      Databinding: 'LibCal_SubscriberEventTable'
      Databinding: 'structured[LibCal_SubscriberEventColumn]*'
      Properties:
      [
        Description: '表'
        Taborder: 1
      ]
    }
    Component dhRows
    {
      #keys: '[415136.0.922436014]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[LibCal_SubscriberEventRow]*'
      Properties:
      [
        Taborder: 0
      ]
    }
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Component_PanelPeriods.def
@@ -17,7 +17,6 @@
        Orientation: 'horizontal'
        Taborder: 0
        Title: 'Periods'
        Tooltip: '<html>Select if the periods are used for planning or merely for visualization.<br>The planning periods define the granularity at which planning is done.<br>In case of overlapping planning periods, the smallest ones are used.<br>The planning periods are shown in the period overview in blue.</html>'
      ]
    }
  ]
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_OnCreated.def
@@ -11,6 +11,16 @@
    [*
      
      this.InitializeSubscribers();
      columns     := construct( LibCal_SubscriberEventColumns );
      rows        := construct( LibCal_SubscriberEventRows );
      traverse( dhCalendar.Data(), LibCal_SubscriberEventTable, table, table.ID() = RadioButtonGroupUseForPlanning.BoundValue() ){
        columns  := selectset( table, LibCal_SubscriberEventColumn, column, true );
        rows     := selectset( table, LibCal_SubscriberEventRow, row, true );
      }
      dhColumns.Data( &columns );
      dhRows.Data( &rows );
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonHeader_OnClick.def
@@ -9,9 +9,9 @@
  {
    Body:
    [*
      binaryValue := LibCal_SubscriberEventTable::Export( dhTable.Data() );
      binaryValue := LibCal_SubscriberEventTable::Export( dhColumns.Data(), dhRows.Data() );
      
      Application.Download( "Unavailable events.xlsx", binaryValue.AsBinaryData() );
      Application.Download( LibCal_SubscriberEventTable::GetDefaultName() + ".xlsx", binaryValue.AsBinaryData() );
    *]
    GroupServerCalls: false
  }
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelExport_ButtonSearch_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: PanelExport/ButtonSearch
Response OnClick () id:Response_PanelExport_ButtonSearch_OnClick
{
  #keys: '[415136.0.922435443]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      columns     := construct( LibCal_SubscriberEventColumns );
      rows        := construct( LibCal_SubscriberEventRows );
      subscribers := dhSubscribers.Data();
      eventtypes  := dhEventTypes.Data();
      date        := dhDate.Data();
      traverse( dhCalendar.Data(), LibCal_SubscriberEventTable, table ){
        columns  := selectset( table, LibCal_SubscriberEventColumn, column, column.FilterByDatePeriod( date.Start(), date.End(), RadioButtonGroupUseForPlanning.BoundValue() ) );
        rows     := selectset( table, LibCal_SubscriberEventRow, row, row.FilterBySubscriberAndEventType( subscribers, eventtypes ) );
      }
      dhColumns.Data( &columns );
      dhRows.Data( &rows );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormCalendarUnavailableEvent/Response_PanelPeriods_RadioButtonGroupUseForPlanning_OnChanged.def
ÎļþÒÑɾ³ý
_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_ListFinishedEngineInventory.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
Quintiq file version 2.0
Component ListFinishedEngineInventory
{
  #keys: '[415136.0.933380308]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorFinishedEngineInventory
    {
      #keys: '[415136.0.933380309]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'InterfaceDataset'
        Source: 'InterfaceDataset'
        Taborder: 0
        Transformation: 'InterfaceLoginfo.FinishedEngineInventory'
      ]
    }
    #child: listActionBarPageFinishedEngineInventory
    Component DataSetLevelFinishedEngineInventory
    {
      #keys: '[415136.0.933380314]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuFinishedEngineInventory
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FourCode","title":"FourCode","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FourCode"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"VehicleType","title":"VehicleType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"VehicleType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReceiptPlace","title":"ReceiptPlace","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReceiptPlace"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FullName","title":"FullName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FullName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"SpellName","title":"SpellName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"SpellName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EngineType","title":"EngineType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EngineType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"EngineModularPlatform","title":"EngineModularPlatform","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"EngineModularPlatform"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Brand","title":"Brand","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Brand"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"BIPlace","title":"BIPlace","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"BIPlace"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Price","title":"Price","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Price"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total","title":"Total","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Amount","title":"Amount","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Amount"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DType","title":"DType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Fac","title":"Fac","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Fac"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DDay","title":"DDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DWeek","title":"DWeek","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DWeek"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DMonth","title":"DMonth","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DMonth"}}]'
        ContextMenu: 'listContextMenuFinishedEngineInventory'
        SortCriteria: 'desc:DDay'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listActionBarPageFinishedEngineInventory.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPageFinishedEngineInventory
{
  #keys: '[415136.0.933380311]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/Component_listContextMenuFinishedEngineInventory.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listContextMenuFinishedEngineInventory
{
  #keys: '[415136.0.933380316]'
  BaseType: 'listContextMenu'
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormFinishedEngineInventory/_ROOT_Component_FormFinishedEngineInventory.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormFinishedEngineInventory
{
  #keys: '[415136.0.933380255]'
  BaseType: 'WebForm'
  Children:
  [
    #child: ListFinishedEngineInventory
  ]
  Properties:
  [
    Image: 'SPREADSHEET'
    Title: 'Finished engine inventory'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_ListInterfaceLoginfo.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
Quintiq file version 2.0
Component ListInterfaceLoginfo
{
  #keys: '[415136.0.931545401]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorInterfaceLoginfo
    {
      #keys: '[415136.0.931545402]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'external[InterfaceDataset]'
        Source: 'InterfaceDataset'
        Taborder: 0
        Transformation: 'InterfaceLoginfo'
      ]
    }
    #child: listActionBarPageInterfaceLoginfo
    Component DataSetLevelInterfaceLoginfo
    {
      #keys: '[415136.0.931545407]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuInterfaceLoginfo
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ExecuteUser","title":"ExecuteUser","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ExecuteUser"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"InterfaceDateTime","title":"InterfaceDateTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"InterfaceDateTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FinishTime","title":"FinishTime","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FinishTime"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Message","title":"Message","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Message"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Success","title":"Success","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Success"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReturnSuccess","title":"ReturnSuccess","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReturnSuccess"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"ReturnMsg","title":"ReturnMsg","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"ReturnMsg"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Last","title":"Last","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Last"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"TotalRow","title":"TotalRow","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"TotalRow"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"RequestBody","title":"RequestBody","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"RequestBody"}}]'
        ContextMenu: 'listContextMenuInterfaceLoginfo'
        SortCriteria: 'desc:InterfaceDateTime'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listActionBarPageInterfaceLoginfo.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPageInterfaceLoginfo
{
  #keys: '[415136.0.931545404]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/Component_listContextMenuInterfaceLoginfo.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listContextMenuInterfaceLoginfo
{
  #keys: '[415136.0.931545409]'
  BaseType: 'listContextMenu'
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormInterfaceLoginfo/_ROOT_Component_FormInterfaceLoginfo.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormInterfaceLoginfo
{
  #keys: '[415136.0.931210186]'
  BaseType: 'WebForm'
  Children:
  [
    #child: ListInterfaceLoginfo
  ]
  Properties:
  [
    Image: 'DOCUMENT'
    Title: 'Interface loginfo'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_ListMachineStockData.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
Quintiq file version 2.0
Component ListMachineStockData
{
  #keys: '[415136.0.931501240]'
  BaseType: 'WebList'
  Children:
  [
    Component DataExtractorMachineStockData
    {
      #keys: '[415136.0.931501241]'
      BaseType: 'WebDataExtractor'
      Properties:
      [
        DataType: 'InterfaceDataset'
        Source: 'InterfaceDataset'
        Taborder: 0
        Transformation: 'InterfaceLoginfo.MachineStockData'
      ]
    }
    #child: listActionBarPageMachineStockData
    Component DataSetLevelMachineStockData
    {
      #keys: '[415136.0.931501246]'
      BaseType: 'WebDataSetLevel'
      Children:
      [
        #child: listContextMenuMachineStockData
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialNo","title":"MaterialNo","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialNo"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"MaterialName","title":"MaterialName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"MaterialName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Fac","title":"Fac","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Fac"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"FacName","title":"FacName","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"FacName"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"LineType","title":"LineType","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"LineType"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"DDay","title":"DDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"DDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Total","title":"Total","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Total"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"AllTotal","title":"AllTotal","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"AllTotal"}}]'
        ContextMenu: 'listContextMenuMachineStockData'
        SortCriteria: 'desc:DDay'
        Taborder: 2
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listActionBarPageMachineStockData.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listActionBarPageMachineStockData
{
  #keys: '[415136.0.931501243]'
  BaseType: 'listActionBarPage'
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/Component_listContextMenuMachineStockData.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component listContextMenuMachineStockData
{
  #keys: '[415136.0.931501248]'
  BaseType: 'listContextMenu'
  Properties:
  [
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormMachineStockData/_ROOT_Component_FormMachineStockData.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormMachineStockData
{
  #keys: '[415136.0.931501186]'
  BaseType: 'WebForm'
  Children:
  [
    #child: ListMachineStockData
  ]
  Properties:
  [
    Image: 'SPREADSHEET'
    Title: 'Machine stock data'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_MatrixEditor#988.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
Quintiq file version 2.0
Component MatrixEditor id:MatrixEditor_988
{
  #keys: '[412672.1.61940674]'
  BaseType: 'WebMatrixEditor'
  Children:
  [
    Component MatrixEditorCell
    {
      #keys: '[412672.1.61940675]'
      BaseType: 'WebMatrixEditorCell'
      Children:
      [
        Component DataExtractorCells
        {
          #keys: '[412672.1.61940676]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'LocalRow.LocalCell.astype(LocalCell_ProductionComparison)'
          ]
        }
      ]
      Properties:
      [
        Attributes: 'Plan;Actual;Gap'
        Column: 'LocalColumn'
        Row: 'LocalRow'
        Taborder: 0
      ]
    }
    Component MatrixEditorRows
    {
      #keys: '[412672.1.61940677]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorRows
        {
          #keys: '[412672.1.61940678]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            FilterArguments: 'checkedProduct:QMacroPlanner::FormOfflinePlanComparison.dhFinelProduct'
            FixedFilter: 'exists( checkedProduct,Elements,product,product.ID() = object.Name() )'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'LocalRow'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'Index'
        Taborder: 1
      ]
    }
    Component MatrixEditorColumns
    {
      #keys: '[412672.1.61940679]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorColumns
        {
          #keys: '[412672.1.61940680]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'LocalTable'
            FilterArguments: 'startDate:QMacroPlanner::FormOfflinePlanComparison.dhStartDate;endDate:QMacroPlanner::FormOfflinePlanComparison.dhEndDate'
            FixedFilter: 'not object.IsAttrbuteColumn() and startDate <= object.Date() and endDate > object.Date()'
            Source: 'dhComparisonData'
            Taborder: 0
            Transformation: 'LocalColumn'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Date'
        SortCriteria: 'Index'
        Taborder: 2
      ]
    }
    #child: matrixEditorActionBarPageDemandComparison_1
    #child: matrixeditorContextMenuDemandComparison_1
  ]
  Properties:
  [
    AllowMultipleAttributes: true
    Columns: 'MatrixEditorColumns'
    ContextMenu: 'matrixeditorContextMenuDemandComparison'
    Rows: 'MatrixEditorRows'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelDemandComparison#634.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
Quintiq file version 2.0
Component PanelDemandComparison id:PanelDemandComparison_634
{
  #keys: '[412672.1.61940673]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: MatrixEditor_988
    Component dhComparisonData
    {
      #keys: '[412672.1.61940683]'
      BaseType: 'WebDataHolder'
      Databinding: 'LocalTable'
      Properties:
      [
        Taborder: 1
      ]
    }
    Component dhCheckedProduct
    {
      #keys: '[412672.1.61940684]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Product_MP]*'
      Children:
      [
        Component deCheckedProduct
        {
          #keys: '[412672.1.61940685]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[Product_MP]'
            Source: 'ApplicationMacroPlanner.DataHolderCheckedProduct'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Taborder: 3
      ]
    }
    Component dhFinelProduct
    {
      #keys: '[412672.1.61940686]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[Product_MP]*'
      Properties:
      [
        Taborder: 2
      ]
    }
    Component dhCheckedSalesSegment
    {
      #keys: '[412672.1.61940687]'
      BaseType: 'WebDataHolder'
      Databinding: 'structured[SalesSegment_MP]*'
      Children:
      [
        Component deCheckedSalesSegment
        {
          #keys: '[412672.1.61940688]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'structured[SalesSegment_MP]'
            Source: 'ApplicationMacroPlanner.DataHolderCheckedSalesSegment'
            Taborder: 0
            Transformation: 'Elements'
          ]
        }
      ]
      Properties:
      [
        Taborder: 4
      ]
    }
  ]
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelFilter#119.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
Quintiq file version 2.0
Component PanelFilter id:PanelFilter_119
{
  #keys: '[412672.1.61991354]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ddslGeneration
    {
      #keys: '[412672.1.61991355]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        Label: 'Generation'
        Taborder: 0
      ]
    }
    Component ddslMQBMLB
    {
      #keys: '[412672.1.61991356]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        Label: 'MQB/MLB'
        Taborder: 1
      ]
    }
    Component ddslPower
    {
      #keys: '[412672.1.61991357]'
      BaseType: 'WebDropDownStringList'
      Properties:
      [
        Label: '功率'
        Taborder: 2
      ]
    }
    Component dsStartDate
    {
      #keys: '[412672.1.61991358]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        Label: 'Start Date'
        Taborder: 3
      ]
    }
    Component dsEndDate
    {
      #keys: '[412672.1.61991359]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        Date: 9999-12-31
        Label: 'End Date'
        Taborder: 5
      ]
    }
    Component ButtonFilter
    {
      #keys: '[412672.1.61991360]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '过滤'
        Taborder: 7
      ]
    }
    Component dhStartDate
    {
      #keys: '[412672.1.61991361]'
      BaseType: 'WebDataHolder'
      Databinding: 'Date*'
      Properties:
      [
        Taborder: 4
      ]
    }
    Component dhEndDate
    {
      #keys: '[412672.1.61991362]'
      BaseType: 'WebDataHolder'
      Databinding: 'Date*'
      Properties:
      [
        Taborder: 6
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
Component PanelRibbon
{
  #keys: '[412672.1.64210439]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: PanelFilter_119
    #child: PanelRibbon504
  ]
  Properties:
  [
    FixedSize: true
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_PanelRibbon504.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
Quintiq file version 2.0
Component PanelRibbon504
{
  #keys: '[412672.1.64850929]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ddlOfflinePlanTable
    {
      #keys: '[412672.1.64850982]'
      BaseType: 'WebDropDownList'
      Databinding: 'OfflinePlanTable'
      Children:
      [
        Component DataExtractorRibbon
        {
          #keys: '[412672.1.64850983]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'MacroPlan'
            Source: 'MacroPlan'
            Taborder: 0
            Transformation: 'OfflinePlanTable'
          ]
        }
      ]
      Properties:
      [
        DisplayField: 'SaveDateTime'
        Label: '下线计划:'
        Taborder: 0
      ]
    }
    Component bComparison
    {
      #keys: '[412672.1.64851009]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '开始对比'
        Taborder: 1
      ]
    }
    Component LabelRibbon
    {
      #keys: '[412672.1.66018113]'
      BaseType: 'WebLabel'
      Properties:
      [
        DataBinding: 'ddlOfflinePlanTable.Data.SaveDateTime'
        Taborder: 2
      ]
    }
    Component ButtonRibbon
    {
      #keys: '[415720.0.38711791]'
      BaseType: 'WebButton'
      Properties:
      [
        Label: '实际生产数据接口同步'
        Taborder: 3
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixEditorActionBarPageDemandComparison#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixEditorActionBarPageDemandComparison id:matrixEditorActionBarPageDemandComparison_1
{
  #keys: '[412672.1.61940681]'
  BaseType: 'matrixEditorActionBarPage'
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Component_matrixeditorContextMenuDemandComparison#1.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixeditorContextMenuDemandComparison id:matrixeditorContextMenuDemandComparison_1
{
  #keys: '[412672.1.61940682]'
  BaseType: 'matrixeditorContextMenu'
  Properties:
  [
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelDemandComparison_634/dhCheckedProduct
Response OnDataChanged () id:Response_PanelDemandComparison_634_dhCheckedProduct_OnDataChanged
{
  #keys: '[412672.1.61940669]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( this.Data().Size() <> 0 ){
        dhFinelProduct.Data( this.Data().Copy() );
      }else{
        dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: PanelDemandComparison_634/dhCheckedSalesSegment
Response OnDataChanged () id:Response_PanelDemandComparison_634_dhCheckedSalesSegment_OnDataChanged
{
  #keys: '[412672.1.61940667]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      if( this.Data().Size() <> 0 ){
        prods := selectset( dhFinelProduct.Data(),Elements,element,exists( this.Data(),Elements.SalesDemand.Product_MP,prod,element = prod ));
        dhFinelProduct.Data( &prods );
      }else{
        dhFinelProduct.Data( DataHolderProduct.Data().Copy() );
      }
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelDemandComparison_634/dhComparisonData
Response OnDataChanged () id:Response_PanelDemandComparison_634_dhComparisonData_OnDataChanged
{
  #keys: '[412672.1.61940670]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnDataChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      PanelDemandComparison.Title( this.Data().Name() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelDemandComparison_634_dhFinelProduct_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelDemandComparison_634/dhFinelProduct
Response OnCreated () id:Response_PanelDemandComparison_634_dhFinelProduct_OnCreated
{
  #keys: '[412672.1.61940668]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( DataHolderProduct.Data().Copy() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ButtonFilter_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
Quintiq file version 2.0
#parent: PanelFilter_119/ButtonFilter
Response OnClick () id:Response_PanelFilter_119_ButtonFilter_OnClick
{
  #keys: '[412672.1.61991348]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      products := dhCheckedProduct.Data().Copy();
      if( ddslGeneration.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Generation() <> ddslGeneration.Text());
      }
      if( ddslMQBMLB.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.MQBMLB() <> ddslMQBMLB.Text());
      }
      if( ddslPower.Text() <> "<All>" ){
        products := selectset( products,Elements,element,element.Power() <> ddslPower.Text());
      }
      dhFinelProduct.Data( &products );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslGeneration_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelFilter_119/ddslGeneration
Response OnCreated () id:Response_PanelFilter_119_ddslGeneration_OnCreated
{
  #keys: '[412672.1.61991353]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.Generation() );
      res := strings.Concatenate( ";" );
      this.Strings( "<All>;" + res );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslMQBMLB_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelFilter_119/ddslMQBMLB
Response OnCreated () id:Response_PanelFilter_119_ddslMQBMLB_OnCreated
{
  #keys: '[412672.1.61991352]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.MQBMLB() );
      res := strings.Concatenate( ";" );
      this.Strings( "<All>;" + res );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_ddslPower_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
Quintiq file version 2.0
#parent: PanelFilter_119/ddslPower
Response OnCreated () id:Response_PanelFilter_119_ddslPower_OnCreated
{
  #keys: '[412672.1.61991351]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      strings := selectuniquevalues( MacroPlan,Product_MP,product,not product.IsSystem(),product.Power() );
      res := strings.Concatenate( ";" );
      this.Strings( "<All>;" + res );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhEndDate_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelFilter_119/dhEndDate
Response OnCreated () id:Response_PanelFilter_119_dhEndDate_OnCreated
{
  #keys: '[412672.1.61991346]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( Date::MaxDate() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dhStartDate_OnCreated.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelFilter_119/dhStartDate
Response OnCreated () id:Response_PanelFilter_119_dhStartDate_OnCreated
{
  #keys: '[412672.1.61991347]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebComponent_OnCreated'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      this.Data( Date::MinDate() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsEndDate_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelFilter_119/dsEndDate
Response OnChanged () id:Response_PanelFilter_119_dsEndDate_OnChanged
{
  #keys: '[412672.1.61991349]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhEndDate.Data( this.Date() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelFilter_119_dsStartDate_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelFilter_119/dsStartDate
Response OnChanged () id:Response_PanelFilter_119_dsStartDate_OnChanged
{
  #keys: '[412672.1.61991350]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
  GroupServerCalls: true
  QuillAction
  {
    Body:
    [*
      dhStartDate.Data( this.Date() );
    *]
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_ButtonRibbon_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
Quintiq file version 2.0
#parent: PanelRibbon504/ButtonRibbon
Response OnClick () id:Response_PanelRibbon504_ButtonRibbon_OnClick
{
  #keys: '[415720.0.38711805]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      ActualDailyProductionData::Synchronize( MacroPlan,InterfaceDataset );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/Response_PanelRibbon504_bComparison_OnClick#613.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#parent: PanelRibbon504/bComparison
Response OnClick () id:Response_PanelRibbon504_bComparison_OnClick_613
{
  #keys: '[412672.1.64851008]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  QuillAction
  {
    Body:
    [*
      opt := ddlOfflinePlanTable.Data();
      dhComparisonData.Data( opt.Comparison( RecycleBin ));
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormOfflinePlanComparison/_ROOT_Component_FormOfflinePlanComparison.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormOfflinePlanComparison
{
  #keys: '[412672.1.61921213]'
  BaseType: 'WebForm'
  Children:
  [
    #child: PanelRibbon
    #child: PanelDemandComparison_634
  ]
  Properties:
  [
    Image: 'DOCUMENT_INFO'
    Title: '产量对比报表'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_MatrixEditorTable.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
Quintiq file version 2.0
Component MatrixEditorTable
{
  #keys: '[415136.0.904311855]'
  BaseType: 'WebMatrixEditor'
  Children:
  [
    Component MatrixEditorCellTable
    {
      #keys: '[415136.0.904311856]'
      BaseType: 'WebMatrixEditorCell'
      Children:
      [
        Component DataExtractorCell
        {
          #keys: '[415136.0.904311857]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            Source: 'InterfaceDataset'
            Taborder: 0
            Transformation: 'ShippingActualRow.ShippingActualCell'
          ]
        }
      ]
      Properties:
      [
        Attributes: 'Quantity'
        Column: 'ShippingActualColumn'
        Row: 'ShippingActualRow'
        Taborder: 0
      ]
    }
    Component MatrixEditorRowsTable
    {
      #keys: '[415136.0.904311860]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorRow
        {
          #keys: '[415136.0.904311861]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            Source: 'InterfaceDataset'
            Taborder: 0
            Transformation: 'ShippingActualRow'
          ]
        }
      ]
      Properties:
      [
        Legend: 'Name'
        SortCriteria: 'RowNr'
        Taborder: 1
      ]
    }
    Component MatrixEditorColumnsTable
    {
      #keys: '[415136.0.904311864]'
      BaseType: 'WebMatrixEditorHeaderLevel'
      Children:
      [
        Component DataExtractorColumn
        {
          #keys: '[415136.0.904311865]'
          BaseType: 'WebDataExtractor'
          Properties:
          [
            DataType: 'InterfaceDataset'
            Source: 'InterfaceDataset'
            Taborder: 0
            Transformation: 'ShippingActualColumn'
          ]
        }
      ]
      Properties:
      [
        Legend: 'StartDate'
        SortCriteria: 'StartDate'
        Taborder: 2
      ]
    }
    #child: matrixEditorActionBarPageTable
    #child: matrixeditorContextMenuTable
  ]
  Properties:
  [
    Columns: 'MatrixEditorColumnsTable'
    ContextMenu: 'matrixeditorContextMenuTable'
    Rows: 'MatrixEditorRowsTable'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_PanelButton.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
Quintiq file version 2.0
Component PanelButton
{
  #keys: '[415136.0.904311760]'
  BaseType: 'WebPanel'
  Children:
  [
    Component ButtonButton
    {
      #keys: '[415136.0.904311805]'
      BaseType: 'WebButton'
      Properties:
      [
        Image: 'EXPORT1'
        Taborder: 0
      ]
    }
  ]
  Properties:
  [
    FixedSize: true
    Orientation: 'horizontal'
    Taborder: 0
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_PanelTable.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
Quintiq file version 2.0
Component PanelTable
{
  #keys: '[415136.0.904311784]'
  BaseType: 'WebPanel'
  Children:
  [
    #child: MatrixEditorTable
  ]
  Properties:
  [
    Taborder: 1
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_matrixEditorActionBarPageTable.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixEditorActionBarPageTable
{
  #keys: '[415136.0.904311868]'
  BaseType: 'matrixEditorActionBarPage'
  Properties:
  [
    Taborder: 3
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Component_matrixeditorContextMenuTable.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
Quintiq file version 2.0
Component matrixeditorContextMenuTable
{
  #keys: '[415136.0.904311871]'
  BaseType: 'matrixeditorContextMenu'
  Properties:
  [
    Taborder: 4
  ]
}
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/Response_PanelButton_ButtonButton_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
Quintiq file version 2.0
#parent: PanelButton/ButtonButton
Response OnClick () id:Response_PanelButton_ButtonButton_OnClick
{
  #keys: '[415136.0.904312139]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  Precondition:
  [*
    return not isnull( InterfaceDataset );
  *]
  QuillAction
  {
    Body:
    [*
      binaryValue := ShippingActualData::Export( InterfaceDataset );
      Application.Download( ShippingActualData::GetDefalutName() + '.xlsx', binaryValue.AsBinaryData() );
      //ShippingActualData::Synchronize( InterfaceDataset );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_FormShippingActualData/_ROOT_Component_FormShippingActualData.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
Quintiq file version 2.0
#root
#parent: MacroPlannerWebApp
OrphanComponent FormShippingActualData
{
  #keys: '[415136.0.904311721]'
  BaseType: 'WebForm'
  Children:
  [
    #child: PanelButton
    #child: PanelTable
  ]
  Properties:
  [
    Image: 'TABLE_CONNECTION'
    Title: 'Shipping data'
  ]
}
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Component_pnlEventType.def
@@ -40,7 +40,6 @@
          Properties:
          [
            DataType: 'structured[LibCal_EventType]'
            FixedFilter: 'object.IsLeaf()'
            Source: 'dhEventTypes'
            Taborder: 0
            Transformation: 'Elements'
@@ -49,6 +48,7 @@
      ]
      Properties:
      [
        AllowEmpty: true
        Description: 'dhEvent.Data.EventType'
        DisplayField: 'Name'
        NumberOfColumns: 15
@@ -61,5 +61,6 @@
  [
    Orientation: 'horizontal'
    Taborder: 4
    Visible: false
  ]
}
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_CreateEvent#791.def
@@ -29,6 +29,13 @@
    {
      sEvent.Type( LibCal_Event::TYPE_PARTIAL() );
    }
    if( guard( category_i.Name() = LibCal_Event::TYPE_UNAVAILABLE(), false ) )
    {
      pnlEventType.Visible( true );
    }else
    {
      pnlEventType.Visible( false );
    }
    
    // Set the Event and the related controls...
    // The values are explicitly assigned here 'at the beginning' to the controls,
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgEvent/Method_EditEvent.def
@@ -29,7 +29,14 @@
    this.InitializeEventTypes();
    // Must be done here, when done in the OnCreated() the checkmarks are not always set.
    this.InitializeSubscribers();
    if( guard( sEvent.EventCategory().Name() = LibCal_Event::TYPE_UNAVAILABLE(), false ) )
    {
      pnlEventType.Visible( true );
    }else
    {
      pnlEventType.Visible( false );
    }
    ddlEventType.Data( sEvent.EventType() );
    // Open the dialog.
    this.Show( "modal" );
  *]
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_ListList.def
@@ -12,7 +12,7 @@
      Properties:
      [
        DataType: 'LibCal_EventCategory'
        FixedFilter: "object.Participation().Calendar().CalendarID() <> 'Common Calendar'"
        FixedFilter: "object.Participation().Calendar().CalendarID() <> 'Common Calendar' and object.Participation().Event().IsMultiple()"
        Source: 'dhCategory'
        Taborder: 0
        Transformation: 'Event.Participation.ExplicitTimeInterval'
@@ -29,8 +29,9 @@
      ]
      Properties:
      [
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":""}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Calendar.CalendarID","title":"CalendarID","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Calendar.CalendarID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.EventType.Name","title":"Name","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.EventType.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Subject","title":"Subject","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.Subject"}},{"attribute":{"classtype":"WebApiDefinitionAttributeExpression","columnid":"StartDate","title":"StartDate","subtotals":"","tooltip":"","width":-1,"display":"shown","expressionbody":"object.Start().Date()"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.StartTimeOfDay","title":"StartTimeOfDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.StartTimeOfDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.EndTimeOfDay","title":"EndTimeOfDay","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.EndTimeOfDay"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Description","title":"Description","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.Description"}}]'
        Columns: '[{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Calendar.CalendarID","title":"产线","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Calendar.CalendarID"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.EventType.Name","title":"事件类型","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.EventType.Name"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Subject","title":"事件","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.Subject"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Start","title":"开始日期","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Start"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"End","title":"结束日期","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"End"}},{"attribute":{"classtype":"WebApiDefinitionAttributeDataMember","columnid":"Participation.Event.Description","title":"备注","subtotals":"","tooltip":"","width":-1,"display":"shown","editable":false,"attribute":"Participation.Event.Description"}}]'
        ContextMenu: 'listContextMenu967'
        SortCriteria: 'desc:Start'
        Taborder: 2
      ]
    }
@@ -39,4 +40,22 @@
  [
    Taborder: 0
  ]
  ResponseDefinitions:
  [
    DelegatedResponseDefinition OnClick id:Responsedef_ListList_WebMenu_OnClick
    {
      #keys: '[415136.0.905460388]'
      Initiator: 'WebMenu'
      IsInherited: false
      ResponseType: 'OnClick'
      Arguments:
      [
        ResponseDefinitionArgument selection
        {
          #keys: '[1197.0.10345066]'
          Binding: 'this.Selection()'
        }
      ]
    }
  ]
}
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_PanelHeader#144.def
@@ -12,7 +12,7 @@
      Properties:
      [
        DataBinding: 'dhEvent.Data.Subject'
        Label: 'Name'
        Label: '事件'
        PlaceHolder: '<Enter a name>'
        Taborder: 0
      ]
@@ -25,10 +25,11 @@
      [
        CanBeNegative: false
        DurationFormat: 'h:m'
        Label: 'Start time'
        Label: '开始日期'
        MaxDuration: P0DT23H59M0S
        MinDuration: P0DT0H0M0S
        Taborder: 8
        ShowLabel: false
        Taborder: 9
      ]
    }
    Component dhStartTimeOfDay
@@ -38,7 +39,7 @@
      Databinding: 'Duration'
      Properties:
      [
        Taborder: 9
        Taborder: 10
      ]
    }
    Component durEndTimeOfDay
@@ -49,10 +50,11 @@
      [
        CanBeNegative: false
        DurationFormat: 'h:m'
        Label: 'End time'
        Label: '结束日期'
        MaxDuration: P0DT23H59M0S
        MinDuration: P0DT0H0M0S
        Taborder: 10
        ShowLabel: false
        Taborder: 13
      ]
    }
    Component dhEndTimeOfDay
@@ -62,7 +64,7 @@
      Databinding: 'Duration'
      Properties:
      [
        Taborder: 11
        Taborder: 14
      ]
    }
    Component edtDescription
@@ -77,7 +79,7 @@
        Multiline: true
        NumberOfColumns: 29
        ShowLabel: false
        Taborder: 13
        Taborder: 16
      ]
    }
    Component dsStartDate
@@ -87,8 +89,8 @@
      Properties:
      [
        DateFormat: 'DMMY'
        Label: 'Date'
        Taborder: 6
        Label: '开始日期'
        Taborder: 7
      ]
    }
    Component dhStartDate
@@ -98,7 +100,7 @@
      Databinding: 'Date'
      Properties:
      [
        Taborder: 7
        Taborder: 8
      ]
    }
    Component lblDescription id:lblDescription_456
@@ -107,9 +109,9 @@
      BaseType: 'WebLabel'
      Properties:
      [
        Label: 'Description'
        Label: '备注'
        NumberOfColumns: 0
        Taborder: 12
        Taborder: 15
      ]
    }
    Component ButtonCreate
@@ -118,8 +120,8 @@
      BaseType: 'WebButton'
      Properties:
      [
        Label: '新建'
        Taborder: 14
        Label: '新增'
        Taborder: 17
      ]
    }
    Component ddslType id:ddslType_360
@@ -190,7 +192,6 @@
          Properties:
          [
            DataType: 'structured[LibCal_EventType]'
            FixedFilter: 'object.IsLeaf()'
            Source: 'dhEventTypes'
            Taborder: 0
            Transformation: 'Elements'
@@ -199,12 +200,46 @@
      ]
      Properties:
      [
        AllowEmpty: true
        DisplayField: 'Name'
        Label: 'Event type'
        Label: '事件类型'
        NumberOfColumns: 15
        Taborder: 3
      ]
    }
    Component dsEndDate
    {
      #keys: '[415136.0.923680588]'
      BaseType: 'WebDateSelector'
      Properties:
      [
        DateFormat: 'DMMY'
        Label: '结束日期'
        Taborder: 11
      ]
    }
    Component dhEndDate
    {
      #keys: '[415136.0.923671132]'
      BaseType: 'WebDataHolder'
      Databinding: 'Date'
      Properties:
      [
        Taborder: 12
      ]
    }
    Component ckbIsAllDay id:ckbIsAllDay_812
    {
      #keys: '[415136.0.926885762]'
      BaseType: 'WebCheckbox'
      Properties:
      [
        CheckboxType: 'toggle'
        Label: 'All day'
        NumberOfColumns: 0
        Taborder: 6
      ]
    }
  ]
  Properties:
  [
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Component_listContextMenu967.def
@@ -3,6 +3,31 @@
{
  #keys: '[415136.0.657740261]'
  BaseType: 'listContextMenu'
  Children:
  [
    Component MenuDelete
    {
      #keys: '[415136.0.905460274]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'DELETE'
        Taborder: 4
        Title: 'Delete'
      ]
    }
    Component MenuEdit
    {
      #keys: '[415136.0.925451472]'
      BaseType: 'WebMenu'
      Properties:
      [
        Image: 'PENCIL'
        Taborder: 3
        Title: 'Edit'
      ]
    }
  ]
  Properties:
  [
    Taborder: 0
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateEvent#778.def
@@ -48,7 +48,7 @@
    // Set the Participation and the related controls
    // (only the DataHolders, the Date-controls are set later on, after the recurrence has been initialized)
    dhStartDate.Data( sLeadPart.StartDate() );
    //dhEndDate.Data(   sLeadPart.EndDate()   );
    dhEndDate.Data(   sLeadPart.EndDate()   );
    dhLeadingParticipation.Data( &sLeadPart );
    dhCategory.Data(category_i);
    //info( '-----------------------', isnull( dhLeadingParticipation.Data() ) );
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_CreateUpdateEventAndParticipation.def
@@ -18,9 +18,9 @@
    isDefault      := ckbApplyToNewResources.Checked();
    startDate      := dsStartDate.Date();
    startTimeOfDay := durStartTimeOfDay.Duration();
    endDate        := dsStartDate.Date();
    endDate        := dsEndDate.Date();
    endTimeOfDay   := durEndTimeOfDay.Duration();
    isAllDay       := false;
    isAllDay       := ckbIsAllDay.Checked();
    
    eventType := ddslType.Text();
    capacity  := Real::MinReal();  // Always fill the capacity.
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_SetParticipationData.def
@@ -23,6 +23,7 @@
    // the value of the other controls are then set via the responses of these controls.
    //dhEndDate  .Data( sParticipation.EndDate() + delta );
    dsStartDate.Date( startDate );
    dsEndDate.Date( startDate );
    
    // Directly initialize the Duration
    //this.InitializeDuration();
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Method_ShowAllDay.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
Quintiq file version 2.0
#parent: #root
Method ShowAllDay () id:Method_LibCal_dlgMultipleEvent_ShowAllDay
{
  #keys: '[415136.0.926885827]'
  Body:
  [*
    // Show the controls according to the state of ckbAllDay.
    // Keep as is when running in days only mode.
    if( not LibCal_Event::USE_ONLY_DAYS() )
    {
      if( ckbIsAllDay.Checked() )
      {
        // Store the EndDate before updating the StartTime, otherwise setting the StartTime can already have influenced the EndDate.
        endDate := dsEndDate.Date();
        // Set to whole day if this is not yet the case.
        if( durStartTimeOfDay.Duration() <> Duration::Zero() )
        {
          durStartTimeOfDay.Duration( Duration::Zero() );
        }
        if( durEndTimeOfDay.Duration() <> Duration::Zero() )
        {
          durEndTimeOfDay.Duration( Duration::Zero() );
          dsEndDate.Date( endDate + 1 );
        }
        // Disable the controls.
        durStartTimeOfDay.Enabled( false, "All day is selected" );
        durEndTimeOfDay  .Enabled( false, "All day is selected" );
      }
      else
      {
        if( durStartTimeOfDay.Duration() <> dhStartTimeOfDay.Data() )
        {
          durStartTimeOfDay.Duration( dhStartTimeOfDay.Data() );
        }
        if( durEndTimeOfDay.Duration() <> dhEndTimeOfDay.Data() )
        {
          durEndTimeOfDay.Duration( dhEndTimeOfDay.Data() );
          // During initialization, just take over the value from the DataHolder.
          endDate := dsEndDate.Date();
          if( endDate.IsInfinite() )
          {
            endDate := dhEndDate.Data();
          }
          // See if the EndDate must be corrected.
          else if( dhEndTimeOfDay.Data() <> Duration::Zero() )
          {
            endDate := endDate - 1;
          }
          dsEndDate.Date( endDate );
        }
        durStartTimeOfDay.Enabled( true, "" );
        durEndTimeOfDay  .Enabled( true, "" );
      }
    }
  *]
}
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuDelete_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
Quintiq file version 2.0
#parent: ListList
Response OnClick (
  structured[LibCal_ExplicitTimeInterval] selection
) id:Response_ListList_MenuDelete_OnClick
{
  #keys: '[415136.0.905460576]'
  CanBindMultiple: false
  DefinitionID => /ListList/Responsedef_ListList_WebMenu_OnClick
  Initiator: 'MenuDelete'
  QuillAction
  {
    Body:
    [*
      LibCal_ExplicitTimeInterval::Delete( selection );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_ListList_MenuEdit_OnClick.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
Quintiq file version 2.0
#parent: ListList
Response OnClick (
  LibCal_ExplicitTimeInterval selection
) id:Response_ListList_MenuEdit_OnClick
{
  #keys: '[415136.0.925451544]'
  CanBindMultiple: false
  DefinitionID => /ListList/Responsedef_ListList_WebMenu_OnClick
  Initiator: 'MenuEdit'
  QuillAction
  {
    Body:
    [*
      dlg := construct( LibCal_dlgEditTimeInterval );
      dlg.edtComment().Visible( false )
      dlg.Edit( selection );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ButtonCreate_OnClick.def
@@ -6,6 +6,10 @@
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebButton_OnClick'
  GroupServerCalls: true
  Precondition:
  [*
    return LibCal_Event::ValidDate( feedback, MacroPlan, dhStartDate.Data() + durStartTimeOfDay.Duration(), dhEndDate.Data() + durEndTimeOfDay.Duration() );
  *]
  QuillAction
  {
    Body:
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_ckbIsAllDay_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
Quintiq file version 2.0
#parent: PanelHeader_144/ckbIsAllDay_812
Response OnChanged () id:Response_MacroPlanner_pnlStartTime_ckbIsAllDay_OnChanged
{
  #keys: '[415136.0.926885761]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebCheckbox_OnChanged'
  QuillAction
  {
    Body:
    [*
      //是否是一整天
      Form.ShowAllDay();
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Component_LibCal_dlgMultipleEvent/Response_PanelHeader_144_dsEndDate_OnChanged.def
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
Quintiq file version 2.0
#parent: PanelHeader_144/dsEndDate
Response OnChanged () id:Response_PanelHeader_144_dsEndDate_OnChanged
{
  #keys: '[415136.0.923680587]'
  CanBindMultiple: false
  DefinitionID: 'Responsedef_WebDateTimeFieldBase_OnChanged'
  QuillAction
  {
    Body:
    [*
      // Adjust the EndDate accordingly.
      //if( dhStartDate.Data().IsFinite() )
      //{
      //  // Use the EndDate of the instance if the value of the control has not been set yet.
      //  endDate := ifexpr( dsEndDate.Date().IsFinite(), dsEndDate.Date(), dhLeadingParticipation.Data().EndDate() );
      //
      //  delta := this.Date() - dhStartDate.Data();
      //  dsEndDate.Date( endDate + delta );
      //}
      // Update the 'memory' for later delta-calculation, and/or setting the time back when AllDay is turned off.
      dhEndDate.Data( this.Date() );
      // Also set StartOfPeriod (always, also in case of a non-recurring event).
      //dsStartOfPeriod.Date( this.Date() );
    *]
    GroupServerCalls: false
  }
}
_Main/UI/MacroPlannerWebApp/Views/Calendar_unavailable_event_view.vw
@@ -107,10 +107,10 @@
          FormCalendarUnavailableEvent_MatrixEditorTable
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 37
            totalHeaderWidth: 231
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 238
            columnWidth: 74
            horizontalGrid: true
            verticalGrid: true
            backendState
_Main/UI/MacroPlannerWebApp/Views/Finished_engine_inventory.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,200 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormFinishedEngineInventory
      {
        title: 'QMacroPlanner::FormFinishedEngineInventory'
        shown: true
        componentID: 'QMacroPlanner::FormFinishedEngineInventory'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 15
          columnPosition: 1
          columnSpan: 12
        }
        components
        {
          FormFinishedEngineInventory_ListFinishedEngineInventory
          {
          }
          FormFinishedEngineInventory_DataSetLevelFinishedEngineInventory
          {
            groupDepth: -1
            sort: 'DESC:DDay'
            column_FourCode
            {
              columnId: 'FourCode'
              dataPath: 'FourCode'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
            column_VehicleType
            {
              columnId: 'VehicleType'
              dataPath: 'VehicleType'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 150
            }
            column_ReceiptPlace
            {
              columnId: 'ReceiptPlace'
              dataPath: 'ReceiptPlace'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 150
            }
            column_FullName
            {
              columnId: 'FullName'
              dataPath: 'FullName'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 150
            }
            column_SpellName
            {
              columnId: 'SpellName'
              dataPath: 'SpellName'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 150
            }
            column_EngineType
            {
              columnId: 'EngineType'
              dataPath: 'EngineType'
              dataType: 'string'
              index: 5
              subtotals: ''
              width: 150
            }
            column_EngineModularPlatform
            {
              columnId: 'EngineModularPlatform'
              dataPath: 'EngineModularPlatform'
              dataType: 'string'
              index: 6
              subtotals: ''
              width: 150
            }
            column_Brand
            {
              columnId: 'Brand'
              dataPath: 'Brand'
              dataType: 'string'
              index: 7
              subtotals: ''
              width: 150
            }
            column_BIPlace
            {
              columnId: 'BIPlace'
              dataPath: 'BIPlace'
              dataType: 'string'
              index: 8
              subtotals: ''
              width: 150
            }
            column_Price
            {
              columnId: 'Price'
              dataPath: 'Price'
              dataType: 'string'
              index: 9
              subtotals: ''
              width: 150
            }
            column_Total
            {
              columnId: 'Total'
              dataPath: 'Total'
              dataType: 'real'
              index: 10
              subtotals: ''
              width: 150
            }
            column_Amount
            {
              columnId: 'Amount'
              dataPath: 'Amount'
              dataType: 'real'
              index: 11
              subtotals: ''
              width: 150
            }
            column_DType
            {
              columnId: 'DType'
              dataPath: 'DType'
              dataType: 'string'
              index: 12
              subtotals: ''
              width: 150
            }
            column_Fac
            {
              columnId: 'Fac'
              dataPath: 'Fac'
              dataType: 'string'
              index: 13
              subtotals: ''
              width: 150
            }
            column_DDay
            {
              columnId: 'DDay'
              dataPath: 'DDay'
              dataType: 'date'
              index: 14
              subtotals: ''
              width: 150
            }
            column_DWeek
            {
              columnId: 'DWeek'
              dataPath: 'DWeek'
              dataType: 'string'
              index: 15
              subtotals: ''
              width: 150
            }
            column_DMonth
            {
              columnId: 'DMonth'
              dataPath: 'DMonth'
              dataType: 'string'
              index: 16
              subtotals: ''
              width: 150
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 24
    image: 'SPREADSHEET'
    description: ''
  }
  formatversion: 2
  id: 'Finished_engine_inventory'
  name: 'Finished engine inventory'
  isglobal: false
  isroot: true
}
_Main/UI/MacroPlannerWebApp/Views/Interface_loginfo_view.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,146 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormInterfaceLoginfo
      {
        title: 'QMacroPlanner::FormInterfaceLoginfo'
        shown: true
        componentID: 'QMacroPlanner::FormInterfaceLoginfo'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 16
          columnPosition: 1
          columnSpan: 12
        }
        components
        {
          FormInterfaceLoginfo_ListInterfaceLoginfo
          {
          }
          FormInterfaceLoginfo_DataSetLevelInterfaceLoginfo
          {
            groupDepth: -1
            sort: 'DESC:InterfaceDateTime'
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
            column_ExecuteUser
            {
              columnId: 'ExecuteUser'
              dataPath: 'ExecuteUser'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 150
            }
            column_InterfaceDateTime
            {
              columnId: 'InterfaceDateTime'
              dataPath: 'InterfaceDateTime'
              dataType: 'datetime'
              index: 2
              subtotals: ''
              width: 150
            }
            column_FinishTime
            {
              columnId: 'FinishTime'
              dataPath: 'FinishTime'
              dataType: 'datetime'
              index: 3
              subtotals: ''
              width: 150
            }
            column_Message
            {
              columnId: 'Message'
              dataPath: 'Message'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 150
            }
            column_Success
            {
              columnId: 'Success'
              dataPath: 'Success'
              dataType: 'boolean'
              index: 5
              subtotals: ''
              width: 150
            }
            column_ReturnSuccess
            {
              columnId: 'ReturnSuccess'
              dataPath: 'ReturnSuccess'
              dataType: 'boolean'
              index: 6
              subtotals: ''
              width: 150
            }
            column_ReturnMsg
            {
              columnId: 'ReturnMsg'
              dataPath: 'ReturnMsg'
              dataType: 'string'
              index: 7
              subtotals: ''
              width: 150
            }
            column_Last
            {
              columnId: 'Last'
              dataPath: 'Last'
              dataType: 'boolean'
              index: 8
              subtotals: ''
              width: 150
            }
            column_TotalRow
            {
              columnId: 'TotalRow'
              dataPath: 'TotalRow'
              dataType: 'number'
              index: 9
              subtotals: ''
              width: 150
            }
            column_RequestBody
            {
              columnId: 'RequestBody'
              dataPath: 'RequestBody'
              dataType: 'string'
              index: 10
              subtotals: ''
              width: 150
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 22
    image: 'DOCUMENT'
    description: ''
  }
  formatversion: 2
  id: 'Interface_loginfo_view'
  name: 'Interface loginfo view'
  isglobal: false
  isroot: true
}
_Main/UI/MacroPlannerWebApp/Views/Labor_Costs.vw
@@ -2,10 +2,183 @@
{
  viewcontents
  {
    image: 'MONEY_BILL_FIRE'
    forms
    {
      form_FormEmployeeCost
      {
        title: 'QMacroPlanner::FormEmployeeCost'
        shown: true
        componentID: 'QMacroPlanner::FormEmployeeCost'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 25
          columnPosition: 1
          columnSpan: 10
        }
        components
        {
          FormEmployeeCost_Panel189
          {
            sizeRatio: 1
          }
          FormEmployeeCost_PanelEmployeeCost
          {
            sizeRatio: 1
          }
          FormEmployeeCost_PanelAction
          {
            sizeRatio: 1
          }
          FormEmployeeCost_ListEmployeeCost
          {
          }
          FormEmployeeCost_DataSetLevel775
          {
            groupDepth: -1
            column_EmployeeType_Name
            {
              columnId: 'EmployeeType.Name'
              dataPath: 'EmployeeType.Name'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
            column_EmployeeNumber
            {
              columnId: 'EmployeeNumber'
              dataPath: 'EmployeeNumber'
              dataType: 'number'
              index: 1
              subtotals: ''
              width: 150
            }
            column_Unit_Name
            {
              columnId: 'Unit.Name'
              dataPath: 'Unit.ID'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 150
            }
            column_StartDate
            {
              columnId: 'StartDate'
              dataPath: 'StartDate'
              dataType: 'date'
              index: 3
              subtotals: ''
              width: 150
            }
            column_TimeUnit
            {
              columnId: 'TimeUnit'
              dataPath: 'TimeUnit'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 150
            }
            column_BaseSalary
            {
              columnId: 'BaseSalary'
              dataPath: 'BaseSalary'
              dataType: 'real'
              index: 5
              subtotals: ''
              width: 150
            }
          }
          FormEmployeeCost_Panel972
          {
            sizeRatio: 1
          }
          FormEmployeeCost_Panel700
          {
            sizeRatio: 1
          }
          FormEmployeeCost_PanelOvertimeMultiplier
          {
            sizeRatio: 1
          }
          FormEmployeeCost_PanelEditOvertimeMultiplier
          {
            sizeRatio: 1
          }
          FormEmployeeCost_PanelActions
          {
            sizeRatio: 1
          }
          FormEmployeeCost_ListOvertimeMultiplier
          {
          }
          FormEmployeeCost_DataSetLevel613
          {
            groupDepth: -1
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
            column_Multiplier
            {
              columnId: 'Multiplier'
              dataPath: 'Multiplier'
              dataType: 'real'
              index: 1
              subtotals: ''
              width: 150
            }
          }
          FormEmployeeCost_PanelEmployeeType
          {
            sizeRatio: 1
          }
          FormEmployeeCost_PanelEditEmployeeType
          {
            sizeRatio: 1
          }
          FormEmployeeCost_PanelActions526
          {
            sizeRatio: 1
          }
          FormEmployeeCost_ListEmployeeType
          {
          }
          FormEmployeeCost_DataSetLevel963
          {
            groupDepth: -1
            column_Name
            {
              columnId: 'Name'
              dataPath: 'Name'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
          }
          FormEmployeeCost_PanelStandardWorkingDay
          {
            sizeRatio: 1
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 0
    image: 'MONEY_BILL_FIRE'
    description: ''
  }
  formatversion: 2
_Main/UI/MacroPlannerWebApp/Views/Machine_stock_data.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormMachineStockData
      {
        title: 'QMacroPlanner::FormMachineStockData'
        shown: true
        componentID: 'QMacroPlanner::FormMachineStockData'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 15
          columnPosition: 1
          columnSpan: 12
        }
        components
        {
          FormMachineStockData_ListMachineStockData
          {
          }
          FormMachineStockData_DataSetLevelMachineStockData
          {
            groupDepth: -1
            sort: 'DESC:DDay'
            column_MaterialNo
            {
              columnId: 'MaterialNo'
              dataPath: 'MaterialNo'
              dataType: 'string'
              index: 0
              subtotals: ''
              width: 150
            }
            column_MaterialName
            {
              columnId: 'MaterialName'
              dataPath: 'MaterialName'
              dataType: 'string'
              index: 1
              subtotals: ''
              width: 150
            }
            column_Fac
            {
              columnId: 'Fac'
              dataPath: 'Fac'
              dataType: 'string'
              index: 2
              subtotals: ''
              width: 150
            }
            column_FacName
            {
              columnId: 'FacName'
              dataPath: 'FacName'
              dataType: 'string'
              index: 3
              subtotals: ''
              width: 150
            }
            column_LineType
            {
              columnId: 'LineType'
              dataPath: 'LineType'
              dataType: 'string'
              index: 4
              subtotals: ''
              width: 150
            }
            column_DDay
            {
              columnId: 'DDay'
              dataPath: 'DDay'
              dataType: 'date'
              index: 5
              subtotals: ''
              width: 150
            }
            column_Total
            {
              columnId: 'Total'
              dataPath: 'Total'
              dataType: 'real'
              index: 6
              subtotals: ''
              width: 150
            }
            column_AllTotal
            {
              columnId: 'AllTotal'
              dataPath: 'AllTotal'
              dataType: 'real'
              index: 7
              subtotals: ''
              width: 150
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 23
    image: 'SPREADSHEET'
    description: ''
  }
  formatversion: 2
  id: 'Machine_stock_data'
  name: 'Machine stock data'
  isglobal: false
  isroot: true
}
_Main/UI/MacroPlannerWebApp/Views/OfflinePlanComparisonReport.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormOfflinePlanComparison
      {
        title: 'QMacroPlanner::FormOfflinePlanComparison'
        shown: true
        componentID: 'QMacroPlanner::FormOfflinePlanComparison'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 27
          columnPosition: 1
          columnSpan: 9
        }
        components
        {
          FormOfflinePlanComparison_PanelRibbon
          {
            sizeRatio: 1
          }
          FormOfflinePlanComparison_PanelRibbon504
          {
            sizeRatio: 1
          }
          FormOfflinePlanComparison_PanelFilter
          {
            sizeRatio: 1
          }
          FormOfflinePlanComparison_PanelDemandComparison
          {
            sizeRatio: 1
          }
          FormOfflinePlanComparison_MatrixEditor
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 200
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
            horizontalGrid: true
            verticalGrid: true
            backendState
            {
              componentId: 'QMacroPlanner::FormOfflinePlanComparison.MatrixEditor'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_Plan
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'Plan'
                    }
                    attribute_Actual
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 1
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'Actual'
                    }
                    attribute_Gap
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 2
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'Gap'
                    }
                  }
                }
                columns
                {
                  sorting
                  {
                    criteria: "datamember:'Index'"
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'Index'"
                  }
                }
              }
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 0
    image: 'DOCUMENT_INFO'
    description: ''
  }
  formatversion: 2
  id: 'OfflinePlanComparisonReport'
  name: 'OfflinePlanComparisonReport'
  isglobal: false
  isroot: true
}
_Main/UI/MacroPlannerWebApp/Views/Shipping_actual_data_view.vw
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
Quintiq file version 2.0
{
  viewcontents
  {
    forms
    {
      form_FormShippingActualData
      {
        title: 'QMacroPlanner::FormShippingActualData'
        shown: true
        componentID: 'QMacroPlanner::FormShippingActualData'
        layout
        {
          mode: 'open'
          rowPosition: 1
          rowSpan: 15
          columnPosition: 1
          columnSpan: 12
        }
        components
        {
          FormShippingActualData_PanelButton
          {
            sizeRatio: 1
          }
          FormShippingActualData_PanelTable
          {
            sizeRatio: 1
          }
          FormShippingActualData_MatrixEditorTable
          {
            gridColor: '#c4c4c4'
            totalHeaderWidth: 200
            attributeHeaderWidthRatio: 0.6
            nameHeaderWidthRatio: 0.4
            columnWidth: 100
            horizontalGrid: true
            verticalGrid: true
            backendState
            {
              componentId: 'QMacroPlanner::FormShippingActualData.MatrixEditorTable'
              state
              {
                cells
                {
                  attributes
                  {
                    attribute_Quantity
                    {
                      type: 'MatrixEditorWebApiCellDataModelInterest'
                      index: 0
                      rowsubtotal: ''
                      columnsubtotal: ''
                      attribute: 'Quantity'
                    }
                  }
                }
                columns
                {
                  sorting
                  {
                    criteria: "datamember:'StartDate'"
                  }
                }
                rows
                {
                  sorting
                  {
                    criteria: "datamember:'RowNr'"
                  }
                }
              }
            }
          }
        }
      }
    }
    userconfigurableinformation
    {
    }
    page: ''
    group: ''
    index: 21
    image: 'TABLE_CONNECTION'
    description: ''
  }
  formatversion: 2
  id: 'Shipping_actual_data_view'
  name: 'Shipping actual data view'
  isglobal: false
  isroot: true
}