From cbf2cc895f1d1e7dcf522a462e77709d92667747 Mon Sep 17 00:00:00 2001 From: lazhen <17772815105@139.com> Date: 星期五, 11 十月 2024 18:10:13 +0800 Subject: [PATCH] Merge branch 'dev' of http://47.101.211.7:10101/r/VWED into dev-zlg --- _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def | 164 +++++--- _Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl | 70 +++ _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuCapacities.def | 11 _Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl | 50 + _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlContent_ddslProductionLine_OnCreated.def | 2 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def | 3 _Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_MatrixEditor493_OnCheckEditability.def | 22 + _Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl | 4 _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def | 10 _Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl | 40 ++ _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/_ROOT_Component_FormProductionLineBatchSetShiftPattern.def | 1 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelRight_bApply_OnClick.def | 39 ++ _Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuCapacities_MenuBatchSetShiftPattern_OnClick.def | 17 _Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated#57.def | 5 _Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw | 386 ++++++++++++++++++++ _Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnOk_OnClick.def | 4 _Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl | 101 +++++ _Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_Dispatch.qbl | 35 + _Main/BL/Type_CC_EngineRackRow/Attribute_Index.qbl | 7 _Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl | 70 +++ /dev/null | 13 _Main/BL/Relations/Relation_DispatchShiftPlan_Archive_Archive_DispatchShiftPlan.qbl | 23 + _Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Response_pHeader_bRefresh_OnClick.def | 2 _Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/Response_pHeader_bAdd_OnClick.def | 5 _Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl | 33 + 25 files changed, 991 insertions(+), 126 deletions(-) diff --git a/_Main/BL/Relations/Relation_DispatchShiftPlan_Archive_Archive_DispatchShiftPlan.qbl b/_Main/BL/Relations/Relation_DispatchShiftPlan_Archive_Archive_DispatchShiftPlan.qbl new file mode 100644 index 0000000..f45c374 --- /dev/null +++ b/_Main/BL/Relations/Relation_DispatchShiftPlan_Archive_Archive_DispatchShiftPlan.qbl @@ -0,0 +1,23 @@ +Quintiq file version 2.0 +#parent: #root +Relation DispatchShiftPlan_Archive_Archive_DispatchShiftPlan +{ + #keys: '1[414996.1.121982603]' + DefaultRelationStrategy + { + } + RelationSide.LeftSide Archive + { + #keys: '3[414996.1.121982605][414996.1.121982604][414996.1.121982606]' + Cardinality: '0to1' + ObjectDefinition: DispatchShiftPlan + OwningSide: 'Reference' + } + RelationSide.RightSide DispatchShiftPlan + { + #keys: '3[414996.1.121982608][414996.1.121982607][414996.1.121982609]' + Cardinality: '1toN' + ObjectDefinition: Archive + OwningSide: 'Owned' + } +} diff --git a/_Main/BL/Relations/Relation_DispatchShiftPlan_RecycleBin_RecycleBin_DispatchShiftPlan.qbl b/_Main/BL/Relations/Relation_DispatchShiftPlan_RecycleBin_RecycleBin_DispatchShiftPlan.qbl deleted file mode 100644 index 37b7f50..0000000 --- a/_Main/BL/Relations/Relation_DispatchShiftPlan_RecycleBin_RecycleBin_DispatchShiftPlan.qbl +++ /dev/null @@ -1,23 +0,0 @@ -Quintiq file version 2.0 -#parent: #root -Relation DispatchShiftPlan_RecycleBin_RecycleBin_DispatchShiftPlan -{ - #keys: '1[414996.1.17706936]' - DefaultRelationStrategy - { - } - RelationSide.LeftSide RecycleBin - { - #keys: '3[414996.1.17706938][414996.1.17706937][414996.1.17706939]' - Cardinality: '0to1' - ObjectDefinition: DispatchShiftPlan - OwningSide: 'Reference' - } - RelationSide.RightSide DispatchShiftPlan - { - #keys: '3[414996.1.17706941][414996.1.17706940][414996.1.17706942]' - Cardinality: '1toN' - ObjectDefinition: RecycleBin - OwningSide: 'Owned' - } -} diff --git a/_Main/BL/Type_CC_EngineRackCell/Function_CalcEstimatedTotalCost.qbl b/_Main/BL/Type_CC_EngineRackCell/Function_CalcEstimatedTotalCost.qbl deleted file mode 100644 index 1c8e4cb..0000000 --- a/_Main/BL/Type_CC_EngineRackCell/Function_CalcEstimatedTotalCost.qbl +++ /dev/null @@ -1,17 +0,0 @@ -Quintiq file version 2.0 -#parent: #root -Function CalcEstimatedTotalCost -{ - TextBody: - [* - // lihongji Oct-9-2024 (created) - - value := this.StorageFeesForRentedWarehouses() + - this.OutboundExpensesForRentedWarehouses() + - this.ExternalRentalWarehouseTransportationCosts() + - this.RentalWarehouseStorageFees() + - this.CleaningCost() - - this.EstimatedTotalCost( value ); - *] -} diff --git a/_Main/BL/Type_CC_EngineRackCell/Function_CalcNumberOfEmptyShelves.qbl b/_Main/BL/Type_CC_EngineRackCell/Function_CalcNumberOfEmptyShelves.qbl deleted file mode 100644 index 8970d55..0000000 --- a/_Main/BL/Type_CC_EngineRackCell/Function_CalcNumberOfEmptyShelves.qbl +++ /dev/null @@ -1,13 +0,0 @@ -Quintiq file version 2.0 -#parent: #root -Function CalcNumberOfEmptyShelves -{ - TextBody: - [* - // vwedadmin Aug-20-2024 (created) - - value := guard( [Number] ( this.TotalQuantityOfMaterialRacks() - ( this.PlannedInventory() / this.PackagingCapacity() ) ), 0 ); - - this.NumberOfEmptyShelves( value ); - *] -} diff --git a/_Main/BL/Type_CC_EngineRackCell/Function_CalcRentalWarehouseStorageFees.qbl b/_Main/BL/Type_CC_EngineRackCell/Function_CalcRentalWarehouseStorageFees.qbl deleted file mode 100644 index 12e3b4c..0000000 --- a/_Main/BL/Type_CC_EngineRackCell/Function_CalcRentalWarehouseStorageFees.qbl +++ /dev/null @@ -1,13 +0,0 @@ -Quintiq file version 2.0 -#parent: #root -Function CalcRentalWarehouseStorageFees -{ - TextBody: - [* - // vwedadmin Aug-25-2024 (created) - - value := guard( ( this.TotalQuantityOfMaterialRacks() - [Number]( this.PlannedInventory() / this.PackagingCapacity() ) ) * this.UnitPriceOfEmptyShelfStorage(), 0 ); - - this.RentalWarehouseStorageFees( value ); - *] -} diff --git a/_Main/BL/Type_CC_EngineRackCell/Function_CalcTotalCost.qbl b/_Main/BL/Type_CC_EngineRackCell/Function_CalcTotalCost.qbl deleted file mode 100644 index 06eaa74..0000000 --- a/_Main/BL/Type_CC_EngineRackCell/Function_CalcTotalCost.qbl +++ /dev/null @@ -1,13 +0,0 @@ -Quintiq file version 2.0 -#parent: #root -Function CalcTotalCost -{ - TextBody: - [* - // lihongji Oct-9-2024 (created) - - value := this.EstimatedTotalCost() * this.Coefficient(); - - this.TotalCost( value ); - *] -} diff --git a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl index 9a3cdd1..180d987 100644 --- a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl +++ b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_CreateData.qbl @@ -9,12 +9,21 @@ macroPlan.CC_EngineRackRow( relflush ); macroPlan.CC_EngineRackColumn( relflush ); + sumNumberOfEmptyShelves := 0.0; + sumStorageFeesForRentedWarehouses := 0.0; + sumOutboundExpensesForRentedWarehouses := 0.0; + sumExternalRentalWarehouseTransportationCosts := 0.0; + sumRentalWarehouseStorageFees := 0.0; + sumCleaningCost := 0.0; + sumEstimatedTotalCost := 0.0; + sumTotalCost := 0.0; + // 鍒涘缓琛� genrations := selectuniquevalues( macroPlan, Product_MP, tempPMP, tempPMP.Generation().TrimBoth() <> "", tempPMP.Generation() ); mqbmlbs := selectuniquevalues( macroPlan, Product_MP, tempPMP, tempPMP.MQBMLB().TrimBoth() <> "", tempPMP.MQBMLB() ); traverse ( genrations, Elements, g ) { traverse ( mqbmlbs, Elements, m ) { - macroPlan.CC_EngineRackRow( relnew, Generation := g, MLB_MQB := m ); + macroPlan.CC_EngineRackRow( relnew, Generation := g, MLB_MQB := m, Index := 1 ); } } @@ -47,15 +56,18 @@ // 绌烘枡鏋舵暟閲忥紙闀挎槬鍘傝浜у搧鐨勬枡鏋舵�绘暟閲� - 鍙戝姩鏈哄簱瀛� / 鍖呰瀹归噺 锛� plannedInventory := sum( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, tempPISPIP, - tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf() and - exists( tempPISPIP.ProductInStockingPoint_MP().Product_MP(), AllParent.AsParent, tempPMP, tempPMP.ID() = "鍙戝姩鏈�" ) and - tempPISPIP.ProductInStockingPoint_MP().StockingPointID() = "闀挎槬澶栫搴�" and - tempPISPIP.ProductInStockingPoint_MP().Product_MP().Generation() = ccerr.Generation() and - tempPISPIP.ProductInStockingPoint_MP().Product_MP().MQBMLB() = ccerr.MLB_MQB() and - tempPISPIP.Start().Date() = lastDayOfThisMonth, + tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf() and + exists( tempPISPIP.ProductInStockingPoint_MP().Product_MP(), AllParent.AsParent, tempPMP, tempPMP.ID() = "鍙戝姩鏈�" ) and + tempPISPIP.ProductInStockingPoint_MP().StockingPointID() = "闀挎槬澶栫搴�" and + tempPISPIP.ProductInStockingPoint_MP().Product_MP().Generation() = ccerr.Generation() and + tempPISPIP.ProductInStockingPoint_MP().Product_MP().MQBMLB() = ccerr.MLB_MQB() and + tempPISPIP.Start().Date() >= ccerc.StartDate() and + tempPISPIP.End().Date() <= lastDayOfThisMonth, tempPISPIP.PlannedInventoryLevelEnd() ); cell.PackagingCapacity( guard( lce.PackagingCapacity(), 1 ) ); cell.PlannedInventory( plannedInventory ); + cell.NumberOfEmptyShelves( guard( [Number] ( cell.TotalQuantityOfMaterialRacks() - ( plannedInventory / lce.PackagingCapacity() ) ), 0 ) ); + sumNumberOfEmptyShelves := sumNumberOfEmptyShelves + cell.NumberOfEmptyShelves(); // 澶栫搴撳叆搴撹垂鐢紙鍙戝姩鏈洪攢閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍏ュ簱鍗曚环锛� engineSales := sum( macroPlan, FSImportData, tempFSID, @@ -65,8 +77,8 @@ tempFSID.StartDate().Year() = ccerc.StartDate().Year() and tempFSID.StartDate().Month() = ccerc.StartDate().Month(), tempFSID.Quantity() ); - cell.StorageFeesForRentedWarehouses( [Number] ( engineSales / guard( lce.PackagingCapacity(), 1 ) * guard( lcmr.WarehousingPrice(), 1 ) ) ); + sumStorageFeesForRentedWarehouses := sumStorageFeesForRentedWarehouses + cell.StorageFeesForRentedWarehouses(); // 澶栫搴撳嚭搴撹垂鐢紙鍙戝姩鏈轰骇閲� / 鍖呰瀹归噺[鍚戜笂鍙栨暣] * 鏂欐灦鍑哄簱鍗曚环锛� engineProductions := sum( macroPlan, FPImportData, tempFPID, @@ -77,6 +89,7 @@ tempFPID.StartDate().Month() = ccerc.StartDate().Month(), tempFPID.Quantity() ); cell.OutboundExpensesForRentedWarehouses( [Number] ( engineProductions / guard( lce.PackagingCapacity(), 1 ) ) * guard( lcmr.OutboundPrice(), 1 ) ); + sumOutboundExpensesForRentedWarehouses := sumOutboundExpensesForRentedWarehouses + cell.OutboundExpensesForRentedWarehouses(); // 澶栫搴撹繍杈撹垂鐢細鍙戝姩鏈鸿繍杈撻噺 / 鍖呰瀹归噺 / 瑁呰浇瀹归噺锛堝悜涓婂彇鏁达級 * 鏂欐灦杩愯緭鍗曚环 transportationQuantity := sum( macroPlan, Unit.Lane.LaneLeg.Trip.ProductInTrip, tempPIT, @@ -89,16 +102,53 @@ tempPIT.Quantity() ); // info( "鏃堕棿锛�", ccerc.StartDate().Format( "Y-M2-D2" ), " 杩愯緭鏁版嵁锛�", transportationQuantity, " 杩愯緭鍗曚环锛�", lct.TransportPrice() ); - cell.ExternalRentalWarehouseTransportationCosts( transportationQuantity / guard( lce.PackagingCapacity(), 1 ) / guard( lct.LoadingCapacity(), 1 ) * guard( lct.TransportPrice(), 1 ) ); + cell.ExternalRentalWarehouseTransportationCosts( [Number] ( transportationQuantity / guard( lce.PackagingCapacity(), 1 ) / guard( lct.LoadingCapacity(), 1 ) * guard( lct.TransportPrice(), 1 ) ) ); + sumExternalRentalWarehouseTransportationCosts := sumExternalRentalWarehouseTransportationCosts + cell.ExternalRentalWarehouseTransportationCosts(); // 澶栫搴撲粨鍌ㄨ垂鐢細鏂欐灦鎬绘暟閲� - 鍙戝姩鏈哄簱瀛� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級锛屽啀涔樹互绌烘枡鏋朵粨鍌ㄥ崟浠峰緱鍒扮┖鏂欐灦浠撳偍璐圭敤銆傚彂鍔ㄦ満搴撳瓨鍙朅ctual inventories閲屽彇鍒伴暱鏄ュ绉熷簱璇ュ彂鍔ㄦ満鐨勪粨鍌ㄩ噺锛屾枡鏋舵�绘暟閲忛渶瑕佹墜鍔ㄧ淮鎶ゃ�� cell.UnitPriceOfEmptyShelfStorage( lcmr.StoragePrice() ); + cell.RentalWarehouseStorageFees( [Number] ( guard( ( cell.TotalQuantityOfMaterialRacks() - [Number]( plannedInventory / lce.PackagingCapacity() ) ) * lcmr.StoragePrice(), 0 ) ) ); + sumRentalWarehouseStorageFees := sumRentalWarehouseStorageFees + cell.RentalWarehouseStorageFees(); // 娓呮礂璐圭敤锛氬彂鍔ㄦ満鍏ュ簱閲� / 鍖呰瀹归噺 * 鏂欐灦娓呮礂鍗曚环銆傚彂鍔ㄦ満鍏ュ簱閲忓彇鍙戝姩鏈洪攢閲忥紝鍖呰瀹归噺鍙栬嚜鍙戝姩鏈烘垚鏈〃銆傛枡鏋舵竻娲楀崟浠峰彇鏂欐灦鎴愭湰琛ㄣ�� - cell.CleaningCost( engineSales / guard( lce.PackagingCapacity(), 1 ) * lcmr.CleanPrice() ); + cell.CleaningCost( [Number] ( engineProductions / guard( lce.PackagingCapacity(), 1 ) * lcmr.CleanPrice() ) ); + sumCleaningCost := sumCleaningCost + cell.CleaningCost(); + + // 棰勮鎬昏垂鐢� + cell.EstimatedTotalCost( cell.StorageFeesForRentedWarehouses() + + cell.OutboundExpensesForRentedWarehouses() + + cell.ExternalRentalWarehouseTransportationCosts() + + cell.RentalWarehouseStorageFees() + + cell.CleaningCost() + ); + sumEstimatedTotalCost := sumEstimatedTotalCost + cell.EstimatedTotalCost(); + + // 绯绘暟 + cell.Coefficient( 1.05 ); + + // 鎬昏垂鐢� + cell.TotalCost( cell.EstimatedTotalCost() * cell.Coefficient() ); + sumTotalCost := sumTotalCost + cell.TotalCost(); cell.CC_EngineRackColumn( relset, ccerc ); } } + + // 鍒涘缓SUM琛� + sumR := macroPlan.CC_EngineRackRow( relnew, Generation := "SUM", MLB_MQB := "", Index := 2 ); + traverse ( macroPlan, CC_EngineRackColumn, ccerc ) { + cell := sumR.CC_EngineRackCell( relnew ); + + cell.NumberOfEmptyShelves( sumNumberOfEmptyShelves ); + cell.StorageFeesForRentedWarehouses( sumStorageFeesForRentedWarehouses ); + cell.OutboundExpensesForRentedWarehouses( sumOutboundExpensesForRentedWarehouses ); + cell.ExternalRentalWarehouseTransportationCosts( sumExternalRentalWarehouseTransportationCosts ); + cell.RentalWarehouseStorageFees( sumRentalWarehouseStorageFees ); + cell.CleaningCost( sumCleaningCost ); + cell.EstimatedTotalCost( sumEstimatedTotalCost ); + cell.TotalCost( sumTotalCost ); + + cell.CC_EngineRackColumn( relset, ccerc ); + } *] } diff --git a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl index 8ce70a3..1d83bd4 100644 --- a/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl +++ b/_Main/BL/Type_CC_EngineRackCell/StaticMethod_Export.qbl @@ -12,7 +12,7 @@ tableElement := xmlDOM.GetElementByTagName( "table", 0 ); // 绗竴鍒楋紙鍚嶇О锛� - cerrs := selectsortedset( macroPlan, CC_EngineRackRow, tempCERR, true, tempCERR.Name() ); + cerrs := selectsortedset( macroPlan, CC_EngineRackRow, tempCERR, true, tempCERR.Index(), tempCERR.Name() ); firstColumn := xmlDOM.CreateElement( "column" ); firstName := xmlDOM.CreateElement( "name" ); firstType := xmlDOM.CreateElement( "type" ); @@ -63,7 +63,7 @@ cellType.TextContent( "Number" ); cellColumn.AppendChild( cellName ); cellColumn.AppendChild( cellType ); - cells := selectsortedset( cerc, CC_EngineRackCell, tempCELL, true, tempCELL.CC_EngineRackRow().Name() ); + cells := selectsortedset( cerc, CC_EngineRackCell, tempCELL, true, tempCELL.CC_EngineRackRow().Index(), tempCELL.CC_EngineRackRow().Name() ); traverse ( cells, Elements, c ) { cell := xmlDOM.CreateElement( "cell" ); cell.SetAttribute( "value", [String]c.TotalQuantityOfMaterialRacks().Round( 0 ) ); // 鏂欐灦鎬绘暟閲� diff --git a/_Main/BL/Type_CC_EngineRackRow/Attribute_Index.qbl b/_Main/BL/Type_CC_EngineRackRow/Attribute_Index.qbl new file mode 100644 index 0000000..7a6c5ba --- /dev/null +++ b/_Main/BL/Type_CC_EngineRackRow/Attribute_Index.qbl @@ -0,0 +1,7 @@ +Quintiq file version 2.0 +#parent: #root +Attribute Index +{ + #keys: '3[415754.0.356027162][415754.0.356027161][415754.0.356027163]' + ValueType: Number +} diff --git a/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl b/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl index f46648f..c4e7eee 100644 --- a/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl +++ b/_Main/BL/Type_DL_EngineRackCell/StaticMethod_CreateData.qbl @@ -32,6 +32,15 @@ // 鍙戝姩鏈烘垚鏈弬鏁� lce := select( macroPlan, LogisticsCostEngine, tempLCE, tempLCE.Generation() = dlerr.Generation() and tempLCE.MLB_MQB() = dlerr.MLB_MQB() and tempLCE.Factory() = "澶ц繛宸ュ巶" and tempLCE.StartDate() <= dlerc.StartDate() and tempLCE.EndDate() >= dlerc.StartDate().StartOfNextMonth() ); + + // 鏂欐灦鎴愭湰鍙傛暟 + lcmr := select( macroPlan, LogisticsCostMaterialRack, tempLCMR, tempLCMR.Factory() = "澶ц繛宸ュ巶" + and tempLCMR.StartDate() <= dlerc.StartDate() and tempLCMR.EndDate() >= dlerc.StartDate().StartOfNextMonth() ); + + // 杩愯緭鎴愭湰鍙傛暟 + lct1 := select( macroPlan, LogisticsCostTransport, tempLCT, tempLCT.Product() = "鍙戝姩鏈烘枡鏋�" and tempLCT.Origin() = "澶ц繛鍙戝姩鏈虹殑闀挎槬澶栫搴�" and tempLCT.Destination() = "澶ц繛鍘傚唴搴�" ); + lct2 := select( macroPlan, LogisticsCostTransport, tempLCT, tempLCT.Product() = "鍙戝姩鏈烘枡鏋�" and tempLCT.Origin() = "澶ц繛澶栫搴�" and tempLCT.Destination() = "澶ц繛鍘傚唴搴�" ); + lct3 := select( macroPlan, LogisticsCostTransport, tempLCT, tempLCT.Product() = "鍙戝姩鏈烘枡鏋�" and tempLCT.Origin() = "CC 瀹㈡埛搴�" and tempLCT.Destination() = "CC 澶栫搴�" ); // 褰撳墠鏈堟湯鏈�鍚庝竴澶╂棩鏈� lastDayOfThisMonth := dlerc.StartDate().StartOfNextMonth() - 1; @@ -40,20 +49,100 @@ // 绌烘枡鏋舵暟閲忥細澶ц繛鍘傝浜у搧鐨勬枡鏋舵�绘暟閲� - 鍙戝姩鏈哄簱瀛� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級 plannedInventory := sum( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, tempPISPIP, - tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf() and - exists( tempPISPIP.ProductInStockingPoint_MP().Product_MP(), AllParent.AsParent, tempPMP, tempPMP.ID() = "鍙戝姩鏈�" ) and - tempPISPIP.ProductInStockingPoint_MP().StockingPointID() = "澶ц繛澶栫搴�" and - tempPISPIP.ProductInStockingPoint_MP().Product_MP().Generation() = dlerr.Generation() and - tempPISPIP.ProductInStockingPoint_MP().Product_MP().MQBMLB() = dlerr.MLB_MQB() and - tempPISPIP.Start().Date() = lastDayOfThisMonth, + tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf() and + exists( tempPISPIP.ProductInStockingPoint_MP().Product_MP(), AllParent.AsParent, tempPMP, tempPMP.ID() = "鍙戝姩鏈�" ) and + tempPISPIP.ProductInStockingPoint_MP().StockingPointID() = "澶ц繛鍙戝姩鏈虹殑闀挎槬澶栫搴�" and + tempPISPIP.ProductInStockingPoint_MP().Product_MP().Generation() = dlerr.Generation() and + tempPISPIP.ProductInStockingPoint_MP().Product_MP().MQBMLB() = dlerr.MLB_MQB() and + tempPISPIP.Start().Date() >= dlerc.StartDate() and + tempPISPIP.End().Date() <= lastDayOfThisMonth, tempPISPIP.PlannedInventoryLevelEnd() ); cell.PackagingCapacity( guard( lce.PackagingCapacity(), 1 ) ); cell.PlannedInventory( plannedInventory ); // CC澶栫搴撳叆搴撹垂鐢細鍙戝姩鏈洪攢閲� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級* 鏂欐灦鍏ュ簱鍗曚环 + transportationQuantity1 := sum( macroPlan, SalesDemand.astype( Forecast ), tempF, + tempF.Product_MP().Generation() = dlerr.Generation() and + tempF.Product_MP().MQBMLB() = dlerr.MLB_MQB() and + tempF.StockingPointID() = "澶ц繛鍙戝姩鏈虹殑闀挎槬澶栫搴�" and + tempF.StartDate() >= dlerc.StartDate() and + tempF.EndDate() <= lastDayOfThisMonth, + tempF.FulfilledQuantity() ); + cell.CCStorageFeesForRentedWarehouses( [Number] ( guard( transportationQuantity1 / lce.PackagingCapacity(), 0 ) * lcmr.WarehousingPrice() ) ); // CC澶栫搴撳嚭搴撹垂鐢細鍙戝姩鏈洪攢閲� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級* 鏂欐灦鍑哄簱鍗曚环 + cell.CCOutboundExpensesForRentedWarehouses( [Number] ( guard( transportationQuantity1 / lce.PackagingCapacity(), 0 ) * lcmr.OutboundPrice() ) ); + // CC澶栫搴撲粨鍌ㄨ垂鐢細鏂欐灦鎬绘暟閲� - 鍙戝姩鏈哄簱瀛� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級 * 鏂欐灦浠撳偍鍗曚环 + cell.CCRentalWarehouseStorageFees( [Number] ( ( cell.TotalQuantityOfMaterialRacks() - guard( plannedInventory / lce.PackagingCapacity(), 0 ) ) * lcmr.StoragePrice() ) ); + + // CC闀块�旇繍杈撹垂鐢細璋冩嫧鏁伴噺 / 鍖呰瀹归噺 / 瑁呰浇瀹归噺 * 鏂欐灦杩愯緭鍗曚环 + transportationQuantity2 := sum( macroPlan, Unit.Lane.LaneLeg.Trip.ProductInTrip, tempPIT, + tempPIT.Product_MP().Generation() = dlerr.Generation() and + tempPIT.Product_MP().MQBMLB() = dlerr.MLB_MQB() and + tempPIT.Trip().Departure().Date() >= dlerc.StartDate() and + tempPIT.Trip().Arrival().Date() <= lastDayOfThisMonth and + tempPIT.Trip().LaneLeg().AsOriginStockingPointLeg().StockingPoint_MP().ID() = "澶ц繛鍘傚唴搴�" and + tempPIT.Trip().LaneLeg().AsDestinationStockingPointLeg().StockingPoint_MP().ID() = "澶ц繛鍙戝姩鏈虹殑闀挎槬澶栫搴�", + tempPIT.Quantity() + ); + + cell.CCLineHaulCost( [Number] ( guard( transportationQuantity2 / lce.PackagingCapacity() / lct1.LoadingCapacity(), 0 ) * guard( lct1.TransportPrice(), 1 ) ) ); + + // CC鐭�旇繍杈撹垂鐢細璋冩嫧鏁伴噺 / 鍖呰瀹归噺 / 瑁呰浇瀹归噺 * 鏂欐灦杩愯緭鍗曚环 + cell.CCShortDistanceTransportationCosts( [Number] ( guard( transportationQuantity1 / lce.PackagingCapacity() / lct3.LoadingCapacity(), 0 ) * guard( lct3.TransportPrice(), 1 ) ) ) + + // DL澶栫搴撳叆搴撹垂鐢細鍙戝姩鏈哄叆搴撻噺 / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級* 鏂欐灦鍏ュ簱鍗曚环 + inventoryQuantity := sum( macroPlan, SalesDemand.astype( Forecast ), tempF, + tempF.Product_MP().Generation() = dlerr.Generation() and + tempF.Product_MP().MQBMLB() = dlerr.MLB_MQB() and + tempF.StockingPointID() = "澶ц繛澶栫搴�" and + tempF.StartDate().Year() = dlerc.StartDate().Year() and + tempF.StartDate().Month() = dlerc.StartDate().Month(), + tempF.FulfilledQuantity() ); + // info( "鏃堕棿锛�", dlerc.StartDate().Format( "Y-M2-D2" ), " 鍏ュ簱鏁伴噺锛�", inventoryQuantity, " 鍖呰瀹归噺锛�", guard( lce.PackagingCapacity(), 0 ), + // " 瑁呰浇瀹归噺锛�", guard( lct1.LoadingCapacity(), 0 ) ); // 娴嬭瘯杈撳嚭 + cell.DLStorageFeesForRentedWarehouses( [Number] ( guard( inventoryQuantity / lce.PackagingCapacity(), 0 ) * guard( lcmr.WarehousingPrice(), 1 ) ) ); + + // DL澶栫搴撳嚭搴撹垂鐢細鍙戝姩鏈哄嚭搴撻噺 / 鏂欐灦瀹归噺锛堝悜涓婂彇鏁达級* 鏂欐灦鍑哄簱鍗曚环 + outboundQuantity := sum( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriodPlanning.astype( ProductInStockingPointInPeriodPlanningLeaf ), tempPISPIPPL, + tempPISPIPPL.ProductInStockingPoint_MP().Product_MP().Generation() = dlerr.Generation() and + tempPISPIPPL.ProductInStockingPoint_MP().Product_MP().MQBMLB() = dlerr.MLB_MQB() and + tempPISPIPPL.ProductInStockingPoint_MP().StockingPointID() = "澶ц繛澶栫搴�" and + tempPISPIPPL.Start().Date() >= dlerc.StartDate() and + tempPISPIPPL.End().Date() <= lastDayOfThisMonth, + tempPISPIPPL.NewSupplyQuantity() ); + cell.DLOutboundExpensesForRentedWarehouses( [Number] ( guard( outboundQuantity / lce.PackagingCapacity(), 0 ) * guard( lcmr.OutboundPrice(), 1 ) ) ); + + // DL澶栫搴撹繍杈撹垂鐢細鍙戝姩鏈鸿繍杈撻噺 / 鍖呰瀹归噺 / 瑁呰浇瀹归噺锛堝悜涓婂彇鏁达級* 鏂欐灦杩愯緭鍗曚环 + cell.DLExternalRentalWarehouseTransportationCosts( [Number] ( guard( inventoryQuantity / lce.PackagingCapacity() / lct2.LoadingCapacity(), 0 ) * guard( lct2.TransportPrice(), 1 ) ) ); + + // DL澶栫搴撲粨鍌ㄨ垂鐢細鏂欐灦鎬绘暟閲� - 鍙戝姩鏈哄簱瀛� / 鍖呰瀹归噺锛堝悜涓婂彇鏁达級* 绌烘枡鏋朵粨鍌ㄥ崟浠� + plannedInventory1 := sum( macroPlan, Product_MP.ProductInStockingPoint_MP.ProductInStockingPointInPeriod, tempPISPIP, + tempPISPIP.ProductInStockingPoint_MP().Product_MP().IsLeaf() and + exists( tempPISPIP.ProductInStockingPoint_MP().Product_MP(), AllParent.AsParent, tempPMP, tempPMP.ID() = "鍙戝姩鏈�" ) and + tempPISPIP.ProductInStockingPoint_MP().StockingPointID() = "澶ц繛澶栫搴�" and + tempPISPIP.ProductInStockingPoint_MP().Product_MP().Generation() = dlerr.Generation() and + tempPISPIP.ProductInStockingPoint_MP().Product_MP().MQBMLB() = dlerr.MLB_MQB() and + tempPISPIP.Start().Date() >= dlerc.StartDate() and + tempPISPIP.End().Date() <= lastDayOfThisMonth, + tempPISPIP.PlannedInventoryLevelEnd() ); + cell.DLRentalWarehouseStorageFees( [Number] ( guard( ( cell.TotalQuantityOfMaterialRacks() - plannedInventory1 ) / lce.PackagingCapacity(), 0 ) * guard( lcmr.StoragePrice(), 1 ) ) ); + + //娓呮礂璐圭敤锛氬彂鍔ㄦ満鍏ュ簱閲� / 鍖呰瀹归噺 * 鏂欐灦娓呮礂鍗曚环銆傚彂鍔ㄦ満鍏ュ簱閲忓彇鍙戝姩鏈洪攢閲忥紝鍖呰瀹归噺鍙栬嚜鍙戝姩鏈烘垚鏈〃銆傛枡鏋舵竻娲楀崟浠峰彇鏂欐灦鎴愭湰琛ㄣ�� + cell.CleaningCost( [Number] ( guard( inventoryQuantity / lce.PackagingCapacity(), 0 ) * guard( lcmr.CleanPrice(), 1 ) ) ); + + // 棰勮鎬昏垂鐢� + cell.EstimatedTotalCost( cell.CCStorageFeesForRentedWarehouses() + cell.CCOutboundExpensesForRentedWarehouses() + cell.CCRentalWarehouseStorageFees() + cell.CCLineHaulCost() + + cell.CCShortDistanceTransportationCosts() + cell.DLStorageFeesForRentedWarehouses() + cell.DLOutboundExpensesForRentedWarehouses() + + cell.DLExternalRentalWarehouseTransportationCosts() + cell.DLRentalWarehouseStorageFees() + cell.CleaningCost() ); + + // 绯绘暟 + cell.Coefficient( 1.05 ); + + // 鎬昏垂鐢� + cell.TotalCost( cell.EstimatedTotalCost() * cell.Coefficient() ); + cell.DL_EngineRackColumn( relset, dlerc ); } } diff --git a/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl b/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl index 35bca5a..5d69146 100644 --- a/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl +++ b/_Main/BL/Type_DispatchShiftPlan/StaticMethod_Dispatch.qbl @@ -2,19 +2,27 @@ #parent: #root StaticMethod Dispatch ( const MacroPlan macroPlan, - RecycleBin owner, + Archive owner, String versionFlag ) { TextBody: [* // Akari Aug-21-2024 (created) - owner.DispatchShiftPlan( relflush ); + // owner.DispatchShiftPlan( relflush ); // owner.RB_DispatchShiftPlanBroker().Source().FlatQuery( "truncate table A_DispatchShiftPlan" ); + + dispatchShiftPlans := selectset( owner,DispatchShiftPlan,dispatchShiftPlan,true ); + dispatchShiftPlanIndexTree := NamedValueTree::Create(); + for( i := 0 ; i < dispatchShiftPlans.Size() ; i++){ + dispatchShiftPlan := dispatchShiftPlans.Element( i ); + dispatchShiftPlanHandle := dispatchShiftPlanIndexTree.GetHandle( dispatchShiftPlan.FactoryName() + dispatchShiftPlan.ProductLine() + dispatchShiftPlan.ShiftDate().AsQUILL() ); + dispatchShiftPlanIndexTree.Root().AddChild( dispatchShiftPlanHandle,i ); + } now := DateTime::Now(); macroPlanName := macroPlan.MDSMacroPlan().Description(); - traverse( macroPlan,Unit.UnitPeriod.astype( UnitPeriodTime ).ShiftPlan,shiftPlan ){ + traverse( macroPlan,Unit.UnitPeriod.astype( UnitPeriodTime ).ShiftPlan,shiftPlan ,shiftPlan.UnitPeriodTime().Period_MP().StartDate() >= macroPlan.StartOfPlanning().Date()){ factory := shiftPlan.UnitPeriodTime().Unit(); while( factory.HasParent() ){ temp1 := factory; @@ -23,19 +31,31 @@ factory := temp1; } } - - owner.DispatchShiftPlan( relnew,ID := OS:: GenerateGUIDAsString(), - ProductLine := shiftPlan.UnitPeriodTime().Unit().ID(), - ShiftDate := shiftPlan.UnitPeriodTime().Period_MP().StartDate(), - Tips := shiftPlan.Remark(), - VersionName := macroPlanName, - VersionFlag := versionFlag, - FactoryName := factory.ID(), - InterfaceTime := now - ); - + productLine := shiftPlan.UnitPeriodTime().Unit().ID(); + shiftDate := shiftPlan.UnitPeriodTime().Period_MP().StartDate(); + factoryName := factory.ID(); + + dispatchShiftPlanHandle := dispatchShiftPlanIndexTree.GetHandle( factoryName + productLine + shiftDate.AsQUILL() ); + dispatchShiftPlanIndex := guard( dispatchShiftPlanIndexTree.Root().Child( dispatchShiftPlanHandle ),null( NamedValue )); + if( not isnull( dispatchShiftPlanIndex )){ + dispatchShiftPlan := dispatchShiftPlans.Element( dispatchShiftPlanIndex.GetValueAsNumber() ); + dispatchShiftPlan.Tips( shiftPlan.Remark() ); + dispatchShiftPlan.VersionName( macroPlanName ); + dispatchShiftPlan.VersionFlag( versionFlag ); + dispatchShiftPlan.InterfaceTime( now ); + }else{ + owner.DispatchShiftPlan( relnew,ID := OS:: GenerateGUIDAsString(), + ProductLine := productLine, + FactoryName := factory.ID(), + + ShiftDate := shiftDate, + Tips := shiftPlan.Remark(), + VersionName := macroPlanName, + VersionFlag := versionFlag, + InterfaceTime := now ); + } } - owner.RB_DispatchShiftPlanBroker().AsyncExecute(); + // owner.RB_DispatchShiftPlanBroker().AsyncExecute(); *] } diff --git a/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_Dispatch.qbl b/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_Dispatch.qbl index 6d686a2..2f98a27 100644 --- a/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_Dispatch.qbl +++ b/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_Dispatch.qbl @@ -61,22 +61,29 @@ shiftDayTime := select( shiftPattern,ShiftDayTime,object,true ); } } + if( shiftVolume <> 0 ){ + shiftSchedulingInformations := DispatchShiftSchedulingInformation::SplitShifts( owner,shiftName,shiftVolume ); - shiftSchedulingInformation := owner.DispatchShiftSchedulingInformation( relnew , - ID := IDHolder::GetGUID() , - InterfaceTime := now , - VersionName := macroPlan.MDSMacroPlan().Description(), - Product := productID, - ProductLine := productLine, - ShiftDate := shiftDate, - ShiftName := shiftName, - ShiftVolume := shiftVolume ); - if( not isnull( shiftDayTime )){ - shiftSchedulingInformation.ShiftStartDate( shiftDayTime.StartDateTime() ); - shiftSchedulingInformation.ShiftEndDate( shiftDayTime.EndDateTIme() ); + traverse( shiftSchedulingInformations,Elements,shiftSchedulingInformation ){ + shiftSchedulingInformation.InterfaceTime( now ); + shiftSchedulingInformation.VersionName( macroPlan.MDSMacroPlan().Description() ); + shiftSchedulingInformation.Product( productID ); + shiftSchedulingInformation.ProductLine( productLine ); + shiftSchedulingInformation.ShiftDate( shiftDate ); + // shiftSchedulingInformation.InterfaceTime( now ); + // shiftSchedulingInformation.InterfaceTime( now ); + // shiftSchedulingInformation.InterfaceTime( now ); + // shiftSchedulingInformation.InterfaceTime( now ); + + + if( not isnull( shiftDayTime )){ + shiftSchedulingInformation.ShiftStartDate( shiftDayTime.StartDateTime() ); + shiftSchedulingInformation.ShiftEndDate( shiftDayTime.EndDateTIme() ); + } + if( not isnull( factory )){ + shiftSchedulingInformation.FactoryName( factory.Name() ); + } } - if( not isnull( factory )){ - shiftSchedulingInformation.FactoryName( factory.Name() ); } } } diff --git a/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl b/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl new file mode 100644 index 0000000..1de3a99 --- /dev/null +++ b/_Main/BL/Type_DispatchShiftSchedulingInformation/StaticMethod_SplitShifts.qbl @@ -0,0 +1,33 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod SplitShifts ( + RecycleBin owner, + String shiftName, + Real shiftVolume +) as owning DispatchShiftSchedulingInformations +{ + TextBody: + [* + // Akari Oct-9-2024 (created) + shiftSchedulingInformations := construct( DispatchShiftSchedulingInformations ); + if( shiftName = "3" ){ + shiftSchedulingInformation1 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 ); + shiftSchedulingInformation1.SingleShiftName( "1鐝�" ); + shiftSchedulingInformations.Add( shiftSchedulingInformation1 ); + + shiftSchedulingInformation2 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 ); + shiftSchedulingInformation2.SingleShiftName( "2鐝�" ); + shiftSchedulingInformations.Add( shiftSchedulingInformation2 ); + + shiftSchedulingInformation3 := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume / 3 ); + shiftSchedulingInformation3.SingleShiftName( "3鐝�" ); + shiftSchedulingInformations.Add( shiftSchedulingInformation3 ); + }else{ + shiftSchedulingInformation := owner.DispatchShiftSchedulingInformation( relnew ,ID := IDHolder::GetGUID(),ShiftName := shiftName,ShiftVolume := shiftVolume ); + shiftSchedulingInformations.Add( shiftSchedulingInformation ); + } + + + return &shiftSchedulingInformations; + *] +} diff --git a/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl b/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl new file mode 100644 index 0000000..b53b40e --- /dev/null +++ b/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl @@ -0,0 +1,40 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod BatchSetUnitShiftPattern ( + Unit unit, + ShiftPattern shiftPattern, + Date startDate, + Date endDate, + Numbers weekdays +) +{ + TextBody: + [* + // Akari Oct-10-2024 (created) + owner := unit.MacroPlan(); + dayPeriod_MPs := selectsortedset( owner,Period_MP,period_MP, + period_MP.TimeUnit() = 'Day' and + period_MP.StartDate() >= startDate and + period_MP.EndDate() <= endDate and exists( weekdays, Elements,dayOfWeek,dayOfWeek = period_MP.StartDate().DayOfWeek() ) ,period_MP.StartDate()); + weekPeriod_MPs := selectsortedset( owner,Period_MP,period_MP, + period_MP.TimeUnit() = 'Week' and + period_MP.StartDate() >= startDate and + period_MP.EndDate() <= endDate and exists( weekdays, Elements,dayOfWeek,dayOfWeek = period_MP.StartDate().DayOfWeek() ),period_MP.StartDate()); + + if( dayPeriod_MPs.Size() > 0 ){ + unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( dayPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()) and not isnull( unitPeriodTime.UnitAvailability())); + if( unitPeriodTimes.Size() > 0 ){ + LocalTool::SetUnitShiftPattern( owner,unitPeriodTimes,shiftPattern ); + } + + } + if( weekPeriod_MPs.Size() <> 0 ){ + traverse( weekPeriod_MPs,Elements,period_MP ){ + unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,period_MP = unitPeriodTime.Period_MP() and not isnull( unitPeriodTime.UnitAvailability())); + if( unitPeriodTimes.Size() > 0 ){ + LocalTool::SetUnitShiftPattern( owner,unitPeriodTimes,shiftPattern ); + } + } + } + *] +} diff --git a/_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl b/_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl new file mode 100644 index 0000000..92b0e44 --- /dev/null +++ b/_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl @@ -0,0 +1,70 @@ +Quintiq file version 2.0 +#parent: #root +StaticMethod SetUnitShiftPattern ( + MacroPlan macroPlan, + UnitPeriodTimes unitPeriodTimes, + ShiftPattern shiftPattern +) +{ + TextBody: + [* + // Akari Oct-10-2024 (created) + firstElement := minselect( unitPeriodTimes, Elements, e, true, e.Start() ); + + start := macroPlan.Start(); + timeunit := macroPlan.StartOfPlanningPeriod().TimeUnit(); + maintenance := Duration::Zero(); + efficiency := 1.0; + allocation := 1.0; + + maxloadpercentage := macroPlan.GlobalParameters_MP().DefaultMaxLoadPercentage(); + nrofunitopen := 1; + minloadthreshold := 0.0; + + if( not isnull( firstElement ) ){ + // To inherit the value from last unit availability while creating a new unit availability + unitavailability := firstElement.UnitAvailability(); + start := firstElement.Start(); + + if( not isnull( unitavailability ) ){ + timeunit := unitavailability.TimeUnit(); + maintenance := unitavailability.Maintenance(); + efficiency := unitavailability.Efficiency(); + allocation := unitavailability.Allocation(); + + maxloadpercentage := unitavailability.MaximumLoadPercentage(); + nrofunitopen := unitavailability.NrOfUnitsOpen(); + minloadthreshold := unitavailability.MinimumLoadThreshold(); + }else{ + timeunit := firstElement.Period_MP().TimeUnit(); + maintenance := firstElement.Maintenance(); + efficiency := firstElement.Efficiency(); + allocation := firstElement.Allocation(); + + maxloadpercentage := firstElement.MaximumLoadPercentage(); + nrofunitopen := firstElement.NrOfOpen(); + minloadthreshold := firstElement.MinimumLoadThreshold(); + } + } + + isbatchedit := unitPeriodTimes.Size() > 1; + UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes, + not isbatchedit or false, + timeunit, + maintenance, + not isbatchedit or false, + efficiency, + false, + allocation, + not isbatchedit or true, + shiftPattern, + not isbatchedit or false, + maxloadpercentage, + not isbatchedit or false, + nrofunitopen, + false, + not isbatchedit or false, + minloadthreshold + ); + *] +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def index a9e718b..a6f622c 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def +++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ActionBarPageReport.def @@ -26,6 +26,16 @@ Taborder: 2 ] } + Component dhMDSHandles + { + #keys: '[414996.1.116451655]' + BaseType: 'WebDataHolder' + Databinding: 'structured[internal[ExternalMDSHandle]]*' + Properties: + [ + Taborder: 3 + ] + } ] Properties: [ diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuCapacities.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuCapacities.def index f6224d2..0d25535 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuCapacities.def +++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Component_ContextMenuCapacities.def @@ -27,5 +27,16 @@ Tooltip: 'Event type' ] } + Component MenuBatchSetShiftPattern + { + #keys: '[414996.1.119140284]' + BaseType: 'WebMenu' + Properties: + [ + Image: 'QUEUE' + Taborder: 8 + Title: '鎵归噺璁剧疆浜х嚎鐝' + ] + } ] } diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def index bc17ce4..a6154d6 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def +++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Method_GetMacroPlans.def @@ -7,11 +7,14 @@ [* componentmds := ApplicationScope.ComponentMDS(); + dhMDSHandles.Data().Flush(); + macroPlans := construct( MacroPlans ); scemps := selectset( ScenarioManager,ScenarioMP,mp,mp.IsLoaded()); traverse( scemps,Elements,scemp ){ mdsinstance := select( componentmds, ComponentMDSKinds.ComponentMDSInstances, m, m.MDSID().MDSKey() = scemp.DatasetMDSID() ); handle := mdsinstance.GetMDSHandle(); + dhMDSHandles.Data().Add( handle ); demandMacroPlan := handle.AsMacroPlan(); macroPlans.Add( demandMacroPlan ); } diff --git a/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuCapacities_MenuBatchSetShiftPattern_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuCapacities_MenuBatchSetShiftPattern_OnClick.def new file mode 100644 index 0000000..a6fab35 --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_ApplicationMacroPlanner/Response_MacroPlanner_ContextMenuCapacities_MenuBatchSetShiftPattern_OnClick.def @@ -0,0 +1,17 @@ +Quintiq file version 2.0 +#parent: ContextMenuCapacities/MenuBatchSetShiftPattern +Response OnClick () id:Response_MacroPlanner_ContextMenuCapacities_MenuBatchSetShiftPattern_OnClick +{ + #keys: '[414996.1.119140372]' + CanBindMultiple: false + DefinitionID: 'Responsedef_WebMenu_OnClick' + QuillAction + { + Body: + [* + // Open view + ApplicationMacroPlanner.OpenView( 'BatchSetShiftPattern', ButtonCapacities ); + *] + GroupServerCalls: false + } +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnOk_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnOk_OnClick.def index 7ef6f8d..3775f82 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnOk_OnClick.def +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlActions_btnOk_OnClick.def @@ -4,6 +4,10 @@ { #keys: '[413988.0.1596179631]' DefinitionID: 'Responsedef_WebButton_OnClick' + Precondition: + [* + return not exists( MacroPlan, PackagingPlanNewCapability, tempPPNC, true, tempPPNC.ProductionLine() = ddslProductionLine.Text() ); + *] QuillAction { Body: diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlContent_ddslProductionLine_OnCreated.def b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlContent_ddslProductionLine_OnCreated.def index 5c18585..0f1290b 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlContent_ddslProductionLine_OnCreated.def +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogCreateEditPackagingPlanNewCapability/Response_pnlContent_ddslProductionLine_OnCreated.def @@ -13,7 +13,7 @@ { Body: [* - uids := selectuniquevalues( MacroPlan, Unit, tempU, true, tempU.ID() ); + uids := selectuniquevalues( MacroPlan, Unit, tempU, tempU.HasCapacityTypeTime(), tempU.ID() ); this.Strings( uids.Concatenate( ";" ) ); *] diff --git a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/Response_pHeader_bAdd_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/Response_pHeader_bAdd_OnClick.def index bf6fca9..4ea5425 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/Response_pHeader_bAdd_OnClick.def +++ b/_Main/UI/MacroPlannerWebApp/Component_DialogPackagingPlanLotSize/Response_pHeader_bAdd_OnClick.def @@ -5,6 +5,11 @@ #keys: '[413988.0.1401876560]' CanBindMultiple: false DefinitionID: 'Responsedef_WebButton_OnClick' + Precondition: + [* + return not exists( MacroPlan, PackagingPlanLotSize, tempPPLS, true, tempPPLS.Factory() = ddslFactory.Text() and + tempPPLS.ProductID() = ddlProductID.Data().ID() ); + *] QuillAction { Body: diff --git "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def" "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def" index fec74d0..0df72f7 100644 --- "a/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def" +++ "b/_Main/UI/MacroPlannerWebApp/Component_Form701/Response_PanelRibbon504_801_dhOfflinePlanTables_OnCreated\04357.def" @@ -14,6 +14,11 @@ traverse( macroPlans,Elements,element ){ info( element.MDSID() ); } + info( dhMDSHandles.Data().Size() ); + traverse( dhMDSHandles.Data(),Elements,element ){ + info( element.AsMacroPlan().MDSMacroPlan().Description() ); + } + this.Data( &offlinePlanTables ); *] GroupServerCalls: false diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Response_pHeader_bRefresh_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Response_pHeader_bRefresh_OnClick.def index 198ae43..b6158bf 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Response_pHeader_bRefresh_OnClick.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormDL_EngineRackReport/Response_pHeader_bRefresh_OnClick.def @@ -14,6 +14,8 @@ Body: [* DL_EngineRackCell::CreateData( MacroPlan ); + + WebMessageBox::Success( Translations::A_VWED_Success() ); *] GroupServerCalls: false } diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_MatrixEditor493_OnCheckEditability.def b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_MatrixEditor493_OnCheckEditability.def new file mode 100644 index 0000000..8be5f6a --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_FormPackagingPlan/Response_MatrixEditor493_OnCheckEditability.def @@ -0,0 +1,22 @@ +Quintiq file version 2.0 +#parent: MatrixEditor493 +Response OnCheckEditability ( + structured[PackagingPlanCell] cell, + Real value +) id:Response_MatrixEditor493_OnCheckEditability +{ + #keys: '[415754.0.367460056]' + CanBindMultiple: false + DefinitionID: 'Responsedef_WebMatrixEditor_OnCheckEditability' + QuillAction + { + Body: + [* + cond := focusedattribute = "Package" or focusedattribute = "Unpacking"; + + editinfo.CanEdit( cond ); + editinfo.UserHint( ifexpr( cond, "", "涓嶈兘淇敼" ) ); + *] + GroupServerCalls: false + } +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def index 8538493..3731f86 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Component_PanelRight.def @@ -5,69 +5,6 @@ BaseType: 'WebPanel' Children: [ - Component cbMonday - { - #keys: '[414996.1.116589495]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 3 - ] - } - Component cbTuesday - { - #keys: '[414996.1.116589517]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 4 - ] - } - Component cbWednesday - { - #keys: '[414996.1.116589519]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 5 - ] - } - Component cbThursday - { - #keys: '[414996.1.116589521]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 6 - ] - } - Component cbFriday - { - #keys: '[414996.1.116589523]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 7 - ] - } - Component cbSaturday - { - #keys: '[414996.1.116589525]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 8 - ] - } - Component cbSunday - { - #keys: '[414996.1.116589527]' - BaseType: 'WebCheckbox' - Properties: - [ - Taborder: 9 - ] - } Component dsStartDate { #keys: '[414996.1.116589712]' @@ -75,7 +12,7 @@ Properties: [ Label: 'Start' - Taborder: 1 + Taborder: 2 ] } Component dsEndDate @@ -85,7 +22,7 @@ Properties: [ Label: 'End' - Taborder: 2 + Taborder: 3 ] } Component LabelSelectUnit @@ -105,6 +42,103 @@ Properties: [ Label: 'Apply' + Taborder: 11 + ] + } + Component ddlShiftPattern + { + #keys: '[414996.1.116430349]' + BaseType: 'WebDropDownList' + Databinding: 'ShiftPattern' + Children: + [ + Component deContent710 id:deContent710_593 + { + #keys: '[414996.1.116430350]' + BaseType: 'WebDataExtractor' + Properties: + [ + DataType: 'MacroPlan' + Source: 'MacroPlan' + Taborder: 0 + Transformation: 'ShiftPattern' + ] + } + ] + Properties: + [ + DisplayField: 'Name' + Label: 'Shift pattern 1' + Taborder: 1 + ] + } + Component cbMonday + { + #keys: '[414996.1.117120493]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Monday' + Taborder: 4 + ] + } + Component cbTuesday + { + #keys: '[414996.1.117120516]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Tuesday' + Taborder: 5 + ] + } + Component cbWednesday + { + #keys: '[414996.1.117120539]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Wednesday' + Taborder: 6 + ] + } + Component cbThursday + { + #keys: '[414996.1.117120576]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Thursday' + Taborder: 7 + ] + } + Component cbFriday + { + #keys: '[414996.1.117120599]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Friday' + Taborder: 8 + ] + } + Component cbSaturday id:cbSaturday_682 + { + #keys: '[414996.1.117120636]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Saturday' + Taborder: 9 + ] + } + Component cbSunday + { + #keys: '[414996.1.117120659]' + BaseType: 'WebCheckbox' + Properties: + [ + Label: 'Sunday' Taborder: 10 ] } diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelRight_bApply_OnClick.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelRight_bApply_OnClick.def new file mode 100644 index 0000000..1a2c721 --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelRight_bApply_OnClick.def @@ -0,0 +1,39 @@ +Quintiq file version 2.0 +#parent: PanelRight/bApply +Response OnClick () id:Response_PanelRight_bApply_OnClick +{ + #keys: '[414996.1.117189721]' + CanBindMultiple: false + DefinitionID: 'Responsedef_WebButton_OnClick' + GroupServerCalls: true + QuillAction + { + Body: + [* + weekdays := construct( Numbers ); + if( cbMonday.Checked() ){ + weekdays.Add( 1 ); + } + if( cbTuesday.Checked() ){ + weekdays.Add( 2 ); + } + if( cbWednesday.Checked() ){ + weekdays.Add( 3 ); + } + if( cbThursday.Checked() ){ + weekdays.Add( 4 ); + } + if( cbFriday.Checked() ){ + weekdays.Add( 5 ); + } + if( cbSaturday.Checked() ){ + weekdays.Add( 6 ); + } + if( cbSunday.Checked() ){ + weekdays.Add( 7 ); + } + LocalTool::BatchSetUnitShiftPattern( dhSelectUnit.Data(),ddlShiftPattern.Data(),dsStartDate.Date(),dsEndDate.Date(),weekdays ); + WebMessageBox::Success( "Success"); + *] + } +} diff --git a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/_ROOT_Component_FormProductionLineBatchSetShiftPattern.def b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/_ROOT_Component_FormProductionLineBatchSetShiftPattern.def index f7309e6..deb4d00 100644 --- a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/_ROOT_Component_FormProductionLineBatchSetShiftPattern.def +++ b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/_ROOT_Component_FormProductionLineBatchSetShiftPattern.def @@ -12,5 +12,6 @@ Properties: [ Description: 'FormProductionLineBatchData' + Title: '鎵归噺璁剧疆浜х嚎鐝' ] } diff --git a/_Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw b/_Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw new file mode 100644 index 0000000..e1a08c5 --- /dev/null +++ b/_Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw @@ -0,0 +1,386 @@ +Quintiq file version 2.0 +{ + viewcontents + { + forms + { + form_FormProductionLineBatchSetShiftPattern + { + title: 'QMacroPlanner::FormProductionLineBatchSetShiftPattern' + shown: true + componentID: 'QMacroPlanner::FormProductionLineBatchSetShiftPattern' + layout + { + mode: 'open' + rowPosition: 1 + rowSpan: 23 + columnPosition: 1 + columnSpan: 9 + } + components + { + FormProductionLineBatchSetShiftPattern_PanelProductionLineBatchSetShiftPattern + { + sizeRatio: 1 + } + FormProductionLineBatchSetShiftPattern_PanelLeft + { + sizeRatio: 1 + } + FormProductionLineBatchSetShiftPattern_ListUnit + { + } + FormProductionLineBatchSetShiftPattern_DataSetLevelProductionLineBatchSetShiftPattern + { + groupDepth: -1 + sort: 'Name' + column_Name + { + columnId: 'Name' + dataPath: 'Name' + dataType: 'string' + index: 0 + subtotals: '' + width: 150 + } + } + FormProductionLineBatchSetShiftPattern_PanelRight + { + sizeRatio: 1 + } + } + } + form_FormKPI + { + title: 'KPI Dashboard' + shown: false + componentID: 'FormKPI' + layout + { + mode: 'dockright' + index: 0 + } + components + { + FormKPI_PanelKPI + { + sizeRatio: 1 + activeChild: 'PanelKPISelection' + } + FormKPI_PanelKPIDashboard + { + sizeRatio: 1 + } + FormKPI_PanelKPISelection + { + sizeRatio: 1 + } + FormKPI_ListKPISelection + { + QuillViewData + { + Food_KPISetting: 'Cost of sales;Fulfillment;Fulfillment target;Inventory holding cost;Labor cost;Margin;Safety stock;Sales;Sourcing cost;Total CO2 emission;Transportation cost;Volume' + } + } + FormKPI_DataSetLevelKPISelection + { + groupDepth: -1 + column_All_constraints + { + columnId: 'All constraints' + dataPath: 'All constraints' + dataType: 'string' + title: 'All constraints' + index: 0 + subtotals: '' + width: 32 + } + column_Name + { + columnId: 'Name' + dataPath: 'Name' + dataType: 'string' + title: 'Name' + index: 1 + subtotals: '' + width: 200 + } + } + } + } + form_FormOptimizerStrategiesSlideIn + { + title: 'Optimizer Strategies' + shown: false + componentID: 'FormOptimizerStrategiesSlideIn' + layout + { + mode: 'dockright' + index: 1 + } + components + { + FormOptimizerStrategiesSlideIn_ListOptimizerStrategiesSlideIn + { + } + FormOptimizerStrategiesSlideIn_DataSetLevelOptimizerStrategiesSlideIn + { + groupDepth: -1 + column_All_constraints + { + columnId: 'All constraints' + dataPath: 'All constraints' + dataType: 'string' + index: 0 + subtotals: '' + width: 32 + } + column_ImgIsValid + { + columnId: 'ImgIsValid' + dataPath: 'ImgIsValid' + dataType: 'string' + index: 1 + subtotals: '' + width: 32 + } + column_Name + { + columnId: 'Name' + dataPath: 'Name' + dataType: 'string' + index: 2 + subtotals: '' + width: 270 + } + } + } + } + form_FormSanityCheck + { + title: 'Sanity Check' + shown: false + componentID: 'FormSanityCheck' + layout + { + mode: 'dockright' + index: 2 + } + components + { + FormSanityCheck_PanelSanityCheckToolbar + { + sizeRatio: 1 + } + FormSanityCheck_PanelSanityCheckContent + { + sizeRatio: 1 + } + FormSanityCheck_PanelSanityCheckGroup + { + sizeRatio: 4 + } + FormSanityCheck_ListSanityCheckGroup + { + } + FormSanityCheck_DataSetLevelSanityCheckGroup + { + groupDepth: -1 + sort: 'DESC:IsShown,DESC:SanityCheckHighestCategory,DESC:_Expr3' + column_All_constraints + { + columnId: 'All constraints' + dataPath: 'All constraints' + dataType: 'string' + index: 0 + subtotals: '' + width: 32 + } + column_Show + { + columnId: 'Show' + dataPath: 'Show' + dataType: 'string' + index: 1 + subtotals: '' + width: 32 + } + column_Category + { + columnId: 'Category' + dataPath: 'Category' + dataType: 'string' + index: 2 + subtotals: '' + width: 32 + } + column_Group + { + columnId: 'Group' + dataPath: 'Group' + dataType: 'string' + index: 3 + subtotals: '' + width: 270 + } + column__Expr3 + { + columnId: '_Expr3' + dataPath: '_Expr3' + dataType: 'number' + index: 4 + subtotals: '' + width: 95 + } + } + FormSanityCheck_PanelSanityCheckMessage + { + sizeRatio: 5 + } + FormSanityCheck_ListSanityCheckMessage + { + } + FormSanityCheck_DataSetLevelSanityCheckMessage + { + groupDepth: -1 + sort: 'DESC:IsShown,SanityCheckGroup.Type,SanityCheckGroup.Group,Description' + column_All_constraints + { + columnId: 'All constraints' + dataPath: 'All constraints' + dataType: 'string' + index: 0 + subtotals: '' + width: 32 + } + column_Show + { + columnId: 'Show' + dataPath: 'Show' + dataType: 'string' + index: 1 + subtotals: '' + width: 32 + } + column_Category + { + columnId: 'Category' + dataPath: 'Category' + dataType: 'string' + index: 2 + subtotals: '' + width: 32 + } + column_Messages + { + columnId: 'Messages' + dataPath: 'Messages' + dataType: 'string' + index: 3 + subtotals: '' + width: 32 + } + column_Description + { + columnId: 'Description' + dataPath: 'Description' + dataType: 'string' + index: 4 + subtotals: '' + width: 585 + } + } + } + } + form_FormDefaultCapacities + { + title: 'Default Capacities' + shown: false + componentID: 'FormDefaultCapacities' + layout + { + mode: 'dockright' + index: 3 + } + components + { + FormDefaultCapacities_PanelContent + { + sizeRatio: 1 + } + FormDefaultCapacities_PanelTimeCapacities + { + sizeRatio: 1 + } + FormDefaultCapacities_PanelQuantityAndTransportCapacities + { + sizeRatio: 1 + } + FormDefaultCapacities_PanelStockingPointCapacities + { + sizeRatio: 1 + } + FormDefaultCapacities_PanelActions + { + sizeRatio: 1 + } + } + } + form_FormGeneralSettings + { + title: 'General Settings' + shown: true + componentID: 'FormGeneralSettings' + layout + { + mode: 'dockright' + index: 4 + } + components + { + FormGeneralSettings_PanelContent + { + sizeRatio: 1 + } + FormGeneralSettings_PanelGeneralParameter + { + sizeRatio: 1 + } + FormGeneralSettings_PanelLeadTimeDependent + { + sizeRatio: 1 + } + FormGeneralSettings_PanelShelfLife + { + sizeRatio: 1 + } + FormGeneralSettings_PanelSustainability + { + sizeRatio: 1 + } + FormGeneralSettings_PanelForecastNetting + { + sizeRatio: 1 + } + FormGeneralSettings_PanelActions + { + sizeRatio: 1 + } + } + } + } + userconfigurableinformation + { + } + image: 'QUEUE' + page: '' + group: '' + index: 0 + description: '' + } + formatversion: 2 + id: 'BatchSetShiftPattern' + name: 'BatchSetShiftPattern' + isglobal: false + isroot: true +} -- Gitblit v1.9.3