refactor: move closing receipt printing to occur after successful server session closure

This commit is contained in:
Suherdy Yacob 2026-06-15 11:26:42 +07:00
parent fbf70c34b8
commit 94a4072d45

View File

@ -154,15 +154,6 @@ patch(ClosePosPopup.prototype, {
.filter((pm) => pm.type === "bank") .filter((pm) => pm.type === "bank")
.map((pm) => [pm.id, this.getDifference(pm.id)]); .map((pm) => [pm.id, this.getDifference(pm.id)]);
// ── Print BEFORE closing session on server ───────────────────────
// IMPORTANT: Must print here while IndexedDB is still fully open.
// After close_session_from_ui responds, the Odoo bus/sync detects
// the session state change and begins IDB teardown. Any OWL render
// or Logger.log call after that point throws:
// InvalidStateError: Failed to execute 'transaction' on
// 'IDBDatabase': The database connection is closing.
await this._printClosingReceipt(receiptData);
const response = await this.pos.data.call( const response = await this.pos.data.call(
"pos.session", "pos.session",
"close_session_from_ui", "close_session_from_ui",
@ -178,6 +169,9 @@ patch(ClosePosPopup.prototype, {
return this.handleClosingError(response); return this.handleClosingError(response);
} }
// ── Print AFTER closing session on server ────────────────────────
await this._printClosingReceipt(receiptData);
// Mark session closed locally // Mark session closed locally
this.pos.session.state = "closed"; this.pos.session.state = "closed";