@@ -131,22 +131,22 @@ class PartyMaster(NestedSet):
131131 # Lifecycle Hooks
132132 # =========================================================================
133133
134- def onload (self ):
134+ def onload (self ) -> None :
135135 self .set ("parties" , get_party_master_parties (self .name ))
136136 self .load_dashboard_info ()
137137
138- def load_dashboard_info (self ):
138+ def load_dashboard_info (self ) -> None :
139139 from uph .party .controllers .queries import get_party_master_dashboard_info
140140
141141 info = get_party_master_dashboard_info (self .name )
142142 self .set_onload ("dashboard_info" , info )
143143
144- def autoname (self ):
144+ def autoname (self ) -> None :
145145 if not self .party_number :
146146 self .numbering ()
147147 self .name = self .party_number
148148
149- def numbering (self ):
149+ def numbering (self ) -> str | None :
150150 """Generate the next party number based on hierarchy."""
151151 # Skip if party_number is already set and not flagged for update
152152 if (
@@ -165,15 +165,15 @@ def numbering(self):
165165 # Validation Methods (Refactored)
166166 # =========================================================================
167167
168- def validate (self ):
168+ def validate (self ) -> None :
169169 """Main validation entry point - delegates to focused validators."""
170170 self ._validate_status_reasons ()
171171 self ._validate_party_name_uniqueness ()
172172 self .validate_roles ()
173173 self ._validate_accounts_uniqueness ()
174174 self ._validate_parent_numbering ()
175175
176- def _validate_accounts_uniqueness (self ):
176+ def _validate_accounts_uniqueness (self ) -> None :
177177 """Ensure (company, currency) is unique in the accounts table."""
178178 seen = set ()
179179 for row in self .accounts :
@@ -186,17 +186,17 @@ def _validate_accounts_uniqueness(self):
186186 )
187187 seen .add (key )
188188
189- def _validate_status_reasons (self ):
189+ def _validate_status_reasons (self ) -> None :
190190 """Validate that disputed parties have reasons."""
191191 if self .status == "Disputed" and not self .disputed_reasons :
192192 frappe .throw (_ ("Must Mention Reason to put This Party {0} as Disputed" ).format (self .name ))
193193
194- def _validate_party_name_uniqueness (self ):
194+ def _validate_party_name_uniqueness (self ) -> None :
195195 """Validate party name is unique."""
196196 if frappe .db .exists ("Party Master" , {"party_name" : self .party_name , "name" : ["!=" , self .name ]}):
197197 frappe .throw (_ ("Party Name {0} already exists" ).format (self .party_name ))
198198
199- def validate_roles (self ):
199+ def validate_roles (self ) -> None :
200200 """Validate that secondary roles don't have duplicates."""
201201 exist_role = {self .party_type }
202202 if self .has_secondary_role_party or len (self .roles ) > 0 :
@@ -213,32 +213,32 @@ def validate_roles(self):
213213 # Before Save/Insert Hooks
214214 # =========================================================================
215215
216- def before_insert (self ):
216+ def before_insert (self ) -> None :
217217 self .set ("parties" , []) # Ensure child table is initialized
218218 self .set_missing_value ()
219219 self ._prepare_party_name ()
220220 self ._prepare_party_number ()
221221 self ._validate_party_type_requirement ()
222222
223- def _prepare_party_name (self ):
223+ def _prepare_party_name (self ) -> None :
224224 """Clean and normalize party name."""
225225 if self .party_name :
226226 self .party_name = self .party_name .strip ()
227227
228- def _prepare_party_number (self ):
228+ def _prepare_party_number (self ) -> None :
229229 """Generate party number if not exists."""
230230 if not self .party_number :
231231 self .party_number = self .numbering ()
232232
233- def _validate_party_type_requirement (self ):
233+ def _validate_party_type_requirement (self ) -> None :
234234 """Validate party type is set when parent exists."""
235235 if self .flags .ignore_validate :
236236 return
237237
238238 if not self .party_type and self .parent_party_master and not self .is_group :
239239 frappe .throw (_ ("Default Party Type is Mandatory" ))
240240
241- def before_save (self ):
241+ def before_save (self ) -> None :
242242 """Main before_save hook - delegates to focused methods."""
243243 self ._update_normalized_name ()
244244 self ._invalidate_cache ()
@@ -249,50 +249,50 @@ def before_save(self):
249249 self ._update_linked_count ()
250250 self .set_missing_values ()
251251
252- def _update_normalized_name (self ):
252+ def _update_normalized_name (self ) -> None :
253253 """Update normalized party name for deduplication."""
254254 if self .party_name :
255255 # Use consolidated normalization
256256 self .normalized_party_name = NormalizationUtils .normalize (self .party_name )
257257
258- def _invalidate_cache (self ):
258+ def _invalidate_cache (self ) -> None :
259259 """Invalidate relevant caches."""
260260 from uph .party .controllers .cache_utils import SmartCache
261261
262262 SmartCache .invalidate_party_master_parties (self .name )
263263
264- def _handle_parent_change (self ):
264+ def _handle_parent_change (self ) -> None :
265265 """Handle parent party master changes."""
266266 old = self .get_doc_before_save ()
267267 if old and self .parent_party_master != old .parent_party_master :
268268 self .flags .update_party_number = True
269269 if self .flags .update_party_number :
270270 self .numbering ()
271271
272- def _validate_number_change (self ):
272+ def _validate_number_change (self ) -> None :
273273 """Validate party number changes."""
274274 old = self .get_doc_before_save ()
275275 if old and self .party_number != old .party_number and not self .flags .update_party_number :
276276 frappe .throw (_ ("You are not allowed to Change Party Number" ))
277277
278- def _update_secondary_role_flag (self ):
278+ def _update_secondary_role_flag (self ) -> None :
279279 """Update secondary role flag based on roles."""
280280 if len (self .roles ) > 0 and self .has_secondary_role_party == 0 :
281281 self .has_secondary_role_party = 1
282282
283- def _generate_title (self ):
283+ def _generate_title (self ) -> None :
284284 """Generate title from party name."""
285285 self .title = self .party_name
286286
287- def _update_linked_count (self ):
287+ def _update_linked_count (self ) -> None :
288288 """Update total linked party count."""
289289 self .set_total_linked_party ()
290290
291291 # =========================================================================
292292 # Missing Values & Defaults
293293 # =========================================================================
294294
295- def set_missing_value (self ):
295+ def set_missing_value (self ) -> None :
296296 """Set default values for new records."""
297297 if (
298298 self .party_type in ("Customer" , "Supplier" )
@@ -317,10 +317,10 @@ def set_missing_value(self):
317317 self .represents_company = ""
318318 self .portal_users = []
319319
320- def set_total_linked_party (self ):
320+ def set_total_linked_party (self ) -> int :
321321 return update_linked_party_to_party_master_count (self )
322322
323- def set_missing_values (self ):
323+ def set_missing_values (self ) -> None :
324324 """Set values that depend on other fields."""
325325 if not self .is_primary_role and not self .primary_party_master :
326326 self .set ("is_primary_role" , 1 )
@@ -330,7 +330,7 @@ def set_missing_values(self):
330330 return frappe .throw (_ ("Setting Primary role of same Party Type is Not Allowed" ))
331331 return
332332
333- def _validate_parent_numbering (self ):
333+ def _validate_parent_numbering (self ) -> None :
334334 """Enforce parent-number prefix rules if enabled in settings."""
335335 if not self .parent_party_master or not self .party_number :
336336 return
@@ -351,18 +351,18 @@ def _validate_parent_numbering(self):
351351 # After Update Hooks
352352 # =========================================================================
353353
354- def on_update (self ):
354+ def on_update (self ) -> None :
355355 self .create_primary_contact ()
356356 self .create_primary_address ()
357357
358- def create_primary_contact (self ):
358+ def create_primary_contact (self ) -> None :
359359 if not self .party_primary_contact and (self .mobile_no or self .email_id ):
360360 contact = make_contact (self )
361361 self .db_set ("party_primary_contact" , contact .name )
362362 self .db_set ("mobile_no" , self .mobile_no )
363363 self .db_set ("email_id" , self .email_id )
364364
365- def create_primary_address (self ):
365+ def create_primary_address (self ) -> None :
366366 from frappe .contacts .doctype .address .address import get_address_display
367367
368368 if self .flags .is_new_doc and self .get ("address_line1" ):
@@ -376,15 +376,15 @@ def create_primary_address(self):
376376 # Delete & Rename
377377 # =========================================================================
378378
379- def on_trash (self ):
379+ def on_trash (self ) -> None :
380380 # Skip linked party check during merge operations
381381 if self .flags .get ("in_merge" ):
382382 return
383383
384384 if self .total_linked_party > 0 or get_party_master_parties (self .name ):
385385 frappe .throw (_ ("Cannot delete Party Master that is linked to other Parties" ))
386386
387- def after_rename (self , olddn , newdn , merge = False ):
387+ def after_rename (self , olddn : str , newdn : str , merge : bool = False ) -> None :
388388 if olddn == self .party_number :
389389 self .party_number = newdn
390390 self .db_set ("party_number" , newdn )
0 commit comments