3
3
from django .db .models import Count , Min
4
4
5
5
from .constants import ListRole , ListStatus , ReviewDecisionChoices
6
+ from .exceptions import NoReviewFoundError
6
7
7
8
if TYPE_CHECKING :
8
9
from .models import DestructionList , DestructionListAssignee
@@ -73,11 +74,15 @@ def reassign(self, destruction_list: "DestructionList") -> None:
73
74
74
75
class ChangesRequested :
75
76
def assign_next (self , destruction_list : "DestructionList" ) -> None :
76
- destruction_list .set_status (ListStatus .ready_to_review )
77
-
78
- # The reviewer who rejected the list reviews first
79
77
last_review = destruction_list .reviews .order_by ("created" ).last ()
80
- destruction_list .assign (destruction_list .get_assignee (last_review .author ))
78
+ last_reviewer = destruction_list .get_assignee (last_review .author )
79
+
80
+ if last_reviewer .role == ListRole .archivist :
81
+ destruction_list .set_status (ListStatus .ready_for_archivist )
82
+ else :
83
+ destruction_list .set_status (ListStatus .ready_to_review )
84
+
85
+ destruction_list .assign (last_reviewer )
81
86
82
87
def reassign (self , destruction_list : "DestructionList" ) -> None :
83
88
# When a list has requested changes, it is assigned to the author. No action needed.
@@ -103,11 +108,15 @@ def reassign(self, destruction_list: "DestructionList") -> None:
103
108
class ReadyForArchivist :
104
109
def assign_next (self , destruction_list : "DestructionList" ) -> None :
105
110
last_review = destruction_list .reviews .order_by ("created" ).last ()
106
- if last_review and last_review .decision == ReviewDecisionChoices .accepted :
111
+ if not last_review :
112
+ raise NoReviewFoundError ()
113
+
114
+ if last_review .decision == ReviewDecisionChoices .accepted :
107
115
destruction_list .set_status (ListStatus .ready_to_delete )
108
- destruction_list .assign (destruction_list .get_author ())
116
+ else :
117
+ destruction_list .set_status (ListStatus .changes_requested )
109
118
110
- # TODO in the case where the archivist rejects it is not clear yet what should happen!
119
+ destruction_list . assign ( destruction_list . get_author ())
111
120
112
121
def reassign (self , destruction_list : "DestructionList" ) -> None :
113
122
# TODO
0 commit comments