From 60dca947e1704e50a87794afd59b7e31253af8b1 Mon Sep 17 00:00:00 2001 From: Suherdy Yacob Date: Mon, 1 Jun 2026 14:23:48 +0700 Subject: [PATCH] refactor: improve cashier name resolution logic and add print-specific CSS overrides for POS receipts --- static/src/css/receipt.css | 19 +++++++++++++ static/src/js/orderline.js | 57 ++++++++++++++++++++++++++++---------- 2 files changed, 62 insertions(+), 14 deletions(-) diff --git a/static/src/css/receipt.css b/static/src/css/receipt.css index be4b267..c2f9ee1 100644 --- a/static/src/css/receipt.css +++ b/static/src/css/receipt.css @@ -94,5 +94,24 @@ padding-bottom: 0 !important; margin-bottom: 0 !important; } + .pos-receipt-container { + padding-bottom: 0 !important; + margin-bottom: 0 !important; + height: auto !important; + } + body, html, #app { + height: auto !important; + min-height: auto !important; + padding-bottom: 0 !important; + margin-bottom: 0 !important; + } + iframe, .no-print, button, .pos-receipt-print, .pos-receipt-actions { + display: none !important; + } + .pos-receipt-print-canvas { + margin: 0 !important; + padding: 0 !important; + height: auto !important; + } } diff --git a/static/src/js/orderline.js b/static/src/js/orderline.js index 31fba7a..e1680fb 100644 --- a/static/src/js/orderline.js +++ b/static/src/js/orderline.js @@ -24,24 +24,53 @@ patch(PosOrder.prototype, { getCashierName() { const pos = this.pos || this.models?.env?.services?.pos; let employee = this.employee_id || this.original_employee_id || this.user_id || null; - - // If employee is just an ID/number, look up the record from the POS store models - if (employee && (typeof employee === 'number' || typeof employee === 'string')) { - const empId = parseInt(employee); - if (pos && pos.models && pos.models['hr.employee']) { - employee = pos.models['hr.employee'].get(empId) || { name: `Employee ${empId}` }; - } else if (pos && pos.employees) { - employee = pos.employees.find(e => e.id === empId) || { name: `Employee ${empId}` }; - } else { - employee = { name: `Employee ${empId}` }; + let empId = null; + + // Extract ID if employee is a record or number + if (employee) { + if (typeof employee === 'number' || typeof employee === 'string') { + empId = parseInt(employee); + } else if (typeof employee === 'object') { + empId = employee.id; + } + } + + // Look up employee record from models or list + let employeeRecord = null; + if (empId) { + if (pos && pos.models && pos.models['hr.employee']) { + employeeRecord = pos.models['hr.employee'].get(empId); + } + if (!employeeRecord && pos && pos.employees) { + employeeRecord = pos.employees.find(e => e.id === empId); + } + } + + // Fallback to employee object itself if it has a name + let name = ""; + if (employeeRecord && employeeRecord.name) { + name = employeeRecord.name; + } else if (employee && typeof employee === 'object' && employee.name) { + name = employee.name; + } + + // Fallback to user if no employee name found + if (!name && this.user_id) { + const userId = typeof this.user_id === 'object' ? this.user_id.id : parseInt(this.user_id); + if (pos && pos.models && pos.models['res.users']) { + const userRec = pos.models['res.users'].get(userId); + if (userRec && userRec.name) name = userRec.name; + } + if (!name && this.user_id.name) { + name = this.user_id.name; } } - const name = employee ? (employee.name || "") : ""; if (!name) { return ""; } - // Extract prefix if present (e.g. "Served by:", "Order Taker:") + + // Format name to: First Name + Last Name let temp = name.trim(); let prefix = ""; const prefixMatch = temp.match(/^(served\s+by:?|order\s+taker:?|kasir:?)\s*/i); @@ -49,10 +78,10 @@ patch(PosOrder.prototype, { prefix = prefixMatch[0]; temp = temp.substring(prefix.length).trim(); } - + const parts = temp.split(/\s+/); if (parts.length <= 2) { - return name; + return prefix + temp; } return prefix + parts[0] + " " + parts[parts.length - 1]; }