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
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
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
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
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
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, }] )
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
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', })
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
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