1378 lines
37 KiB
TypeScript
1378 lines
37 KiB
TypeScript
import type {
|
|
ApprovalItem,
|
|
AuditEvent,
|
|
ContactShare,
|
|
ContactShareLog,
|
|
CrmBranch,
|
|
CrmSalesperson,
|
|
Customer,
|
|
CustomerContact,
|
|
DocumentSequence,
|
|
Enquiry,
|
|
MasterOption,
|
|
Quotation,
|
|
QuotationTemplate
|
|
} from '../api/types';
|
|
|
|
export interface CrmMockState {
|
|
branches: CrmBranch[];
|
|
salespersons: CrmSalesperson[];
|
|
customers: Customer[];
|
|
contacts: CustomerContact[];
|
|
contactShares: ContactShare[];
|
|
contactShareLogs: ContactShareLog[];
|
|
enquiries: Enquiry[];
|
|
quotations: Quotation[];
|
|
approvals: ApprovalItem[];
|
|
auditEvents: AuditEvent[];
|
|
sequences: DocumentSequence[];
|
|
masterOptions: MasterOption[];
|
|
templates: QuotationTemplate[];
|
|
}
|
|
|
|
export const initialCrmState: CrmMockState = {
|
|
branches: [
|
|
{ id: 'bkk', code: 'BKK', name: 'Bangkok HQ', region: 'Central' },
|
|
{ id: 'chn', code: 'CHN', name: 'Chiang Mai Branch', region: 'North' }
|
|
],
|
|
salespersons: [
|
|
{ id: 'sp-1', name: 'Krit S.', nickname: 'Krit', branchId: 'bkk', role: 'sales' },
|
|
{ id: 'sp-2', name: 'Nicha P.', nickname: 'Nicha', branchId: 'bkk', role: 'sale_admin' },
|
|
{ id: 'sp-3', name: 'Ton A.', nickname: 'Ton', branchId: 'chn', role: 'sales' }
|
|
],
|
|
customers: [
|
|
{
|
|
id: 'cus-1',
|
|
code: 'CUS-BKK-001',
|
|
name: 'Siam Metro Development',
|
|
taxId: '0105556100011',
|
|
address: '88 Rama 9 Road',
|
|
province: 'Bangkok',
|
|
district: 'Huai Khwang',
|
|
subDistrict: 'Bang Kapi',
|
|
postalCode: '10310',
|
|
phone: '02-555-1001',
|
|
fax: '02-555-1999',
|
|
email: 'procurement@siammetro.co.th',
|
|
customerType: 'developer',
|
|
customerStatus: 'active',
|
|
branchId: 'bkk',
|
|
contactIds: ['ct-1', 'ct-2']
|
|
},
|
|
{
|
|
id: 'cus-2',
|
|
code: 'CUS-BKK-002',
|
|
name: 'Prime Lift Engineering',
|
|
taxId: '0105556100012',
|
|
address: '19 Vibhavadi Rangsit',
|
|
province: 'Bangkok',
|
|
district: 'Chatuchak',
|
|
subDistrict: 'Chom Phon',
|
|
postalCode: '10900',
|
|
phone: '02-555-2002',
|
|
email: 'sales@primelift.co.th',
|
|
customerType: 'contractor',
|
|
customerStatus: 'active',
|
|
branchId: 'bkk',
|
|
contactIds: ['ct-3', 'ct-4']
|
|
},
|
|
{
|
|
id: 'cus-3',
|
|
code: 'CUS-CHN-003',
|
|
name: 'Northern Cold Chain',
|
|
taxId: '0505556100013',
|
|
address: '125 Super Highway',
|
|
province: 'Chiang Mai',
|
|
district: 'Mueang',
|
|
subDistrict: 'Wat Ket',
|
|
postalCode: '50000',
|
|
phone: '053-555-3003',
|
|
email: 'project@ncc.co.th',
|
|
customerType: 'owner',
|
|
customerStatus: 'prospect',
|
|
branchId: 'chn',
|
|
contactIds: ['ct-5', 'ct-6']
|
|
},
|
|
{
|
|
id: 'cus-4',
|
|
code: 'CUS-BKK-004',
|
|
name: 'Urban Dock Solution',
|
|
taxId: '0105556100014',
|
|
address: '77 Bangna-Trad KM.8',
|
|
province: 'Samut Prakan',
|
|
district: 'Bang Phli',
|
|
subDistrict: 'Bang Kaeo',
|
|
postalCode: '10540',
|
|
phone: '02-555-4004',
|
|
email: 'admin@urbandock.asia',
|
|
customerType: 'consultant',
|
|
customerStatus: 'active',
|
|
branchId: 'bkk',
|
|
contactIds: ['ct-7', 'ct-8']
|
|
},
|
|
{
|
|
id: 'cus-5',
|
|
code: 'CUS-CHN-005',
|
|
name: 'Lanna Solar Estate',
|
|
taxId: '0505556100015',
|
|
address: '199 Ring Road',
|
|
province: 'Chiang Mai',
|
|
district: 'San Sai',
|
|
subDistrict: 'Nong Chom',
|
|
postalCode: '50210',
|
|
phone: '053-555-5005',
|
|
email: 'energy@lannasolar.co.th',
|
|
customerType: 'developer',
|
|
customerStatus: 'inactive',
|
|
branchId: 'chn',
|
|
contactIds: ['ct-9', 'ct-10']
|
|
}
|
|
],
|
|
contacts: [
|
|
{
|
|
id: 'ct-1',
|
|
customerId: 'cus-1',
|
|
name: 'Ploy Tantip',
|
|
position: 'Procurement Manager',
|
|
email: 'ploy@siammetro.co.th',
|
|
phone: '081-111-1111',
|
|
isPrimary: true
|
|
},
|
|
{
|
|
id: 'ct-2',
|
|
customerId: 'cus-1',
|
|
name: 'Vee Chan',
|
|
position: 'Project Engineer',
|
|
email: 'vee@siammetro.co.th',
|
|
phone: '081-111-1112'
|
|
},
|
|
{
|
|
id: 'ct-3',
|
|
customerId: 'cus-2',
|
|
name: 'Boss K.',
|
|
position: 'Managing Director',
|
|
email: 'boss@primelift.co.th',
|
|
phone: '082-222-2221',
|
|
isPrimary: true
|
|
},
|
|
{
|
|
id: 'ct-4',
|
|
customerId: 'cus-2',
|
|
name: 'Jane R.',
|
|
position: 'Estimator',
|
|
email: 'jane@primelift.co.th',
|
|
phone: '082-222-2222'
|
|
},
|
|
{
|
|
id: 'ct-5',
|
|
customerId: 'cus-3',
|
|
name: 'Aon M.',
|
|
position: 'Operations Head',
|
|
email: 'aon@ncc.co.th',
|
|
phone: '083-333-3331',
|
|
isPrimary: true
|
|
},
|
|
{
|
|
id: 'ct-6',
|
|
customerId: 'cus-3',
|
|
name: 'Max P.',
|
|
position: 'Warehouse Lead',
|
|
email: 'max@ncc.co.th',
|
|
phone: '083-333-3332'
|
|
},
|
|
{
|
|
id: 'ct-7',
|
|
customerId: 'cus-4',
|
|
name: 'Mint T.',
|
|
position: 'Design Consultant',
|
|
email: 'mint@urbandock.asia',
|
|
phone: '084-444-4441',
|
|
isPrimary: true
|
|
},
|
|
{
|
|
id: 'ct-8',
|
|
customerId: 'cus-4',
|
|
name: 'Ken D.',
|
|
position: 'Project Coordinator',
|
|
email: 'ken@urbandock.asia',
|
|
phone: '084-444-4442'
|
|
},
|
|
{
|
|
id: 'ct-9',
|
|
customerId: 'cus-5',
|
|
name: 'Fah N.',
|
|
position: 'Energy Planning Lead',
|
|
email: 'fah@lannasolar.co.th',
|
|
phone: '085-555-5551',
|
|
isPrimary: true
|
|
},
|
|
{
|
|
id: 'ct-10',
|
|
customerId: 'cus-5',
|
|
name: 'Palm J.',
|
|
position: 'Plant Director',
|
|
email: 'palm@lannasolar.co.th',
|
|
phone: '085-555-5552'
|
|
}
|
|
],
|
|
contactShares: [
|
|
{
|
|
id: 'share-1',
|
|
contactId: 'ct-1',
|
|
sharedWithUserId: 'u-1',
|
|
sharedWithUserName: 'Nicha P.',
|
|
permission: 'view',
|
|
createdAt: '2026-06-01T09:00:00.000Z'
|
|
},
|
|
{
|
|
id: 'share-2',
|
|
contactId: 'ct-7',
|
|
sharedWithUserId: 'u-2',
|
|
sharedWithUserName: 'Ton A.',
|
|
permission: 'edit',
|
|
createdAt: '2026-06-03T10:30:00.000Z'
|
|
}
|
|
],
|
|
contactShareLogs: [
|
|
{
|
|
id: 'share-log-1',
|
|
contactId: 'ct-1',
|
|
action: 'SHARE',
|
|
targetUserName: 'Nicha P.',
|
|
actorName: 'Krit S.',
|
|
createdAt: '2026-06-01T09:00:00.000Z'
|
|
},
|
|
{
|
|
id: 'share-log-2',
|
|
contactId: 'ct-7',
|
|
action: 'SHARE',
|
|
targetUserName: 'Ton A.',
|
|
actorName: 'Krit S.',
|
|
createdAt: '2026-06-03T10:30:00.000Z'
|
|
},
|
|
{
|
|
id: 'share-log-3',
|
|
contactId: 'ct-7',
|
|
action: 'REVOKE',
|
|
targetUserName: 'Ton A.',
|
|
actorName: 'Nicha P.',
|
|
createdAt: '2026-06-07T14:45:00.000Z'
|
|
}
|
|
],
|
|
enquiries: [
|
|
{
|
|
id: 'enq-1',
|
|
code: 'ENQ2606-001',
|
|
title: 'Dock leveler replacement for Phase 3 warehouse',
|
|
customerId: 'cus-1',
|
|
contactId: 'ct-1',
|
|
branchId: 'bkk',
|
|
salesmanId: 'sp-1',
|
|
productType: 'dockdoor',
|
|
status: 'converted',
|
|
requirementSummary: 'Replace 8 dock levelers with high cycle hydraulic model.',
|
|
projectLocation: 'Bangkok Logistics Park',
|
|
chancePercent: 82,
|
|
competitor: 'Apex Dock',
|
|
expectedValue: 2750000,
|
|
dueDate: '2026-06-14',
|
|
createdAt: '2026-05-28T09:00:00.000Z',
|
|
updatedAt: '2026-06-09T15:20:00.000Z',
|
|
quotationIds: ['qt-1', 'qt-2'],
|
|
activities: [
|
|
{
|
|
id: 'enq-1-act-1',
|
|
type: 'CALL',
|
|
title: 'รับ requirement เบื้องต้น',
|
|
detail: 'ลูกค้าต้องการเปลี่ยนภายใน Q3',
|
|
actorName: 'Krit S.',
|
|
createdAt: '2026-05-28T09:00:00.000Z'
|
|
},
|
|
{
|
|
id: 'enq-1-act-2',
|
|
type: 'VISIT',
|
|
title: 'สำรวจหน้างาน',
|
|
detail: 'หน้างานพร้อม shutdown 3 วัน',
|
|
actorName: 'Krit S.',
|
|
createdAt: '2026-05-30T13:30:00.000Z'
|
|
},
|
|
{
|
|
id: 'enq-1-act-3',
|
|
type: 'CONVERT',
|
|
title: 'Convert to quotation',
|
|
detail: 'สร้าง QT2606-001',
|
|
actorName: 'Nicha P.',
|
|
createdAt: '2026-06-02T08:15:00.000Z'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id: 'enq-2',
|
|
code: 'ENQ2606-002',
|
|
title: 'Overhead crane upgrade for fabrication line',
|
|
customerId: 'cus-2',
|
|
contactId: 'ct-3',
|
|
branchId: 'bkk',
|
|
salesmanId: 'sp-1',
|
|
productType: 'crane',
|
|
status: 'requirement',
|
|
requirementSummary: '10 ton overhead crane with remote monitoring.',
|
|
projectLocation: 'Samut Sakhon Plant',
|
|
chancePercent: 68,
|
|
competitor: 'LiftPro',
|
|
expectedValue: 5200000,
|
|
dueDate: '2026-06-20',
|
|
createdAt: '2026-05-29T10:00:00.000Z',
|
|
updatedAt: '2026-06-10T11:00:00.000Z',
|
|
quotationIds: ['qt-3'],
|
|
activities: [
|
|
{
|
|
id: 'enq-2-act-1',
|
|
type: 'MEETING',
|
|
title: 'Kickoff meeting',
|
|
detail: 'หารือ requirement ทางเทคนิค',
|
|
actorName: 'Krit S.',
|
|
createdAt: '2026-05-29T10:00:00.000Z'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id: 'enq-3',
|
|
code: 'ENQ2606-003',
|
|
title: 'Solar rooftop for cold storage lot C',
|
|
customerId: 'cus-3',
|
|
contactId: 'ct-5',
|
|
branchId: 'chn',
|
|
salesmanId: 'sp-3',
|
|
productType: 'solarcell',
|
|
status: 'follow_up',
|
|
requirementSummary: '500 kWp rooftop with energy monitoring.',
|
|
projectLocation: 'Chiang Mai DC',
|
|
chancePercent: 49,
|
|
competitor: 'SunNorth',
|
|
expectedValue: 6100000,
|
|
dueDate: '2026-06-18',
|
|
createdAt: '2026-05-27T09:20:00.000Z',
|
|
updatedAt: '2026-06-08T16:10:00.000Z',
|
|
quotationIds: ['qt-4'],
|
|
activities: [
|
|
{
|
|
id: 'enq-3-act-1',
|
|
type: 'NOTE',
|
|
title: 'ติดตาม BOQ',
|
|
detail: 'รอฝั่งลูกค้าส่งโหลดไฟฟ้า',
|
|
actorName: 'Ton A.',
|
|
createdAt: '2026-06-08T16:10:00.000Z'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id: 'enq-4',
|
|
code: 'ENQ2606-004',
|
|
title: 'Dock shelter package for retrofit',
|
|
customerId: 'cus-4',
|
|
contactId: 'ct-7',
|
|
branchId: 'bkk',
|
|
salesmanId: 'sp-1',
|
|
productType: 'dockdoor',
|
|
status: 'new',
|
|
requirementSummary: 'Retrofit existing dock shelter 12 bays.',
|
|
projectLocation: 'Bangna Logistics Hub',
|
|
chancePercent: 35,
|
|
competitor: 'Apex Dock',
|
|
expectedValue: 1850000,
|
|
dueDate: '2026-06-21',
|
|
createdAt: '2026-06-05T14:00:00.000Z',
|
|
updatedAt: '2026-06-05T14:00:00.000Z',
|
|
quotationIds: [],
|
|
activities: [
|
|
{
|
|
id: 'enq-4-act-1',
|
|
type: 'CALL',
|
|
title: 'Lead intake',
|
|
detail: 'รับ lead จาก consultant',
|
|
actorName: 'Krit S.',
|
|
createdAt: '2026-06-05T14:00:00.000Z'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id: 'enq-5',
|
|
code: 'ENQ2606-005',
|
|
title: 'Crane preventive maintenance agreement',
|
|
customerId: 'cus-2',
|
|
contactId: 'ct-4',
|
|
branchId: 'bkk',
|
|
salesmanId: 'sp-1',
|
|
productType: 'crane',
|
|
status: 'qualifying',
|
|
requirementSummary: 'Annual PM contract for 6 cranes.',
|
|
projectLocation: 'Ayutthaya Plant',
|
|
chancePercent: 53,
|
|
competitor: 'LiftPro',
|
|
expectedValue: 980000,
|
|
dueDate: '2026-06-19',
|
|
createdAt: '2026-06-02T11:00:00.000Z',
|
|
updatedAt: '2026-06-06T12:00:00.000Z',
|
|
quotationIds: ['qt-5'],
|
|
activities: [
|
|
{
|
|
id: 'enq-5-act-1',
|
|
type: 'UPDATE',
|
|
title: 'ผ่านขั้น qualifying',
|
|
detail: 'ลูกค้ามี budget แล้ว',
|
|
actorName: 'Krit S.',
|
|
createdAt: '2026-06-06T12:00:00.000Z'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id: 'enq-6',
|
|
code: 'ENQ2606-006',
|
|
title: 'Solar canopy concept study',
|
|
customerId: 'cus-5',
|
|
contactId: 'ct-9',
|
|
branchId: 'chn',
|
|
salesmanId: 'sp-3',
|
|
productType: 'solarcell',
|
|
status: 'closed_lost',
|
|
requirementSummary: 'Concept study for parking canopy solar.',
|
|
projectLocation: 'Chiang Rai Service Center',
|
|
chancePercent: 0,
|
|
competitor: 'GreenBeam',
|
|
expectedValue: 2400000,
|
|
dueDate: '2026-06-08',
|
|
createdAt: '2026-05-20T09:00:00.000Z',
|
|
updatedAt: '2026-06-08T18:00:00.000Z',
|
|
quotationIds: ['qt-6'],
|
|
activities: [
|
|
{
|
|
id: 'enq-6-act-1',
|
|
type: 'UPDATE',
|
|
title: 'Lost to competitor',
|
|
detail: 'ราคา competitor ต่ำกว่า',
|
|
actorName: 'Ton A.',
|
|
createdAt: '2026-06-08T18:00:00.000Z'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id: 'enq-7',
|
|
code: 'ENQ2606-007',
|
|
title: 'High-speed door package',
|
|
customerId: 'cus-1',
|
|
contactId: 'ct-2',
|
|
branchId: 'bkk',
|
|
salesmanId: 'sp-1',
|
|
productType: 'dockdoor',
|
|
status: 'cancelled',
|
|
requirementSummary: 'High-speed doors for food-grade area.',
|
|
projectLocation: 'Pathum Thani',
|
|
chancePercent: 0,
|
|
competitor: 'FastDoor',
|
|
expectedValue: 1600000,
|
|
dueDate: '2026-06-11',
|
|
createdAt: '2026-05-25T10:10:00.000Z',
|
|
updatedAt: '2026-06-04T11:00:00.000Z',
|
|
quotationIds: [],
|
|
activities: [
|
|
{
|
|
id: 'enq-7-act-1',
|
|
type: 'UPDATE',
|
|
title: 'Project cancelled',
|
|
detail: 'Owner เลื่อน CAPEX',
|
|
actorName: 'Nicha P.',
|
|
createdAt: '2026-06-04T11:00:00.000Z'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id: 'enq-8',
|
|
code: 'ENQ2606-008',
|
|
title: 'Monorail crane for packaging line',
|
|
customerId: 'cus-3',
|
|
contactId: 'ct-6',
|
|
branchId: 'chn',
|
|
salesmanId: 'sp-3',
|
|
productType: 'crane',
|
|
status: 'new',
|
|
requirementSummary: '1 ton monorail crane with quick delivery.',
|
|
projectLocation: 'Lamphun Plant',
|
|
chancePercent: 28,
|
|
competitor: 'NorthHoist',
|
|
expectedValue: 740000,
|
|
dueDate: '2026-06-24',
|
|
createdAt: '2026-06-09T13:00:00.000Z',
|
|
updatedAt: '2026-06-09T13:00:00.000Z',
|
|
quotationIds: [],
|
|
activities: [
|
|
{
|
|
id: 'enq-8-act-1',
|
|
type: 'CALL',
|
|
title: 'รับ enquiry ใหม่',
|
|
detail: 'ต้องการเสนอราคาใน 7 วัน',
|
|
actorName: 'Ton A.',
|
|
createdAt: '2026-06-09T13:00:00.000Z'
|
|
}
|
|
]
|
|
}
|
|
],
|
|
quotations: [
|
|
{
|
|
id: 'qt-1',
|
|
code: 'QT2606-001',
|
|
enquiryId: 'enq-1',
|
|
quotationDate: '2026-06-02',
|
|
validUntil: '2026-07-02',
|
|
quotationType: 'official',
|
|
project: 'Warehouse Dock Modernization',
|
|
siteLocation: 'Bangkok Logistics Park',
|
|
customerRoles: [
|
|
{ role: 'owner', customerId: 'cus-1', contactId: 'ct-1' },
|
|
{ role: 'consultant', customerId: 'cus-4', contactId: 'ct-7' },
|
|
{ role: 'billing', customerId: 'cus-2', contactId: 'ct-4' }
|
|
],
|
|
salesmanId: 'sp-1',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'bkk',
|
|
status: 'pending_approval',
|
|
revision: 0,
|
|
totalAmount: 2750000,
|
|
chancePercent: 82,
|
|
isHotProject: true,
|
|
approvalSnapshot: 'Awaiting Level 2 approval',
|
|
items: [
|
|
{
|
|
id: 'qt-1-item-1',
|
|
topic: 'Mechanical',
|
|
description: 'Hydraulic dock leveler 8 sets',
|
|
quantity: 8,
|
|
unit: 'set',
|
|
unitPrice: 280000,
|
|
amount: 2240000
|
|
},
|
|
{
|
|
id: 'qt-1-item-2',
|
|
topic: 'Installation',
|
|
description: 'Site install and commissioning',
|
|
quantity: 1,
|
|
unit: 'lot',
|
|
unitPrice: 510000,
|
|
amount: 510000
|
|
}
|
|
],
|
|
topics: [
|
|
{
|
|
id: 'qt-1-topic-1',
|
|
type: 'scope',
|
|
label: 'Scope',
|
|
items: ['Supply equipment', 'Install and test', 'Operator training']
|
|
},
|
|
{
|
|
id: 'qt-1-topic-2',
|
|
type: 'exclusion',
|
|
label: 'Exclusion',
|
|
items: ['Civil work by customer', 'Night shift overtime']
|
|
},
|
|
{
|
|
id: 'qt-1-topic-3',
|
|
type: 'payment',
|
|
label: 'Payment',
|
|
items: ['40% down payment', '50% upon delivery', '10% after handover']
|
|
}
|
|
],
|
|
followUps: [
|
|
{
|
|
id: 'qt-1-fu-1',
|
|
title: 'Prepare approval summary',
|
|
dueDate: '2026-06-12',
|
|
ownerName: 'Nicha P.',
|
|
status: 'open'
|
|
},
|
|
{
|
|
id: 'qt-1-fu-2',
|
|
title: 'Confirm shutdown window',
|
|
dueDate: '2026-06-13',
|
|
ownerName: 'Krit S.',
|
|
status: 'open'
|
|
}
|
|
],
|
|
attachments: [
|
|
{
|
|
id: 'qt-1-att-1',
|
|
fileName: 'technical-spec.pdf',
|
|
fileType: 'pdf',
|
|
uploadedAt: '2026-06-02T10:00:00.000Z'
|
|
}
|
|
],
|
|
approvalSteps: [
|
|
{
|
|
id: 'qt-1-ap-1',
|
|
level: 1,
|
|
approverName: 'Head of Sales',
|
|
approverPosition: 'Sales Director',
|
|
status: 'approved',
|
|
actedAt: '2026-06-03T09:30:00.000Z'
|
|
},
|
|
{
|
|
id: 'qt-1-ap-2',
|
|
level: 2,
|
|
approverName: 'CEO Office',
|
|
approverPosition: 'Managing Director',
|
|
status: 'pending'
|
|
}
|
|
],
|
|
auditEventIds: ['audit-1', 'audit-2']
|
|
},
|
|
{
|
|
id: 'qt-2',
|
|
code: 'QT2606-001-R01',
|
|
enquiryId: 'enq-1',
|
|
quotationDate: '2026-06-07',
|
|
validUntil: '2026-07-07',
|
|
quotationType: 'official',
|
|
project: 'Warehouse Dock Modernization',
|
|
siteLocation: 'Bangkok Logistics Park',
|
|
customerRoles: [
|
|
{ role: 'owner', customerId: 'cus-1', contactId: 'ct-1' },
|
|
{ role: 'consultant', customerId: 'cus-4', contactId: 'ct-7' }
|
|
],
|
|
salesmanId: 'sp-1',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'bkk',
|
|
status: 'revised',
|
|
revision: 1,
|
|
totalAmount: 2875000,
|
|
chancePercent: 78,
|
|
isHotProject: true,
|
|
approvedPdfUrl: '/mock/qt2606-001-r01.pdf',
|
|
items: [
|
|
{
|
|
id: 'qt-2-item-1',
|
|
topic: 'Mechanical',
|
|
description: 'Hydraulic dock leveler 8 sets',
|
|
quantity: 8,
|
|
unit: 'set',
|
|
unitPrice: 280000,
|
|
amount: 2240000
|
|
},
|
|
{
|
|
id: 'qt-2-item-2',
|
|
topic: 'Safety',
|
|
description: 'Additional dock light and safety package',
|
|
quantity: 1,
|
|
unit: 'lot',
|
|
unitPrice: 635000,
|
|
amount: 635000
|
|
}
|
|
],
|
|
topics: [
|
|
{
|
|
id: 'qt-2-topic-1',
|
|
type: 'scope',
|
|
label: 'Scope',
|
|
items: ['Updated safety package', 'Delivery within 30 days']
|
|
},
|
|
{
|
|
id: 'qt-2-topic-2',
|
|
type: 'exclusion',
|
|
label: 'Exclusion',
|
|
items: ['Permit by customer']
|
|
},
|
|
{ id: 'qt-2-topic-3', type: 'payment', label: 'Payment', items: ['40/50/10 milestone'] }
|
|
],
|
|
followUps: [
|
|
{
|
|
id: 'qt-2-fu-1',
|
|
title: 'Send revised file to customer',
|
|
dueDate: '2026-06-12',
|
|
ownerName: 'Krit S.',
|
|
status: 'open'
|
|
}
|
|
],
|
|
attachments: [
|
|
{
|
|
id: 'qt-2-att-1',
|
|
fileName: 'rev1-comparison.pdf',
|
|
fileType: 'pdf',
|
|
uploadedAt: '2026-06-07T16:00:00.000Z'
|
|
}
|
|
],
|
|
approvalSteps: [
|
|
{
|
|
id: 'qt-2-ap-1',
|
|
level: 1,
|
|
approverName: 'Head of Sales',
|
|
approverPosition: 'Sales Director',
|
|
status: 'approved',
|
|
actedAt: '2026-06-07T15:30:00.000Z'
|
|
},
|
|
{
|
|
id: 'qt-2-ap-2',
|
|
level: 2,
|
|
approverName: 'CEO Office',
|
|
approverPosition: 'Managing Director',
|
|
status: 'approved',
|
|
actedAt: '2026-06-08T09:00:00.000Z'
|
|
}
|
|
],
|
|
auditEventIds: ['audit-3']
|
|
},
|
|
{
|
|
id: 'qt-3',
|
|
code: 'QT2606-002',
|
|
enquiryId: 'enq-2',
|
|
quotationDate: '2026-06-05',
|
|
validUntil: '2026-07-05',
|
|
quotationType: 'budgetary',
|
|
project: 'Fabrication Crane Upgrade',
|
|
siteLocation: 'Samut Sakhon Plant',
|
|
customerRoles: [
|
|
{ role: 'owner', customerId: 'cus-2', contactId: 'ct-3' },
|
|
{ role: 'contractor', customerId: 'cus-4', contactId: 'ct-8' }
|
|
],
|
|
salesmanId: 'sp-1',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'bkk',
|
|
status: 'draft',
|
|
revision: 0,
|
|
totalAmount: 5200000,
|
|
chancePercent: 68,
|
|
isHotProject: false,
|
|
items: [
|
|
{
|
|
id: 'qt-3-item-1',
|
|
topic: 'Crane',
|
|
description: '10 ton overhead crane',
|
|
quantity: 1,
|
|
unit: 'set',
|
|
unitPrice: 4500000,
|
|
amount: 4500000
|
|
},
|
|
{
|
|
id: 'qt-3-item-2',
|
|
topic: 'IoT',
|
|
description: 'Remote monitoring package',
|
|
quantity: 1,
|
|
unit: 'set',
|
|
unitPrice: 700000,
|
|
amount: 700000
|
|
}
|
|
],
|
|
topics: [
|
|
{
|
|
id: 'qt-3-topic-1',
|
|
type: 'scope',
|
|
label: 'Scope',
|
|
items: ['Supply', 'Install', 'Commission']
|
|
},
|
|
{
|
|
id: 'qt-3-topic-2',
|
|
type: 'payment',
|
|
label: 'Payment',
|
|
items: ['50% deposit', '40% delivery', '10% handover']
|
|
},
|
|
{
|
|
id: 'qt-3-topic-3',
|
|
type: 'exclusion',
|
|
label: 'Exclusion',
|
|
items: ['Building strengthening']
|
|
}
|
|
],
|
|
followUps: [
|
|
{
|
|
id: 'qt-3-fu-1',
|
|
title: 'Finalize civil scope',
|
|
dueDate: '2026-06-15',
|
|
ownerName: 'Krit S.',
|
|
status: 'open'
|
|
}
|
|
],
|
|
attachments: [],
|
|
approvalSteps: [],
|
|
auditEventIds: []
|
|
},
|
|
{
|
|
id: 'qt-4',
|
|
code: 'QT2606-003',
|
|
enquiryId: 'enq-3',
|
|
quotationDate: '2026-06-03',
|
|
validUntil: '2026-07-03',
|
|
quotationType: 'official',
|
|
project: 'Cold Chain Rooftop Solar',
|
|
siteLocation: 'Chiang Mai DC',
|
|
customerRoles: [
|
|
{ role: 'owner', customerId: 'cus-3', contactId: 'ct-5' },
|
|
{ role: 'consultant', customerId: 'cus-5', contactId: 'ct-9' }
|
|
],
|
|
salesmanId: 'sp-3',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'chn',
|
|
status: 'sent',
|
|
revision: 0,
|
|
totalAmount: 6100000,
|
|
chancePercent: 49,
|
|
isHotProject: true,
|
|
approvedPdfUrl: '/mock/qt2606-003.pdf',
|
|
items: [
|
|
{
|
|
id: 'qt-4-item-1',
|
|
topic: 'Solar',
|
|
description: '500 kWp rooftop system',
|
|
quantity: 1,
|
|
unit: 'lot',
|
|
unitPrice: 5900000,
|
|
amount: 5900000
|
|
},
|
|
{
|
|
id: 'qt-4-item-2',
|
|
topic: 'Monitoring',
|
|
description: 'EMS dashboard',
|
|
quantity: 1,
|
|
unit: 'lot',
|
|
unitPrice: 200000,
|
|
amount: 200000
|
|
}
|
|
],
|
|
topics: [
|
|
{ id: 'qt-4-topic-1', type: 'scope', label: 'Scope', items: ['EPC turnkey'] },
|
|
{ id: 'qt-4-topic-2', type: 'payment', label: 'Payment', items: ['30/60/10'] },
|
|
{
|
|
id: 'qt-4-topic-3',
|
|
type: 'exclusion',
|
|
label: 'Exclusion',
|
|
items: ['Transformer upgrade']
|
|
}
|
|
],
|
|
followUps: [
|
|
{
|
|
id: 'qt-4-fu-1',
|
|
title: 'Follow up board decision',
|
|
dueDate: '2026-06-11',
|
|
ownerName: 'Ton A.',
|
|
status: 'open'
|
|
}
|
|
],
|
|
attachments: [
|
|
{
|
|
id: 'qt-4-att-1',
|
|
fileName: 'financial-model.xls',
|
|
fileType: 'xls',
|
|
uploadedAt: '2026-06-03T12:00:00.000Z'
|
|
}
|
|
],
|
|
approvalSteps: [
|
|
{
|
|
id: 'qt-4-ap-1',
|
|
level: 1,
|
|
approverName: 'Regional Sales Manager',
|
|
approverPosition: 'Regional Manager',
|
|
status: 'approved',
|
|
actedAt: '2026-06-03T11:00:00.000Z'
|
|
}
|
|
],
|
|
auditEventIds: ['audit-4']
|
|
},
|
|
{
|
|
id: 'qt-5',
|
|
code: 'QT2606-004',
|
|
enquiryId: 'enq-5',
|
|
quotationDate: '2026-06-06',
|
|
validUntil: '2026-07-06',
|
|
quotationType: 'service',
|
|
project: 'Annual Crane PM',
|
|
siteLocation: 'Ayutthaya Plant',
|
|
customerRoles: [{ role: 'owner', customerId: 'cus-2', contactId: 'ct-4' }],
|
|
salesmanId: 'sp-1',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'bkk',
|
|
status: 'approved',
|
|
revision: 0,
|
|
totalAmount: 980000,
|
|
chancePercent: 53,
|
|
isHotProject: false,
|
|
approvedPdfUrl: '/mock/qt2606-004.pdf',
|
|
items: [
|
|
{
|
|
id: 'qt-5-item-1',
|
|
topic: 'Service',
|
|
description: 'PM contract 12 months',
|
|
quantity: 1,
|
|
unit: 'lot',
|
|
unitPrice: 980000,
|
|
amount: 980000
|
|
}
|
|
],
|
|
topics: [
|
|
{
|
|
id: 'qt-5-topic-1',
|
|
type: 'scope',
|
|
label: 'Scope',
|
|
items: ['Quarterly PM', 'Emergency call support']
|
|
},
|
|
{ id: 'qt-5-topic-2', type: 'payment', label: 'Payment', items: ['100% after PO'] },
|
|
{ id: 'qt-5-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Spare parts'] }
|
|
],
|
|
followUps: [
|
|
{
|
|
id: 'qt-5-fu-1',
|
|
title: 'Await PO',
|
|
dueDate: '2026-06-17',
|
|
ownerName: 'Nicha P.',
|
|
status: 'open'
|
|
}
|
|
],
|
|
attachments: [],
|
|
approvalSteps: [
|
|
{
|
|
id: 'qt-5-ap-1',
|
|
level: 1,
|
|
approverName: 'Service GM',
|
|
approverPosition: 'GM Service',
|
|
status: 'approved',
|
|
actedAt: '2026-06-07T10:00:00.000Z'
|
|
}
|
|
],
|
|
auditEventIds: []
|
|
},
|
|
{
|
|
id: 'qt-6',
|
|
code: 'QT2606-005',
|
|
enquiryId: 'enq-6',
|
|
quotationDate: '2026-05-26',
|
|
validUntil: '2026-06-25',
|
|
quotationType: 'budgetary',
|
|
project: 'Solar Canopy Feasibility',
|
|
siteLocation: 'Chiang Rai Service Center',
|
|
customerRoles: [{ role: 'owner', customerId: 'cus-5', contactId: 'ct-9' }],
|
|
salesmanId: 'sp-3',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'chn',
|
|
status: 'lost',
|
|
revision: 0,
|
|
totalAmount: 2400000,
|
|
chancePercent: 0,
|
|
isHotProject: false,
|
|
items: [
|
|
{
|
|
id: 'qt-6-item-1',
|
|
topic: 'Solar',
|
|
description: 'Canopy concept and EPC budget',
|
|
quantity: 1,
|
|
unit: 'lot',
|
|
unitPrice: 2400000,
|
|
amount: 2400000
|
|
}
|
|
],
|
|
topics: [
|
|
{ id: 'qt-6-topic-1', type: 'scope', label: 'Scope', items: ['Concept study'] },
|
|
{ id: 'qt-6-topic-2', type: 'payment', label: 'Payment', items: ['50/50'] },
|
|
{ id: 'qt-6-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Authority permit'] }
|
|
],
|
|
followUps: [],
|
|
attachments: [],
|
|
approvalSteps: [],
|
|
auditEventIds: ['audit-5']
|
|
},
|
|
{
|
|
id: 'qt-7',
|
|
code: 'QT2606-006',
|
|
enquiryId: 'enq-4',
|
|
quotationDate: '2026-06-09',
|
|
validUntil: '2026-07-09',
|
|
quotationType: 'official',
|
|
project: 'Dock Shelter Retrofit',
|
|
siteLocation: 'Bangna Logistics Hub',
|
|
customerRoles: [{ role: 'consultant', customerId: 'cus-4', contactId: 'ct-7' }],
|
|
salesmanId: 'sp-1',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'bkk',
|
|
status: 'pending_approval',
|
|
revision: 0,
|
|
totalAmount: 1850000,
|
|
chancePercent: 35,
|
|
isHotProject: false,
|
|
items: [
|
|
{
|
|
id: 'qt-7-item-1',
|
|
topic: 'Retrofit',
|
|
description: 'Dock shelter 12 bays',
|
|
quantity: 12,
|
|
unit: 'bay',
|
|
unitPrice: 154166.67,
|
|
amount: 1850000
|
|
}
|
|
],
|
|
topics: [
|
|
{
|
|
id: 'qt-7-topic-1',
|
|
type: 'scope',
|
|
label: 'Scope',
|
|
items: ['Supply and install 12 shelters']
|
|
},
|
|
{ id: 'qt-7-topic-2', type: 'payment', label: 'Payment', items: ['50/50'] },
|
|
{ id: 'qt-7-topic-3', type: 'exclusion', label: 'Exclusion', items: ['Scaffold by others'] }
|
|
],
|
|
followUps: [
|
|
{
|
|
id: 'qt-7-fu-1',
|
|
title: 'Submit approval',
|
|
dueDate: '2026-06-12',
|
|
ownerName: 'Nicha P.',
|
|
status: 'open'
|
|
}
|
|
],
|
|
attachments: [],
|
|
approvalSteps: [
|
|
{
|
|
id: 'qt-7-ap-1',
|
|
level: 1,
|
|
approverName: 'Sales Director',
|
|
approverPosition: 'Director',
|
|
status: 'pending'
|
|
}
|
|
],
|
|
auditEventIds: []
|
|
},
|
|
{
|
|
id: 'qt-8',
|
|
code: 'QT2606-007',
|
|
enquiryId: 'enq-8',
|
|
quotationDate: '2026-06-10',
|
|
validUntil: '2026-07-10',
|
|
quotationType: 'official',
|
|
project: 'Monorail Crane Fast Track',
|
|
siteLocation: 'Lamphun Plant',
|
|
customerRoles: [{ role: 'owner', customerId: 'cus-3', contactId: 'ct-6' }],
|
|
salesmanId: 'sp-3',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'chn',
|
|
status: 'draft',
|
|
revision: 0,
|
|
totalAmount: 740000,
|
|
chancePercent: 28,
|
|
isHotProject: false,
|
|
items: [
|
|
{
|
|
id: 'qt-8-item-1',
|
|
topic: 'Crane',
|
|
description: '1 ton monorail crane',
|
|
quantity: 1,
|
|
unit: 'set',
|
|
unitPrice: 740000,
|
|
amount: 740000
|
|
}
|
|
],
|
|
topics: [
|
|
{ id: 'qt-8-topic-1', type: 'scope', label: 'Scope', items: ['Supply only'] },
|
|
{ id: 'qt-8-topic-2', type: 'payment', label: 'Payment', items: ['100% before delivery'] },
|
|
{
|
|
id: 'qt-8-topic-3',
|
|
type: 'exclusion',
|
|
label: 'Exclusion',
|
|
items: ['Install by customer']
|
|
}
|
|
],
|
|
followUps: [],
|
|
attachments: [],
|
|
approvalSteps: [],
|
|
auditEventIds: []
|
|
},
|
|
{
|
|
id: 'qt-9',
|
|
code: 'QT2606-008',
|
|
enquiryId: 'enq-2',
|
|
quotationDate: '2026-06-08',
|
|
validUntil: '2026-07-08',
|
|
quotationType: 'official',
|
|
project: 'Crane Upgrade Option B',
|
|
siteLocation: 'Samut Sakhon Plant',
|
|
customerRoles: [{ role: 'owner', customerId: 'cus-2', contactId: 'ct-3' }],
|
|
salesmanId: 'sp-1',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'bkk',
|
|
status: 'rejected',
|
|
revision: 0,
|
|
totalAmount: 5450000,
|
|
chancePercent: 22,
|
|
isHotProject: false,
|
|
items: [
|
|
{
|
|
id: 'qt-9-item-1',
|
|
topic: 'Crane',
|
|
description: 'Higher spec option',
|
|
quantity: 1,
|
|
unit: 'set',
|
|
unitPrice: 5450000,
|
|
amount: 5450000
|
|
}
|
|
],
|
|
topics: [
|
|
{ id: 'qt-9-topic-1', type: 'scope', label: 'Scope', items: ['Higher duty cycle spec'] },
|
|
{ id: 'qt-9-topic-2', type: 'payment', label: 'Payment', items: ['40/50/10'] },
|
|
{
|
|
id: 'qt-9-topic-3',
|
|
type: 'exclusion',
|
|
label: 'Exclusion',
|
|
items: ['Building modification']
|
|
}
|
|
],
|
|
followUps: [],
|
|
attachments: [],
|
|
approvalSteps: [
|
|
{
|
|
id: 'qt-9-ap-1',
|
|
level: 1,
|
|
approverName: 'Sales Director',
|
|
approverPosition: 'Director',
|
|
status: 'rejected',
|
|
actedAt: '2026-06-09T13:00:00.000Z',
|
|
comment: 'Margin below target'
|
|
}
|
|
],
|
|
auditEventIds: []
|
|
},
|
|
{
|
|
id: 'qt-10',
|
|
code: 'QT2606-009',
|
|
enquiryId: 'enq-5',
|
|
quotationDate: '2026-06-10',
|
|
validUntil: '2026-07-10',
|
|
quotationType: 'service',
|
|
project: 'Spare Parts Bundle',
|
|
siteLocation: 'Ayutthaya Plant',
|
|
customerRoles: [{ role: 'billing', customerId: 'cus-2', contactId: 'ct-4' }],
|
|
salesmanId: 'sp-1',
|
|
saleAdminId: 'sp-2',
|
|
branchId: 'bkk',
|
|
status: 'accepted',
|
|
revision: 0,
|
|
totalAmount: 420000,
|
|
chancePercent: 100,
|
|
isHotProject: false,
|
|
approvedPdfUrl: '/mock/qt2606-009.pdf',
|
|
items: [
|
|
{
|
|
id: 'qt-10-item-1',
|
|
topic: 'Spare Parts',
|
|
description: 'Critical spare bundle',
|
|
quantity: 1,
|
|
unit: 'lot',
|
|
unitPrice: 420000,
|
|
amount: 420000
|
|
}
|
|
],
|
|
topics: [
|
|
{ id: 'qt-10-topic-1', type: 'scope', label: 'Scope', items: ['Spare bundle supply'] },
|
|
{ id: 'qt-10-topic-2', type: 'payment', label: 'Payment', items: ['100% with PO'] },
|
|
{ id: 'qt-10-topic-3', type: 'exclusion', label: 'Exclusion', items: ['On-site labor'] }
|
|
],
|
|
followUps: [
|
|
{
|
|
id: 'qt-10-fu-1',
|
|
title: 'Coordinate delivery slot',
|
|
dueDate: '2026-06-16',
|
|
ownerName: 'Nicha P.',
|
|
status: 'done'
|
|
}
|
|
],
|
|
attachments: [
|
|
{
|
|
id: 'qt-10-att-1',
|
|
fileName: 'spare-list.doc',
|
|
fileType: 'doc',
|
|
uploadedAt: '2026-06-10T09:00:00.000Z'
|
|
}
|
|
],
|
|
approvalSteps: [
|
|
{
|
|
id: 'qt-10-ap-1',
|
|
level: 1,
|
|
approverName: 'Service GM',
|
|
approverPosition: 'GM Service',
|
|
status: 'approved',
|
|
actedAt: '2026-06-10T08:00:00.000Z'
|
|
}
|
|
],
|
|
auditEventIds: []
|
|
}
|
|
],
|
|
approvals: [
|
|
{
|
|
id: 'approval-1',
|
|
quotationId: 'qt-1',
|
|
quotationCode: 'QT2606-001',
|
|
amount: 2750000,
|
|
productType: 'dockdoor',
|
|
branchId: 'bkk',
|
|
submitterName: 'Nicha P.',
|
|
approverLevel: 2,
|
|
status: 'pending'
|
|
},
|
|
{
|
|
id: 'approval-2',
|
|
quotationId: 'qt-7',
|
|
quotationCode: 'QT2606-006',
|
|
amount: 1850000,
|
|
productType: 'dockdoor',
|
|
branchId: 'bkk',
|
|
submitterName: 'Nicha P.',
|
|
approverLevel: 1,
|
|
status: 'pending'
|
|
},
|
|
{
|
|
id: 'approval-3',
|
|
quotationId: 'qt-3',
|
|
quotationCode: 'QT2606-002',
|
|
amount: 5200000,
|
|
productType: 'crane',
|
|
branchId: 'bkk',
|
|
submitterName: 'Krit S.',
|
|
approverLevel: 1,
|
|
status: 'pending'
|
|
}
|
|
],
|
|
auditEvents: [
|
|
{
|
|
id: 'audit-1',
|
|
entityType: 'quotation',
|
|
entityId: 'qt-1',
|
|
action: 'CREATE',
|
|
actorName: 'Nicha P.',
|
|
detail: 'สร้างใบเสนอราคา QT2606-001',
|
|
createdAt: '2026-06-02T08:15:00.000Z'
|
|
},
|
|
{
|
|
id: 'audit-2',
|
|
entityType: 'approval',
|
|
entityId: 'qt-1',
|
|
action: 'APPROVE',
|
|
actorName: 'Head of Sales',
|
|
detail: 'อนุมัติ level 1',
|
|
createdAt: '2026-06-03T09:30:00.000Z'
|
|
},
|
|
{
|
|
id: 'audit-3',
|
|
entityType: 'quotation',
|
|
entityId: 'qt-2',
|
|
action: 'REVISE',
|
|
actorName: 'Krit S.',
|
|
detail: 'สร้าง revision R01 เพิ่ม safety package',
|
|
createdAt: '2026-06-07T16:00:00.000Z'
|
|
},
|
|
{
|
|
id: 'audit-4',
|
|
entityType: 'quotation',
|
|
entityId: 'qt-4',
|
|
action: 'SEND',
|
|
actorName: 'Ton A.',
|
|
detail: 'ส่งใบเสนอราคาให้ลูกค้าทางอีเมล',
|
|
createdAt: '2026-06-04T10:10:00.000Z'
|
|
},
|
|
{
|
|
id: 'audit-5',
|
|
entityType: 'quotation',
|
|
entityId: 'qt-6',
|
|
action: 'REJECT',
|
|
actorName: 'Customer Board',
|
|
detail: 'ลูกค้าเลือกคู่แข่งเนื่องจากราคา',
|
|
createdAt: '2026-06-08T18:00:00.000Z'
|
|
}
|
|
],
|
|
sequences: [
|
|
{
|
|
id: 'seq-1',
|
|
documentType: 'enquiry',
|
|
prefix: 'ENQ',
|
|
period: '2606',
|
|
branchId: 'bkk',
|
|
currentNumber: 8,
|
|
paddingLength: 3
|
|
},
|
|
{
|
|
id: 'seq-2',
|
|
documentType: 'quotation',
|
|
prefix: 'QT',
|
|
period: '2606',
|
|
branchId: 'bkk',
|
|
currentNumber: 9,
|
|
paddingLength: 3
|
|
},
|
|
{
|
|
id: 'seq-3',
|
|
documentType: 'quotation_revision',
|
|
prefix: 'QT',
|
|
period: '2606',
|
|
branchId: 'bkk',
|
|
currentNumber: 1,
|
|
paddingLength: 2
|
|
}
|
|
],
|
|
masterOptions: [
|
|
{ id: 'mo-1', group: 'status', code: 'new', label: 'New', active: true },
|
|
{
|
|
id: 'mo-2',
|
|
group: 'status',
|
|
code: 'pending_approval',
|
|
label: 'Pending Approval',
|
|
active: true
|
|
},
|
|
{ id: 'mo-3', group: 'product_type', code: 'crane', label: 'Crane', active: true },
|
|
{ id: 'mo-4', group: 'product_type', code: 'dockdoor', label: 'Dock Door', active: true },
|
|
{ id: 'mo-5', group: 'product_type', code: 'solarcell', label: 'Solar Cell', active: true },
|
|
{ id: 'mo-6', group: 'payment_term', code: '40_50_10', label: '40/50/10', active: true },
|
|
{ id: 'mo-7', group: 'currency', code: 'THB', label: 'Thai Baht', active: true },
|
|
{ id: 'mo-8', group: 'tax_rate', code: 'VAT7', label: 'VAT 7%', active: true }
|
|
],
|
|
templates: [
|
|
{
|
|
id: 'tpl-1',
|
|
name: 'Standard Commercial Proposal',
|
|
version: 'v1.2',
|
|
branchId: 'bkk',
|
|
description: 'Template for standard equipment quotation.',
|
|
mappings: [
|
|
{
|
|
id: 'tpl-1-map-1',
|
|
key: 'customer_name',
|
|
placeholder: '{{customer_name}}',
|
|
sourceField: 'customer.name'
|
|
},
|
|
{
|
|
id: 'tpl-1-map-2',
|
|
key: 'project_name',
|
|
placeholder: '{{project_name}}',
|
|
sourceField: 'quotation.project'
|
|
},
|
|
{
|
|
id: 'tpl-1-map-3',
|
|
key: 'quotation_price',
|
|
placeholder: '{{quotation_price}}',
|
|
sourceField: 'quotation.totalAmount'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id: 'tpl-2',
|
|
name: 'Solar EPC Proposal',
|
|
version: 'v0.9',
|
|
branchId: 'chn',
|
|
description: 'Template for solar EPC quotation preview.',
|
|
mappings: [
|
|
{
|
|
id: 'tpl-2-map-1',
|
|
key: 'site_location',
|
|
placeholder: '{{site_location}}',
|
|
sourceField: 'quotation.siteLocation'
|
|
},
|
|
{
|
|
id: 'tpl-2-map-2',
|
|
key: 'approver_names',
|
|
placeholder: '{{approver_names}}',
|
|
sourceField: 'quotation.approvalSteps[].approverName'
|
|
}
|
|
]
|
|
}
|
|
]
|
|
};
|