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