Exemple #1
0
def preview_proposal_form(request, form_id):
    form = get_object_or_404(core_models.ProposalForm, pk=form_id)

    preview_form = forms.GeneratedForm(
        form=core_models.ProposalForm.objects.get(pk=form_id))
    fields = core_models.ProposalFormElementsRelationship.objects.filter(
        form=form, )
    default_fields = forms.DefaultForm()

    template = 'manager/proposal/preview_form.html'
    context = {
        'form': form,
        'preview_form': preview_form,
        'fields': fields,
        'default_fields': default_fields,
    }
    return render(request, template, context)
Exemple #2
0
def proposal_revisions(request, proposal_id):
    proposal_form_id = core_models.Setting.objects.get(
        name='proposal_form').value
    proposal = get_object_or_404(submission_models.Proposal,
                                 pk=proposal_id,
                                 owner=request.user,
                                 status='revisions_required')
    notes = submission_models.ProposalNote.objects.filter(proposal=proposal)
    email_text = get_email_content(request=request,
                                   setting_name='proposal_revision_submit_ack',
                                   context={
                                       'sender':
                                       request.user,
                                       'receiver':
                                       proposal.owner,
                                       'proposal':
                                       proposal,
                                       'press_name':
                                       core_models.Setting.objects.get(
                                           group__name='general',
                                           name='press_name',
                                       ).value
                                   })

    overdue = False

    if proposal.revision_due_date.date() < datetime.today().date():
        overdue = True

    proposal_form = manager_forms.GeneratedForm(
        form=core_models.ProposalForm.objects.get(pk=proposal.form.id))
    default_fields = manager_forms.DefaultForm(
        initial={
            'title': proposal.title,
            'author': proposal.author,
            'subtitle': proposal.subtitle
        })
    data = {}
    intial_data = {}

    if proposal.data:
        data = json.loads(proposal.data)
        for k, v in data.items():
            intial_data[k] = v[0]

    proposal_form.initial = intial_data

    if request.POST:
        proposal_form = manager_forms.GeneratedForm(
            request.POST,
            request.FILES,
            form=core_models.ProposalForm.objects.get(pk=proposal.form.id),
        )
        default_fields = manager_forms.DefaultForm(request.POST)

        if proposal_form.is_valid() and default_fields.is_valid():
            messages.add_message(
                request, messages.SUCCESS,
                'Revisions for Proposal %s submitted' % proposal.id)

            proposal_data_processing(request, proposal, proposal_form_id)
            proposal = submission_models.Proposal.objects.get(
                form=core_models.ProposalForm.objects.get(pk=proposal.form.id),
                owner=request.user,
                pk=proposal_id,
            )
            history_proposal = submission_models.HistoryProposal.objects.create(
                proposal=proposal,
                title=proposal.title,
                author=proposal.author,
                subtitle=proposal.subtitle,
                date_submitted=proposal.date_submitted,
                form=proposal.form,
                data=proposal.data,
                date_review_started=proposal.date_review_started,
                review_form=proposal.review_form,
                requestor=proposal.requestor,
                revision_due_date=proposal.revision_due_date,
                date_accepted=proposal.date_accepted,
                book_type=proposal.book_type,
                status=proposal.status,
                owner=proposal.owner,
                user_edited=request.user,
                date_edited=timezone.now(),
                version=proposal.current_version)
            history_proposal.save()

            proposal.status = "revisions_submitted"
            defaults = default_fields.cleaned_data
            proposal.title = defaults.get("title")
            proposal.author = defaults.get("author")
            proposal.subtitle = defaults.get("subtitle")
            proposal_type = request.POST.get('proposal-type')
            proposal.current_version = proposal.current_version + 1

            if proposal_type:
                proposal.book_type = proposal_type

            proposal.save()
            notification = core_models.Task(
                assignee=proposal.requestor,
                creator=request.user,
                text="Revisions for Proposal '%s' with id %s submitted" %
                (proposal.title, proposal.id),
                workflow='proposal',
            )
            notification.save()

            update_email_text = smart_text(request.POST.get('email_text'))
            log.add_proposal_log_entry(
                proposal=proposal,
                user=request.user,
                kind='proposal',
                message=('Revisions for Proposal "%s %s" with id %s '
                         'have been submitted.' %
                         (proposal.title, proposal.subtitle, proposal.pk)),
                short_name='Proposal Revisions Submitted')
            core_logic.send_proposal_update(
                proposal,
                email_text=update_email_text,
                sender=request.user,
                receiver=proposal.requestor,
            )
            notification.emailed = True
            notification.save()
            messages.add_message(request, messages.SUCCESS,
                                 'Proposal %s submitted' % proposal.id)
            return redirect(reverse('user_dashboard'))

    template = "submission/start_proposal.html"
    context = {
        'proposal_form': proposal_form,
        'proposal': proposal,
        'email_text': email_text,
        'default_fields': default_fields,
        'data': data,
        'revise': True,
        'notes': notes,
        'overdue': overdue,
        'core_proposal':
        core_models.ProposalForm.objects.get(pk=proposal_form_id),
    }

    return render(request, template, context)
Exemple #3
0
def start_proposal(request):
    submit_proposals = core_models.Setting.objects.get(
        group__name='general', name='submit_proposals').value

    if not submit_proposals:
        return redirect(reverse('user_dashboard'))

    proposal_form_id = core_models.Setting.objects.get(
        name='proposal_form').value
    proposal_form = manager_forms.GeneratedForm(
        form=core_models.ProposalForm.objects.get(pk=proposal_form_id))
    default_fields = manager_forms.DefaultForm()
    errors = False

    if request.method == 'POST' and 'book_submit' in request.POST:
        proposal_form = manager_forms.GeneratedForm(
            request.POST,
            request.FILES,
            form=core_models.ProposalForm.objects.get(pk=proposal_form_id))
        default_fields = manager_forms.DefaultForm(request.POST)

        if proposal_form.is_valid() and default_fields.is_valid():
            defaults = {field.name: field.value() for field in default_fields}
            proposal = submission_models.Proposal(
                form=core_models.ProposalForm.objects.get(pk=proposal_form_id),
                data=None,
                owner=request.user,
                **defaults)
            proposal_type = request.POST.get('proposal-type')

            if proposal_type:
                proposal.book_type = proposal_type

            proposal.save()
            proposal_data_processing(request, proposal, proposal_form_id)
            editors = User.objects.filter(profile__roles__slug='press-editor')
            message = (
                "A new  Proposal '%s' with id %s has been submitted by %s ." %
                (proposal.title, proposal.pk, request.user.username))

            for _editor in editors:
                notification = core_models.Task(
                    assignee=_editor,
                    creator=request.user,
                    text=message,
                    workflow='proposal',
                )
                notification.save()

            messages.add_message(
                request,
                messages.SUCCESS,
                'Proposal %s submitted' % proposal.id,
            )
            email_text = core_models.Setting.objects.get(
                group__name='email',
                name='proposal_submission_ack',
            ).value
            core_logic.send_proposal_submission_ack(
                proposal,
                email_text=email_text,
                owner=request.user,
            )
            log.add_proposal_log_entry(
                proposal=proposal,
                user=request.user,
                kind='proposal',
                message='Proposal has been submitted by %s.' %
                request.user.profile.full_name(),
                short_name='Proposal Submitted')

            return redirect(reverse('user_dashboard', kwargs={}))

        else:
            errors = True
            proposal_form = manager_forms.GeneratedForm(
                request.POST,
                request.FILES,
                form=core_models.ProposalForm.objects.get(pk=proposal_form_id))
            default_fields = manager_forms.DefaultForm(request.POST)

    elif request.method == 'POST' and 'incomplete' in request.POST:
        proposal_form = manager_forms.GeneratedNotRequiredForm(
            request.POST,
            request.FILES,
            form=core_models.ProposalForm.objects.get(pk=proposal_form_id))
        default_fields = manager_forms.DefaultNotRequiredForm(request.POST)

        if proposal_form.is_valid() and default_fields.is_valid():
            defaults = {field.name: field.value() for field in default_fields}
            proposal = submission_models.IncompleteProposal(
                form=core_models.ProposalForm.objects.get(pk=proposal_form_id),
                data=None,
                owner=request.user,
                **defaults)
            proposal_type = request.POST.get('proposal-type')

            if proposal_type:
                proposal.book_type = proposal_type

            proposal.save()
            proposal_data_processing(request, proposal, proposal_form_id)
            messages.add_message(
                request,
                messages.SUCCESS,
                'Proposal %s saved' % proposal.id,
            )

            return redirect(reverse('user_dashboard', kwargs={}))

    template = "submission/start_proposal.html"
    context = {
        'proposal_form': proposal_form,
        'errors': errors,
        'default_fields': default_fields,
        'core_proposal':
        core_models.ProposalForm.objects.get(pk=proposal_form_id),
    }

    return render(request, template, context)
Exemple #4
0
def incomplete_proposal(request, proposal_id):
    proposal_form_id = core_models.Setting.objects.get(
        name='proposal_form').value
    proposal_form = manager_forms.GeneratedForm(
        form=core_models.ProposalForm.objects.get(pk=proposal_form_id))
    _incomplete_journal = get_object_or_404(
        submission_models.IncompleteProposal,
        pk=proposal_id,
    )
    proposal_form_validated = manager_forms.GeneratedForm(
        form=core_models.ProposalForm.objects.get(pk=proposal_form_id))

    default_fields_validated = manager_forms.DefaultForm(initial={
        'title':
        _incomplete_journal.title,
        'author':
        _incomplete_journal.author,
        'subtitle':
        _incomplete_journal.subtitle
    }, )
    default_fields = manager_forms.DefaultForm(
        initial={
            'title': _incomplete_journal.title,
            'author': _incomplete_journal.author,
            'subtitle': _incomplete_journal.subtitle
        })
    intial_data = {}

    if _incomplete_journal.data:
        data = json.loads(_incomplete_journal.data)

        for k, v in data.items():
            intial_data[k] = v[0]

    proposal_form.initial = intial_data
    proposal_form_validated.initial = intial_data

    if request.method == 'POST' and 'book_submit' in request.POST:
        proposal_form = manager_forms.GeneratedForm(
            request.POST,
            request.FILES,
            form=core_models.ProposalForm.objects.get(pk=proposal_form_id, ))
        default_fields = manager_forms.DefaultForm(request.POST)

        if proposal_form.is_valid() and default_fields.is_valid():
            defaults = {field.name: field.value() for field in default_fields}
            proposal = submission_models.Proposal(
                form=core_models.ProposalForm.objects.get(pk=proposal_form_id),
                data=None,
                owner=request.user,
                **defaults)
            proposal_type = request.POST.get('proposal-type')

            if proposal_type:
                proposal.book_type = proposal_type

            proposal.save()
            proposal_data_processing(request, proposal, proposal_form_id)
            editors = User.objects.filter(profile__roles__slug='press-editor')
            message = (
                "A new  Proposal '%s' with id %s has been submitted by %s ." %
                (proposal.title, proposal.pk, request.user.username))

            for _editor in editors:
                notification = core_models.Task(
                    assignee=_editor,
                    creator=request.user,
                    text=message,
                    workflow='proposal',
                )
                notification.save()

            messages.add_message(
                request,
                messages.SUCCESS,
                'Proposal %s submitted' % proposal.id,
            )
            email_text = core_models.Setting.objects.get(
                group__name='email', name='proposal_submission_ack').value
            core_logic.send_proposal_submission_ack(
                proposal,
                email_text=email_text,
                owner=request.user,
            )

            log.add_proposal_log_entry(
                proposal=proposal,
                user=request.user,
                kind='proposal',
                message='Proposal has been submitted by %s.' %
                request.user.profile.full_name(),
                short_name='Proposal Submitted',
            )
            _incomplete_journal.delete()
            return redirect(reverse('user_dashboard', kwargs={}))

        else:
            proposal_form = manager_forms.GeneratedForm(
                request.POST,
                request.FILES,
                form=core_models.ProposalForm.objects.get(pk=proposal_form_id),
            )
            default_fields = manager_forms.DefaultForm(request.POST)

    elif request.method == 'POST' and 'incomplete' in request.POST:
        proposal_form = manager_forms.GeneratedNotRequiredForm(
            request.POST,
            request.FILES,
            form=core_models.ProposalForm.objects.get(pk=proposal_form_id))
        default_fields = manager_forms.DefaultNotRequiredForm(request.POST)

        if proposal_form.is_valid() and default_fields.is_valid():
            defaults = {field.name: field.value() for field in default_fields}
            _incomplete_journal.form = core_models.ProposalForm.objects.get(
                pk=proposal_form_id)
            _incomplete_journal.owner = request.user
            _incomplete_journal.title = defaults['title']
            _incomplete_journal.subtitle = defaults['subtitle']
            _incomplete_journal.author = defaults['author']
            proposal_type = request.POST.get('proposal-type')
            _incomplete_journal.book_type = proposal_type
            _incomplete_journal.save()
            proposal_data_processing(
                request,
                _incomplete_journal,
                proposal_form_id,
            )
            messages.add_message(request, messages.SUCCESS,
                                 'Proposal %s saved' % _incomplete_journal.id)
            return redirect(reverse('user_dashboard', kwargs={}))

    template = "submission/start_proposal.html"
    context = {
        'proposal_form': proposal_form,
        'incomplete_proposal': _incomplete_journal,
        'incomplete': True,
        'default_fields': default_fields,
        'proposal_form_validated': proposal_form_validated,
        'default_fields_validated': default_fields_validated,
        'core_proposal':
        core_models.ProposalForm.objects.get(pk=proposal_form_id),
    }

    return render(request, template, context)
Exemple #5
0
def proposal_history(request, proposal_id):
    proposal = submission_models.Proposal.objects.get(pk=proposal_id)
    history = submission_models.HistoryProposal.objects.filter(
        proposal=proposal).order_by('pk')
    proposal_form_id = core_models.Setting.objects.get(
        name='proposal_form').value

    if proposal.owner == request.user:
        viewable = True

    proposal_form = manager_forms.GeneratedForm(
        form=core_models.ProposalForm.objects.get(pk=proposal.form.id))
    default_fields = manager_forms.DefaultForm(
        initial={
            'title': proposal.title,
            'author': proposal.author,
            'subtitle': proposal.subtitle
        })
    intial_data = {}
    data = {}

    if proposal.data:
        data = json.loads(proposal.data)
        for k, v in data.items():
            intial_data[k] = v[0]

    proposal_form.initial = intial_data
    roles = request.user.profile.roles.all()
    user_roles = [role.slug for role in request.user.profile.roles.all()]

    if string_any('Editor' in role.name for role in roles):
        viewable = True
        _editor = True
        if (proposal.requestor and not proposal.requestor == request.user
                and not 'press-editor' in user_roles):
            _editor = False
    else:
        _editor = False

    if proposal.status == 'accepted' or proposal.status == 'declined':
        not_readonly = False
    else:
        not_readonly = True

    template = "submission/history_proposal.html"
    context = {
        'proposal_form': proposal_form,
        'default_fields': default_fields,
        'proposal': proposal,
        'not_readonly': not_readonly,
        'data': data,
        'history': history,
        'revise': True,
        'open': True,
        'editor': _editor,
        'viewable': viewable,
        'core_proposal':
        core_models.ProposalForm.objects.get(pk=proposal_form_id),
    }

    return render(request, template, context)
Exemple #6
0
def proposal_view(request, proposal_id):
    proposal = submission_models.Proposal.objects.get(pk=proposal_id)
    proposal_form_id = core_models.Setting.objects.get(
        name='proposal_form', ).value
    notes = submission_models.ProposalNote.objects.filter(proposal=proposal)

    if proposal.owner == request.user:
        viewable = True

    proposal_form = manager_forms.GeneratedForm(
        form=core_models.ProposalForm.objects.get(pk=proposal.form.id))
    default_fields = manager_forms.DefaultForm(
        initial={
            'title': proposal.title,
            'author': proposal.author,
            'subtitle': proposal.subtitle
        })

    intial_data = {}
    data = {}

    if proposal.data:
        data = json.loads(proposal.data)
        for k, v in data.items():
            intial_data[k] = v[0]

    proposal_form.initial = intial_data
    roles = request.user.profile.roles.all()
    user_roles = [role.slug for role in request.user.profile.roles.all()]

    if string_any('Editor' in role.name for role in roles):
        viewable = True
        _editor = True
        if (proposal.requestor and not proposal.requestor == request.user
                and not 'press-editor' in user_roles):
            _editor = False
    else:
        _editor = False

    if request.POST and _editor:
        proposal_form = manager_forms.GeneratedForm(
            request.POST,
            request.FILES,
            form=core_models.ProposalForm.objects.get(pk=proposal.form.id))
        default_fields = manager_forms.DefaultForm(request.POST)

        if proposal_form.is_valid() and default_fields.is_valid():
            proposal_data_processing(request, proposal, proposal_form_id)
            proposal = submission_models.Proposal.objects.get(
                form=core_models.ProposalForm.objects.get(pk=proposal.form.id),
                pk=proposal_id,
            )
            history_proposal = submission_models.HistoryProposal.objects.create(
                proposal=proposal,
                title=proposal.title,
                author=proposal.author,
                subtitle=proposal.subtitle,
                date_submitted=proposal.date_submitted,
                form=proposal.form,
                data=proposal.data,
                date_review_started=proposal.date_review_started,
                review_form=proposal.review_form,
                requestor=proposal.requestor,
                revision_due_date=proposal.revision_due_date,
                date_accepted=proposal.date_accepted,
                book_type=proposal.book_type,
                status=proposal.status,
                owner=proposal.owner,
                user_edited=request.user,
                date_edited=timezone.now(),
                version=proposal.current_version)
            history_proposal.save()
            proposal.status = "submission"
            defaults = default_fields.cleaned_data
            proposal.title = defaults.get("title")
            proposal.author = defaults.get("author")
            proposal.subtitle = defaults.get("subtitle")
            proposal_type = request.POST.get('proposal-type')
            proposal.current_version = proposal.current_version + 1

            if proposal_type:
                proposal.book_type = proposal_type

            proposal.requestor = request.user
            proposal.save()

            update_email_text = core_models.Setting.objects.get(
                group__name='email', name='proposal_update_ack').value
            log.add_proposal_log_entry(
                proposal=proposal,
                user=request.user,
                kind='proposal',
                message='Proposal "%s %s" has been updated.' %
                (proposal.title, proposal.subtitle),
                short_name='Proposal Updated',
            )
            core_logic.send_proposal_update(
                proposal,
                email_text=update_email_text,
                sender=request.user,
                receiver=proposal.owner,
            )
            messages.add_message(
                request,
                messages.SUCCESS,
                'Proposal %s updated' % proposal.id,
            )
            return redirect(reverse('user_dashboard'))

    if proposal.status == 'accepted' or proposal.status == 'declined':
        not_readonly = False
    else:
        not_readonly = True

    template = "submission/view_proposal.html"
    context = {
        'proposal_form': proposal_form,
        'default_fields': default_fields,
        'proposal': proposal,
        'not_readonly': not_readonly,
        'data': data,
        'revise': True,
        'editor': _editor,
        'viewable': viewable,
        'notes': notes,
        'core_proposal':
        core_models.ProposalForm.objects.get(pk=proposal_form_id),
    }

    return render(request, template, context)