- PostpayMode enum (SIMPLE/PER_DELIVERY) on POPaymentSchedule - isPostDelivery flag on POInstallment (auto-set at creation) - SDN.sign() → triggerPostpayOnSdnSign: creates/recalculates PaymentRequest - SIMPLE: 1 PR per postpay installment, dueDate = signedDate + postDeliveryDays - PER_DELIVERY: 1 PR per SDN, amount = deliveredAmount × postpayPercent/100 - SDN.cancel() → rejects PENDING/APPROVED PRs, preserves PAID PRs - Frontend: postpayMode Radio in PO drawer, "После отгрузки" tag on installments - Rename УПД tabs: исходящие → Клиенты, входящие → Поставщики - Backfill: 2 installments marked isPostDelivery=true Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
38 lines
1.3 KiB
TypeScript
38 lines
1.3 KiB
TypeScript
import { PrismaClient } from '@prisma/client';
|
|
const prisma = new PrismaClient();
|
|
|
|
async function backfill() {
|
|
const schedules = await prisma.pOPaymentSchedule.findMany({
|
|
include: { installments: { orderBy: { sortOrder: 'desc' } } },
|
|
});
|
|
|
|
console.log(`Found ${schedules.length} payment schedules`);
|
|
let totalPatched = 0;
|
|
|
|
for (const s of schedules) {
|
|
let toMark: number[] = [];
|
|
|
|
if (s.paymentType === 'POST_DELIVERY') {
|
|
toMark = s.installments.map(i => i.id);
|
|
} else if (s.paymentType === 'INSTALLMENT') {
|
|
if (s.installments.length > 0) {
|
|
toMark = [s.installments[0].id]; // [0] car orderBy desc → dernier sortOrder
|
|
}
|
|
}
|
|
|
|
if (toMark.length > 0) {
|
|
const r = await prisma.pOInstallment.updateMany({
|
|
where: { id: { in: toMark } },
|
|
data: { isPostDelivery: true },
|
|
});
|
|
console.log(` Schedule ${s.id} (PO ${s.purchaseOrderId}, type=${s.paymentType}): ${r.count} installments → isPostDelivery=true`);
|
|
totalPatched += r.count;
|
|
}
|
|
}
|
|
|
|
console.log(`\nBackfill terminé : ${totalPatched} installments marqués isPostDelivery=true`);
|
|
console.log(`postpayMode reste à default 'SIMPLE' pour tous les schedules existants (rétrocompat).`);
|
|
}
|
|
|
|
backfill().catch(e => { console.error(e); process.exit(1); }).finally(() => prisma.$disconnect());
|