odoo_utility_scripts/diagnose_pos_close.py

41 lines
1.8 KiB
Python

import sys
import traceback
def diagnose_pos_sessions(env):
sessions = env['pos.session'].search([('state', '!=', 'closed')])
if not sessions:
print("No open POS sessions found.")
return
for session in sessions:
print(f"Session: {session.name} | State: {session.state} | Company ID: {session.company_id.id}")
orders = env['pos.order'].search([('session_id', '=', session.id)])
for order in orders:
if order.company_id.id != session.company_id.id:
print(f" [!] Order {order.name} has Company ID {order.company_id.id} (Expected: {session.company_id.id})")
for line in order.lines:
if line.company_id.id != session.company_id.id:
print(f" [!] Order Line {line.id} has Company ID {line.company_id.id}")
payments = env['pos.payment'].search([('session_id', '=', session.id)])
for payment in payments:
if payment.company_id.id != session.company_id.id:
print(f" [!] Payment {payment.name} has Company ID {payment.company_id.id}")
if session.move_id and session.move_id.company_id.id != session.company_id.id:
print(f" [!] Account Move {session.move_id.name} has Company ID {session.move_id.company_id.id}")
print(" -> Attempting to close session...")
try:
# We bypass user domain restrictions for the script
session.with_context(allowed_company_ids=[session.company_id.id]).action_pos_session_closing_control()
print(f" -> Successfully closed session {session.name}!")
except Exception as e:
print(f" -> Failed to close session {session.name}:")
traceback.print_exc()
if __name__ == '__main__':
diagnose_pos_sessions(env)