aboutsummaryrefslogtreecommitdiff
path: root/src/PriceListTools/PriceList.cs
diff options
context:
space:
mode:
authorSergey Chebotar <s.chebotar@gmail.com>2022-01-09 10:37:25 +0300
committerSergey Chebotar <s.chebotar@gmail.com>2022-01-09 10:37:25 +0300
commit762127a4aa1ee393f19e08018830bc8ba023c050 (patch)
treeea1521f22b172b56453de3d7f75bf4fb5a6d11b5 /src/PriceListTools/PriceList.cs
parent8672fa8f6b28ee3e3cf0d00e05e1b9d3ab7a2bfd (diff)
Refactoring
Diffstat (limited to 'src/PriceListTools/PriceList.cs')
-rw-r--r--src/PriceListTools/PriceList.cs137
1 files changed, 16 insertions, 121 deletions
diff --git a/src/PriceListTools/PriceList.cs b/src/PriceListTools/PriceList.cs
index c39b0ba..bc11a17 100644
--- a/src/PriceListTools/PriceList.cs
+++ b/src/PriceListTools/PriceList.cs
@@ -1,146 +1,41 @@
using Microsoft.Office.Interop.Excel;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
namespace RehauSku.PriceListTools
{
- class PriceList
+ internal class PriceList
{
- public readonly Workbook Workbook;
+ public readonly string Name;
public readonly PriceListSheet OfferSheet;
- public readonly PriceListSheet ActiveSheet;
+ public List<PriceListSheet> Sheets { get; private set; }
- private const string amountHeader = "Кол-во";
- private const string skuHeader = "Актуальный материал";
private const string offerSheetHeader = "КП";
public PriceList(Workbook workbook)
{
- Workbook = workbook;
- OfferSheet = new PriceListSheet(workbook.Sheets[offerSheetHeader]);
+ Name = workbook.Name;
+ Sheets = new List<PriceListSheet>();
- Worksheet active = workbook.ActiveSheet;
-
- if (active.Name == offerSheetHeader)
- ActiveSheet = OfferSheet;
-
- else
- ActiveSheet = new PriceListSheet(active);
- }
-
- public void FillWithValues(Dictionary<string, double> values)
- {
- Worksheet ws = OfferSheet.sheet;
- ws.Activate();
-
- int amountColumn = OfferSheet.amountColumn.Value;
- int skuColumn = OfferSheet.skuColumn.Value;
- int exportedValues = 0;
-
- foreach (KeyValuePair<string, double> kvp in values)
+ foreach (Worksheet worksheet in workbook.Sheets)
{
- Range cell = ws.Columns[skuColumn].Find(kvp.Key);
-
- if (cell == null)
- {
- System.Windows.Forms.MessageBox.Show
- ($"Артикул {kvp.Key} отсутствует в таблице заказов {RegistryUtil.PriceListPath}",
- "Отсутствует позиция в конечной таблице заказов",
- System.Windows.Forms.MessageBoxButtons.OK,
- System.Windows.Forms.MessageBoxIcon.Information);
- }
+ PriceListSheet priceListSheet = new PriceListSheet(worksheet);
- else
- {
- ws.Cells[cell.Row, amountColumn].Value = kvp.Value;
- exportedValues++;
- }
+ if (priceListSheet.FillSkuAmount())
+ Sheets.Add(priceListSheet);
}
- AutoFilter filter = ws.AutoFilter;
- int firstFilterColumn = filter.Range.Column;
-
- filter.Range.AutoFilter(amountColumn - firstFilterColumn + 1, "<>");
- ws.Range["A1"].Activate();
- ws.Application.StatusBar = $"Экспортировано {exportedValues} строк из {values.Count}";
+ OfferSheet = Sheets.Where(s => s.Name == offerSheetHeader).FirstOrDefault();
}
- public void FillWithValues(Dictionary<string, double>[] values, string[] filenames)
+ public static string CreateNewFile()
{
- Worksheet ws = OfferSheet.sheet;
- ws.Activate();
-
- int amountColumn = OfferSheet.amountColumn.Value;
- int skuColumn = OfferSheet.skuColumn.Value;
- int headerColumn = OfferSheet.headerRow.Value;
-
- int exportedValues = 0;
-
- for (int i = 0; i < values.Length; i++)
- {
- ws.Columns[amountColumn]
- .EntireColumn
- .Insert(XlInsertShiftDirection.xlShiftToRight, XlInsertFormatOrigin.xlFormatFromRightOrBelow);
-
- foreach (var kvp in values[i])
- {
- Range cell = ws.Columns[skuColumn].Find(kvp.Key);
-
- if (cell == null)
- {
- System.Windows.Forms.MessageBox.Show
- ($"Артикул {kvp.Key} отсутствует в таблице заказов {RegistryUtil.PriceListPath}",
- "Отсутствует позиция в конечной таблице заказов",
- System.Windows.Forms.MessageBoxButtons.OK,
- System.Windows.Forms.MessageBoxIcon.Information);
- }
-
- else
- {
- ws.Cells[cell.Row, amountColumn].Value2 = kvp.Value;
- Range sumCell = ws.Cells[cell.Row, amountColumn + i + 1];
-
- if (sumCell.Value2 == null)
- sumCell.Value2 = kvp.Value;
- else
- sumCell.Value2 += kvp.Value;
-
- exportedValues++;
- }
- }
-
- ws.Cells[headerColumn, amountColumn].Value2 = filenames[i];
- }
-
- AutoFilter filter = ws.AutoFilter;
- int firstFilterColumn = filter.Range.Column;
-
- filter.Range.AutoFilter(amountColumn - firstFilterColumn + 1 + values.Length, "<>");
- ws.Range["A1"].Activate();
- ws.Application.StatusBar = $"Экспортировано {exportedValues} строк из {values.Sum(x => x.Count)}";
- }
-
- public class PriceListSheet
- {
- public readonly Worksheet sheet;
- public readonly int? headerRow;
-
- public readonly int? skuColumn;
- public readonly int? amountColumn;
-
- public object[,] skuCells;
- public object[,] amountCells;
-
- public PriceListSheet(Worksheet sheet)
- {
- this.sheet = sheet;
- headerRow = sheet.Cells.Find(amountHeader).Row;
- amountColumn = sheet.Cells.Find(amountHeader).Column;
- skuColumn = sheet.Cells.Find(skuHeader).Column;
+ string fileExtension = Path.GetExtension(RegistryUtil.PriceListPath);
+ string path = Path.GetTempFileName() + fileExtension;
- amountCells = sheet.Columns[amountColumn].Value2;
- skuCells = sheet.Columns[skuColumn].Value2;
- }
+ File.Copy(RegistryUtil.PriceListPath, path);
+ return path;
}
}
}