aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RhSolutions.AddIn/AddIn/ResetBarFunction.cs13
-rw-r--r--RhSolutions.AddIn/AddIn/RhSolutionsFunction.cs (renamed from RhSolutions.AddIn/AddIn/Functions.cs)49
-rw-r--r--RhSolutions.AddIn/Services/IDatabaseClient.cs6
-rw-r--r--RhSolutions.AddIn/Services/RhDatabaseClient.cs29
4 files changed, 53 insertions, 44 deletions
diff --git a/RhSolutions.AddIn/AddIn/ResetBarFunction.cs b/RhSolutions.AddIn/AddIn/ResetBarFunction.cs
new file mode 100644
index 0000000..bd0a591
--- /dev/null
+++ b/RhSolutions.AddIn/AddIn/ResetBarFunction.cs
@@ -0,0 +1,13 @@
+using ExcelDna.Integration;
+
+namespace RhSolutions.AddIn
+{
+ public static class ResetBarFunction
+ {
+ [ExcelFunction]
+ public static void _ResetStatusBar()
+ {
+ RhSolutionsAddIn.Excel.StatusBar = false;
+ }
+ }
+} \ No newline at end of file
diff --git a/RhSolutions.AddIn/AddIn/Functions.cs b/RhSolutions.AddIn/AddIn/RhSolutionsFunction.cs
index c775012..faa700f 100644
--- a/RhSolutions.AddIn/AddIn/Functions.cs
+++ b/RhSolutions.AddIn/AddIn/RhSolutionsFunction.cs
@@ -1,58 +1,57 @@
using ExcelDna.Integration;
using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Office.Interop.Excel;
+using RhSolutions.Models;
using RhSolutions.Services;
+using System.Collections.Generic;
using System.Linq;
namespace RhSolutions.AddIn
{
- public class Functions
+ public class RhSolutionsFunction
{
[ExcelFunction(Description = "Распознать артикул и попробовать найти его в прайс-листе")]
public static object RHSOLUTIONS([ExcelArgument(Name = "\"Строка с названием материала\"")] string line)
{
- object result;
IDatabaseClient databaseClient = RhSolutionsAddIn.ServiceProvider.GetService<IDatabaseClient>();
-
- result = ExcelAsyncUtil.Run("Database request", line, delegate
+ IEnumerable<Product> requestResult = ExcelAsyncUtil.Run("Database request", line, delegate
{
- return databaseClient.GetProduct(line).GetAwaiter().GetResult();
- });
+ return databaseClient.GetProducts(line)
+ .GetAwaiter()
+ .GetResult();
+ }) as IEnumerable<Product>;
- string parsedSku = Sku.TryParse(line, out var skus)
- ? skus.First().ToString() : string.Empty;
+ Sku.TryParse(line, out var skus);
- if (result == null)
+ if (requestResult == null)
{
- if (string.IsNullOrEmpty(parsedSku))
+ if (skus.Count() > 0)
{
- return ExcelError.ExcelErrorNA;
+ return $"{skus.First()} ...";
}
else
{
- return skus.First().ToString();
+ return "Загрузка...";
}
}
- if (result.Equals(ExcelError.ExcelErrorNA))
+ else
{
- if (string.IsNullOrEmpty(parsedSku))
+ if (requestResult.Count() == 0 && skus.Count() == 0)
{
- return "Загрузка...";
+ return ExcelError.ExcelErrorNA;
}
+
+ else if (requestResult.Count() == 0)
+ {
+ return $"{skus.First()}";
+ }
+
else
{
- return skus.First().ToString();
+ var firstProduct = requestResult.First();
+ return $"{firstProduct.ProductSku} {firstProduct.Name}";
}
}
-
- return result;
- }
-
- [ExcelFunction]
- public static void _ResetStatusBar()
- {
- RhSolutionsAddIn.Excel.StatusBar = false;
}
}
} \ No newline at end of file
diff --git a/RhSolutions.AddIn/Services/IDatabaseClient.cs b/RhSolutions.AddIn/Services/IDatabaseClient.cs
index e275dec..36994c9 100644
--- a/RhSolutions.AddIn/Services/IDatabaseClient.cs
+++ b/RhSolutions.AddIn/Services/IDatabaseClient.cs
@@ -1,9 +1,11 @@
-using System.Threading.Tasks;
+using RhSolutions.Models;
+using System.Collections.Generic;
+using System.Threading.Tasks;
namespace RhSolutions.Services
{
public interface IDatabaseClient
{
- public Task<object> GetProduct(string line);
+ public Task<IEnumerable<Product>> GetProducts(string query);
}
} \ No newline at end of file
diff --git a/RhSolutions.AddIn/Services/RhDatabaseClient.cs b/RhSolutions.AddIn/Services/RhDatabaseClient.cs
index a053e7b..65dfe0e 100644
--- a/RhSolutions.AddIn/Services/RhDatabaseClient.cs
+++ b/RhSolutions.AddIn/Services/RhDatabaseClient.cs
@@ -1,10 +1,12 @@
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
+using RhSolutions;
using RhSolutions.AddIn;
using RhSolutions.Models;
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
@@ -12,14 +14,15 @@ namespace RhSolutions.Services
{
public class RhDatabaseClient : IDatabaseClient
{
- private IServiceProvider provider;
+ private IServiceProvider serviceProvider;
+ public HttpStatusCode StatusCode { get; private set; }
public RhDatabaseClient(IServiceProvider provider)
{
- this.provider = provider;
+ this.serviceProvider = provider;
}
- public async Task<object> GetProduct(string line)
+ public async Task<IEnumerable<Product>> GetProducts(string line)
{
string request;
@@ -33,30 +36,22 @@ namespace RhSolutions.Services
request = @"https://rh.cebotari.ru/api/search?query=" + line;
}
- var client = provider.GetRequiredService<HttpClient>();
+ var client = serviceProvider.GetRequiredService<HttpClient>();
var response = await client.GetAsync(request);
try
- {
+ {
response.EnsureSuccessStatusCode();
string json = await response.Content.ReadAsStringAsync();
- var product = JsonConvert.DeserializeObject<IEnumerable<Product>>(json)
- .FirstOrDefault();
-
- if (product == null)
- {
- return null;
- }
- else
- {
- return $"{product.ProductSku} {product.Name}";
- }
+ return JsonConvert.DeserializeObject<IEnumerable<Product>>(json) ?? Enumerable.Empty<Product>();
}
catch
{
- return $"Ошибка сервера {response.StatusCode}";
+ StatusCode = response.StatusCode;
}
+
+ return Enumerable.Empty<Product>();
}
}
} \ No newline at end of file