Taksit yönetimi ve kaskad güncellemeler. InstallmentPlan, BR-02/BR-03/BR-07. Use when working with installments, taksit planları, or credit card cascade in Money Expo.
Taksit yönetimi ve kaskad güncellemeler için Money Expo domain uzmanı.
| Kural | Uygulama |
|---|---|
| BR-02 | Değişken tip tutarı = o ayki taksitler toplamı |
| BR-03 | Kredi kartı ödenince bağlı taksitler de ödenmeli |
| BR-07 | Taksit yalnızca variable tip ödemeye bağlanabilir |
async function createInstallmentPlans(db: DrizzleDB, installment: NewInstallment) {
const startDate = parseISO(installment.startDate);
const monthlyAmount = installment.totalAmount / installment.totalInstallments;
const plans: NewInstallmentPlan[] = [];
for (let i = 0; i < installment.totalInstallments; i++) {
const periodDate = addMonths(startDate, i);
const periodKey = format(periodDate, 'yyyy-MM');
plans.push({
installmentId: installment.id,
periodKey,
installmentNumber: i + 1,
amount: monthlyAmount,
isPaid: false,
});
}
await db.insert(schema.installmentPlans).values(plans);
}
async function cascadePaymentToInstallments(
db: DrizzleDB, paymentId: number, periodKey: string
) {
const linkedInstallments = await db.select()
.from(schema.installments)
.where(eq(schema.installments.linkedPaymentId, paymentId));
for (const installment of linkedInstallments) {
await db.update(schema.installmentPlans)
.set({ isPaid: true })
.where(and(
eq(schema.installmentPlans.installmentId, installment.id),
eq(schema.installmentPlans.periodKey, periodKey)
));
}
}