This commit is contained in:
2026-10-01 14:01:17 +05:30
parent fe5a009b66
commit a40274fdd8
3 changed files with 32 additions and 3 deletions
+28
View File
@@ -280,6 +280,34 @@ async function run(port) {
assert(paid.status === 200 && paid.json.data.paymentType === 'lease', 'lease payment failed'); assert(paid.status === 200 && paid.json.data.paymentType === 'lease', 'lease payment failed');
assert(paid.json.data.stageLogDates.paymentApproved, 'payment stage log missing'); assert(paid.json.data.stageLogDates.paymentApproved, 'payment stage log missing');
for (const stage of ['orderedByCustomer', 'documentsProcessed']) {
const stepped = await request(port, 'PATCH', '/api/stocks/CH-RED/stage', {
token: dealerToken,
body: { stage },
});
assert(stepped.status === 200, `CH-RED stage ${stage} failed`);
}
const bothMissingName = await request(port, 'PATCH', '/api/stocks/CH-RED/stage', {
token: dealerToken,
body: { stage: 'paymentApproved', paymentType: 'lease', leaseProviderType: 'both' },
});
assert(bothMissingName.status === 400, 'both lease options should require a finance company');
const bothPaid = await request(port, 'PATCH', '/api/stocks/CH-RED/stage', {
token: dealerToken,
body: {
stage: 'paymentApproved',
paymentType: 'lease',
leaseProviderType: 'both',
financeCompanyName: 'GCI Finance',
},
});
assert(
bothPaid.status === 200 &&
bothPaid.json.data.leaseProviderType === 'both' &&
bothPaid.json.data.financeCompanyName === 'GCI Finance',
'lease with both GCI and finance failed'
);
const outside = await request(port, 'POST', '/api/stocks/CH-YELLOW/transfer', { const outside = await request(port, 'POST', '/api/stocks/CH-YELLOW/transfer', {
token: repToken, token: repToken,
body: { dealerId: dealerC.json.data.id }, body: { dealerId: dealerC.json.data.id },
+1 -1
View File
@@ -9,7 +9,7 @@ const STAGES = [
const MODELS = ['gn125', 'boxer125', 'click150i']; const MODELS = ['gn125', 'boxer125', 'click150i'];
const PAYMENT_TYPES = ['cash', 'lease']; const PAYMENT_TYPES = ['cash', 'lease'];
const LEASE_PROVIDERS = ['gci', 'thirdPartyFinance']; const LEASE_PROVIDERS = ['gci', 'thirdPartyFinance', 'both'];
function ageInDays(dateReceived, now = Date.now()) { function ageInDays(dateReceived, now = Date.now()) {
const diffTime = Math.abs(now - new Date(dateReceived).getTime()); const diffTime = Math.abs(now - new Date(dateReceived).getTime());
+3 -2
View File
@@ -129,10 +129,11 @@ router.patch(
if (paymentType === 'lease') { if (paymentType === 'lease') {
const leaseProviderType = String(req.body?.leaseProviderType || '').trim(); const leaseProviderType = String(req.body?.leaseProviderType || '').trim();
if (!LEASE_PROVIDERS.includes(leaseProviderType)) { if (!LEASE_PROVIDERS.includes(leaseProviderType)) {
throw httpError(400, 'leaseProviderType must be gci or thirdPartyFinance'); throw httpError(400, 'Choose GCI, finance, or both');
} }
data.leaseProviderType = leaseProviderType; data.leaseProviderType = leaseProviderType;
if (leaseProviderType === 'thirdPartyFinance') { const usesFinance = leaseProviderType === 'thirdPartyFinance' || leaseProviderType === 'both';
if (usesFinance) {
const financeCompanyName = String(req.body?.financeCompanyName || '').trim(); const financeCompanyName = String(req.body?.financeCompanyName || '').trim();
if (!financeCompanyName) throw httpError(400, 'financeCompanyName is required'); if (!financeCompanyName) throw httpError(400, 'financeCompanyName is required');
data.financeCompanyName = financeCompanyName; data.financeCompanyName = financeCompanyName;