feat: Add script to clone Odoo account journals from 'Kedai Kipas 58 Rungkut' to 'PT Kipas Lima Delapan'.
This commit is contained in:
parent
cbbc43e6ec
commit
d8b6258067
70
clone_journals_rungkut_to_pusat.py
Normal file
70
clone_journals_rungkut_to_pusat.py
Normal file
@ -0,0 +1,70 @@
|
||||
import sys
|
||||
|
||||
def clone_journals(env):
|
||||
source_name = 'Kedai Kipas 58 Rungkut'
|
||||
target_name = 'PT Kipas Lima Delapan'
|
||||
|
||||
source_company = env['res.company'].search([('name', 'ilike', source_name)], limit=1)
|
||||
target_company = env['res.company'].search([('name', 'ilike', target_name)], limit=1)
|
||||
|
||||
if not source_company or not target_company:
|
||||
print(f"Could not find one or both companies: '{source_name}', '{target_name}'")
|
||||
return
|
||||
|
||||
print(f"Source: {source_company.name} (ID: {source_company.id})")
|
||||
print(f"Target: {target_company.name} (ID: {target_company.id})")
|
||||
|
||||
# Fetch all journals from the source company
|
||||
journals = env['account.journal'].with_context(active_test=False).search([
|
||||
('company_id', '=', source_company.id)
|
||||
])
|
||||
|
||||
print(f"Found {len(journals)} journals in {source_company.name} to clone.")
|
||||
|
||||
count = 0
|
||||
for journal in journals:
|
||||
# Check if a journal with the same code already exists in target
|
||||
existing = env['account.journal'].with_context(active_test=False).search([
|
||||
('code', '=', journal.code),
|
||||
('company_id', '=', target_company.id)
|
||||
], limit=1)
|
||||
|
||||
if existing:
|
||||
print(f" -> '{journal.name}' (Code: {journal.code}) already exists in {target_company.name}. Skipping.")
|
||||
continue
|
||||
|
||||
try:
|
||||
with env.cr.savepoint():
|
||||
# Explicitly pass the shared accounts so Odoo doesn't try to auto-create new ones
|
||||
copy_defaults = {
|
||||
'company_id': target_company.id,
|
||||
'default_account_id': journal.default_account_id.id if journal.default_account_id else False,
|
||||
'suspense_account_id': journal.suspense_account_id.id if journal.suspense_account_id else False,
|
||||
'profit_account_id': journal.profit_account_id.id if journal.profit_account_id else False,
|
||||
'loss_account_id': journal.loss_account_id.id if journal.loss_account_id else False,
|
||||
}
|
||||
|
||||
# Clone the journal
|
||||
new_journal = journal.copy(copy_defaults)
|
||||
|
||||
# Odoo's copy might override name/code or append "(copy)"
|
||||
# Write to ensure they are identical to source
|
||||
new_journal.write({
|
||||
'name': journal.name,
|
||||
'code': journal.code,
|
||||
})
|
||||
print(f" -> Cloned '{journal.name}' [{journal.code}] (New ID: {new_journal.id})")
|
||||
count += 1
|
||||
except Exception as e:
|
||||
print(f" -> Failed to clone '{journal.name}' [{journal.code}]: {e}")
|
||||
|
||||
print(f"Committing changes... (Cloned {count} journals)")
|
||||
env.cr.commit()
|
||||
print("Cloning complete!")
|
||||
|
||||
if __name__ == '__main__':
|
||||
try:
|
||||
clone_journals(env)
|
||||
except NameError:
|
||||
print("Please run this script using Odoo shell:")
|
||||
print("Example: ./.venv/bin/python ./odoo/odoo-bin shell -d <DB_NAME> -c odoo.conf < scripts/clone_journals_rungkut_to_pusat.py")
|
||||
Loading…
Reference in New Issue
Block a user