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)