start working on case_study bulk editiing and add relative dates to the model
This commit is contained in:
@@ -840,6 +840,12 @@ class Case(models.Model, AuthorMixin, QuestionMixin):
|
||||
|
||||
cimar_uuid = models.CharField(max_length=255, null=True, blank=True)
|
||||
|
||||
study_date = models.DateField(
|
||||
null=True,
|
||||
blank=True,
|
||||
help_text="Optional manually overridden study date for linked case series.",
|
||||
)
|
||||
|
||||
def get_ordered_series_details(self):
|
||||
cached = getattr(self, "_ordered_series_details_cache", None)
|
||||
if cached is not None:
|
||||
@@ -873,6 +879,41 @@ class Case(models.Model, AuthorMixin, QuestionMixin):
|
||||
self._ordered_series_cache = ordered
|
||||
return ordered
|
||||
|
||||
@staticmethod
|
||||
def _parse_dicom_date(value):
|
||||
if not value:
|
||||
return None
|
||||
try:
|
||||
return datetime.datetime.strptime(str(value), "%Y%m%d").date()
|
||||
except (TypeError, ValueError):
|
||||
return None
|
||||
|
||||
def get_effective_study_date(self):
|
||||
if self.study_date:
|
||||
return self.study_date
|
||||
|
||||
for series in self.get_ordered_series():
|
||||
image = series.images.filter(removed=False).first()
|
||||
if not image:
|
||||
continue
|
||||
try:
|
||||
ds = image.get_dicom_data()
|
||||
except Exception:
|
||||
ds = None
|
||||
if not ds:
|
||||
continue
|
||||
|
||||
raw_date = (
|
||||
getattr(ds, "StudyDate", None)
|
||||
or getattr(ds, "AcquisitionDate", None)
|
||||
or getattr(ds, "SeriesDate", None)
|
||||
)
|
||||
parsed = self._parse_dicom_date(raw_date)
|
||||
if parsed:
|
||||
return parsed
|
||||
|
||||
return None
|
||||
|
||||
def get_app_name(self):
|
||||
return "atlas"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user