summaryrefslogtreecommitdiff
path: root/archaeological_finds/models_finds.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds/models_finds.py')
-rw-r--r--archaeological_finds/models_finds.py48
1 files changed, 35 insertions, 13 deletions
diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py
index 360e18393..330dc2f78 100644
--- a/archaeological_finds/models_finds.py
+++ b/archaeological_finds/models_finds.py
@@ -2613,32 +2613,54 @@ class Find(
statement_conditions_list = list(
self.statement_conditions.filter(initial=False).order_by("pk").all())
q = self.statement_conditions.order_by("-pk").filter(initial=True)
- if q.exists():
- previous = q.all()[0]
+ has_previous = q.exists()
+ first_statement_condition = None
+ if has_previous:
+ first_statement_condition = previous = q.all()[0]
else: # if no initial is set get diff from the find
previous = self
- for state in statement_conditions_list:
+ for idx, state in enumerate(statement_conditions_list):
diff = {}
+ initial = {} if not idx else None
for field in StatementCondition._meta.get_fields():
attr = field.name
if attr in StatementCondition.OVERLOADED_FIELDS:
previous_value = getattr(previous, attr) or None
value = getattr(state, attr) or None
- if previous_value != value:
- if value is None or value == "":
- value = "-"
- diff[field.verbose_name] = value
+ if previous_value == value:
+ continue
+ if value is None or value == "":
+ value = "-"
+ diff[field.verbose_name] = value
+ if initial is None or not first_statement_condition:
+ continue
+ if previous_value is None or previous_value == "":
+ previous_value = "-"
+ initial[field.verbose_name] = previous_value
elif attr in StatementCondition.OVERLOADED_M2M_FIELDS:
previous_value = [str(v) for v in getattr(previous, attr).all()]
value = [str(v) for v in list(getattr(state, attr).all())]
- if previous_value != value:
- if value:
- diff[field.verbose_name] = " ; ".join(value)
- else:
- diff[field.verbose_name] = "-"
+ if previous_value == value:
+ continue
+ if value:
+ diff[field.verbose_name] = " ; ".join(value)
+ else:
+ diff[field.verbose_name] = "-"
+ if initial is None or not first_statement_condition:
+ continue
+ if previous_value:
+ previous_value = " ; ".join(previous_value)
+ else:
+ previous_value = "-"
+ initial[field.verbose_name] = previous_value
state.diff = diff
previous = state
- return list(reversed(statement_conditions_list))
+ if initial and first_statement_condition:
+ first_statement_condition.diff = initial
+ lst = list(reversed(statement_conditions_list))
+ if first_statement_condition:
+ lst.append(first_statement_condition)
+ return lst
@property
def has_packaging_for_current_container(self):