feat(sync): Enhance metadata synchronization for unchanged files in Advoware sync process

This commit is contained in:
bsiggel
2026-03-31 06:26:33 +00:00
parent 52c4f84b44
commit 141eabae6d
3 changed files with 42 additions and 12 deletions

View File

@@ -312,25 +312,27 @@ class AdvowareDocumentSyncUtils:
"""
updates = {}
# Map History fields to correct EspoCRM field names
# Map History metadata fields to EspoCRM field names
history_text = advo_history.get('text', '')
history_art = advo_history.get('art', '')
history_hnr = advo_history.get('hNr')
espo_bemerkung = espo_doc.get('advowareBemerkung', '')
espo_art = espo_doc.get('advowareArt', '')
espo_hnr = espo_doc.get('hnr')
# Check if different - sync metadata independently of file changes
if history_text != espo_bemerkung:
updates['advowareBemerkung'] = history_text
if history_art != espo_art:
updates['advowareArt'] = history_art
if history_hnr is not None and history_hnr != espo_hnr:
updates['hnr'] = history_hnr
# Sync dat (creation date from Advoware History) → advowareErstellungTimestamp
history_dat_raw = advo_history.get('dat') or ''
history_erstellung = history_dat_raw.replace('T', ' ')[:19] if history_dat_raw else ''
espo_erstellung = espo_doc.get('advowareErstellungTimestamp') or ''
if history_erstellung and history_erstellung != espo_erstellung:
updates['advowareErstellungTimestamp'] = history_erstellung
# Always update lastSyncTimestamp when metadata changes (EspoCRM format)
if len(updates) > 0:
updates['lastSyncTimestamp'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')

View File

@@ -247,7 +247,17 @@ async def _run_advoware_sync(
ctx.logger.info(f" [{action.action:12s}] {filename} (hnr={hnr}) {action.reason}")
if action.action == 'SKIP':
results['skipped'] += 1
# Even for unchanged files: sync metadata from History (art, text, hnr, dat)
if espo_doc and history_entry:
needs_meta_update, meta_updates = sync_utils.should_sync_metadata(espo_doc, history_entry)
if needs_meta_update:
await espocrm.update_entity('CDokumente', espo_doc['id'], meta_updates)
ctx.logger.info(f" [META UPDATE ] {filename} (hnr={hnr}) {list(meta_updates.keys())}")
results['updated'] += 1
else:
results['skipped'] += 1
else:
results['skipped'] += 1
elif action.action == 'CREATE':
if not windows_file:
@@ -274,6 +284,7 @@ async def _run_advoware_sync(
'hnr': history_entry.get('hNr') if history_entry else None,
'advowareArt': (history_entry.get('art', 'Schreiben') or 'Schreiben')[:100] if history_entry else 'Schreiben',
'advowareBemerkung': (history_entry.get('text', '') or '')[:255] if history_entry else '',
'advowareErstellungTimestamp': ((history_entry.get('dat') or '').replace('T', ' ')[:19] or None) if history_entry else None,
'dateipfad': windows_file.get('path', ''),
'blake3hash': blake3_hash,
'syncedHash': blake3_hash,
@@ -322,6 +333,9 @@ async def _run_advoware_sync(
update_data['hnr'] = history_entry.get('hNr')
update_data['advowareArt'] = (history_entry.get('art', 'Schreiben') or 'Schreiben')[:100]
update_data['advowareBemerkung'] = (history_entry.get('text', '') or '')[:255]
erstellung_dat = (history_entry.get('dat') or '').replace('T', ' ')[:19]
if erstellung_dat:
update_data['advowareErstellungTimestamp'] = erstellung_dat
await espocrm.update_entity('CDokumente', espo_doc['id'], update_data)
results['updated'] += 1

View File

@@ -264,7 +264,17 @@ async def _run_advoware_sync(
ctx.logger.info(f" [{action.action:12s}] {filename} (hnr={hnr}) {action.reason}")
if action.action == 'SKIP':
results['skipped'] += 1
# Even for unchanged files: sync metadata from History (art, text, hnr, dat)
if espo_doc and history_entry:
needs_meta_update, meta_updates = sync_utils.should_sync_metadata(espo_doc, history_entry)
if needs_meta_update:
await espocrm.update_entity('CDokumente', espo_doc['id'], meta_updates)
ctx.logger.info(f" [META UPDATE ] {filename} (hnr={hnr}) {list(meta_updates.keys())}")
results['updated'] += 1
else:
results['skipped'] += 1
else:
results['skipped'] += 1
elif action.action == 'CREATE':
if not windows_file:
@@ -290,6 +300,7 @@ async def _run_advoware_sync(
'hnr': history_entry.get('hNr') if history_entry else None,
'advowareArt': (history_entry.get('art', 'Schreiben') or 'Schreiben')[:100] if history_entry else 'Schreiben',
'advowareBemerkung': (history_entry.get('text', '') or '')[:255] if history_entry else '',
'advowareErstellungTimestamp': ((history_entry.get('dat') or '').replace('T', ' ')[:19] or None) if history_entry else None,
'dateipfad': windows_file.get('path', ''),
'blake3hash': blake3_hash,
'syncedHash': blake3_hash,
@@ -337,6 +348,9 @@ async def _run_advoware_sync(
update_data['hnr'] = history_entry.get('hNr')
update_data['advowareArt'] = (history_entry.get('art', 'Schreiben') or 'Schreiben')[:100]
update_data['advowareBemerkung'] = (history_entry.get('text', '') or '')[:255]
erstellung_dat = (history_entry.get('dat') or '').replace('T', ' ')[:19]
if erstellung_dat:
update_data['advowareErstellungTimestamp'] = erstellung_dat
# Mark for re-sync to xAI only if file content actually changed
# (USN can change without content change, e.g. metadata-only updates)