Commit 9ed7eb111566793e580074fcedb378750547ce0a
1 parent
c0d1dda5
Correct handling subdocuments types
Showing
5 changed files
with
40 additions
and
13 deletions
collector/storage/static/storage/css/document.css
collector/storage/templates/storage/annotation.html
... | ... | @@ -102,8 +102,8 @@ |
102 | 102 | <div class="text-align-center"> |
103 | 103 | <p> |
104 | 104 | Typ dokumentu: <strong>{{ doc_type }}</strong> |
105 | - <button class="change-doc-type btn btn-primary" type="button" data-id="{% url 'change_doc_type' document.id %}"> | |
106 | - Zmień | |
105 | + <button class="change-doc-type btn btn-primary" id="change-doc-type-btn" type="button" | |
106 | + data-id="{% url 'change_doc_type' document.id %}">Zmień | |
107 | 107 | </button> |
108 | 108 | </p> |
109 | 109 | </div> |
... | ... |
collector/storage/templates/storage/edit.html
... | ... | @@ -34,10 +34,16 @@ |
34 | 34 | <div class="modal-body"> |
35 | 35 | |
36 | 36 | {% for message in messages %} |
37 | - <div class="alert alert-{{ message.tags }} text-center" role="alert"> | |
38 | - {{ message }} | |
39 | - </div> | |
40 | - {% endfor %} | |
37 | + {% if message.tags == "error" %} | |
38 | + <div class="alert alert-danger text-center" role="alert"> | |
39 | + {{ message }} | |
40 | + </div> | |
41 | + {% else %} | |
42 | + <div class="alert alert-{{ message.tags }} text-center" role="alert"> | |
43 | + {{ message }} | |
44 | + </div> | |
45 | + {% endif %} | |
46 | + {% endfor %} | |
41 | 47 | |
42 | 48 | <div class="{% if form.non_field_errors %}invalid{% endif %} mb-2"> |
43 | 49 | {% for error in form.non_field_errors %} |
... | ... |
collector/storage/utils.py
1 | 1 | from .models import Document, Magazine, BookWithMultipleAuthors, Article, Chapter |
2 | 2 | |
3 | - | |
4 | 3 | DOCUMENT_TYPES_CLASSES = Document, Magazine, BookWithMultipleAuthors |
5 | 4 | |
6 | 5 | SUBDOCUMENT_TYPES = { # first subdocument type in tuples are the default ones for this type of the document |
7 | - Document: (Document, ), | |
8 | - Magazine: (Article, ), | |
9 | - BookWithMultipleAuthors: (Chapter, ) | |
6 | + Document: (Document,), | |
7 | + Magazine: (Article,), | |
8 | + BookWithMultipleAuthors: (Chapter,) | |
10 | 9 | } |
11 | 10 | |
11 | + | |
12 | 12 | def get_remaining_doc_types_tuple(current_type): |
13 | 13 | doc_types = [] |
14 | 14 | for doc_type_model in DOCUMENT_TYPES_CLASSES: |
... | ... | @@ -17,8 +17,17 @@ def get_remaining_doc_types_tuple(current_type): |
17 | 17 | return tuple(doc_types) |
18 | 18 | |
19 | 19 | |
20 | +def get_remaining_subdoc_types_tuple(current_parent_type, current_type): | |
21 | + doc_types = [] | |
22 | + for doc_type_model in SUBDOCUMENT_TYPES[current_parent_type]: | |
23 | + if doc_type_model is not current_type: | |
24 | + doc_types.append((doc_type_model.__name__, doc_type_model.get_doc_type_display())) | |
25 | + return tuple(doc_types) | |
26 | + | |
27 | + | |
20 | 28 | def get_doc_with_type(doc_id): |
21 | - all_document_types = list(set(list(DOCUMENT_TYPES_CLASSES) + [dt for dt_list in SUBDOCUMENT_TYPES.values() for dt in dt_list])) | |
29 | + all_document_types = list( | |
30 | + set(list(DOCUMENT_TYPES_CLASSES) + [dt for dt_list in SUBDOCUMENT_TYPES.values() for dt in dt_list])) | |
22 | 31 | all_document_types.append(all_document_types.pop(all_document_types.index(Document))) # Document at the end |
23 | 32 | for doc_type in all_document_types: |
24 | 33 | try: |
... | ... |
collector/storage/views.py
... | ... | @@ -25,7 +25,7 @@ from .forms import ChunkForm, ParticipantForm, SubchunkForm, MetadataForm, Keywo |
25 | 25 | SubDocDetailsForm, AuthorForm, ChunkMergeForm, ChunkSplitForm, DocTypeForm, DocDetailsForm, MagazineDetailsForm, \ |
26 | 26 | BWMADetailsForm |
27 | 27 | from .models import Chunk, Document, Participant, Metadata, Keyword, Annotation, Magazine, BookWithMultipleAuthors |
28 | -from .utils import get_remaining_doc_types_tuple, get_doc_with_type, SUBDOCUMENT_TYPES | |
28 | +from .utils import get_remaining_doc_types_tuple, get_remaining_subdoc_types_tuple, get_doc_with_type, SUBDOCUMENT_TYPES | |
29 | 29 | from projects.ppc.models import Utterance |
30 | 30 | from pipeline.models import ProcessingStatus |
31 | 31 | |
... | ... | @@ -1204,7 +1204,15 @@ class DocTypeView(UpdateView): |
1204 | 1204 | def get_form_kwargs(self): |
1205 | 1205 | kwargs = super(DocTypeView, self).get_form_kwargs() |
1206 | 1206 | self.object = get_doc_with_type(self.object.id) |
1207 | - kwargs['doc_types'] = get_remaining_doc_types_tuple(type(self.object)) | |
1207 | + if self.object.parent is None: | |
1208 | + doc_types = get_remaining_doc_types_tuple(type(self.object)) | |
1209 | + else: | |
1210 | + doc_types = get_remaining_subdoc_types_tuple(type(get_doc_with_type(self.object.parent.id)), | |
1211 | + type(self.object)) | |
1212 | + if not doc_types: | |
1213 | + messages.error(self.request, 'Nie jest możliwa zmiana typu dokumentu. Dla tego typu dokumentu głównego nie ' | |
1214 | + 'ma dostępnych innych typów dokumentów.') | |
1215 | + kwargs['doc_types'] = doc_types | |
1208 | 1216 | return kwargs |
1209 | 1217 | |
1210 | 1218 | def get_success_url(self, new_doc): |
... | ... |