feat: Enhance Advoware API integration with backward compatibility for data payloads and improve logging for sync events

This commit is contained in:
2026-02-07 15:44:56 +00:00
parent b5abe6cf00
commit 8550107b89
4 changed files with 447 additions and 94 deletions

View File

@@ -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 = (