improve the linked cases editor
This commit is contained in:
+51
-4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user