Esempio n. 1
0
def reject_document(request, name, path=None):
    document = get_document(name=name, path=path)

    if document.current_edit_meta is None:
        raise PermissionDenied()

    notifications_factory.notification_document(
        request.user,
        document,
        strings.NOTIFICATION_DOCUMENT_REJECTED
    )

    edit_meta = document.current_edit_meta
    edit_meta.end_datetime = timezone.now()
    edit_meta.status = DocumentEditMeta.Status.REJECTED
    edit_meta.closed_by = request.user
    edit_meta.save()

    document.accepted_edit_meta = document.current_edit_meta
    document.current_edit_meta = None
    document.data = edit_meta.previous_document_data
    document.status = Document.Status.OPEN
    document.save()

    activity_factory.for_document(
        request.user,
        document,
        strings.i18n_format(
            strings.ACTIVITY_REVERT_DOCUMENT,
            datetime=edit_meta.previous_document_data.datetime
        ),
        document_data=edit_meta.previous_document_data
    )

    return Response({}, status=status.HTTP_200_OK)
Esempio n. 2
0
def toggle_follow(request, name, path=None):
    document = get_document(name=name, path=path)

    if request.user in document.followers.all():
        document.followers.remove(request.user)
    else:
        document.followers.add(request.user)

    return Response({}, status=status.HTTP_200_OK)
Esempio n. 3
0
def write_remark(request, name, path=None):
    document = get_document(name=name, path=path)
    reject_remark_id = request.GET.get("reject_remark_id")
    remark_to_reject = None

    if reject_remark_id is not None:
        reject_remark_id = get_request_int_or_404(request, "GET", "reject_remark_id")
        remark_to_reject = get_object_or_404(Remark, id=reject_remark_id)

        if remark_to_reject.is_rejected:
            raise PermissionDenied()

    if document.current_edit_meta is None:
        raise PermissionDenied()

    form = RemarkForm(request.POST)

    context = browser_base_context(request)
    context.update({
        "form_title": _("Write remark"),
        "form": form,
        "submit_title": _("Submit"),
        "validator_url": reverse("documents:validator-write-remark"),
    })

    if request.method == "POST" and form.is_valid():
        remark = form.save(commit=False)
        remark.edit_meta = document.current_edit_meta
        remark.user = request.user
        remark.save()

        # Reject remark
        if remark_to_reject is not None:
            remark_to_reject.status = Remark.Status.REJECTED
            remark_to_reject.save()

            notifications_factory.notification_remark(
                request.user,
                document,
                remark_to_reject,
                strings.NOTIFICATION_REMARK_REJECTED
            )

        notifications_factory.notification_remark(
            request.user,
            document,
            remark,
            strings.NOTIFICATION_REMARK_WROTE
        )

        messages.success(request, _("Successfully submitted remark"))
        return redirect(document.permalink)

    return TemplateResponse(template="forms/form.html", request=request, context=context)
Esempio n. 4
0
def upload_new_version(request, name, path=None):
    document = get_document(name=name, path=path)

    if document.current_edit_meta is None:
        raise PermissionDenied()

    if request.method == "POST":
        # No instance because need new version of document and save old version
        form = UploadNewVersionForm(request.POST, request.FILES)
    else:
        form = UploadNewVersionForm(
            instance=document.data,
            initial={"name": name, "parent": document.parent}
        )

    context = browser_base_context(request)
    context.update({
        "form_title": _("Upload new version"),
        "form": form,
        "submit_title": _("Upload"),
        "validator_url": reverse("documents:validator-upload-new-version"),
    })

    if request.method == "POST" and form.is_valid():
        data = form.save(commit=False)
        data.document = document
        data.save()

        document.data = data

        activity_factory.for_document(
            request.user,
            document,
            form.cleaned_data["message"],
            document_data=data
        )

        # if document.name != form.cleaned_data["name"]:
        #     document.name = form.cleaned_data["name"]
        #     activity_factory.for_document(
        #         request.user,
        #         document,
        #         strings.i18n_format(
        #             strings.ACTIVITY_RENAME_DOCUMENT,
        #             old_name=document.name,
        #             new_name=form.cleaned_data["name"]
        #         )
        #     )

        document.save()
        messages.success(request, _("Successfully uploaded"))
        return redirect(document.permalink)

    return TemplateResponse(template="forms/form.html", request=request, context=context)
Esempio n. 5
0
def take_for_revision(request, name, path=None):
    document = get_document(name=name, path=path)

    if document.is_under_edition:
        raise ValidationError(_("Already under edition"))

    # Attach editor to document
    edit_meta = DocumentEditMeta.objects.create(
        editor=request.user,
        document=document,
        previous_document_data=document.data
    )

    document.current_edit_meta = edit_meta
    document.status = Document.Status.IN_PROGRESS
    document.save()

    messages.success(request._request, _("Successfully took"))
    return Response({}, status=status.HTTP_200_OK)
Esempio n. 6
0
def rename_document(request, name, path=None):
    document = get_document(name=name, path=path)
    old_name = document.name

    if request.method == "POST":
        form = RenameDocumentForm(request.POST, instance=document)
    else:
        form = RenameDocumentForm(instance=document)

    context = browser_base_context(request)
    context.update({
        "form_title": _("Rename document"),
        "form": form,
        "submit_title": _("Rename"),
        "validator_url": reverse("documents:validator-rename-document"),
    })

    if request.method == "POST" and form.is_valid():
        redirect_next = request.GET.get("next", "single")

        if old_name != document.name:
            activity_factory.for_document(
                request.user,
                document,
                strings.i18n_format(
                    strings.ACTIVITY_RENAME_DOCUMENT,
                    old_name=old_name,
                    new_name=document.name
                )
            )

        form.save()
        messages.success(request, _("Successfully renamed"))

        if redirect_next == "list":
            return redirect(document.parent.permalink)
        else:
            return redirect(document.permalink)

    return TemplateResponse(template="forms/form.html", request=request, context=context)
Esempio n. 7
0
def mark_as_finished_remark(request, name, path=None):
    document = get_document(name=name, path=path)

    if document.current_edit_meta is None:
        raise PermissionDenied()

    remark_id = get_request_int_or_404(request, "data", "remark_id")
    remark = get_object_or_404(Remark, id=remark_id)

    remark.status = Remark.Status.FINISHED
    remark.save()

    # Send notification
    notifications_factory.notification_remark(
        request.user,
        document,
        remark,
        strings.NOTIFICATION_REMARK_FINISHED,
        to_followers=True
    )

    return Response({}, status=status.HTTP_200_OK)
Esempio n. 8
0
def revert_document(request, name, path=None):
    document = get_document(name=name, path=path)
    activity_id = get_request_int_or_404(request, "data", "activity_id")
    activity = get_object_or_404(Activity, id=activity_id)

    if activity.document_data is None:
        raise ValidationError(_("Activity does not provide data"))

    if document.data.id == activity.document_data.id:
        raise ValidationError(_("Already this version"))

    document.data = activity.document_data
    document.save()

    activity_factory.for_document(
        request.user,
        document,
        strings.i18n_format(strings.ACTIVITY_REVERT_DOCUMENT, datetime=activity.datetime),
        document_data=activity.document_data
    )

    return Response({}, status=status.HTTP_200_OK)
Esempio n. 9
0
def update_document_status(request, name, path=None):
    document = get_document(name=name, path=path)

    if request.method == "POST":
        form = UpdateStatusForm(request.POST, instance=document)
    else:
        form = UpdateStatusForm(instance=document)

    context = browser_base_context(request)
    context.update({
        "form_title": _("Update document status"),
        "form": form,
        "submit_title": _("Update"),
        "validator_url": reverse("documents:validator-update-document-status"),
    })

    if request.method == "POST" and form.is_valid():
        form.save()
        messages.success(request, _("Successfully updated"))
        return redirect(document.permalink)

    return TemplateResponse(template="forms/form.html", request=request, context=context)
Esempio n. 10
0
def accept_remark(request, name, path=None):
    document = get_document(name=name, path=path)

    if document.current_edit_meta is None:
        raise PermissionDenied()

    remark_id = get_request_int_or_404(request, "data", "remark_id")
    remark = get_object_or_404(Remark, id=remark_id)

    if remark.is_accepted:
        raise ValidationError({"details": _("Already accepted")})

    remark.status = Remark.Status.ACCEPTED
    remark.save()

    # Send notification
    notifications_factory.notification_remark(
        request.user,
        document,
        remark,
        strings.NOTIFICATION_REMARK_ACCEPTED
    )

    return Response({}, status=status.HTTP_200_OK)
Esempio n. 11
0
def accept_document(request, name, path=None):
    document = get_document(name=name, path=path)

    if document.current_edit_meta is None:
        raise PermissionDenied()

    notifications_factory.notification_document(
        request.user,
        document,
        strings.NOTIFICATION_DOCUMENT_ACCEPTED
    )

    edit_meta = document.current_edit_meta
    edit_meta.end_datetime = timezone.now()
    edit_meta.status = DocumentEditMeta.Status.ACCEPTED
    edit_meta.closed_by = request.user
    edit_meta.save()

    document.accepted_edit_meta = document.current_edit_meta
    document.current_edit_meta = None
    document.status = Document.Status.FINAL
    document.save()

    return Response({}, status=status.HTTP_200_OK)
Esempio n. 12
0
 def get_for_instance(self, **kwargs):
     return get_document(**kwargs)