New interface for Function/Property fields

This commit is contained in:
Cédric Krier committed 2010-03-11 16:52:42 +01:00
1 parent fc25611599
commit a9e60a3fb3
1 file changed
+43 -38
+43 -38
View File
@@ -33,7 +33,7 @@ class Work(ModelSQL, ModelView):
states={
'invisible': Not(Equal(Eval('type'), 'task')),
}, depends=['type'])
duration = fields.Function('get_function_fields', string='Duration')
duration = fields.Function(fields.Float('Duration'), 'get_function_fields')
early_start_time = fields.DateTime("Early Start Time", readonly=True)
late_start_time = fields.DateTime("Late Start Time", readonly=True)
early_finish_time = fields.DateTime("Early Finish Time", readonly=True)
@@ -42,27 +42,26 @@ class Work(ModelSQL, ModelView):
actual_finish_time = fields.DateTime("Actual Finish Time")
constraint_start_time = fields.DateTime("Constraint Start Time")
constraint_finish_time = fields.DateTime("Constraint Finish Time")
early_start_date = fields.Function('get_function_fields',
type='date', string='Early Start')
late_start_date = fields.Function('get_function_fields',
type='date', string='Late Start')
early_finish_date = fields.Function('get_function_fields',
type='date', string='Early Finish')
late_finish_date = fields.Function('get_function_fields',
type='date', string='Late Finish')
actual_start_date = fields.Function('get_function_fields',
type='date', string='Actual Start', fnct_inv='set_function_fields')
actual_finish_date = fields.Function('get_function_fields',
type='date', string='Actual Finish', fnct_inv='set_function_fields')
constraint_start_date = fields.Function('get_function_fields',
type='date', string='Constraint Start', depends=[ 'type'],
fnct_inv='set_function_fields')
constraint_finish_date = fields.Function('get_function_fields',
type='date', string='Constraint Finish', depends=[ 'type'],
fnct_inv='set_function_fields')
requests = fields.Function('get_function_fields', type='many2many',
string='Requests', fnct_inv='set_function_fields',
relation='res.request')
early_start_date = fields.Function(fields.Date('Early Start'),
'get_function_fields')
late_start_date = fields.Function(fields.Date('Late Start'),
'get_function_fields')
early_finish_date = fields.Function(fields.Date('Early Finish'),
'get_function_fields')
late_finish_date = fields.Function(fields.Date('Late Finish'),
'get_function_fields')
actual_start_date = fields.Function(fields.Date('Actual Start'),
'get_function_fields', setter='set_function_fields')
actual_finish_date = fields.Function(fields.Date('Actual Finish'),
'get_function_fields', setter='set_function_fields')
constraint_start_date = fields.Function(fields.Date('Constraint Start',
depends=['type']), 'get_function_fields',
setter='set_function_fields')
constraint_finish_date = fields.Function(fields.Date('Constraint Finish',
depends=['type']), 'get_function_fields',
setter='set_function_fields')
requests = fields.Function(fields.One2Many('res.request', None,
'Requests'), 'get_function_fields', setter='set_function_fields')
def __init__(self):
super(Work, self).__init__()
@@ -78,7 +77,7 @@ class Work(ModelSQL, ModelView):
return super(Work, self).check_recursion(cursor, user, ids,
parent='successors')
def get_function_fields(self, cursor, user, ids, names, args, context=None):
def get_function_fields(self, cursor, user, ids, names, context=None):
'''
Function to compute function fields
@@ -174,31 +173,36 @@ class Work(ModelSQL, ModelView):
return res
def set_function_fields(self, cursor, user, id, name, value, arg,
def set_function_fields(self, cursor, user, ids, name, value,
context=None):
request_obj = self.pool.get('res.request')
req_ref_obj = self.pool.get('res.request.reference')
if name == 'requests':
work = self.browse(cursor, user, id, context=context)
currents = dict((req.id, req) for req in work.requests)
works = self.browse(cursor, user, ids, context=context)
currents = dict((req.id, req) for work in works for req in
work.requests)
for v in value:
to_unlink = []
to_link = []
operator = v[0]
ids = len(v) > 1 and v[1] or []
target_ids = len(v) > 1 and v[1] or []
if operator == 'set':
to_link.extend((i for i in ids if i not in currents))
to_unlink.extend((i for i in currents if i not in ids))
to_link.extend((i for i in target_ids
if i not in currents))
to_unlink.extend((i for i in currents
if i not in target_ids))
elif operator == 'add':
to_link.extend((i for i in ids if i not in currents))
to_link.extend((i for i in target_ids if i not in
currents))
elif operator == 'unlink':
to_unlink.extend((i for i in ids if i in currents))
to_unlink.extend((i for i in target_ids if i in currents))
elif operator == 'unlink_all':
to_unlink.extend(currents)
elif operator == 'delete':
request_obj.delete(cursor, user, to_delete, context=context)
request_obj.delete(cursor, user, to_delete,
context=context)
else:
raise Exception('Operation not supported')
@@ -206,16 +210,17 @@ class Work(ModelSQL, ModelView):
for i in to_unlink:
request = currents[i]
for ref in request.references:
if int(ref.reference.split(',')[1]) == id:
if int(ref.reference.split(',')[1]) in ids:
req_ref_ids.append(ref.id)
req_ref_obj.delete(cursor, user, req_ref_ids,
context=context)
for i in to_link:
req_ref_obj.create(cursor, user, {
'request': i,
'reference': 'project.work,%s' % id,
}, context=context)
for record_id in ids:
req_ref_obj.create(cursor, user, {
'request': i,
'reference': 'project.work,%s' % record_id,
}, context=context)
return
fun_fields = ('actual_start_date', 'actual_finish_date',
@@ -224,7 +229,7 @@ class Work(ModelSQL, ModelView):
'constraint_start_time', 'constraint_finish_time')
for fun_field, db_field in zip(fun_fields, db_fields):
if fun_field == name:
self.write(cursor, user, id, {
self.write(cursor, user, ids, {
db_field: datetime.datetime.combine(value, datetime.time()),
}, context=context)
break