hotfix-add subgroup customer

This commit is contained in:
phaichayon
2026-06-18 08:58:01 +07:00
parent 04a886ea26
commit 0650cf6297
38 changed files with 8674 additions and 687 deletions

View File

@@ -335,10 +335,16 @@ async function main() {
`/api/crm/quotations/${draftQuotation.id}/approved-pdf`,
{ method: 'POST' }
);
const previewData = await fetchWithAuth(
baseUrl,
superAdminCookies,
`/api/crm/quotations/${approvedQuotation.id}/document-preview`
);
assert(
nonApprovedGenerate.status === 400,
`Draft quotation POST expected 400, got ${nonApprovedGenerate.status}`
);
assert(previewData.status === 200, `Document preview expected 200, got ${previewData.status}`);
const adminPreview = await fetchWithAuth(
baseUrl,
@@ -395,6 +401,7 @@ async function main() {
const pdfShape = estimatePageCount(approvedGet.bytes);
const approvedSnapshot = persistence.quotation.approved_snapshot;
const previewPayload = previewData.json?.preview;
const templatePageCount = await queryTemplatePageCount(
sql,
persistence.quotation.approved_template_version_id
@@ -432,6 +439,41 @@ async function main() {
approvedSnapshot.documentData?.topics?.payment?.length >= 1,
'approvedSnapshot is missing payment topic data'
);
assert(
typeof previewPayload?.templateInput?.quotation_price === 'string',
'templateInput quotation_price is not formatted string'
);
assert(
typeof previewPayload?.templateInput?.quotation_date === 'string',
'templateInput quotation_date is not formatted string'
);
assert(
Array.isArray(previewPayload?.templateInput?.exclusion_data) &&
previewPayload.templateInput.exclusion_data.length >= 1 &&
Array.isArray(previewPayload.templateInput.exclusion_data[0]),
'templateInput exclusion_data is not a non-empty string[][] table'
);
const dynamicTopicKeys = Object.keys(previewPayload?.templateInput ?? {}).filter(
(key) => key.startsWith('topic_') || key.startsWith('item_topic_')
);
assert(dynamicTopicKeys.length >= 2, 'templateInput is missing dynamic topic keys');
assert(
Array.isArray(previewPayload?.documentData?.pdfme?.topic_inputs?.[dynamicTopicKeys[0]]),
'documentData pdfme.topic_inputs is missing generated topic inputs'
);
const approvedPdfText = approvedGet.bytes.toString('latin1');
assert(
!approvedPdfText.includes('{exclusion_data}'),
'Approved PDF still contains unresolved {exclusion_data}'
);
assert(
!approvedPdfText.includes('{quotation_price}'),
'Approved PDF still contains unresolved {quotation_price}'
);
assert(
!approvedPdfText.includes('{item_topic}'),
'Approved PDF still contains unresolved {item_topic}'
);
assert(
approvedSnapshot.documentData?.approval?.approvers?.length >= 1,
'approvedSnapshot is missing approval block data'
@@ -471,6 +513,15 @@ async function main() {
disposition: approvedGet.disposition,
bytes: approvedGet.bytes.length
},
documentPreview: {
status: previewData.status,
quotationPrice: previewPayload?.templateInput?.quotation_price ?? null,
quotationDate: previewPayload?.templateInput?.quotation_date ?? null,
exclusionRows: Array.isArray(previewPayload?.templateInput?.exclusion_data)
? previewPayload.templateInput.exclusion_data.length
: 0,
dynamicTopicKeys
},
nonApprovedPost: {
status: nonApprovedGenerate.status,
message: nonApprovedGenerate.json?.message ?? null