feat(web-admin): sync lump-sum deadline to last due date

Add applyLumpSumDeadlineToLastDueDate for dj payment schedules,
skipping locked or void rows.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zlwuandCursor committed 2026-10-13 14:50:41 +08:00
1 parent 5fd5550e0d
commit 6ec4ec6730
2 files changed
+64 -1

No files matched your search

@@ -17,7 +17,8 @@ import {
availableSamplePayModes,
samplePaymentHasConfirmedTransfer,
calcLastPeriodDueAmount,
shouldAutoFillLastPeriodDue
shouldAutoFillLastPeriodDue,
applyLumpSumDeadlineToLastDueDate
} from './protocol-sample-payment'
describe('parsePreferentialPrice', () => {
@@ -372,3 +373,46 @@ describe('shouldAutoFillLastPeriodDue', () => {
)
})
})
describe('applyLumpSumDeadlineToLastDueDate', () => {
it('writes deadline to last unlocked schedule', () => {
const next = applyLumpSumDeadlineToLastDueDate(
[
{ scheduleNo: 1, dueDate: '', scheduleStatus: 'open' },
{ scheduleNo: 2, dueDate: '20260101', scheduleStatus: 'open' }
],
'20261231',
(s) => false
)
assert.equal(next[0].dueDate, '')
assert.equal(next[1].dueDate, '20261231')
})
it('clears dueDate when deadline empty', () => {
const next = applyLumpSumDeadlineToLastDueDate(
[{ scheduleNo: 1, dueDate: '20261231', scheduleStatus: 'open' }],
'',
() => false
)
assert.equal(next[0].dueDate, '')
})
it('skips when last schedule locked', () => {
const next = applyLumpSumDeadlineToLastDueDate(
[{ scheduleNo: 1, dueDate: '20260101', scheduleStatus: 'open' }],
'20261231',
() => true
)
assert.equal(next[0].dueDate, '20260101')
})
it('ignores void schedules when picking last', () => {
const next = applyLumpSumDeadlineToLastDueDate(
[
{ scheduleNo: 1, dueDate: '', scheduleStatus: 'open' },
{ scheduleNo: 2, dueDate: 'old', scheduleStatus: 'void' }
],
'20261231',
() => false
)
assert.equal(next[0].dueDate, '20261231')
assert.equal(next[1].dueDate, 'old')
})
})