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)
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)
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)