aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-rw-r--r--Source/Assistant/IProduct.cs5
-rw-r--r--Source/Assistant/SkuAssist.cs53
-rw-r--r--Source/ExcelDNA/Functions.cs59
3 files changed, 59 insertions, 58 deletions
diff --git a/Source/Assistant/IProduct.cs b/Source/Assistant/IProduct.cs
index 54b3dd0..d5db286 100644
--- a/Source/Assistant/IProduct.cs
+++ b/Source/Assistant/IProduct.cs
@@ -1,10 +1,9 @@
-using System;
-
-namespace Rehau.Sku.Assist
+namespace Rehau.Sku.Assist
{
interface IProduct
{
string Id { get; }
string Name { get; }
+ string Price { get; }
}
}
diff --git a/Source/Assistant/SkuAssist.cs b/Source/Assistant/SkuAssist.cs
index b6b5f7e..fd69a5b 100644
--- a/Source/Assistant/SkuAssist.cs
+++ b/Source/Assistant/SkuAssist.cs
@@ -1,7 +1,9 @@
using AngleSharp.Dom;
+using ExcelDna.Integration;
using Newtonsoft.Json;
using System;
using System.Linq;
+using System.Runtime.Caching;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
@@ -16,6 +18,13 @@ namespace Rehau.Sku.Assist
Series
}
+ public enum ProductField
+ {
+ Name,
+ Id,
+ Price
+ }
+
static class SkuAssist
{
public static async Task<IProduct> GetProduct(string request)
@@ -43,10 +52,52 @@ namespace Rehau.Sku.Assist
IProduct product = storeResponse
.Ecommerce
.Impressions
- .Where(i => Regex.IsMatch(i.Id, @"\d{11}", RegexOptions.None))
+ .Where(p => Regex.IsMatch(p.Id, @"\d{11}", RegexOptions.None))
.FirstOrDefault();
return product;
}
+
+ public static object GetProduct(string request, ProductField field)
+ {
+ IProduct product;
+
+ if (MemoryCache.Default.Contains(request))
+ {
+ product = MemoryCache.Default[request] as IProduct;
+ }
+
+ else
+ {
+ object result = ExcelAsyncUtil.Run("RauName", new[] { request },
+ delegate
+ {
+ Task<IProduct> p = Task.Run(() => GetProduct(request));
+ return p.Result;
+ });
+
+ if (result == null)
+ return "Не найдено";
+
+ if (result.Equals(ExcelError.ExcelErrorNA))
+ return "Загрузка...";
+
+ product = result as IProduct;
+ MemoryCache.Default.Add(request, product, DateTime.Now.AddMinutes(10));
+ return product.Name;
+ }
+
+ switch (field)
+ {
+ case ProductField.Name:
+ return product.Name;
+ case ProductField.Id:
+ return product.Id;
+ case ProductField.Price:
+ return product.Price;
+ default:
+ return ExcelError.ExcelErrorValue;
+ }
+ }
}
} \ No newline at end of file
diff --git a/Source/ExcelDNA/Functions.cs b/Source/ExcelDNA/Functions.cs
index 9ce4429..a9bdfca 100644
--- a/Source/ExcelDNA/Functions.cs
+++ b/Source/ExcelDNA/Functions.cs
@@ -1,6 +1,4 @@
using ExcelDna.Integration;
-using System.Runtime.Caching;
-using System.Threading.Tasks;
namespace Rehau.Sku.Assist
{
@@ -8,61 +6,14 @@ namespace Rehau.Sku.Assist
{
[ExcelFunction]
public static object RAUNAME(string request)
- {
- if (MemoryCache.Default.Contains(request))
- {
- IProduct product = MemoryCache.Default[request] as IProduct;
- return product.Name;
- }
-
- else
- {
- object result = ExcelAsyncUtil.Run("RauName", new[] { request },
- delegate
- {
- Task<IProduct> p = Task.Run(() => SkuAssist.GetProduct(request));
- return p.Result;
- });
-
- if (result == null)
- return "Не найдено";
-
- if (result.Equals(ExcelError.ExcelErrorNA))
- return "Загрузка...";
-
- IProduct product = result as IProduct;
- MemoryCache.Default.Add(request, product, System.DateTime.Now.AddMinutes(10));
- return product.Name;
- }
- }
+ => SkuAssist.GetProduct(request, ProductField.Name);
[ExcelFunction]
public static object RAUSKU(string request)
- {
- if (MemoryCache.Default.Contains(request))
- {
- IProduct product = MemoryCache.Default[request] as IProduct;
- return product.Id;
- }
- else
- {
- object result = ExcelAsyncUtil.Run("RauSku", new[] { request },
- delegate
- {
- Task<IProduct> p = Task.Run(() => SkuAssist.GetProduct(request));
- return p.Result;
- });
+ => SkuAssist.GetProduct(request, ProductField.Id);
- if (result == null)
- return "Не найдено";
-
- if (result.Equals(ExcelError.ExcelErrorNA))
- return "Загрузка...";
-
- IProduct product = result as IProduct;
- MemoryCache.Default.Add(request, product, System.DateTime.Now.AddMinutes(10));
- return product.Id;
- }
- }
+ [ExcelFunction]
+ public static object RAUPRICE(string request)
+ => SkuAssist.GetProduct(request, ProductField.Price);
}
} \ No newline at end of file