3737from business_common .utils import datetime
3838from business_model .models import Business , CourtOrder , Filing
3939from business_model .models .types .filings import FilingTypes
40- from flask_babel import _ as babel
4140
4241from business_filer .filing_meta import FilingMeta
42+ from business_filer .filing_processors .filing_components import documents
43+ from business_filer .services .utils import is_same_str
4344
4445
45- def create_court_order (filing_submission : Filing ,
46+ def create_court_order (filing : Filing ,
4647 court_order : dict ,
47- filing_meta : FilingMeta ,
48+ filing_meta : FilingMeta = None ,
4849 new_business : Business = None ) -> dict | None :
4950 """Create a court order."""
50- if not filing_submission :
51- return {"error" : babel ("Filing is required before a court order can be created." )}
52-
5351 if not (file_number := court_order .get ("fileNumber" )):
54- return
52+ return None
5553
5654 court_order_obj = CourtOrder (
5755 file_number = file_number ,
@@ -61,20 +59,111 @@ def create_court_order(filing_submission: Filing,
6159 with suppress (IndexError , KeyError , TypeError , ValueError ):
6260 court_order_obj .order_date = datetime .fromisoformat (court_order .get ("orderDate" ))
6361
64- filing_meta . court_order = {"fileNumber" : file_number }
62+ court_order_meta = {"fileNumber" : file_number }
6563 if court_order_obj .effect_of_order :
66- filing_meta . court_order ["effectOfOrder" ] = court_order_obj .effect_of_order
64+ court_order_meta ["effectOfOrder" ] = court_order_obj .effect_of_order
6765 if court_order .get ("orderDate" ):
68- filing_meta . court_order ["orderDate" ] = court_order .get ("orderDate" )
69- if filing_submission .filing_type == FilingTypes .COURTORDER . value :
66+ court_order_meta ["orderDate" ] = court_order .get ("orderDate" )
67+ if filing .filing_type == FilingTypes .COURTORDER :
7068 # Only add order details for court orders
71- filing_meta .court_order ["orderDetails" ] = court_order_obj .order_details
69+ court_order_meta ["orderDetails" ] = court_order_obj .order_details
70+
71+ if filing_meta :
72+ filing_meta .court_order = court_order_meta
7273
7374 if new_business :
74- court_order_obj .filing_id = filing_submission .id
75+ court_order_obj .filing_id = filing .id
7576 new_business .court_orders .append (court_order_obj )
7677 else :
77- court_order_obj .business_id = filing_submission .business_id
78- filing_submission .court_orders .append (court_order_obj )
78+ court_order_obj .business_id = filing .business_id
79+ filing .court_orders .append (court_order_obj )
80+
81+ return court_order_meta
82+
83+
84+ def update_court_order (court_order : dict , filing : Filing , court_order_meta : dict ) -> bool :
85+ """Update a court order."""
86+ has_changed = False
87+ file_number = court_order .get ("fileNumber" )
88+ effect_of_order = court_order .get ("effectOfOrder" )
89+ order_details = court_order .get ("orderDetails" )
90+
91+ court_order_obj = CourtOrder .get_by_id (court_order .get ("id" ))
92+ if not is_same_str (court_order_obj .file_number , file_number ):
93+ court_order_meta ["fileNumber" ] = file_number
94+ has_changed = True
95+ if not is_same_str (court_order_obj .effect_of_order , effect_of_order ):
96+ court_order_meta ["effectOfOrder" ] = effect_of_order
97+ has_changed = True
98+ if not is_same_str (court_order_obj .order_details , order_details ):
99+ court_order_meta ["orderDetails" ] = order_details
100+ has_changed = True
101+
102+ if has_changed :
103+ court_order_obj .file_number = file_number
104+ court_order_obj .effect_of_order = effect_of_order
105+ court_order_obj .order_details = order_details
106+ filing .court_orders .append (court_order_obj )
107+
108+ return has_changed
109+
110+
111+ def update_court_orders (business : Business ,
112+ court_orders : list [dict ],
113+ filing_meta : FilingMeta ) -> None :
114+ """Update court orders."""
115+ court_orders_meta = []
116+ for court_order in court_orders :
117+ filing = Filing .find_by_id (court_order .get ("filingId" ))
118+
119+ has_changed = False
120+ court_order_meta = {"filingId" : filing .id }
121+ if court_order .get ("id" ):
122+ has_changed = update_court_order (court_order , filing , court_order_meta )
123+ else :
124+ court_order_meta = {
125+ ** court_order_meta ,
126+ ** create_court_order (filing , court_order )
127+ }
128+ has_changed = True
129+
130+ documents_changed = update_court_order_documents (court_order , filing , business , court_order_meta )
131+ if has_changed or documents_changed :
132+ # Only add court order if there are any changes
133+ court_orders_meta .append (court_order_meta )
134+
135+ if court_orders_meta :
136+ filing_meta .court_orders = court_orders_meta
137+
138+
139+ def update_court_order_documents (court_order : dict , filing : Filing , business : Business , court_order_meta : dict ) -> bool :
140+ """Update court order documents if the filing is a court order."""
141+ if (
142+ filing .filing_type != FilingTypes .COURTORDER or
143+ "files" not in court_order
144+ ):
145+ return False
146+
147+ documents_changed = False
148+ files = court_order .get ("files" , [])
149+ new_files = []
150+ if court_order_documents := filing .documents .all ():
151+ existing_file_keys = [document .file_key for document in court_order_documents ]
152+ new_files = [file for file in files if file .get ("fileKey" ) not in existing_file_keys ]
153+ deleted_documents = [
154+ document
155+ for document in court_order_documents
156+ if document .file_key not in [file .get ("fileKey" ) for file in files ]
157+ ]
158+ if deleted_documents :
159+ for document in deleted_documents :
160+ filing .documents .remove (document )
161+ documents_changed = True
162+ else :
163+ new_files = files
79164
80- return None
165+ if new_files :
166+ file_list = documents .create_filing_documents (new_files , business , filing )
167+ court_order_meta ["files" ] = file_list
168+ documents_changed = True
169+ return documents_changed
0 commit comments