tryton-upgrades/after/upgrade_account_code_digits.py

57 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python
import sys
dbname = sys.argv[1]
config_file = sys.argv[2]
from trytond.config import config as CONFIG
CONFIG.update_etc(config_file)
from trytond.pool import Pool
from trytond.transaction import Transaction
import logging
Pool.start()
pool = Pool(dbname)
pool.init()
context = {}
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
logger.addHandler(ch)
with Transaction().start(dbname, 1, context=context):
Company = pool.get('company.company')
Configuration = pool.get('account.configuration')
Account = pool.get('account.account')
cursor = Transaction().connection.cursor()
for company in Company.search([]):
with Transaction().set_context(company=company.id):
config = Configuration(1)
cdigits = config.default_account_code_digits or 8
for account in Account.search([]):
if len(account.childs) != 0:
continue
if account.code and (len(account.code) < cdigits or len(account.code) > cdigits):
digits = int(cdigits - len(account.code))
if digits < 0:
digits = cdigits-4
code = account.code[0:4] + account.code[-digits:]
elif '%' in account.code:
code = account.code.replace('%', '0' * (digits + 1))
else:
code = account.code + '0' * digits
query = "update account_account set code = '%s' where id = %s" % (code, account.id)
cursor.execute(query)
Transaction().commit()
logger.info('Done')