Revert "Move Price List Validation to separate static class"

This reverts commit e14d714811.
This commit is contained in:
Serghei Cebotari 2023-10-17 21:22:42 +03:00
parent e462add7f3
commit 199540e530
12 changed files with 53 additions and 90 deletions

View File

@ -1,6 +1,5 @@
using System.Net; using System.Net;
using ExcelDna.IntelliSense; using ExcelDna.IntelliSense;
using Microsoft.Office.Interop.Excel;
#if !NET472 #if !NET472
using System.Runtime.Versioning; using System.Runtime.Versioning;
#endif #endif

View File

@ -119,8 +119,8 @@ public class RibbonController : ExcelRibbon
else else
{ {
WorksheetValidator.Validate(RhSolutionsAddIn.Excel.ActiveSheet); Worksheet worksheet = RhSolutionsAddIn.Excel.ActiveWorkbook.ActiveSheet;
_workbookIsValid = WorksheetValidator.IsValid(); _workbookIsValid = worksheet.IsValidSource();
} }
} }
} }

View File

@ -85,7 +85,7 @@ public class ExcelReader : IReader, IDisposable
List<(string, Dictionary<Product, double>)> result = new(); List<(string, Dictionary<Product, double>)> result = new();
foreach (Worksheet worksheet in worksheets) foreach (Worksheet worksheet in worksheets)
{ {
if (!WorksheetValidator.IsValid()) if (!worksheet.IsValidSource())
{ {
continue; continue;
} }
@ -93,11 +93,12 @@ public class ExcelReader : IReader, IDisposable
string wbName = Path.GetFileNameWithoutExtension( string wbName = Path.GetFileNameWithoutExtension(
worksheet.Parent.Name); worksheet.Parent.Name);
Range amountCell = WorksheetValidator.HeaderCells["Amount"], Range amountCell = worksheet.Cells.Find(headers["Amount"]);
skuCell = WorksheetValidator.HeaderCells["Sku"], Range headerRow = amountCell.EntireRow;
productLineCell = WorksheetValidator.HeaderCells["ProductLine"], Range skuCell = headerRow.Find(headers["Sku"]),
nameCell = WorksheetValidator.HeaderCells["Name"], productLineCell = headerRow.Find(headers["ProductLine"]),
measureCell = WorksheetValidator.HeaderCells["Measure"]; nameCell = headerRow.Find(headers["Name"]),
measureCell = headerRow.Find(headers["Measure"]);
var lastRowIndex = worksheet.Cells[worksheet.Rows.Count, skuCell.Column] var lastRowIndex = worksheet.Cells[worksheet.Rows.Count, skuCell.Column]
.End[XlDirection.xlUp].Row; .End[XlDirection.xlUp].Row;

View File

@ -31,7 +31,7 @@ namespace RhSolutions.Services
public void WriteProducts(IEnumerable<(string, Dictionary<Product, double>)> products) public void WriteProducts(IEnumerable<(string, Dictionary<Product, double>)> products)
{ {
if (!WorksheetValidator.IsValid()) if (!_worksheet.IsValidSource())
{ {
_application.ActiveWorkbook.Close(); _application.ActiveWorkbook.Close();
throw new ArgumentException( throw new ArgumentException(
@ -40,11 +40,11 @@ namespace RhSolutions.Services
ShowFilteredData(); ShowFilteredData();
_amountCell = WorksheetValidator.HeaderCells["Amount"]; _amountCell = _worksheet.Cells.Find(_headers["Amount"]);
_skuCell = WorksheetValidator.HeaderCells["Sku"]; _skuCell = _worksheet.Cells.Find(_headers["Sku"]);
_programLineCell = WorksheetValidator.HeaderCells["ProductLine"]; _programLineCell = _worksheet.Cells.Find(_headers["ProductLine"]);
_nameCell = WorksheetValidator.HeaderCells["Name"]; _nameCell = _worksheet.Cells.Find(_headers["Name"]);
_oldSkuCell = WorksheetValidator.HeaderCells["OldSku"]; _oldSkuCell = _worksheet.Cells.Find(_headers["OldSku"]);
_progressBar = new("Заполняю строки...", products _progressBar = new("Заполняю строки...", products
.Select(p => p.Item2) .Select(p => p.Item2)

View File

@ -1,50 +0,0 @@
#if !NET472
using System.Runtime.Versioning;
#endif
namespace RhSolutions.Services;
public static class WorksheetValidator
{
public static Dictionary<string, Range> HeaderCells { get; private set; }
public static void Validate(this Worksheet worksheet)
{
Range headerRow = null;
HeaderCells = new();
var headers = RhSolutionsAddIn.Configuration.GetPriceListHeaders();
foreach (var kvp in headers)
{
Range cell;
if (headerRow == null)
{
cell = worksheet.Cells.Find(kvp.Value);
if (cell == null)
{
continue;
}
headerRow = cell.EntireRow;
}
else
{
cell = headerRow.Cells.Find(kvp.Value);
}
if (HeaderCells.ContainsKey(kvp.Key))
{
HeaderCells[kvp.Key] = cell;
}
else
{
HeaderCells.Add(kvp.Key, cell);
}
}
}
public static bool IsValid()
{
return HeaderCells.Count >= RhSolutionsAddIn.Configuration.GetPriceListHeaders().Count - 1;
}
}

View File

@ -9,6 +9,39 @@ namespace RhSolutions.Tools;
#endif #endif
public static class WorksheetExtensions public static class WorksheetExtensions
{ {
private static readonly Dictionary<string, string> pricelistParameters =
RhSolutionsAddIn.Configuration.GetPriceListHeaders();
public static bool IsValidSource(this Worksheet worksheet)
{
Range headerRow;
string[] fields = pricelistParameters.Values
.Where(v => v != "Прежний материал")
.ToArray();
var value = worksheet.Cells.Find(fields[0]);
if (value == null)
{
return false;
}
else
{
headerRow = value.EntireRow;
}
for (int i = 1; i < fields.Length; i++)
{
if (headerRow.Find(fields[i]) == null)
{
return false;
}
}
return true;
}
public static void AddValue(this Range range, double value) public static void AddValue(this Range range, double value)
{ {
if (range.Value2 == null) if (range.Value2 == null)

View File

@ -23,13 +23,11 @@ public class CanDoGuess : IDisposable
public void CanWriteMultiplyRows() public void CanWriteMultiplyRows()
{ {
Worksheet sourceSheet = Util.Workbook.Worksheets[1]; Worksheet sourceSheet = Util.Workbook.Worksheets[1];
sourceSheet.Validate();
RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationGuess.xlsx")); RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationGuess.xlsx"));
var products = _guessReader.ReadProducts(new[] { sourceSheet }); var products = _guessReader.ReadProducts(new[] { sourceSheet });
var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration); var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration);
_writer.WriteProducts(products); _writer.WriteProducts(products);
Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet;
targetSheet.Validate();
var targetProducts = _reader.ReadProducts(new[] { targetSheet }); var targetProducts = _reader.ReadProducts(new[] { targetSheet });
Assert.Equal("TestSpecificationGuess", products.First().Item1); Assert.Equal("TestSpecificationGuess", products.First().Item1);
@ -42,13 +40,11 @@ public class CanDoGuess : IDisposable
public void CanWriteOneRow() public void CanWriteOneRow()
{ {
Worksheet sourceSheet = Util.Workbook.Worksheets[1]; Worksheet sourceSheet = Util.Workbook.Worksheets[1];
sourceSheet.Validate();
RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationGuessOneRow.xlsx")); RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationGuessOneRow.xlsx"));
var products = _guessReader.ReadProducts(new[] { sourceSheet }); var products = _guessReader.ReadProducts(new[] { sourceSheet });
var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration); var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration);
_writer.WriteProducts(products); _writer.WriteProducts(products);
Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet;
targetSheet.Validate();
var targetProducts = _reader.ReadProducts(new[] { targetSheet }); var targetProducts = _reader.ReadProducts(new[] { targetSheet });
Assert.Equal("TestSpecificationGuessOneRow", products.First().Item1); Assert.Equal("TestSpecificationGuessOneRow", products.First().Item1);

View File

@ -24,7 +24,6 @@ public class CanFillSleeves : IDisposable
[ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecificationSleeves.xlsx")] [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\TestSpecificationSleeves.xlsx")]
public void CanCalculateSleeves() public void CanCalculateSleeves()
{ {
_worksheet.Validate();
var products = _reader.ReadProducts(new[] { _worksheet }); var products = _reader.ReadProducts(new[] { _worksheet });
var sleeves = _calculator.CalculateSleeves(products.First().Item2); var sleeves = _calculator.CalculateSleeves(products.First().Item2);
_writer.WriteProducts(sleeves); _writer.WriteProducts(sleeves);

View File

@ -22,7 +22,6 @@ public class CanReadProducts : IDisposable
public void CanReadRange() public void CanReadRange()
{ {
Worksheet worksheet = _testWorkbook.Sheets[1]; Worksheet worksheet = _testWorkbook.Sheets[1];
worksheet.Validate();
worksheet.Range["A1"].Value = "11600011001"; worksheet.Range["A1"].Value = "11600011001";
worksheet.Range["A2"].Value = "11600011001"; worksheet.Range["A2"].Value = "11600011001";
worksheet.Range["A3"].Value = "160002-001"; worksheet.Range["A3"].Value = "160002-001";
@ -50,7 +49,6 @@ public class CanReadProducts : IDisposable
public void CanReadWorkbook() public void CanReadWorkbook()
{ {
Worksheet worksheet = Util.Workbook.Worksheets[1]; Worksheet worksheet = Util.Workbook.Worksheets[1];
worksheet.Validate();
var result = _reader.ReadProducts(new[] { worksheet }); var result = _reader.ReadProducts(new[] { worksheet });
Assert.NotNull(result); Assert.NotNull(result);
Assert.NotEmpty(result); Assert.NotEmpty(result);

View File

@ -21,13 +21,11 @@ public class CanWriteProducts : IDisposable
public void CanWriteSingle() public void CanWriteSingle()
{ {
Worksheet sourceSheet = Util.Workbook.Worksheets[1]; Worksheet sourceSheet = Util.Workbook.Worksheets[1];
sourceSheet.Validate();
RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecification.xlsx")); RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecification.xlsx"));
var products = _reader.ReadProducts(new[] { sourceSheet }); var products = _reader.ReadProducts(new[] { sourceSheet });
var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration); var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration);
_writer.WriteProducts(products); _writer.WriteProducts(products);
Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet;
targetSheet.Validate();
var targetProducts = _reader.ReadProducts(new[] { targetSheet }); var targetProducts = _reader.ReadProducts(new[] { targetSheet });
Assert.Equal("TestSpecification", products.First().Item1); Assert.Equal("TestSpecification", products.First().Item1);
@ -40,13 +38,11 @@ public class CanWriteProducts : IDisposable
public void CanWriteMultipleProductLines() public void CanWriteMultipleProductLines()
{ {
Worksheet sourceSheet = Util.Workbook.Worksheets[1]; Worksheet sourceSheet = Util.Workbook.Worksheets[1];
sourceSheet.Validate();
RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationMultipleProductLines.xlsx")); RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationMultipleProductLines.xlsx"));
var products = _reader.ReadProducts(new[] { sourceSheet }); var products = _reader.ReadProducts(new[] { sourceSheet });
var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration); var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration);
_writer.WriteProducts(products); _writer.WriteProducts(products);
Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet;
targetSheet.Validate();
var targetProducts = _reader.ReadProducts(new[] { targetSheet }); var targetProducts = _reader.ReadProducts(new[] { targetSheet });
Assert.Equal("TestSpecificationMultipleProductLines", products.First().Item1); Assert.Equal("TestSpecificationMultipleProductLines", products.First().Item1);
@ -59,13 +55,11 @@ public class CanWriteProducts : IDisposable
public void CanWriteNotFound() public void CanWriteNotFound()
{ {
Worksheet sourceSheet = Util.Workbook.Worksheets[1]; Worksheet sourceSheet = Util.Workbook.Worksheets[1];
sourceSheet.Validate();
RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationNotFound.xlsx")); RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationNotFound.xlsx"));
var products = _reader.ReadProducts(new[] { sourceSheet }); var products = _reader.ReadProducts(new[] { sourceSheet });
var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration); var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration);
_writer.WriteProducts(products); _writer.WriteProducts(products);
Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet;
targetSheet.Validate();
Assert.Equal("???", targetSheet.Range["B4"].Value2); Assert.Equal("???", targetSheet.Range["B4"].Value2);
Assert.Contains("Молот Тора", targetSheet.Range["C4"].Value2); Assert.Contains("Молот Тора", targetSheet.Range["C4"].Value2);
@ -76,13 +70,11 @@ public class CanWriteProducts : IDisposable
public void CanWriteReplaced() public void CanWriteReplaced()
{ {
Worksheet sourceSheet = Util.Workbook.Worksheets[1]; Worksheet sourceSheet = Util.Workbook.Worksheets[1];
sourceSheet.Validate();
RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationReplaced.xlsx")); RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationReplaced.xlsx"));
var products = _reader.ReadProducts(new[] { sourceSheet }); var products = _reader.ReadProducts(new[] { sourceSheet });
var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration); var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration);
_writer.WriteProducts(products); _writer.WriteProducts(products);
Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet;
targetSheet.Validate();
var targetProducts = _reader.ReadProducts(new[] { targetSheet }); var targetProducts = _reader.ReadProducts(new[] { targetSheet });
Assert.Equal("TestSpecificationReplaced", products.First().Item1); Assert.Equal("TestSpecificationReplaced", products.First().Item1);
@ -100,13 +92,11 @@ public class CanWriteProducts : IDisposable
public void CanWriteNewVariant() public void CanWriteNewVariant()
{ {
Worksheet sourceSheet = Util.Workbook.Worksheets[1]; Worksheet sourceSheet = Util.Workbook.Worksheets[1];
sourceSheet.Validate();
RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationNewVariant.xlsx")); RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\TargetSpecificationNewVariant.xlsx"));
var products = _reader.ReadProducts(new[] { sourceSheet }); var products = _reader.ReadProducts(new[] { sourceSheet });
var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration); var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration);
_writer.WriteProducts(products); _writer.WriteProducts(products);
Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet;
targetSheet.Validate();
var targetProducts = _reader.ReadProducts(new[] { targetSheet }); var targetProducts = _reader.ReadProducts(new[] { targetSheet });
Assert.Equal("TestSpecificationNewVariant", products.First().Item1); Assert.Equal("TestSpecificationNewVariant", products.First().Item1);

View File

@ -21,13 +21,11 @@ public class RealPricelistTest : IDisposable
public void CanWrite() public void CanWrite()
{ {
Worksheet sourceSheet = Util.Workbook.Worksheets[1]; Worksheet sourceSheet = Util.Workbook.Worksheets[1];
sourceSheet.Validate();
RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\RealTargetSpecification.xlsx")); RhSolutionsAddIn.Configuration.SetPriceListPath(Path.GetFullPath(@"..\..\..\TestWorkbooks\RealTargetSpecification.xlsx"));
var products = _reader.ReadProducts(new[] { sourceSheet }); var products = _reader.ReadProducts(new[] { sourceSheet });
var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration); var _writer = new NewPriceWriter(Util.Application, RhSolutionsAddIn.Configuration);
_writer.WriteProducts(products); _writer.WriteProducts(products);
Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet; Worksheet targetSheet = Util.Application.ActiveWindow.ActiveSheet;
targetSheet.Validate();
targetSheet.Range["A1"].Formula = "=SUM(H:H)"; targetSheet.Range["A1"].Formula = "=SUM(H:H)";
Assert.Equal("RealTestSpecification", products.First().Item1); Assert.Equal("RealTestSpecification", products.First().Item1);

View File

@ -1,4 +1,5 @@
using RhSolutions.AddIn; using RhSolutions.AddIn;
using RhSolutions.Tools;
namespace RhSolutions.Tests; namespace RhSolutions.Tests;
@ -17,17 +18,15 @@ public class WorkbookValidationTests : IDisposable
[ExcelFact(Workbook = @"..\..\..\TestWorkbooks\EmptyTestTable.xlsx")] [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\EmptyTestTable.xlsx")]
public void WorksheetIsCorrect() public void WorksheetIsCorrect()
{ {
Worksheet ws = Util.Workbook.Sheets[1]; Worksheet worksheet = Util.Workbook.Sheets[1];
ws.Validate(); Assert.True(worksheet.IsValidSource());
Assert.True(WorksheetValidator.IsValid());
} }
[ExcelFact(Workbook = @"..\..\..\TestWorkbooks\EmptyWorkbook.xlsx")] [ExcelFact(Workbook = @"..\..\..\TestWorkbooks\EmptyWorkbook.xlsx")]
public void EmptyWorkbookIsNotCorrect() public void EmptyWorkbookIsNotCorrect()
{ {
Worksheet ws = Util.Workbook.Sheets[1]; Worksheet worksheet = Util.Workbook.Sheets[1];
ws.Validate(); Assert.False(worksheet.IsValidSource());
Assert.False(WorksheetValidator.IsValid());
} }
public void Dispose() public void Dispose()