{{ getViewTitle() }}
View only Loading… Syncing…Searching all bookings...
No matches for "{{ globalSearch }}"
Last import
New bookings added — auto, every 2 min
{{ syncStatus.importAt ? fmtSyncFull(syncStatus.importAt) : 'Awaiting' }}
{{ syncStatus.importAt ? relativeTime(syncStatus.importAt) : '' }}
Last sync
Future bookings refreshed
{{ syncStatus.syncAt ? fmtSyncFull(syncStatus.syncAt) : 'Awaiting' }}
{{ syncStatus.syncAt ? relativeTime(syncStatus.syncAt) : '' }}
Refresh syncs this app to the RMS sheet — it does not pull from eZee. Data also refreshes automatically every 5 min and on tab focus.
{{ errorMessage }}
Team
Filters
{{ activeAdvancedFilterCount }} activeFrom
To
From
To
From
To
{{ selectedRes.length }} selected
#{{ b.resNo }}
{{ b.status }}
{{ b.guest }}
Showing {{ Math.min(bookings.length, pageSize) }} of {{ totalItems }} records
GBV: {{ totalGBV }}
ADR: {{ adr }}
Nights: {{ totalNights }}
Escalated
{{ auditEscalated }} booking{{ auditEscalated === 1 ? '' : 's' }} checked out before yesterday and are still unaudited.
{{ isSuperAdmin() ? 'Only you can clear these.' : 'Escalated to the super-admin.' }}
{{ selectedAudit.length }} selected
| Res # | Src | Status | Guest / Property | Audit Date | Stay | GBV | GST | TA Comm | Agent | Action | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ b.resNo }} |
|
{{ b.status }} |
{{ b.guest }}
{{ propShort(b.property) }}
|
{{ shortDate(auditDateISO(b)) }}
cancellation
|
{{ shortDate(b.checkInISO) }} {{ shortDate(b.checkOutISO) }} · {{ b.nights }}n |
{{ b.gbv }}
Tariff {{ b.nights ? inr(Math.round((b.gbvRaw || 0) / b.nights)) : '—' }}
|
{{ inr(b.gstRaw || 0) }}
{{ Math.round(pctOf(b.gstRaw, b.gbvRaw)) }}% of GBV
|
{{ inr(b.otaCommissionExcRaw || 0) }}
{{ Number(pctOf(b.otaCommissionExcRaw, b.gbvRaw)).toFixed(1) }}% of GBV
|
{{ b.agent || '—' }} |
View only
Done
Not auditable
{{ isEscalated(b) ? 'Super-admin only' : auditBlockReason(b) }}
|
|
| Nothing to show for this filter. | |||||||||||
| Loading… | |||||||||||
{{ calendarMonthTitle }}
All Properties
{{ complex.name }}
{{ p }}
{{ calendarPropFilters.length }} selected
PROPERTY
No properties found.
{{ prop }}
{{ miniViewBooking.guest }}
#{{ miniViewBooking.resNo }}
{{ miniViewBooking.status }}
Total Amount
{{ miniViewBooking.gbv }}
Add a user
Admins
{{ allUsers.filter(u => u.role === 'ADMIN').length }}{{ u.name[0] }}
{{ u.name }}
{{ u.email }}
Managers
{{ allUsers.filter(u => u.role === 'MANAGER').length }}{{ u.name[0] }}
{{ u.name }}
{{ u.email }}
Team
{{ a.name }}
no reports yet
Agents
{{ allUsers.filter(u => u.role === 'AGENT').length }}{{ u.name[0] }}
{{ u.name }}
Reports to
All admin changes save locally in your browser for preview. Backend wiring will land alongside the API Sync work.
Sources & icons
Pick an icon for each source you've ever received a booking from. Unmatched sources fall back to a globe.
| Source | Preview | Icon |
|---|---|---|
| {{ src }} |
|
Status colours
Each unique reservation status from your bookings sheet appears here. Pick a tone for its label.
| Status | Preview | Colour |
|---|---|---|
| {{ st }} | {{ st }} |
Auto-assignment
How should new (non-Direct) reservations be assigned to agents?
Mode
Source → Agent
{{ src }}
Round-robin pool
{{ a.name }}
No agents added yet — add some under Users & Teams.
Next pick: {{ nextRoundRobinAgent || '—' }}
Owner Postings
{{ op.total.toLocaleString() }} records
Current FY · {{ opSplitRows.length }} rows · {{ opSplit.totalGBV }} GBV
{{ opSplit.error }}
| Res. No. | Property | Guest | Check In | Check Out | GBV (ex tax) |
|---|---|---|---|---|---|
| Loading… | |||||
| No bookings this financial year. | |||||
| {{ r.resNo }}SPLIT | {{ r.property }}· {{ r.bedrooms }} BR | {{ r.guest }} | {{ r.checkIn }} | {{ r.checkOut }} | {{ r.gbv }} |
| Res. No. | Verif | Status | Source | SM Property Allocation | Cost Centre | Guest Name | Mobile | Adt | Kid | Tot | Res Date | Check In | Check Out | Nts | CO Month | Plan | GBV ex tax | GST | TA Comm | PG | Other | NBV | NBPP |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| No postings match. | |||||||||||||||||||||||
| {{ r.res_no }}SPLIT | {{ r.verification_status || '—' }} | {{ r.booking_status || '—' }} | {{ r.source || '—' }} | {{ r.sm_property_allocation }} | {{ r.cost_centre || '—' }} | {{ r.guest_name || '—' }} | {{ r.mobile || '—' }} | {{ r.adults_share ?? '—' }} | {{ r.kids_share ?? '—' }} | {{ r.total_guests_share ?? '—' }} | {{ r.res_date ? r.res_date.slice(0,10) : '—' }} | {{ r.check_in || '—' }} | {{ r.check_out || '—' }} | {{ r.nights ?? '—' }} | {{ r.check_out_month ? r.check_out_month.slice(0,7) : '—' }} | {{ r.rate_plan || '—' }} | {{ inr(r.gbv_share) }} | {{ inr(r.tax_share) }} | {{ inr(r.commission_share) }} | {{ r.ded_pg_charges ? inr(r.ded_pg_charges) : '—' }} | {{ r.ded_other ? inr(r.ded_other) : '—' }} | {{ inr(r.nbv) }} | {{ inr(r.nbpp) }} |
Showing {{ (op.page - 1) * op.pageSize + 1 }}–{{ Math.min(op.page * op.pageSize, op.total) }} of {{ op.total.toLocaleString() }}
GBV {{ inr(op.summary.total_gbv) }}
GST {{ inr(op.summary.total_taxes) }}
Comm {{ inr(op.summary.total_commission) }}
NBV {{ inr(op.summary.total_nbv) }}
Nights {{ op.summary.total_nights.toLocaleString() }}
{{ op.page }} / {{ Math.max(1, Math.ceil(op.total / op.pageSize)) }}
| Property | BHK | Owner | Bookings | GBV | NBV |
|---|---|---|---|---|---|
| No properties match. | |||||
| {{ p.sm_property_name }} | {{ p.bedrooms }} | {{ p.bookings_count }} | {{ inr(p.total_gbv) }} | {{ inr(p.total_nbv) }} | |
Portfolio Calendar
{{ calMultiFilteredProperties().length }} properties · {{ calMulti.bookings.length }} bookings
{{ calMultiRangeLabel() }}
Booked
Comp Stay
Block
Cancelled
No properties match the filter.
Property
{{ ['Su','Mo','Tu','We','Th','Fr','Sa'][dt.getDay()] }}
{{ dt.getDate() }}
{{ prop }}
{{ ['January','February','March','April','May','June','July','August','September','October','November','December'][cal.month] }} {{ cal.year }}
Pick a property.
{{ d }}
{{ dt.getDate() }}
Booked
Comp Stay
Block
Cancelled
Property mapping
Map every eZee room to the SM property allocation(s) it sells as. Mother rooms map to multiple SM properties (different owners); Child rooms map to exactly one.
{{ pmList.length }} of {{ pmTotal }} mappings
| eZee Room | Type | SM Property Allocation | |
|---|---|---|---|
| {{ m.ezee_room_no }} | Mother Child Unmapped | {{ n }} — | |
| No mappings match. | |||
Property list
Every SM property from the Supply Monitor import — the master behind property mapping and the mother-booking room split. Read-only.
{{ propertyListRows.length }} of {{ propertyList.rows.length }} properties
{{ propertyList.error }}
| Property | Bedrooms | Type |
|---|---|---|
| Loading properties… | ||
| No properties found. | ||
| {{ p.name }} | {{ p.bedrooms }} BR | {{ p.type }}— |
Charge mapping
Tag every eZee charge (room & extra) as Accommodation, Concierge or F&B. Any new charge added in eZee shows up here automatically as unmapped. This drives the split in each booking's Charges tab.
{{ ccm.error }}
{{ ccmList().length }} of {{ ccm.counts.total }} · {{ ccm.counts.unmapped }} unmapped
Scanning charges…
| Charge Name | Seen As | Count | Category |
|---|---|---|---|
| {{ row.name }} | Room Extra Room + Extra saved | {{ row.count ? row.count.toLocaleString() : '—' }} |
{{ row.appliesFrom }}
|
| {{ ccm.rows.length === 0 ? 'No charges found yet.' : 'No charges match.' }} | |||