Purchase form
This commit is contained in:
53
ir/model.py
53
ir/model.py
@@ -1606,8 +1606,53 @@ class Log(ResourceAccessMixin, ModelSQL, ModelView):
|
||||
return json.dumps(value, sort_keys=True, ensure_ascii=False)
|
||||
if value in (None, ''):
|
||||
return ''
|
||||
if isinstance(value, str) and re.match(r'^-?\d+(\.\d+)?$', value):
|
||||
value = value.rstrip('0').rstrip('.')
|
||||
return value or '0'
|
||||
return str(value)
|
||||
|
||||
@staticmethod
|
||||
def _singular_label(label):
|
||||
if label.endswith('ies'):
|
||||
return label[:-3] + 'y'
|
||||
if label.endswith('s'):
|
||||
return label[:-1]
|
||||
return label
|
||||
|
||||
def _format_nested_change_summary(
|
||||
self, field_label, target_model, old_value, new_value):
|
||||
pool = Pool()
|
||||
Field = pool.get('ir.model.field')
|
||||
lines = []
|
||||
if not isinstance(old_value, dict) or not isinstance(new_value, dict):
|
||||
return lines
|
||||
record_label = self._singular_label(field_label)
|
||||
def record_sort_key(value):
|
||||
try:
|
||||
return int(value)
|
||||
except (TypeError, ValueError):
|
||||
return value
|
||||
for record_id in sorted(
|
||||
set(old_value) | set(new_value), key=record_sort_key):
|
||||
record_old = old_value.get(record_id, {})
|
||||
record_new = new_value.get(record_id, {})
|
||||
if not isinstance(record_old, dict) or not isinstance(
|
||||
record_new, dict):
|
||||
continue
|
||||
for child_field in sorted(set(record_old) | set(record_new)):
|
||||
child_old = record_old.get(child_field)
|
||||
child_new = record_new.get(child_field)
|
||||
if child_old == child_new:
|
||||
continue
|
||||
child_label = Field.get_name(target_model, child_field)
|
||||
lines.append('%s %s %s %s => %s' % (
|
||||
record_label,
|
||||
record_id,
|
||||
child_label,
|
||||
self._format_change_value(child_old),
|
||||
self._format_change_value(child_new)))
|
||||
return lines
|
||||
|
||||
def get_change_summary(self, name):
|
||||
if self.event != 'write':
|
||||
return ''
|
||||
@@ -1628,6 +1673,14 @@ class Log(ResourceAccessMixin, ModelSQL, ModelView):
|
||||
field_label = Field.get_name(model, field_name)
|
||||
else:
|
||||
field_label = field_name
|
||||
field = getattr(self.resource.__class__, field_name, None)
|
||||
if field and hasattr(field, 'get_target'):
|
||||
target_model = field.get_target().__name__
|
||||
nested_lines = self._format_nested_change_summary(
|
||||
field_label, target_model, old_value, new_value)
|
||||
if nested_lines:
|
||||
lines.extend(nested_lines)
|
||||
continue
|
||||
lines.append('%s: %s -> %s' % (
|
||||
field_label,
|
||||
self._format_change_value(old_value),
|
||||
|
||||
Reference in New Issue
Block a user