1+ import uuid
12from datetime import date
23from enum import StrEnum
34
@@ -61,14 +62,11 @@ def completed(self):
6162 """
6263 return self .filter (starts_at__date__lt = date .today ())
6364
65+ def with_statuses (self ):
66+ return self .prefetch_related ("statuses" )
6467
65- class Clinic (BaseModel ):
66- class State :
67- SCHEDULED = "SCHEDULED"
68- IN_PROGRESS = "IN_PROGRESS"
69- CLOSED = "CLOSED"
70- CANCELLED = "CANCELLED"
7168
69+ class Clinic (BaseModel ):
7270 class RiskType :
7371 MIXED_RISK = "MIXED_RISK"
7472 ROUTINE_RISK = "ROUTINE_RISK"
@@ -83,13 +81,6 @@ class TimeOfDay:
8381 MORNING = "morning"
8482 AFTERNOON = "afternoon"
8583
86- STATE_CHOICES = {
87- State .SCHEDULED : "Scheduled" ,
88- State .IN_PROGRESS : "In progress" ,
89- State .CLOSED : "Closed" ,
90- State .CANCELLED : "Cancelled" ,
91- }
92-
9384 RISK_TYPE_CHOICES = {
9485 RiskType .MIXED_RISK : "Mixed risk" ,
9586 RiskType .ROUTINE_RISK : "Routine risk" ,
@@ -103,10 +94,12 @@ class TimeOfDay:
10394 ends_at = models .DateTimeField ()
10495 type = models .CharField (choices = TYPE_CHOICES , max_length = 50 )
10596 risk_type = models .CharField (choices = RISK_TYPE_CHOICES , max_length = 50 )
106- state = models .CharField (choices = STATE_CHOICES , max_length = 50 )
10797
10898 objects = ClinicQuerySet .as_manager ()
10999
100+ def current_status (self ):
101+ return self .statuses .first ()
102+
110103 def session_type (self ):
111104 start_hour = self .starts_at .hour
112105 duration = (self .ends_at - self .starts_at ).seconds
@@ -137,3 +130,27 @@ class ClinicSlot(BaseModel):
137130 )
138131 starts_at = models .DateTimeField ()
139132 duration_in_minutes = models .IntegerField ()
133+
134+
135+ class ClinicStatus (models .Model ):
136+ SCHEDULED = "SCHEDULED"
137+ IN_PROGRESS = "IN_PROGRESS"
138+ CLOSED = "CLOSED"
139+ CANCELLED = "CANCELLED"
140+
141+ STATE_CHOICES = [
142+ (SCHEDULED , "Scheduled" ),
143+ (IN_PROGRESS , "In progress" ),
144+ (CLOSED , "Closed" ),
145+ (CANCELLED , "Cancelled" ),
146+ ]
147+
148+ class Meta :
149+ ordering = ["-created_at" ]
150+
151+ id = models .UUIDField (default = uuid .uuid4 , editable = False , primary_key = True )
152+ created_at = models .DateTimeField (auto_now_add = True )
153+ state = models .CharField (choices = STATE_CHOICES , max_length = 50 )
154+ clinic = models .ForeignKey (
155+ Clinic , on_delete = models .PROTECT , related_name = "statuses"
156+ )
0 commit comments