feat: Enhance Advoware API integration with backward compatibility for data payloads and improve logging for sync events
This commit is contained in:
@@ -195,6 +195,30 @@ async def handle_update(entity_id, betnr, espo_entity, espocrm, advoware, sync_u
|
||||
|
||||
context.logger.info(f"⏱️ Timestamp-Vergleich: {comparison}")
|
||||
|
||||
# SPECIAL: Wenn LastSync null → immer von EspoCRM syncen (initial sync)
|
||||
if not espo_entity.get('advowareLastSync'):
|
||||
context.logger.info(f"📤 Initial Sync → EspoCRM STAMMDATEN zu Advoware")
|
||||
|
||||
# WICHTIG: Advoware benötigt vollständiges Objekt für PUT
|
||||
# Mapper liefert nur STAMMDATEN (keine Kontaktdaten - die kommen später über separate Endpoints)
|
||||
advo_updates = mapper.map_cbeteiligte_to_advoware(espo_entity)
|
||||
|
||||
# Merge mit aktuellen Advoware-Daten
|
||||
merged_data = {**advo_entity, **advo_updates}
|
||||
|
||||
context.logger.info(f"📝 Merge: {len(advo_updates)} Stammdaten-Felder → {len(merged_data)} Gesamt-Felder")
|
||||
context.logger.debug(f" Gesynct: {', '.join(advo_updates.keys())}")
|
||||
|
||||
await advoware.api_call(
|
||||
f'api/v1/advonet/Beteiligte/{betnr}',
|
||||
method='PUT',
|
||||
data=merged_data
|
||||
)
|
||||
|
||||
await sync_utils.release_sync_lock(entity_id, 'clean')
|
||||
context.logger.info(f"✅ Advoware aktualisiert (initial sync)")
|
||||
return
|
||||
|
||||
# KEIN SYNC NÖTIG
|
||||
if comparison == 'no_change':
|
||||
context.logger.info(f"✅ Keine Änderungen, Sync übersprungen")
|
||||
@@ -203,14 +227,22 @@ async def handle_update(entity_id, betnr, espo_entity, espocrm, advoware, sync_u
|
||||
|
||||
# ESPOCRM NEUER → Update Advoware
|
||||
if comparison == 'espocrm_newer':
|
||||
context.logger.info(f"📤 EspoCRM ist neuer → Update Advoware")
|
||||
context.logger.info(f"📤 EspoCRM ist neuer → Update Advoware STAMMDATEN")
|
||||
|
||||
advo_data = mapper.map_cbeteiligte_to_advoware(espo_entity)
|
||||
# WICHTIG: Advoware benötigt vollständiges Objekt für PUT
|
||||
# Mapper liefert nur STAMMDATEN (keine Kontaktdaten - die kommen über separate Endpoints)
|
||||
advo_updates = mapper.map_cbeteiligte_to_advoware(espo_entity)
|
||||
|
||||
# Merge mit aktuellen Advoware-Daten
|
||||
merged_data = {**advo_entity, **advo_updates}
|
||||
|
||||
context.logger.info(f"📝 Merge: {len(advo_updates)} Stammdaten-Felder → {len(merged_data)} Gesamt-Felder")
|
||||
context.logger.debug(f" Gesynct: {', '.join(advo_updates.keys())}")
|
||||
|
||||
await advoware.api_call(
|
||||
f'api/v1/advonet/Beteiligte/{betnr}',
|
||||
method='PUT',
|
||||
data=advo_data
|
||||
data=merged_data
|
||||
)
|
||||
|
||||
await sync_utils.release_sync_lock(entity_id, 'clean')
|
||||
@@ -218,7 +250,7 @@ async def handle_update(entity_id, betnr, espo_entity, espocrm, advoware, sync_u
|
||||
|
||||
# ADVOWARE NEUER → Update EspoCRM
|
||||
elif comparison == 'advoware_newer':
|
||||
context.logger.info(f"📥 Advoware ist neuer → Update EspoCRM")
|
||||
context.logger.info(f"📥 Advoware ist neuer → Update EspoCRM STAMMDATEN")
|
||||
|
||||
espo_data = mapper.map_advoware_to_cbeteiligte(advo_entity)
|
||||
|
||||
@@ -228,15 +260,18 @@ async def handle_update(entity_id, betnr, espo_entity, espocrm, advoware, sync_u
|
||||
|
||||
# KONFLIKT → EspoCRM WINS
|
||||
elif comparison == 'conflict':
|
||||
context.logger.warning(f"⚠️ KONFLIKT erkannt → EspoCRM WINS")
|
||||
context.logger.warning(f"⚠️ KONFLIKT erkannt → EspoCRM WINS (STAMMDATEN)")
|
||||
|
||||
# Überschreibe Advoware mit EspoCRM
|
||||
advo_data = mapper.map_cbeteiligte_to_advoware(espo_entity)
|
||||
# Überschreibe Advoware mit EspoCRM (merge mit aktuellen Daten)
|
||||
advo_updates = mapper.map_cbeteiligte_to_advoware(espo_entity)
|
||||
merged_data = {**advo_entity, **advo_updates}
|
||||
|
||||
context.logger.info(f"📝 Merge: {len(advo_updates)} Stammdaten-Felder → {len(merged_data)} Gesamt-Felder")
|
||||
|
||||
await advoware.api_call(
|
||||
f'api/v1/advonet/Beteiligte/{betnr}',
|
||||
method='PUT',
|
||||
data=advo_data
|
||||
data=merged_data
|
||||
)
|
||||
|
||||
conflict_msg = (
|
||||
|
||||
Reference in New Issue
Block a user