Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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'
Пример #5
0
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)
Пример #6
0
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)
Пример #7
0
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)
Пример #8
0
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)