import sys def fix_all_mismatched_journals(env): company_name = 'Kedai Kipas 58 Tenggilis' company = env['res.company'].search([('name', 'ilike', company_name)], limit=1) if not company: print(f"Company {company_name} not found.") return print(f"Checking {company.name} for mismatched journal entries...") # Let's forcefully clear ANY journal that doesn't belong to Tenggilis from its configurations # Common journal configuration fields fields_to_check = [ 'account_tax_periodicity_journal_id', 'tax_cash_basis_journal_id', 'currency_exdiff_journal_id' # Can add more if needed ] vals = {} for field in fields_to_check: try: journal_id = getattr(company, field, False) if journal_id and journal_id.company_id and journal_id.company_id.id != company.id: print(f"[x] Mismatched Journal in field '{field}': {journal_id.name} (from {journal_id.company_id.name}) -> Clearing") vals[field] = False except Exception as e: print(f"Error checking {field}: {e}") # Also check pos configs for this company pos_configs = env['pos.config'].search([('company_id', '=', company.id)]) for config in pos_configs: config_vals = {} if config.journal_id and config.journal_id.company_id and config.journal_id.company_id.id != company.id: print(f"[x] Mismatched Journal in POS Config '{config.name}': {config.journal_id.name} -> Clearing") config_vals['journal_id'] = False if config.invoice_journal_id and config.invoice_journal_id.company_id and config.invoice_journal_id.company_id.id != company.id: print(f"[x] Mismatched Invoice Journal in POS Config '{config.name}': {config.invoice_journal_id.name} -> Clearing") config_vals['invoice_journal_id'] = False if config_vals: config.write(config_vals) if vals: company.write(vals) print(f"Updated {len(vals)} fields on company.") else: print("No mismatched journals found on company settings.") print("Finding and fixing pos payment methods with wrong journal...") methods = env['pos.payment.method'].with_context(active_test=False).search([ ('company_id', '=', company.id), ('journal_id.company_id', '!=', company.id), ('journal_id', '!=', False) ]) for method in methods: print(f"[x] Fixing payment method '{method.name}' (Journal {method.journal_id.name} is from {method.journal_id.company_id.name}) -> Clearing") method.journal_id = False # Check for Bank Accounts (res.partner.bank) linked to the wrong journal banks = env['res.partner.bank'].with_context(active_test=False).search([ ('company_id', '=', company.id), ('journal_id.company_id', '!=', company.id), ('journal_id', '!=', False) ]) for bank in banks: print(f"[x] Fixing bank account '{bank.acc_number}' (Journal {bank.journal_id.name} is from {bank.journal_id.company_id.name}) -> Clearing") bank.journal_id = False env.cr.commit() print("Done!") if __name__ == '__main__': try: fix_all_mismatched_journals(env) except NameError: print("Run via odoo shell")