def send_acknowldgement_email(book, press_editors): from_email = core_models.Setting.objects.get(group__name='email', name='from_address').value author_text = core_models.Setting.objects.get(group__name='email', name='author_submission_ack').value editor_text = core_models.Setting.objects.get(group__name='email', name='editor_submission_ack').value press_name = core_models.Setting.objects.get(group__name='general', name='press_name').value try: principal_contact_name = models.Setting.objects.get(group__name='general', name='primary_contact_name').value except: principal_contact_name = None context = { 'base_url': core_models.Setting.objects.get(group__name='general', name='base_url').value, 'submission': book, 'press_name':press_name, 'principal_contact_name': principal_contact_name, } email.send_email(get_setting('submission_ack_subject','email_subject','Submission Acknowledgement'), context, from_email, book.owner.email, author_text, book=book, kind = 'submission') if len(press_editors) > 1: editor = press_editors[0] cc_eds = [editor.email for editor in press_editors if not editor == press_editors[0]] else: editor = press_editors[0] cc_eds = None email.send_email(get_setting('new_submission_subject','email_subject','New Submission'), context, from_email, editor.email, editor_text, book=book, cc=cc_eds, kind = 'submission') for editor in press_editors: notification = core_models.Task(book=book, assignee=editor, creator=press_editors[0], text='A new submission, {0}, has been made.'.format(book.title), workflow='review') notification.save()
def send_invite_typesetter(book, typeset, email_text, sender, attachment=None): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) context = { 'base_url': models.Setting.objects.get( group__name='general', name='base_url', ).value, 'submission': typeset.book, 'typeset': typeset, 'sender': sender, } email.send_email( get_setting('typesetting_subject', 'email_subject', 'Typesetting'), context, from_email.value, typeset.typesetter.email, email_text, book=book, attachment=attachment, kind='typeset', )
def send_author_sign_off(submission, email_text, sender): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) context = { 'base_url': models.Setting.objects.get( group__name='general', name='base_url', ).value, 'submission': submission, 'sender': sender, } email.send_email( get_setting('book_contract_uploaded_subject', 'email_subject', 'Book Contract Uploaded'), context, from_email.value, submission.owner.email, email_text, book=submission, kind='submission', )
def send_proposal_revisions(proposal, email_text, sender): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) context = { 'base_url': models.Setting.objects.get( group__name='general', name='base_url', ).value, 'proposal': proposal, 'sender': sender, } email.send_email( get_setting('proposal_revision_required_subject', 'email_subject', '[abp] Proposal Revisions Required'), context, from_email.value, proposal.owner.email, email_text, kind='proposal', )
def send_proposal_accept( proposal, email_text, submission, sender, attachment=None, ): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'proposal': proposal, 'submission': submission, 'sender': sender, } email.send_email( get_setting('proposal_accepted_subject', 'email_subject', '[abp] Proposal Accepted'), context, from_email.value, proposal.owner.email, email_text, book=submission, attachment=attachment, )
def reminder_overdue_revisions(task): days = int( models.Setting.objects.get(group__name='cron', name='revisions_reminder').value) email_text = models.Setting.objects.get( group__name='email', name='revisions_reminder_email').value dt = timezone.now() target_date = dt - timedelta(days=days) books = models.Book.objects.filter( Q(stage__current_stage='review') | Q(stage__current_stage='submission')) for book in books: revisions = revision_models.Revision.objects.filter( book=book, completed__isnull=True, overdue_reminder=False, due=target_date.date, ) for review in revisions: review.user = review.book.owner send_reminder_email( book, get_setting('revision_request_reminder_subject', 'email_subject', 'Revision Request Reminder'), review, email_text, ) review.overdue_reminder = True review.save()
def send_author_invite( submission, copyedit, email_text, sender, attachment=None, ): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'submission': submission, 'copyedit': copyedit, 'sender': sender, } subject = get_setting('copyediting_completed_subject', 'email_subject', 'Copyediting Completed') email.send_email( subject, context, from_email.value, submission.owner.email, email_text, book=submission, attachment=attachment, kind='copyedit', )
def send_editorial_review_update( book, review_assignment, email_text, sender, attachment=None, ): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) context = {'book': book, 'review': review_assignment, 'sender': sender} for editor in review_assignment.editorial_board.all(): email.send_email( get_setting('editorial_review_due_date_subject', 'email_subject', 'Editorial Review Assignment {}: Due Date Updated') % review_assignment.id, context, from_email.value, editor.email, email_text, book=book, attachment=attachment, kind='review', )
def send_new_user_ack(submission, email_text, new_user, code): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) context = { 'base_url': models.Setting.objects.get( group__name='general', name='base_url', ).value, 'user': new_user, 'code': code, 'submission': submission, } email.send_email( get_setting('new_user_subject', 'email_subject', 'New User : Profile Details'), context, from_email.value, new_user.email, email_text, book=submission, kind='general', )
def remind_overdue_reviews(task): days = int( models.Setting.objects.get(group__name='cron', name='remind_overdue_reviews').value) email_text = models.Setting.objects.get(group__name='email', name='overdue_reminder').value dt = timezone.now() target_date = dt - timedelta(days=days) books = models.Book.objects.filter(stage__current_stage='review') for book in books: reviews = models.ReviewAssignment.objects.filter( book=book, review_round__round_number=book.get_latest_review_round(), overdue_reminder=False, completed__isnull=True, declined__isnull=True, due=target_date.date) for review in reviews: send_reminder_email( book, get_setting('review_request_reminder_subject', 'email_subject', 'Review Request Reminder'), review, email_text, ) # Lets make sure that we don't accidentally send this twice. review.overdue_reminder = True review.save()
def send_invite_indexer(book, index, email_text, sender, attachment): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'submission': book, 'index': index, 'sender': sender, } email.send_email( get_setting('indexing_request_subject', 'email_subject', 'Indexing Request'), context, from_email.value, index.indexer.email, email_text, book=book, attachment=attachment, kind='index', )
def reminder_notifications_not_emailed(task): from_email = models.Setting.objects.get(group__name='email', name='from_address') press_name = models.Setting.objects.get(group__name='general', name='press_name').value days = int(models.Setting.objects.get(group__name='cron', name='notification_reminder').value) email_text = models.Setting.objects.get(group__name='email', name='notification_reminder_email').value dt = timezone.now() target_date = dt - timedelta(days=days) editors = User.objects.filter(Q(profile__roles__slug='press-editor') | Q(profile__roles__slug='book-editor') | Q(profile__roles__slug='production-editor')) for editor in editors: tasks = models.Task.objects.filter(assignee = editor, emailed = False, completed__isnull = True) task_list = "" for notification in tasks: task_list = task_list +'- '+ notification.text + "\n" notification.emailed = True notification.save() if task_list: context = { 'user': editor, 'notifications': task_list, 'notification_count': tasks.count(), 'press_name': press_name, 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, } email.send_email(get_setting('weekly_notification_reminder_subject','email_subject','Weekly Notification Reminder'), context, from_email.value, editor.email, email_text)
def send_proposal_decline(proposal, email_text, sender): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'proposal': proposal, 'sender': sender, } email.send_email(get_setting('proposal_declined_subject','email_subject','[abp] Proposal Declined'), context, from_email.value, proposal.owner.email, email_text, kind = 'proposal')
def send_review_request( book, review_assignment, email_text, sender, attachment=None, access_key=None, ): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) base_url = models.Setting.objects.get( group__name='general', name='base_url', ) press_name = models.Setting.objects.get( group__name='general', name='press_name', ).value if access_key: decision_url = ( 'http://%s/review/%s/%s/assignment/%s/access_key/%s/decision/' % ( base_url.value, review_assignment.review_type, book.id, review_assignment.id, access_key, )) else: decision_url = ('http://%s/review/%s/%s/assignment/%s/decision/' % (base_url.value, review_assignment.review_type, book.id, review_assignment.id)) context = { 'book': book, 'review': review_assignment, 'decision_url': decision_url, 'sender': sender, 'base_url': base_url.value, 'press_name': press_name, } email.send_email( subject=get_setting('review_request_subject', 'email_subject', 'Review Request'), context=context, from_email=from_email.value, to=review_assignment.user.email, html_template=email_text, book=book, attachment=attachment, kind='review', access_key=access_key, )
def send_proposal_revisions(proposal, email_text, sender): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'proposal': proposal, 'sender': sender, } email.send_email(get_setting('proposal_revision_required_subject','email_subject','[abp] Proposal Revisions Required'), context, from_email.value, proposal.owner.email, email_text, kind = 'proposal')
def send_author_sign_off(submission, email_text, sender): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'submission': submission, 'sender': sender, } email.send_email(get_setting('book_contract_uploaded_subject','email_subject','Book Contract Uploaded'), context, from_email.value, submission.owner.email, email_text, book=submission, kind = 'submission')
def send_editorial_review_request(book, review_assignment, email_text, sender, attachment=None): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) base_url = models.Setting.objects.get( group__name='general', name='base_url', ) press_name = models.Setting.objects.get( group__name='general', name='press_name', ).value if review_assignment.publishing_committee_access_key: decision_url = 'http://%s/editorial/submission/%s/access_key/%s/' % ( base_url.value, book.id, review_assignment.publishing_committee_access_key, ) access_key = review_assignment.publishing_committee_access_key else: decision_url = 'http://%s/editorial/submission/%s/access_key/%s/' % ( base_url.value, book.id, review_assignment.editorial_board_access_key, ) access_key = review_assignment.editorial_board_access_key context = { 'book': book, 'review': review_assignment, 'decision_url': decision_url, 'sender': sender, 'base_url': base_url.value, 'press_name': press_name, } for editor in review_assignment.editorial_board.all(): email.send_email( get_setting('editorial_review_request', 'email_subject', 'Editorial Review Request'), context, from_email.value, editor.email, email_text, book=book, attachment=attachment, kind='review', access_key=access_key, )
def send_invite_indexer(book, index, email_text, sender, attachment): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'submission': book, 'index': index, 'sender': sender, } email.send_email(get_setting('indexing_request_subject','email_subject','Indexing Request'), context, from_email.value, index.indexer.email, email_text, book=book, attachment=attachment, kind = 'index')
def send_new_user_ack(submission, email_text, new_user, code): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'user': new_user, 'code': code, 'submission':submission, } email.send_email(get_setting('new_user_subject','email_subject','New User : Profile Details'), context, from_email.value, new_user.email, email_text, book=submission, kind = 'general')
def send_copyedit_assignment(submission, copyedit, email_text, sender, attachment=None): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'submission': submission, 'copyedit': copyedit, 'sender': sender, } email.send_email(get_setting('copyedit_assignment_subject','email_subject','Copyedit Assignment'), context, from_email.value, copyedit.copyeditor.email, email_text, book=submission, attachment=attachment, kind = 'copyedit')
def send_author_invite(submission, copyedit, email_text, sender, attachment=None): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'submission': submission, 'copyedit': copyedit, 'sender': sender, } email.send_email(get_setting('copyediting_completed_subject','email_subject','Copyediting Completed'), context, from_email.value, submission.owner.email, email_text, book=submission, attachment=attachment, kind = 'copyedit')
def send_proposal_accept(proposal, email_text, submission, sender, attachment=None): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'proposal': proposal, 'submission': submission, 'sender': sender, } email.send_email(get_setting('proposal_accepted_subject','email_subject','[abp] Proposal Accepted'), context, from_email.value, proposal.owner.email, email_text, book=submission, attachment=attachment)
def send_invite_typesetter(book, typeset, email_text, sender, attachment=None): from_email = models.Setting.objects.get(group__name='email', name='from_address') context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'submission': typeset.book, 'typeset': typeset, 'sender': sender, } email.send_email(get_setting('typesetting_subject','email_subject','Typesetting'), context, from_email.value, typeset.typesetter.email, email_text, book=book, attachment=attachment, kind = 'typeset')
def send_review_update(book, review_assignment, email_text, sender, attachment=None): from_email = models.Setting.objects.get(group__name='email', name='from_address') base_url = models.Setting.objects.get(group__name='general', name='base_url') print email_text context = { 'book': book, 'review': review_assignment, 'sender': sender, } email.send_email(get_setting('review_due_date_subject','email_subject','Review Assignment %s: Due Date Updated') % review_assignment.id, context, from_email.value, review_assignment.user.email, email_text, book=book, attachment=attachment, kind = 'review')
def send_book_editors(book, added_editors,removed_editors,email_text): from_email = models.Setting.objects.get(group__name='email', name='from_address') base_url = models.Setting.objects.get(group__name='general', name='base_url').value context = { 'base_url':base_url, 'submission': book, 'added_editors': added_editors, 'removed_editors':removed_editors, 'submission_page': "http://%s/editor/submission/%s/" % (base_url, book.id) } if added_editors or removed_editors: email.send_email(get_setting('book_editors_subject','email_subject','Book Editors have been updated'), context, from_email.value, book.owner.email, email_text, book=book, kind = 'general')
def send_requests_revisions(book, revision, email_text): from_email = models.Setting.objects.get(group__name='email', name='from_address') base_url = models.Setting.objects.get(group__name='general', name='base_url').value press_name = models.Setting.objects.get(group__name='general', name='press_name').value context = { 'book': book, 'revision': revision, 'press_name': press_name, 'revision_url': "http://%s/author/submission/%s/revisions/%s" % (base_url, book.id, revision.id) } email.send_email(get_setting('revisions_requested_subject','email_subject','Revisions Requested'), context, from_email.value, book.owner.email, email_text, book=book, kind = 'revisions')
def reminder_overdue_revisions(task): days = int(models.Setting.objects.get(group__name='cron', name='revisions_reminder').value) email_text = models.Setting.objects.get(group__name='email', name='revisions_reminder_email').value dt = timezone.now() target_date = dt - timedelta(days=days) books = models.Book.objects.filter(Q(stage__current_stage='review') | Q(stage__current_stage='submission')) for book in books: revisions = revision_models.Revision.objects.filter(book=book, completed__isnull=True, overdue_reminder=False, due=target_date.date) for review in revisions: review.user = review.book.owner send_reminder_email(book, get_setting('revision_request_reminder_subject','email_subject','Revision Request Reminder'), review, email_text) review.overdue_reminder = True review.save()
def remind_overdue_reviews(task): days = int(models.Setting.objects.get(group__name='cron', name='remind_overdue_reviews').value) email_text = models.Setting.objects.get(group__name='email', name='overdue_reminder').value dt = timezone.now() target_date = dt - timedelta(days=days) books = models.Book.objects.filter(stage__current_stage='review') for book in books: reviews = models.ReviewAssignment.objects.filter(book=book, review_round__round_number=book.get_latest_review_round(), overdue_reminder=False, completed__isnull=True, declined__isnull=True, due=target_date.date) for review in reviews: send_reminder_email(book, get_setting('review_request_reminder_subject','email_subject','Review Request Reminder'), review, email_text) # Lets make sure that we don't accidentally send this twice. review.overdue_reminder = True review.save()
def send_requests_revisions( book, sender, revision, email_text, attachments=None, ): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) base_url = models.Setting.objects.get( group__name='general', name='base_url', ).value press_name = models.Setting.objects.get( group__name='general', name='press_name', ).value context = { 'book': book, 'sender': sender, 'revision': revision, 'press_name': press_name, 'revision_url': "http://%s/author/submission/%s/revisions/%s" % ( base_url, book.id, revision.id, ) } email.send_email_multiple( get_setting('revisions_requested_subject', 'email_subject', 'Revisions Requested'), context, from_email.value, book.owner.email, email_text, book=book, attachments=attachments, kind='revisions', )
def send_proposal_decline(proposal, email_text, sender): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) context = {'proposal': proposal, 'sender': sender} email.send_email( get_setting('proposal_declined_subject', 'email_subject', '[abp] Proposal Declined'), context, from_email.value, proposal.owner.email, email_text, kind='proposal', )
def reminder_notifications_not_emailed(task): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) press_name = models.Setting.objects.get(group__name='general', name='press_name').value email_text = models.Setting.objects.get( group__name='email', name='notification_reminder_email').value editors = User.objects.filter( Q(profile__roles__slug='press-editor') | Q(profile__roles__slug='book-editor') | Q(profile__roles__slug='production-editor')) for editor in editors: tasks = models.Task.objects.filter( assignee=editor, emailed=False, completed__isnull=True, ) task_list = "" for notification in tasks: task_list = task_list + '- ' + notification.text + "\n" notification.emailed = True notification.save() if task_list: context = { 'user': editor, 'notifications': task_list, 'notification_count': tasks.count(), 'press_name': press_name, 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, } email.send_email( get_setting('weekly_notification_reminder_subject', 'email_subject', 'Weekly Notification Reminder'), context, from_email.value, editor.email, email_text)
def send_new_user_ack(email_text, new_user, code): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) try: press_name = models.Setting.objects.get( group__name='general', name='press_name', ).value except: press_name = None try: principal_contact_name = models.Setting.objects.get( group__name='general', name='primary_contact_name').value except: principal_contact_name = None context = { 'base_url': models.Setting.objects.get( group__name='general', name='base_url', ).value, 'user': new_user, 'press_name': press_name, 'principal_contact_name': principal_contact_name, 'code': code, } email.send_email( get_setting('new_user_subject', 'email_subject', 'New User : Profile Details'), context, from_email.value, new_user.email, email_text, kind='general', )
def send_copyedit_assignment( submission, copyedit, email_text, sender, attachment, ): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) press_name = models.Setting.objects.get( group__name='general', name='press_name', ).value context = { 'base_url': models.Setting.objects.get( group__name='general', name='base_url', ).value, 'submission': submission, 'copyedit': copyedit, 'sender': sender, 'press_name': press_name, } email.send_email( get_setting('copyedit_assignment_subject', 'email_subject', 'Copyedit Assignment'), context, from_email.value, copyedit.copyeditor.email, email_text, book=submission, attachment=attachment, kind='copyedit', )
def send_review_request(book, review_assignment, email_text, sender, attachment=None, access_key=None): from_email = models.Setting.objects.get(group__name='email', name='from_address') base_url = models.Setting.objects.get(group__name='general', name='base_url') press_name = models.Setting.objects.get(group__name='general', name='press_name').value if access_key: decision_url = 'http://%s/review/%s/%s/assignment/%s/access_key/%s/decision/' % (base_url.value, review_assignment.review_type, book.id, review_assignment.id, access_key) else: decision_url = 'http://%s/review/%s/%s/assignment/%s/decision/' % (base_url.value, review_assignment.review_type, book.id, review_assignment.id) context = { 'book': book, 'review': review_assignment, 'decision_url': decision_url, 'sender': sender, 'base_url':base_url.value, 'press_name':press_name, } email.send_email(subject = get_setting('review_request_subject','email_subject','Review Request'), context = context, from_email = from_email.value, to = review_assignment.user.email, html_template = email_text, book=book, attachment=attachment, kind = 'review')
def send_editorial_review_request(book, review_assignment, email_text, sender, attachment=None): from_email = models.Setting.objects.get(group__name='email', name='from_address') base_url = models.Setting.objects.get(group__name='general', name='base_url') press_name = models.Setting.objects.get(group__name='general', name='press_name').value if review_assignment.publishing_committee_access_key: decision_url = 'http://%s/editorial/submission/%s/access_key/%s/' % (base_url.value, book.id, review_assignment.publishing_committee_access_key) else: decision_url = 'http://%s/editorial/submission/%s/access_key/%s/' % (base_url.value, book.id, review_assignment.editorial_board_access_key) context = { 'book': book, 'review': review_assignment, 'decision_url': decision_url, 'sender': sender, 'base_url':base_url.value, 'press_name':press_name, } for editor in review_assignment.editorial_board.all(): email.send_email(get_setting('editorial_review_request','email_subject','Editorial Review Request'), context, from_email.value, editor.email, email_text, book=book, attachment=attachment, kind = 'review')
def send_new_user_ack(email_text, new_user, code): from_email = models.Setting.objects.get(group__name='email', name='from_address') try: press_name = models.Setting.objects.get(group__name='general', name='press_name').value except: press_name=None try: principal_contact_name = models.Setting.objects.get(group__name='general', name='primary_contact_name').value except: principal_contact_name = None context = { 'base_url': models.Setting.objects.get(group__name='general', name='base_url').value, 'user': new_user, 'press_name':press_name, 'principal_contact_name': principal_contact_name, 'code': code, } email.send_email(get_setting('new_user_subject','email_subject','New User : Profile Details'), context, from_email.value, new_user.email, email_text, kind = 'general')
def send_review_update( book, review_assignment, email_text, sender, attachment=None, ): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) context = {'book': book, 'review': review_assignment, 'sender': sender} email.send_email(get_setting('review_due_date_subject', 'email_subject', 'Review Assignment %s: Due Date Updated') % review_assignment.id, context, from_email.value, review_assignment.user.email, email_text, book=book, attachment=attachment, kind='review')
def send_book_editors(book, added_editors, removed_editors, email_text): from_email = models.Setting.objects.get( group__name='email', name='from_address', ) base_url = models.Setting.objects.get( group__name='general', name='base_url', ).value context = { 'base_url': base_url, 'submission': book, 'added_editors': added_editors, 'removed_editors': removed_editors, 'submission_page': "http://%s/editor/submission/%s/" % ( base_url, book.id, ) } if added_editors or removed_editors: email.send_email( get_setting('book_editors_subject', 'email_subject', 'Book Editors have been updated'), context, from_email.value, book.owner.email, email_text, book=book, kind='general', )
def email_editorial_review(request, review_id): """Preview the content of an editorial review request email then send it with any necessary attachments. """ review = get_object_or_404(models.EditorialReview, pk=review_id) email_setting = 'editorial_review_{0}'.format(review.content_type) task_url = logic.get_task_url(review, request) email_text = email.get_email_content(request, email_setting, { 'review': review, 'sender': request.user, 'task_url': task_url }) subject = setting_util.get_setting( setting_name='editorial_review', setting_group_name='email_subject', default='Editorial Review Request', ) if request.POST: email_text = request.POST.get('email_text') attachment_files = request.FILES.getlist('attachment') attachments = [] custom_from_email = None if request.user.email: custom_from_email = request.user.email if attachment_files: for file in attachment_files: attachment = handle_email_file( file, 'other', request.user, "Attachment: Uploaded by {}".format(request.user.username)) attachments.append(attachment) if review.content_type.model == 'proposal': email.send_prerendered_email(request=request, html_template=email_text, subject=subject, to=review.user.email, attachments=attachments, book=None, proposal=review.content_object, custom_from_email=custom_from_email) messages.add_message( request, messages.INFO, 'Editorial review assignment sent for {} '.format(review)) return redirect( reverse('view_proposal', kwargs={'proposal_id': review.content_object.id})) else: email.send_prerendered_email(request=request, html_template=email_text, subject=subject, to=review.user.email, attachments=attachments, book=review.content_object, proposal=None, custom_from_email=custom_from_email) messages.add_message( request, messages.INFO, 'Editorial review assignment sent for {} '.format(review)) return redirect( reverse('editor_review', kwargs={'submission_id': review.content_object.id})) template = 'editorialreview/email_editorial_review.html' context = { 'review': review, 'email_text': email_text, 'subject': subject, } return render(request, template, context)
def editorial_review(request, review_id): """Complete an editorial review.""" review = get_object_or_404(models.EditorialReview, pk=review_id, completed__isnull=True) form = review_forms.GeneratedForm(form=review.review_form) recommendation_form = forms.RecommendationForm(instance=review) submission = review.content_object book = isinstance(submission, core_models.Book) proposal = isinstance(submission, submission_models.Proposal) if book: peer_reviews = core_models.ReviewAssignment.objects.filter( book=submission, completed__isnull=False, ) else: peer_reviews = submission_models.ProposalReview.objects.filter( proposal=submission, completed__isnull=False, ) completed_editorial_reviews = models.EditorialReview.objects.filter( object_id=submission.id, content_type=review.content_type, completed__isnull=False, ) if request.POST: # Handle completed review. form = review_forms.GeneratedForm( request.POST, request.FILES, form=review.review_form, ) recommendation_form = forms.RecommendationForm( request.POST, instance=review, ) if form.is_valid() and recommendation_form.is_valid(): logic.handle_generated_form_post(review, request) review.completed = timezone.now() review.save() # Add to logs and notify editors. message = ("Editorial review assignment for " "'{}' has been completed by {}.".format( submission.title, review.user.profile.full_name(), )) short_message = 'Completed' if book: log.add_log_entry( book=submission, user=review.user, kind='Editorial Review', message=message, short_name=short_message, ) for editor in submission.book_editors.all(): notification = core_models.Task( assignee=editor, creator=review.user, text=message, book=submission, ) notification.save() else: log.add_proposal_log_entry( proposal=submission, user=review.user, kind='Editorial Review', message=message, short_name=short_message, ) # Handle email notification to editors. subject = get_setting( setting_name='editorialreview_completed_email_subject', setting_group_name='email_subject', default='Editorial review completed', ) email_text = get_setting( setting_name='editorialreview_completed_email', setting_group_name='email', default='message', ) email_text.replace('\n', '<br />') from_email = get_setting( setting_name='from_address', setting_group_name='email', default='*****@*****.**', ) press_name = get_setting( setting_name='press_name', setting_group_name='general', default='The publishers', ) try: series_editor_email = [submission.series.editor.email] except AttributeError: series_editor_email = None editors_to_notify = User.objects.filter( profile__roles__slug='press-editor') if submission.book_editors.all(): editors_to_notify = submission.book_editors.all() for editor in editors_to_notify: salutation = editor.profile.full_name() if editor.profile.salutation: salutation = editor.profile.salutation context = { 'salutation': salutation, 'submission': submission, 'review': review, 'base_url': core_models.Setting.objects.get(name='base_url').value, 'authors': [submission.author] if proposal else submission.author.all(), 'press_name': press_name } email.send_email(subject=subject, context=context, html_template=email_text, from_email=from_email, to=editor.email, cc=series_editor_email, book=submission if book else None, proposal=submission if proposal else None) return redirect( reverse('editorial_review_thanks', kwargs={'review_id': review_id})) template = 'editorialreview/editorial_review.html' context = { 'review': review, 'access_key': request.GET.get('access_key'), 'form': form, 'recommendation_form': recommendation_form, 'peer_reviews': peer_reviews, 'completed_editorial_reviews': completed_editorial_reviews } return render(request, template, context)
def send_acknowldgement_email(book, press_editors): from_email = Setting.objects.get( group__name='email', name='from_address', ).value author_text = Setting.objects.get( group__name='email', name='author_submission_ack', ).value editor_text = Setting.objects.get( group__name='email', name='editor_submission_ack', ).value press_name = Setting.objects.get( group__name='general', name='press_name', ).value try: principal_contact_name = Setting.objects.get( group__name='general', name='primary_contact_name').value except: principal_contact_name = None context = { 'base_url': Setting.objects.get( group__name='general', name='base_url', ).value, 'submission': book, 'press_name': press_name, 'principal_contact_name': principal_contact_name, } email.send_email( get_setting('submission_ack_subject', 'email_subject', 'Submission Acknowledgement'), context, from_email, book.owner.email, author_text, book=book, kind='submission', ) if len(press_editors) > 1: editor = press_editors[0] cc_eds = [ed.email for ed in press_editors if ed != press_editors[0]] else: editor = press_editors[0] cc_eds = None email.send_email( get_setting('new_submission_subject', 'email_subject', 'New Submission'), context, from_email, editor.email, editor_text, book=book, cc=cc_eds, kind='submission', ) for editor in press_editors: notification = Task( book=book, assignee=editor, creator=press_editors[0], text='A new submission, {0}, has been made.'.format(book.title), workflow='review') notification.save()