def entries_view(self, request, form_id): """ Displays the form entries in a HTML table with option to export as CSV file. """ if request.POST.get("back"): change_url = reverse("admin:%s_%s_change" % (Form._meta.app_label, Form.__name__.lower()), args=(form_id, )) return HttpResponseRedirect(change_url) form = get_object_or_404(Form, id=form_id) entries_form = EntriesForm(form, request, request.POST or None) delete_entries_perm = "%s.delete_formentry" % FormEntry._meta.app_label can_delete_entries = request.user.has_perm(delete_entries_perm) submitted = entries_form.is_valid() if submitted: if request.POST.get("export"): response = HttpResponse(mimetype="text/csv") fname = "%s-%s.csv" % (form.slug, slugify(datetime.now().ctime())) response[ "Content-Disposition"] = "attachment; filename=%s" % fname queue = StringIO() csv = writer(queue, delimiter=CSV_DELIMITER) csv.writerow(entries_form.columns()) for row in entries_form.rows(csv=True): csv.writerow(row) # Decode and reencode the response into utf-16 to be Excel compatible data = queue.getvalue().decode("utf-8").encode("utf-16") response.write(data) return response elif request.POST.get("delete") and can_delete_entries: selected = request.POST.getlist("selected") if selected: try: from django.contrib.messages import info except ImportError: def info(request, message, fail_silently=True): request.user.message_set.create(message=message) entries = FormEntry.objects.filter(id__in=selected) count = entries.count() if count > 0: entries.delete() message = ungettext("1 entry deleted", "%(count)s entries deleted", count) info(request, message % {"count": count}) template = "admin/forms/entries.html" context = { "title": _("View Entries"), "entries_form": entries_form, "opts": self.model._meta, "original": form, "can_delete_entries": can_delete_entries, "submitted": submitted } return render_to_response(template, context, RequestContext(request))
def get(self, request, formid): export = True if request.user.is_authenticated(): form = get_object_or_404(Form, id=formid) if form.user.id == request.user.id: post = request.POST or None args = form, request, FormEntry, FieldEntry, post entries_form = EntriesForm(*args) submitted = entries_form.is_valid() or export if submitted: response = HttpResponse(content_type="text/csv") fname = "%s-%s.csv" % (form.slug, slugify(now().ctime())) attachment = "attachment; filename=%s" % fname response["Content-Disposition"] = attachment queue = StringIO() try: csv = writer(queue, delimiter=CSV_DELIMITER) writerow = csv.writerow except TypeError: queue = BytesIO() delimiter = bytes(CSV_DELIMITER, encoding="utf-8") csv = writer(queue, delimiter=delimiter) writerow = lambda row: csv.writerow([c.encode("utf-8") if hasattr(c, "encode") else c for c in row]) writerow(entries_form.columns()) for row in entries_form.rows(csv=True): writerow(row) data = queue.getvalue() response.write(data) return response else: return HttpResponse(status=204) else: return HttpResponse(status=204) else: return HttpResponse(status=204)
def entries_view(self, request, form_id, show=False, export=False, export_xls=False): """ Displays the form entries in a HTML table with option to export as CSV file. """ if request.POST.get("back"): bits = (self.model._meta.app_label, self.model.__name__.lower()) change_url = reverse("admin:%s_%s_change" % bits, args=(form_id, )) return HttpResponseRedirect(change_url) form = get_object_or_404(self.model, id=form_id) post = request.POST or None args = form, request, self.formentry_model, self.fieldentry_model, post entries_form = EntriesForm(*args) delete = "%s.delete_formentry" % self.formentry_model._meta.app_label can_delete_entries = request.user.has_perm(delete) submitted = entries_form.is_valid() or show or export or export_xls export = export or request.POST.get("export") export_xls = export_xls or request.POST.get("export_xls") if submitted: if export: response = HttpResponse(content_type="text/csv") fname = "%s-%s.csv" % (form.slug, slugify(now().ctime())) attachment = "attachment; filename=%s" % fname response["Content-Disposition"] = attachment queue = StringIO() try: csv = writer(queue, delimiter=CSV_DELIMITER) writerow = csv.writerow except TypeError: queue = BytesIO() delimiter = bytes(CSV_DELIMITER, encoding="utf-8") csv = writer(queue, delimiter=delimiter) writerow = lambda row: csv.writerow([ c.encode("utf-8") if hasattr(c, "encode") else c for c in row ]) writerow(entries_form.columns()) for row in entries_form.rows(csv=True): writerow(row) data = queue.getvalue() response.write(data) return response elif XLWT_INSTALLED and export_xls: response = HttpResponse( content_type="application/vnd.ms-excel") fname = "%s-%s.xls" % (form.slug, slugify(now().ctime())) attachment = "attachment; filename=%s" % fname response["Content-Disposition"] = attachment queue = BytesIO() workbook = xlwt.Workbook(encoding='utf8') sheet = workbook.add_sheet(form.title[:31]) for c, col in enumerate(entries_form.columns()): sheet.write(0, c, col) for r, row in enumerate(entries_form.rows(csv=True)): for c, item in enumerate(row): if isinstance(item, datetime): item = item.replace(tzinfo=None) sheet.write(r + 2, c, item, XLWT_DATETIME_STYLE) else: sheet.write(r + 2, c, item) workbook.save(queue) data = queue.getvalue() response.write(data) return response elif request.POST.get("delete") and can_delete_entries: selected = request.POST.getlist("selected") if selected: try: from django.contrib.messages import info except ImportError: def info(request, message, fail_silently=True): request.user.message_set.create(message=message) entries = self.formentry_model.objects.filter( id__in=selected) count = entries.count() if count > 0: entries.delete() message = ungettext("1 entry deleted", "%(count)s entries deleted", count) info(request, message % {"count": count}) template = "admin/forms/entries.html" context = { "title": _("View Entries"), "entries_form": entries_form, "opts": self.model._meta, "original": form, "can_delete_entries": can_delete_entries, "submitted": submitted, "xlwt_installed": XLWT_INSTALLED } return render(request, template, context)
def entries_view(request, form_id, show=False, export=False, export_xls=False, content_type=None, object_id=None, entries_perm_check=lambda user, object: True, submitter_fields=('user.username', ), entries_template="forms/form_entries.html", **kwargs): """ Displays the form entries. """ model = Form template = entries_template formentry_model = FormEntry fieldentry_model = FieldEntry if request.POST.get("back"): #bits = (model._meta.app_label, model.__name__.lower()) change_url = reverse("forms:edit_form", current_app=request.resolver_match.namespace, kwargs={ "object_id": object_id, "form_id": form_id }) return HttpResponseRedirect(change_url) object = get_object_or_404( content_type.model_class(), id=object_id) if content_type is not None else None perm_check = entries_perm_check if perm_check(request.user, object) is False: raise PermissionDenied form = get_object_or_404(Form, content_type=content_type, object_id=object_id, id=form_id) post = request.POST or None args = form, request, formentry_model, fieldentry_model, post kw = {"submitter_fields": submitter_fields} entries_form = EntriesForm(*args, **kw) delete = "%s.delete_formentry" % formentry_model._meta.app_label can_delete_entries = request.user.has_perm(delete) or perm_check( request.user, object) submitted = entries_form.is_valid() or show or export or export_xls export = export or request.POST.get("export") export_xls = export_xls or request.POST.get("export_xls") if submitted: if export: response = HttpResponse(content_type="text/csv; charset=utf-8") fname = "%s-%s.csv" % (form.slug, slugify(now().ctime())) attachment = "attachment; filename=%s" % fname response["Content-Disposition"] = attachment queue = StringIO() try: csv = writer(queue, delimiter=CSV_DELIMITER) writerow = csv.writerow except TypeError: queue = BytesIO() delimiter = bytes(CSV_DELIMITER, encoding="utf-8") csv = writer(queue, delimiter=delimiter) writerow = lambda row: csv.writerow([ c.encode("utf-8") if hasattr(c, "encode") else c for c in row ]) writerow(entries_form.columns()) for row in entries_form.rows(csv=True): writerow(row) data = queue.getvalue() response.write(data) return response elif XLWT_INSTALLED and export_xls: response = HttpResponse( content_type="application/vnd.ms-excel; charset=utf-8") fname = "%s-%s.xls" % (form.slug, slugify(now().ctime())) attachment = "attachment; filename=%s" % fname response["Content-Disposition"] = attachment queue = BytesIO() workbook = xlwt.Workbook(encoding='utf8') sheet = workbook.add_sheet(form.title[:31]) for c, col in enumerate(entries_form.columns()): sheet.write(0, c, col) for r, row in enumerate(entries_form.rows(csv=True)): for c, item in enumerate(row): if isinstance(item, datetime): item = item.replace(tzinfo=None) sheet.write(r + 2, c, item, XLWT_DATETIME_STYLE) else: sheet.write(r + 2, c, item) workbook.save(queue) data = queue.getvalue() response.write(data) return response elif request.POST.get("delete") and can_delete_entries: selected = request.POST.getlist("selected") if selected: try: from django.contrib.messages import info except ImportError: def info(request, message, fail_silently=True): request.user.message_set.create(message=message) entries = formentry_model.objects.filter(id__in=selected) count = entries.count() if count > 0: entries.delete() message = ungettext("1 entry deleted", "%(count)s entries deleted", count) info(request, message % {"count": count}) context = { "title": _("View Entries"), "entries_form": entries_form, "opts": model._meta, "original": form, "can_delete_entries": can_delete_entries, "submitted": submitted, "xlwt_installed": XLWT_INSTALLED, "object_id": object_id } context[kwargs.pop("object_context_name", "object")] = object context.update(kwargs.pop("custom_context", {})) return render_to_response( template, context, RequestContext(request, current_app=request.resolver_match.namespace))
def Manipulate_Entries(request, slug): user = request.user ma = Form.objects.get(slug=slug) questions = ma.fields.all() formentry = FormEntry.objects.filter(form=ma)[:1].get() form = FieldEntry.objects.filter(entry_id=formentry) entryTable = EntriesForm(ma, RequestContext(request), formentry, form, request.POST or None) delentriesID = FormEntry.objects.filter(form=ma).values_list('id', flat=True) entries = FormEntry.objects.filter(form=ma) entryAnswers = entries.all() answers = [] for a in entryAnswers: answers.append( list( FieldEntry.objects.filter(entry=a).values_list('value', flat=True))) forms = Form.objects.get(slug=slug) questions = forms.fields.all() unfilteredentrie = forms.entries.all() fields = QuestionMarks.objects.filter(form=forms) choices = [] entryFields = [] marks = [] marking = [] indexs = [] entrie = [] for entry in unfilteredentrie: if request.user.username != str(getCharityNameforSurvey(entry)): pass else: entrie.append( list( FieldEntry.objects.filter(entry=entry).values_list( 'value', flat=True))) for unfilentry in entrie: for index, unfilen in enumerate(unfilentry): if index == 0: unfilentry.pop(0) for mark in fields: marks.append((list(mark.get_marks()))) choices.append(list(mark.get_choices())) for e in entrie: for entry in e: for choice in choices: if entry in choice: indexs.append(choice.index(entry)) chunkedindex = chunked(indexs, len(fields)) c = zip(chunkedindex, marks) newMarking = [] for b in chunkedindex: newMarking.append(zip(b, marks)) for c in newMarking: for x in c: marking.append(int((x[1][x[0]]))) cele = list(chunked(marking, len(fields))) totalEntryMark = map(sum, cele) for i in indexs: for mark in marks: marking.append(int(mark[i])) individualQMark = list(chunked(marking, len(fields))) weightedEntry = zip(entrie, individualQMark, delentriesID) if user.is_superuser: return render(request, 'app/man_entriesAdmin.html', locals()) else: return render(request, 'app/man_entries.html', locals())