From 6500428cd995ce6f55c8da3f6ea11548aa479122 Mon Sep 17 00:00:00 2001 From: Ross Date: Fri, 25 Mar 2022 21:38:12 +0000 Subject: [PATCH] . --- atlas/filters.py | 420 ++++++------ atlas/migrations/0027_auto_20220325_2138.py | 32 + atlas/models.py | 10 + atlas/tables.py | 622 +++++++++--------- .../templates/atlas/collection_case_view.html | 5 +- 5 files changed, 569 insertions(+), 520 deletions(-) create mode 100644 atlas/migrations/0027_auto_20220325_2138.py diff --git a/atlas/filters.py b/atlas/filters.py index 92f0ca87..63461a6d 100755 --- a/atlas/filters.py +++ b/atlas/filters.py @@ -1,210 +1,210 @@ -import django_filters - -from .models import ( - Case, - Condition, - Finding, - PathologicalProcess, - Presentation, - Series, - Structure, - Subspecialty, -) -from django.contrib.auth.models import User - - -def get_authors(request): - if request is None: - return User.objects.none() - - if not request.user.groups.filter(name="atlas_editor").exists(): - queryset = User.objects.filter(id=request.user.id) - else: - queryset = User.objects.all() - - return queryset - - -class CaseFilter(django_filters.FilterSet): - author = django_filters.ModelMultipleChoiceFilter( - queryset=get_authors, null_label="No author" - ) - differential_case = django_filters.ModelMultipleChoiceFilter( - label="Differential", - field_name="differentialcase__condition", - # to_field_name="differential", - queryset=Condition.objects.all(), - ) - - class Meta: - model = Case - fields = ( - "created_date", - "open_access", - "author", - "differential_case", - ) # "site", - - def __init__( - self, - data=None, - queryset=None, - prefix=None, - strict=None, - user=None, - request=None, - ): - if not request.user.groups.filter(name="atlas_editor").exists(): - # queryset = queryset.filter(open_access=True) | queryset.filter(author__id=request.user.id) - queryset = queryset.filter(author__id=request.user.id) - super(CaseFilter, self).__init__( - data=data, queryset=queryset, prefix=prefix, request=request - ) - pass - - -class SeriesFilter(django_filters.FilterSet): - case = django_filters.ModelMultipleChoiceFilter( - queryset=Case.objects.all(), null_label="No case" - ) - - class Meta: - model = Series - fields = ("modality", "case", "examination", "author") - - def __init__( - self, - data=None, - queryset=None, - prefix=None, - strict=None, - user=None, - request=None, - ): - if not request.user.groups.filter(name="atlas_editor").exists(): - # queryset = queryset.filter(open_access=True) | queryset.filter(author__id=request.user.id) - queryset = queryset.filter(author__id=request.user.id) - super(SeriesFilter, self).__init__( - data=data, queryset=queryset, prefix=prefix, request=request - ) - pass - - -class ConditionFilter(django_filters.FilterSet): - class Meta: - model = Condition - fields = ("name", "primary", "synonym", "parent", "subspecialty") - - def __init__( - self, - data=None, - queryset=None, - prefix=None, - strict=None, - user=None, - request=None, - ): - super(ConditionFilter, self).__init__( - data=data, queryset=queryset, prefix=prefix, request=request - ) - pass - - -class FindingFilter(django_filters.FilterSet): - class Meta: - model = Finding - fields = ("name", "primary", "synonym") - - def __init__( - self, - data=None, - queryset=None, - prefix=None, - strict=None, - user=None, - request=None, - ): - super(FindingFilter, self).__init__( - data=data, queryset=queryset, prefix=prefix, request=request - ) - pass - - -class StructureFilter(django_filters.FilterSet): - class Meta: - model = Structure - fields = {"name": ["icontains"], "primary": ["exact"], "synonym": ["exact"]} - - def __init__( - self, - data=None, - queryset=None, - prefix=None, - strict=None, - user=None, - request=None, - ): - super(StructureFilter, self).__init__( - data=data, queryset=queryset, prefix=prefix, request=request - ) - pass - - -class PresentationFilter(django_filters.FilterSet): - class Meta: - model = Presentation - fields = ("name", "subspecialty") - - def __init__( - self, - data=None, - queryset=None, - prefix=None, - strict=None, - user=None, - request=None, - ): - super(PresentationFilter, self).__init__( - data=data, queryset=queryset, prefix=prefix, request=request - ) - pass - - -class PathologicalProcessFilter(django_filters.FilterSet): - class Meta: - model = PathologicalProcess - fields = ("name",) - - def __init__( - self, - data=None, - queryset=None, - prefix=None, - strict=None, - user=None, - request=None, - ): - super(PathologicalProcessFilter, self).__init__( - data=data, queryset=queryset, prefix=prefix, request=request - ) - pass - - -class SubspecialtyFilter(django_filters.FilterSet): - class Meta: - model = Subspecialty - fields = ("name",) - - def __init__( - self, - data=None, - queryset=None, - prefix=None, - strict=None, - user=None, - request=None, - ): - super(SubspecialtyFilter, self).__init__( - data=data, queryset=queryset, prefix=prefix, request=request - ) - pass +import django_filters + +from .models import ( + Case, + Condition, + Finding, + PathologicalProcess, + Presentation, + Series, + Structure, + Subspecialty, +) +from django.contrib.auth.models import User + + +def get_authors(request): + if request is None: + return User.objects.none() + + if not request.user.groups.filter(name="atlas_editor").exists(): + queryset = User.objects.filter(id=request.user.id) + else: + queryset = User.objects.all() + + return queryset + + +class CaseFilter(django_filters.FilterSet): + author = django_filters.ModelMultipleChoiceFilter( + queryset=get_authors, null_label="No author" + ) + differential_case = django_filters.ModelMultipleChoiceFilter( + label="Differential", + field_name="differentialcase__condition", + # to_field_name="differential", + queryset=Condition.objects.all(), + ) + + class Meta: + model = Case + fields = ( + "created_date", + "open_access", + "author", + "differential_case", + ) # "site", + + def __init__( + self, + data=None, + queryset=None, + prefix=None, + strict=None, + user=None, + request=None, + ): + if not request.user.groups.filter(name="atlas_editor").exists(): + # queryset = queryset.filter(open_access=True) | queryset.filter(author__id=request.user.id) + queryset = queryset.prefetch_related("author").filter(author__id=request.user.id) + super(CaseFilter, self).__init__( + data=data, queryset=queryset, prefix=prefix, request=request + ) + pass + + +class SeriesFilter(django_filters.FilterSet): + case = django_filters.ModelMultipleChoiceFilter( + queryset=Case.objects.all(), null_label="No case" + ) + + class Meta: + model = Series + fields = ("modality", "case", "examination", "author") + + def __init__( + self, + data=None, + queryset=None, + prefix=None, + strict=None, + user=None, + request=None, + ): + if not request.user.groups.filter(name="atlas_editor").exists(): + # queryset = queryset.filter(open_access=True) | queryset.filter(author__id=request.user.id) + queryset = queryset.filter(author__id=request.user.id) + super(SeriesFilter, self).__init__( + data=data, queryset=queryset, prefix=prefix, request=request + ) + pass + + +class ConditionFilter(django_filters.FilterSet): + class Meta: + model = Condition + fields = ("name", "primary", "synonym", "parent", "subspecialty") + + def __init__( + self, + data=None, + queryset=None, + prefix=None, + strict=None, + user=None, + request=None, + ): + super(ConditionFilter, self).__init__( + data=data, queryset=queryset, prefix=prefix, request=request + ) + pass + + +class FindingFilter(django_filters.FilterSet): + class Meta: + model = Finding + fields = ("name", "primary", "synonym") + + def __init__( + self, + data=None, + queryset=None, + prefix=None, + strict=None, + user=None, + request=None, + ): + super(FindingFilter, self).__init__( + data=data, queryset=queryset, prefix=prefix, request=request + ) + pass + + +class StructureFilter(django_filters.FilterSet): + class Meta: + model = Structure + fields = {"name": ["icontains"], "primary": ["exact"], "synonym": ["exact"]} + + def __init__( + self, + data=None, + queryset=None, + prefix=None, + strict=None, + user=None, + request=None, + ): + super(StructureFilter, self).__init__( + data=data, queryset=queryset, prefix=prefix, request=request + ) + pass + + +class PresentationFilter(django_filters.FilterSet): + class Meta: + model = Presentation + fields = ("name", "subspecialty") + + def __init__( + self, + data=None, + queryset=None, + prefix=None, + strict=None, + user=None, + request=None, + ): + super(PresentationFilter, self).__init__( + data=data, queryset=queryset, prefix=prefix, request=request + ) + pass + + +class PathologicalProcessFilter(django_filters.FilterSet): + class Meta: + model = PathologicalProcess + fields = ("name",) + + def __init__( + self, + data=None, + queryset=None, + prefix=None, + strict=None, + user=None, + request=None, + ): + super(PathologicalProcessFilter, self).__init__( + data=data, queryset=queryset, prefix=prefix, request=request + ) + pass + + +class SubspecialtyFilter(django_filters.FilterSet): + class Meta: + model = Subspecialty + fields = ("name",) + + def __init__( + self, + data=None, + queryset=None, + prefix=None, + strict=None, + user=None, + request=None, + ): + super(SubspecialtyFilter, self).__init__( + data=data, queryset=queryset, prefix=prefix, request=request + ) + pass diff --git a/atlas/migrations/0027_auto_20220325_2138.py b/atlas/migrations/0027_auto_20220325_2138.py new file mode 100644 index 00000000..f47b1021 --- /dev/null +++ b/atlas/migrations/0027_auto_20220325_2138.py @@ -0,0 +1,32 @@ +# Generated by Django 3.2.4 on 2022-03-25 21:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('atlas', '0026_auto_20220321_1612'), + ] + + operations = [ + migrations.AlterModelOptions( + name='casedetail', + options={'ordering': ('sort_order',)}, + ), + migrations.AddField( + model_name='casecollection', + name='show_description', + field=models.BooleanField(default=False, help_text='Show the description of the cases'), + ), + migrations.AddField( + model_name='casecollection', + name='show_discussion', + field=models.BooleanField(default=False, help_text='Show the case discussion'), + ), + migrations.AddField( + model_name='casecollection', + name='show_title', + field=models.BooleanField(default=False, help_text='Show the title of the cases'), + ), + ] diff --git a/atlas/models.py b/atlas/models.py index 2d842cbd..ccd2f292 100644 --- a/atlas/models.py +++ b/atlas/models.py @@ -78,6 +78,12 @@ class SynMixin(object): # abstract = True def __str__(self) -> str: + if self.primary: + return self.name + else: + return f"{self.name} [syn]" + + def get_old_str(self) -> str: if self.primary: if self.synonym.count() == 0: return self.name @@ -559,6 +565,10 @@ class CaseCollection(models.Model): help_text="If a collection should be freely available to browse", default=True ) + show_title = models.BooleanField(default=False, help_text="Show the title of the cases") + show_description = models.BooleanField(default=False, help_text="Show the description of the cases") + show_discussion = models.BooleanField(default=False, help_text="Show the case discussion") + def get_absolute_url(self): return reverse("atlas:collection_detail_view", kwargs={"pk": self.pk}) diff --git a/atlas/tables.py b/atlas/tables.py index 9044649e..577bb5bc 100755 --- a/atlas/tables.py +++ b/atlas/tables.py @@ -1,307 +1,315 @@ -import django_tables2 as tables -from django_tables2.utils import A - -from .models import ( - Case, - Condition, - PathologicalProcess, - Presentation, - Series, - Structure, - Finding, - Subspecialty, -) - -from django.utils.html import format_html - -from easy_thumbnails.files import get_thumbnailer - -from easy_thumbnails.exceptions import InvalidImageFormatError - - -class AtlasImageColumn(tables.Column): - def render(self, value): - blocks = [] - for obj in value.all(): - blocks.append(obj.get_block()) - return format_html( - "{}".format("".join(blocks)) - ) - - obj = value.first() - - if obj is None: - return format_html("No image") - - return obj.get_thumbnail()[0] - - # image_object = obj.image - # try: - # thumbnailer = get_thumbnailer(image_object) - # return format_html('', thumbnailer["exam-list"]) - # except InvalidImageFormatError: - # return format_html('Invalid image url', image_object) - - -class SeriesImageColumn(tables.Column): - def render(self, value): - obj = value.first() - - if obj is None: - return "None" - - image_object = obj.image - try: - thumbnailer = get_thumbnailer(image_object) - return format_html( - '
[{}]', - thumbnailer["exam-list"], - value.count(), - ) - except InvalidImageFormatError: - return format_html( - 'Invalid image url
[{}]', - image_object, - value.count(), - ) - - -class CaseTable(tables.Table): - edit = tables.LinkColumn( - "atlas:case_update", text="Edit", args=[A("pk")], orderable=False - ) - view = tables.LinkColumn( - "atlas:case_detail", text="View", args=[A("pk")], orderable=False - ) - clone = tables.LinkColumn( - "atlas:case_clone", text="Clone", args=[A("pk")], orderable=False - ) - delete = tables.LinkColumn( - "atlas:case_delete", text="Delete", args=[A("pk")], orderable=False - ) - series = AtlasImageColumn("Images", orderable=False) - - differential = tables.ManyToManyColumn(verbose_name="Differential") - - selection = tables.CheckBoxColumn(accessor="pk", orderable=False) - - class Meta: - model = Case - template_name = "django_tables2/bootstrap4.html" - fields = ( - "title", - "description", - "history", - "condition", - "created_date", - "author", - ) - sequence = ("view", "series") - - -class PopupLinkColumn(tables.Column): - def render(self, value): - return format_html("test: {}", value) - obj = value.first() - - if obj is None: - return format_html("No image") - - return obj.get_thumbnail()[0] - - -def create_link(test): - print(test) - return "Hello" - - -class SeriesTable(tables.Table): - edit = tables.LinkColumn( - "atlas:series_update", text="Edit", args=[A("pk")], orderable=False - ) - view = tables.LinkColumn( - "atlas:series_detail", text="View", args=[A("pk")], orderable=False - ) - popup = tables.Column(empty_values=(), orderable=False) - - images = SeriesImageColumn("Images", orderable=False) - - delete = tables.LinkColumn( - "atlas:series_delete", text="Delete", args=[A("pk")], orderable=False - ) - selection = tables.CheckBoxColumn(accessor="pk", orderable=False) - - case = tables.ManyToManyColumn(verbose_name="Cases") - findings = tables.ManyToManyColumn(verbose_name="Findings") - structures = tables.ManyToManyColumn(verbose_name="Structures") - - class Meta: - model = Series - template_name = "django_tables2/bootstrap4.html" - fields = ( - "modality", - "description", - "examination", - "plane", - "contrast", - "author", - ) - sequence = ("view", "popup", "images", "case") - - def render_popup(self, value, record): - print(self) - return format_html( - """Popup""", - record.pk, - ) - - -class ConditionTable(tables.Table): - name = tables.Column( - linkify=("atlas:condition_detail", {"pk": tables.A("pk")}), - verbose_name="Condition", - ) - - edit = tables.LinkColumn( - "atlas:condition_update", text="Edit", args=[A("pk")], orderable=False - ) - delete = tables.LinkColumn( - "atlas:condition_delete", text="Delete", args=[A("pk")], orderable=False - ) - selection = tables.CheckBoxColumn(accessor="pk", orderable=False) - - # synonym = tables.ManyToManyColumn(verbose_name="Synonyms") - synonym = tables.Column(empty_values=()) - parent = tables.ManyToManyColumn(verbose_name="Parents") - - class Meta: - model = Condition - template_name = "django_tables2/bootstrap4.html" - fields = ("primary", "subspecialty") - sequence = ("name",) - - def render_synonym(self, value, record): - return format_html(record.get_synonym_link()) - return f"{record.get_synonym_link()}" - - -class FindingTable(tables.Table): - name = tables.Column( - linkify=("atlas:finding_detail", {"pk": tables.A("pk")}), verbose_name="Finding" - ) - edit = tables.LinkColumn( - "atlas:finding_update", text="Edit", args=[A("pk")], orderable=False - ) - delete = tables.LinkColumn( - "atlas:finding_delete", text="Delete", args=[A("pk")], orderable=False - ) - selection = tables.CheckBoxColumn(accessor="pk", orderable=False) - - # synonym = tables.ManyToManyColumn(verbose_name="Synonyms") - synonym = tables.Column(empty_values=()) - parent = tables.ManyToManyColumn(verbose_name="Parents") - - class Meta: - model = Finding - template_name = "django_tables2/bootstrap4.html" - fields = ("name", "primary") - sequence = ("name",) - - def render_synonym(self, value, record): - return format_html(record.get_synonym_link()) - - -class StructureTable(tables.Table): - name = tables.Column( - linkify=("atlas:structure_detail", {"pk": tables.A("pk")}), - verbose_name="Structure", - ) - edit = tables.LinkColumn( - "atlas:structure_update", text="Edit", args=[A("pk")], orderable=False - ) - delete = tables.LinkColumn( - "atlas:structure_delete", text="Delete", args=[A("pk")], orderable=False - ) - selection = tables.CheckBoxColumn(accessor="pk", orderable=False) - - # synonym = tables.ManyToManyColumn(verbose_name="Synonyms") - synonym = tables.Column(empty_values=()) - parent = tables.ManyToManyColumn(verbose_name="Parents") - - class Meta: - model = Structure - template_name = "django_tables2/bootstrap4.html" - fields = ("name", "primary") - sequence = ("name",) - - def render_synonym(self, value, record): - return format_html(record.get_synonym_link()) - - -class PresentationTable(tables.Table): - name = tables.Column( - linkify=("atlas:presentation_detail", {"pk": tables.A("pk")}), - verbose_name="Presentation", - ) - - # edit = tables.LinkColumn( - # "atlas:presentation_update", text="Edit", args=[A("pk")], orderable=False - # ) - # delete = tables.LinkColumn( - # "atlas:presentation_delete", text="Delete", args=[A("pk")], orderable=False - # ) - selection = tables.CheckBoxColumn(accessor="pk", orderable=False) - - subspecialty = tables.ManyToManyColumn(verbose_name="Subspecialty") - - class Meta: - model = Presentation - template_name = "django_tables2/bootstrap4.html" - fields = ("name",) - sequence = ("name",) - - -class PathologicalProcessTable(tables.Table): - name = tables.Column( - linkify=("atlas:pathological_process_detail", {"pk": tables.A("pk")}), - verbose_name="PathologicalProcess", - ) - - # edit = tables.LinkColumn( - # "atlas:pathological_process_update", text="Edit", args=[A("pk")], orderable=False - # ) - # delete = tables.LinkColumn( - # "atlas:pathological_process_delete", text="Delete", args=[A("pk")], orderable=False - # ) - selection = tables.CheckBoxColumn(accessor="pk", orderable=False) - - class Meta: - model = PathologicalProcess - template_name = "django_tables2/bootstrap4.html" - fields = ("name",) - sequence = ("name",) - - -class SubspecialtyTable(tables.Table): - name = tables.Column( - linkify=("atlas:subspecialty_detail", {"pk": tables.A("pk")}), - verbose_name="Subspecialty", - ) - - # edit = tables.LinkColumn( - # "atlas:subspecialty_update", text="Edit", args=[A("pk")], orderable=False - # ) - # delete = tables.LinkColumn( - # "atlas:subspecialty_delete", text="Delete", args=[A("pk")], orderable=False - # ) - selection = tables.CheckBoxColumn(accessor="pk", orderable=False) - - class Meta: - model = Subspecialty - template_name = "django_tables2/bootstrap4.html" - fields = () - sequence = ("name",) - - def render_synonym(self, value, record): - return format_html(record.get_synonym_link()) - return f"{record.get_synonym_link()}" +import django_tables2 as tables +from django_tables2.utils import A + +from .models import ( + Case, + Condition, + PathologicalProcess, + Presentation, + Series, + Structure, + Finding, + Subspecialty, +) + +from django.utils.html import format_html + +from easy_thumbnails.files import get_thumbnailer + +from easy_thumbnails.exceptions import InvalidImageFormatError + + +class AtlasImageColumn(tables.Column): + def render(self, value): + blocks = [] + for obj in value.all(): + blocks.append(obj.get_block()) + return format_html( + "{}".format("".join(blocks)) + ) + + obj = value.first() + + if obj is None: + return format_html("No image") + + return obj.get_thumbnail()[0] + + # image_object = obj.image + # try: + # thumbnailer = get_thumbnailer(image_object) + # return format_html('', thumbnailer["exam-list"]) + # except InvalidImageFormatError: + # return format_html('Invalid image url', image_object) + + +class SeriesImageColumn(tables.Column): + def render(self, value): + obj = value.first() + + if obj is None: + return "None" + + image_object = obj.image + try: + thumbnailer = get_thumbnailer(image_object) + return format_html( + '
[{}]', + thumbnailer["exam-list"], + value.count(), + ) + except InvalidImageFormatError: + return format_html( + 'Invalid image url
[{}]', + image_object, + value.count(), + ) + + +class CaseTable(tables.Table): + edit = tables.LinkColumn( + "atlas:case_update", text="Edit", args=[A("pk")], orderable=False + ) + view = tables.LinkColumn( + "atlas:case_detail", text="View", args=[A("pk")], orderable=False + ) + clone = tables.LinkColumn( + "atlas:case_clone", text="Clone", args=[A("pk")], orderable=False + ) + delete = tables.LinkColumn( + "atlas:case_delete", text="Delete", args=[A("pk")], orderable=False + ) + #series = AtlasImageColumn("Images", orderable=False) + + #differential = tables.ManyToManyColumn(verbose_name="Differential") + + selection = tables.CheckBoxColumn(accessor="pk", orderable=False) + + class Meta: + model = Case + template_name = "django_tables2/bootstrap4.html" + fields = ( + "title", + "description", + "history", + #"condition", + "created_date", + "author", + ) + sequence = ("view", )#, "series") + + def __init__(self, data=None, *args, **kwargs): + super().__init__( + data.prefetch_related( + #"condition", "condition__synonym" + ), + *args, + **kwargs, + ) + +class PopupLinkColumn(tables.Column): + def render(self, value): + return format_html("test: {}", value) + obj = value.first() + + if obj is None: + return format_html("No image") + + return obj.get_thumbnail()[0] + + +def create_link(test): + print(test) + return "Hello" + + +class SeriesTable(tables.Table): + edit = tables.LinkColumn( + "atlas:series_update", text="Edit", args=[A("pk")], orderable=False + ) + view = tables.LinkColumn( + "atlas:series_detail", text="View", args=[A("pk")], orderable=False + ) + popup = tables.Column(empty_values=(), orderable=False) + + images = SeriesImageColumn("Images", orderable=False) + + delete = tables.LinkColumn( + "atlas:series_delete", text="Delete", args=[A("pk")], orderable=False + ) + selection = tables.CheckBoxColumn(accessor="pk", orderable=False) + + case = tables.ManyToManyColumn(verbose_name="Cases") + findings = tables.ManyToManyColumn(verbose_name="Findings") + structures = tables.ManyToManyColumn(verbose_name="Structures") + + class Meta: + model = Series + template_name = "django_tables2/bootstrap4.html" + fields = ( + "modality", + "description", + "examination", + "plane", + "contrast", + "author", + ) + sequence = ("view", "popup", "images", "case") + + def render_popup(self, value, record): + print(self) + return format_html( + """Popup""", + record.pk, + ) + + +class ConditionTable(tables.Table): + name = tables.Column( + linkify=("atlas:condition_detail", {"pk": tables.A("pk")}), + verbose_name="Condition", + ) + + edit = tables.LinkColumn( + "atlas:condition_update", text="Edit", args=[A("pk")], orderable=False + ) + delete = tables.LinkColumn( + "atlas:condition_delete", text="Delete", args=[A("pk")], orderable=False + ) + selection = tables.CheckBoxColumn(accessor="pk", orderable=False) + + # synonym = tables.ManyToManyColumn(verbose_name="Synonyms") + synonym = tables.Column(empty_values=()) + parent = tables.ManyToManyColumn(verbose_name="Parents") + + class Meta: + model = Condition + template_name = "django_tables2/bootstrap4.html" + fields = ("primary", "subspecialty") + sequence = ("name",) + + def render_synonym(self, value, record): + return format_html(record.get_synonym_link()) + return f"{record.get_synonym_link()}" + + +class FindingTable(tables.Table): + name = tables.Column( + linkify=("atlas:finding_detail", {"pk": tables.A("pk")}), verbose_name="Finding" + ) + edit = tables.LinkColumn( + "atlas:finding_update", text="Edit", args=[A("pk")], orderable=False + ) + delete = tables.LinkColumn( + "atlas:finding_delete", text="Delete", args=[A("pk")], orderable=False + ) + selection = tables.CheckBoxColumn(accessor="pk", orderable=False) + + # synonym = tables.ManyToManyColumn(verbose_name="Synonyms") + synonym = tables.Column(empty_values=()) + parent = tables.ManyToManyColumn(verbose_name="Parents") + + class Meta: + model = Finding + template_name = "django_tables2/bootstrap4.html" + fields = ("name", "primary") + sequence = ("name",) + + def render_synonym(self, value, record): + return format_html(record.get_synonym_link()) + + +class StructureTable(tables.Table): + name = tables.Column( + linkify=("atlas:structure_detail", {"pk": tables.A("pk")}), + verbose_name="Structure", + ) + edit = tables.LinkColumn( + "atlas:structure_update", text="Edit", args=[A("pk")], orderable=False + ) + delete = tables.LinkColumn( + "atlas:structure_delete", text="Delete", args=[A("pk")], orderable=False + ) + selection = tables.CheckBoxColumn(accessor="pk", orderable=False) + + # synonym = tables.ManyToManyColumn(verbose_name="Synonyms") + synonym = tables.Column(empty_values=()) + parent = tables.ManyToManyColumn(verbose_name="Parents") + + class Meta: + model = Structure + template_name = "django_tables2/bootstrap4.html" + fields = ("name", "primary") + sequence = ("name",) + + def render_synonym(self, value, record): + return format_html(record.get_synonym_link()) + + +class PresentationTable(tables.Table): + name = tables.Column( + linkify=("atlas:presentation_detail", {"pk": tables.A("pk")}), + verbose_name="Presentation", + ) + + # edit = tables.LinkColumn( + # "atlas:presentation_update", text="Edit", args=[A("pk")], orderable=False + # ) + # delete = tables.LinkColumn( + # "atlas:presentation_delete", text="Delete", args=[A("pk")], orderable=False + # ) + selection = tables.CheckBoxColumn(accessor="pk", orderable=False) + + subspecialty = tables.ManyToManyColumn(verbose_name="Subspecialty") + + class Meta: + model = Presentation + template_name = "django_tables2/bootstrap4.html" + fields = ("name",) + sequence = ("name",) + + +class PathologicalProcessTable(tables.Table): + name = tables.Column( + linkify=("atlas:pathological_process_detail", {"pk": tables.A("pk")}), + verbose_name="PathologicalProcess", + ) + + # edit = tables.LinkColumn( + # "atlas:pathological_process_update", text="Edit", args=[A("pk")], orderable=False + # ) + # delete = tables.LinkColumn( + # "atlas:pathological_process_delete", text="Delete", args=[A("pk")], orderable=False + # ) + selection = tables.CheckBoxColumn(accessor="pk", orderable=False) + + class Meta: + model = PathologicalProcess + template_name = "django_tables2/bootstrap4.html" + fields = ("name",) + sequence = ("name",) + + +class SubspecialtyTable(tables.Table): + name = tables.Column( + linkify=("atlas:subspecialty_detail", {"pk": tables.A("pk")}), + verbose_name="Subspecialty", + ) + + # edit = tables.LinkColumn( + # "atlas:subspecialty_update", text="Edit", args=[A("pk")], orderable=False + # ) + # delete = tables.LinkColumn( + # "atlas:subspecialty_delete", text="Delete", args=[A("pk")], orderable=False + # ) + selection = tables.CheckBoxColumn(accessor="pk", orderable=False) + + class Meta: + model = Subspecialty + template_name = "django_tables2/bootstrap4.html" + fields = () + sequence = ("name",) + + def render_synonym(self, value, record): + return format_html(record.get_synonym_link()) + return f"{record.get_synonym_link()}" diff --git a/atlas/templates/atlas/collection_case_view.html b/atlas/templates/atlas/collection_case_view.html index 7b07f69e..b73e872f 100644 --- a/atlas/templates/atlas/collection_case_view.html +++ b/atlas/templates/atlas/collection_case_view.html @@ -11,9 +11,6 @@ {{series.get_block}} - - Popup {% endfor %} @@ -45,7 +42,9 @@ Return to collection } $(document).ready(function () { + setTimeout(() => { window.loadDicomViewer(window.images[0]) + }, 500); })