ExcelWriterBase Refactoring
This commit is contained in:
parent
7b8cab3e9e
commit
f89a3eb765
@ -9,12 +9,14 @@ namespace RhSolutions.Services
|
|||||||
protected ResultBar _resultBar;
|
protected ResultBar _resultBar;
|
||||||
protected ProgressBar _progressBar;
|
protected ProgressBar _progressBar;
|
||||||
|
|
||||||
|
protected Worksheet _worksheet;
|
||||||
protected Range _amountCell;
|
protected Range _amountCell;
|
||||||
protected Range _nameCell;
|
protected Range _nameCell;
|
||||||
protected Range _oldSkuCell;
|
protected Range _oldSkuCell;
|
||||||
protected Range _programLineCell;
|
protected Range _programLineCell;
|
||||||
protected Range _skuCell;
|
protected Range _skuCell;
|
||||||
protected Worksheet _worksheet;
|
|
||||||
|
protected bool _appendValues = true;
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
@ -50,7 +52,7 @@ namespace RhSolutions.Services
|
|||||||
{
|
{
|
||||||
foreach (var kvp in products.First().Item2)
|
foreach (var kvp in products.First().Item2)
|
||||||
{
|
{
|
||||||
FillPositionAmountToColumns(kvp, _amountCell.Column);
|
FillAmounts(kvp, _amountCell.Column);
|
||||||
_progressBar.Update();
|
_progressBar.Update();
|
||||||
}
|
}
|
||||||
FilterByAmount();
|
FilterByAmount();
|
||||||
@ -71,7 +73,7 @@ namespace RhSolutions.Services
|
|||||||
|
|
||||||
foreach (var kvp in product.Item2)
|
foreach (var kvp in product.Item2)
|
||||||
{
|
{
|
||||||
FillPositionAmountToColumns(kvp, _amountCell.Column - 1, _amountCell.Column);
|
FillAmounts(kvp, _amountCell.Column - 1, _amountCell.Column);
|
||||||
_progressBar.Update();
|
_progressBar.Update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -81,14 +83,14 @@ namespace RhSolutions.Services
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FillMissing(KeyValuePair<Product, double> positionAmount, params int[] columns)
|
private void WriteOutMissing(KeyValuePair<Product, double> productAmount, params int[] columns)
|
||||||
{
|
{
|
||||||
Range worksheetCells = _worksheet.Cells;
|
Range worksheetCells = _worksheet.Cells;
|
||||||
Range worksheetRows = _worksheet.Rows;
|
Range worksheetRows = _worksheet.Rows;
|
||||||
int skuColumn = _skuCell.Column;
|
int skuColumn = _skuCell.Column;
|
||||||
int groupColumn = _programLineCell.Column;
|
int groupColumn = _programLineCell.Column;
|
||||||
int nameColumn = _nameCell.Column;
|
int nameColumn = _nameCell.Column;
|
||||||
Product product = positionAmount.Key;
|
Product product = productAmount.Key;
|
||||||
|
|
||||||
int row = worksheetCells[worksheetRows.Count, skuColumn]
|
int row = worksheetCells[worksheetRows.Count, skuColumn]
|
||||||
.End[XlDirection.xlUp]
|
.End[XlDirection.xlUp]
|
||||||
@ -115,74 +117,72 @@ namespace RhSolutions.Services
|
|||||||
foreach (int column in columns)
|
foreach (int column in columns)
|
||||||
{
|
{
|
||||||
Range cell = worksheetCells[row, column];
|
Range cell = worksheetCells[row, column];
|
||||||
cell.AddValue(positionAmount.Value);
|
cell.AddValue(productAmount.Value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FillPositionAmountToColumns(KeyValuePair<Product, double> positionAmount, params int[] columns)
|
private void FillCells(double amount, int row, int[] columns)
|
||||||
{
|
{
|
||||||
Range worksheetCells = _worksheet.Cells;
|
foreach (int column in columns)
|
||||||
Range skuColumn = _skuCell.EntireColumn;
|
{
|
||||||
|
Range cell = _worksheet.Cells[row, column];
|
||||||
|
if (_appendValues)
|
||||||
|
{
|
||||||
|
cell.AddValue(amount);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cell.Value2 = amount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int? row = GetPositionRow(skuColumn, positionAmount.Key.ProductSku, positionAmount.Key.ProductLines.FirstOrDefault());
|
private void FillAmounts(KeyValuePair<Product, double> positionAmount, params int[] columns)
|
||||||
|
{
|
||||||
|
Range range = _skuCell.EntireColumn;
|
||||||
|
ProductSku sku = positionAmount.Key.ProductSku;
|
||||||
|
string productLine = positionAmount.Key.ProductLines.FirstOrDefault();
|
||||||
|
|
||||||
|
int? row = GetPositionRow(range, sku, productLine);
|
||||||
|
|
||||||
if (row != null)
|
if (row != null)
|
||||||
{
|
{
|
||||||
foreach (int column in columns)
|
FillCells(positionAmount.Value, row.Value, columns);
|
||||||
{
|
|
||||||
Range cell = worksheetCells[row, column];
|
|
||||||
cell.AddValue(positionAmount.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
_resultBar.IncrementSuccess();
|
_resultBar.IncrementSuccess();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_oldSkuCell != null)
|
else
|
||||||
{
|
{
|
||||||
row = GetPositionRow(_oldSkuCell.EntireColumn, positionAmount.Key.ProductSku, positionAmount.Key.ProductLines.FirstOrDefault());
|
if (_oldSkuCell != null)
|
||||||
|
{
|
||||||
|
range = _oldSkuCell.EntireColumn;
|
||||||
|
row = GetPositionRow(range, sku, productLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (row == null)
|
||||||
|
{
|
||||||
|
range = _skuCell.EntireColumn;
|
||||||
|
row = GetPositionRow(range, sku, productLine, true);
|
||||||
|
}
|
||||||
|
|
||||||
if (row != null)
|
if (row != null)
|
||||||
{
|
{
|
||||||
Range nameCell = worksheetCells[row, _nameCell.Column];
|
Range nameCell = _worksheet.Cells[row, _nameCell.Column];
|
||||||
if (!Regex.IsMatch(nameCell.Value2, @"арт. \d{11}"))
|
if (!Regex.IsMatch(nameCell.Value2, @"арт. \d{11}"))
|
||||||
{
|
{
|
||||||
nameCell.AddValue($"(замена арт. {positionAmount.Key.ProductSku})");
|
nameCell.AddValue($"(замена арт. {sku})");
|
||||||
}
|
|
||||||
|
|
||||||
foreach (int column in columns)
|
|
||||||
{
|
|
||||||
Range cell = worksheetCells[row, column];
|
|
||||||
cell.AddValue(positionAmount.Value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FillCells(positionAmount.Value, row.Value, columns);
|
||||||
_resultBar.IncrementReplaced();
|
_resultBar.IncrementReplaced();
|
||||||
return;
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WriteOutMissing(positionAmount, columns);
|
||||||
|
_resultBar.IncrementNotFound();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
row = GetPositionRow(skuColumn, positionAmount.Key.ProductSku, positionAmount.Key.ProductLines.FirstOrDefault(), true);
|
|
||||||
|
|
||||||
if (row != null)
|
|
||||||
{
|
|
||||||
Range nameCell = worksheetCells[row, _nameCell.Column];
|
|
||||||
if (!Regex.IsMatch(nameCell.Value2, @"арт. \d{11}"))
|
|
||||||
{
|
|
||||||
nameCell.AddValue($"(замена арт. {positionAmount.Key.ProductSku})");
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (int column in columns)
|
|
||||||
{
|
|
||||||
Range cell = worksheetCells[row, column];
|
|
||||||
cell.AddValue(positionAmount.Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
_resultBar.IncrementReplaced();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FillMissing(positionAmount, columns);
|
|
||||||
_resultBar.IncrementNotFound();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void FilterByAmount()
|
private void FilterByAmount()
|
||||||
|
@ -18,4 +18,4 @@ public class WriterFactory
|
|||||||
_ => throw new ArgumentException($"Незвестный интерфейс {nameof(IWriter)}: {writerName}")
|
_ => throw new ArgumentException($"Незвестный интерфейс {nameof(IWriter)}: {writerName}")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user