Change Password
Logout
${project.title}
3D
Floors
Table
Add Unit
Plans
AI Import
CSV Import
Export Units
Visibility:
All
Status:
All
Active filters:
"${search}"
Visible Only
Hidden Only
Available
Reserved/Sold
Clear all
Sales Progress
${ salesPercent }%
${ matrixStats.sold }
Sold
${ matrixStats.reserved }
Reserved
${ matrixStats.available }
Available
ALL
F${ fs.floor }
${ fs.available }/${ fs.total }
ALL
F${ fs.floor }
Available (${ matrixStats.available })
Reserved (${ matrixStats.reserved })
Sold (${ matrixStats.sold })
๐ฑ Drag: Rotate
โ Scroll: Zoom
๐ Click unit
Tap unit โข Double-tap for details
All
Available
${ matrixStats.total }
Total Units
${ matrixStats.available }
Available
${ matrixStats.reserved }
Reserved
${ matrixStats.sold }
Sold
Click unit for details
F${floor}
${unit.uid}
No units to display
${item.floor}
${item.uid}
${item.fstatus}
${item.view}
${item.type}
${item.style}
${item.currency}
${formatNumber(item.price, '0,0')}
${formatNumber(item.total_area, '0,0.00')} sqft
${getPlanInitials(item.plan_title)}
โ
-
Import Units
Download a sample CSV
Import
AI-Powered Import
${aiWizard.error}
Paste your spreadsheet data below. You can copy-paste directly from Excel, Google Sheets, or any spreadsheet.
Tip: Include headers in the first row. The AI will automatically detect and map columns.
Normalize with AI
AI is processing your data...
Detecting columns, normalizing types, and validating data
Validation Warnings
${warning}
${aiWizard.units.length}
units ready to import
${item.price ? formatNumber(item.price, '0,0') : 'Missing'}
Back
Import ${aiWizard.units.length} Units
${aiWizard.importErrors.length > 0 ? 'mdi-alert-circle' : 'mdi-check-circle'}
${aiWizard.importErrors.length > 0 ? 'Import Completed with Warnings' : 'Import Successful!'}
${aiWizard.importResult.imported || 0} units imported successfully
Errors:
${err}
Done
Reservation
${rsvpUnit.uid}
Purchaser ${i+1}
Add Representative
Representative ${i+1}
Add another purchaser
Company Details
Add Representative
Company Representative
${ rsvpValidationMessage }
Attach Reservation
Share Unit
${shareUnit.uid}
Preview
Enable sharing to generate a link
Unit Editor
${eitem.uid}
#${eitem.id}
Floor Plan
No floor plan available. Manage floor plans in Project Settings.
Save
${theUnit.uid}
${theUnit.fstatus}
Floor ${theUnit.floor}
ยท ${theUnit.view} View
Price
${theUnit.currency}
${formatNumber(theUnit.price, '0,0')}
Area
${formatNumber(theUnit.total_area, '0,0')}
sqft
Actions
Reserve
Edit
Sell
Share
Documents
Sales Offer
Agreement
Property Details
Type
${theUnit.type}
(${theUnit.style})
Baths
${theUnit.bath}
Parking
${theUnit.parking}
Built-up
${formatNumber(theUnit.bua_area, '0,0')}
sqft
Payment Plan
${theUnit.plan_title}
Floor Plan
Reservation
Purchaser ${index+1}
${res.title || ''} ${res.firstName || ''} ${res.lastName || ''}
${res.email}
${res.mobile || res.phone}
Nationality:
${res.nationality}
Passport:
${res.passport}
Agency:
${theUnit.reservation[0].agency}
ยท ${theUnit.reservation[0].representative}
Reserved ${formatDate(theUnit.reserved_at)}
Reservation details restricted
Mark as Sold
Cancel
Cancel Sale
Bulk Actions
${selected.length} units selected
Visibility
Hide
Show
Lock Status
Unlock
Lock
Payment Plan
Apply to ${selected.length} Units
${ snackMessage }
Close
Generating Document
Please wait...
${selected.length} unit${selected.length > 1 ? 's' : ''} selected
${showComparison ? 'Hide' : 'Compare'}
Group Offer
Bulk
${unit.uid}
Status
${unit.fstatus}
Type
${unit.type}
Floor
${unit.floor}
Area
${formatNumber(unit.total_area, '0,0')} sqft
Price
${unit.currency} ${formatNumber(unit.price, '0,0')}
Price/sqft
${unit.total_area ? formatNumber(unit.price / unit.total_area, '0,0') : '-'}
View
${unit.view || '-'}
AI Report
${aiReport.error}