aboutsummaryrefslogtreecommitdiff
path: root/src/AddIn
diff options
context:
space:
mode:
authorSergey Chebotar <s.chebotar@gmail.com>2022-12-19 08:37:26 +0300
committerSergey Chebotar <s.chebotar@gmail.com>2022-12-19 08:37:26 +0300
commita7e5a500e1c78ebc556f09831402838903fa4b79 (patch)
tree6a974a96e2d9012fe05d22eb2cd5cdd0206589ba /src/AddIn
parente7d590bd2387f656d0b12db6fbe09abf647623bd (diff)
parentb66cc8fdce099daaf42f90ca8ae488bebd47d125 (diff)
Merge branch 'dev'
Diffstat (limited to 'src/AddIn')
-rw-r--r--src/AddIn/AddIn.cs14
-rw-r--r--src/AddIn/Functions.cs48
-rw-r--r--src/AddIn/MemoryCacheUtil.cs37
-rw-r--r--src/AddIn/RegistryUtil.cs20
-rw-r--r--src/AddIn/RehauSku.cs67
5 files changed, 72 insertions, 114 deletions
diff --git a/src/AddIn/AddIn.cs b/src/AddIn/AddIn.cs
index b532bfb..1606624 100644
--- a/src/AddIn/AddIn.cs
+++ b/src/AddIn/AddIn.cs
@@ -7,25 +7,12 @@ using System.Runtime.Caching;
namespace RehauSku
{
- enum ResponseOrder
- {
- Default,
- Relevance,
- Name,
- Price,
- Series
- }
-
class AddIn : IExcelAddIn
{
- public static HttpClient httpClient;
- public static MemoryCache memoryCache;
public static Application Excel;
public void AutoOpen()
{
- httpClient = new HttpClient();
- memoryCache = new MemoryCache("RehauSku");
Excel = (Application)ExcelDnaUtil.Application;
RegisterFunctions();
IntelliSenseServer.Install();
@@ -38,7 +25,6 @@ namespace RehauSku
IntelliSenseServer.Uninstall();
RegistryUtil.Uninitialize();
EventsUtil.Uninitialize();
- memoryCache.Dispose();
}
void RegisterFunctions()
diff --git a/src/AddIn/Functions.cs b/src/AddIn/Functions.cs
index 618d17d..c202a3b 100644
--- a/src/AddIn/Functions.cs
+++ b/src/AddIn/Functions.cs
@@ -1,56 +1,18 @@
using ExcelDna.Integration;
-using RehauSku.Assistant;
namespace RehauSku
{
public class Functions
{
- [ExcelFunction(description: "Получение названия первого продукта в поиске")]
- public static object RAUNAME([ExcelArgument(Name = "\"Запрос\"", Description = "в свободной форме или ячейка с запросом")] string request)
- => MakeRequest(request, ProductField.Name);
-
- [ExcelFunction(Description = "Получение артикула первого продукта в поиске")]
- public static object RAUSKU([ExcelArgument(Name = "\"Запрос\"", Description = "в свободной форме или ячейка с запросом")] string request)
- => MakeRequest(request, ProductField.Id);
-
- [ExcelFunction(Description = "Получение цены первого продукта в поиске")]
- public static object RAUPRICE([ExcelArgument(Name = "\"Запрос\"", Description = "в свободной форме или ячейка с запросом")] string request)
- => MakeRequest(request, ProductField.Price);
-
- private static object MakeRequest(string request, ProductField field)
+ [ExcelFunction(Description = "Получение корректного артикула из строки")]
+ public static object GETRAUSKU([ExcelArgument(Name = "\"Строка\"", Description = "строка, содержащая актикул")] string line)
{
- object result;
-
- if (request.IsCached())
- result = request.GetFromCache();
-
- else
+ if (RauSku.TryParse(line, out RauSku rausku))
{
- result = ExcelAsyncUtil.Run("Request", request, delegate
- {
- return request.RequestAndCache().GetAwaiter().GetResult();
- });
+ return rausku.ToString();
}
- if (result == null)
- return "Не найдено :(";
-
- if (result.Equals(ExcelError.ExcelErrorNA))
- return "Загрузка...";
-
- IProduct product = result as IProduct;
-
- switch (field)
- {
- case ProductField.Name:
- return product.Name;
- case ProductField.Id:
- return product.Id;
- case ProductField.Price:
- return double.Parse(product.Price, System.Globalization.CultureInfo.InvariantCulture);
- default:
- return null;
- }
+ else return ExcelError.ExcelErrorNA;
}
}
} \ No newline at end of file
diff --git a/src/AddIn/MemoryCacheUtil.cs b/src/AddIn/MemoryCacheUtil.cs
deleted file mode 100644
index 1d42e14..0000000
--- a/src/AddIn/MemoryCacheUtil.cs
+++ /dev/null
@@ -1,37 +0,0 @@
-using System;
-using System.Runtime.Caching;
-using System.Threading.Tasks;
-using RehauSku.Assistant;
-
-namespace RehauSku
-{
- static class MemoryCacheUtil
- {
- public static bool IsCached(this string request)
- {
- return AddIn.memoryCache.Contains(request);
- }
-
- public static IProduct GetFromCache(this string request)
- {
- return AddIn.memoryCache[request] as IProduct;
- }
-
- public static async Task<IProduct> RequestAndCache(this string request)
- {
- IProduct product = await SkuAssist.GetProductAsync(request);
-
- if (product == null)
- return null;
-
- AddIn.memoryCache.Add(request, product, DateTime.Now.AddMinutes(10));
- return product;
- }
-
- public static void ClearCache()
- {
- AddIn.memoryCache.Dispose();
- AddIn.memoryCache = new MemoryCache("RehauSku");
- }
- }
-} \ No newline at end of file
diff --git a/src/AddIn/RegistryUtil.cs b/src/AddIn/RegistryUtil.cs
index a13e941..54e071e 100644
--- a/src/AddIn/RegistryUtil.cs
+++ b/src/AddIn/RegistryUtil.cs
@@ -9,14 +9,12 @@ namespace RehauSku
static class RegistryUtil
{
private static string priceListPath;
- private static int? storeResponseOrder;
private static RegistryKey RootKey { get; set; }
public static void Initialize()
{
RootKey = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\REHAU\SkuAssist");
priceListPath = RootKey.GetValue("PriceListPath") as string;
- storeResponseOrder = RootKey.GetValue("StoreResponseOrder") as int?;
}
public static void Uninitialize()
@@ -71,23 +69,5 @@ namespace RehauSku
{
return Path.GetFileName(priceListPath);
}
-
- public static ResponseOrder StoreResponseOrder
- {
- get
- {
- if (storeResponseOrder == null)
- {
- RootKey.SetValue("StoreResponseOrder", (int)ResponseOrder.Default);
- storeResponseOrder = (int)ResponseOrder.Default;
- return (ResponseOrder)storeResponseOrder.Value;
- }
-
- else
- {
- return (ResponseOrder)storeResponseOrder.Value;
- }
- }
- }
}
}
diff --git a/src/AddIn/RehauSku.cs b/src/AddIn/RehauSku.cs
new file mode 100644
index 0000000..40e5d30
--- /dev/null
+++ b/src/AddIn/RehauSku.cs
@@ -0,0 +1,67 @@
+using System.Text.RegularExpressions;
+
+namespace RehauSku
+{
+ internal class RauSku
+ {
+ public string Sku { get; private set; }
+ public string Variant { get; private set; }
+
+ public RauSku(string sku, string variant)
+ {
+ Sku = sku;
+ Variant = variant;
+ }
+
+ public static bool TryParse(string line, out RauSku rehauSku)
+ {
+ Match match;
+ match = Regex.Match(line, @"\b[1]\d{6}[1]\d{3}\b");
+ if (match.Success)
+ {
+ string sku = match.Value.Substring(1, 6);
+ string variant = match.Value.Substring(8, 3);
+ rehauSku = new RauSku(sku, variant);
+ return true;
+ }
+
+ match = Regex.Match(line, @"\b\d{6}\D\d{3}\b");
+ if (match.Success)
+ {
+ string sku = match.Value.Substring(0, 6);
+ string variant = match.Value.Substring(7, 3);
+ rehauSku = new RauSku(sku, variant);
+ return true;
+ }
+
+ match = Regex.Match(line, @"\b\d{9}\b");
+ if (match.Success)
+ {
+ string sku = match.Value.Substring(0, 6);
+ string variant = match.Value.Substring(6, 3);
+ rehauSku = new RauSku(sku, variant);
+ return true;
+ }
+
+ match = Regex.Match(line, @"\b\d{6}\b");
+ if (match.Success)
+ {
+ string sku = match.Value.Substring(0, 6);
+ string variant = "001";
+ rehauSku = new RauSku(sku, variant);
+ return true;
+ }
+
+ else
+ {
+ rehauSku = null;
+ return false;
+ }
+ }
+
+ public override string ToString()
+ {
+ return $"1{Sku}1{Variant}";
+ }
+ }
+} \ No newline at end of file