diff --git a/line.py b/line.py index 0c3401a..97de80b 100644 --- a/line.py +++ b/line.py @@ -815,10 +815,10 @@ class Line(SecondCurrencyMixin, Workflow, ModelSQL, ModelView): """ compute debit/credit from amount """ if isinstance(values, dict): - type_ = values.get('bookingtype', None) + type_ = values.get('bookingtype', getattr(line, 'bookingtype', None)) amount = values.get('amount', None) else : - type_ = getattr(values, 'bookingtype', None) + type_ = getattr(values, 'bookingtype', getattr(line, 'bookingtype', None)) amount = getattr(values, 'amount', None) result = {} @@ -1040,12 +1040,20 @@ class Line(SecondCurrencyMixin, Workflow, ModelSQL, ModelView): values2 = {} values2.update(values) values2.update(cls.clear_by_bookingtype(values, line)) + + # select required fields in case on 'bookingtype' + updt_fields = [] + updt_fields.extend(values.keys()) + if 'bookingtype' in values.keys(): + updt_fields.extend([x for x in fields_update if x not in values.keys()]) + values2.update(cls.get_debit_credit({ - x:values.get(x, getattr(line, x)) for x in fields_update + x:values.get(x, getattr(line, x)) for x in updt_fields }, line=line)) to_write.extend([lines, values2]) else : to_write.extend([lines, values]) + super(Line, cls).write(*to_write) @classmethod