diff --git a/submissions/exceptions.py b/submissions/exceptions.py new file mode 100644 index 0000000000000000000000000000000000000000..19c5684bd004f175ffe4169cc2938d312d66edf0 --- /dev/null +++ b/submissions/exceptions.py @@ -0,0 +1,6 @@ +class CycleUpdateDeadlineError(Exception): + def __init__(self, name): + self.name = name + + def __str__(self): + return self.name diff --git a/submissions/utils.py b/submissions/utils.py index d713236f3f2b66dab3fd04300962da4ece33e9a6..29ed7e85be4febc089c51bd4b476b66f3db4c21a 100644 --- a/submissions/utils.py +++ b/submissions/utils.py @@ -7,6 +7,7 @@ from django.utils import timezone from .constants import NO_REQUIRED_ACTION_STATUSES,\ STATUS_REVISION_REQUESTED, STATUS_EIC_ASSIGNED,\ STATUS_RESUBMISSION_INCOMING, STATUS_AWAITING_ED_REC +from .exceptions import CycleUpdateDeadlineError from scipost.utils import EMAIL_FOOTER from common.utils import BaseMailUtil @@ -112,11 +113,19 @@ class BaseSubmissionCycle: SubmissionUtils.reinvite_referees_email() def update_deadline(self, period=None): + """ + Reset the reporting deadline according to current datetime and default cycle length. + New reporting deadline may be explicitly given as datetime instance. + """ + if self.submission.status == STATUS_RESUBMISSION_INCOMING: + raise CycleUpdateDeadlineError('Submission has invalid status: %s' + % self.submission.status) delta_d = period or self.default_days deadline = timezone.now() + datetime.timedelta(days=delta_d) self.submission.reporting_deadline = deadline self.submission.save() + def get_required_actions(self): '''Return list of the submission its required actions''' if not self.updated_action: