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:
Lance Edgar 2023-10-09 00:19:29 -05:00
parent edb5393cdc
commit 9efe767654
6 changed files with 118 additions and 95 deletions

View file

@ -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
##############################