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 similarity index 51% rename from RhSolutions.AddIn/AddIn/Functions.cs rename to 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(); - - result = ExcelAsyncUtil.Run("Database request", line, delegate + IEnumerable requestResult = ExcelAsyncUtil.Run("Database request", line, delegate { - return databaseClient.GetProduct(line).GetAwaiter().GetResult(); - }); + return databaseClient.GetProducts(line) + .GetAwaiter() + .GetResult(); + }) as IEnumerable; - 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(); - } - } - - if (result.Equals(ExcelError.ExcelErrorNA)) - { - if (string.IsNullOrEmpty(parsedSku)) { return "Загрузка..."; } - else - { - return skus.First().ToString(); - } } - return result; - } + else + { + if (requestResult.Count() == 0 && skus.Count() == 0) + { + return ExcelError.ExcelErrorNA; + } - [ExcelFunction] - public static void _ResetStatusBar() - { - RhSolutionsAddIn.Excel.StatusBar = false; + else if (requestResult.Count() == 0) + { + return $"{skus.First()}"; + } + + else + { + var firstProduct = requestResult.First(); + return $"{firstProduct.ProductSku} {firstProduct.Name}"; + } + } } } } \ 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 GetProduct(string line); + public Task> 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 GetProduct(string line) + public async Task> 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(); + var client = serviceProvider.GetRequiredService(); var response = await client.GetAsync(request); try - { + { response.EnsureSuccessStatusCode(); string json = await response.Content.ReadAsStringAsync(); - var product = JsonConvert.DeserializeObject>(json) - .FirstOrDefault(); - - if (product == null) - { - return null; - } - else - { - return $"{product.ProductSku} {product.Name}"; - } + return JsonConvert.DeserializeObject>(json) ?? Enumerable.Empty(); } catch { - return $"Ошибка сервера {response.StatusCode}"; + StatusCode = response.StatusCode; } + + return Enumerable.Empty(); } } } \ No newline at end of file