aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSerghei Cebotari <serghei@cebotari.ru>2024-11-06 22:46:44 +0300
committerSerghei Cebotari <serghei@cebotari.ru>2024-11-06 22:46:44 +0300
commita73b2441b3ac70e5ac7616c95c7272fc92d8bdd7 (patch)
treee91b9f53d7df2fda60570303064dd8dfdf8895c6
parent06e47d3135d83fed68cb941369a03d20964fe2c7 (diff)
Search for range vaules in Product search function
-rw-r--r--RhSolutions.AddIn/AddIn/RhSolutionsFunctions.cs269
1 files changed, 141 insertions, 128 deletions
diff --git a/RhSolutions.AddIn/AddIn/RhSolutionsFunctions.cs b/RhSolutions.AddIn/AddIn/RhSolutionsFunctions.cs
index dfc3d6e..aadc2c5 100644
--- a/RhSolutions.AddIn/AddIn/RhSolutionsFunctions.cs
+++ b/RhSolutions.AddIn/AddIn/RhSolutionsFunctions.cs
@@ -2,142 +2,155 @@
public static class RhSolutionsFunctions
{
- private static readonly IDatabaseClient databaseClient =
- RhSolutionsAddIn.ServiceProvider.GetService<IDatabaseClient>();
- private static readonly ICurrencyClient currencyClient =
- RhSolutionsAddIn.ServiceProvider.GetRequiredService<ICurrencyClient>();
+ private static readonly IDatabaseClient databaseClient =
+ RhSolutionsAddIn.ServiceProvider.GetService<IDatabaseClient>();
+ private static readonly ICurrencyClient currencyClient =
+ RhSolutionsAddIn.ServiceProvider.GetRequiredService<ICurrencyClient>();
- [ExcelFunction(Name = "РЕХАУ")]
- public static object ProductSearch(string query)
- {
- var functionName = nameof(ProductSearch);
- var parameters = new object[] { query };
- if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
- {
- return await databaseClient.GetProducts(query);
- }) is not IEnumerable<Product> products)
- {
- return "Загрузка...";
- }
- else if (!products.Any())
- {
- return ExcelError.ExcelErrorNA;
- }
- else
- {
- var product = products.First();
- return $"{product.Id} {product.Name}";
- }
- }
+ [ExcelFunction(Name = "РЕХАУ")]
+ public static object ProductSearch(object[,] values)
+ {
+ List<string> strings = new();
+ int rows = values.GetLength(0);
+ int columns = values.GetLength(1);
+ for (int row = 0; row < rows; row++)
+ {
+ for (int column = 0; column < columns; column++)
+ {
+ object value = values[row, column];
+ strings.Add(value.ToString());
+ }
+ }
+
+ string query = string.Join(" ", strings.ToArray());
+ var functionName = nameof(ProductSearch);
+ var parameters = new object[] { query };
+ if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
+ {
+ return await databaseClient.GetProducts(query);
+ }) is not IEnumerable<Product> products)
+ {
+ return "Загрузка...";
+ }
+ else if (!products.Any())
+ {
+ return ExcelError.ExcelErrorNA;
+ }
+ else
+ {
+ var product = products.First();
+ return $"{product.Id} {product.Name}";
+ }
+ }
- [ExcelFunction(Name = "РЕХАУАРТИКУЛ")]
- public static object SkuSearch(string query)
- {
- if (ProductSku.TryParse(query, out var skus))
- {
- return skus.First().Id;
- }
- return ExcelError.ExcelErrorNA;
- }
+ [ExcelFunction(Name = "РЕХАУАРТИКУЛ")]
+ public static object SkuSearch(string query)
+ {
+ if (ProductSku.TryParse(query, out var skus))
+ {
+ return skus.First().Id;
+ }
+ return ExcelError.ExcelErrorNA;
+ }
- [ExcelFunction(Name = "РЕХАУИМЯ")]
- public static object GetProductName(string query)
- {
- if (!ProductSku.TryParse(query, out var skus))
- {
- return ExcelError.ExcelErrorNA;
- }
- var article = skus.First().Id;
- var functionName = nameof(GetProductName);
- var parameters = new object[] { query };
- if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
- {
- return await databaseClient.GetProducts(article);
- }) is not IEnumerable<Product> requestResult)
- {
- return "Загрузка...";
- }
- else if (!requestResult.Any())
- {
- return ExcelError.ExcelErrorNA;
- }
- else
- {
- var firstProduct = requestResult.First();
- return firstProduct.Name;
- }
- }
+ [ExcelFunction(Name = "РЕХАУИМЯ")]
+ public static object GetProductName(string query)
+ {
+ if (!ProductSku.TryParse(query, out var skus))
+ {
+ return ExcelError.ExcelErrorNA;
+ }
+ var article = skus.First().Id;
+ var functionName = nameof(GetProductName);
+ var parameters = new object[] { query };
+ if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
+ {
+ return await databaseClient.GetProducts(article);
+ }) is not IEnumerable<Product> requestResult)
+ {
+ return "Загрузка...";
+ }
+ else if (!requestResult.Any())
+ {
+ return ExcelError.ExcelErrorNA;
+ }
+ else
+ {
+ var firstProduct = requestResult.First();
+ return firstProduct.Name;
+ }
+ }
- [ExcelFunction(Name = "РЕХАУЦЕНА")]
- public static object GetProductPrice(string query)
- {
- if (!ProductSku.TryParse(query, out var skus))
- {
- return ExcelError.ExcelErrorNA;
- }
- var article = skus.First().Id;
- var functionName = nameof(GetProductPrice);
- var parameters = new object[] { article };
+ [ExcelFunction(Name = "РЕХАУЦЕНА")]
+ public static object GetProductPrice(string query)
+ {
+ if (!ProductSku.TryParse(query, out var skus))
+ {
+ return ExcelError.ExcelErrorNA;
+ }
+ var article = skus.First().Id;
+ var functionName = nameof(GetProductPrice);
+ var parameters = new object[] { article };
- if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
- {
- return await databaseClient.GetProducts(article);
- }) is not IEnumerable<Product> requestResult)
- {
- return "Загрузка...";
- }
- else if (!requestResult.Any())
- {
- return ExcelError.ExcelErrorNA;
- }
- else
- {
- var firstProduct = requestResult.First();
- return Math.Round(firstProduct.Price * 1.2m, 2);
- }
- }
+ if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
+ {
+ return await databaseClient.GetProducts(article);
+ }) is not IEnumerable<Product> requestResult)
+ {
+ return "Загрузка...";
+ }
+ else if (!requestResult.Any())
+ {
+ return ExcelError.ExcelErrorNA;
+ }
+ else
+ {
+ var firstProduct = requestResult.First();
+ return Math.Round(firstProduct.Price * 1.2m, 2);
+ }
+ }
- [ExcelFunction(Name = "РЕХАУЦЕНАРУБ")]
- public static object GetProductPriceRub(string query, double dateField)
- {
- if (!ProductSku.TryParse(query, out var skus))
- {
- return ExcelError.ExcelErrorNA;
- }
- var article = skus.First().Id;
- DateTime date = dateField == 0 ? DateTime.Today : DateTime.FromOADate(dateField);
+ [ExcelFunction(Name = "РЕХАУЦЕНАРУБ")]
+ public static object GetProductPriceRub(string query, double dateField)
+ {
+ if (!ProductSku.TryParse(query, out var skus))
+ {
+ return ExcelError.ExcelErrorNA;
+ }
+ var article = skus.First().Id;
+ DateTime date = dateField == 0 ? DateTime.Today : DateTime.FromOADate(dateField);
- var functionName = nameof(GetProductPriceRub);
- var parameters = new object[] { date };
+ var functionName = nameof(GetProductPriceRub);
+ var parameters = new object[] { date };
- if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
- {
- var requestResult = await currencyClient.GetExchangeRate(date);
- return requestResult ?? -1m;
- }) is not decimal exchangeRate)
- {
- return "Загрузка...";
- }
+ if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
+ {
+ var requestResult = await currencyClient.GetExchangeRate(date);
+ return requestResult ?? -1m;
+ }) is not decimal exchangeRate)
+ {
+ return "Загрузка...";
+ }
- parameters = new object[] { query };
- if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
- {
- var products = await databaseClient.GetProducts(article);
- var product = products.FirstOrDefault();
- return product == null ? -1m :
- product.Price * (decimal)exchangeRate * 1.2m;
- }) is not decimal requestResult)
- {
- return "Загрузка...";
- }
- else if (requestResult < 0 || exchangeRate < 0)
- {
- return ExcelError.ExcelErrorNA;
- }
- else
- {
- return Math.Round(requestResult, 2);
- }
- }
+ parameters = new object[] { query };
+ if (ExcelAsyncUtil.RunTask(functionName, parameters, async () =>
+ {
+ var products = await databaseClient.GetProducts(article);
+ var product = products.FirstOrDefault();
+ return product == null ? -1m :
+ product.Price * (decimal)exchangeRate * 1.2m;
+ }) is not decimal requestResult)
+ {
+ return "Загрузка...";
+ }
+ else if (requestResult < 0 || exchangeRate < 0)
+ {
+ return ExcelError.ExcelErrorNA;
+ }
+ else
+ {
+ return Math.Round(requestResult, 2);
+ }
+ }
} \ No newline at end of file