fix(ct):пофиксил дублирование позиций в таблице а также убрал добавление поставщика безКП в таблицу

This commit is contained in:
Тимур Городецкий
2026-09-23 16:06:26 +05:00
parent 64973a2232
commit 5f5f0e7f81
@@ -11,15 +11,32 @@ export interface PersistStep2Args {
noOfferSuppliers: NoOfferEntry[]; noOfferSuppliers: NoOfferEntry[];
} }
// Несколько КП одного поставщика (повторная загрузка, тот же КП под другим именем файла) получают
// один и тот же supplierSpId — saveSupplierWithOffer находит поставщика по имени. Без отбора
// в таблице сравнения появляется дубль колонки с тем же id, а офферы обоих файлов складываются
// в одну ячейку (задвоенные строки позиций). Оставляем последний загруженный файл поставщика,
// но обработанный файл не вытесняем тем, что ещё в процессе.
function pickLatestFilePerSupplier(kpFiles: KpFile[]): KpFile[] {
const fileBySupplier = new Map<string, KpFile>();
kpFiles.forEach(f => {
if (!f.supplierName) return;
const supplierKey = f.supplierSpId !== undefined ? String(f.supplierSpId) : f.supplierName;
const existing = fileBySupplier.get(supplierKey);
const canReplace = !existing || f.status === 'done' || existing.status !== 'done';
if (canReplace) fileBySupplier.set(supplierKey, f);
});
return Array.from(fileBySupplier.values());
}
// Строит поставщиков с КП и их офферы из результатов потока (Syntex). Вынесено из persistStep2, // Строит поставщиков с КП и их офферы из результатов потока (Syntex). Вынесено из persistStep2,
// чтобы ту же логику использовал инкрементальный persist в useKpProcessing (поставщик должен // чтобы ту же логику использовал инкрементальный persist в useKpProcessing (поставщик должен
// доходить до Шага 3 даже без кнопки «Сохранить и продолжить»). // доходить до Шага 3 даже без кнопки «Сохранить и продолжить»).
export function buildKpSuppliersAndOffers( export function buildKpSuppliersAndOffers(
kpFiles: KpFile[], allKpFiles: KpFile[],
currencyRates: CurrencyRate[], currencyRates: CurrencyRate[],
): { suppliers: Supplier[]; offers: SupplierOffer[] } { ): { suppliers: Supplier[]; offers: SupplierOffer[] } {
const kpFiles = pickLatestFilePerSupplier(allKpFiles);
const suppliers: Supplier[] = kpFiles const suppliers: Supplier[] = kpFiles
.filter(f => f.supplierName)
.map(f => ({ .map(f => ({
id: f.supplierSpId ? String(f.supplierSpId) : f.localId, id: f.supplierSpId ? String(f.supplierSpId) : f.localId,
spId: f.supplierSpId, spId: f.supplierSpId,