From 9eb69f8e68fbaea2f6becc92d3b84236084ab04b Mon Sep 17 00:00:00 2001
From: xiaoding721 <33130084+xiaoding721@users.noreply.github.com>
Date: 星期二, 15 十月 2024 02:10:43 +0800
Subject: [PATCH] 修改批量修改shift pattern功能

---
 _Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern0.qbl                                                             |   46 +++++++
 _Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl                                                              |   26 ++++
 _Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelDaily_478_bApply568_OnClick#952.def |    2 
 _Main/UI/MacroPlannerWebApp/Views/Time_Capacities.vw                                                                           |   24 +++
 _Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw                                                                      |  107 +++++++++++++++++
 _Main/BL/Type_ProductionLineBatchData/Method_OnOK.qbl                                                                          |   77 ------------
 _Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl                                                                   |   33 +++++
 7 files changed, 233 insertions(+), 82 deletions(-)

diff --git a/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl b/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl
index 7b369a3..31bd0a7 100644
--- a/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl
+++ b/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern.qbl
@@ -13,6 +13,31 @@
   [*
     // Akari Oct-10-2024 (created)
     owner := unit.MacroPlan();
+    
+    saveDays := construct( Dates );
+    flag := startDate.StartOfNextWeek();
+    for( i := startDate; i<endDate; i := i + 1 ){
+      if( i < flag ){
+        saveDays.Add( i ); 
+      }else{
+        temp := skipWeek - 1;
+        while( temp > 0 ){
+          i := flag;
+          flag := i.StartOfNextWeek();
+          temp--;
+          
+          info( i.Format( "Y-M2-D2") );
+          info( flag.Format( "Y-M2-D2") );
+        }
+      }
+    }
+    
+    info( "----------------------------");
+    
+    traverse( saveDays,Elements,element ){
+      info( element.Format( "Y-M2-D2")); 
+    }
+    
     dayPeriod_MPs := selectsortedset( owner,Period_MP,period_MP, 
                                       period_MP.TimeUnit() = 'Day' and 
                                       period_MP.StartDate() >= startDate and 
@@ -22,6 +47,7 @@
                                        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()));
       if( unitPeriodTimes.Size() > 0 ){
diff --git a/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern0.qbl b/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern0.qbl
new file mode 100644
index 0000000..8e45588
--- /dev/null
+++ b/_Main/BL/Type_LocalTool/StaticMethod_BatchSetUnitShiftPattern0.qbl
@@ -0,0 +1,46 @@
+Quintiq file version 2.0
+#parent: #root
+StaticMethod BatchSetUnitShiftPattern (
+  Unit unit,
+  ShiftPattern shiftPattern,
+  Date startDate,
+  Date endDate,
+  Number skipDay
+)
+{
+  TextBody:
+  [*
+    // Akari Oct-10-2024 (created)
+    owner := unit.MacroPlan();
+    
+    saveDays := construct( Dates );
+    for( i := startDate; i < endDate; i := i + skipDay ){
+      saveDays.Add( i ); 
+    }
+    
+    
+    dayPeriod_MPs := selectsortedset( owner,Period_MP,period_MP, 
+                                      period_MP.TimeUnit() = 'Day' and 
+                                      period_MP.StartDate() >= startDate and 
+                                      period_MP.EndDate() <= endDate and exists( saveDays, Elements,day,day = period_MP.StartDate()) ,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( saveDays, Elements,day,day = period_MP.StartDate()) ,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()));
+      if( unitPeriodTimes.Size() > 0 ){
+        info( unitPeriodTimes.Size() );
+        LocalTool::SetUnitShiftPattern( owner,unitPeriodTimes,shiftPattern );
+      }
+    }
+    if( weekPeriod_MPs.Size() <> 0 ){
+      unitPeriodTimes := selectset( unit,UnitPeriod.astype( UnitPeriodTime ),unitPeriodTime,exists( weekPeriod_MPs,Elements,period_MP,period_MP = unitPeriodTime.Period_MP()));
+      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
index 92b0e44..52778d8 100644
--- a/_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl
+++ b/_Main/BL/Type_LocalTool/StaticMethod_SetUnitShiftPattern.qbl
@@ -47,6 +47,21 @@
       }
     }
     
+    traverse( unitPeriodTimes,Elements,unitPeriodTime,isnull( unitPeriodTime.UnitAvailability())){
+    //  UnitAvailability::Create( unitPeriodTime.Unit(),
+    //                            unitPeriodTime.Start(),
+    //                            timeunit,
+    //                            maintenance,
+    //                            efficiency,
+    //                            allocation,
+    //                            shiftPattern,
+    //                            maxloadpercentage,
+    //                            nrofunitopen,
+    //                            minloadthreshold,
+    //                            true );
+      unitPeriodTime.CalcUnitAvailability();
+    }
+    
     isbatchedit := unitPeriodTimes.Size() > 1;
     UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes,
                                                         not isbatchedit or false,
@@ -66,5 +81,23 @@
                                                         not isbatchedit or false,
                                                         minloadthreshold
                                                        );
+    //UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes,
+    //                                                    not isbatchedit or CheckBoxBatchEditMaintenance.Checked(),
+    //                                                    data.TimeUnit(),
+    //                                                    data.Maintenance(),
+    //                                                    not isbatchedit or CheckBoxBatchEditEfficiency.Checked(),
+    //                                                    data.Efficiency(),
+    //                                                    false,
+    //                                                    data.Allocation(),
+    //                                                    not isbatchedit or CheckBoxBatchEditShiftPattern.Checked(),
+    //                                                    data.ShiftPattern(),
+    //                                                    not isbatchedit or CheckBoxBatchEditMaxLoadPercentage.Checked(),
+    //                                                    data.MaximumLoadPercentage(),
+    //                                                    not isbatchedit or CheckBoxBatchEditNrOfUnitsOpen.Checked(),
+    //                                                    data.NrOfUnitsOpen(),
+    //                                                    DataHolderFromThisPeriodOnward.Data(),
+    //                                                    not isbatchedit or CheckBoxBatchEditMinimumLoadThreshold.Checked(),
+    //                                                    data.MinimumLoadThreshold()
+    //                                                   );
   *]
 }
diff --git a/_Main/BL/Type_ProductionLineBatchData/Method_OnOK.qbl b/_Main/BL/Type_ProductionLineBatchData/Method_OnOK.qbl
index 8c9012e..8c9b634 100644
--- a/_Main/BL/Type_ProductionLineBatchData/Method_OnOK.qbl
+++ b/_Main/BL/Type_ProductionLineBatchData/Method_OnOK.qbl
@@ -8,81 +8,6 @@
   TextBody:
   [*
     // rislai Jun-9-2024 (created)
-    firstElement := minselect( unitPeriodTimes, Elements, e, true, e.Start() );
-    
-    start := this.MacroPlan().Start();
-    timeunit := this.MacroPlan().StartOfPlanningPeriod().TimeUnit();
-    maintenance := Duration::Zero();
-    efficiency := 1.0;
-    allocation := 1.0;
-    
-    maxloadpercentage := this.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
-                                                       );
-    
-    //UnitAvailability::CreateOrUpdateForUnitPeriodTimes( unitPeriodTimes,
-    //                                                    not isbatchedit or CheckBoxBatchEditMaintenance.Checked(),
-    //                                                    data.TimeUnit(),
-    //                                                    data.Maintenance(),
-    //                                                    not isbatchedit or CheckBoxBatchEditEfficiency.Checked(),
-    //                                                    data.Efficiency(),
-    //                                                    false,
-    //                                                    data.Allocation(),
-    //                                                    not isbatchedit or CheckBoxBatchEditShiftPattern.Checked(),
-    //                                                    data.ShiftPattern(),
-    //                                                    not isbatchedit or CheckBoxBatchEditMaxLoadPercentage.Checked(),
-    //                                                    data.MaximumLoadPercentage(),
-    //                                                    not isbatchedit or CheckBoxBatchEditNrOfUnitsOpen.Checked(),
-    //                                                    data.NrOfUnitsOpen(),
-    //                                                    DataHolderFromThisPeriodOnward.Data(),
-    //                                                    not isbatchedit or CheckBoxBatchEditMinimumLoadThreshold.Checked(),
-    //                                                    data.MinimumLoadThreshold()
-    //                                                   );
+    LocalTool::SetUnitShiftPattern( this.MacroPlan(),unitPeriodTimes,shiftPattern );
   *]
 }
diff --git "a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelDaily_478_bApply568_OnClick\043952.def" "b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelDaily_478_bApply568_OnClick\043952.def"
index b81be71..e6d1cec 100644
--- "a/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelDaily_478_bApply568_OnClick\043952.def"
+++ "b/_Main/UI/MacroPlannerWebApp/Component_FormProductionLineBatchSetShiftPattern/Response_PanelDaily_478_bApply568_OnClick\043952.def"
@@ -12,7 +12,7 @@
     [*
       
       skipDay := [Number]efDaily.Text();
-      // LocalTool::BatchSetUnitShiftPattern( dhSelectUnit.Data(),ddlShiftPattern.Data(),dsStartDate.Date(),dsEndDate.Date(),weekdays ,skipWeek );
+      LocalTool::BatchSetUnitShiftPattern( dhSelectUnit.Data(),ddlShiftPattern.Data(),dsStartDate.Date(),dsEndDate.Date() ,skipDay );
       WebMessageBox::Success( "Success");
     *]
   }
diff --git a/_Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw b/_Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw
index e1a08c5..961b5b1 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/BatchSetShiftPattern.vw
@@ -4,6 +4,88 @@
   {
     forms
     {
+      form_legacy_2
+      {
+        title: 'Time Capacities'
+        shown: true
+        componentID: 'FormTimeCapacities'
+        layout
+        {
+          mode: 'open'
+          rowPosition: 13
+          rowSpan: 10
+          columnPosition: 1
+          columnSpan: 12
+        }
+        components
+        {
+          FormTimeCapacities_PanelMatrix
+          {
+            sizeRatio: 1
+          }
+          FormTimeCapacities_MatrixEditorTimeCapacities
+          {
+            gridColor: '#c4c4c4'
+            totalHeaderWidth: 449
+            attributeHeaderWidthRatio: 0.6
+            nameHeaderWidthRatio: 0.4
+            columnWidth: 100
+            horizontalGrid: true
+            verticalGrid: true
+            backendState
+            {
+              componentId: 'QLibMacroPlannerWebUI::FormTimeCapacities.MatrixEditorTimeCapacities'
+              state
+              {
+                cells
+                {
+                  attributes
+                  {
+                    attribute_ShiftPatternName
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 0
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'ShiftPatternName'
+                    }
+                    attribute_Efficiency
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 1
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'Efficiency'
+                    }
+                    attribute_TotalAvailableCapacity
+                    {
+                      type: 'MatrixEditorWebApiCellDataModelInterest'
+                      index: 2
+                      rowsubtotal: ''
+                      columnsubtotal: ''
+                      attribute: 'TotalAvailableCapacity'
+                    }
+                  }
+                }
+                columns
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'StartDate'"
+                  }
+                }
+                rows
+                {
+                  sorting
+                  {
+                    criteria: "datamember:'DisplayIndex'"
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
       form_FormProductionLineBatchSetShiftPattern
       {
         title: 'QMacroPlanner::FormProductionLineBatchSetShiftPattern'
@@ -13,9 +95,9 @@
         {
           mode: 'open'
           rowPosition: 1
-          rowSpan: 23
+          rowSpan: 12
           columnPosition: 1
-          columnSpan: 9
+          columnSpan: 10
         }
         components
         {
@@ -48,6 +130,27 @@
           {
             sizeRatio: 1
           }
+          FormProductionLineBatchSetShiftPattern_PanelRight445
+          {
+            sizeRatio: 1
+            activeChild: 'PanelWeekly'
+          }
+          FormProductionLineBatchSetShiftPattern_PanelDaily
+          {
+            sizeRatio: 1
+          }
+          FormProductionLineBatchSetShiftPattern_PanelDaily819
+          {
+            sizeRatio: 1
+          }
+          FormProductionLineBatchSetShiftPattern_PanelWeekly
+          {
+            sizeRatio: 1
+          }
+          FormProductionLineBatchSetShiftPattern_PanelWeekly996
+          {
+            sizeRatio: 1
+          }
         }
       }
       form_FormKPI
diff --git a/_Main/UI/MacroPlannerWebApp/Views/Time_Capacities.vw b/_Main/UI/MacroPlannerWebApp/Views/Time_Capacities.vw
index e44aa89..2362951 100644
--- a/_Main/UI/MacroPlannerWebApp/Views/Time_Capacities.vw
+++ b/_Main/UI/MacroPlannerWebApp/Views/Time_Capacities.vw
@@ -101,7 +101,7 @@
           FormProductionLineBatchData_DataSetLevelProductionLineBatchData
           {
             groupDepth: -1
-            sort: 'StartDate'
+            sort: 'DESC:Unit3.Name'
             column_ImageIsEnable
             {
               columnId: 'ImageIsEnable'
@@ -147,12 +147,21 @@
               subtotals: ''
               width: 150
             }
+            column_Unit3_Name
+            {
+              columnId: 'Unit3.Name'
+              dataPath: 'Unit3.Name'
+              dataType: 'string'
+              index: 5
+              subtotals: ''
+              width: 150
+            }
             column_ShiftPattern1_Name
             {
               columnId: 'ShiftPattern1.Name'
               dataPath: 'ShiftPattern1.Name'
               dataType: 'string'
-              index: 5
+              index: 6
               subtotals: ''
               width: 112
             }
@@ -161,10 +170,19 @@
               columnId: 'ShiftPattern2.Name'
               dataPath: 'ShiftPattern2.Name'
               dataType: 'string'
-              index: 6
+              index: 7
               subtotals: ''
               width: 112
             }
+            column_ShiftPattern3_Name
+            {
+              columnId: 'ShiftPattern3.Name'
+              dataPath: 'ShiftPattern3.Name'
+              dataType: 'string'
+              index: 8
+              subtotals: ''
+              width: 150
+            }
           }
         }
       }

--
Gitblit v1.9.3