Files
declaratrions-automatization/DeclarationAutomatization/Services/Sheet3ExpandService.cs
T
Dianaka123 059895d1c3 feat: WPF-приложение для автоматизации оформления деклараций
- Чтение СПРАВКИ из Excel (ClosedXML), поддержка нескольких файлов
- Группировка по ТН ВЭД: схлопывание строк с суммированием кол-ва/веса/суммы
- Автоназначение кодов деклараций по справочнику ТН ВЭД (87 пар)
- Цветовая маркировка: зелёный/жёлтый/красный по уровню уверенности
- Самообучение: ручной выбор кода сохраняется в tnved_codes.json
- Формирование Лист3 с разворачиванием строк по рег. номерам (ключевая функция)
- Экспорт Лист2 + Лист3 в Excel
2026-04-05 23:19:58 +03:00

59 lines
1.9 KiB
C#

using System.Collections.Generic;
using System.Linq;
using DeclarationAutomatization.Models;
namespace DeclarationAutomatization.Services;
public class Sheet3ExpandService
{
// Строит строки Листа3, разворачивая позиции по регистрационным номерам.
// Группировка по ТН ВЭД: все рег. номера с таким же ТН ВЭД из СПРАВКИ.
public List<Sheet3Row> Expand(
IEnumerable<DeclarationItem> declarationItems,
IEnumerable<SpravkaItem> allSpravkaItems)
{
// Индекс: ТнВэд → уникальные (РегНомер, Дата)
var regByTnVed = allSpravkaItems
.Where(s => !string.IsNullOrWhiteSpace(s.RegNumber))
.GroupBy(s => s.TnVed)
.ToDictionary(
g => g.Key,
g => g
.Select(s => (s.RegNumber, s.RegDate))
.Distinct()
.ToList()
);
var result = new List<Sheet3Row>();
foreach (var item in declarationItems)
{
if (regByTnVed.TryGetValue(item.TnVed, out var regPairs) && regPairs.Count > 0)
{
foreach (var (regNum, regDate) in regPairs)
{
result.Add(new Sheet3Row
{
SequentialNumber = item.SequentialNumber,
ClassifierCode = "09035",
RegNumber = regNum,
RegDate = regDate,
});
}
}
else
{
result.Add(new Sheet3Row
{
SequentialNumber = item.SequentialNumber,
ClassifierCode = "09035",
RegNumber = "",
RegDate = "",
});
}
}
return result;
}
}