diff options
Diffstat (limited to 'ishtar_common/views.py')
-rw-r--r-- | ishtar_common/views.py | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 4c83fd818..5f175c186 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -77,6 +77,7 @@ from ishtar_common.models_common import QuickAction from ishtar_common.templatetags.link_to_window import simple_link_to_window from ishtar_common.utils_migrations import HOMEPAGE_TITLE from ishtar_common.utils import ( + BSMessage, clean_session_cache, CSV_OPTIONS, get_current_item_keys, @@ -1236,10 +1237,12 @@ ACTION_MODEL_DICT = { "archaeological_operations", "AdministrativeAct"), 'file': apps.get_model("archaeological_files", "File"), 'site': apps.get_model("archaeological_operations", "ArchaeologicalSite"), + 'contextrecord': apps.get_model("archaeological_context_records", "ContextRecord"), 'record': apps.get_model("archaeological_context_records", "ContextRecord"), 'find': apps.get_model("archaeological_finds", "Find"), 'treatment': apps.get_model("archaeological_finds", "Treatment"), 'treatmentfle': apps.get_model("archaeological_finds", "TreatmentFile"), + 'treatmentfile': apps.get_model("archaeological_finds", "TreatmentFile"), 'exhibition': apps.get_model("archaeological_finds", "Exhibition"), 'container': apps.get_model("archaeological_warehouse", "Container"), 'warehouse': apps.get_model("archaeological_warehouse", "Warehouse"), @@ -3160,6 +3163,9 @@ class QAItemForm(IshtarMixin, LoginRequiredMixin, FormView): action_name = None permissions = [] + def get_permissions(self): + return self.permissions + def get_quick_action(self): quick_action = self.model.get_quick_action_by_url(self.base_url) if quick_action: @@ -3169,7 +3175,7 @@ class QAItemForm(IshtarMixin, LoginRequiredMixin, FormView): url=self.base_url, icon_class=self.icon, text=self.page_name, - rights=self.permissions + rights=self.get_permissions() ) def pre_dispatch(self, request, *args, **kwargs): @@ -3401,6 +3407,53 @@ class QADocumentDuplicateFormView(QAItemForm): return data +class QADocumentUnlink(QAItemForm): + model = models.Document + page_name = _("Unlink") + form_class = forms.QAForm + base_url = "document-qa-unlink" + icon = "fa fa-chain-broken" + action_name = _("Unlink") + + def pre_dispatch(self, request, *args, **kwargs): + related_model = kwargs.get("related_model") + # model, related_id + if related_model not in ACTION_MODEL_DICT: + raise Http404() + related_model = ACTION_MODEL_DICT[related_model] + related_id = kwargs.get("related_id") + try: + self.related_item = related_model.objects.get(pk=related_id) + except related_model.DoesNotExist: + raise Http404() + return super().pre_dispatch(request, *args, **kwargs) + + def get_permissions(self): + rel_meta = self.related_item.__class__._meta + return [ + f"{rel_meta.app_label}.change_{rel_meta.model_name}", + f"{rel_meta.app_label}.change_own_{rel_meta.model_name}", + ] + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs["confirm"] = True + return kwargs + + def form_valid(self, form): + self.related_item.documents.remove(self.items[0]) + return HttpResponseRedirect(reverse("success")) + + def get_context_data(self, **kwargs): + data = super().get_context_data(**kwargs) + data["messages"] = [ + BSMessage( + str(_('Unlink document "{}" from this item.')).format(self.items[0]), + "info", "", no_dismiss=True) + ] + return data + + class QADocumentPackagingFormView(QAItemForm): template_name = "ishtar/forms/qa_document_packaging.html" model = models.Document |