Beispiel #1
0
def create_citizen(request):
    # Get user in DB or create it

    citizen_form = CitizenForm(request.POST, prefix='citizen')

    if not citizen_form.is_valid():
        return HttpResponse(unicode(citizen_form.errors), status=400)

    citizen = citizen_form.save()

    # Create report
    report_form = CitizenReportForm(request.POST, prefix='report')
    comment_form = ReportCommentForm(request.POST, prefix='comment')

    if not report_form.is_valid():
        return HttpResponse(unicode(report_form.errors), status=400)

    report = report_form.save(commit=False)
    report.citizen = citizen
    report.save()

    # Subscribe if wanted
    if (request.POST.get('subscription') == 'true'):
        report.subscribe_author_ws()

    # Create the comment if exists
    if ((request.POST["comment-text"] or comment_form.is_valid()) and request.POST["comment-text"] != ''):
        comment = comment_form.save(commit=False)
        comment.created_by = citizen
        comment.report = report
        comment.is_new_report = True
        comment.save()

    return report
Beispiel #2
0
    def test_citizen_with_pro_email(self):
        manager = FMSUser(
            is_active=True,
            telephone="0123456789",
            last_used_language="fr",
            password='******',
            first_name="manager",
            last_name="manager",
            email="*****@*****.**",
            manager=True
        )
        manager.save()

        citizen_data = {
            "email"    : manager.email,
            "last_name": "user",
            "telephone": "123456789",
            "quality"  : 1
        }

        # Create a citizen user
        citizen_form = CitizenForm(citizen_data)

        # Form has to be INVALID because the citizen use a pro email
        self.assertFalse(citizen_form.is_valid())
        self.assertTrue(citizen_form.errors)
Beispiel #3
0
    def test_double_citizen_case_insensitive(self):
        citizen_data = {
            "email"    : "*****@*****.**",
            "last_name": "user",
            "telephone": "123456789",
            "quality"  : 1
        }

        # Create first citizen
        citizen_form = CitizenForm(citizen_data)

        # Form has to be valid
        self.assertTrue(citizen_form.is_valid())
        citizen_form.save()

        # Create second citizen with a caps in email
        citizen_data['email'] = citizen_data['email'].upper()
        citizen_form          = CitizenForm(citizen_data)

        # Form has to be valid
        self.assertTrue(citizen_form.is_valid())
        citizen_form.save()

        # And only one user with the same email case insensitive is created (it's the same citizen in both cases)
        self.assertEqual(1, FMSUser.objects.filter(username__iexact=citizen_data['email']).count())
Beispiel #4
0
    def test_citizen_form_update(self):
        my_user = FMSUser(
            is_active=True,
            telephone="0123456789",
            last_used_language="nl",
            password='******',
            first_name="my_user",
            last_name="my_user",
            email="*****@*****.**",
            manager=False
        )
        my_user.save()

        #Change values
        citizen_data = {
            "email"    : "*****@*****.**",
            "last_name": "user modified",
            "telephone": "987654321",
            "quality"  : 2
        }
        citizen_form = CitizenForm(citizen_data)
        self.assertTrue(citizen_form.is_valid())
        citizen_form.save()

        my_user = FMSUser.objects.filter(username__iexact=citizen_data['email']).get()

        self.assertEqual(my_user.last_name, citizen_data["last_name"])
        self.assertEqual(my_user.telephone, citizen_data["telephone"])
        self.assertEqual(my_user.quality, citizen_data["quality"])
        self.assertEqual(my_user.last_used_language, "fr")
Beispiel #5
0
def add_attachment_citizen(request, report_id):
    try:
        report = Report.objects.all().fmxPublic().get(id=report_id)
    except Report.DoesNotExist:
        return exit_with_error("Report does not exist", 404)

    if request.POST.get(
            'citizen-last_name', None) == None and request.POST.get(
                'citizen-quality', None) == None and request.POST.get(
                    'citizen-telephone', None) == None and request.POST.get(
                        'citizen-email', None) == None:
        # No citizen info was sent. We try to get it from the incident
        if report.is_pro():
            return exit_with_error("Report is pro", 401)
        else:
            citizen = report.get_creator()
    else:
        citizen_form = CitizenForm(request.POST,
                                   request.FILES,
                                   prefix='citizen')
        if not citizen_form.is_valid():
            return exit_with_error(
                "Attachment is not valid (citizen form is not valid) : " +
                ", ".join(citizen_form.errors), 400)
        else:
            citizen = citizen_form.save()

    return add_attachment_for_user(request, report, citizen)
Beispiel #6
0
def document(request, slug, report_id):
    ReportFileFormSet = inlineformset_factory(Report, ReportFile, form=ReportFileForm, extra=0)
    report = get_object_or_404(Report, id=report_id)

    if request.method == "POST":
        comment = None
        comment_form = ReportCommentForm(request.POST, request.FILES, prefix='comment')
        citizen_form = CitizenForm(request.POST, request.FILES, prefix='citizen')

        # Use `hack_multi_file` instead of ``request.FILES``.
        file_formset = ReportFileFormSet(request.POST, hack_multi_file(request), instance=report, prefix='files',
                                         queryset=ReportFile.objects.none())

        # this checks update is_valid too
        if file_formset.is_valid() and (
                    not request.POST["comment-text"] or comment_form.is_valid()) and citizen_form.is_valid():

            if len(file_formset.files) == 0 and (not request.POST["comment-text"] or len(request.POST["comment-text"]) == 0):
                messages.add_message(request, messages.ERROR, _("You must add a comment, a photo or a document to continue."))
            else:
                # this saves the update as part of the report.
                citizen = citizen_form.save()

                if request.POST["comment-text"] and len(request.POST["comment-text"]) > 0:
                    comment = comment_form.save(commit=False)
                    comment.report = report
                    comment.created_by = citizen
                    comment.save()

                files = file_formset.save()

                for report_file in files:
                    report_file.created_by = citizen
                    report_file.save()

                # if request.POST.get("citizen_subscription", False):
                # ReportSubscription(report=report, subscriber=report.created_by).save()

                messages.add_message(request, messages.SUCCESS, _("Modification(s) registered"))
                return HttpResponseRedirect(report.get_absolute_url())
    else:
        file_formset = ReportFileFormSet(prefix='files', queryset=ReportFile.objects.none())
        comment_form = ReportCommentForm(prefix='comment')
        citizen_form = CitizenForm(prefix='citizen')

    return render_to_response("reports/document.html", {
        "report": report,
        "subscribed": request.user.is_authenticated() and ReportSubscription.objects.filter(report=report,
                                                                                            subscriber=request.user).exists(),
        "file_formset": file_formset,
        "comment_form": comment_form,
        "citizen_form": citizen_form,
    }, context_instance=RequestContext(request))
Beispiel #7
0
def create_citizen(request,
                   several_occurences=False,
                   mobile_notification=False):
    # Get user in DB or create it

    citizen_form = CitizenForm(request.POST, prefix='citizen')

    if not citizen_form.is_valid():
        return HttpResponse(unicode(citizen_form.errors), status=400)

    citizen = citizen_form.save()

    # Create report
    report_form = CitizenReportForm(request.POST, prefix='report')
    comment_form = ReportCommentForm(request.POST, prefix='comment')

    if not report_form.is_valid():
        return HttpResponse(unicode(report_form.errors), status=400)

    report = report_form.save(commit=False)
    report.citizen = citizen
    report.several_occurences = several_occurences
    report.mobile_notification = mobile_notification
    report.forceAutoDispatching = False
    report.save()

    # Subscribe if wanted
    if (request.POST.get('subscription') == 'true'):
        report.subscribe_author_ws()

    # Create the comment if exists
    if ((request.POST["comment-text"] or comment_form.is_valid())
            and request.POST["comment-text"] != ''):
        comment = comment_form.save(commit=False)
        comment.created_by = citizen
        comment.report = report
        comment.is_new_report = True
        comment.save()

    # Commit report after comment to get this one when triggering to partners
    report.forceAutoDispatching = True
    report.save()
    report.forceAutoDispatching = False

    return report
Beispiel #8
0
def reopen_request(request, slug, report_id):
    try:
        report = get_object_or_404(Report, id=report_id, private=False)
        limit_date = datetime.datetime.now() - datetime.timedelta(days=90)

        if report.status != report.PROCESSED:
            messages.add_message(request, messages.ERROR, _(ERROR_MSG_REOPEN_REQUEST_ONLY_CLOSED))
            return HttpResponseRedirect(report.get_absolute_url())

        elif report.close_date < limit_date:
            messages.add_message(request, messages.ERROR, _(ERROR_MSG_REOPEN_REQUEST_90_DAYS))
            return HttpResponseRedirect(report.get_absolute_url())

        elif request.method == "POST":
            reopen_form = ReportReopenReasonForm(request.POST, prefix='reopen')
            citizen_form = CitizenForm(request.POST, prefix='citizen')

            # this checks update is_valid too
            if citizen_form.is_valid() and (request.POST["reopen-text"] and len(request.POST["reopen-text"]) > 0
                                            and request.POST["reopen-reason"] and reopen_form.is_valid()):
                citizen = citizen_form.save()
                reopen_reason = reopen_form.save(commit=False)
                reopen_reason.text = request.POST["reopen-text"]
                reopen_reason.report = report
                reopen_reason.created_by = citizen
                reopen_reason.type = ReportAttachment.REOPEN_REQUEST
                reopen_reason.save()

                messages.add_message(request, messages.SUCCESS,
                                     _(SUCCESS_MSG_REOPEN_REQUEST_CONFIRM))
                return HttpResponseRedirect(report.get_absolute_url())
        else:
            citizen_form = CitizenForm(prefix='citizen')
            reopen_form = ReportReopenReasonForm(prefix='reopen')

        return render_to_response("reports/reopen.html", {
            "report": report,
            "reopen_form": reopen_form,
            "citizen_form": citizen_form,
        }, context_instance=RequestContext(request))

    except Http404:
        messages.add_message(request, messages.ERROR, _("No incident found with this ticket number"))
        return HttpResponseRedirect(reverse('home'))
Beispiel #9
0
def create_citizen(request, several_occurences=False, mobile_notification=False):
    # Get user in DB or create it

    citizen_form = CitizenForm(request.POST, prefix='citizen')

    if not citizen_form.is_valid():
        return HttpResponse(unicode(citizen_form.errors), status=400)

    citizen = citizen_form.save()

    # Create report
    report_form = CitizenReportForm(request.POST, prefix='report')
    comment_form = ReportCommentForm(request.POST, prefix='comment')

    if not report_form.is_valid():
        return HttpResponse(unicode(report_form.errors), status=400)

    report = report_form.save(commit=False)
    report.citizen = citizen
    report.several_occurences = several_occurences
    report.mobile_notification = mobile_notification
    report.forceAutoDispatching = False
    report.save()

    # Subscribe if wanted
    if (request.POST.get('subscription') == 'true'):
        report.subscribe_author_ws()

    # Create the comment if exists
    if ((request.POST["comment-text"] or comment_form.is_valid()) and request.POST["comment-text"] != ''):
        comment = comment_form.save(commit=False)
        comment.created_by = citizen
        comment.report = report
        comment.is_new_report = True
        comment.save()

    # Commit report after comment to get this one when triggering to partners
    report.forceAutoDispatching = True
    report.save()
    report.forceAutoDispatching = False

    return report
Beispiel #10
0
def add_attachment_citizen(request, report_id):
    try:
        report = Report.objects.all().fmxPublic().get(id=report_id)
    except Report.DoesNotExist:
        return exit_with_error("Report does not exist", 404)

    if request.POST.get('citizen-last_name', None) == None and request.POST.get('citizen-quality', None) == None and request.POST.get('citizen-telephone', None) == None and request.POST.get('citizen-email', None) == None :
        # No citizen info was sent. We try to get it from the incident
        if report.is_pro():
            return exit_with_error("Report is pro", 401)
        else:
            citizen = report.get_creator()
    else:
        citizen_form = CitizenForm(request.POST, request.FILES, prefix='citizen')
        if not citizen_form.is_valid():
            return exit_with_error("Attachment is not valid (citizen form is not valid) : " + ", ".join(citizen_form.errors), 400)
        else:
            citizen = citizen_form.save()

    return add_attachment_for_user(request, report, citizen)
Beispiel #11
0
def reopen_request(request, slug, report_id):
    try:
        report = get_object_or_404(Report, id=report_id, private=False)
        limit_date = datetime.datetime.now() - datetime.timedelta(days=90)

        if report.status != Report.PROCESSED and report.status != Report.REFUSED:
            messages.add_message(request, messages.ERROR,
                                 _(ERROR_MSG_REOPEN_REQUEST_ONLY_CLOSED))
            return HttpResponseRedirect(report.get_absolute_url())

        elif report.status == Report.PROCESSED and report.close_date < limit_date:
            messages.add_message(request, messages.ERROR,
                                 _(ERROR_MSG_REOPEN_REQUEST_90_DAYS))
            return HttpResponseRedirect(report.get_absolute_url())

        elif request.method == "POST":
            reopen_form = ReportReopenReasonForm(request.POST, prefix='reopen')
            citizen_form = CitizenForm(request.POST, prefix='citizen')

            # this checks update is_valid too
            if citizen_form.is_valid() and (
                    request.POST["reopen-text"]
                    and len(request.POST["reopen-text"]) > 0 and
                    request.POST["reopen-reason"] and reopen_form.is_valid()):
                citizen = citizen_form.save()
                reopen_reason = reopen_form.save(commit=False)
                reopen_reason.text = request.POST["reopen-text"]
                reopen_reason.report = report
                reopen_reason.created_by = citizen
                reopen_reason.type = ReportAttachment.REOPEN_REQUEST
                reopen_reason.save()

                messages.add_message(request, messages.SUCCESS,
                                     _(SUCCESS_MSG_REOPEN_REQUEST_CONFIRM))
                return HttpResponseRedirect(report.get_absolute_url())
        else:
            citizen_form = CitizenForm(prefix='citizen')
            reopen_form = ReportReopenReasonForm(prefix='reopen')

        return render_to_response("reports/reopen.html", {
            "report": report,
            "reopen_form": reopen_form,
            "citizen_form": citizen_form,
        },
                                  context_instance=RequestContext(request))

    except Http404:
        messages.add_message(request, messages.ERROR,
                             _("No incident found with this ticket number"))
        return HttpResponseRedirect(reverse('home'))
Beispiel #12
0
def new(request):
    ReportFileFormSet = inlineformset_factory(Report, ReportFile, form=ReportFileForm, extra=0)

    pnt = dict_to_point(request.REQUEST)
    report = None
    file_formset = ReportFileFormSet(prefix='files', queryset=ReportFile.objects.none())

    if request.method == "POST":
        report_form = CitizenReportForm(request.POST, request.FILES, prefix='report')
        comment_form = ReportCommentForm(request.POST, request.FILES, prefix='comment')
        citizen_form = CitizenForm(request.POST, request.FILES, prefix='citizen')

        fingerprint = RequestFingerprint(request)

        # this checks update is_valid too
        if report_form.is_valid() \
                and (not request.POST["comment-text"] or comment_form.is_valid()) \
                and citizen_form.is_valid() \
                and not fingerprint.is_duplicate():

            # this saves the update as part of the report.
            report = report_form.save(commit=False)

            # Use `hack_multi_file` instead of ``request.FILES``.
            file_formset = ReportFileFormSet(request.POST, hack_multi_file(request), instance=report, prefix='files',
                                             queryset=ReportFile.objects.none())

            if file_formset.is_valid():
                fingerprint.save()

                citizen = citizen_form.save()

                report.citizen = citizen
                report.quality = citizen_form.cleaned_data["quality"]
                report.save()

                if report_form.cleaned_data['subscription']:
                    report.subscribe_author()

                if request.POST["comment-text"]:
                    comment = comment_form.save(commit=False)
                    comment.created_by = citizen
                    comment.report = report
                    # Used for comment post_save signal:
                    comment.is_new_report = True
                    comment.save()

                files = file_formset.save(commit=False)
                for report_file in files:
                    report_file.created_by = citizen
                    # report_file.report = report
                    # Used for file post_save signal:
                    report_file.is_new_report = True
                    report_file.save()
                messages.add_message(request, messages.SUCCESS, _("Newly created report successfull"))
                return HttpResponseRedirect(report.get_absolute_url())

            else:
                report = None

    else:
        report_form = CitizenReportForm(initial={
            'x': request.REQUEST.get('x'),
            'y': request.REQUEST.get('y')
        }, prefix='report')
        file_formset = ReportFileFormSet(prefix='files', queryset=ReportFile.objects.none())
        comment_form = ReportCommentForm(prefix='comment')
        citizen_form = CitizenForm(prefix='citizen')

    return render_to_response("reports/new.html", {
        "report": report,
        "available_zips": ZipCode.objects,
        "all_zipcodes": ZipCode.objects.all(),
        "category_classes": ReportMainCategoryClass.objects.prefetch_related('categories').all().order_by(
            'name_' + get_language()),
        "comment_form": comment_form,
        "file_formset": file_formset,
        "report_form": report_form,
        "citizen_form": citizen_form,
        "pnt": pnt
    }, context_instance=RequestContext(request))
Beispiel #13
0
def new(request):
    ReportFileFormSet = inlineformset_factory(Report,
                                              ReportFile,
                                              form=ReportFileForm,
                                              extra=0)

    pnt = dict_to_point(request.REQUEST)
    report = None
    file_formset = ReportFileFormSet(prefix='files',
                                     queryset=ReportFile.objects.none())

    if request.method == "POST":
        report_form = CitizenReportForm(request.POST,
                                        request.FILES,
                                        prefix='report')
        comment_form = ReportCommentForm(request.POST,
                                         request.FILES,
                                         prefix='comment')
        citizen_form = CitizenForm(request.POST,
                                   request.FILES,
                                   prefix='citizen')

        fingerprint = RequestFingerprint(request)

        # this checks update is_valid too
        if report_form.is_valid() \
                and (not request.POST["comment-text"] or comment_form.is_valid()) \
                and citizen_form.is_valid() \
                and not fingerprint.is_duplicate():

            # this saves the update as part of the report.
            report = report_form.save(commit=False)

            # Use `hack_multi_file` instead of ``request.FILES``.
            file_formset = ReportFileFormSet(
                request.POST,
                hack_multi_file(request),
                instance=report,
                prefix='files',
                queryset=ReportFile.objects.none())

            if file_formset.is_valid():
                fingerprint.save()

                citizen = citizen_form.save()

                report.citizen = citizen
                report.quality = citizen_form.cleaned_data["quality"]
                report.forceAutoDispatching = False
                report.save()

                if report_form.cleaned_data['subscription']:
                    report.subscribe_author()

                if request.POST["comment-text"]:
                    comment = comment_form.save(commit=False)
                    comment.created_by = citizen
                    comment.report = report
                    # Used for comment post_save signal:
                    comment.is_new_report = True
                    comment.save()

                files = file_formset.save(commit=False)
                for report_file in files:
                    report_file.created_by = citizen
                    # report_file.report = report
                    # Used for file post_save signal:
                    report_file.is_new_report = True
                    report_file.save()

                report.forceAutoDispatching = True
                report.save()

                messages.add_message(request, messages.SUCCESS,
                                     _("Newly created report successfull"))
                return HttpResponseRedirect(report.get_absolute_url())

            else:
                report = None

    else:
        report_form = CitizenReportForm(initial={
            'x': request.REQUEST.get('x'),
            'y': request.REQUEST.get('y')
        },
                                        prefix='report')
        file_formset = ReportFileFormSet(prefix='files',
                                         queryset=ReportFile.objects.none())
        comment_form = ReportCommentForm(prefix='comment')
        citizen_form = CitizenForm(prefix='citizen')

    return render_to_response("reports/new.html", {
        "report":
        report,
        "available_zips":
        ZipCode.objects,
        "all_zipcodes":
        ZipCode.objects.all(),
        "category_classes":
        ReportMainCategoryClass.objects.prefetch_related(
            'categories').all().order_by('name_' + get_language()),
        "comment_form":
        comment_form,
        "file_formset":
        file_formset,
        "report_form":
        report_form,
        "citizen_form":
        citizen_form,
        "pnt":
        pnt
    },
                              context_instance=RequestContext(request))
Beispiel #14
0
def document(request, slug, report_id):
    ReportFileFormSet = inlineformset_factory(Report,
                                              ReportFile,
                                              form=ReportFileForm,
                                              extra=0)
    report = get_object_or_404(Report, id=report_id)

    if request.method == "POST":
        comment = None
        comment_form = ReportCommentForm(request.POST,
                                         request.FILES,
                                         prefix='comment')
        citizen_form = CitizenForm(request.POST,
                                   request.FILES,
                                   prefix='citizen')

        # Use `hack_multi_file` instead of ``request.FILES``.
        file_formset = ReportFileFormSet(request.POST,
                                         hack_multi_file(request),
                                         instance=report,
                                         prefix='files',
                                         queryset=ReportFile.objects.none())

        # this checks update is_valid too
        if file_formset.is_valid() and (
                not request.POST["comment-text"]
                or comment_form.is_valid()) and citizen_form.is_valid():

            if len(file_formset.files) == 0 and (
                    not request.POST["comment-text"]
                    or len(request.POST["comment-text"]) == 0):
                messages.add_message(
                    request, messages.ERROR,
                    _("You must add a comment, a photo or a document to continue."
                      ))
            else:
                # this saves the update as part of the report.
                citizen = citizen_form.save()

                if request.POST["comment-text"] and len(
                        request.POST["comment-text"]) > 0:
                    comment = comment_form.save(commit=False)
                    comment.report = report
                    comment.created_by = citizen
                    comment.save()

                files = file_formset.save()

                for report_file in files:
                    report_file.created_by = citizen
                    report_file.save()

                # if request.POST.get("citizen_subscription", False):
                # ReportSubscription(report=report, subscriber=report.created_by).save()

                messages.add_message(request, messages.SUCCESS,
                                     _("Modification(s) registered"))
                return HttpResponseRedirect(report.get_absolute_url())
    else:
        file_formset = ReportFileFormSet(prefix='files',
                                         queryset=ReportFile.objects.none())
        comment_form = ReportCommentForm(prefix='comment')
        citizen_form = CitizenForm(prefix='citizen')

    return render_to_response("reports/document.html", {
        "report":
        report,
        "subscribed":
        request.user.is_authenticated() and ReportSubscription.objects.filter(
            report=report, subscriber=request.user).exists(),
        "file_formset":
        file_formset,
        "comment_form":
        comment_form,
        "citizen_form":
        citizen_form,
    },
                              context_instance=RequestContext(request))