Ugly patch to allow copying processes.

This commit is contained in:
Albert Cervera i Areny 2015-01-29 12:21:15 +01:00
parent 8cad5817c0
commit b0f180eec1
1 changed files with 60 additions and 5 deletions

View File

@ -84,16 +84,16 @@ class Process(ModelSQL, ModelView):
return super(Process, cls).create(with_boms + without_boms)
@classmethod
def delete(cls, steps):
def delete(cls, processes):
pool = Pool()
BOM = pool.get('production.bom')
Route = pool.get('production.route')
boms = []
routes = []
for step in steps:
boms.append(step.bom)
routes.append(step.route)
super(Process, cls).delete(steps)
for process in processes:
boms.append(process.bom)
routes.append(process.route)
super(Process, cls).delete(processes)
BOM.delete(boms)
Route.delete(routes)
@ -108,6 +108,52 @@ class Process(ModelSQL, ModelView):
if factor is not None:
return factor
@classmethod
def copy(cls, processes, default=None):
def update_steps(old_lines, new_steps, new_lines):
old_map = {}
for line in old_lines:
old_map[line.product.id] = line.step.name
new_map = {}
for step in new_steps:
new_map[step.name] = step.id
for line in new_lines:
line.step = new_map[old_map[line.product.id]]
line.save()
pool = Pool()
BOM = pool.get('production.bom')
Route = pool.get('production.route')
if default is None:
default = {}
#for process in processes:
#if 'bom' not in default:
# default['bom'] = None
#if 'route' not in default:
# default['route'] = None
#return super(Process, cls).copy(processes, default)
res = []
for process in processes:
bom, = BOM.copy([process.bom])
for line in process.bom.inputs:
route, = Route.copy([process.route])
if 'bom' not in default:
default['bom'] = bom
if 'route' not in default:
default['route'] = route
new, = super(Process, cls).copy([process], default)
res.append(new)
update_steps(process.bom.inputs, new.steps, new.bom.inputs)
update_steps(process.bom.outputs, new.steps, new.bom.outputs)
# print "DEFAULTING: ", default
return res
class Step(ModelSQL, ModelView):
'Production Process Step'
@ -134,6 +180,15 @@ class Step(ModelSQL, ModelView):
table, _ = tables[None]
return [table.sequence == None, table.sequence]
@classmethod
def copy(cls, steps, default=None):
if default is None:
default = {}
default['inputs'] = None
default['outputs'] = None
default['operations'] = None
return super(Step, cls).copy(steps, default)
class BOMMixin:
step = fields.Many2One('production.process.step', 'Step')