From 50ae69bea4a7582524a17751c2cbbb8ae7ead0f3 Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Sun, 5 Dec 2021 16:55:36 +0300 Subject: [PATCH 01/43] Add button and DataWriter class --- Source/DataWriter/DataWriter.cs | 107 ++++++++++++++++++++++++++ Source/DataWriter/RibbonController.cs | 26 +++++++ 2 files changed, 133 insertions(+) create mode 100644 Source/DataWriter/DataWriter.cs create mode 100644 Source/DataWriter/RibbonController.cs diff --git a/Source/DataWriter/DataWriter.cs b/Source/DataWriter/DataWriter.cs new file mode 100644 index 0000000..76ed4ff --- /dev/null +++ b/Source/DataWriter/DataWriter.cs @@ -0,0 +1,107 @@ +using ExcelDna.Integration; +using Microsoft.Office.Interop.Excel; +using Rehau.Sku.Assist; +using System; +using System.Collections.Generic; +using System.Linq; +using System.IO; + +namespace Rehau.Sku +{ + public class DataWriter : IDisposable + { + private Application xlApp; + private Dictionary SkuAmount { get; set; } + private object[,] SelectedCells { get; set; } + private string FileName { get; set; } + private string ExportFileName { get; set; } + + public DataWriter() + { + this.xlApp = (Application)ExcelDnaUtil.Application; + this.FileName = this.xlApp.ActiveWorkbook.FullName; + + GetSelectedCells(); + } + + private void GetSelectedCells() + { + Range selection = xlApp.Selection; + this.SelectedCells = (object[,])selection.Value2; + } + + public bool IsRangeValid() + { + return SelectedCells != null && + SelectedCells.GetLength(1) == 2; + } + + public void FillSkuAmountDict() + { + SkuAmount = new Dictionary(); + int rowsCount = SelectedCells.GetLength(0); + + for (int row = 1; row <= rowsCount; row++) + { + if (SelectedCells[row, 1] == null || SelectedCells[row, 2] == null) + continue; + + string sku = null; + double? amount = null; + + for (int column = 1; column <= 2; column++) + { + object current = SelectedCells[row, column]; + + if (current.GetType() == typeof(string) + && SkuAssist.IsRehauSku((string)current)) + sku = (string)current; + + else if (current.GetType() == typeof(string) + && double.TryParse((string)current, out _)) + amount = double.Parse((string)current); + + else if (current.GetType() == typeof(double)) + amount = (double)current; + } + + if (sku == null || amount == null) + continue; + + if (SkuAmount.ContainsKey(sku)) + SkuAmount[sku] += amount.Value; + else + SkuAmount.Add(sku, amount.Value); + } + } + + public void DownloadPriceList() + { + Uri linkToPrice = new Uri(@"https://www.rehau.com/downloads/831332/%D0%BF%D1%80%D0%B0%D0%B9%D1%81-%D0%BB%D0%B8%D1%81%D1%82-%D0%B2%D0%B8%D1%81-exel-2021.xlsm"); + + if (FileName.Contains(':')) + ExportFileName = string.Join(".", FileName.Split('.').Select((x, i) => i == 0 ? string.Concat(x, "~") : "xlsm")); + else + ExportFileName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\Прайс-лист REHAU.xlsm"; + + HttpClientUtil.DownloadFile(linkToPrice, ExportFileName); + } + + public void GetPriceListWB() + { + Workbook wb = xlApp.Workbooks.Open(ExportFileName); + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + + } + } +} + diff --git a/Source/DataWriter/RibbonController.cs b/Source/DataWriter/RibbonController.cs new file mode 100644 index 0000000..a9eedb5 --- /dev/null +++ b/Source/DataWriter/RibbonController.cs @@ -0,0 +1,26 @@ +using System.Runtime.InteropServices; +using System.Windows.Forms; +using ExcelDna.Integration.CustomUI; + +namespace Ribbon +{ + [ComVisible(true)] + public class RibbonController : ExcelRibbon + { + public override string GetCustomUI(string RibbonID) + { + return @" + + + + + +