diff --git a/atlas/api.py b/atlas/api.py index 4ed20578..c35df6e9 100644 --- a/atlas/api.py +++ b/atlas/api.py @@ -66,11 +66,17 @@ def upload_dicom(request, files: List[UploadedFile] = File(...)): return {"uploaded": uploaded, "duplicates": duplicate} -@router.get("/clear_dicoms", auth=django_auth) +@router.post("/clear_dicoms", auth=django_auth) def clear_dicoms(request): - dicoms = UncategorisedDicom.objects.filter(user=request.user) + + if "selection" in request.POST: + dicoms = UncategorisedDicom.objects.filter(series_instance_uid__in=request.POST.getlist("selection")) + + else: + dicoms = UncategorisedDicom.objects.filter(user=request.user) dicoms.delete() + print(dicoms) return True @@ -90,7 +96,12 @@ def uncategorised_dicoms(request): def import_dicoms_helper(request, case_id: int | None = None): - dicoms = UncategorisedDicom.objects.filter(user=request.user) + #dicoms = UncategorisedDicom.objects.filter(user=request.user) + if "selection" in request.POST: + dicoms = UncategorisedDicom.objects.filter(series_instance_uid__in=request.POST.getlist("selection")) + + else: + dicoms = UncategorisedDicom.objects.filter(user=request.user) data = defaultdict(list) for d in dicoms: @@ -136,12 +147,12 @@ def import_dicoms_helper(request, case_id: int | None = None): return series_list -@router.get("/import_dicoms", auth=django_auth, response=List[SeriesSchema]) +@router.post("/import_dicoms", auth=django_auth, response=List[SeriesSchema]) def import_dicoms(request): return import_dicoms_helper(request) -@router.get("/import_dicoms/{case_id}", auth=django_auth, response=List[SeriesSchema]) +@router.post("/import_dicoms/{case_id}", auth=django_auth, response=List[SeriesSchema]) def import_dicoms_case(request, case_id: int): return import_dicoms_helper(request, case_id=case_id) diff --git a/atlas/forms.py b/atlas/forms.py index 155ec906..70dfda67 100755 --- a/atlas/forms.py +++ b/atlas/forms.py @@ -223,7 +223,7 @@ class SeriesForm(ModelForm): class Meta: model = Series - exclude = ["author"] + exclude = ["author", "series_instance_uid"] widgets = { "examination": autocomplete.ModelSelect2( diff --git a/atlas/migrations/0017_series_created_at_series_updated_at.py b/atlas/migrations/0017_series_created_at_series_updated_at.py new file mode 100644 index 00000000..d083010e --- /dev/null +++ b/atlas/migrations/0017_series_created_at_series_updated_at.py @@ -0,0 +1,25 @@ +# Generated by Django 4.1.4 on 2023-10-23 08:53 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0016_remove_uncategoriseddicom_is_dicom'), + ] + + operations = [ + migrations.AddField( + model_name='series', + name='created_at', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + migrations.AddField( + model_name='series', + name='updated_at', + field=models.DateTimeField(auto_now=True), + ), + ] diff --git a/atlas/migrations/0018_rename_created_at_series_created_date_and_more.py b/atlas/migrations/0018_rename_created_at_series_created_date_and_more.py new file mode 100644 index 00000000..a61aa931 --- /dev/null +++ b/atlas/migrations/0018_rename_created_at_series_created_date_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.1.4 on 2023-10-23 09:00 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0017_series_created_at_series_updated_at'), + ] + + operations = [ + migrations.RenameField( + model_name='series', + old_name='created_at', + new_name='created_date', + ), + migrations.RenameField( + model_name='series', + old_name='updated_at', + new_name='modified_date', + ), + ] diff --git a/atlas/migrations/0019_uncategoriseddicom_series_instance_uid.py b/atlas/migrations/0019_uncategoriseddicom_series_instance_uid.py new file mode 100644 index 00000000..76b4740d --- /dev/null +++ b/atlas/migrations/0019_uncategoriseddicom_series_instance_uid.py @@ -0,0 +1,19 @@ +# Generated by Django 4.1.4 on 2023-10-23 10:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0018_rename_created_at_series_created_date_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='uncategoriseddicom', + name='series_instance_uid', + field=models.CharField(default='test', max_length=255), + preserve_default=False, + ), + ] diff --git a/atlas/migrations/0020_alter_uncategoriseddicom_series_instance_uid.py b/atlas/migrations/0020_alter_uncategoriseddicom_series_instance_uid.py new file mode 100644 index 00000000..5194ad6d --- /dev/null +++ b/atlas/migrations/0020_alter_uncategoriseddicom_series_instance_uid.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.4 on 2023-10-23 10:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0019_uncategoriseddicom_series_instance_uid'), + ] + + operations = [ + migrations.AlterField( + model_name='uncategoriseddicom', + name='series_instance_uid', + field=models.CharField(default='', max_length=255), + ), + ] diff --git a/atlas/migrations/0021_alter_uncategoriseddicom_series_instance_uid.py b/atlas/migrations/0021_alter_uncategoriseddicom_series_instance_uid.py new file mode 100644 index 00000000..eaeba039 --- /dev/null +++ b/atlas/migrations/0021_alter_uncategoriseddicom_series_instance_uid.py @@ -0,0 +1,18 @@ +# Generated by Django 4.1.4 on 2023-10-23 10:51 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0020_alter_uncategoriseddicom_series_instance_uid'), + ] + + operations = [ + migrations.AlterField( + model_name='uncategoriseddicom', + name='series_instance_uid', + field=models.CharField(default='', max_length=255, null=True), + ), + ] diff --git a/atlas/migrations/0022_alter_uncategoriseddicom_series_and_more.py b/atlas/migrations/0022_alter_uncategoriseddicom_series_and_more.py new file mode 100644 index 00000000..390cd44c --- /dev/null +++ b/atlas/migrations/0022_alter_uncategoriseddicom_series_and_more.py @@ -0,0 +1,24 @@ +# Generated by Django 4.1.4 on 2023-10-23 11:07 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0021_alter_uncategoriseddicom_series_instance_uid'), + ] + + operations = [ + migrations.AlterField( + model_name='uncategoriseddicom', + name='series', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='imported_dicoms', to='atlas.series'), + ), + migrations.AlterField( + model_name='uncategoriseddicom', + name='series_instance_uid', + field=models.CharField(blank=True, max_length=255, null=True), + ), + ] diff --git a/atlas/models.py b/atlas/models.py index 157f5b42..2037eb00 100644 --- a/atlas/models.py +++ b/atlas/models.py @@ -811,9 +811,11 @@ class UncategorisedDicom(models.Model): ) series = models.ForeignKey( - "Series", related_name="imported_dicoms", on_delete=models.SET_NULL, null=True + "Series", related_name="imported_dicoms", on_delete=models.SET_NULL, null=True, blank=True ) + series_instance_uid = models.CharField(max_length=255, blank=True, null=True) + image_md5_hash = models.CharField(max_length=32, null=True, blank=True) def check_for_duplicates(self, image_hash): @@ -833,10 +835,14 @@ class UncategorisedDicom(models.Model): def save(self, *args, **kwargs): """Override save method to add image hash""" if self.image: + + ds = self.get_dicom_info() + + self.series_instance_uid = ds["SeriesInstanceUID"].value + # if self.check_for_duplicates(): # return DuplicateDicom - image_hash = get_image_dicom_hash(self.image) - + image_hash = get_image_dicom_hash(None, dataset=ds) self.image_md5_hash = image_hash diff --git a/atlas/tables.py b/atlas/tables.py index 737ed241..8265b6fd 100755 --- a/atlas/tables.py +++ b/atlas/tables.py @@ -110,6 +110,8 @@ class SeriesTable(tables.Table): "plane", "contrast", "author", + "created_date", + "modified_date", ) sequence = ("view", "popup", "images", "case") diff --git a/atlas/templates/atlas/case_display_block.html b/atlas/templates/atlas/case_display_block.html index 3e4da7b7..a7b3c9bd 100755 --- a/atlas/templates/atlas/case_display_block.html +++ b/atlas/templates/atlas/case_display_block.html @@ -1,5 +1,5 @@
Scrapped: {{ case.scrapped }} (toggle) {% endcomment %} diff --git a/atlas/templates/atlas/series_form.html b/atlas/templates/atlas/series_form.html index 52b03afb..bb008de8 100755 --- a/atlas/templates/atlas/series_form.html +++ b/atlas/templates/atlas/series_form.html @@ -411,7 +411,7 @@ {{ form.media }} {% endblock %} {% block content %} -