diff options
Diffstat (limited to 'ishtar_common')
| -rw-r--r-- | ishtar_common/models.py | 31 | ||||
| -rw-r--r-- | ishtar_common/urls.py | 3 | ||||
| -rw-r--r-- | ishtar_common/views.py | 66 | 
3 files changed, 85 insertions, 15 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py index fb84aafb4..02be873ce 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -1999,6 +1999,37 @@ class TemplateItem:      def label_templates(cls):          return cls._label_templates_q() +    def get_extra_templates(self, request): +        cls = self.__class__ +        templates = [] +        name = str(cls.__name__) +        module = str(cls.__module__) +        if "archaeological_finds" in module: +            if "models_finds" in name or "models_treatments" in name: +                names = [ +                    name, +                    name.replace("models_finds", "models" +                                 ).replace("models_treatments", "models") +                ] +            else: +                names = [name, name.replace("models", "models_finds"), +                         name.replace("models", "models_treatments")] +        else: +            names = [name] +        model_names = [ +            "{}.{}".format(module, name) for name in names +        ] +        q = DocumentTemplate.objects.filter( +            associated_model__klass__in=model_names, +            for_labels=False, available=True) +        for template in q.all(): +            urlname = "generate-document" +            templates.append( +                (template.name, reverse( +                    urlname, args=[template.slug, self.pk])) +            ) +        return templates +  class StatisticItem:      STATISTIC_MODALITIES = []  # example: "year", "operation_type__label" diff --git a/ishtar_common/urls.py b/ishtar_common/urls.py index 55df6cb40..3667d46b2 100644 --- a/ishtar_common/urls.py +++ b/ishtar_common/urls.py @@ -46,6 +46,9 @@ urlpatterns = [          views.QRCodeView.as_view(), name='qrcode-item'),      url(r'^generate-labels/(?P<template_slug>[-a-z0-9]+)/',          views.GenerateLabelView.as_view(), name='generate-labels'), +    url(r'^generate-document/(?P<template_slug>[-a-z0-9]+)/(' +        r'?P<item_pk>\d+)/', +        views.GenerateView.as_view(), name='generate-document'),      url(r'person_search/(?P<step>.+)?$',          check_rights(['add_person'])(              views.person_search_wizard), name='person_search'), diff --git a/ishtar_common/views.py b/ishtar_common/views.py index f867a03cf..5a3f90da6 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1062,18 +1062,64 @@ class QRCodeView(DynamicModelView, IshtarMixin, LoginRequiredMixin, View):              return HttpResponse(f.read(), content_type="image/png") -class GenerateLabelView(IshtarMixin, LoginRequiredMixin, View): +class GenerateView(IshtarMixin, LoginRequiredMixin, View): +    def get_template(self, template_slug): +        try: +            return models.DocumentTemplate.objects.get( +                slug=template_slug, available=True, +                for_labels=False +            ) +        except models.DocumentTemplate.DoesNotExist: +            raise Http404() + +    def publish(self, tpl, objects): +        return tpl.publish(objects[0]) + +    def get_items(self, request, model): +        item_pk = self.kwargs.get('item_pk') +        try: +            object = model.objects.get(pk=item_pk) +            if not object.can_view(request): +                raise Http404() +        except model.DoesNotExist: +            raise Http404() +        return [object] +      def get(self, request, *args, **kwargs):          template_slug = kwargs.get('template_slug') +        tpl = self.get_template(template_slug) +        app, __, model_name = tpl.associated_model.klass.split(".") +        model = apps.get_model(app, model_name) +        objects = self.get_items(request, model) +        if not objects: +            return HttpResponse(content_type='text/plain') +        document = self.publish(tpl, objects) +        if not document: +            return HttpResponse(content_type='text/plain') +        with open(document, "rb") as f: +            response = HttpResponse( +                f.read(), +                content_type="application/vnd.oasis.opendocument.text" +            ) +            response['Content-Disposition'] = 'attachment; filename={}'.format( +                document.split(os.sep)[-1]) +            return response + + +class GenerateLabelView(GenerateView): +    def get_template(self, template_slug):          try: -            tpl = models.DocumentTemplate.objects.get( +            return models.DocumentTemplate.objects.get(                  slug=template_slug, available=True,                  for_labels=True              )          except models.DocumentTemplate.DoesNotExist:              raise Http404() -        app, __, model_name = tpl.associated_model.klass.split(".") -        model = apps.get_model(app, model_name) + +    def publish(self, tpl, objects): +        return tpl.publish_labels(objects) + +    def get_items(self, request, model):          # rights are managed by get_item          get_list = get_item(              model, None, model.SLUG, own_table_cols=["id"])( @@ -1085,17 +1131,7 @@ class GenerateLabelView(IshtarMixin, LoginRequiredMixin, View):              ]          except model.DoesNotExist:              raise Http404() -        document = tpl.publish_labels(objects) -        if not document: -            return HttpResponse(content_type='text/plain') -        with open(document, "rb") as f: -            response = HttpResponse( -                f.read(), -                content_type="application/vnd.oasis.opendocument.text" -            ) -            response['Content-Disposition'] = 'attachment; filename={}'.format( -                document.split(os.sep)[-1]) -            return response +        return objects  class GlobalVarEdit(IshtarMixin, AdminLoginRequiredMixin, ModelFormSetView):  | 
