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 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 monitoring_by_criteria_mass_export(request, monitoring_pk): """ Экспорт по критерию Архив из CVS файлов -- по файлу на критерий. """ monitoring = get_object_or_404(Monitoring, pk=monitoring_pk) if not request.user.has_perm('exmo2010.admin_monitoring', monitoring): raise PermissionDenied row_template = { 'Found': [], 'Complete': [], 'Topical': [], 'Accessible': [], 'Hypertext': [], 'Document': [], 'Image': [] } spool = {} writer = {} handle = {} for criteria in row_template.keys(): spool[criteria] = tempfile.mkstemp() handle[criteria] = os.fdopen(spool[criteria][0], 'w') writer[criteria] = UnicodeWriter(handle[criteria]) header_row = True parameters = Parameter.objects.filter(monitoring=monitoring) for task in Task.approved_tasks.filter(organization__monitoring=monitoring): row = deepcopy(row_template) if header_row: for criteria in row.keys(): row[criteria] = [''] + [p.code for p in parameters] writer[criteria].writerow(row[criteria]) header_row = False row = deepcopy(row_template) for criteria in row.keys(): row[criteria] = [task.organization.name] for parameter in parameters: try: score = Score.objects.filter(task=task, parameter=parameter, revision=Score.REVISION_DEFAULT)[0] if task.organization in parameter.exclude.all(): raise IndexError except IndexError: row['Found'].append('') row['Complete'].append('') row['Topical'].append('') row['Accessible'].append('') row['Hypertext'].append('') row['Document'].append('') row['Image'].append('') else: row['Found'].append(score.found) if score.parameter.complete: row['Complete'].append(score.complete) else: row['Complete'].append('') if score.parameter.topical: row['Topical'].append(score.topical) else: row['Topical'].append('') if score.parameter.accessible: row['Accessible'].append(score.accessible) else: row['Accessible'].append('') if score.parameter.hypertext: row['Hypertext'].append(score.hypertext) else: row['Hypertext'].append('') if score.parameter.document: row['Document'].append(score.document) else: row['Document'].append('') if score.parameter.image: row['Image'].append(score.image) else: row['Image'].append('') for criteria in row.keys(): writer[criteria].writerow(row[criteria]) for criteria in row_template.keys(): license = LicenseTextFragments.objects.filter(pk='license') if license: writer[criteria].writerow([u'#%s' % license[0].csv_footer]) response = HttpResponse(mimetype='application/zip') response['Content-Disposition'] = 'attachment; filename=monitoring-%s.zip' % monitoring_pk buffer = StringIO() writer = zipfile.ZipFile(buffer, 'w') for criteria in row_template.keys(): handle[criteria].close() writer.write(spool[criteria][1], criteria + '.csv') os.unlink(spool[criteria][1]) writer.close() buffer.flush() response.write(buffer.getvalue()) buffer.close() return response