@@ -42,73 +42,66 @@ def process_webhook_event(
4242 data : dict ,
4343 event : WebhookEvent ,
4444 ):
45- logger .info (
46- f"Processing { event .value } for { cls .entity_type_name } { resource_id } "
47- )
48-
4945 # If no data, the asset was deleted
5046 if not data :
5147 return cls .delete_from_moneybird (resource_id )
5248
5349 # Check if asset already exists locally
5450 try :
5551 asset = cls .get_queryset ().get (moneybird_asset_id = resource_id )
56- logger .info (
57- f"Asset { resource_id } already exists locally, refreshing from Moneybird"
58- )
5952 asset .refresh_from_moneybird ()
6053
6154 # If this is a created event and the name doesn't match, update Moneybird
6255 if event .value == "company_assets_asset_created" :
6356 moneybird_name = data .get ("name" , "" )
6457 if moneybird_name and moneybird_name != asset .name :
6558 logger .info (
66- f"Asset name mismatch: Moneybird has '{ moneybird_name } ', local has '{ asset .name } '. Updating Moneybird. "
59+ f"Updating Moneybird asset name from '{ moneybird_name } ' to '{ asset .name } '"
6760 )
6861 asset .update_on_moneybird ()
6962
7063 return asset
7164 except cls .model .DoesNotExist :
7265 # Asset doesn't exist locally - try to find by name and link
73- asset_name = data .get ("name" , "" )
74- if asset_name :
75- try :
76- asset = cls .get_queryset ().get (
77- name = asset_name , moneybird_asset_id__isnull = True
78- )
79- logger .info (
80- f"Found existing asset with name '{ asset_name } ', linking to Moneybird asset { resource_id } "
81- )
82- asset .moneybird_asset_id = resource_id
83- asset .refresh_from_moneybird ()
66+ moneybird_name = data .get ("name" , "" )
67+ if not moneybird_name :
68+ logger .warning (f"Asset { resource_id } has no name, cannot match" )
69+ return None
8470
85- # Check if name needs updating on Moneybird
86- if asset_name != asset .name :
87- logger .info (
88- f"Linked asset name differs from Moneybird name. Updating Moneybird from '{ asset_name } ' to '{ asset .name } '."
89- )
90- asset .update_on_moneybird ()
71+ # Try to find exact match (case-insensitive)
72+ try :
73+ asset = cls .get_queryset ().get (
74+ name__iexact = moneybird_name , moneybird_asset_id__isnull = True
75+ )
76+ logger .info (
77+ f"Linking local asset '{ asset .name } ' to Moneybird asset { resource_id } "
78+ )
79+ asset .moneybird_asset_id = resource_id
80+ asset .save (update_fields = ["moneybird_asset_id" ])
81+ asset .refresh_from_moneybird ()
9182
92- return asset
93- except cls . model . DoesNotExist :
83+ # Update Moneybird if names differ in case
84+ if moneybird_name != asset . name :
9485 logger .info (
95- f"No existing asset found with name '{ asset_name } ' to link"
96- )
97- except cls .model .MultipleObjectsReturned :
98- logger .warning (
99- f"Multiple assets found with name '{ asset_name } ', cannot auto-link"
86+ f"Updating Moneybird asset name from '{ moneybird_name } ' to '{ asset .name } '"
10087 )
101- else :
102- logger .warning (f"Asset { resource_id } has no name, cannot match" )
103- return None
88+ asset .update_on_moneybird ()
89+
90+ return asset
91+ except cls .model .DoesNotExist :
92+ return None
93+ except cls .model .MultipleObjectsReturned :
94+ logger .warning (
95+ f"Multiple assets found with name '{ moneybird_name } ', cannot auto-link"
96+ )
97+ return None
10498
10599 @classmethod
106100 def delete_from_moneybird (cls , resource_id : str ):
107- logger .info (f"Asset { resource_id } deleted on Moneybird" )
108101 try :
109102 asset = cls .get_queryset ().get (moneybird_asset_id = resource_id )
110103 logger .info (
111- f"Unlinking local asset { asset .id } from Moneybird asset { resource_id } "
104+ f"Unlinking local asset ' { asset .name } ' from deleted Moneybird asset"
112105 )
113106 asset .moneybird_asset_id = None
114107 asset .moneybird_data = None
@@ -123,4 +116,4 @@ def delete_from_moneybird(cls, resource_id: str):
123116 ]
124117 )
125118 except cls .model .DoesNotExist :
126- logger . info ( f"Asset { resource_id } not found locally, nothing to unlink" )
119+ pass
0 commit comments