Ejemplo n.º 1
0
    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))
Ejemplo n.º 2
0
 def entries_view(self, request, form_id, show=False, export=False):
     """
     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() or show or export
     export = export or request.POST.get("export")
     if submitted:
         if export:
             response = HttpResponse(mimetype="text/csv")
             fname = "%s-%s.csv" % (form.slug, slugify(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 entire queued 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))
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
 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(mimetype="text/csv")
             fname = "%s-%s.csv" % (form.slug, slugify(now().ctime()))
             attachment = "attachment; filename=%s" % fname
             response["Content-Disposition"] = attachment
             queue = StringIO()
             csv = unicodecsv.writer(queue, delimiter=CSV_DELIMITER, encoding='utf-8')
             csv.writerow(entries_form.columns())
             for row in entries_form.rows(csv=True):
                 csv.writerow(row)
             # Decode and reencode entire queued response
             # into utf-16 to be Excel compatible
             data = queue.getvalue().decode("utf-8").encode("utf-16")
             response.write(data)
             return response
         elif XLWT_INSTALLED and export_xls:
             response = HttpResponse(mimetype="application/vnd.ms-excel")
             fname = "%s-%s.xls" % (form.slug, slugify(now().ctime()))
             attachment = "attachment; filename=%s" % fname
             response["Content-Disposition"] = attachment
             queue = StringIO()
             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.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_to_response(template, context, RequestContext(request))
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
Archivo: views.py Proyecto: xnx99/enjaz
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))
Ejemplo n.º 7
0
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())