11
22import logging
3+ import re
34from django .utils import timezone
45from .utils import haversine
56from .models import Case , CaseAssignment
@@ -62,20 +63,34 @@ def assign_case_automatically(case_id):
6263 'corporate' : 'corporate_law' ,
6364 'environment' : 'environment_law' ,
6465 'employment' : 'employment_law' ,
66+ 'property' : 'civil_law' ,
6567 'civil' : 'civil_law' ,
6668 'other' : 'criminal_law' ,
6769 'theft' : 'criminal_law' ,
6870 'assault' : 'criminal_law' ,
6971 'murder' : 'criminal_law' ,
70- 'abduction' : 'criminal_law' ,
72+ 'abduction' : 'criminal_law' ,
7173 'fraud' : 'corporate_law' ,
7274 'harassment' : 'employment_law' ,
75+
7376 }
7477 case_type = case .predicted_case_type .lower ().strip ()
75- if " - " in case_type :
76- case_type = case_type .split (" - " )[0 ].strip ()
77- elif "/" in case_type :
78- case_type = case_type .split ("/" )[0 ].strip ()
78+ case_type_clean = re .sub (r'\(.*?\)' , '' , case_type ).strip ()
79+ separators = [',' , '/' , '-' , '&' ]
80+ parts = [case_type_clean ]
81+ case_type = None
82+ for p in parts :
83+ if p .endswith (" law" ):
84+ p = p .replace (" law" , "" ).strip ()
85+
86+ if p in specialization_map :
87+ case_type = p
88+ break
89+
90+ if not case_type :
91+ case_type = parts [0 ].replace (" law" , "" ).strip ()
92+
93+
7994 field_name = specialization_map .get (case_type )
8095 if not field_name :
8196 for key , value in specialization_map .items ():
@@ -84,11 +99,11 @@ def assign_case_automatically(case_id):
8499 break
85100 logger .error (f"Unknown predicted case type: { case .predicted_case_type } " )
86101 return None
102+
87103 if not field_name :
88104 logger .error (f"Unknown predicted case type: { case .predicted_case_type } " )
89105 return None
90106
91-
92107 lawyers = LawyerProfile .objects .filter (verified = True , ** {field_name : True })
93108
94109 assigned_lawyer_ids = CaseAssignment .objects .filter (case = case ).values_list ('lawyer__profile_id' , flat = True )
@@ -106,7 +121,7 @@ def assign_case_automatically(case_id):
106121 in_progress_count = CaseAssignment .objects .filter (
107122 lawyer = lawyer ,
108123 status = 'accepted' ,
109- case__stage__in = ['in_progress' , 'handled' , 'arraignment' , 'bail' , 'trial' , 'completed' , 'closed' ]
124+ case__stage__in = ['in_progress' , 'handled' , 'arraignment' , 'bail' , 'trial' ]
110125 ).count ()
111126 if in_progress_count < MAX_IN_PROGRESS_CASES :
112127 available_lawyers .append (lawyer )
@@ -155,8 +170,8 @@ def update_case_and_cpd(assignment: CaseAssignment):
155170 return
156171
157172 if assignment .confirmed_by_lawyer and assignment .confirmed_by_applicant :
158- case .stage = 'closed '
159- case .status = 'closed '
173+ case .stage = 'completed '
174+ case .status = 'completed '
160175 case .save ()
161176
162177 CaseAssignment .objects .filter (case = case ).exclude (assignment_id = assignment .assignment_id ).update (status = 'handled' )
0 commit comments