Add smarts to show display text for some version diff fields
e.g. show `str(customer)` along with `customer_uuid` since almost nobody will "care" about the uuid so much, they just want the name
This commit is contained in:
parent
edb5393cdc
commit
9efe767654
6 changed files with 118 additions and 95 deletions
|
@ -1361,6 +1361,20 @@ class MasterView(View):
|
|||
if newer:
|
||||
next_url = self.request.route_url('{}.version'.format(route_prefix), uuid=instance.uuid, txnid=newer.id)
|
||||
|
||||
version_diffs = []
|
||||
versions = self.get_relevant_versions(transaction, instance)
|
||||
for version in versions:
|
||||
|
||||
old_data = {}
|
||||
new_data = {}
|
||||
fields = self.fields_for_version(version)
|
||||
for field in fields:
|
||||
if version.previous:
|
||||
old_data[field] = getattr(version.previous, field)
|
||||
new_data[field] = getattr(version, field)
|
||||
diff = self.make_version_diff(version, old_data, new_data, fields=fields)
|
||||
version_diffs.append(diff)
|
||||
|
||||
return self.render_to_response('view_version', {
|
||||
'instance': instance,
|
||||
'instance_title': "{} (history)".format(instance_title),
|
||||
|
@ -1368,7 +1382,7 @@ class MasterView(View):
|
|||
'instance_url': self.get_action_url('versions', instance),
|
||||
'transaction': transaction,
|
||||
'changed': localtime(self.rattail_config, transaction.issued_at, from_utc=True),
|
||||
'versions': self.get_relevant_versions(transaction, instance),
|
||||
'version_diffs': version_diffs,
|
||||
'show_prev_next': True,
|
||||
'prev_url': prev_url,
|
||||
'next_url': next_url,
|
||||
|
@ -4815,6 +4829,11 @@ class MasterView(View):
|
|||
def make_diff(self, old_data, new_data, **kwargs):
|
||||
return diffs.Diff(old_data, new_data, **kwargs)
|
||||
|
||||
def make_version_diff(self, version, old_data, new_data, **kwargs):
|
||||
if 'title' not in kwargs:
|
||||
kwargs['title'] = self.title_for_version(version)
|
||||
return diffs.VersionDiff(version, old_data, new_data, **kwargs)
|
||||
|
||||
##############################
|
||||
# Configuration Views
|
||||
##############################
|
||||
|
|
|
@ -1398,25 +1398,15 @@ class PersonView(MasterView):
|
|||
# also organize final transaction/versions (diff) map
|
||||
vmap = {}
|
||||
for version in versions:
|
||||
|
||||
if version.previous and version.operation_type == continuum.Operation.DELETE:
|
||||
diff_class = 'deleted'
|
||||
elif version.previous:
|
||||
diff_class = 'dirty'
|
||||
else:
|
||||
diff_class = 'new'
|
||||
|
||||
# collect before/after field values for version
|
||||
fields = self.fields_for_version(version)
|
||||
values = {}
|
||||
|
||||
old_data = {}
|
||||
new_data = {}
|
||||
for field in fields:
|
||||
before = ''
|
||||
after = ''
|
||||
if diff_class != 'new':
|
||||
before = repr(getattr(version.previous, field))
|
||||
if diff_class != 'deleted':
|
||||
after = repr(getattr(version, field))
|
||||
values[field] = {'before': before, 'after': after}
|
||||
if version.previous:
|
||||
old_data[field] = getattr(version.previous, field)
|
||||
new_data[field] = getattr(version, field)
|
||||
diff = self.make_version_diff(version, old_data, new_data, fields=fields)
|
||||
|
||||
if version.transaction_id not in vmap:
|
||||
txn = version.transaction
|
||||
|
@ -1439,13 +1429,7 @@ class PersonView(MasterView):
|
|||
'versions': [],
|
||||
}
|
||||
|
||||
vmap[version.transaction_id]['versions'].append({
|
||||
'key': id(version),
|
||||
'model_title': self.title_for_version(version),
|
||||
'diff_class': diff_class,
|
||||
'fields': fields,
|
||||
'values': values,
|
||||
})
|
||||
vmap[version.transaction_id]['versions'].append(diff.as_struct())
|
||||
|
||||
return {'data': data, 'vmap': vmap}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue