/** @odoo-module */ import { patch } from "@web/core/utils/patch"; import { Orderline } from "@point_of_sale/app/components/orderline/orderline"; import { PosOrder } from "@point_of_sale/app/models/pos_order"; patch(Orderline.prototype, { get lineScreenValues() { const res = super.lineScreenValues; // In POS, the internal note (line.note) is typically shown only in display mode. // We override this to also include the parsed internalNote when printing receipts. if (this.props.mode === "receipt" && this.line.note) { try { res.internalNote = JSON.parse(this.line.note); } catch (e) { res.internalNote = [{ text: this.line.note }]; // Fallback if not valid JSON } } return res; } }); 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}` }; } } const name = employee ? (employee.name || "") : ""; if (!name) { return ""; } // Extract prefix if present (e.g. "Served by:", "Order Taker:") let temp = name.trim(); let prefix = ""; const prefixMatch = temp.match(/^(served\s+by:?|order\s+taker:?|kasir:?)\s*/i); if (prefixMatch) { prefix = prefixMatch[0]; temp = temp.substring(prefix.length).trim(); } const parts = temp.split(/\s+/); if (parts.length <= 2) { return name; } return prefix + parts[0] + " " + parts[parts.length - 1]; } });