aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Chebotar <s.chebotar@gmail.com>2023-05-23 09:26:08 +0300
committerSergey Chebotar <s.chebotar@gmail.com>2023-05-23 09:26:08 +0300
commit7fd139a234dcc2546e065dafff3c97d0444f16e0 (patch)
treece810eebceebb2fea39d7bde0df346d559eb7ae2
parent9d1c21397925ca2f5cd47cec1c8bf98e0aaf5f6a (diff)
Edit amount column looking up
-rw-r--r--RhSolutions.AddIn/Services/GuessReader.cs60
1 files changed, 40 insertions, 20 deletions
diff --git a/RhSolutions.AddIn/Services/GuessReader.cs b/RhSolutions.AddIn/Services/GuessReader.cs
index 52e53b6..27149c0 100644
--- a/RhSolutions.AddIn/Services/GuessReader.cs
+++ b/RhSolutions.AddIn/Services/GuessReader.cs
@@ -16,7 +16,7 @@ public class GuessReader : IReader
{
_progressBar = new("Ищу колонки со значениями", range.Columns.Count);
int? productColumnIndex = null;
- List<(int, double)> amountColumnIndeces = new();
+ List<int> amountColumnIndeces = new();
for (int column = 1; column < range.Columns.Count + 1; column++)
{
@@ -25,28 +25,47 @@ public class GuessReader : IReader
{
productColumnIndex = column;
}
- else if (IsAmountColumn(range.Columns[column], out double average))
+ else if (IsAmountColumn(range.Columns[column]))
{
- amountColumnIndeces.Add((column, average));
+ amountColumnIndeces.Add(column);
}
}
- if (productColumnIndex == null || amountColumnIndeces.Count == 0)
+ if (productColumnIndex == null)
{
- throw new ArgumentException("Колонка с артикулом или количеством не определена");
+ throw new ArgumentException("Колонка с артикулом не определена");
+ }
+
+ if (amountColumnIndeces.Count == 0)
+ {
+ throw new ArgumentException("Колонка с количеством не определена");
}
else if (amountColumnIndeces.Count == 1)
{
return GetDictionaryFromColumns(range.Columns[productColumnIndex],
- range.Columns[amountColumnIndeces.First().Item1]);
+ range.Columns[amountColumnIndeces.First()]);
}
else
{
int amountColumnIndex = amountColumnIndeces
- .Where(i => i.Item2 < 30000 && i.Item2 > 0)
- .OrderByDescending(i => i.Item2).First().Item1;
+ .Where(i => i > productColumnIndex)
+ .FirstOrDefault();
+
+ if (amountColumnIndex == 0)
+ {
+ amountColumnIndex = amountColumnIndeces
+ .OrderBy(i => i)
+ .Where(i => i < productColumnIndex)
+ .LastOrDefault();
+ }
+
+ if (amountColumnIndex == 0)
+ {
+ throw new ArgumentException("Колонка с количеством не определена");
+ }
+
return GetDictionaryFromColumns(range.Columns[productColumnIndex],
range.Columns[amountColumnIndex]);
}
@@ -84,9 +103,9 @@ public class GuessReader : IReader
return successCounter > 0;
}
- private bool IsAmountColumn(Range column, out double average)
+ private bool IsAmountColumn(Range column)
{
- average = 0.0;
+ int successCounter = 0;
object[,] cells = column.Value2;
if (cells == null)
@@ -94,8 +113,6 @@ public class GuessReader : IReader
return false;
}
- int successCounter = 0;
-
for (int row = 1; row < column.Rows.Count + 1; row++)
{
object currentCell = cells[row, 1];
@@ -110,23 +127,26 @@ public class GuessReader : IReader
{
value = (double)currentCell;
}
+
else if (currentCell.GetType() == typeof(string))
{
double.TryParse((string)currentCell, out value);
}
- if (value != 0.0)
+ if (value == 0)
{
- successCounter++;
- average += value;
+ continue;
}
- }
- if (successCounter > 0)
- {
- average /= successCounter;
+
+ if (value > 30000)
+ {
+ return false;
+ }
+
+ successCounter++;
}
- return successCounter > 0;
+ return successCounter > 1;
}
private Dictionary<Product, double> GetDictionaryFromColumns(Range productColumn, Range amountColumn)