Beispiel #1
0
def request_typesetting_changes(request, article_id, proofing_task_id):
    """
    Allows a PM to request typesetters make changes to an article's Galleys.
    :param request: HttpRequest object
    :param article_id: Article object PK
    :param proofing_task_id: ProofingTask PK
    :return: HttpReponse
    """
    article = get_object_or_404(submission_models.Article, pk=article_id)
    proofing_task = get_object_or_404(models.ProofingTask, pk=proofing_task_id)

    if request.GET.get('comments') == 'true':
        comments = proofing_task.review_comments()
        form = forms.AssignTypesetter(comments=comments)
    else:
        form = forms.AssignTypesetter()

    if request.POST:
        form = forms.AssignTypesetter(request.POST)
        user = logic.get_user_from_post(request)
        galleys = logic.get_galleys_from_post(request)
        files = logic.get_files_from_post(request)

        if not user:
            form.add_error(None, 'You must select a typesetter.')

        if not galleys:
            form.add_error(None, 'You must select at least one galley.')

        if form.is_valid():
            typeset_task = form.save(commit=False)
            typeset_task.proofing_task = proofing_task
            typeset_task.typesetter = user
            typeset_task.save()
            typeset_task.galleys.add(*galleys)
            typeset_task.files.add(*files)

            return redirect(
                reverse('notify_typesetter_changes',
                        kwargs={
                            'article_id': article.pk,
                            'proofing_task_id': proofing_task.pk,
                            'typeset_task_id': typeset_task.pk
                        }))

    template = 'proofing/request_typesetting_changes.html'
    context = {
        'article': article,
        'proofing_task': proofing_task,
        'typesetters': logic.get_typesetters(article, proofing_task),
        'user': user if request.POST else None,
        'galleys': galleys if request.POST else None,
        'form': form,
    }

    return render(request, template, context)
Beispiel #2
0
def proofing_article(request, article_id):
    article = get_object_or_404(submission_models.Article.objects.select_related('productionassignment'), pk=article_id,
                                journal=request.journal)
    proofreaders = logic.get_all_possible_proofers(journal=request.journal, article=article)
    form = forms.AssignProofreader()
    modal = None

    if request.POST:

        if 'new-round' in request.POST:
            logic.handle_closing_active_task(request, article)
            new_round = article.proofingassignment.add_new_proofing_round()
            messages.add_message(request, messages.SUCCESS, 'New round {0} added.'.format(new_round.number))
            return redirect(reverse('proofing_article', kwargs={'article_id': article.pk}))

        if 'new-proofreader' in request.POST:
            form = forms.AssignProofreader(request.POST)
            user = logic.get_user_from_post(request)
            galleys = logic.get_galleys_from_post(request)

            if not user:
                form.add_error(None, 'You must select a user.')

            if not galleys:
                form.add_error(None, 'You must select at least one Galley.')

            if form.is_valid():
                proofing_task = form.save(commit=False)
                proofing_task.proofreader = user
                proofing_task.round = article.proofingassignment.current_proofing_round()
                proofing_task.save()
                proofing_task.galleys_for_proofing.add(*galleys)
                return redirect(reverse('notify_proofreader', kwargs={'article_id': article.pk,
                                                                      'proofing_task_id': proofing_task.pk}))

            # Set the modal to open if this page is not redirected.
            modal = 'add_proofer'

    template = 'proofing/proofing_article.html'
    context = {
        'article': article,
        'proofreaders': proofreaders,
        'form': form,
        'modal': modal,
        'user': user if request.POST else None,
        'galleys': galleys if request.POST else None
    }

    return render(request, template, context)
Beispiel #3
0
def edit_proofing_assignment(request, article_id, proofing_task_id):
    article = get_object_or_404(submission_models.Article,
                                pk=article_id,
                                journal=request.journal)
    proofing_task = get_object_or_404(models.ProofingTask,
                                      pk=proofing_task_id)

    form = forms.AssignProofreader(instance=proofing_task)

    if request.POST:

        if 'delete' in request.POST:
            kwargs = {'article': article, 'proofing_task': proofing_task, 'request': request}
            event_logic.Events.raise_event(event_logic.Events.ON_CANCEL_PROOFING_TASK, task_object=article, **kwargs)
            proofing_task.delete()
            messages.add_message(request, messages.SUCCESS, 'Proofing task deleted.')
            return redirect(reverse('proofing_article', kwargs={'article_id': article.id}))

        form = forms.AssignProofreader(request.POST, instance=proofing_task)
        galleys = logic.get_galleys_from_post(request)

        if not galleys:
            form.add_error(None, 'You must select at least one Galley.')

        if form.is_valid():
            proofing_task = form.save()
            proofing_task.save()

            for galley in proofing_task.galleys_for_proofing.all():
                if galley not in galleys:
                    proofing_task.galleys_for_proofing.remove(galley)
            proofing_task.galleys_for_proofing.add(*galleys)

            kwargs = {'article': article, 'proofing_task': proofing_task, 'request': request}
            event_logic.Events.raise_event(event_logic.Events.ON_EDIT_PROOFING_TASK, task_object=article, **kwargs)

            return redirect(reverse('proofing_article', kwargs={'article_id': article.id}))

    template = 'proofing/edit_proofing_assignment.html'
    context = {
        'article': article,
        'proofing_task': proofing_task,
        'form': form,
        'galleys': proofing_task.galleys_for_proofing.all(),
    }

    return render(request, template, context)
Beispiel #4
0
def proofing_article(request, article_id):
    """
    Displays the proofing control page, allows PM to add tasks, edit galleys and mark proofing as complete
    :param request: HttpRequest object
    :param article_id: Article object PK
    :return: HttpRedirect if POST or HttpResponse
    """
    article = get_object_or_404(
        submission_models.Article.objects.select_related(
            'productionassignment'),
        pk=article_id,
        journal=request.journal,
    )
    current_round = article.proofingassignment.current_proofing_round()
    proofreaders = logic.get_all_possible_proofers(
        journal=request.journal,
        article=article,
    )
    form = forms.AssignProofreader()
    modal = None

    if request.POST:

        if 'new-round' in request.POST:
            logic.handle_closing_active_task(request, article)
            new_round = article.proofingassignment.add_new_proofing_round()
            messages.add_message(
                request,
                messages.SUCCESS,
                'New round {0} added.'.format(new_round.number),
            )
            return redirect(
                reverse(
                    'proofing_article',
                    kwargs={'article_id': article.pk},
                ))

        if 'new-proofreader' in request.POST:

            if not current_round.can_add_another_proofreader(request.journal):
                messages.add_message(
                    request,
                    messages.WARNING,
                    'The number of proofreaders per round has been limited.'
                    ' You cannot add another proofreader in this round.',
                )
                return redirect(
                    reverse(
                        'proofing_article',
                        kwargs={'article_id': article.pk},
                    ))

            form = forms.AssignProofreader(request.POST)
            user = logic.get_user_from_post(request, article)
            galleys = logic.get_galleys_from_post(request)

            if not user:
                form.add_error(None, 'You must select a user.')

            if not galleys:
                form.add_error(None, 'You must select at least one Galley.')

            if form.is_valid():
                proofing_task = form.save(commit=False)
                proofing_task.proofreader = user
                proofing_task.round = current_round
                proofing_task.save()
                proofing_task.galleys_for_proofing.add(*galleys)
                return redirect(
                    reverse('notify_proofreader',
                            kwargs={
                                'article_id': article.pk,
                                'proofing_task_id': proofing_task.pk,
                            }))

            # Set the modal to open if this page is not redirected.
            modal = 'add_proofer'

    template = 'proofing/proofing_article.html'
    context = {
        'article': article,
        'proofreaders': proofreaders,
        'form': form,
        'modal': modal,
        'user': user if request.POST else None,
        'galleys': galleys if request.POST else None
    }

    return render(request, template, context)