bmc_hub/scripts/sync_bmc_subs_to_prod.sh

119 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
# Synkroniser BMC Office abonnementer med customer ID mapping
set -e
PROD_SERVER="bmcadmin@172.16.31.183"
echo "🔍 Eksporterer BMC Office abonnementer fra lokal dev..."
# Export with firma_name for mapping (not customer_id)
docker exec bmc-hub-postgres psql -U bmc_hub -d bmc_hub -t -A -F'|' -c "
SELECT
firma_id,
firma_name,
start_date,
text,
antal,
pris,
rabat,
beskrivelse,
faktura_firma_id,
faktura_firma_name,
active
FROM bmc_office_subscriptions
ORDER BY firma_name, id;" > /tmp/bmc_subs_export.csv
LINES=$(wc -l < /tmp/bmc_subs_export.csv | tr -d ' ')
echo "✅ Eksporteret $LINES records"
echo ""
echo "📤 Uploader og importerer til prod med customer mapping..."
# SSH to prod and run import with customer mapping
ssh $PROD_SERVER << 'ENDSSH'
echo "📥 Modtager data..."
cat > /tmp/bmc_subs_data.csv
echo "🗑️ Rydder eksisterende abonnementer..."
podman exec bmc-hub-postgres-prod psql -U bmc_hub -d bmc_hub -c "TRUNCATE TABLE bmc_office_subscriptions RESTART IDENTITY CASCADE;" > /dev/null
echo "📥 Importerer med customer ID mapping..."
podman exec -i bmc-hub-postgres-prod psql -U bmc_hub -d bmc_hub << 'EOSQL'
CREATE TEMP TABLE bmc_import (
firma_id VARCHAR(50),
firma_name VARCHAR(255),
start_date DATE,
text VARCHAR(500),
antal DECIMAL(10,2),
pris DECIMAL(10,2),
rabat DECIMAL(10,2),
beskrivelse TEXT,
faktura_firma_id VARCHAR(50),
faktura_firma_name VARCHAR(255),
active BOOLEAN
);
\COPY bmc_import FROM '/tmp/bmc_subs_data.csv' WITH (FORMAT csv, DELIMITER '|');
INSERT INTO bmc_office_subscriptions (
customer_id, firma_id, firma_name, start_date, text, antal, pris, rabat,
beskrivelse, faktura_firma_id, faktura_firma_name, active
)
SELECT
c.id as customer_id,
bi.firma_id,
bi.firma_name,
bi.start_date,
bi.text,
bi.antal,
bi.pris,
bi.rabat,
bi.beskrivelse,
bi.faktura_firma_id,
bi.faktura_firma_name,
bi.active
FROM bmc_import bi
LEFT JOIN customers c ON LOWER(TRIM(c.name)) = LOWER(TRIM(bi.firma_name))
WHERE c.id IS NOT NULL;
SELECT
COUNT(*) as total_imported,
COUNT(DISTINCT customer_id) as unique_customers
FROM bmc_office_subscriptions;
EOSQL
echo ""
echo "✅ Import færdig! Verificerer..."
podman exec bmc-hub-postgres-prod psql -U bmc_hub -d bmc_hub -c "
SELECT
COUNT(*) as total_records,
COUNT(CASE WHEN active THEN 1 END) as active_records,
ROUND(SUM(CASE WHEN active THEN total_inkl_moms ELSE 0 END)::numeric, 2) as total_value_dkk
FROM bmc_office_subscription_totals;
"
echo ""
echo "📊 Sample kunde check (Mate.Bike):"
podman exec bmc-hub-postgres-prod psql -U bmc_hub -d bmc_hub -c "
SELECT
c.id as customer_id,
c.name,
COUNT(bos.id) as bmc_subs_count,
ROUND(SUM(bos.total_inkl_moms)::numeric, 2) as total_value
FROM customers c
JOIN bmc_office_subscription_totals bos ON bos.customer_id = c.id
WHERE c.name LIKE '%Mate%'
GROUP BY c.id, c.name;
"
echo ""
echo "🧹 Rydder op..."
rm /tmp/bmc_subs_data.csv
ENDSSH < /tmp/bmc_subs_export.csv
echo ""
echo "🎉 Færdig! BMC Office abonnementer er synkroniseret til produktion."
echo ""
echo "🔗 Test på: http://172.16.31.183:8000/customers/183 -> Abonnnents tjek tab (Mate.Bike)"