Переглянути джерело

Fix aggregation for quantity during Generate Labels. Change version to 1.3.2

Dalibor Votruba 8 місяців тому
батько
коміт
b2e5ca0c8d
2 змінених файлів з 57 додано та 5 видалено
  1. 54 2
      App/FormLabelPrint.cs
  2. 3 3
      App/qdr.app.studiou.orders2printpack.csproj

+ 54 - 2
App/FormLabelPrint.cs

@@ -44,7 +44,7 @@ namespace qdr.app.studiou.orders2printpack
                 if (dlgSaveXls.ShowDialog(this) == DialogResult.OK)
                 {
                     _xlsPath = dlgSaveXls.FileName;
-                    tbXslxPath.Text = _csvPath;
+                    tbXslxPath.Text = _xlsPath;
                 }
             });
         }
@@ -71,7 +71,9 @@ namespace qdr.app.studiou.orders2printpack
 
         private DataTable ProcessData(DataTable data)
         {
-            //LabelAggegationDataExpression
+            // Aggregate data first
+            data = AggregateData(data);
+
             var expressionParts = AppSettings.Default.LabelAggegationDataExpression.Split('=');
             var expressionColumnName = expressionParts[0];
             var expressionValue = expressionParts[1];
@@ -100,7 +102,57 @@ namespace qdr.app.studiou.orders2printpack
             return result;
 
         }
+        /// <summary>
+        /// Aggregates order data by grouping order numbers, product categories, and product variant types,
+        /// then summing the quantities for each group.
+        /// </summary>
+        /// <param name="data">Input DataTable containing order details</param>
+        /// <returns>Aggregated DataTable with columns: order_no, prod_cat, prod_var_type, qty (sum)</returns>
+        private DataTable AggregateData(DataTable data)
+        {
+            if (data == null)
+                throw new ArgumentNullException(nameof(data));
+
+            // Create result DataTable with appropriate columns
+            DataTable result = new DataTable();
+            result.Columns.Add("order_no", typeof(string));
+            result.Columns.Add("prod_cat", typeof(string));
+            result.Columns.Add("prod_var_type", typeof(string));
+            result.Columns.Add("qty", typeof(string));
+
+            // Group and aggregate using LINQ
+            var aggregatedData = data.AsEnumerable()
+                .GroupBy(row => new
+                {
+                    OrderNo = row.Field<string>("order_no"),
+                    ProdCat = row.Field<string>("prod_cat"),
+                    ProdVarType = row.Field<string>("prod_var_type")
+                })
+                .Select(group => new
+                {
+                    group.Key.OrderNo,
+                    group.Key.ProdCat,
+                    group.Key.ProdVarType,
+                    TotalQty = group.Sum(row => int.Parse(row.Field<string>("qty"))).ToString()
+                })
+                .OrderBy(x => x.OrderNo)
+                .ThenBy(x => x.ProdCat)
+                .ThenBy(x => x.ProdVarType);
+
+
+            // Populate result DataTable
+            foreach (var item in aggregatedData)
+            {
+                result.Rows.Add(
+                    item.OrderNo,
+                    item.ProdCat,
+                    item.ProdVarType,
+                    int.Parse(item.TotalQty)
+                );
+            }
 
+            return result;
+        }
 
 
         private void butConfig_Click(object sender, EventArgs e)

+ 3 - 3
App/qdr.app.studiou.orders2printpack.csproj

@@ -16,9 +16,9 @@
     <SignAssembly>True</SignAssembly>
     <AssemblyOriginatorKeyFile>..\bo_strong_key_pair.snk</AssemblyOriginatorKeyFile>
     <Platforms>AnyCPU;x86;x64</Platforms>
-    <AssemblyVersion>1.3.1.0</AssemblyVersion>
-    <FileVersion>1.3.1.0</FileVersion>
-    <Version>1.3.1</Version>
+    <AssemblyVersion>1.3.2.0</AssemblyVersion>
+    <FileVersion>1.3.2.0</FileVersion>
+    <Version>1.3.2</Version>
 	<ApplicationHighDpiMode>SystemAware</ApplicationHighDpiMode>
     <ForceDesignerDpiUnaware>true</ForceDesignerDpiUnaware>
   </PropertyGroup>