lots of further updates
This commit is contained in:
@@ -15,6 +15,8 @@ from .models import (
|
|||||||
PathologicalProcess,
|
PathologicalProcess,
|
||||||
Presentation,
|
Presentation,
|
||||||
UncategorisedDicom,
|
UncategorisedDicom,
|
||||||
|
SeriesDetail,
|
||||||
|
Resource
|
||||||
)
|
)
|
||||||
|
|
||||||
from django.forms import ModelForm
|
from django.forms import ModelForm
|
||||||
@@ -42,6 +44,8 @@ admin.site.register(PathologicalProcess)
|
|||||||
admin.site.register(Presentation)
|
admin.site.register(Presentation)
|
||||||
admin.site.register(CaseDetail)
|
admin.site.register(CaseDetail)
|
||||||
admin.site.register(UncategorisedDicom)
|
admin.site.register(UncategorisedDicom)
|
||||||
|
admin.site.register(SeriesDetail)
|
||||||
|
admin.site.register(Resource)
|
||||||
|
|
||||||
|
|
||||||
class DifferentialInline(admin.TabularInline):
|
class DifferentialInline(admin.TabularInline):
|
||||||
|
|||||||
@@ -23,6 +23,8 @@ from generic.models import Examination, Modality
|
|||||||
|
|
||||||
from .models import Case, DuplicateDicom, Series, SeriesImage, UncategorisedDicom
|
from .models import Case, DuplicateDicom, Series, SeriesImage, UncategorisedDicom
|
||||||
|
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
@@ -52,6 +54,7 @@ class CaseSchema(ModelSchema):
|
|||||||
model_fields = ["id", "title"]
|
model_fields = ["id", "title"]
|
||||||
|
|
||||||
|
|
||||||
|
@logger.catch()
|
||||||
@router.post("/upload_dicom", auth=django_auth)
|
@router.post("/upload_dicom", auth=django_auth)
|
||||||
def upload_dicom(request, files: List[UploadedFile] = File(...)):
|
def upload_dicom(request, files: List[UploadedFile] = File(...)):
|
||||||
uploaded = []
|
uploaded = []
|
||||||
|
|||||||
@@ -696,3 +696,6 @@ class CaseCollectionAuthorForm(ExamAuthorFormMixin):
|
|||||||
class CaseAuthorForm(ExamAuthorFormMixin):
|
class CaseAuthorForm(ExamAuthorFormMixin):
|
||||||
class Meta(ExamAuthorFormMixin.Meta):
|
class Meta(ExamAuthorFormMixin.Meta):
|
||||||
model = Case
|
model = Case
|
||||||
|
class SeriesAuthorForm(ExamAuthorFormMixin):
|
||||||
|
class Meta(ExamAuthorFormMixin.Meta):
|
||||||
|
model = Series
|
||||||
@@ -69,6 +69,8 @@ from django.contrib.contenttypes.fields import GenericRelation
|
|||||||
|
|
||||||
from django.core.validators import MaxValueValidator, MinValueValidator
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
||||||
|
|
||||||
|
from loguru import logger
|
||||||
|
|
||||||
|
|
||||||
image_storage = FileSystemStorage(
|
image_storage = FileSystemStorage(
|
||||||
# Physical file location ROOT
|
# Physical file location ROOT
|
||||||
@@ -685,6 +687,13 @@ class Series(SeriesBase):
|
|||||||
|
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
def get_base_template(self):
|
||||||
|
return "atlas/base.html"
|
||||||
|
|
||||||
|
def get_link_headers(self):
|
||||||
|
return "atlas/series_headers.html"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CaseCollection(ExamOrCollectionGenericBase):
|
class CaseCollection(ExamOrCollectionGenericBase):
|
||||||
app_name = "atlas"
|
app_name = "atlas"
|
||||||
@@ -1099,6 +1108,7 @@ class UncategorisedDicom(models.Model):
|
|||||||
|
|
||||||
return duplicate
|
return duplicate
|
||||||
|
|
||||||
|
@logger.catch()
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
"""Override save method to add image hash"""
|
"""Override save method to add image hash"""
|
||||||
if self.image:
|
if self.image:
|
||||||
|
|||||||
@@ -71,7 +71,7 @@
|
|||||||
<div class="alert alert-info" role="alert">Creating a case in the collection: <a href="{% url 'atlas:collection_detail' pk=form.collection.pk %}">{{form.collection.name}}</a></div>
|
<div class="alert alert-info" role="alert">Creating a case in the collection: <a href="{% url 'atlas:collection_detail' pk=form.collection.pk %}">{{form.collection.name}}</a></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<form action="" method="post" enctype="multipart/form-data" id="atlas-form">
|
<form class="highlight" action="" method="post" enctype="multipart/form-data" id="atlas-form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|
||||||
{{ form }}
|
{{ form }}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<form action="" method="post" enctype="multipart/form-data" id="atlas-form">
|
<form class="highlight" action="" method="post" enctype="multipart/form-data" id="atlas-form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|
||||||
{{ form }}
|
{{ form }}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
Adding self feedback for {{user_exam.exam}}/{{case}}
|
Adding self feedback for {{user_exam.exam}}/{{case}}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<form action="" method="post">
|
<form class="highlight" action="" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.non_field_errors }}
|
{{ form.non_field_errors }}
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
|
|
||||||
{% extends "atlas/base.html" %}
|
{% extends "atlas/base.html" %}
|
||||||
|
|
||||||
|
{% block navigation%}
|
||||||
|
|
||||||
|
{{ block.super }}
|
||||||
|
{% include 'atlas/series_headers.html' %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<a href="{% url 'atlas:series_update' pk=series.pk %}" title="Edit the Series">Edit</a>
|
|
||||||
<a href="{% url 'atlas:series_delete' pk=series.pk %}" title="Delete the Series">Delete</a>
|
|
||||||
{% if request.user.is_superuser %}
|
|
||||||
<a href="{% url 'admin:atlas_series_change' series.id %}" title="Edit the Series using the admin interface">Admin Edit</a>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% include 'atlas/series_viewer.html' %}
|
{% include 'atlas/series_viewer.html' %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
<!--<script type="text/javascript" src="/admin/jsi18n/"></script>-->
|
<!--<script type="text/javascript" src="/admin/jsi18n/"></script>-->
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
let csrf_token = "{{csrf_token}}";
|
let csrf_token = "{{csrf_token}}";
|
||||||
let hash_url = false;
|
let hash_url = false;
|
||||||
document.addEventListener('drop', function (e) { e.preventDefault(); }, false);
|
document.addEventListener('drop', function (e) { e.preventDefault(); }, false);
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
@@ -353,31 +353,31 @@
|
|||||||
|
|
||||||
for (let i = 0; i < site_codes.length; i++) {
|
for (let i = 0; i < site_codes.length; i++) {
|
||||||
if (
|
if (
|
||||||
accession_number.startsWith(site_codes[i])
|
accession_number.startsWith(site_codes[i])
|
||||||
|| patient_id.startsWith(site_codes[i])) {
|
|| patient_id.startsWith(site_codes[i])) {
|
||||||
not_anon = true;
|
not_anon = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (not_anon) {
|
if (not_anon) {
|
||||||
toastr.warning(`File does not appear to be annonymised<br/>Accession: ${accession_number} <br/>Patient ID: ${patient_id}<br/>`, 'Anonymisation warning', {
|
toastr.warning(`File does not appear to be annonymised<br/>Accession: ${accession_number} <br/>Patient ID: ${patient_id}<br/>`, 'Anonymisation warning', {
|
||||||
"closeButton": false,
|
"closeButton": false,
|
||||||
"debug": false,
|
"debug": false,
|
||||||
"newestOnTop": false,
|
"newestOnTop": false,
|
||||||
"progressBar": false,
|
"progressBar": false,
|
||||||
"positionClass": "toast-top-full-width",
|
"positionClass": "toast-top-full-width",
|
||||||
"preventDuplicates": false,
|
"preventDuplicates": false,
|
||||||
"onclick": null,
|
"onclick": null,
|
||||||
"showDuration": "0",
|
"showDuration": "0",
|
||||||
"hideDuration": "0",
|
"hideDuration": "0",
|
||||||
"timeOut": 0,
|
"timeOut": 0,
|
||||||
"extendedTimeOut": 0,
|
"extendedTimeOut": 0,
|
||||||
"showEasing": "swing",
|
"showEasing": "swing",
|
||||||
"hideEasing": "linear",
|
"hideEasing": "linear",
|
||||||
"showMethod": "fadeIn",
|
"showMethod": "fadeIn",
|
||||||
"hideMethod": "fadeOut",
|
"hideMethod": "fadeOut",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: fix
|
// TODO: fix
|
||||||
//$.ajax({
|
//$.ajax({
|
||||||
@@ -410,14 +410,23 @@
|
|||||||
|
|
||||||
{{ form.media }}
|
{{ form.media }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block navigation%}
|
||||||
|
{{ block.super }}
|
||||||
|
{% if object %}
|
||||||
|
{% include "atlas/series_headers.html" %}
|
||||||
|
{% endif %}
|
||||||
|
{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
|
|
||||||
<h2>Series Form</h2>
|
<h2>Series Form</h2>
|
||||||
This form will create a image set that can be associated with a atlas question. If the question has already been created
|
This form will create a image set that can be associated with a atlas question. If the question has already been created
|
||||||
it can be linked below.
|
it can be linked below.
|
||||||
<form action="" method="post" enctype="multipart/form-data" id="atlas-form">
|
<form action="" method="post" enctype="multipart/form-data" id="atlas-form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<a href="/generic/examination/create" id="add_examination" class="add-popup"
|
<a href="/generic/examination/create" id="add_examination" class="add-popup"
|
||||||
onclick="return showAddPopup(this);"><img src="{% static '/img/icon-addlink.svg' %}"></a>
|
onclick="return showAddPopup(this);"><img src="{% static '/img/icon-addlink.svg' %}"></a>
|
||||||
<table>
|
<table>
|
||||||
{{ form.as_table }}
|
{{ form.as_table }}
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<br/>
|
||||||
|
<a href="{% url 'atlas:series_detail' pk=series.pk %}" title="View the Series">View</a>
|
||||||
|
<a href="{% url 'atlas:series_update' pk=series.pk %}" title="Edit the Series">Edit</a>
|
||||||
|
<a href="{% url 'atlas:series_delete' pk=series.pk %}" title="Delete the Series">Delete</a>
|
||||||
|
<a href="{% url 'atlas:series_authors' pk=series.pk %}" title="Update the authors">Authors</a>
|
||||||
|
{% if request.user.is_superuser %}
|
||||||
|
<a href="{% url 'admin:atlas_series_change' series.id %}" title="Edit the Series using the admin interface">Admin Edit</a>
|
||||||
|
{% endif %}
|
||||||
@@ -242,6 +242,7 @@ urlpatterns = [
|
|||||||
),
|
),
|
||||||
path("structure/create", views.StructureCreate.as_view(), name="structure_create"),
|
path("structure/create", views.StructureCreate.as_view(), name="structure_create"),
|
||||||
path("series/<int:pk>", views.series_detail, name="series_detail"),
|
path("series/<int:pk>", views.series_detail, name="series_detail"),
|
||||||
|
path("series/<int:pk>/authors", views.SeriesAuthorUpdate.as_view(), name="series_authors"),
|
||||||
path("series/", views.SeriesView.as_view(), name="series_view"),
|
path("series/", views.SeriesView.as_view(), name="series_view"),
|
||||||
path("series_image/<int:pk>/dicom", views.series_image_dicom, name="series_image_dicom"),
|
path("series_image/<int:pk>/dicom", views.series_image_dicom, name="series_image_dicom"),
|
||||||
path(
|
path(
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ from .forms import (
|
|||||||
FindingForm,
|
FindingForm,
|
||||||
ResourceForm,
|
ResourceForm,
|
||||||
SelfReviewForm,
|
SelfReviewForm,
|
||||||
|
SeriesAuthorForm,
|
||||||
SeriesForm,
|
SeriesForm,
|
||||||
SeriesImageFormSet,
|
SeriesImageFormSet,
|
||||||
SeriesFormSet,
|
SeriesFormSet,
|
||||||
@@ -2387,3 +2388,13 @@ class CaseAuthorUpdate(RevisionMixin, AuthorRequiredMixin, UpdateView):
|
|||||||
context = super(CaseAuthorUpdate, self).get_context_data(**kwargs)
|
context = super(CaseAuthorUpdate, self).get_context_data(**kwargs)
|
||||||
context["collection"] = context["object"]
|
context["collection"] = context["object"]
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
class SeriesAuthorUpdate(RevisionMixin, AuthorRequiredMixin, UpdateView):
|
||||||
|
model = Series
|
||||||
|
form_class = SeriesAuthorForm
|
||||||
|
template_name = "author_form.html"
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(SeriesAuthorUpdate, self).get_context_data(**kwargs)
|
||||||
|
context["collection"] = context["object"]
|
||||||
|
return context
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ form>div:hover .helptext {
|
|||||||
color: #666;
|
color: #666;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
form > div {
|
form > div {
|
||||||
margin: 1px;
|
margin: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
form > div:hover {
|
form.highlight > div:hover {
|
||||||
border: 1px solid #666;
|
/* border: 1px solid #666;
|
||||||
margin: -1px;
|
margin: -1px; */
|
||||||
|
background-color: #002635;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
|
|
||||||
{% block navigation %}
|
{% block navigation %}
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
{% include object.get_link_headers %}
|
{% include object.get_link_headers %}
|
||||||
{% endblock navigation %}
|
{% endblock navigation %}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user