improve the linked cases editor

This commit is contained in:
Ross
2026-06-01 10:43:19 +01:00
parent 40cea43578
commit 1d85666127
4 changed files with 341 additions and 32 deletions
+51 -4
View File
@@ -888,14 +888,22 @@ class Case(models.Model, AuthorMixin, QuestionMixin):
except (TypeError, ValueError):
return None
def get_effective_study_date(self):
if self.study_date:
return self.study_date
def _get_series_study_date(self):
for series in self.get_ordered_series():
image = series.images.filter(removed=False).first()
if not image:
continue
tags = getattr(image, "basic_dicom_tags", None) or {}
raw_date = (
tags.get("StudyDate")
or tags.get("AcquisitionDate")
or tags.get("SeriesDate")
)
parsed = self._parse_dicom_date(raw_date)
if parsed:
return parsed
try:
ds = image.get_dicom_data()
except Exception:
@@ -914,6 +922,20 @@ class Case(models.Model, AuthorMixin, QuestionMixin):
return None
def get_effective_study_date(self):
if self.study_date:
return self.study_date
return self._get_series_study_date()
def save(self, *args, **kwargs):
if self.pk and not self.study_date:
derived_study_date = self._get_series_study_date()
if derived_study_date:
self.study_date = derived_study_date
super().save(*args, **kwargs)
def get_app_name(self):
return "atlas"
@@ -1352,6 +1374,20 @@ class SeriesImage(SeriesImageBase):
# }}
@receiver(post_save, sender=SeriesImage)
def _populate_case_study_date_on_series_image_save(sender, instance, **kwargs):
if not instance.series_id:
return
tags = instance.basic_dicom_tags or {}
raw_date = tags.get("StudyDate") or tags.get("AcquisitionDate") or tags.get("SeriesDate")
parsed = Case._parse_dicom_date(raw_date)
if not parsed:
return
Case.objects.filter(series=instance.series, study_date__isnull=True).update(study_date=parsed)
@receiver(pre_save, sender=SeriesImage)
def _capture_previous_series_for_series_image(sender, instance, **kwargs):
if not getattr(instance, "pk", None):
@@ -2084,6 +2120,17 @@ class SeriesDetail(models.Model):
class Meta:
ordering = ("sort_order",)
@receiver(post_save, sender=SeriesDetail)
def _populate_case_study_date_on_series_link(sender, instance, created, **kwargs):
case = instance.case
if case.study_date:
return
derived_study_date = case._get_series_study_date()
if derived_study_date:
Case.objects.filter(pk=case.pk, study_date__isnull=True).update(study_date=derived_study_date)
class CaseDisplaySet(models.Model, AuthorMixin):
"""
This is analogous to a SeriesFinding but for a Case (it has