def monitoring_organization_export(request, monitoring_id): """ Экспорт организаций в CSV. """ monitoring = get_object_or_404(Monitoring, pk=monitoring_id) if not request.user.has_perm('exmo2010.edit_monitoring', monitoring): return HttpResponseForbidden(_('Forbidden')) organizations = Organization.objects.filter(monitoring=monitoring) response = HttpResponse(mimetype='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=monitoring-organization-%s.csv' % monitoring_id response.encoding = 'UTF-16' writer = UnicodeWriter(response) writer.writerow([ '#Name', 'Url', 'Email', 'Phone', 'Comments', 'Keywords', ]) for o in organizations: out = ( o.name, o.url, o.email, o.phone, o.comments, ) keywords = ", ".join([k.name for k in o.tags]) out += (keywords,) writer.writerow(out) return response
def get(self,request, *args, **kwargs): #https://docs.djangoproject.com/en/dev/howto/outputting-csv/ header = ['Address','Customer','Bill Date','Previous Balance','Current Charge','Penalty', 'Amount Due', 'Reconnection Fees', 'Posted Payments', 'Collectibles'] kwargs['content_type'] = 'text/csv' response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="collection.csv"' csv_data = UnicodeWriter(response) csv_data.writerow(header) data_list = [] for account in Account.objects.all(): if not account.latest_bill: continue data = {} latest_bill = account.latest_bill.__dict__ csv_data.writerow([ account.address.address1, unicode(account.customer), unicode(latest_bill['bill_date']), unicode(latest_bill['previous_balance']), unicode(latest_bill['current_charge']), unicode(latest_bill['penalty_amount']), unicode(latest_bill['amount_due']), unicode(account.reconnection_fees), unicode(account.total_posted_payment), unicode(account.latest_balance) ]) return response
def answers_export(request, monitoring_pk): """ Экспорт ответов на анкету. """ monitoring = get_object_or_404(Monitoring, pk=monitoring_pk) if not request.user.has_perm('exmo2010.admin_monitoring', monitoring): return HttpResponseForbidden(_('Forbidden')) questionnaire = get_object_or_404(Questionnaire, monitoring=monitoring) tasks = Task.approved_tasks.filter(organization__monitoring=monitoring) #Нет задач для экспорта if not tasks.exists(): raise Http404 #Удобнее отлаживать без сохранения if hasattr(settings, 'DEBUG_EXPORT') and settings.DEBUG_EXPORT: response = HttpResponse(mimetype='text/plain') else: response = HttpResponse(mimetype='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=anketa-%s.csv' % monitoring.pk response.encoding = 'UTF-16' writer = UnicodeWriter(response) header = ['#organization', 'url'] questions = QQuestion.objects.filter(questionnaire=questionnaire) for question in questions: header.append(question.question) writer.writerow(header) #Это работает только если анкета заполнена целиком. Но иного по workflow быть не должно. for task in tasks: answers = task.qanswer_set.filter(question__questionnaire=questionnaire) out = [task.organization.name, task.organization.url] for answer in answers: out.append(answer.answer()) writer.writerow(out) return response
def monitoring_parameter_export(request, id): """ Экспорт параметров в CSV """ monitoring = get_object_or_404(Monitoring, pk = id) if not request.user.has_perm('exmo2010.edit_monitoring', monitoring): return HttpResponseForbidden(_('Forbidden')) parameters = Parameter.objects.filter(monitoring = monitoring) response = HttpResponse(mimetype = 'application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=monitoring-parameters-%s.csv' % id response.encoding = 'UTF-16' writer = UnicodeWriter(response) writer.writerow([ '#Code', 'Name', 'Description', 'Complete', 'Topical', 'Accessible', 'Hypertext', 'Document', 'Image', 'Weight', 'Keywords', ]) for p in parameters: out = ( p.code, p.name, p.description, int(p.complete), int(p.topical), int(p.accessible), int(p.hypertext), int(p.document), int(p.image), p.weight ) keywords = ", ".join([k.name for k in p.tags]) out += (keywords,) writer.writerow(out) return response
def get(self,request, *args, **kwargs): #https://docs.djangoproject.com/en/dev/howto/outputting-csv/ data = self.queryset.all() header = ['account_id','customer','balance','address','phase','status', 'remarks'] kwargs['content_type'] = 'text/csv' response = HttpResponse(content_type='text/csv') response['Content-Disposition'] = 'attachment; filename="withbalance.csv"' csv_data = UnicodeWriter(response) csv_data.writerow(header) for row in data: csv_data.writerow([ unicode(row['account__id']), row['account__customer__last_name'] + u',' + row['account__customer__first_name'], unicode(row['balance']), row['account__address__address1'], row['account__address__address4'], row['account__status'], row['account__remarks'], ]) return response
def representatives_export(request, monitoring_pk): monitoring = get_object_or_404(Monitoring, pk=monitoring_pk) if not request.user.has_perm('exmo2010.admin_monitoring', monitoring): raise PermissionDenied orgs = monitoring.organization_set.order_by('name') for org in orgs: org.users = [] for user in sorted(org.userprofile_set.all(), key=lambda m: m.full_name): scores = Score.objects.filter(task__organization=org).values_list('pk', flat=True) user.comments = user.user.comment_comments.filter(object_pk__in=scores) org.users.append(user) response = HttpResponse(mimetype='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=representatives-%s.csv' % monitoring_pk response.encoding = 'UTF-16' writer = UnicodeWriter(response) writer.writerow([ '#Verified', 'Organization', 'First name', 'Last name', 'Email', 'Phone', 'Job title', 'Comments count', 'Date joined', 'Last login', ]) for org in orgs: for user in org.users: row = [ int(user.user.is_active), org.name, user.user.first_name, user.user.last_name, user.user.email, user.phone, user.position, user.comments.count(), user.user.date_joined.date().isoformat(), user.user.last_login.date().isoformat(), ] writer.writerow(row) license = LicenseTextFragments.objects.filter(pk='license') if license: writer.writerow([u'#%s' % license[0].csv_footer]) return response
def csv(self): response = HttpResponse(mimetype='application/vnd.ms-excel') response['Content-Disposition'] = \ 'attachment; filename=monitoring-%s.csv' % self.monitoring.pk response.encoding = 'UTF-16' writer = UnicodeWriter(response) # csv HEAD writer.writerow([ "#Monitoring", "Organization", "Organization_id", "Position", "Initial Openness", "Openness", "Parameter", "Parameter_id", "Found", "Complete", "Topical", "Accessible", "Hypertext", "Document", "Image", "Social", "Type", "Revision", "Links", "Recommendations" ]) score_fields = ['name', 'id', 'found'] + Parameter.OPTIONAL_CRITERIA score_fields += ['social', 'type', 'revision', 'links', 'recommendations'] for task in self.tasks.values(): for score_dict in task['scores']: row = [ self.monitoring.name, task['name'], task['id'], task['position'], task['openness_initial'], task['openness'], ] row.extend([unicode(score_dict.get(c, "not relevant")) for c in score_fields]) writer.writerow(row) # csv FOOTER license = LicenseTextFragments.objects.filter(pk='license') if license: writer.writerow([u'#%s' % license[0].csv_footer]) return response
def answers_export(request, monitoring_pk): """ Экспорт ответов на анкету. """ monitoring = get_object_or_404(Monitoring, pk=monitoring_pk) if not request.user.has_perm('exmo2010.admin_monitoring', monitoring): raise PermissionDenied questionnaire = get_object_or_404(Questionnaire, monitoring=monitoring) tasks = Task.approved_tasks.filter(organization__monitoring=monitoring) #Нет задач для экспорта if not tasks.exists(): raise Http404 #Удобнее отлаживать без сохранения if hasattr(settings, 'DEBUG_EXPORT') and settings.DEBUG_EXPORT: response = HttpResponse(mimetype='text/plain') else: response = HttpResponse(mimetype='application/vnd.ms-excel') response[ 'Content-Disposition'] = 'attachment; filename=anketa-%s.csv' % monitoring.pk response.encoding = 'UTF-16' writer = UnicodeWriter(response) header = ['#organization', 'url'] questions = QQuestion.objects.filter(questionnaire=questionnaire) for question in questions: header.append(question.question) writer.writerow(header) #Это работает только если анкета заполнена целиком. Но иного по workflow быть не должно. for task in tasks: answers = task.qanswer_set.filter( question__questionnaire=questionnaire) out = [task.organization.name, task.organization.url] for answer in answers: out.append(answer.answer()) writer.writerow(out) license = LicenseTextFragments.objects.filter(pk='license') if license: writer.writerow([u'#%s' % license[0].csv_footer]) return response
def task_export(request, task_pk): task = get_object_or_404(Task, pk=task_pk) if not request.user.has_perm('exmo2010.view_task', task): raise PermissionDenied parameters = Parameter.objects.filter(monitoring=task.organization.monitoring).exclude(exclude=task.organization) scores = Score.objects.filter(task=task_pk, revision=Score.REVISION_DEFAULT) response = HttpResponse(mimetype='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=task-%s.csv' % task_pk response.encoding = 'UTF-16' writer = UnicodeWriter(response) writer.writerow([ '#Code', 'Name', 'Found', 'Complete', 'Topical', 'Accessible', 'Hypertext', 'Document', 'Image', 'Links', 'Recommendations' ]) for p in parameters: out = ( p.code, p.name, ) try: s = scores.get(parameter=p) except Score.DoesNotExist: out += ('',)*8 else: out += (s.found,) out += (s.complete,) if p.complete else ('',) out += (s.topical,) if p.topical else ('',) out += (s.accessible,) if p.accessible else ('',) out += (s.hypertext,) if p.hypertext else ('',) out += (s.document,) if p.document else ('',) out += (s.image,) if p.image else ('',) out += (s.links,) out += (s.recommendations,) writer.writerow(out) license = LicenseTextFragments.objects.filter(pk='license') if license: writer.writerow([u'#%s' % license[0].csv_footer]) return response
def monitoring_parameter_export(request, monitoring_pk): """ Экспорт параметров в CSV """ monitoring = get_object_or_404(Monitoring, pk=monitoring_pk) if not request.user.has_perm('exmo2010.edit_monitoring', monitoring): raise PermissionDenied parameters = Parameter.objects.filter(monitoring=monitoring) response = HttpResponse(mimetype='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=monitoring-parameters-%s.csv' % monitoring_pk response.encoding = 'UTF-16' writer = UnicodeWriter(response) writer.writerow([ '#Code', 'Name', 'Grounds', 'Rating procedure', 'Notes', 'Complete', 'Topical', 'Accessible', 'Hypertext', 'Document', 'Image', 'Weight', ]) for p in parameters: out = ( p.code, p.name, p.grounds, p.rating_procedure, p.notes, int(p.complete), int(p.topical), int(p.accessible), int(p.hypertext), int(p.document), int(p.image), p.weight ) writer.writerow(out) license = LicenseTextFragments.objects.filter(pk='license') if license: writer.writerow([u'#%s' % license[0].csv_footer]) return response
def task_export(request, task_pk): task = get_object_or_404(Task, pk=task_pk) if not request.user.has_perm('exmo2010.view_task', task): raise PermissionDenied parameters = Parameter.objects.filter( monitoring=task.organization.monitoring).exclude( exclude=task.organization) scores = Score.objects.filter(task=task_pk, revision=Score.REVISION_DEFAULT) response = HttpResponse(mimetype='application/vnd.ms-excel') response[ 'Content-Disposition'] = 'attachment; filename=task-%s.csv' % task_pk response.encoding = 'UTF-16' writer = UnicodeWriter(response) writer.writerow([ '#Code', 'Name', 'Found', 'Complete', 'Topical', 'Accessible', 'Hypertext', 'Document', 'Image', 'Links', 'Recommendations' ]) for p in parameters: out = ( p.code, p.name, ) try: s = scores.get(parameter=p) except Score.DoesNotExist: out += ('', ) * 8 else: out += (s.found, ) out += (s.complete, ) if p.complete else ('', ) out += (s.topical, ) if p.topical else ('', ) out += (s.accessible, ) if p.accessible else ('', ) out += (s.hypertext, ) if p.hypertext else ('', ) out += (s.document, ) if p.document else ('', ) out += (s.image, ) if p.image else ('', ) out += (s.links, ) out += (s.recommendations, ) writer.writerow(out) license = LicenseTextFragments.objects.filter(pk='license') if license: writer.writerow([u'#%s' % license[0].csv_footer]) return response
def monitoring_organization_export(request, monitoring_pk): """ Экспорт организаций в CSV. """ monitoring = get_object_or_404(Monitoring, pk=monitoring_pk) if not request.user.has_perm('exmo2010.edit_monitoring', monitoring): raise PermissionDenied organizations = Organization.objects.filter(monitoring=monitoring) response = HttpResponse(mimetype='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=monitoring-organization-%s.csv' % monitoring_pk response.encoding = 'UTF-16' writer = UnicodeWriter(response) writer.writerow([ '#Name', 'Url', 'Email', 'Phone', 'recommendations_hidden', 'Code', 'Invitation link', ]) for o in organizations: out = ( o.name, o.url, o.email, o.phone, str(o.recommendations_hidden), o.inv_code, request.build_absolute_uri(reverse('exmo2010:auth_orguser') + '?code={}'.format(o.inv_code)), ) writer.writerow(out) license = LicenseTextFragments.objects.filter(pk='license') if license: writer.writerow([u'#%s' % license[0].csv_footer]) return response
def task_export(request, task_pk): task = get_object_or_404(Task, pk=task_pk) if not request.user.has_perm('exmo2010.view_task', task): return HttpResponseForbidden(_('Forbidden')) parameters = Parameter.objects.filter(monitoring=task.organization.monitoring).exclude(exclude=task.organization) scores = Score.objects.filter(task=task_pk, revision=Score.REVISION_DEFAULT) response = HttpResponse(mimetype='application/vnd.ms-excel') response['Content-Disposition'] = 'attachment; filename=task-%s.csv' % task_pk response.encoding = 'UTF-16' writer = UnicodeWriter(response) writer.writerow([ '#Code', 'Name', 'Found', 'Complete', 'CompleteComment', 'Topical', 'TopicalComment', 'Accessible', 'AccessibleComment', 'Hypertext', 'HypertextComment', 'Document', 'DocumentComment', 'Image', 'ImageComment', 'Comment' ]) category = None subcategory = None for p in parameters: out = ( p.code, p.name, ) try: s = scores.get(parameter=p) except: out += ( '', '', '', '', '', '', '', '', '', '', '', '', '', '' ) else: out += (s.found,) if p.complete: out += ( s.complete, s.completeComment ) else: out += ('', '') if p.topical: out += ( s.topical, s.topicalComment ) else: out += ('', '') if p.accessible: out += ( s.accessible, s.accessibleComment ) else: out += ('', '') if p.hypertext: out += ( s.hypertext, s.hypertextComment ) else: out += ('', '') if p.document: out += ( s.document, s.documentComment ) else: out += ('', '') if p.image: out += ( s.image, s.imageComment ) else: out += ('','') out += (s.comment,) writer.writerow(out) return response