feat: Add activity logging for BMC Office subscription imports

This commit is contained in:
Christian 2026-01-06 12:54:10 +01:00
parent 5f486578c7
commit 50fbb5ab92

View File

@ -76,9 +76,39 @@ async def upload_bmc_office_subscriptions(file: UploadFile = File(...)):
logger.info(f"✅ Fundet {len(customers)} kunder i databasen") logger.info(f"✅ Fundet {len(customers)} kunder i databasen")
# Get current statistics before deletion
old_stats = execute_query("""
SELECT
COUNT(*) as total_records,
ROUND(SUM(CASE WHEN active THEN total_inkl_moms ELSE 0 END)::numeric, 2) as total_value_dkk
FROM bmc_office_subscription_totals
""")[0]
old_total = old_stats['total_records']
old_value = float(old_stats['total_value_dkk'] or 0)
# Get affected customers before deletion (for activity log)
affected_customers = execute_query("""
SELECT DISTINCT customer_id, COUNT(*) as count,
ROUND(SUM(total_inkl_moms)::numeric, 2) as value
FROM bmc_office_subscription_totals
WHERE active = true
GROUP BY customer_id
""")
# Clear existing subscriptions # Clear existing subscriptions
execute_update("DELETE FROM bmc_office_subscriptions", ()) execute_update("DELETE FROM bmc_office_subscriptions", ())
logger.info("🗑️ Ryddet eksisterende abonnementer") logger.info(f"🗑️ Ryddet {old_total} eksisterende abonnementer (værdi: {old_value:,.2f} DKK)")
# Log deletion for each affected customer
for customer in affected_customers:
execute_update(
"""INSERT INTO customer_activities (customer_id, activity_type, description, user_id)
VALUES (%s, %s, %s, %s)""",
(customer['customer_id'], 'bmc_office_sync',
f"BMC Office abonnementer fjernet før ny import: {customer['count']} abonnementer (værdi: {float(customer['value']):,.2f} DKK)",
1) # System user
)
# Process rows # Process rows
imported = 0 imported = 0
@ -118,6 +148,26 @@ async def upload_bmc_office_subscriptions(file: UploadFile = File(...)):
antal = parse_danish_number(row.get('Antal', 1)) antal = parse_danish_number(row.get('Antal', 1))
pris = parse_danish_number(row.get('Pris', 0)) pris = parse_danish_number(row.get('Pris', 0))
rabat = parse_danish_number(row.get('Rabat', 0)) rabat = parse_danish_number(row.get('Rabat', 0))
# Get new subscriptions per customer for activity log
new_subscriptions = execute_query("""
SELECT customer_id, COUNT(*) as count,
ROUND(SUM(total_inkl_moms)::numeric, 2) as value,
string_agg(text, ', ' ORDER BY text) as products
FROM bmc_office_subscription_totals
WHERE active = true
GROUP BY customer_id
""")
# Log import for each customer
for customer in new_subscriptions:
execute_update(
"""INSERT INTO customer_activities (customer_id, activity_type, description, user_id)
VALUES (%s, %s, %s, %s)""",
(customer['customer_id'], 'bmc_office_sync',
f"BMC Office abonnementer importeret: {customer['count']} abonnementer (værdi: {float(customer['value']):,.2f} DKK) - Produkter: {customer['products'][:200]}",
1) # System user
)
beskrivelse = str(row.get('Beskrivelse', '')).strip() beskrivelse = str(row.get('Beskrivelse', '')).strip()
faktura_firma_id = str(row.get('FakturaFirmaID', '')).strip() faktura_firma_id = str(row.get('FakturaFirmaID', '')).strip()
faktura_firma_name = str(row.get('FakturaFirma', '')).strip() faktura_firma_name = str(row.get('FakturaFirma', '')).strip()