| Section | Selected Points | Total Points | Cost (HK$) | Waived Cost (HK$) | Final Cost (HK$) |
|---|---|---|---|---|---|
| {{ section.title }} | {{ getSectionStats(section).selectedPoints.toFixed(1) }} | {{ getSectionStats(section).totalPoints.toFixed(1) }} | HK${{ getSectionStats(section).cost.toLocaleString() }} | HK${{ getSectionStats(section).waivedCost.toLocaleString() }} | HK${{ getSectionStats(section).cost.toLocaleString() }} |
| Total Discount | -HK${{ totalDiscountAmount.toLocaleString() }} | ||||
| Total | {{ totalSelectedPoints.toFixed(1) }} | {{ totalPoints.toFixed(1) }} | HK${{ totalCost.toLocaleString() }} | HK${{ totalWaivedCost.toLocaleString() }} | HK${{ finalCost.toLocaleString() }} |
Loading version history...
Loading visit logs...
{{ project.clientName || 'No Client' }}
Last edited: {{ formatTimestamp(project.last_edit_date || project.timestamp) }}
This will be appended to the client name
Parent Project: {{ projectId }}
Client: {{ clientName }}
Preview:
{{ selectedMilestonePreview.join('\n') }}
These remarks will be added to the quotation along with the standard information.
Standard Remarks (will be included automatically):
Estimated Total Team Days: [calculated] Business Days
Total: {{ newMilestone.milestones.reduce((sum, m) => sum + (m.percent || 0), 0) }}%
Start a conversation with the AI Assistant
Ask questions about your project, request changes, or get suggestions
{{ message.text }}
{{ message.text }}
{{ JSON.stringify(change.oldData, null, 2) }}
{{ JSON.stringify(change.newData, null, 2) }}
Customize the AI's behavior by editing the system prompt. This will override the default rules.
{{ generatedFeatureList }}
{{ comment.text }}
Supported formats: JPG, PNG, GIF • Select multiple images
💡 Tip: You can also paste images from clipboard (Ctrl+V / Cmd+V)
{{ viewerImages[currentImageIndex]?.name }}
{{ comment.text }}
{{ comment.text }}
{{ comment.text }}