fix(ct):пофиксил дублирование позиций в таблице а также убрал добавление поставщика безКП в таблицу
This commit is contained in:
+19
-2
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user