โš ๏ธ

Invoice Access Error

{{ publicInvoiceError }}

App Logo
HX

{{ publicInvoiceData.appName || 'Hextron PMS' }}

Guest Folio & Invoice Portal

Document Reference
{{ publicInvoiceData.reservation?.folioNumber || 'FOLIO-PENDING' }}
Guest Name
{{ publicInvoiceData.reservation?.guestName }}
Status: โ— {{ publicInvoiceData.reservation?.status }}
๐Ÿจ Property Location
{{ publicInvoiceData.property?.name || 'Hextron Hotel Partner' }}
{{ publicInvoiceData.property?.location || 'Hextron Hotels Group, UK' }}
Tel: {{ publicInvoiceData.property?.contact }}
Email: {{ publicInvoiceData.property?.email }}
๐Ÿ—“๏ธ Stay Duration
Check-In: {{ publicInvoiceData.reservation?.checkInDate }}
Check-Out: {{ publicInvoiceData.reservation?.checkOutDate }}
Room Assigned: Room {{ publicInvoiceData.room?.roomNumber || 'N/A' }} ({{ publicInvoiceData.reservation?.roomType }})
Nights: {{ getStayNights(publicInvoiceData.reservation?.checkInDate, publicInvoiceData.reservation?.checkOutDate) }} Nights
โš ๏ธ Deposit Limit Exceeded Notice

The guest's total checkout incidentals & damage charges of {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ (Number(publicInvoiceData.reservation?.extraCharges || 0) + Number(publicInvoiceData.reservation?.damageCharges || 0)).toFixed(2) }} exceeded the held security deposit of {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Number(publicInvoiceData.reservation?.depositAmount || 0).toFixed(2) }}. The remaining excess balance of {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ ((Number(publicInvoiceData.reservation?.extraCharges || 0) + Number(publicInvoiceData.reservation?.damageCharges || 0)) - publicInvoiceData.reservation?.depositAmount).toFixed(2) }} was appended to the final room ledger settlement due at checkout.

Itemized Folio Transactions & Room Ledger
Description Unit Price Qty / Nights Total Amount
โ†ณ {{ item.name }} {{ item.badge }} {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Number(item.unitPrice).toFixed(2) }} {{ item.unitPrice }} {{ item.qty }} + {{ Math.sign(item.total) === -1 ? '-' : '' }}{{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Math.abs(Number(item.total || 0)).toFixed(2) }}
Total Stay Duration: {{ getInvoiceSummaryMetrics(publicInvoiceData.reservation).totalNights }} Nights
Total Room Accommodation Base Charges: {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(publicInvoiceData.reservation).accommodationTotal).toFixed(2) }}
Total Certified Taxes & Levies (Exclusive): + {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(publicInvoiceData.reservation).taxesTotal).toFixed(2) }}
โ†ณ Of which, Inclusive Taxes (Included in room charges above): ({{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(publicInvoiceData.reservation).inclusiveTaxesTotal).toFixed(2) }})
Total Incidentals & Extra Charges: + {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(publicInvoiceData.reservation).extrasTotal).toFixed(2) }}
Security / Incidentals Deposit (Paid): + {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(publicInvoiceData.reservation).depositCollected).toFixed(2) }}
Security Deposit Released / Deducted: - {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(publicInvoiceData.reservation).depositRefunded || getInvoiceSummaryMetrics(publicInvoiceData.reservation).depositDeducted).toFixed(2) }}
Final Settled Bill Total: {{ getPropertyCurrency(publicInvoiceData.reservation?.propertyId) }} {{ Number(getInvoiceGrandTotal(publicInvoiceData.reservation)).toFixed(2) }}
โœ” Digitally Signed & Approved
Guest Signature No Signature on File
Signed on check-in for checkout clearance verification.

Note: All values are calculated in the property local currency. Mini-bar items and damages are verified during checkout inspection.

Thank you for staying with Hextron Hotels. We look forward to welcoming you back.

Return to Home
๐Ÿ“… {{ currentDateTime || 'Syncing clock...' }}
โฑ๏ธ Session: {{ sessionDurationStr }}
Operator: {{ currentUser?.fullname || 'Operator' }}
Role:
Privilege: {{ currentUser?.role }}
App Logo

{{ appName }} v2.4.5

Property Management System
Active: โ˜… Default
Database Connection Failure: {{ dbError }}. Please verify server connection.
Active Bookings
{{ reservations.filter(r => (!selectedPropertyId || r.propertyId === selectedPropertyId) && r.status !== 'Cancelled' && r.status !== 'CheckedOut').length }} active
Rooms Occupied
{{ reservations.filter(r => (!selectedPropertyId || r.propertyId === selectedPropertyId) && r.status === 'CheckedIn').length }} of {{ rooms.filter(r => !selectedPropertyId || r.propertyId === selectedPropertyId).length }}
Dirty Rooms (Housekeeping)
{{ rooms.filter(r => (!selectedPropertyId || r.propertyId === selectedPropertyId) && r.cleaningStatus === 'Dirty').length }} needs cleaning
Blocked Rooms (Operational)
{{ rooms.filter(r => (!selectedPropertyId || r.propertyId === selectedPropertyId) && r.cleaningStatus === 'Blocked').length }} out of service
Maintenance Block
{{ rooms.filter(r => (!selectedPropertyId || r.propertyId === selectedPropertyId) && r.maintenanceStatus === 'Under Maintenance').length }} inactive rooms

Occupancy & OTA Sync Live Channel Board system-monitored

{{ prop.name }} โ˜… Default

{{ prop.location }}

{{ prop.code }}
Assigned Hotel Managers:
๐Ÿ‘” {{ mgr.fullname }} (@{{ mgr.username }})
โš ๏ธ No managers assigned (Super Admin only)
Today Ins
{{ getArrivalsCount(prop.id) }}
Today Outs
{{ getDeparturesCount(prop.id) }}
Currency
{{ prop.currency }}
๐Ÿข Property: Filter Source: Status:
๐Ÿ“… Date Range Filter: to
โ‡… Sort By:

Database Reservation Register

{{ filteredReservations.length }} items resolved
Guest & Source Property / Room Category Check In / Out Rate / Total Status Actions
{{ res.guestName }}
{{ res.source }} #{{ res.externalBookingId }}
{{ getPropertyCode(res.propertyId) }}
Room {{ getRoomNumber(res.roomId) || 'Pending Auto' }}
{{ res.roomType }}
{{ res.checkInDate }}
to {{ res.checkOutDate }} ({{ getStayNights(res.checkInDate, res.checkOutDate) }} Nights)
{{ getPropertyCurrency(res.propertyId) }} {{ res.ratePerNight }}/night
Total: {{ getPropertyCurrency(res.propertyId) }} {{ res.totalAmount }}
{{ getStatusLabel(res.status) }} Archived
No bookings found for the selected filter limits.
๐Ÿข

Property Selection Required

Please select an active hotel property to unlock property-specific Room Type Categories and Room Inventory configuration sheets.

Active Property:
Configuring room inventory rows for the selected property
{{ r.type }}

Room {{ r.roomNumber }}

{{ r.maintenanceStatus }}
Clean State:
๐Ÿข Floor {{ r.floor }} No floor spec

Manage Room Type Categories

Configure rates, capacities, and custom features for each category tier.

No room categories registered yet for this property. Click above to create one!

{{ cat.id }}

{{ cat.name }}

{{ getPropertyCurrency(selectedPropertyId) }} {{ cat.basePrice }}
per night
๐Ÿ‘ค Max Capacity: {{ cat.capacity }} โ€ข ๐Ÿ›๏ธ Rooms Count: {{ getRoomsCountForCategory(cat.id) }} active
{{ amenity }}
๐Ÿข

Property Selection Required

Please select an active hotel property to view the live interactive Room status grid.

Occupancy Rate
{{ roomViewStats.occupancyRate }}% of {{ roomViewStats.total }} rooms
Occupied Rooms
{{ roomViewStats.occupied }}

Checked-in & Active

Arriving Today
{{ roomViewStats.reserved }}

Reserved/Pending

Vacant & Ready
{{ roomViewStats.vacant }}

Vacant Rooms

Housekeeping Needs
{{ roomViewStats.clean }} Clean
{{ roomViewStats.dirty }} Dirty

Maint: {{ roomViewStats.maintenance }} blocked

Hotel Property
Floor Zone
Occupancy Status
Housekeeping Status
Grid Size Density
Search Room View
๐Ÿ”
No rooms match your filter criteria. Try adjusting your floor or status selections.
Dynamic Matrix Map: Click grid cell to manage or hover for details
Vacant Occupied Arriving
{{ r.roomNumber }}
Fl.{{ r.floor || '?' }} {{ r.cleaningStatus === 'Clean' ? 'โœ“' : r.cleaningStatus === 'Dirty' ? '๐Ÿงน' : r.cleaningStatus === 'Inspect' ? '๐Ÿ”' : '๐Ÿ”' }}
Room {{ r.roomNumber }} {{ r.type }}
Occupancy: {{ getRoomStatus(r).label }}
Guest Name: {{ getRoomStatus(r).res.guestName }}
Cleaning: {{ r.cleaningStatus }}
โš ๏ธ Under Maintenance
Click cell to open actions

Room {{ r.roomNumber }}

Floor {{ r.floor || 'N/A' }}

{{ r.cleaningStatus === 'Clean' ? 'โœ“' : r.cleaningStatus === 'Dirty' ? '๐Ÿงน' : r.cleaningStatus === 'Inspect' ? '๐Ÿ”' : '๐Ÿ”' }}
๐Ÿ‘ค {{ getRoomStatus(r).res.guestName }} Arriving: {{ getRoomStatus(r).res.guestName }} โœจ Vacant
{{ r.type }} ๐Ÿ”ง Blocked โ— Operational

Room {{ r.roomNumber }} Fl. {{ r.floor || 'N/A' }}

{{ r.type }}

{{ getRoomStatus(r).label }}

Active Guest

{{ getRoomStatus(r).res.guestName }}

Out: {{ getRoomStatus(r).res.checkOutDate }} {{ getRoomStatus(r).res.source }}

Arriving Guest

{{ getRoomStatus(r).res.guestName }}

In: {{ getRoomStatus(r).res.checkInDate }} {{ getRoomStatus(r).res.source }}

โœจ Vacant & Ready

Available for walk-in or assignment

State: {{ r.cleaningStatus === 'Clean' ? 'โœ“' : r.cleaningStatus === 'Dirty' ? '๐Ÿงน' : r.cleaningStatus === 'Inspect' ? '๐Ÿ”' : '๐Ÿ”' }} {{ r.cleaningStatus }}
๐Ÿ”ง Out-of-Order โ— OK
{{ selectedRoomDetail.type }}

Room {{ selectedRoomDetail.roomNumber }} โ€ข Details Panel

Floor {{ selectedRoomDetail.floor || 'N/A' }} โ€ข Property Specific Controls

Housekeeping
Maintenance Status

๐Ÿ‘ค Live Reservation & Guest Information

๐Ÿ›๏ธ

This Room is Vacant

No checked-in guests or immediate arrivals are assigned to Room {{ selectedRoomDetail.roomNumber }}. You can assign walk-ins from the reservations panel.

{{ getRoomStatus(selectedRoomDetail).label }}
{{ getRoomStatus(selectedRoomDetail).res.guestName }}

ID: {{ getRoomStatus(selectedRoomDetail).res.id }} โ€ข Source: {{ getRoomStatus(selectedRoomDetail).res.source }}

Nightly Rate
{{ getPropertyCurrency(selectedRoomDetail.propertyId) }} {{ getRoomStatus(selectedRoomDetail).res.ratePerNight }}/night
Total: {{ getPropertyCurrency(selectedRoomDetail.propertyId) }} {{ getRoomStatus(selectedRoomDetail).res.totalAmount }}
๐Ÿ“… Check-In Date
{{ getRoomStatus(selectedRoomDetail).res.checkInDate }}
๐Ÿ“… Check-Out Date
{{ getRoomStatus(selectedRoomDetail).res.checkOutDate }}
โณ Stay Duration
{{ getStayNights(getRoomStatus(selectedRoomDetail).res.checkInDate, getRoomStatus(selectedRoomDetail).res.checkOutDate) }} Nights (Original: {{ getStayNights(getRoomStatus(selectedRoomDetail).res.checkInDate, getRoomStatus(selectedRoomDetail).res.checkOutDate) - getRoomStatus(selectedRoomDetail).res.extensions.reduce((sum, ext) => sum + Number(ext.additionalNights || 0), 0) }} + Extended: {{ getRoomStatus(selectedRoomDetail).res.extensions.reduce((sum, ext) => sum + Number(ext.additionalNights || 0), 0) }} Nights)
PMS Core Dynamic Sync

๐Ÿ‘ฅ Guest Ledger & Directory

Manage complete guest history profiles, travel document references, and loyalty notes.

Guest Information Nationality / Doc ID Stays Count Total Value Actions
No guest profiles found matching criteria.
{{ g.name.split(' ').map(n => n[0]).join('').substring(0,2).toUpperCase() }}
{{ g.name }}
๐Ÿ“ง {{ g.email }} โ€ข ๐Ÿ“ž {{ g.phone }}
๐Ÿ“ {{ g.country }}
๐Ÿชช {{ g.documentId }}
{{ g.stayCount }} stay{{ g.stayCount !== 1 ? 's' : '' }}
{{ getPropertyCurrency(selectedPropertyId) }} {{ g.totalSpent.toLocaleString() }}

๐Ÿข Corporate, Travel Agents & OTA Partners

Track third-party booking channels, company profiles, and agreed commission rates.

Partner Details Type Commission Phone / Email Actions
No registered partners match search queries.
{{ ptn.name }}
๐Ÿ“ {{ ptn.address || 'No Address Specified' }}
{{ ptn.type }} {{ ptn.commissionRate }}%
{{ ptn.phone || 'N/A' }}
{{ ptn.email || 'N/A' }}
๐Ÿงน

Housekeeping & Store Inventory Management

Approval Privileges Active

Manage room turnover status, store inventory stock, requisition approvals, room allocations, and cleaner shifts.

๐Ÿงน Room Cleaning Status Matrix

Total Rooms: {{ rooms.length }}
Room {{ r.roomNumber }} {{ r.type }}
{{ getPropertyCode(r.propertyId) }} โ€ข Floor {{ r.floor || '1' }}
Catalog Items
{{ housekeepingSupplies.length }}
In Store Room
{{ housekeepingSupplies.reduce((acc, s) => acc + Number(s.quantity), 0) }}
Issued To Rooms
{{ housekeepingSupplies.reduce((acc, s) => acc + Number(s.issuedQuantity || 0), 0) }}
Low Stock Alerts
{{ lowStockSuppliesCount }}

Store Room Master Inventory

Showing {{ filteredHousekeepingSupplies.length }} items
{{ sup.name }}
{{ sup.category }}
Low Stock
Store Stock
{{ sup.quantity }} {{ sup.unit }}
Issued to Rooms
{{ sup.issuedQuantity || 0 }} {{ sup.unit }}

๐Ÿ“‹ Store Room Release Requisitions

Requisitions require Property Admin or Housekeeping Supervisor approval before store items are released to rooms.

No store requisitions recorded. Click "New Requisition" to submit a request.
Requisition #{{ req.id }} Target: Room {{ req.roomNumber }}
{{ req.requestedAt }} {{ req.status }}
Requested By
{{ req.requestedBy }}
Purpose / Reason
"{{ req.reason }}"
Items Requested
โ€ข {{ item.quantity }}x {{ item.supplyName }}
Approved by: {{ req.approvedBy }} at {{ req.approvedAt }} Rejected by: {{ req.approvedBy }} (Reason: {{ req.rejectionReason }}) โณ Awaiting Property Admin or Housekeeping Supervisor release approval...

๐Ÿจ Active Room Linen & Appliance Allocations

Real-time inventory tracking showing which bedsheets, pillow covers, iron boxes, or appliances are currently deployed in each guest room.

No active room allocations recorded. Requisitions approved by Property Admin will automatically allocate items here.
Room {{ alloc.roomNumber }} {{ alloc.status }}
{{ alloc.allocatedAt }}
{{ alloc.quantity }}x {{ alloc.supplyName }}
Issued by: {{ alloc.allocatedBy }}

๐Ÿ“œ Store Room Movement Audit Trail

Total logs: {{ housekeepingLogs.length }}
Timestamp Action Supply Item Qty Location / Target Operator Notes
{{ lg.timestamp }} {{ lg.action }} {{ lg.supplyName }} {{ lg.quantity }} {{ lg.targetRoom }} {{ lg.operator }} {{ lg.notes }}

๐Ÿงน Housekeeping Staff Shift Roster

Shift Duty
{{ staff.name }}
{{ staff.status }}
Zone: {{ staff.floorZone }}
Completed Rooms Today: {{ staff.completedRoomsToday }}

๐Ÿ” Lost & Found Inventory Log

Record found belongings, manage guest claims, and track disposition status.

No lost & found items recorded yet. Click "Log New Item" to register a found item.
{{ item.itemName }}
๐Ÿ“ Location: {{ item.locationFound }} ๐Ÿ“… Date: {{ item.dateFound }}
๐Ÿ‘ค Found By: {{ item.foundByStaff }}
๐Ÿ“ {{ item.notes }}
Claimant: {{ item.claimantName }} โœ… Handed Over

๐Ÿฝ๏ธ Restaurant & Room Service Kitchen

Manage F&B orders, kitchen ticket progress, and guest room-delivery assignments.

๐Ÿ’ต Total Sales: {{ getPropertyCurrency(selectedPropertyId) }} {{ foodOrders.reduce((sum, o) => sum + (o.status === 'Delivered' ? o.price : 0), 0).toFixed(2) }}
Total Active Orders
{{ foodOrders.filter(o => (!selectedPropertyId || o.propertyId === selectedPropertyId) && o.status !== 'Delivered').length }}
๐Ÿฝ๏ธ
Pending Kitchen
{{ foodOrders.filter(o => (!selectedPropertyId || o.propertyId === selectedPropertyId) && o.status === 'Pending').length }}
โณ
In Preparation
{{ foodOrders.filter(o => (!selectedPropertyId || o.propertyId === selectedPropertyId) && o.status === 'Preparing').length }}
๐Ÿณ
Delivered Today
{{ foodOrders.filter(o => (!selectedPropertyId || o.propertyId === selectedPropertyId) && o.status === 'Delivered').length }}
๐Ÿš€
๐Ÿ”
Filter:
โณ Pending Approval {{ getFilteredActiveOrders('Pending').length }}
{{ (order.reservationId === 'walk-in' || order.customerType === 'Walk-In') ? ('๐Ÿšถ ' + (order.roomNumber || 'Table')) : ('๐Ÿจ Room ' + order.roomNumber) }} {{ getPropertyCurrency(order.propertyId) }} {{ Number(order.price).toFixed(2) }}
Guest: {{ order.guestName }}
PAID ROOM FOLIO UNPAID
โฑ๏ธ {{ getKitchenTimeElapsed(order.createdAt) }} โšก URGENT (>15m)
โ–ธ {{ itemStr }}
โœ๏ธ Special Prep: {{ order.notes }}
โœ… Paid
No pending orders queue
๐Ÿณ In Kitchen (Preparing) {{ getFilteredActiveOrders('Preparing').length }}
{{ (order.reservationId === 'walk-in' || order.customerType === 'Walk-In') ? ('๐Ÿšถ ' + (order.roomNumber || 'Table')) : ('๐Ÿจ Room ' + order.roomNumber) }} {{ getPropertyCurrency(order.propertyId) }} {{ Number(order.price).toFixed(2) }}
Guest: {{ order.guestName }}
PAID ROOM FOLIO UNPAID
โฑ๏ธ Cooking: {{ getKitchenTimeElapsed(order.createdAt) }} โšก URGENT (>15m)
๐Ÿ”ฅ {{ itemStr }}
โœ๏ธ Special Prep: {{ order.notes }}
โœ… Paid
No orders currently cooking
๐Ÿ”” Ready & Hot {{ getFilteredActiveOrders('Ready').length }}
{{ (order.reservationId === 'walk-in' || order.customerType === 'Walk-In') ? ('๐Ÿšถ ' + (order.roomNumber || 'Table')) : ('๐Ÿจ Room ' + order.roomNumber) }} {{ getPropertyCurrency(order.propertyId) }} {{ Number(order.price).toFixed(2) }}
Guest: {{ order.guestName }}
PAID ROOM FOLIO UNPAID
โฑ๏ธ Ready: {{ getKitchenTimeElapsed(order.createdAt) }}
โœ… {{ itemStr }}
โœ๏ธ Notes: {{ order.notes }}
โœ… Paid
No orders awaiting dispatch
Served & Closed Orders
{{ foodOrders.filter(o => (!selectedPropertyId || o.propertyId === selectedPropertyId) && o.status === 'Delivered').length }}
๐Ÿ“ฆ
Total Sales Revenue
{{ getPropertyCurrency(selectedPropertyId) }} {{ foodOrders.filter(o => (!selectedPropertyId || o.propertyId === selectedPropertyId) && o.status === 'Delivered').reduce((sum, o) => sum + (Number(o.price) || 0), 0).toFixed(2) }}
๐Ÿ’ฐ
Directly Paid Orders
{{ foodOrders.filter(o => (!selectedPropertyId || o.propertyId === selectedPropertyId) && o.status === 'Delivered' && o.paymentStatus === 'Paid').length }}
โœ…
Room Folio / Unpaid
{{ foodOrders.filter(o => (!selectedPropertyId || o.propertyId === selectedPropertyId) && o.status === 'Delivered' && o.paymentStatus !== 'Paid').length }}
๐Ÿจ
๐Ÿ”
Sort:
Show:
Location / ID Guest Name Dishes & Items Total Amount Payment Actions
{{ (order.reservationId === 'walk-in' || order.customerType === 'Walk-In') ? ('๐Ÿšถ ' + (order.roomNumber || 'Table')) : ('๐Ÿจ Room ' + order.roomNumber) }} #{{ order.id ? order.id.toString().slice(-6) : 'N/A' }}
๐Ÿ‘ค {{ order.guestName }}
{{ parseOrderItemsList(order).join(', ') }}
โœ๏ธ {{ order.notes }}
{{ getPropertyCurrency(order.propertyId) }} {{ Number(order.price).toFixed(2) }} PAID ROOM FOLIO UNPAID
{{ (order.reservationId === 'walk-in' || order.customerType === 'Walk-In') ? ('๐Ÿšถ ' + (order.roomNumber || 'Table')) : ('๐Ÿจ Room ' + order.roomNumber) }} โœ… Served
๐Ÿ‘ค {{ order.guestName }} PAID ROOM FOLIO UNPAID
โ–ช {{ itemStr }}
โœ๏ธ {{ order.notes }}
Order #{{ order.id ? order.id.toString().slice(-6) : 'N/A' }} {{ getPropertyCurrency(order.propertyId) }} {{ Number(order.price).toFixed(2) }}
No closed or served orders match your filter criteria.
Showing Page {{ closedOrdersPage }} of {{ getClosedOrdersTotalPages() }} ({{ getFilteredClosedOrders().length }} total closed orders)
๐Ÿ”
{{ item.emoji || '๐Ÿฝ๏ธ' }} {{ item.category }}

{{ item.name }}

{{ item.description }}

{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(item.price).toFixed(2) }}
๐Ÿฝ๏ธ No menu items match your search. Try adding new items in the Menu Manager tab!

๐Ÿ›’ F&B Cart Info

{{ item.emoji }}
{{ item.name }}
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(item.price).toFixed(2) }}
{{ item.quantity }}
๐Ÿ›’ Cart is empty. Select items from the catalog!
Charge to Hotel Room Bill?
Bill: {{ getPropertyCurrency(selectedPropertyId) }} {{ getPosCartGrandTotal().toFixed(2) }}
{{ posAmountTendered >= getPosCartGrandTotal() ? '๐ŸŽ Return Change to Guest:' : 'โš ๏ธ Amount Still Due:' }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Math.abs(posAmountTendered - getPosCartGrandTotal()).toFixed(2) }}
Subtotal {{ getPropertyCurrency(selectedPropertyId) }} {{ getPosCartSubtotal().toFixed(2) }}
Service Charge ({{ restaurantTaxConfig.serviceChargePercent }}%) {{ getPropertyCurrency(selectedPropertyId) }} {{ getPosCartSvc().toFixed(2) }}
Sales Tax / GST ({{ restaurantTaxConfig.salesTaxPercent }}%) {{ getPropertyCurrency(selectedPropertyId) }} {{ getPosCartTax().toFixed(2) }}
Total Amount {{ getPropertyCurrency(selectedPropertyId) }} {{ getPosCartGrandTotal().toFixed(2) }}

โœจ {{ menuForm.id ? 'Edit Menu Item' : 'Create Menu Item' }}

{{ menuForm.emoji }} {{ menuForm.name || 'Dishes Preview' }}

๐Ÿ“– Restaurant Menu Directory

Item Category Description Price Actions
{{ item.emoji }} {{ item.name }} {{ item.category }} {{ item.description || '-' }} ${{ Number(item.price).toFixed(2) }}
No menu items available. Create items on the left side!

โš™๏ธ F&B Tax & Service Charge Configuration

%

Applied to item subtotal before government taxes.

%

Applied on (Subtotal + Service Charge) per tax compliance standards.

If checked, taxes and service charges are back-calculated from menu prices.

๐Ÿ“Š Live Bill Tax Simulation

Sample Item (Wagyu Burger) {{ getPropertyCurrency(selectedPropertyId) }} 100.00
Service Charge ({{ restaurantTaxConfig.serviceChargePercent }}%) + {{ getPropertyCurrency(selectedPropertyId) }} {{ (100 * (restaurantTaxConfig.serviceChargePercent / 100)).toFixed(2) }}
Sales Tax / GST ({{ restaurantTaxConfig.salesTaxPercent }}%) + {{ getPropertyCurrency(selectedPropertyId) }} {{ ((100 + (100 * (restaurantTaxConfig.serviceChargePercent / 100))) * (restaurantTaxConfig.salesTaxPercent / 100)).toFixed(2) }}
Total Guest Bill {{ getPropertyCurrency(selectedPropertyId) }} {{ (100 + (100 * (restaurantTaxConfig.serviceChargePercent / 100)) + ((100 + (100 * (restaurantTaxConfig.serviceChargePercent / 100))) * (restaurantTaxConfig.salesTaxPercent / 100))).toFixed(2) }}
๐Ÿ’ก Compliance Note: Changes to F&B Service Charge and GST will apply automatically to all POS cart calculations, kitchen tickets, and guest room charge postings.

๐Ÿ’ต Cash Change & Audit Guide

โœ… Automatic Change Calculator Active

When cash is selected at POS, Food Collect Modal, or Check-Out Settlement, the system calculates and displays return change in real time.

โ€ข Bill: $180.00
โ€ข Cash Received: $200.00
โ€ข Return Change: $20.00

๐Ÿฝ๏ธ New Kitchen / Room Service Order

Luxury Catalog Items:

๐Ÿ’ฐ Collect Food Bill Payment

Order #{{ selectedFoodOrderForPayment.id }}
{{ selectedFoodOrderForPayment.guestName }} ({{ selectedFoodOrderForPayment.roomNumber }})
Amount Due: {{ getPropertyCurrency(selectedFoodOrderForPayment.propertyId) }} {{ Number(selectedFoodOrderForPayment.price).toFixed(2) }}
Bill: {{ getPropertyCurrency(selectedFoodOrderForPayment.propertyId) }} {{ Number(selectedFoodOrderForPayment.price).toFixed(2) }}
{{ foodAmountTendered >= selectedFoodOrderForPayment.price ? '๐ŸŽ Return Change to Guest:' : 'โš ๏ธ Amount Still Due:' }} {{ getPropertyCurrency(selectedFoodOrderForPayment.propertyId) }} {{ Math.abs(foodAmountTendered - selectedFoodOrderForPayment.price).toFixed(2) }}
๐Ÿฝ๏ธ

Food Order Details

ID: {{ selectedViewFoodOrder.id }}
Destination {{ (selectedViewFoodOrder.reservationId === 'walk-in' || selectedViewFoodOrder.customerType === 'Walk-In') ? ('๐Ÿšถ ' + selectedViewFoodOrder.roomNumber) : ('๐Ÿจ Room ' + selectedViewFoodOrder.roomNumber) }} Guest: {{ selectedViewFoodOrder.guestName }}
Status & Timestamp {{ selectedViewFoodOrder.status }} {{ selectedViewFoodOrder.createdAt ? new Date(selectedViewFoodOrder.createdAt).toLocaleString() : 'N/A' }}
Items Summary
{{ it.emoji || '๐Ÿฝ๏ธ' }} {{ it.name }} x{{ it.quantity }}
{{ getPropertyCurrency(selectedViewFoodOrder.propertyId) }} {{ (it.price * it.quantity).toFixed(2) }}
{{ selectedViewFoodOrder.items }}
Subtotal {{ getPropertyCurrency(selectedViewFoodOrder.propertyId) }} {{ Number(selectedViewFoodOrder.subtotal).toFixed(2) }}
Service Charge {{ getPropertyCurrency(selectedViewFoodOrder.propertyId) }} {{ Number(selectedViewFoodOrder.serviceCharge).toFixed(2) }}
Sales Tax / GST {{ getPropertyCurrency(selectedViewFoodOrder.propertyId) }} {{ Number(selectedViewFoodOrder.taxAmount).toFixed(2) }}
Total Amount {{ getPropertyCurrency(selectedViewFoodOrder.propertyId) }} {{ Number(selectedViewFoodOrder.price).toFixed(2) }}
Payment Method: {{ selectedViewFoodOrder.paymentMethod || 'Cash' }}
Payment Status: {{ selectedViewFoodOrder.paymentStatus }}
๐Ÿ’ต Cash Received: {{ getPropertyCurrency(selectedViewFoodOrder.propertyId) }} {{ Number(selectedViewFoodOrder.amountTendered).toFixed(2) }} ๐ŸŽ Return Change: {{ getPropertyCurrency(selectedViewFoodOrder.propertyId) }} {{ Number(selectedViewFoodOrder.changeReturned || 0).toFixed(2) }}
โœ๏ธ Notes: {{ selectedViewFoodOrder.notes }}

๐Ÿงบ Housekeeping & Laundry Command

Manage in-house linen washing (bed sheets, towels, curtains) and premium guest personal laundry tickets.

Active Guest Laundry Tickets {{ laundryOrders.filter(l => l.type !== 'InHouse' && (!selectedPropertyId || l.propertyId === selectedPropertyId)).length }} Total Tickets
Room / Guest Service Type Pieces Billing & Payment Status Price Instructions Laundry Status Actions
Room {{ order.roomNumber }}
{{ order.guestName }}
{{ order.serviceType }} {{ order.pieces }} pcs
{{ order.chargeToRoom ? '๐Ÿ’ณ Charged to Room Folio' : '๐Ÿ’ต Paid Directly' }} {{ order.paymentStatus || 'Unpaid' }}
{{ getPropertyCurrency(order.propertyId) }} {{ Number(order.price || 0).toFixed(2) }} {{ order.notes || '--' }} {{ order.status }}
Pay separately:
No active guest laundry service tickets registered.
Active Hotel Linen Operations (In-House Washing) {{ laundryOrders.filter(l => l.type === 'InHouse' && (!selectedPropertyId || l.propertyId === selectedPropertyId)).length }} Linen Batches
Linen Item Type Total Quantity Source / Collected From Registered At Special Cleaning Notes Process Phase Progress Stage Action
๐Ÿจ
{{ order.linenType }}s
Bulk Hotel Property
{{ order.pieces }} pieces {{ order.roomNumber || 'Housekeeping Storage' }} {{ new Date(order.createdAt).toLocaleString() }} {{ order.notes || 'No special requirements.' }} {{ order.status }} Ready for Room Distribution
No hotel bulk linen laundry operations currently active.
๐Ÿท๏ธ Service Pricing & Rate Card Catalog

Laundry Services Rate Card Manager

Configure laundry service options, set base prices per item/piece, and customize instructions for guest tickets.

Active Services: {{ laundryServices.length }} Services

{{ service.name }}

{{ service.category || 'Standard' }}
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(service.price).toFixed(2) }} / {{ service.unit || 'per piece' }}

{{ service.description || 'Standard hotel laundry & garment treatment.' }}

Active Option
โž•
Add New Laundry Service Custom pricing, category & unit

๐Ÿงบ Create Guest Personal Laundry Ticket

๐Ÿจ Register Bulk In-House Linen Collection

๐Ÿท๏ธ {{ editingLaundryService ? 'Edit Laundry Service Option' : 'Add New Laundry Service Option' }}

๐Ÿš—

Front Office Parking & Valet Command Center

Allocate designated parking bays, manage real-time valet key vaults & vehicle retrievals, configure slot rates, and process folio charges.

Total Slots / Capacity
{{ parkingMetrics.totalSlots }} ({{ parkingMetrics.occupancyRate }}% Occupied)
Available Vacant Bays
{{ parkingMetrics.vacantCount }} / {{ parkingMetrics.totalSlots }}
Ready for check-in guests
โšก EV Chargers Free
{{ parkingMetrics.evAvailable }} Stations
Fast charging hub ready
Active Parked Revenue
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(parkingMetrics.totalFees).toFixed(2) }}
Active daily spot charges
๐Ÿ”
Bay Code & Type Zone Location Bay Status Assigned Guest / Room Vehicle Plate Daily Rate & Billing Actions
{{ slot.slotNumber }} โšก ๐Ÿ‘‘ โ™ฟ ๐Ÿ”‘ {{ slot.type }}
{{ slot.zone || 'Ground Level Deck' }} {{ slot.status }}
๐Ÿ‘ค {{ slot.guestName || 'Checked-In Guest' }}
Room {{ slot.roomNumber || 'N/A' }}
โ€”
๐Ÿš˜ {{ slot.vehicleNumber }} No Plate
{{ getPropertyCurrency(slot.propertyId || selectedPropertyId) }} {{ Number(slot.parkingFee || 0).toFixed(2) }} {{ slot.paymentStatus || 'Unpaid' }}
Settle:
๐Ÿš—
No Parking Bays Match Your Search

Try clearing search or zone filters.

{{ slot.slotNumber }} โšก ๐Ÿ‘‘ โ™ฟ ๐Ÿ”‘
{{ slot.status }}
{{ slot.zone || 'Ground Level Deck' }}
{{ slot.guestName || 'Checked-In Guest' }}
Room {{ slot.roomNumber || 'N/A' }} Parked {{ slot.parkedAt }}
๐Ÿš˜ {{ slot.vehicleNumber || 'NO PLATE' }}
Rate: {{ getPropertyCurrency(slot.propertyId || selectedPropertyId) }} {{ Number(slot.parkingFee || 0).toFixed(2) }} {{ slot.paymentStatus || 'Unpaid' }}
{{ slot.chargeToRoom ? '๐Ÿ’ณ Charged to Folio' : '๐Ÿ’ต Direct Payment' }} ๐Ÿ”‘ {{ slot.valetStatus }}
Bay Ready
Rate: {{ getPropertyCurrency(slot.propertyId) }} {{ Number(slot.parkingFee || 15).toFixed(2) }}/day
๐Ÿ”ง Under Maintenance
{{ slot.notes || 'Out of order' }}
Settle Direct:
๐Ÿš—
No Parking Slots Match Your Filters

Try resetting search filters or click "Add Parking Slot" to create custom bays.

Slot Code Zone Type Status Assigned Guest / Room Vehicle Plate Daily Rate Payment Actions
{{ slot.slotNumber }} {{ slot.zone || 'Ground Level Deck' }} {{ slot.type }} {{ slot.status }}
{{ slot.guestName }}
Room {{ slot.roomNumber }}
โ€”
{{ slot.vehicleNumber }} โ€” {{ getPropertyCurrency(slot.propertyId) }} {{ Number(slot.parkingFee || 0).toFixed(2) }} {{ slot.paymentStatus || 'Unpaid' }} โ€”

๐Ÿ”‘ Valet Dispatch & Key Vault Control

Track active valet tickets, key tag numbers, key vault lockers, and real-time car retrieval porch dispatches.

๐Ÿ” Parked & Vaulted {{ activeValetQueue.filter(v => v.valetStatus === 'Parked').length }}
{{ ticket.keyTag || 'K-101' }} Vault: {{ ticket.lockerNumber || 'Locker-01' }}
{{ ticket.guestName }}
Room {{ ticket.roomNumber }} | Slot {{ ticket.slotNumber }}
๐Ÿš˜ {{ ticket.vehicleNumber }} {{ ticket.vehicleDetails || 'Sedan' }}
No valet cars currently parked.
โณ Retrieval Requested {{ activeValetQueue.filter(v => v.valetStatus === 'Retrieval Requested').length }}
{{ ticket.keyTag }} Requested {{ ticket.retrievalRequestedAt || 'Just now' }}
{{ ticket.guestName }}
Room {{ ticket.roomNumber }} - Slot {{ ticket.slotNumber }}
๐Ÿš˜ {{ ticket.vehicleNumber }}
No retrieval requests pending.
๐ŸŽ๏ธ Runner En Route {{ activeValetQueue.filter(v => v.valetStatus === 'Retrieving').length }}
{{ ticket.keyTag }} Key Fetched
{{ ticket.guestName }}
๐Ÿš˜ {{ ticket.vehicleNumber }}
No runners currently retrieving cars.
โœจ Ready at Porch {{ activeValetQueue.filter(v => v.valetStatus === 'Ready at Porch').length }}
{{ ticket.keyTag }} AT PORCH
{{ ticket.guestName }}
๐Ÿš˜ {{ ticket.vehicleNumber }}
No cars waiting at porch.

๐Ÿ“ Zone Locations Catalog ({{ parkingZones.length }})

Configure parking areas, decks, basements & charging wings.

Zone Name Floor / Level Bays Actions
{{ zone.name }}
{{ zone.description }}
{{ zone.level || 'Surface' }} {{ parkingAssignments.filter(s => s.zone === zone.name).length }}
No zone locations defined. Click "+ Add Zone" or "Reset" to populate.

๐Ÿท๏ธ Bay Types & Default Rates ({{ parkingBayTypes.length }})

Manage bay classifications, icons, EV charger types and base rates.

Type & Icon Default Rate Bays Actions
{{ type.icon || '๐Ÿš˜' }} {{ type.name }}
{{ type.description }}
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(type.defaultFee || 0).toFixed(2) }} / {{ type.feeType || 'Daily' }} {{ parkingAssignments.filter(s => s.type === type.name).length }}
No bay types defined. Click "+ Add Bay Type" or "Reset" to populate.

๐Ÿ…ฟ๏ธ Individual Parking Bays & Rates Inventory

Define parking slots, assign zone locations, set custom spot rates, and toggle maintenance status.

Slot Code Zone Location Bay Type Base Fee Rate Charging Frequency Current Status Actions
{{ slot.slotNumber }} {{ slot.zone || 'Ground Level Deck' }} {{ slot.type }} {{ getPropertyCurrency(slot.propertyId) }} {{ Number(slot.parkingFee || 0).toFixed(2) }} {{ slot.feeType || 'Daily' }} {{ slot.status }}

๐Ÿ“Š Parking Occupancy & Revenue Intelligence

Occupancy Velocity
{{ parkingMetrics.occupancyRate }}%

{{ parkingMetrics.occupiedCount }} occupied out of {{ parkingMetrics.totalSlots }} total property slots.

Folio Charges Pending Settlement
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(parkingMetrics.totalFees).toFixed(2) }}

Direct room folio parking charges queued for guest checkout.

EV Charging Station Utilization
{{ parkingAssignments.filter(s => s.type === 'EV Fast Charger' && s.status === 'Occupied').length }} / {{ parkingAssignments.filter(s => s.type === 'EV Fast Charger').length }}

Active fast charging sessions in progress.

๐Ÿš— Allocate Parking Slot ({{ selectedParkingSlot?.slotNumber }})

If left blank, guest's registered vehicle plate from check-in will be mapped.

๐Ÿ”‘ New Valet Service Ticket

โš™๏ธ {{ editingParkingSlot ? 'Edit Parking Slot Configuration' : 'Add New Parking Slot' }}

๐Ÿ“ {{ editingZone ? 'Edit Zone Location' : 'Add New Zone Location' }}

๐Ÿท๏ธ {{ editingBayType ? 'Edit Bay Type' : 'Add New Bay Type' }}

๐Ÿ“Š Reports & Revenue Intelligence Hub

Financial performance, occupancy metrics, RevPAR, department breakdowns and night audit ledger closeouts for {{ getPropertyName(selectedPropertyId) }}.

Period:
From:
to
To:
๐Ÿ’ฐ
Total Property Revenue
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.totalRevenue).toFixed(2) }}
Rooms: {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.roomRevenue).toFixed(0) }} โ€ข F&B/Services: {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.foodRevenue + reportKPIs.laundryRevenue + reportKPIs.parkingRevenue).toFixed(0) }}
๐Ÿจ
Average Occupancy Rate
{{ Number(reportKPIs.occupancyRate).toFixed(1) }}%
{{ reportKPIs.occupiedRooms }} occupied out of {{ reportKPIs.totalRooms }} available property rooms.
๐Ÿท๏ธ
ADR (Average Daily Rate)
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.adr).toFixed(2) }}
Average room rate realized across occupied room nights.
โšก
RevPAR (Rev Per Available Room)
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.revPAR).toFixed(2) }}
Total room revenue divided by total available inventory.

๐Ÿ“Š Department Revenue Distribution Total: {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.totalRevenue).toFixed(2) }}

๐Ÿจ Room Accommodation Charges {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.roomRevenue).toFixed(2) }} ({{ reportKPIs.totalRevenue > 0 ? ((reportKPIs.roomRevenue/reportKPIs.totalRevenue)*100).toFixed(1) : 0 }}%)
๐Ÿฝ๏ธ Food & Beverage Dining / Room Service {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.foodRevenue).toFixed(2) }} ({{ reportKPIs.totalRevenue > 0 ? ((reportKPIs.foodRevenue/reportKPIs.totalRevenue)*100).toFixed(1) : 0 }}%)
๐Ÿงบ Guest Dry Cleaning & Laundry Services {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.laundryRevenue).toFixed(2) }} ({{ reportKPIs.totalRevenue > 0 ? ((reportKPIs.laundryRevenue/reportKPIs.totalRevenue)*100).toFixed(1) : 0 }}%)
๐Ÿš— Parking Deck & Valet Service Fees {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.parkingRevenue).toFixed(2) }} ({{ reportKPIs.totalRevenue > 0 ? ((reportKPIs.parkingRevenue/reportKPIs.totalRevenue)*100).toFixed(1) : 0 }}%)

๐Ÿ“‹ Booking Volume Summary Selected Range: {{ reportStartDate }} to {{ reportEndDate }}

Total Reservations
{{ reportKPIs.totalReservations }}
Bookings recorded in period
Room Nights Sold
{{ reportKPIs.roomNights }}
Cumulative night stays
Direct Bookings
{{ reportFilteredReservations.filter(r => r.channel === 'Direct' || !r.channel).length }}
Walk-in or direct portal
OTA / Partner Channels
{{ reportFilteredReservations.filter(r => r.channel && r.channel !== 'Direct').length }}
Booking.com, Agoda, Expedia, etc.

๐Ÿ›๏ธ Category Occupancy & Revenue Summary {{ reportCategoryMetrics.length }} Categories Listed

Category Name Total Inventory Occupied Rooms Occupancy % Category Revenue Category ADR
{{ cat.categoryName }} {{ cat.totalRooms }} {{ cat.occupiedRooms }} {{ Number(cat.occupancyRate).toFixed(1) }}% {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cat.totalRevenue).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cat.adr).toFixed(2) }}
No categories found for selected property.

โšก Manager's Daily Flash Report

Executive operational and financial snapshot for {{ reportStartDate }} to {{ reportEndDate }}

Occupancy Rate
{{ Number(flashReportData.occupancyRate).toFixed(1) }}%
{{ flashReportData.occupiedCount }} / {{ flashReportData.totalRooms }} Rooms
ADR (Avg Rate)
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(flashReportData.adr).toFixed(2) }}
Per occupied room
RevPAR
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(flashReportData.revPar).toFixed(2) }}
Per total room
Gross Revenue
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(flashReportData.grossRevenue).toFixed(2) }}
All departments
In-House Guests
{{ flashReportData.inHouseCount }}
Active checked-in
Expected Arrivals
{{ flashReportData.arrivalsCount }}
{{ flashReportData.departuresCount }} Departures

๐Ÿ’ต Revenue Stream Ledger {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(flashReportData.grossRevenue).toFixed(2) }}

๐Ÿ›๏ธ Room Accommodation Sales {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(flashReportData.roomRevenue).toFixed(2) }}
๐Ÿ” Restaurant & F&B Orders {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(flashReportData.foodRevenue).toFixed(2) }}
๐Ÿ‘” Laundry & Linen POS {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(flashReportData.laundryRevenue).toFixed(2) }}
๐Ÿš— Parking & Valet Services {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(flashReportData.parkingRevenue).toFixed(2) }}

๐Ÿจ Room Inventory & Operations {{ flashReportData.totalRooms }} Total Rooms

โœ“ Occupied Rooms {{ flashReportData.occupiedCount }}
๐Ÿ”‘ Available Vacant Rooms {{ flashReportData.vacantCount }}
๐Ÿ› ๏ธ Out of Order / Maintenance (OOO) {{ flashReportData.oooCount }}
๐Ÿšซ Unclaimed No-Shows {{ flashReportData.noShowsCount }}

๐Ÿ“‹ Guest Operations Manifest

Filterable operational manifests for Front Office and Concierge desk

Booking / Guest Room & Cat Check-In / Out Nights Rate / Total Source Folio Status Actions
{{ res.guestName }}
#{{ res.id }} โ€ข {{ res.guestPhone || res.guestEmail || 'No contact' }}
Room {{ getRoomNumber(res.roomId) }} {{ res.checkInDate }} โ†’ {{ res.checkOutDate }} {{ getStayNights(res.checkInDate, res.checkOutDate) }} {{ getPropertyCurrency(res.propertyId) }} {{ Number((Number(res.rate)||100) * (getStayNights(res.checkInDate, res.checkOutDate)||1)).toFixed(2) }} {{ res.sourceType || 'Direct' }} {{ res.paymentStatus || 'Unpaid' }} {{ res.status }}
No guests match the selected manifest filter.

๐ŸŒ OTA Channel Production & Commission Report

Booking channel distribution, room night contribution, and channel partner commission payable

Channel / Source Bookings Room Nights Gross Revenue ADR Share % Comm. Rate Commission Payable Net Revenue
๐ŸŒ {{ ch.channelName }} {{ ch.bookingsCount }} {{ ch.roomNights }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(ch.grossRevenue).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(ch.adr).toFixed(2) }} {{ Number(ch.sharePct).toFixed(1) }}% {{ ch.commissionRate }}% {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(ch.commissionPayable).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(ch.netRevenue).toFixed(2) }}

๐Ÿ“„ Tax & Government Audit Ledger (GST / VAT)

Government tax ledger breakdown for room charges, F&B, and POS service taxes

Tax Category Tax Slab / Rate Gross Invoiced Total Taxable Net Base Tax Collected Net Sales After Tax
{{ item.category }} {{ item.taxRate }}% {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(item.gross).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(item.taxableBase).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(item.taxAmount).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(item.netSales).toFixed(2) }}
TOTAL GST / TAX AUDIT SUM - {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(taxReportData.totalGross).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(taxReportData.totalTaxableBase).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(taxReportData.totalTaxCollected).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(taxReportData.totalNetSales).toFixed(2) }}

๐Ÿงน Housekeeping & Room Turnaround Status

Real-time room cleanliness, inspection status, and maintenance turnaround

Clean & Inspected
{{ housekeepingReportData.cleanCount }} Rooms
Vacant Dirty
{{ housekeepingReportData.dirtyCount }} Rooms
Occupied Clean / In-Use
{{ housekeepingReportData.occupiedCleanCount }} Rooms
Out of Order (OOO)
{{ housekeepingReportData.oooCount }} Rooms
๐Ÿจ Room Accommodation ๐Ÿ›๏ธ
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.roomRevenue).toFixed(2) }}

Direct room sales, extensions and nightly room charges.

๐Ÿฝ๏ธ Food & Beverage ๐Ÿ”
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.foodRevenue).toFixed(2) }}

Restaurant, bar, room service, and minibar orders.

๐Ÿงบ Laundry Services ๐Ÿ‘”
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.laundryRevenue).toFixed(2) }}

Guest dry cleaning, linen pressing, and laundry service orders.

๐Ÿš— Parking & Valet ๐Ÿ…ฟ๏ธ
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.parkingRevenue).toFixed(2) }}

Deck parking bay rentals and valet handling fees.

๐Ÿ’ต Departmental Revenue Ledger Statement Grand Total: {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.totalRevenue).toFixed(2) }}

Department Center Source Operations Gross Revenue Revenue Contribution
๐Ÿจ Room Accommodation Folio room tariffs, stay extensions, extra bed surcharges {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.roomRevenue).toFixed(2) }} {{ reportKPIs.totalRevenue > 0 ? ((reportKPIs.roomRevenue / reportKPIs.totalRevenue) * 100).toFixed(1) : 0 }}%
๐Ÿฝ๏ธ Food & Beverage Dining In-house dining, room service orders, minibar bills {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.foodRevenue).toFixed(2) }} {{ reportKPIs.totalRevenue > 0 ? ((reportKPIs.foodRevenue / reportKPIs.totalRevenue) * 100).toFixed(1) : 0 }}%
๐Ÿงบ Dry Cleaning & Laundry Guest express laundry, suit pressing, dry cleaning service {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.laundryRevenue).toFixed(2) }} {{ reportKPIs.totalRevenue > 0 ? ((reportKPIs.laundryRevenue / reportKPIs.totalRevenue) * 100).toFixed(1) : 0 }}%
๐Ÿš— Parking & Valet Services Daily parking bay allocation, EV fast charging, valet handling {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.parkingRevenue).toFixed(2) }} {{ reportKPIs.totalRevenue > 0 ? ((reportKPIs.parkingRevenue / reportKPIs.totalRevenue) * 100).toFixed(1) : 0 }}%
Total Net Property Yield: {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.totalRevenue).toFixed(2) }} 100.0%

๐Ÿจ Room Category Occupancy & Performance Real-time status for {{ reportStartDate }} to {{ reportEndDate }}

Room Category Total Inventory Occupied Rooms Vacant / Available Occupancy Rate Category Revenue Average Daily Rate (ADR)
{{ cat.categoryName }} {{ cat.totalRooms }} {{ cat.occupiedRooms }} {{ cat.totalRooms - cat.occupiedRooms }} {{ Number(cat.occupancyRate).toFixed(1) }}% {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cat.totalRevenue).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cat.adr).toFixed(2) }}

๐Ÿ“… Daily Financial & Occupancy Ledger Timeline {{ reportDailyTimeline.length }} Days in Selected Range

Date Occupied / Total Occupancy % Room Rev F&B Rev Laundry Rev Parking Rev Total Rev RevPAR
{{ day.date }} {{ day.occupiedRooms }} / {{ day.totalRooms }} {{ Number(day.occupancyRate).toFixed(1) }}% {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(day.roomRev).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(day.foodRev).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(day.laundryRev).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(day.parkingRev).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(day.totalRev).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(day.revPAR).toFixed(2) }}
No days found in selected date range.
Total City Ledger Invoiced
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cityLedgerData.grandTotalInvoiced).toFixed(2) }}
Corporate & OTA direct-billing ledger
Total A/R Settlements Paid
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cityLedgerData.grandTotalPaid).toFixed(2) }}
Collected corporate payouts & bank transfers
Outstanding A/R Balance
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cityLedgerData.grandTotalOutstanding).toFixed(2) }}
Pending debt collection across accounts
Active City Ledger Accounts
{{ cityLedgerData.accounts.length }}
Corporate clients, OTAs, and post-checkout folios

๐Ÿ“Š Accounts Receivable Aging Analysis Debt Age Classification

Current (0 - 30 Days)
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cityLedgerData.agingSummary.current).toFixed(2) }}
Standard credit terms window
31 - 60 Days Overdue
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cityLedgerData.agingSummary.days31_60).toFixed(2) }}
Follow-up notice required
61 - 90 Days Overdue
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cityLedgerData.agingSummary.days61_90).toFixed(2) }}
Formal demand notice
> 90 Days High Risk
{{ getPropertyCurrency(selectedPropertyId) }} {{ Number(cityLedgerData.agingSummary.over90).toFixed(2) }}
Credit hold / collections

๐Ÿ›๏ธ City Ledger Account Statements {{ cityLedgerData.accounts.length }} Registered Accounts

Account Name Account Type Invoices Invoiced Total Settled Amount Outstanding Balance Aging Status Settlement Action
{{ acc.name }}
{{ acc.contact }}
{{ acc.type }} {{ acc.invoicesCount }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(acc.invoicedTotal).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(acc.paidTotal).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(acc.outstandingBalance).toFixed(2) }} > 90 Days Overdue 61-90 Days 31-60 Days Current โœ“ Fully Settled
No City Ledger accounts or unpaid corporate folios recorded yet.

โš™๏ธ Night Audit Execution Mode & Automation Settings

Configure whether Night Audit is executed manually by Front Office staff or automatically scheduled by the PMS server engine at a specified cutoff hour.

๐Ÿ‘ค Manual Night Audit โœ“ Active

Auditor or Manager manually triggers "Run Night Audit Closeout" at end-of-day after checking all late arrivals, guest folios, and POS registers.

๐Ÿค– Automatic Scheduled Audit โœ“ Active

System runs an automated background audit at a scheduled cutoff time every night, posts room charges, processes No-Shows, and locks the daily ledger.

โฐ Automatic Scheduled Cutoff Parameters

Recommended: 01:00 AM โ€“ 03:00 AM
%
100% = Billed 1st night rate for unclaimed booking

๐ŸŒ™ Night Audit Closeout Ledger & Audit History

Current Execution Mode: {{ nightAuditMode }} (Auto Cutoff at {{ nightAuditAutoTime }})

Audit Date Auditor / User Occupancy Rate Total Revenue Settled Folios Pending Balances Audit Notes Closed Timestamp
{{ audit.auditDate }} {{ audit.auditor }} {{ Number(audit.occupancyRate || 0).toFixed(1) }}% {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(audit.totalRevenue || 0).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(audit.settledFolios || 0).toFixed(2) }} {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(audit.pendingBalances || 0).toFixed(2) }} {{ audit.notes || 'End of day closeout completed successfully.' }} {{ audit.closedAt }}
No night audit closeout records logged yet. Click "Run End-of-Day Night Audit Closeout" to close out today's ledger.

๐ŸŒ™ Run Night Audit Closeout

Closeout Summary Preview ({{ nightAuditForm.date }})
Property: {{ getPropertyName(selectedPropertyId) }}
Total Day Revenue: {{ getPropertyCurrency(selectedPropertyId) }} {{ Number(reportKPIs.totalRevenue).toFixed(2) }}
Occupancy Rate: {{ Number(reportKPIs.occupancyRate).toFixed(1) }}% ({{ reportKPIs.occupiedRooms }}/{{ reportKPIs.totalRooms }} Rooms)
โ„น๏ธ Running night audit will record a permanent closeout snapshot for {{ nightAuditForm.date }} into the cloud database ledger.

๐Ÿ’ณ Settle City Ledger Account

Target Account
{{ cityLedgerSettlementForm.accountName }}
Open Work Orders
{{ maintenanceMetrics.openWorkOrders }} active tickets
Emergency / Urgent
{{ maintenanceMetrics.emergencyCount }} high priority
Rooms Out of Service
{{ maintenanceMetrics.roomsUnderMaintenance }} under repair
Repair Cost Incurred
{{ getPropertyCurrency(selectedPropertyId) }} {{ maintenanceMetrics.totalExpenses.toFixed(2) }} total expenses
๐Ÿ› ๏ธ Contractor Work Portal — Viewing assigned maintenance jobs for {{ currentUser?.fullname || 'Contractor Account' }}
๐Ÿ”’ Restricted Vendor Access

๐Ÿ› ๏ธ Engineering Work Orders & Maintenance Logs

Dispatch repair jobs to contractors, track resolution timers, log spare parts & service charges.

No work order records match your selected filter criteria.
Room {{ issue.roomNumber }} {{ issue.title }} {{ issue.priority }} {{ issue.status }}

{{ issue.description }}

๐Ÿ“… Reported: {{ issue.reportedAt ? issue.reportedAt.replace('T', ' ').substring(0, 16) : 'N/A' }} ๐Ÿ”ง Contractor: {{ getVendorName(issue.vendorId) }} โฑ๏ธ Repair In Progress: {{ formatWorkDuration(issue.startedAt || issue.reportedAt) }} elapsed โฑ๏ธ Solved in {{ formatWorkDuration(issue.startedAt, issue.resolvedAt) }}
โš™๏ธ Repair Cost & Spare Parts Log ๐Ÿ“œ AMC Covered
Spare Parts Replaced:
{{ part.name }} × {{ part.qty }} {{ getPropertyCurrency(selectedPropertyId) }} {{ (part.qty * part.unitPrice).toFixed(2) }}
๐Ÿ› ๏ธ Service Charge: {{ getPropertyCurrency(selectedPropertyId) }} {{ (issue.serviceCharge || 0).toFixed(2) }}
Total Amount Billed: {{ getPropertyCurrency(selectedPropertyId) }} {{ (issue.cost || 0).toFixed(2) }}
๐Ÿ“ Contractor / Resolution Log: {{ issue.resolutionNotes }}

๐Ÿ”ง Authorized Contractor & Vendor Directory

Maintain engineering service providers, emergency fixers, and equipment suppliers.

{{ v.name }}
{{ v.status }}
๐Ÿท๏ธ {{ v.serviceType }}
๐Ÿ‘ค Contact: {{ v.contactPerson }}
๐Ÿ“ž Phone: {{ v.phone }}
โœ‰๏ธ Email: {{ v.email }}
๐Ÿ“œ Contract Type Active AMC Pay-Per-Job
Contract #: {{ v.amcContractNo || 'AMC-GEN-01' }}
Validity: {{ v.amcStartDate || '2026-01-01' }} to {{ v.amcExpiryDate || '2026-12-31' }}
Annual Fee: {{ getPropertyCurrency(selectedPropertyId) }} {{ v.amcAnnualFee }}
๐Ÿ›๏ธ Covered Facilities: {{ v.amcFacilities }}
On-demand contractor. Billed per maintenance job.
๐Ÿ”‘ Contractor Portal Credentials
Username {{ v.username || v.id }}
Password {{ v.password || 'password123' }}
Work Orders: {{ getVendorActiveWorkOrdersCount(v.id) }} active

๐Ÿ“… Scheduled Preventive Maintenance

Regular servicing schedules for HVAC, boilers, elevators, fire alarm systems & infrastructure.

{{ item.title }}

{{ item.frequency }}
Category: {{ item.category }} Next Due: {{ item.nextDueDate }}
Assigned Vendor: {{ getVendorName(item.vendorId) }}

{{ item.notes }}

๐Ÿ“Š Maintenance & Engineering Analytics

Expenditure audit, repair velocity, and contractor performance overview.

Resolution Efficiency
{{ issues.length > 0 ? Math.round((issues.filter(i => i.status === 'Resolved').length / issues.length) * 100) : 0 }}%

Completed work orders vs total logged

Active Out-Of-Service Rooms
{{ rooms.filter(r => r.maintenanceStatus === 'Under Maintenance').length }} / {{ rooms.length }}

Rooms currently locked out of inventory

Active Vendor Contracts
{{ vendors.filter(v => v.status === 'Active').length }}

Contractors on active call dispatch list

Dynamic Rates Matrix

Check room categories below to activate the **Bulk Rate Adjustment Engine**.

{{ cat.name }}
{{ cat.totalRooms }} rooms โ€ข Max {{ cat.capacity }} guests
{{ getPropertyCurrency(selectedPropertyId) }} {{ cat.basePrice }}
base rate
No categories found for this property.

Bulk Adjustment Engine

Modifying {{ selectedCategoryIds.length }} selected category pricing simultaneously.

{{ bulkActionType === 'adjust_percent' ? '%' : getPropertyCurrency(selectedPropertyId) }}

Use negative numbers to discount rates (e.g. -20).

Dynamic Yield Control Registers

{{ pricingRules.length }} rules

{{ rule.name }}

{{ rule.roomType }}

Adjustment Delta: {{ rule.adjustmentType === 'fixed' ? (rule.value >= 0 ? '+' : '') + getPropertyCurrency(selectedPropertyId) + ' ' + rule.value : (rule.value >= 1 ? '+' : '') + Math.round((rule.value - 1) * 100) + '%' }}

Duration envelope: {{ rule.startDate }} to {{ rule.endDate }}
No active yield adjustments defined. Use rule constructor above to dynamically skew pricing calendars.

Seasonal Rate Envelopes

{{ seasonPrices.filter(sp => sp.propertyId === selectedPropertyId).length }} active

{{ sp.name }}

{{ sp.roomCategoryId }}

Seasonal Override Price: {{ getPropertyCurrency(selectedPropertyId) }} {{ sp.seasonalPrice }}

Effective Range: {{ sp.startDate }} to {{ sp.endDate }}
No active seasonal price records. Define overrides above to establish custom holiday/seasonal pricing grids.

External Channels status

{{ ch.id }} Live Connected Syncing Envelopes {{ ch.status }}
Commission: {{ ch.commissionRate }}% Synced: {{ ch.lastSyncedAt ? ch.lastSyncedAt.split(' ')[1] || ch.lastSyncedAt : 'Never' }}

Channel XML Log & SOAP Telemetry Viewer

OTA Webhook Inbound Booking Injector
{{ lg.direction }} {{ lg.action }} {{ lg.timestamp }}
{{ lg.status }}

{{ lg.summary }}

{{ lg.payload }}
No sync payloads captured yet. Engage booking injectors or force sync to populate.
๐Ÿ›’

Direct Booking Engine & Website Integration Suite

Connect your official hotel website directly to Hextron PMS with zero OTA commissions. Features live guest booking engine, copy-paste iFrame widgets, REST APIs, and webhooks.

1. Select Dates
2. Choose Room
3. Guest Info & Payment
4. Confirmation

๐Ÿ” Find Available Rooms & Best Direct Rates

Stay Duration: {{ getBeNights }} Night(s)

๐Ÿจ Available Room Categories ({{ beAvailableCategories.length }})

โšก Best Rate Guarantee โ€ข Direct Booking Discount
๐Ÿ›๏ธ
{{ cat.name }}
{{ cat.availableCount > 0 ? `${cat.availableCount} Available` : 'Sold Out' }}
๐Ÿ‘ค Max {{ cat.capacity }} Guests

{{ cat.name }}

{{ cat.description || 'Spacious room featuring modern amenities, high-speed Wi-Fi, premium bedding and ensuite bathroom.' }}

โœ“ {{ am }}
Rate per night
{{ getPropertyCurrency(bePropertyId) }} {{ Number(cat.basePrice || 0).toFixed(2) }}
Total stay: {{ getPropertyCurrency(bePropertyId) }} {{ (Number(cat.basePrice || 0) * getBeNights).toFixed(2) }} ({{ getBeNights }} nights)
Selected Accommodation

{{ beSelectedCategory.name }}

{{ beCheckIn }} to {{ beCheckOut }} ({{ getBeNights }} Night(s))

{{ getPropertyCurrency(bePropertyId) }} {{ (Number(beSelectedCategory.basePrice || 0) * getBeNights).toFixed(2) }}

Guest Information

โœ“
Direct Booking Confirmed

Reservation Successful!

Your reservation has been recorded in Hextron PMS and synchronized with front desk management.

Confirmation Code {{ beConfirmation.confirmationNumber }}
Status Confirmed
Guest Name {{ beConfirmation.guestName }}
Guest Email {{ beConfirmation.guestEmail }}
Room Category {{ beConfirmation.categoryName }}
Dates {{ beConfirmation.checkInDate }} โ†’ {{ beConfirmation.checkOutDate }}
Total Charged / Due: {{ getPropertyCurrency(bePropertyId) }} {{ Number(beConfirmation.totalAmount || 0).toFixed(2) }}

โš™๏ธ Widget Configurator

Supported Website Builders:

๐ŸŒ WordPress
โœจ Wix / Editor X
โฌ› Webflow
๐Ÿ›๏ธ Shopify / Custom

๐Ÿ“‹ iFrame Embed HTML Snippet

{{ getBeIframeCode }}

How to embed on your website:

  1. Copy the HTML snippet above.
  2. In your website CMS (WordPress / Wix / Webflow), add a Custom HTML / Embed Block.
  3. Paste the code snippet into the block and save/publish your page.
  4. When guests complete a booking on your website, reservations are instantly synced to Hextron PMS!

๐Ÿ”Œ Headless REST API Specification

Developers building custom React, Next.js, iOS/Android mobile apps or custom web frontends can call these public JSON API endpoints.

GET /api.php?action=get_public_booking_catalog

Fetches public properties, room categories, base prices, tax rules, and real-time room availability counts.

curl -X GET "https://your-pms-domain.com/api.php?action=get_public_booking_catalog&propertyId=p1&checkIn=2026-08-01&checkOut=2026-08-03"
POST /api.php?action=create_public_direct_booking

Submits a direct website reservation, registers guest profile, and generates a PMS confirmation voucher.

{ "propertyId": "p1", "categoryName": "Deluxe Sea View Suite", "checkInDate": "2026-08-01", "checkOutDate": "2026-08-03", "guestName": "Sarah Jenkins", "guestEmail": "sarah@example.com", "guestPhone": "+1 555-0199", "paymentMethod": "Credit Card (Website)", "specialRequests": "Honeymoon setup preferred" }

โšก Real-time Webhooks & Notifications

Configure an HTTP POST webhook endpoint to receive immediate event payloads whenever a direct booking occurs.

โœ“ Webhook URL saved successfully! Test ping payloads active.
Sample Webhook Event Payload (`reservation.created`)
{
  "event": "reservation.created",
  "timestamp": "2026-07-22T10:15:00Z",
  "data": {
    "confirmationNumber": "WEB-92F8A1",
    "guestName": "Alexander Wright",
    "guestEmail": "alex@example.com",
    "category": "Executive Suite",
    "checkIn": "2026-08-10",
    "checkOut": "2026-08-12",
    "totalAmount": 480.00,
    "source": "Direct Website Engine"
  }
}

๐ŸŒ Localization Core: Multi-Country Tax Engine

Configure regional VAT, GST, municipal flat lodging fees, and occupancy surcharge rules applied dynamically across property jurisdictions.

๐Ÿ’ก

Malaysia TTx & SST Configuration Recipe

Need to configure taxation rules for Malaysia properties? Follow this blueprint:

๐Ÿ‡ฒ๐Ÿ‡พ Tourism Tax (TTx)
  • โ€ข Value: 10.00 (MYR)
  • โ€ข Calculation Type: Flat Night Rate
  • โ€ข Calculation Method: Exclusive
  • โ€ข Exempt Guest Countries: Malaysia

This will automatically apply RM 10 per night for international tourists, while exempting Malaysian nationals during checkout.

๐Ÿจ Service Tax (SST)
  • โ€ข Value: 8.00 (%)
  • โ€ข Calculation Type: Percentage Rate
  • โ€ข Calculation Method: Exclusive or Inclusive
  • โ€ข Exempt Guest Countries: (Leave empty)

This will calculate the standard 8% Service Tax on all accommodation room services for all guests.

Active Tax Rule Records
Showing {{ taxRules.filter(t => !selectedPropertyId || t.propertyId === selectedPropertyId).length }} active rules for the current property view

{{ rule.name }}

{{ getPropertyName(rule.propertyId) }} ({{ getPropertyCurrency(rule.propertyId) }})

{{ rule.isActive ? 'Active' : 'Paused' }}

{{ rule.description || 'No description provided.' }}

Charge Type Percentage Rate Flat Per Night Flat Per Stay Per Guest / Night
Value {{ rule.rateType === 'percentage' ? '' : getPropertyCurrency(rule.propertyId) + ' ' }} {{ rule.value }} {{ rule.rateType === 'percentage' ? '%' : '' }}
Calculation {{ rule.calculationMethod }}
Rule ID {{ rule.id }}
๐Ÿ›ก๏ธ Exempt Countries: {{ rule.exemptCountries }}
๐ŸŒ

No Tax Rules Active

There are no tax regulations configured for the active property. Click 'Configure New Tax Rule' above to define your first tax rules.

๐Ÿงฎ Interactive Tax Sandbox

Test and audit your property tax rules instantly. Modify inputs below to simulate localized tax calculations and folio breakdowns in real time.

Simulation Folio Breakdown {{ getPropertyCurrency(taxSandbox.propertyId) }}
Accomodation Room Charge (Base): {{ getPropertyCurrency(taxSandbox.propertyId) }} {{ (taxSandbox.rate * taxSandbox.nights).toFixed(2) }}
โ†ณ {{ item.name }} ({{ item.calculationMethod }}) {{ item.calculationMethod === 'exclusive' ? '+' : '' }}{{ getPropertyCurrency(taxSandbox.propertyId) }} {{ item.amount.toFixed(2) }}
No active tax rules apply to this property context
Total Inclusive Taxes (Extracted): {{ getPropertyCurrency(taxSandbox.propertyId) }} {{ calculateBookingTaxes(taxSandbox.propertyId, taxSandbox.rate, taxSandbox.nights, taxSandbox.guests, taxSandbox.guestCountry).totalInclusiveTaxes.toFixed(2) }}
Total Exclusive Taxes (Added On): + {{ getPropertyCurrency(taxSandbox.propertyId) }} {{ calculateBookingTaxes(taxSandbox.propertyId, taxSandbox.rate, taxSandbox.nights, taxSandbox.guests, taxSandbox.guestCountry).totalExclusiveTaxes.toFixed(2) }}
Total Amount with Taxes: {{ getPropertyCurrency(taxSandbox.propertyId) }} {{ calculateBookingTaxes(taxSandbox.propertyId, taxSandbox.rate, taxSandbox.nights, taxSandbox.guests, taxSandbox.guestCountry).totalAmountWithTaxes.toFixed(2) }}

๐Ÿ›ก๏ธ Security Core: User Management & Access Control

Configure employee roles, security keys, and cryptographic access parameters assigned across individual properties.

Database Security Alert {{ userError }}
Authorization Sync Success {{ userSuccess }}

๐Ÿ‘ค PROVISION OPERATOR KEY

๐Ÿ”’ Super Only

๐Ÿ‘ฅ ACTIVE PASS PORTAL REGISTRY ({{ users.length }})

SECURE ACCESS LIST
Operator Info Assigned Location Security Privilege Status Grid Scope Management
@{{ item.username }} YOU
{{ item.fullname }}
{{ item.email || 'No email attached' }}
Group Admin (All)
{{ getPropertyName(item.property_id) }}
{{ item.role }}
{{ Number(item.is_blocked || 0) === 1 ? 'Blocked' : 'Active' }}
No active security credentials found under directory.

๐Ÿ›ก๏ธ OFFICAL ACCESS CONTROL & SCOPE MATRIX

Only supervisor keys matching designated RBAC tags will load dynamic components or write server-side state.

๐Ÿ”‘ Super Admin (Master Group) No scope boundaries. Full system reseed triggers, credentials management, and global PMS overrides.
๐Ÿ‘” Property Executive Manage rates adjustments, guest files, and cleaning statuses. Restricted from modifying secure credentials.

โš™๏ธ Security Settings & Session Auditing Hub

Configure branch authentication policies, monitor real-time operator activities, and manage active system sessions.

Auto-Refresh: {{ logsCountdown }}s Paused
Security Error {{ userError }}
Security Event Success {{ userSuccess }}
๐Ÿ“Š
Today's Sessions {{ todaySessionsCount }}
๐ŸŸข
Active Operators {{ activeSessionsCount }}
๐Ÿ”Œ
Terminations {{ disconnectedSessionsCount }}
๐Ÿ‘ค
Unique Operators {{ uniqueOperatorsCount }}
๐Ÿงฉ System Module Control & Feature Flags

โš™๏ธ Workspace Module Access Controller

Super Admin governance panel to selectively enable or disable functional modules across the property management workspace. Disabled modules are immediately hidden from navigation menus and restricted across operator roles.

Active Modules Status: {{ Object.values(systemModulesConfig).filter(v => v).length }} / {{ systemModulesList.length }} Modules Enabled
{{ mod.icon }}

{{ mod.name }}

{{ mod.category }}

{{ mod.description }}

{{ systemModulesConfig[mod.id] ? 'ACTIVE' : 'DISABLED' }}
๐Ÿ”’ Active Security Policy

๐Ÿ”‘ Front Office Assistant OTP Login Handshake Policy

Configure whether receptionists/hosts (Front Office Assistant role) require a 6-digit cryptographic OTP code generated and sent to the property manager's email to log in. Managers can toggle this branch-by-branch to instantly allow/revoke logins or run password-only sessions.

{{ prop.name }} {{ prop.code }}
Manager Email: {{ getPropertyManagers(prop.id)[0]?.email || 'manager.sg@hextronhotels.com' }}
๐ŸŽจ Application Personalization

๐Ÿท๏ธ App Name & Branding Customization

Update the branding identity of your PMS workspace. The customized name and logo will automatically propagate to the login panel, system margins, booking invoices, and guest notification headers.

โšก Guest Ledger Presets

๐Ÿ›๏ธ Folio Incidental Presets (Minibar & Damaged Items)

Configure standard itemized incidentals and fees (beverages, snacks, lost keycards, or broken/missing linen). These presets will propagate instantly to the Front Office guest checkout ledger panel for one-click checkout calculations.

โž• Add New Preset
{{ getPropertyCurrency(selectedPropertyId || 'prop-1') }}
๐Ÿฅค Mini-Bar Presets ({{ standardIncidentalPresets.filter(p => p.category === 'minibar').length }})
{{ item.name }}
{{ Number(item.price).toFixed(2) }}
No Mini-Bar presets configured.
โš ๏ธ Damage / Missing / Fines ({{ standardIncidentalPresets.filter(p => p.category === 'damage').length }})
{{ item.name }}
{{ Number(item.price).toFixed(2) }}
No Damage/Missing presets configured.
โœจ Draft changes above are temporary until you hit apply to synchronize them with the secure hotel database.

๐Ÿ›ก๏ธ SESSION & ACTIVITY SECURITY AUDIT LOGS ({{ filteredSessionLogs.length }} / {{ sessionLogs.length }})

Real-time monitor tracking active operator session durations, network handshakes, and sign-on histories live.

From: To:
Session Token ID Operator Credentials Authentication Privilege Handshake Login Time Termination / Logout Time Live Session Duration Integrity Status Actions
{{ log.id }}
@{{ log.username }} MY SESSION
{{ log.fullname }}
{{ log.role }} {{ new Date(log.loginTime).toLocaleString() }} {{ new Date(log.logoutTime).toLocaleString() }} Active In-Transit {{ log.duration }} {{ log.status }} Self Session โ€”
No matching authentication session logs recorded in database.
App Logo

{{ (appName || 'Hextron PMS').toUpperCase() }}

Property Management System Portal

{{ loginError }}
๐Ÿ‘ค
๐Ÿ”’
{{ loginError }}

๐Ÿ”’ Verification Required

A verification code has been sent to: {{ managerEmail }}.
Didn't receive the code?
โœจ Verification code sent. Please check your inbox.
Demo Accounts for Testing:
Super Admin: suneeshts@gmail.com
pass: admin123
Manager: cbz545328@gmail.com
pass: manager123
Reception: renjith8080@gmail.com
pass: reception123
HK Supervisor: housekeeping.supervisor@hextronhotels.com
pass: supervisor123
Chef: kitchen.sg@hextronhotels.com
pass: chef123
Contractor (Apex): service@apexplumbing.sg
pass: password123
Shorthand logins are also supported: admin, manager, reception, supervisor, chef, apex_plumbing, or vendor with any password.
© {{ new Date().getFullYear() }} {{ appName }}. All rights reserved.

Create Direct Walk-In Guest Reservation

๐Ÿ‘ค {{ g.name }} {{ g.email }} | {{ g.phone }}
{{ g.country }} โ˜… VIP
No matching guest profiles found. Try another query or select "Fresh Guest Form".
Begin typing above to filter through Hextron's global guest index.
๐Ÿ‘ค {{ guests.find(g => g.id === selectedGuestIdForBooking)?.name }} โ˜… VIP ({{ selectedGuestIdForBooking }})

๐Ÿ“ง {{ guests.find(g => g.id === selectedGuestIdForBooking)?.email || 'N/A' }} | ๐Ÿ“ž {{ guests.find(g => g.id === selectedGuestIdForBooking)?.phone || 'N/A' }}

๐Ÿ“ Origin: {{ guests.find(g => g.id === selectedGuestIdForBooking)?.country }} | ID: {{ guests.find(g => g.id === selectedGuestIdForBooking)?.idType }}: {{ guests.find(g => g.id === selectedGuestIdForBooking)?.documentId }}

๐Ÿ‘ค New Guest Directory Registration

Fields with * are required
๐Ÿ“ Register New {{ newBooking.sourceType }} Partner Profile

Real-Time Tax Localization Summary {{ getPropertyCurrency(newBooking.propertyId) }}

Room Charges Subtotal ({{ getNewBookingNights }} Nights): {{ getPropertyCurrency(newBooking.propertyId) }} {{ (Number(newBooking.rate || 0) * getNewBookingNights).toFixed(2) }}
โ†ณ {{ item.name }} ({{ item.calculationMethod }}) {{ item.calculationMethod === 'exclusive' ? '+' : '' }}{{ getPropertyCurrency(newBooking.propertyId) }} {{ item.amount.toFixed(2) }}
No active tax rules configured for this property location
Included Taxes (Extracted): {{ getPropertyCurrency(newBooking.propertyId) }} {{ newBookingTaxCalculation.totalInclusiveTaxes.toFixed(2) }}
Added Exclusive Taxes: + {{ getPropertyCurrency(newBooking.propertyId) }} {{ newBookingTaxCalculation.totalExclusiveTaxes.toFixed(2) }}
Grand Total (Due at Settlement): {{ getPropertyCurrency(newBooking.propertyId) }} {{ newBookingTaxCalculation.totalAmountWithTaxes.toFixed(2) }}

๐Ÿ”‘ Guest Check-In Handshake

Step {{ checkInStep }} of 2 {{ selectedCheckInRes?.id }}
Arriving Guest
{{ selectedCheckInRes?.guestName }}
Category: {{ selectedCheckInRes?.roomType }}
Stay Duration: {{ selectedCheckInRes?.checkInDate }} to {{ selectedCheckInRes?.checkOutDate }}
Total Rate Cost: {{ getPropertyCurrency(selectedCheckInRes?.propertyId) }} {{ selectedCheckInRes?.totalAmount }}

โš ๏ธ No vacant clean rooms of this category found! Please create or free up a room in the Room Register.

โ„น๏ธ Standard security practice for regulatory police registration.
Security / Key Deposit Option
Collect: {{ getPropertyCurrency(selectedCheckInRes?.propertyId) }} {{ ((Number(checkInForm.depositAmount) || 0) + (checkInForm.paymentStatus === 'Paid' ? Number(selectedCheckInRes?.totalAmount || 0) : 0)).toFixed(2) }}
{{ checkInForm.amountTendered >= ((Number(checkInForm.depositAmount) || 0) + (checkInForm.paymentStatus === 'Paid' ? Number(selectedCheckInRes?.totalAmount || 0) : 0)) ? '๐ŸŽ Return Change to Guest:' : 'โš ๏ธ Amount Still Due:' }} {{ getPropertyCurrency(selectedCheckInRes?.propertyId) }} {{ Math.abs(checkInForm.amountTendered - ((Number(checkInForm.depositAmount) || 0) + (checkInForm.paymentStatus === 'Paid' ? Number(selectedCheckInRes?.totalAmount || 0) : 0))).toFixed(2) }}
Please review the legal Guest Registration Card below. The guest must provide a signature on the canvas area below to authorize check-in.

{{ appName }}

Registration Check-In Card

{{ checkInForm.folioNumber }}

Guest Name {{ selectedCheckInRes?.guestName }}

Verification Doc {{ checkInForm.guestIdType }} : {{ checkInForm.guestIdNumber || 'Pending Input' }}

Duration & Room Room {{ getRoomNumber(checkInForm.roomId) }} ({{ selectedCheckInRes?.roomType }})

Stay Calendar {{ selectedCheckInRes?.checkInDate }} to {{ selectedCheckInRes?.checkOutDate }}

Accommodation rate {{ getPropertyCurrency(selectedCheckInRes?.propertyId) }} {{ selectedCheckInRes?.ratePerNight }}/night (Total: {{ selectedCheckInRes?.totalAmount }})

Required Key Deposit {{ getPropertyCurrency(selectedCheckInRes?.propertyId) }} {{ checkInForm.depositAmount }} ({{ checkInForm.depositStatus }})

Guest Handbook & Liability Terms:

I agree to be held personally responsible for all room charges and taxes. I agree to depart before 11:00 AM on check-out day. Hextron operates under strict non-smoking laws ({{ getPropertyCurrency(selectedCheckInRes?.propertyId) }} 250 room remediation fee for violations).

Sign inside box above

๐Ÿ›Ž๏ธ Guest Check-Out & Settlement

{{ selectedCheckOutRes?.id }}
Departing Guest
{{ selectedCheckOutRes?.guestName }}
Allocated Room: Room {{ getRoomNumber(selectedCheckOutRes?.roomId) }}
Stay Dates: {{ selectedCheckOutRes?.checkInDate }} to {{ selectedCheckOutRes?.checkOutDate }}
Stay Duration: {{ getStayNights(selectedCheckOutRes?.checkInDate, selectedCheckOutRes?.checkOutDate) }} Nights
Stay & Extension Details:
Original Stay: {{ getStayNights(selectedCheckOutRes?.checkInDate, selectedCheckOutRes?.checkOutDate) - selectedCheckOutRes.extensions.reduce((sum, ext) => sum + Number(ext.additionalNights || 0), 0) }} Nights
โ†ณ Extension #{{ idx + 1 }}: +{{ ext.additionalNights }} Nights ({{ ext.originalCheckOutDate }} to {{ ext.newCheckOutDate }})
Itemized Financial Folio
Standard Stay Charges: {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ selectedCheckOutRes?.totalAmount }}
Security Deposit Held ({{ selectedCheckOutRes?.depositStatus }}): - {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ selectedCheckOutRes?.depositAmount }}
Quick-Add Pricing Presets (Click to Add to Folio)
๐Ÿ›’ Minibar Usage Menu
โš ๏ธ Room Damages, Keys & Missing Items
๐Ÿ›ก๏ธ Security Deposit Settlement
Paid Deposit Held at Check-In: {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Number(selectedCheckOutRes?.depositAmount || 0).toFixed(2) }}
Deducted for Minibar & Incidentals: - {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Math.min(selectedCheckOutRes?.depositAmount, Number(checkOutForm.extraCharges || 0)).toFixed(2) }}
Deducted for Room Damage: - {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Math.min(Math.max(0, selectedCheckOutRes?.depositAmount - Number(checkOutForm.extraCharges || 0)), Number(checkOutForm.damageCharges || 0)).toFixed(2) }}
Net Refund / Balance Remaining: {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Math.max(0, selectedCheckOutRes?.depositAmount - (Number(checkOutForm.extraCharges || 0) + Number(checkOutForm.damageCharges || 0))).toFixed(2) }}
Excess Charges (Added to Bill): + {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ ((Number(checkOutForm.extraCharges || 0) + Number(checkOutForm.damageCharges || 0)) - selectedCheckOutRes?.depositAmount).toFixed(2) }}
โš ๏ธ Deposit Limit Exceeded
The total extra charges (Minibar + Room Damages) of {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ (Number(checkOutForm.extraCharges || 0) + Number(checkOutForm.damageCharges || 0)).toFixed(2) }} exceed the held security deposit of {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Number(selectedCheckOutRes?.depositAmount || 0).toFixed(2) }}. The excess amount of {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ ((Number(checkOutForm.extraCharges || 0) + Number(checkOutForm.damageCharges || 0)) - selectedCheckOutRes?.depositAmount).toFixed(2) }} has been added to the guest's final check-out settlement due.
Net Settlement Due: {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Number(getCheckOutNetDue()).toFixed(2) }}
โš ๏ธ Outstanding Balance Pending

This guest has an unpaid balance of {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Number(getCheckOutNetDue()).toFixed(2) }}. To comply with hotel audit policy, checkout is locked until this balance is settled.

Pending Services / Items Amount Due
{{ item.service }}
{{ item.notes }}
{{ item.amount >= 0 ? '' : '-' }}{{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Math.abs(item.amount).toFixed(2) }}
โœ… Folio Status: Fully Settled

All room stay accommodation charges and folio incidentals are fully paid. Ready for checkout.

Net Due: {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Number(getCheckOutNetDue()).toFixed(2) }}
{{ checkOutForm.amountTendered >= getCheckOutNetDue() ? '๐ŸŽ Return Change to Guest:' : 'โš ๏ธ Amount Still Due:' }} {{ getPropertyCurrency(selectedCheckOutRes?.propertyId) }} {{ Math.abs(checkOutForm.amountTendered - getCheckOutNetDue()).toFixed(2) }}

โณ Stay Extension Engine

{{ selectedExtendRes?.id }}
Active Occupant
{{ selectedExtendRes?.guestName }}
Current Room: Room {{ getRoomNumber(selectedExtendRes?.roomId) }} ({{ selectedExtendRes?.roomType }})
Current Stay: {{ selectedExtendRes?.checkInDate }} to {{ selectedExtendRes?.checkOutDate }}
โ„น๏ธ Defaults to current reservation nightly rate. You can manually adjust it for this extension.
Extension Stay Payment Collection
Extension Calculation Details
Additional Nights: {{ extendForm.additionalNights }} Nights
Extension Cost: + {{ getPropertyCurrency(selectedExtendRes?.propertyId) }} {{ extendForm.totalExtraCost.toFixed(2) }}
Revised Booking Total: {{ getPropertyCurrency(selectedExtendRes?.propertyId) }} {{ (Number(selectedExtendRes?.totalAmount || 0) + Number(extendForm.totalExtraCost || 0)).toFixed(2) }}
{{ extendForm.conflictWarning }}
โœจ Room is vacant and available for the requested extension period!

๐Ÿงพ Guest Folio & Invoice Center

Folio Reference: {{ selectedInvoiceRes?.folioNumber || 'FOLIO-NOT-GENERATED' }}

๐Ÿจ {{ appName.toUpperCase() }}

VAT Reg: GST-8891283-HXT

Address: {{ getPropertyLocation(selectedInvoiceRes?.propertyId) }}

Phone: {{ getPropertyContact(selectedInvoiceRes?.propertyId) }} | Email: billing@hextronhotels.com

Invoice QR QR Certified Receipt
Invoice Date {{ selectedInvoiceRes?.createdAt || selectedInvoiceRes?.checkInDate }}
Folio Code {{ selectedInvoiceRes?.folioNumber || 'N/A' }}
Reservation ID {{ selectedInvoiceRes?.id }}
Channel Source {{ selectedInvoiceRes?.source }}

Registered Customer Details

Name: {{ selectedInvoiceRes?.guestName }}

Country: {{ selectedInvoiceRes?.country || 'International' }}

Passport/ID: {{ selectedInvoiceRes?.documentId || 'On File' }}

Status: Departed {{ selectedInvoiceRes?.status }}

Stay & Accomodation Details

Assigned Room

Room {{ getRoomNumber(selectedInvoiceRes?.roomId) }}

Room Category

{{ selectedInvoiceRes?.roomType }}

Check-In / Out

{{ selectedInvoiceRes?.checkInDate }} / {{ selectedInvoiceRes?.checkOutDate }}

Stay Duration

{{ getStayNights(selectedInvoiceRes?.checkInDate, selectedInvoiceRes?.checkOutDate) }} Nights
Description Unit Price Qty / Nights Total Amount
โ†ณ {{ item.name }} {{ item.badge }} {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(item.unitPrice).toFixed(2) }} {{ item.unitPrice }} {{ item.qty }} + {{ Math.sign(item.total) === -1 ? '-' : '' }}{{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Math.abs(Number(item.total || 0)).toFixed(2) }}
Total Stay Duration: {{ getInvoiceSummaryMetrics(selectedInvoiceRes).totalNights }} Nights
Total Room Accommodation Base Charges: {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(selectedInvoiceRes).accommodationTotal).toFixed(2) }}
Total Certified Taxes & Levies (Exclusive): + {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(selectedInvoiceRes).taxesTotal).toFixed(2) }}
โ†ณ Of which, Inclusive Taxes (Included in room charges above): ({{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(selectedInvoiceRes).inclusiveTaxesTotal).toFixed(2) }})
Total Incidentals & Extra Charges: + {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(selectedInvoiceRes).extrasTotal).toFixed(2) }}
Security / Incidentals Deposit (Paid): + {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(selectedInvoiceRes).depositCollected).toFixed(2) }}
Security Deposit Released / Deducted: - {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(getInvoiceSummaryMetrics(selectedInvoiceRes).depositRefunded || getInvoiceSummaryMetrics(selectedInvoiceRes).depositDeducted).toFixed(2) }}
Total Net Charges (Settled): {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(getInvoiceGrandTotal(selectedInvoiceRes)).toFixed(2) }}
Invoice Payment Status: ๐ŸŸข Paid via {{ selectedInvoiceRes?.paymentMethod || 'Cash' }} ๐Ÿ”ด Unpaid / Pending

{{ appName }} Handshake Record

Certified Legal Signature & Terms Authorization

{{ selectedInvoiceRes?.folioNumber || 'PENDING' }}

Authorized Signee

{{ selectedInvoiceRes?.guestName }}

ID: {{ selectedInvoiceRes?.documentId || 'On File' }}

Authorization Date

{{ selectedInvoiceRes?.checkInDate }}

Assigned: Room {{ getRoomNumber(selectedInvoiceRes?.roomId) }}

Agreement to Terms & Conditions:

By signing below, the guest agrees to pay for all room charges, incidentals, and applicable hotel taxes. The guest agrees to observe the hotel check-out hour of 11:00 AM. Any property damage, smoking in rooms ({{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} 250 fine), or key card losses will be charged to the card or deposit on file.

Guest Digital Signature
โš ๏ธ No digital signature recorded for this reservation.
{{ appName }} Secure Signed
๐Ÿ›ก๏ธ
This registration handshake record is cryptographically timestamped and electronically signed. It is preserved on secure local database storage.

๐Ÿ›ก๏ธ SECURITY DEPOSIT RECEIPT

Property Management Guarantee Record

{{ selectedInvoiceRes?.depositStatus || 'Paid' }}

Guest Name

{{ selectedInvoiceRes?.guestName }}

Room Assigned: Room {{ getRoomNumber(selectedInvoiceRes?.roomId) }}

Deposit Collected Date

{{ selectedInvoiceRes?.checkInDate }}

Folio Reference: {{ selectedInvoiceRes?.folioNumber }}

Security / Key Deposit Amount Subject to room check-out inspection refund terms
{{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(selectedInvoiceRes?.depositAmount || 0).toFixed(2) }}

OFFICIAL REFUND & GUARANTEE TERMS:

1. This security key/incidental deposit of {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ selectedInvoiceRes?.depositAmount }} is collected at check-in to cover minor room incidentals, minibar consumption, lost keycards, or minor property damages.

2. Subject to a satisfactory housekeeping inspection of assigned Room {{ getRoomNumber(selectedInvoiceRes?.roomId) }} upon guest checkout, this deposit will be fully refunded or released.

3. If any room damages, smoking violations, or extra minibar charges are discovered, they will be deducted directly from this deposit, and any remaining balance will be refunded.

Deposit Ledger Audit History:
Check-In Collection Status: {{ selectedInvoiceRes?.depositStatus === 'No Deposit' ? 'No Deposit Required' : '๐ŸŸข PAID & SECURED' }}
Check-Out Release Status: {{ selectedInvoiceRes?.depositStatus }}
Minibar & Extra Charges: {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(selectedInvoiceRes?.extraCharges || 0).toFixed(2) }}
Room Damage Charges: {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Number(selectedInvoiceRes?.damageCharges || 0).toFixed(2) }}
Deducted From Deposit: - {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ Math.min(Number(selectedInvoiceRes?.depositAmount || 0), Number(selectedInvoiceRes?.extraCharges || 0) + Number(selectedInvoiceRes?.damageCharges || 0)).toFixed(2) }}
โš ๏ธ Uncovered Excess: + {{ getPropertyCurrency(selectedInvoiceRes?.propertyId) }} {{ ((Number(selectedInvoiceRes?.extraCharges || 0) + Number(selectedInvoiceRes?.damageCharges || 0)) - Number(selectedInvoiceRes?.depositAmount || 0)).toFixed(2) }}
Guest Signature
โณ

No stay extensions have been processed yet.

If the guest requests an extension of stay, use the "Extend Stay" option on the front desk dashboard. This will generate dynamic extension invoices.

โณ STAY EXTENSION PAYMENT RECEIPT

Exclusive Stay Extension Tax Invoice

๐ŸŸข Paid & Settled ๐Ÿ”ด Unpaid / Pending

Occupant Name

{{ selectedInvoiceRes?.guestName }}

Room Assigned: Room {{ getRoomNumber(selectedInvoiceRes?.roomId) }}

Transaction Timestamp

{{ selectedInvoiceRes.extensions[selectedExtensionIndex].paymentDate }}

Folio Link: {{ selectedInvoiceRes?.folioNumber }}

Extension Charge Description Rate / Night Nights Amount
Stay Extension Accommodation Extended: {{ selectedInvoiceRes.extensions[selectedExtensionIndex].originalCheckOutDate }} to {{ selectedInvoiceRes.extensions[selectedExtensionIndex].newCheckOutDate }} {{ getPropertyCurrency(selectedInvoiceRes.propertyId) }} {{ Number(selectedInvoiceRes.extensions[selectedExtensionIndex].ratePerNight).toFixed(2) }} {{ selectedInvoiceRes.extensions[selectedExtensionIndex].additionalNights }} {{ getPropertyCurrency(selectedInvoiceRes.propertyId) }} {{ Number(selectedInvoiceRes.extensions[selectedExtensionIndex].totalExtraCost).toFixed(2) }}
โ†ณ {{ tax.name }} {{ tax.rateType === 'percentage' ? '' : getPropertyCurrency(selectedInvoiceRes.propertyId) }}{{ tax.value }}{{ tax.rateType === 'percentage' ? '%' : '' }} - {{ tax.calculationMethod === 'exclusive' ? '+' : '' }}{{ getPropertyCurrency(selectedInvoiceRes.propertyId) }} {{ Number(tax.amount || 0).toFixed(2) }}
{{ selectedInvoiceRes.extensions[selectedExtensionIndex].paymentStatus === 'Paid' ? 'Total Charged & Paid for Extension:' : 'Total Cost of Extension Stay (Pending):' }} {{ getPropertyCurrency(selectedInvoiceRes.propertyId) }} {{ Number(selectedInvoiceRes.extensions[selectedExtensionIndex].totalCollected || selectedInvoiceRes.extensions[selectedExtensionIndex].totalExtraCost).toFixed(2) }}
Staff Remarks: "{{ selectedInvoiceRes.extensions[selectedExtensionIndex].notes }}"
โš ๏ธ Extension Stay Unpaid: Collect {{ getPropertyCurrency(selectedInvoiceRes.propertyId) }} {{ Number(selectedInvoiceRes.extensions[selectedExtensionIndex].totalCollected || selectedInvoiceRes.extensions[selectedExtensionIndex].totalExtraCost).toFixed(2) }}

โœ‰๏ธ Hextron Mailer & Notification Dispatcher

Automated SMTP Transaction Suite โ€ข Verified SPF & DKIM SSL Handshakes

โš™๏ธ SMTP Mail Parameters

๐Ÿ“Š Session Mail Delivery History {{ emailLogs.filter(l => l.resId === emailForm.reservationId).length }} Sent

{{ log.subject }}

Sent to: {{ log.recipient }} โ€ข {{ log.sentAt }}

{{ log.status }}
No outbound notifications logged on this booking session.
HEXTRON_SECURE_MAILER (SSL)
AUTO_PREVIEW
From: {{ appName }} <noreply@hextronhotels.com>
To: {{ emailForm.to || 'no-recipient@hextron.com' }}
Subject: {{ emailForm.subject || 'No Subject Defined' }}
๐Ÿจ {{ appName.toUpperCase() }}
Hospitality & Property Cloud Management
โœ”๏ธ RESERVATION SECURED & CONFIRMED ๐Ÿงพ TAX INVOICE & PAYMENT SETTLED โœ๏ธ DIGITAL REGISTRATION SIGNED
{{ emailForm.body }}

Transaction Breakdown ID: {{ emailForm.reservationId }}

Stay Dates:
{{ emailForm.checkInDate }} to {{ emailForm.checkOutDate }}
Room Assigned:
Room {{ getRoomNumber(emailForm.roomId) }} ({{ emailForm.roomType }})
Property Location:
{{ properties.find(p => p.id === emailForm.propertyId)?.name || 'Hextron Hotel' }}
Total Settled:
{{ getPropertyCurrency(emailForm.propertyId) }} {{ emailForm.totalAmount }}

Official Cryptographic Certification

This document and registration handshake has been logged and certified on secure servers. Use this pass at checkout or express entry.

Guest Signature on Record
Check-In Pass

ยฉ Hextron Hotels Group โ€ข Private & Confidential Travel Notification

Singapore Headquarters โ€ข ISO 27001 Cryptographic Delivery Hub

๐ŸŽซ Digital Booking QR Pass

Scan at desk for instant check-in / check-out
{{ selectedQrRes?.guestName }}
Booking Ref: {{ selectedQrRes?.id }}
Room Category: {{ selectedQrRes?.roomType }}
Source: {{ selectedQrRes?.source }}

๐Ÿ“ท Desk QR Code Scan Hub

Simulate an optical scan of a guest's digital confirmation card QR code for instant, contactless desk check-in.

๐Ÿ“ท
Optical Camera Feed Standby
Select a pending booking below and trigger the scan sequence
โณ
DECODING DIGITAL PAYLOAD...
Resolving metadata hash against PMS cloud instance
๐ŸŸข
DECRYPTION SUCCESSFUL
Found Guest: {{ selectedCheckInRes?.guestName }}
Booking Ref: {{ selectedCheckInRes?.id }}
โŒ
DECODE ERROR
Empty or malformed payload. Please select a booking reference.

Voucher payload resolved. The guest can now complete checkout / check-in.

Dynamic Rate Adjustment Rule

Create Seasonal Price Override

๐Ÿ—„๏ธ

cPanel MySQL Integration Setup

This zero-Node compilation client synchronizes database actions directly in your browser without requiring compilation, local environments, or servers.

MySQL Connection Config Details:
Host: localhost
Database Name: missionm_vento
Database User: missionm_punto
API Controller: /api.php

๐Ÿš€ Direct Upload Integration Steps (No Terminal Commands Needed):

  1. Open your cPanel dashboard (A2Hosting, GoDaddy, HostGator, etc.)
  2. Create MySQL database missionm_vento and add database user missionm_punto linked with ALL PRIVILEGES.
  3. Use cPanel File Manager to open the hpms.mddnm.online folder (located under /home/missionm/hpms.mddnm.online).
  4. Upload api.php inside your hpms.mddnm.online folder.
  5. Rename index_cpanel.html as index.html, and upload it inside hpms.mddnm.online folder.
  6. Access the website URL in any browser! PHP automatically creates databases, tables, and loads mock reservations on the first visit.
๐Ÿ”„ Git Deployment Verification:

We have configured a .cpanel.yml auto-deploy recipe. To verify if your cPanel Git pull deployment is working, run diagnostics on your live site:

๐Ÿ’ก Active Database Status: This client is permanently connected directly to the live backend server at api.php. All updates and reads reflect in real-time in the secure central repository.

{{ editingRoom ? 'Edit Room ' + editingRoom.roomNumber : 'Add New Active Room' }}

๐Ÿ‘๏ธ Guest Profile & Ledger Specifications

{{ viewGuestData.name.split(' ').map(n => n[0]).join('').substring(0, 2).toUpperCase() }}

{{ viewGuestData.name }}

๐Ÿ“ Origin: {{ viewGuestData.country }} โ€ข ๐Ÿ“ง {{ viewGuestData.email }} โ€ข ๐Ÿ“ž {{ viewGuestData.phone }}

๐Ÿ“‹ Identity & Loyalty Info

ID Verification: [{{ viewGuestData.idType || 'Passport' }}]
Document ID: {{ viewGuestData.documentId }}
Date of Birth: {{ viewGuestData.dob || 'Not specified' }}
Nationality: {{ viewGuestData.nationality || 'Not specified' }}
Total Bookings: {{ viewGuestData.stayCount }} stay(s)
Total Spent: {{ getPropertyCurrency(selectedPropertyId) }} {{ viewGuestData.totalSpent.toLocaleString() }}
Customer Since: {{ viewGuestData.createdAt }}

๐Ÿ  Address & Affiliations

Company Name: {{ viewGuestData.companyName || 'Not specified' }}
Street Address: {{ viewGuestData.address || 'Not specified' }}
City, State, Zip: {{ [viewGuestData.city, viewGuestData.state, viewGuestData.zip].filter(Boolean).join(', ') }}
Country: {{ viewGuestData.country }}
Vehicle Number: {{ viewGuestData.vehicleNumber || 'None' }}

๐Ÿ“ Attached Verification Documents ({{ viewGuestData.documents?.length || 0 }})

{{ doc.name }} Size: {{ (doc.size/1024).toFixed(1) }} KB
๐Ÿ“ฅ Download

No verification documents attached.

๐Ÿ’ฌ VIP Preferences & Interaction Logs

{{ viewGuestData.notes || 'No preferences or special VIP notes recorded for this guest profile.' }}

๐Ÿ–จ๏ธ Guest Ledger Print Preview & Audit

Review printable high-contrast layout. Press Print Document to trigger system print dialog.

๐Ÿฐ HEXTRON HOTELS GROUP โ€” GUEST DIRECTORY LEDGER

Official Guest Audit Trail, Profile Spec & Ledger Information

Date Generated: {{ new Date().toLocaleString() }}
Generated By: @{{ currentUser?.username || 'Operator' }} ({{ activeRole }})
Active Property Branch: {{ getPropertyName(selectedPropertyId) }}
Active Search & Filter Parameters:
๐Ÿ” Query search: "{{ guestSearch || 'N/A' }}"
๐ŸŒŽ Origin / Country: {{ guestCountryFilter === 'ALL' ? 'All Origins' : guestCountryFilter }}
๐Ÿ“… Date filter option: {{ guestDateFilterType === 'NONE' ? 'No Date Filter Applied' : (guestDateFilterType === 'createdAt' ? 'Profile Created Date' : guestDateFilterType === 'dob' ? 'Date of Birth' : 'Reservation Check-In Date') }}
โฑ๏ธ Filter date range: {{ guestStartDate || 'Anytime' }} to {{ guestEndDate || 'Anytime' }}
# Guest Name Contact details Origin Nationality Identification Document Date of Birth Stays Count Total Spent Value Created At
No matching guest ledger records recorded.
{{ idx + 1 }} {{ g.name }}
{{ g.email }}
{{ g.phone }}
{{ g.country || g.nationality }} {{ g.idType || 'Passport' }}: {{ g.documentId || 'N/A' }} {{ g.dob || 'N/A' }} {{ g.stayCount || 0 }} {{ getPropertyCurrency(selectedPropertyId) }} {{ (g.totalSpent || 0).toLocaleString() }} {{ g.createdAt || 'N/A' }}
* Confidential Document - For Internal Hotel Management Audit Only.
Page 1 of 1

๐Ÿ‘ฅ {{ editingGuest ? 'Edit Guest Profile' : 'Add New Guest Profile' }}

Fields marked with * are required

๐Ÿ‘ค Personal & verification

๐Ÿ“ Address & documents

๐Ÿ“ค Click or drag files to upload Images, PDFs or scans (Auto-encoded secure local storage)
๐Ÿ“„ {{ doc.name }} ({{ (doc.size/1024).toFixed(1) }} KB)

๐ŸŒ {{ editingTax ? 'Edit Tax Regulation' : 'Configure New Tax Regulation' }}

Localization & Regulatory Parameters

Guests whose country matches these entries are exempt from this charge (e.g., Malaysia Tourism Tax TTx exemption for Malaysians).

๐Ÿข {{ editingPartner ? 'Edit Partner Profile' : 'Add New Partner Profile' }}

Fields marked with * are required

{{ editingCategory ? 'Edit Room Category' : 'Add New Room Category' }}

๐Ÿ› ๏ธ Report Maintenance Issue

โš™๏ธ Contractor Repair Report & Work Order Update

Room {{ selectedResolutionIssue.roomNumber }} - {{ selectedResolutionIssue.title }}
โฑ๏ธ Started: {{ formatWorkDuration(selectedResolutionIssue.startedAt) }} ago
{{ selectedResolutionIssue.description }}

Check if labor/parts are absorbed under annual service agreement.

No spare parts added yet. Click 'Add Part' if any materials were used.
Spare Parts Subtotal: {{ getPropertyCurrency(selectedPropertyId) }} {{ getResolutionSubtotalParts.toFixed(2) }}
{{ getPropertyCurrency(selectedPropertyId) }} {{ getResolutionTotalCost.toFixed(2) }}

๐Ÿ”ง {{ editingVendor ? 'Edit Contractor Profile' : 'Add New Engineering Contractor' }}

๐Ÿ“œ Annual Maintenance Contract (AMC) Option
๐Ÿ”‘ Contractor Portal Login Setup

Contractors use these credentials to log into the hotel maintenance portal and view work orders assigned to them.

๐Ÿ“… {{ editingPreventive ? 'Edit Servicing Schedule' : 'Schedule Preventive Maintenance' }}

{{ editingProp ? 'Modify Branch Settings' : 'Generate New Branch Property' }}

๐Ÿ‘ค

EDIT SECURED USER ACCOUNT

Modifying @{{ editingUser.username }} parameters

Security notice: updating details will compel users to refresh session parameters upon next API exchange.
โš ๏ธ โ”

{{ confirmModal.title }}

{{ confirmModal.message }}

๐Ÿ“ฆ Add New Store Room Inventory Item

๐Ÿท๏ธ {{ categoryModalMode === 'edit' ? 'Edit Category Name' : 'Add New Category' }}

๐Ÿ” Log Lost & Found Belonging

๐Ÿ“‹ Submit Store Requisition Request

โ„น๏ธ Note: This requisition will be submitted to the Property Admin / Housekeeping Supervisor for approval before items are released from the store room.

โŒ Reject Requisition Request