tryton-upgrades/after/migration_shipment_work.py

74 lines
2.4 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 = {'company': 1}
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, 0, context=context):
user_obj = pool.get('res.user')
user = user_obj.search([('login', '=', 'admin')], limit=1)[0]
user_id = user.id
with Transaction().start(dbname, 0, context=context) as transaction:
ShipmentWork = pool.get('shipment.work')
Project = pool.get('project.work')
Contract = pool.get('contract')
ContractLine = pool.get('contract.line')
cursor = Transaction().connection.cursor()
table = ShipmentWork.__table__()
shipment_works = ShipmentWork.search([])
# relate shipment.work and project.work
for sw in shipment_works:
logger.info("sw: %s/%s" % (sw.number, sw.work_project))
if not sw.work_project:
continue
project = Project.search([('name', '=', sw.work_project.code)])
if project:
project, = project
logger.info("sw: %s/%s => %s" % (sw.number,
sw.work_project.code, project))
cursor.execute(*table.update(columns=[table.origin, table.project],
values=['project.work,' + str(project.id), project.id],
where=table.id == sw.id))
else:
cl = ContractLine.search([
('asset', '=', sw.asset),
('contract.party', '=', sw.party)])
if not cl:
continue
cl = cl[0]
logger.info("sw: %s/%s => %s" % (sw.number,
sw.work_project.code, cl))
cursor.execute(*table.update(columns=[table.origin],
values=['contract.line,' + str(cl.id)],
where=table.id == sw.id))
# logger.info('Not null column project in shipment.work')
# cursor.execute('ALTER TABLE "shipment_work" ALTER COLUMN "project"'
# ' SET NOT NULL;')
logger.info('Done')