def do_typeset_task(request, typeset_id): typeset_task = get_object_or_404(models.TypesetTask, pk=typeset_id, accepted__isnull=False, completed__isnull=True) article = typeset_task.assignment.article galleys = core_models.Galley.objects.filter(article=article) form = forms.TypesetterNote(instance=typeset_task) if request.POST: if 'complete' in request.POST: form = forms.TypesetterNote(request.POST, instance=typeset_task) if form.is_valid(): task = form.save() task.completed = timezone.now() task.save() kwargs = {'typeset_task': typeset_task, 'request': request} event_logic.Events.raise_event(event_logic.Events.ON_TYPESET_COMPLETE, **kwargs) messages.add_message(request, messages.INFO, 'Typeset assignment complete.') return redirect(reverse('typesetter_requests')) new_galley = None if 'xml' in request.POST: for uploaded_file in request.FILES.getlist('xml-file'): new_galley = logic.save_galley(article, request, uploaded_file, True, "XML", False) if 'pdf' in request.POST: for uploaded_file in request.FILES.getlist('pdf-file'): new_galley = logic.save_galley(article, request, uploaded_file, True, "PDF", False) if 'other' in request.POST: for uploaded_file in request.FILES.getlist('other-file'): new_galley = logic.save_galley(article, request, uploaded_file, True, "Other", True) if new_galley: typeset_task.galleys_loaded.add(new_galley.file) return redirect(reverse('do_typeset_task', kwargs={'typeset_id': typeset_task.pk})) manuscripts = article.manuscript_files.filter(is_galley=False) data_files = article.data_figure_files.filter(is_galley=False) copyedit_files = logic.get_copyedit_files(article) template = 'production/typeset_task.html' context = { 'typeset_task': typeset_task, 'article': article, 'manuscripts': manuscripts, 'data_files': data_files, 'production_assignment': typeset_task.assignment, 'copyedit_files': copyedit_files, 'galleys': galleys, 'form': form, } return render(request, template, context)
def assign_typesetter(request, article_id, production_assignment_id): """ Lets a production manager assign a typesetter a task :param request: HttpRequest object :param article_id: Article object PK :param production_assignment_id: ProductionAssignment object PK :return: HttpRedirect if POST otherwise HttpResponse """ production_assignment = get_object_or_404( models.ProductionAssignment, pk=production_assignment_id, article__journal=request.journal, closed__isnull=True, ) article = get_object_or_404( submission_models.Article, pk=article_id, journal=request.journal, ) copyedit_files = logic.get_copyedit_files(article) typesetters = logic.get_typesetters(article) typesetter_form = forms.AssignTypesetter( article=article, files=copyedit_files, typesetters=typesetters, assignment=production_assignment, ) if request.POST.get('typesetter_id'): task = logic.handle_self_typesetter_assignment(production_assignment, request) return redirect( reverse('do_typeset_task', kwargs={'typeset_id': task.id})) if request.POST: typesetter_form = forms.AssignTypesetter( request.POST, request.FILES, article=article, files=copyedit_files, typesetters=typesetters, assignment=production_assignment, ) if typesetter_form.is_valid(): task = typesetter_form.save() return redirect( reverse('notify_typesetter', kwargs={'typeset_id': task.pk})) template = 'production/assign_typesetter.html' context = { 'production_assignment': production_assignment, 'article': article, 'copyedit_files': copyedit_files, 'typesetters': typesetters, 'form': typesetter_form, } return render(request, template, context)
def assign_typesetter(request, article_id, production_assignment_id): production_assignment = get_object_or_404(models.ProductionAssignment, pk=production_assignment_id, closed__isnull=True) article = get_object_or_404(submission_models.Article, pk=article_id) copyedit_files = logic.get_copyedit_files(article) typesetters = logic.get_typesetters(article) errors, _dict = None, None if request.POST.get('typesetter_id'): task = logic.handle_self_typesetter_assignment(production_assignment, request) return redirect(reverse('do_typeset_task', kwargs={'typeset_id': task.id})) if request.POST: task, errors, _dict = logic.handle_assigning_typesetter(production_assignment, request) if not errors and task: return redirect(reverse('notify_typesetter', kwargs={'typeset_id': task.pk})) template = 'production/assign_typesetter.html' context = { 'production_assignment': production_assignment, 'article': article, 'copyedit_files': copyedit_files, 'typesetters': typesetters, 'errors': errors, 'dict': _dict, } return render(request, template, context)
def file_type(article, file): from production.logic import get_copyedit_files copyedited_files = get_copyedit_files(article) galley_files = [galley.file for galley in article.galley_set.all()] galley_sub_files = list() review_files = [ review.review_file for review in article.reviewassignment_set.all() ] for galley in article.galley_set.all(): for image in galley.images.all(): galley_sub_files.append(image) if galley.css_file: galley_sub_files.append(galley.css_file) if file in article.manuscript_files.all() and file not in galley_files: return 'Manuscript' if file in article.data_figure_files.all(): return 'Data/Figure' if file in galley_files: return 'Galley' if file in copyedited_files: return 'Copyedit' if file in galley_sub_files: return 'Galley Sub File' if file in review_files: return 'Review Comment' return 'Other'
def production_article(request, article_id): """ Displays typesetting tasks, Galleys and allows new Galleys to be uploaded. :param request: HttpRequest object :param article_id: Article object PK :return: HttpResponse object """ article = get_object_or_404(submission_models.Article, pk=article_id) production_assignment = models.ProductionAssignment.objects.get(article=article) galleys = logic.get_all_galleys(production_assignment.article) if request.POST: if 'xml' in request.POST: for uploaded_file in request.FILES.getlist('xml-file'): logic.save_galley(article, request, uploaded_file, True, "XML", False) if 'pdf' in request.POST: for uploaded_file in request.FILES.getlist('pdf-file'): logic.save_galley(article, request, uploaded_file, True, "PDF", False) if 'other' in request.POST: for uploaded_file in request.FILES.getlist('other-file'): logic.save_galley(article, request, uploaded_file, True, "Other", True) if 'prod' in request.POST: for uploaded_file in request.FILES.getlist('prod-file'): logic.save_prod_file(article, request, uploaded_file, 'Production Ready File') if 'supp' in request.POST: label = request.POST.get('label', 'Supplementary File') for uploaded_file in request.FILES.getlist('supp-file'): logic.save_supp_file(article, request, uploaded_file, label) return redirect(reverse('production_article', kwargs={'article_id': article.pk})) manuscripts = article.manuscript_files.filter(is_galley=False) data_files = article.data_figure_files.filter(is_galley=False) copyedit_files = logic.get_copyedit_files(article) template = 'production/assigned_article.html' context = { 'article': article, 'manuscripts': manuscripts, 'data_files': data_files, 'production_assignment': production_assignment, 'copyedit_files': copyedit_files, 'typeset_tasks': production_assignment.typesettask_set.all().order_by('-id'), 'galleys': galleys, 'complete_message': logic.get_complete_template(request, article, production_assignment) } return render(request, template, context)
def production_article(request, article_id): article = get_object_or_404(submission_models.Article, pk=article_id) production_assignment = models.ProductionAssignment.objects.get( article=article) galleys = logic.get_all_galleys(production_assignment.article) if request.POST: if 'xml' in request.POST: for uploaded_file in request.FILES.getlist('xml-file'): logic.save_galley(article, request, uploaded_file, True, "XML", False) if 'pdf' in request.POST: for uploaded_file in request.FILES.getlist('pdf-file'): logic.save_galley(article, request, uploaded_file, True, "PDF", False) if 'other' in request.POST: for uploaded_file in request.FILES.getlist('other-file'): logic.save_galley(article, request, uploaded_file, True, "Other", True) return redirect( reverse('production_article', kwargs={'article_id': article.pk})) manuscripts = article.manuscript_files.filter(is_galley=False) data_files = article.data_figure_files.filter(is_galley=False) copyedit_files = logic.get_copyedit_files(article) template = 'production/assigned_article.html' context = { 'article': article, 'manuscripts': manuscripts, 'data_files': data_files, 'production_assignment': production_assignment, 'copyedit_files': copyedit_files, 'typeset_tasks': production_assignment.typesettask_set.all().order_by('-id'), 'galleys': galleys, 'complete_message': logic.get_complete_template(request, article, production_assignment) } return render(request, template, context)
def do_typeset_task(request, typeset_id): """ Displays a form for completing typeset tasks :param request: HttpRequest object :param typeset_id: TypesetTask object PK :return: HttpResponse or HttpRedirect """ typeset_task = get_object_or_404( models.TypesetTask, pk=typeset_id, accepted__isnull=False, completed__isnull=True, assignment__article__journal=request.journal, ) article = typeset_task.assignment.article galleys = core_models.Galley.objects.filter(article=article) form = forms.TypesetterNote(instance=typeset_task) if request.POST: if 'complete' in request.POST: form = forms.TypesetterNote(request.POST, instance=typeset_task) if form.is_valid(): task = form.save() task.completed = timezone.now() task.save() kwargs = { 'typeset_task': typeset_task, 'request': request, } event_logic.Events.raise_event( event_logic.Events.ON_TYPESET_COMPLETE, **kwargs, ) messages.add_message( request, messages.INFO, 'Typeset assignment complete.', ) return redirect(reverse('typesetter_requests')) new_galley = None if 'file' in request.FILES: label = request.POST.get('label') for uploaded_file in request.FILES.getlist('file'): try: new_galley = logic.save_galley( article, request, uploaded_file, True, label=label, ) except UnicodeDecodeError: messages.add_message(request, messages.ERROR, "Uploaded file is not UTF-8 encoded") if 'source' in request.POST: for uploaded_file in request.FILES.getlist('source-file'): logic.save_source_file( article, request, uploaded_file, ) if new_galley: typeset_task.galleys_loaded.add(new_galley.file) if not request.FILES: messages.add_message(request, messages.WARNING, 'No files uploaded.') return redirect( reverse('do_typeset_task', kwargs={'typeset_id': typeset_task.pk})) manuscripts = article.manuscript_files.filter(is_galley=False) data_files = article.data_figure_files.filter(is_galley=False) copyedit_files = logic.get_copyedit_files(article) template = 'production/typeset_task.html' context = { 'typeset_task': typeset_task, 'article': article, 'manuscripts': manuscripts, 'data_files': data_files, 'production_assignment': typeset_task.assignment, 'copyedit_files': copyedit_files, 'galleys': galleys, 'form': form, } return render(request, template, context)
def production_article(request, article_id): """ Displays typesetting tasks, Galleys and allows new Galleys to be uploaded. :param request: HttpRequest object :param article_id: Article object PK :return: HttpResponse object """ article = get_object_or_404( submission_models.Article, pk=article_id, journal=request.journal, ) try: production_assignment = models.ProductionAssignment.objects.get( article=article) except models.ProductionAssignment.DoesNotExist: return redirect( reverse( 'production_non_workflow_assign', kwargs={'article_id': article.pk}, )) galleys = logic.get_all_galleys(production_assignment.article) if request.POST: try: if 'file' in request.FILES: label = request.POST.get('label', None) for uploaded_file in request.FILES.getlist('file'): logic.save_galley( article, request, uploaded_file, True, label=label, ) except TypeError as exc: messages.add_message(request, messages.ERROR, str(exc)) except UnicodeDecodeError: messages.add_message(request, messages.ERROR, "Uploaded file is not UTF-8 encoded") if 'prod' in request.POST: for uploaded_file in request.FILES.getlist('prod-file'): logic.save_prod_file( article, request, uploaded_file, 'Production Ready File', ) if 'supp' in request.POST: label = request.POST.get('label', 'Supplementary File') for uploaded_file in request.FILES.getlist('supp-file'): logic.save_supp_file(article, request, uploaded_file, label) if 'source' in request.POST: for uploaded_file in request.FILES.getlist('source-file'): logic.save_source_file( article, request, uploaded_file, ) if not request.FILES: messages.add_message(request, messages.WARNING, 'No files uploaded.') return redirect( reverse('production_article', kwargs={'article_id': article.pk})) manuscripts = article.manuscript_files.filter(is_galley=False) data_files = article.data_figure_files.filter(is_galley=False) copyedit_files = logic.get_copyedit_files(article) template = 'production/assigned_article.html' context = { 'article': article, 'manuscripts': manuscripts, 'data_files': data_files, 'production_assignment': production_assignment, 'copyedit_files': copyedit_files, 'typeset_tasks': production_assignment.typesettask_set.all().order_by('-id'), 'galleys': galleys, 'complete_message': logic.get_complete_template(request, article, production_assignment) } return render(request, template, context)