83 lines
3.3 KiB
Python
83 lines
3.3 KiB
Python
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")
|