lead menu

nquiry menu
This commit is contained in:
phaichayon
2026-06-19 10:39:11 +07:00
parent 0650cf6297
commit c0cc880be2
46 changed files with 5985 additions and 420 deletions

View File

@@ -20,6 +20,7 @@ import { listAuditLogs } from '@/features/foundation/audit-log/service';
import { getUserBranches, validateBranchAccess } from '@/features/foundation/branch-scope/service';
import { generateNextDocumentCode } from '@/features/foundation/document-sequence/service';
import { getActiveOptionsByCategory } from '@/features/foundation/master-options/service';
import { syncEnquiryPipelineStageFromQuotationStatus } from '@/features/crm/enquiries/server/service';
import type {
QuotationActivityRecord,
QuotationAttachmentMutationPayload,
@@ -1215,6 +1216,11 @@ export async function createQuotation(
payload: QuotationMutationPayload
) {
await validateQuotationPayload(organizationId, payload);
const quotationStatusCode = await resolveOptionCodeById(
organizationId,
QUOTATION_OPTION_CATEGORIES.status,
payload.status
);
const enquiry = payload.enquiryId
? await assertEnquiryBelongsToOrganization(payload.enquiryId, organizationId)
@@ -1277,6 +1283,14 @@ export async function createQuotation(
payload.projectParties ?? []
);
if (created.enquiryId) {
await syncEnquiryPipelineStageFromQuotationStatus(
created.enquiryId,
organizationId,
quotationStatusCode
);
}
return created;
});
}
@@ -1288,6 +1302,11 @@ export async function updateQuotation(
payload: QuotationMutationPayload
) {
await validateQuotationPayload(organizationId, payload);
const quotationStatusCode = await resolveOptionCodeById(
organizationId,
QUOTATION_OPTION_CATEGORIES.status,
payload.status
);
const existing = await assertQuotationBelongsToOrganization(id, organizationId);
const enquiry = payload.enquiryId
? await assertEnquiryBelongsToOrganization(payload.enquiryId, organizationId)
@@ -1336,6 +1355,14 @@ export async function updateQuotation(
payload.projectParties ?? []
);
if (row.enquiryId) {
await syncEnquiryPipelineStageFromQuotationStatus(
row.enquiryId,
organizationId,
quotationStatusCode
);
}
return row;
});