Beispiel #1
0
    def get_context_data(self, **kwargs):
        context = super(DocumentDetailView, self).get_context_data(**kwargs)

        doc = self.object

        context['work_json'] = json.dumps(
            WorkSerializer(instance=doc.work,
                           context={
                               'request': self.request
                           }).data)
        context['work'] = doc.work
        context['work_json'] = json.dumps(
            WorkSerializer(instance=doc.work,
                           context={
                               'request': self.request
                           }).data)
        context['document_json'] = json.dumps(
            DocumentSerializer(instance=doc, context={
                'request': self.request
            }).data)
        # expressions
        context['expressions_json'] = json.dumps(
            DocumentSerializer(context={
                'request': self.request
            }, many=True).to_representation(doc.work.expressions().all()))
        context['country'] = doc.work.country
        context['locality'] = doc.work.locality

        # TODO do this in a better place
        context['countries'] = Country.objects.select_related(
            'country').prefetch_related('localities', 'publication_set',
                                        'country').all()

        context['document_content_json'] = json.dumps(doc.document_xml)

        context['amendments_json'] = json.dumps(
            WorkAmendmentSerializer(context={
                'request': self.request
            },
                                    many=True).to_representation(
                                        doc.work.amendments))

        context['form'] = DocumentForm(instance=doc)
        context['subtypes'] = Subtype.objects.order_by('name').all()

        context['download_formats'] = [{
            'url':
            reverse('document-detail',
                    kwargs={
                        'pk': doc.id,
                        'format': r.format
                    }) + getattr(r, 'suffix', ''),
            'icon':
            r.icon,
            'title':
            r.title
        } for r in DocumentViewSet.renderer_classes if hasattr(r, 'icon')]
        context['download_formats'].sort(key=lambda f: f['title'])

        return context
Beispiel #2
0
    def get_context_data(self, **kwargs):
        context = super(DocumentDetailView, self).get_context_data(**kwargs)

        doc = self.object

        context['work_json'] = json.dumps(WorkSerializer(instance=doc.work, context={'request': self.request}).data)
        context['work'] = doc.work
        context['work_json'] = json.dumps(WorkSerializer(instance=doc.work, context={'request': self.request}).data)
        context['document_json'] = json.dumps(DocumentSerializer(instance=doc, context={'request': self.request}).data)
        # expressions
        context['expressions_json'] = json.dumps(
            DocumentSerializer(context={'request': self.request}, many=True)
            .to_representation(
                doc.work.expressions().all()
            ))
        context['country'] = doc.work.country
        context['locality'] = context['country'].work_locality(doc.work)

        # TODO do this in a better place
        context['countries'] = Country.objects.select_related('country').prefetch_related('localities', 'publication_set', 'country').all()
        context['countries_json'] = json.dumps({c.code: c.as_json() for c in context['countries']})

        context['document_content_json'] = json.dumps(doc.document_xml)

        context['amendments_json'] = json.dumps(
            WorkAmendmentSerializer(context={'request': self.request}, many=True)
            .to_representation(doc.work.amendments))

        context['form'] = DocumentForm(instance=doc)
        context['subtypes'] = Subtype.objects.order_by('name').all()

        return context
Beispiel #3
0
    def get_context_data(self, country_code, **kwargs):
        context = super(LibraryView, self).get_context_data(**kwargs)

        country = Country.for_code(country_code)
        context['country'] = country
        context['country_code'] = country_code
        context['countries'] = Country.objects.select_related(
            'country').prefetch_related('localities', 'publication_set',
                                        'country').all()
        context['countries_json'] = json.dumps(
            {c.code: c.as_json()
             for c in context['countries']})

        serializer = DocumentSerializer(context={'request': self.request},
                                        many=True)
        docs = DocumentViewSet.queryset.filter(work__country=country)
        context['documents_json'] = json.dumps(
            serializer.to_representation(docs))

        serializer = WorkSerializer(context={'request': self.request},
                                    many=True)
        works = WorkViewSet.queryset.filter(country=country)
        context['works_json'] = json.dumps(serializer.to_representation(works))

        return context
Beispiel #4
0
    def get_context_data(self, **kwargs):
        context = super(TaskEditView, self).get_context_data(**kwargs)

        work = None
        task = self.object
        if task.work:
            work = json.dumps(
                WorkSerializer(instance=task.work,
                               context={
                                   'request': self.request
                               }).data)
        context['work_json'] = work

        document = None
        if task.document:
            document = json.dumps(
                DocumentSerializer(instance=task.document,
                                   context={
                                       'request': self.request
                                   }).data)
        context['document_json'] = document

        context['task_labels'] = TaskLabel.objects.all()
        context['place_workflows'] = self.place.workflows.filter(closed=False)

        if has_transition_perm(task.cancel, self):
            context['cancel_task_permission'] = True

        return context
Beispiel #5
0
    def get_context_data(self, *args, **kwargs):
        context = super(TaskCreateView, self).get_context_data(**kwargs)
        task = context['form'].instance

        work = None
        if task.work:
            work = json.dumps(
                WorkSerializer(instance=task.work,
                               context={
                                   'request': self.request
                               }).data)
        context['work_json'] = work

        document = None
        if task.document:
            document = json.dumps(
                DocumentSerializer(instance=task.document,
                                   context={
                                       'request': self.request
                                   }).data)
        context['document_json'] = document

        context['task_labels'] = TaskLabel.objects.all()

        context['place_workflows'] = self.place.workflows.filter(closed=False)

        return context
Beispiel #6
0
def doc_published(sender, document, request, **kwargs):
    from indigo_api.serializers import DocumentSerializer
    from indigo_app.models import Country

    if request and request.user.is_authenticated():
        serializer = DocumentSerializer(context={'request': request})
        pub_url = serializer.get_published_url(document, with_date=True) + ".html?standalone=1"

        url = reverse('document', request=request, kwargs={'doc_id': document.id})

        country = Country.for_work(document.work)
        fields = [{
            "title": "Country",
            "value": country.name,
            "short": "true",
        }]

        locality = country.work_locality(document.work)
        if locality:
            fields.append({
                "title": "Locality",
                "value": locality.name,
                "short": "true",
            })

        fields.append({
            "title": "Edit in Indigo",
            "value": url,
            "short": "false",
        })

        send_slack_message(
            u"{user} published <{pub_url}|{title}>".format(user=request.user.first_name, title=document.title, url=url, pub_url=pub_url),
            attachments=[{
                "text": document.work.frbr_uri,
                "fallback": document.work.frbr_uri,
                "author_name": "%s %s" % (request.user.first_name, request.user.last_name),
                "title": document.title,
                "title_link": pub_url,
                "color": "good",
                "fields": fields,
            }]
        )
Beispiel #7
0
    def get_context_data(self, **kwargs):
        context = super(WorkAmendmentsView, self).get_context_data(**kwargs)

        work = self.object

        docs = DocumentViewSet.queryset.filter(work=work).all()
        serializer = DocumentSerializer(context={'request': self.request},
                                        many=True)
        context['documents_json'] = json.dumps(
            serializer.to_representation(docs))

        serializer = WorkAmendmentSerializer(context={'request': self.request},
                                             many=True)
        amendments = work.amendments.prefetch_related('created_by_user',
                                                      'updated_by_user',
                                                      'amending_work')
        context['amendments_json'] = json.dumps(
            serializer.to_representation(amendments))

        return context
Beispiel #8
0
def document(request, doc_id=None):
    if doc_id:
        doc = get_object_or_404(Document, pk=doc_id)
        doc_json = json.dumps(None)
    else:
        # it's new!
        doc = Document.randomized(request.user, title='(untitled)')
        doc.tags = None
        doc_json = json.dumps(
            DocumentSerializer(instance=doc, context={
                'request': request
            }).data)

    form = DocumentForm(instance=doc)

    countries = Country.objects.select_related('country').prefetch_related(
        'locality_set', 'publication_set', 'country').all()
    countries = {c.code: c.as_json() for c in countries}
    countries_json = json.dumps(countries)

    serializer = DocumentListSerializer(context={'request': request})
    documents_json = json.dumps(
        serializer.to_representation(DocumentViewSet.queryset.all()))

    return render(
        request, 'document/show.html', {
            'document': doc,
            'document_json': doc_json,
            'document_content_json': json.dumps(doc.document_xml),
            'documents_json': documents_json,
            'form': form,
            'subtypes': Subtype.objects.order_by('name').all(),
            'languages': Language.objects.select_related('language').all(),
            'countries': Country.objects.select_related('country').all(),
            'countries_json': countries_json,
            'view': 'DocumentView',
        })
Beispiel #9
0
    def get_context_data(self, **kwargs):
        context = super(PlaceDetailView, self).get_context_data(**kwargs)

        serializer = WorkSerializer(context={'request': self.request},
                                    many=True)
        works = WorkViewSet.queryset.filter(country=self.country,
                                            locality=self.locality)
        context['works_json'] = json.dumps(serializer.to_representation(works))

        serializer = DocumentSerializer(context={'request': self.request},
                                        many=True)
        docs = DocumentViewSet.queryset.filter(work__country=self.country,
                                               work__locality=self.locality)
        context['documents_json'] = json.dumps(
            serializer.to_representation(docs))

        # map from document id to count of open annotations
        annotations = Annotation.objects.values('document_id')\
            .filter(closed=False)\
            .filter(document__deleted=False)\
            .annotate(n_annotations=Count('document_id'))\
            .filter(document__work__country=self.country)
        if self.locality:
            annotations = annotations.filter(
                document__work__locality=self.locality)

        annotations = {
            x['document_id']: {
                'n_annotations': x['n_annotations']
            }
            for x in annotations
        }
        context['annotations_json'] = json.dumps(annotations)

        # tasks for place
        tasks = Task.objects.filter(work__country=self.country,
                                    work__locality=self.locality)

        # tasks counts per state and per work
        work_tasks = tasks.values('work_id',
                                  'state').annotate(n_tasks=Count('work_id'))
        task_states = defaultdict(dict)
        for row in work_tasks:
            task_states[row['work_id']][row['state']] = row['n_tasks']

        # summarise task counts per work
        work_tasks = {}
        for work_id, states in task_states.iteritems():
            work_tasks[work_id] = {
                'n_%s_tasks' % s: states.get(s, 0)
                for s in Task.STATES
            }
            work_tasks[work_id]['n_tasks'] = sum(states.itervalues())
        context['work_tasks_json'] = json.dumps(work_tasks)

        # tasks counts per state and per document
        doc_tasks = tasks.values(
            'document_id', 'state').annotate(n_tasks=Count('document_id'))
        task_states = defaultdict(dict)
        for row in doc_tasks:
            task_states[row['document_id']][row['state']] = row['n_tasks']

        # summarise task counts per document
        document_tasks = {}
        for doc_id, states in task_states.iteritems():
            document_tasks[doc_id] = {
                'n_%s_tasks' % s: states.get(s, 0)
                for s in Task.STATES
            }
            document_tasks[doc_id]['n_tasks'] = sum(states.itervalues())
        context['document_tasks_json'] = json.dumps(document_tasks)

        # summarise amendments per work
        amendments = Amendment.objects.values('amended_work_id')\
            .filter(amended_work_id__in=[w.id for w in works])\
            .annotate(n_amendments=Count('pk'))\
            .order_by()\
            .all()

        amendments = {
            a['amended_work_id']: {
                'n_amendments': a['n_amendments']
            }
            for a in amendments
        }
        context['work_n_amendments_json'] = json.dumps(amendments)

        return context
Beispiel #10
0
    def get_context_data(self, **kwargs):
        context = super(DocumentDetailView, self).get_context_data(**kwargs)

        doc = self.object

        context['work'] = doc.work
        context['work_json'] = json.dumps(
            WorkSerializer(instance=doc.work,
                           context={
                               'request': self.request
                           }).data)
        context['document_json'] = json.dumps(
            DocumentSerializer(instance=doc, context={
                'request': self.request
            }).data)
        # expressions
        context['expressions_json'] = json.dumps(
            DocumentSerializer(context={
                'request': self.request
            }, many=True).to_representation(doc.work.expressions().all()))
        context['comparison_expressions'] = doc.work.expressions().filter(
            language=doc.language).order_by('-expression_date')
        context['place'] = doc.work.place
        context['country'] = doc.work.country
        context['locality'] = doc.work.locality

        # TODO do this in a better place
        context['countries'] = Country.objects.select_related(
            'country').prefetch_related('localities', 'publication_set',
                                        'country').all()

        context['document_content_json'] = json.dumps(doc.document_xml)

        # add 'numbered_title_localised' to each amendment
        amendments = WorkAmendmentSerializer(context={'request': self.request}, many=True)\
            .to_representation(doc.work.amendments)
        plugin = plugins.for_document('work-detail', doc)
        if plugin:
            for a in amendments:
                amending_work = Work.objects.get(
                    frbr_uri=a['amending_work']['frbr_uri'])
                a['amending_work'][
                    'numbered_title_localised'] = plugin.work_numbered_title(
                        amending_work)
        context['amendments_json'] = json.dumps(amendments)

        context['form'] = DocumentForm(instance=doc)
        context['subtypes'] = Subtype.objects.order_by('name').all()
        context['user_can_edit'] = (
            self.request.user.is_authenticated
            and self.request.user.has_perm('indigo_api.change_document') and
            self.request.user.editor.has_country_permission(doc.work.country))

        context['download_formats'] = [{
            'url':
            reverse('document-detail',
                    kwargs={
                        'pk': doc.id,
                        'format': r.format
                    }) + getattr(r, 'suffix', ''),
            'icon':
            r.icon,
            'title':
            r.title
        } for r in DocumentViewSet.renderer_classes if hasattr(r, 'icon')]
        context['download_formats'].sort(key=lambda f: f['title'])

        return context