Add not found positions to target file
This commit is contained in:
parent
5b4888be12
commit
60006126b9
@ -21,7 +21,7 @@ namespace RehauSku.PriceListTools
|
|||||||
newColumnHeader.Value2 = $"{source.Name}";
|
newColumnHeader.Value2 = $"{source.Name}";
|
||||||
newColumnHeader.WrapText = true;
|
newColumnHeader.WrapText = true;
|
||||||
|
|
||||||
FillColumn(source.PositionAmount, TargetFile.amountCell.Column - 1, TargetFile.amountCell.Column);
|
FillColumnsWithDictionary(source.PositionAmount, TargetFile.amountCell.Column - 1, TargetFile.amountCell.Column);
|
||||||
}
|
}
|
||||||
|
|
||||||
FilterByAmount();
|
FilterByAmount();
|
||||||
|
@ -27,7 +27,7 @@ namespace RehauSku.PriceListTools
|
|||||||
public void FillTarget()
|
public void FillTarget()
|
||||||
{
|
{
|
||||||
ExcelApp.ScreenUpdating = false;
|
ExcelApp.ScreenUpdating = false;
|
||||||
FillColumn(Current.PositionAmount, TargetFile.amountCell.Column);
|
FillColumnsWithDictionary(Current.PositionAmount, TargetFile.amountCell.Column);
|
||||||
FilterByAmount();
|
FilterByAmount();
|
||||||
ExcelApp.ScreenUpdating = true;
|
ExcelApp.ScreenUpdating = true;
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ namespace RehauSku.PriceListTools
|
|||||||
|
|
||||||
foreach (Source source in SourceFiles)
|
foreach (Source source in SourceFiles)
|
||||||
{
|
{
|
||||||
FillColumn(source.PositionAmount, TargetFile.amountCell.Column);
|
FillColumnsWithDictionary(source.PositionAmount, TargetFile.amountCell.Column);
|
||||||
}
|
}
|
||||||
|
|
||||||
FilterByAmount();
|
FilterByAmount();
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
using Microsoft.Office.Interop.Excel;
|
using Microsoft.Office.Interop.Excel;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Application = Microsoft.Office.Interop.Excel.Application;
|
||||||
|
|
||||||
namespace RehauSku.PriceListTools
|
namespace RehauSku.PriceListTools
|
||||||
{
|
{
|
||||||
@ -22,48 +24,70 @@ namespace RehauSku.PriceListTools
|
|||||||
|
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
System.Windows.Forms.MessageBox.Show
|
MessageBox.Show
|
||||||
(ex.Message,
|
(ex.Message,
|
||||||
"Ошибка открытия шаблонного прайс-листа",
|
"Ошибка открытия шаблонного прайс-листа",
|
||||||
System.Windows.Forms.MessageBoxButtons.OK,
|
MessageBoxButtons.OK,
|
||||||
System.Windows.Forms.MessageBoxIcon.Information);
|
MessageBoxIcon.Information);
|
||||||
wb.Close();
|
wb.Close();
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected private void FillColumn(IEnumerable<KeyValuePair<Position, double>> dictionary, params int[] columns)
|
protected private void FillColumnsWithDictionary(IEnumerable<KeyValuePair<Position, double>> dictionary, params int[] columns)
|
||||||
{
|
{
|
||||||
Missing = new List<KeyValuePair<Position, double>>();
|
Missing = new List<KeyValuePair<Position, double>>();
|
||||||
|
|
||||||
foreach (var kvp in dictionary)
|
foreach (var positionAmount in dictionary)
|
||||||
{
|
{
|
||||||
FillPosition(kvp, columns);
|
FillPositionAmountToColumns(positionAmount, columns);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Missing.Count > 0)
|
if (Missing.Count > 0)
|
||||||
{
|
{
|
||||||
System.Windows.Forms.MessageBox.Show
|
DialogResult result =
|
||||||
|
MessageBox.Show
|
||||||
($"{Missing.Count} артикулов отсутствует в таблице заказов {RegistryUtil.PriceListPath} Попробовать найти новый вариант?",
|
($"{Missing.Count} артикулов отсутствует в таблице заказов {RegistryUtil.PriceListPath} Попробовать найти новый вариант?",
|
||||||
"Отсутствует позиция в конечной таблице заказов",
|
"Отсутствует позиция в конечной таблице заказов",
|
||||||
System.Windows.Forms.MessageBoxButtons.YesNo,
|
MessageBoxButtons.YesNo,
|
||||||
System.Windows.Forms.MessageBoxIcon.Information);
|
MessageBoxIcon.Information);
|
||||||
|
|
||||||
|
if (result == DialogResult.Yes)
|
||||||
|
{
|
||||||
|
var lookUp = new List<KeyValuePair<Position, double>>(Missing);
|
||||||
|
|
||||||
|
foreach (var missingPosition in lookUp)
|
||||||
|
{
|
||||||
|
TryFillVariantlessSkuToColumns(missingPosition, columns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Missing.Count > 0)
|
||||||
|
{
|
||||||
|
FillMissing();
|
||||||
|
MessageBox.Show
|
||||||
|
($"{Missing.Count} артикулов отсутствует в таблице заказов {RegistryUtil.PriceListPath}\n" +
|
||||||
|
$"Под основной таблицей составлен список не найденных артикулов",
|
||||||
|
"Отсутствует позиция в конечной таблице заказов",
|
||||||
|
MessageBoxButtons.OK,
|
||||||
|
MessageBoxIcon.Information);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected private void FillPosition(KeyValuePair<Position, double> kvp, int[] columns)
|
protected private void FillPositionAmountToColumns(KeyValuePair<Position, double> positionAmount, int[] columns)
|
||||||
{
|
{
|
||||||
Range foundCell = TargetFile.skuCell.EntireColumn.Find(kvp.Key.Sku);
|
Range foundCell = TargetFile.skuCell.EntireColumn.Find(positionAmount.Key.Sku);
|
||||||
|
|
||||||
if (foundCell == null)
|
if (foundCell == null)
|
||||||
{
|
{
|
||||||
Missing.Add(kvp);
|
Missing.Add(positionAmount);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
string foundCellGroup = TargetFile.Sheet.Cells[foundCell.Row, TargetFile.groupCell.Column].Value2.ToString();
|
string foundCellGroup = TargetFile.Sheet.Cells[foundCell.Row, TargetFile.groupCell.Column].Value2.ToString();
|
||||||
|
|
||||||
while (foundCell != null && foundCellGroup != kvp.Key.Group)
|
while (foundCell != null && foundCellGroup != positionAmount.Key.Group)
|
||||||
{
|
{
|
||||||
foundCell = TargetFile.skuCell.EntireColumn.FindNext(foundCell);
|
foundCell = TargetFile.skuCell.EntireColumn.FindNext(foundCell);
|
||||||
foundCellGroup = TargetFile.Sheet.Cells[foundCell.Row, TargetFile.groupCell.Column].Value2.ToString();
|
foundCellGroup = TargetFile.Sheet.Cells[foundCell.Row, TargetFile.groupCell.Column].Value2.ToString();
|
||||||
@ -71,7 +95,7 @@ namespace RehauSku.PriceListTools
|
|||||||
|
|
||||||
if (foundCell == null)
|
if (foundCell == null)
|
||||||
{
|
{
|
||||||
Missing.Add(kvp);
|
Missing.Add(positionAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
@ -79,19 +103,87 @@ namespace RehauSku.PriceListTools
|
|||||||
foreach (var column in columns)
|
foreach (var column in columns)
|
||||||
{
|
{
|
||||||
Range sumCell = TargetFile.Sheet.Cells[foundCell.Row, column];
|
Range sumCell = TargetFile.Sheet.Cells[foundCell.Row, column];
|
||||||
|
|
||||||
if (sumCell.Value2 == null)
|
if (sumCell.Value2 == null)
|
||||||
{
|
{
|
||||||
sumCell.Value2 = kvp.Value;
|
sumCell.Value2 = positionAmount.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sumCell.Value2 += kvp.Value;
|
sumCell.Value2 += positionAmount.Value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected private void TryFillVariantlessSkuToColumns(KeyValuePair<Position, double> positionAmount, int[] columns)
|
||||||
|
{
|
||||||
|
string sku = positionAmount.Key.Sku.Substring(1, 6);
|
||||||
|
|
||||||
|
Range foundCell = TargetFile.skuCell.EntireColumn.Find(sku);
|
||||||
|
|
||||||
|
if (foundCell == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
string foundCellGroup = TargetFile.Sheet.Cells[foundCell.Row, TargetFile.groupCell.Column].Value2.ToString();
|
||||||
|
|
||||||
|
while (foundCell != null && foundCellGroup != positionAmount.Key.Group)
|
||||||
|
{
|
||||||
|
foundCell = TargetFile.skuCell.EntireColumn.FindNext(foundCell);
|
||||||
|
foundCellGroup = TargetFile.Sheet.Cells[foundCell.Row, TargetFile.groupCell.Column].Value2.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (foundCell == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var column in columns)
|
||||||
|
{
|
||||||
|
Range sumCell = TargetFile.Sheet.Cells[foundCell.Row, column];
|
||||||
|
|
||||||
|
if (sumCell.Value2 == null)
|
||||||
|
{
|
||||||
|
sumCell.Value2 = positionAmount.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sumCell.Value2 += positionAmount.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Missing.Remove(positionAmount);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected private void FillMissing()
|
||||||
|
{
|
||||||
|
int startRow =
|
||||||
|
TargetFile.Sheet.AutoFilter.Range.Row +
|
||||||
|
TargetFile.Sheet.AutoFilter.Range.Rows.Count + 5;
|
||||||
|
|
||||||
|
for (int i = 0; i < Missing.Count; i++)
|
||||||
|
{
|
||||||
|
Range group = TargetFile.Sheet.Cells[startRow + i, TargetFile.groupCell.Column];
|
||||||
|
Range sku = TargetFile.Sheet.Cells[startRow + i, TargetFile.skuCell.Column];
|
||||||
|
Range name = TargetFile.Sheet.Cells[startRow + i, TargetFile.nameCell.Column];
|
||||||
|
Range amount = TargetFile.Sheet.Cells[startRow + i, TargetFile.amountCell.Column];
|
||||||
|
|
||||||
|
group.Value2 = Missing[i].Key.Group;
|
||||||
|
sku.Value2 = Missing[i].Key.Sku;
|
||||||
|
name.Value2 = Missing[i].Key.Name;
|
||||||
|
amount.Value2 = Missing[i].Value;
|
||||||
|
|
||||||
|
group.ClearFormats();
|
||||||
|
sku.ClearFormats();
|
||||||
|
name.ClearFormats();
|
||||||
|
amount.ClearFormats();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected private void FilterByAmount()
|
protected private void FilterByAmount()
|
||||||
{
|
{
|
||||||
AutoFilter filter = TargetFile.Sheet.AutoFilter;
|
AutoFilter filter = TargetFile.Sheet.AutoFilter;
|
||||||
|
@ -13,8 +13,9 @@ namespace RehauSku.PriceListTools
|
|||||||
amountCell = Sheet.Cells.Find(amountHeader);
|
amountCell = Sheet.Cells.Find(amountHeader);
|
||||||
skuCell = Sheet.Cells.Find(skuHeader);
|
skuCell = Sheet.Cells.Find(skuHeader);
|
||||||
groupCell = Sheet.Cells.Find(groupHeader);
|
groupCell = Sheet.Cells.Find(groupHeader);
|
||||||
|
nameCell = Sheet.Cells.Find(nameHeader);
|
||||||
|
|
||||||
if (amountCell == null || skuCell == null || groupCell == null)
|
if (amountCell == null || skuCell == null || groupCell == null || nameCell == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentException($"Шаблон { Name } не является прайс-листом");
|
throw new ArgumentException($"Шаблон { Name } не является прайс-листом");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user