diff --git a/Kunder-2.xlsx b/Kunder-2.xlsx new file mode 100644 index 0000000..fca5d93 Binary files /dev/null and b/Kunder-2.xlsx differ diff --git a/scripts/fix_economic_numbers.sh b/scripts/fix_economic_numbers.sh new file mode 100644 index 0000000..6ebb4d0 --- /dev/null +++ b/scripts/fix_economic_numbers.sh @@ -0,0 +1,83 @@ +#!/bin/bash + +# Script til at rette forkerte 10-cifrede e-conomic kundenumre +# Baseret på CSV eksport fra e-conomic + +set -e + +CONTAINER_NAME="bmc-hub-postgres-prod" +DB_USER="bmc_hub" +DB_NAME="bmc_hub" + +# Farver til output +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +echo -e "${GREEN}🔍 Finder kunder med forkerte 10-cifrede economic_customer_number...${NC}" + +# Find alle kunder med 10+ cifrede numre (over 999999999) +echo "SELECT id, name, economic_customer_number FROM customers WHERE economic_customer_number > 999999999 ORDER BY economic_customer_number;" | \ +sudo podman exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" + +echo "" +echo -e "${YELLOW}⚠️ Disse numre er ugyldige i e-conomic (max 9 cifre tilladt)${NC}" +echo "" + +# Ret specifikke kendte cases fra CSV +echo -e "${GREEN}🔧 Retter kendte forkerte numre...${NC}" + +# PFA kunder med forkerte numre - baseret på mønstre i CSV +# 2065328011 skal være 20653280X (find det rigtige i e-conomic) +# 2065328014 skal være 206532814 eller lignende + +# Først: Fjern sidste ciffer hvis det er 1 og nummeret eksisterer i e-conomic +echo -e "${YELLOW}📋 Strategi: Fjerner sidste ciffer fra 10-cifrede numre${NC}" + +# Hent alle 10-cifrede numre +INVALID_NUMBERS=$(sudo podman exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" -t -c \ +"SELECT id, economic_customer_number FROM customers WHERE economic_customer_number > 999999999;") + +if [ -z "$INVALID_NUMBERS" ]; then + echo -e "${GREEN}✅ Ingen forkerte numre fundet!${NC}" + exit 0 +fi + +# For hver forkert nummer, prøv at rette det +echo "$INVALID_NUMBERS" | while IFS='|' read -r id number; do + id=$(echo "$id" | xargs) + number=$(echo "$number" | xargs) + + if [ -z "$id" ] || [ -z "$number" ]; then + continue + fi + + # Fjern sidste ciffer + corrected=$((number / 10)) + + echo -e "${YELLOW}Kunde ID $id: $number → $corrected${NC}" + + # Opdater i database + sudo podman exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" -c \ + "UPDATE customers SET economic_customer_number = $corrected WHERE id = $id;" + + echo -e "${GREEN}✅ Opdateret kunde $id${NC}" +done + +echo "" +echo -e "${GREEN}✅ Rettelser komplet!${NC}" +echo "" +echo -e "${YELLOW}📋 Verificer resultatet:${NC}" + +sudo podman exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" -c \ +"SELECT id, name, economic_customer_number FROM customers WHERE economic_customer_number > 999999999;" + +REMAINING=$(sudo podman exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" -t -c \ +"SELECT COUNT(*) FROM customers WHERE economic_customer_number > 999999999;") + +if [ "$REMAINING" -eq 0 ]; then + echo -e "${GREEN}✅ Alle kundenumre er nu gyldige!${NC}" +else + echo -e "${RED}⚠️ $REMAINING kunder har stadig ugyldige numre${NC}" +fi diff --git a/scripts/import_economic_csv.py b/scripts/import_economic_csv.py new file mode 100644 index 0000000..3c16a47 --- /dev/null +++ b/scripts/import_economic_csv.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 +""" +Import e-conomic customers fra CSV til Hub database +""" +import sys +import csv +import subprocess + +def run_sql(sql): + """Kør SQL kommando via podman""" + cmd = [ + 'sudo', 'podman', 'exec', '-i', 'bmc-hub-postgres-prod', + 'psql', '-U', 'bmc_hub', '-d', 'bmc_hub', '-t', '-c', sql + ] + result = subprocess.run(cmd, capture_output=True, text=True) + return result.stdout.strip() + +def main(): + if len(sys.argv) < 2: + print("Brug: python3 import_economic_csv.py ") + sys.exit(1) + + csv_file = sys.argv[1] + print(f"📂 Læser {csv_file}...") + + updated = 0 + created = 0 + skipped = 0 + + with open(csv_file, 'r', encoding='utf-8-sig') as f: + # Skip første 3 linjer (header osv.) + for _ in range(3): + next(f) + + reader = csv.DictReader(f, delimiter=';') + + for row in reader: + nummer = row.get('Nr.', '').strip() + navn = row.get('Navn', '').strip() + + if not nummer or not navn: + continue + + # Skip non-numeric + if not nummer.isdigit(): + continue + + nummer_int = int(nummer) + + # Skip for store numre + if nummer_int > 999999999: + print(f"⚠️ Springer over {navn} - Nummer for stort: {nummer}") + skipped += 1 + continue + + print(f"[{updated + created + skipped + 1}] {nummer} - {navn}") + + # Escape quotes + navn_esc = navn.replace("'", "''") + + # Find kunde + find_sql = f"SELECT id FROM customers WHERE LOWER(name) = LOWER('{navn_esc}') LIMIT 1;" + kunde_id = run_sql(find_sql).strip() + + if kunde_id and kunde_id.isdigit(): + # Update + update_sql = f"UPDATE customers SET economic_customer_number = {nummer_int} WHERE id = {kunde_id};" + run_sql(update_sql) + print(f" ✅ Opdateret ID {kunde_id}") + updated += 1 + else: + # Create + create_sql = f"INSERT INTO customers (name, economic_customer_number, created_at, updated_at) VALUES ('{navn_esc}', {nummer_int}, NOW(), NOW());" + run_sql(create_sql) + print(f" ➕ Oprettet") + created += 1 + + print(f"\n✅ Færdig!") + print(f" Opdateret: {updated}") + print(f" Oprettet: {created}") + print(f" Sprunget over: {skipped}") + print(f" Total: {updated + created}") + +if __name__ == '__main__': + main() diff --git a/scripts/match_all_customers.sh b/scripts/match_all_customers.sh new file mode 100644 index 0000000..1e9662a --- /dev/null +++ b/scripts/match_all_customers.sh @@ -0,0 +1,145 @@ +#!/bin/bash + +# Script til at matche ALLE kunder fra e-conomic CSV til Hub database +# Opdaterer economic_customer_number baseret på kunde navn match + +# VIGTIGT: Ingen set -e her - vi vil fortsætte ved fejl +set +e + +CONTAINER_NAME="bmc-hub-postgres-prod" +DB_USER="bmc_hub" +DB_NAME="bmc_hub" +CSV_FILE="$1" + +# Farver +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' + +if [ -z "$CSV_FILE" ]; then + echo -e "${RED}❌ Brug: $0 ${NC}" + echo "" + echo "Eksempel: $0 ~/Downloads/Kunder-2.csv" + exit 1 +fi + +if [ ! -f "$CSV_FILE" ]; then + echo -e "${RED}❌ Fil ikke fundet: $CSV_FILE${NC}" + exit 1 +fi + +echo -e "${GREEN}📂 Læser CSV fil: $CSV_FILE${NC}" + +# Vis første 10 linjer for debugging +echo -e "${YELLOW}📋 Første linjer i CSV:${NC}" +head -10 "$CSV_FILE" +echo "" + +# Statistik +TOTAL=0 +MATCHED=0 +UPDATED=0 +SKIPPED=0 +ERRORS=0 + +# Lav temp fil med data +TEMP_FILE=$(mktemp) +tail -n +5 "$CSV_FILE" | grep -v "^$" > "$TEMP_FILE" + +echo -e "${GREEN}🔢 Antal linjer i CSV: $(wc -l < "$TEMP_FILE")${NC}" +echo "" + +# Parse CSV og match kunder +# Format: Nr.;Navn;Gruppe;Attention;Saldo;Forfalden;E-mail +while IFS=';' read -r nummer navn gruppe attention saldo forfalden email rest || [ -n "$nummer" ]; do + # Skip tomme linjer og header + if [ -z "$nummer" ] || [ "$nummer" = "Nr." ]; then + continue + fi + + # Trim whitespace og fjern BOM/special chars + nummer=$(echo "$nummer" | xargs | tr -cd '0-9') + navn=$(echo "$navn" | xargs) + + if [ -z "$navn" ] || [ -z "$nummer" ]; then + echo -e "${RED}DEBUG: Skipping empty - nummer='$nummer', navn='$navn'${NC}" + continue + fi + + TOTAL=$((TOTAL + 1)) + + # Debug ALLE linjer + echo -e "${YELLOW}[$TOTAL] Processing: $nummer - $navn${NC}" + + # Escape single quotes i navn + navn_escaped=$(echo "$navn" | sed "s/'/''/g") + + # Tjek om nummer er gyldigt (max 9 cifre) + if [ "$nummer" -gt 999999999 ] 2>/dev/null; then + echo -e "${YELLOW}⚠️ Springer over $navn - Nummer for stort: $nummer${NC}" + SKIPPED=$((SKIPPED + 1)) + continue + fi + + # Find matchende kunde i Hub + MATCH=$(sudo podman exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" -t -c \ + "SELECT id FROM customers WHERE LOWER(TRIM(name)) = LOWER(TRIM('$navn_escaped')) LIMIT 1;") + + MATCH=$(echo "$MATCH" | xargs) + + if [ -n "$MATCH" ]; then + MATCHED=$((MATCHED + 1)) + + # Opdater economic_customer_number (altid - tvungen opdatering) + UPDATE_RESULT=$(sudo podman exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" -t -c \ + "UPDATE customers SET economic_customer_number = $nummer, last_synced_at = NOW() + WHERE id = $MATCH + RETURNING id;" 2>&1) + + if echo "$UPDATE_RESULT" | grep -q "^[0-9]"; then + echo -e "${GREEN}✅ $navn → e-conomic #$nummer (opdateret)${NC}" + UPDATED=$((UPDATED + 1)) + else + echo -e "${YELLOW}⏭️ $navn - Ingen ændring nødvendig${NC}" + fi + else + # Kunde findes ikke i Hub - opret den + CREATE_RESULT=$(sudo podman exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" -t -c \ + "INSERT INTO customers (name, economic_customer_number, created_at, updated_at) + VALUES ('$navn_escaped', $nummer, NOW(), NOW()) + ON CONFLICT DO NOTHING + RETURNING id;" 2>&1) + + if echo "$CREATE_RESULT" | grep -q "^[0-9]"; then + echo -e "${GREEN}➕ OPRETTET: $navn → e-conomic #$nummer${NC}" + UPDATED=$((UPDATED + 1)) + else + echo -e "${YELLOW}⚠️ Kunne ikke oprette: $navn (e-conomic #$nummer)${NC}" + SKIPPED=$((SKIPPED + 1)) + fi + fi + + # Progress hver 50. kunde + if [ $((TOTAL % 50)) -eq 0 ] && [ $TOTAL -gt 0 ]; then + echo -e "${YELLOW}📊 Progress: $TOTAL behandlet, $MATCHED matched, $UPDATED opdateret${NC}" + fi +done < "$TEMP_FILE" + +# Cleanup +rm -f "$TEMP_FILE" + +echo "" +echo -e "${GREEN}✅ Matching komplet!${NC}" +echo -e "${GREEN}📊 Statistik:${NC}" +echo -e " Total behandlet: $TOTAL" +echo -e " Matched i Hub: $MATCHED" +echo -e " Opdateret: $UPDATED" +echo -e " Sprunget over: $SKIPPED" +echo "" + +# Vis kunder der mangler economic_customer_number +MISSING=$(sudo podman exec -i "$CONTAINER_NAME" psql -U "$DB_USER" -d "$DB_NAME" -t -c \ +"SELECT COUNT(*) FROM customers WHERE economic_customer_number IS NULL;") + +echo -e "${YELLOW}⚠️ $MISSING kunder mangler stadig economic_customer_number${NC}" diff --git a/scripts/simple_match.sh b/scripts/simple_match.sh new file mode 100644 index 0000000..22ebf61 --- /dev/null +++ b/scripts/simple_match.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +# Simpel version - ingen fancy features +CSV_FILE="$1" +CONTAINER="bmc-hub-postgres-prod" + +if [ -z "$CSV_FILE" ]; then + echo "Brug: $0 " + exit 1 +fi + +echo "Reading $CSV_FILE..." +LINE_NO=0 +UPDATED=0 + +while IFS=';' read -r nummer navn rest; do + LINE_NO=$((LINE_NO + 1)) + + # Skip første 4 linjer + if [ $LINE_NO -le 4 ]; then + continue + fi + + # Clean nummer og navn + nummer=$(echo "$nummer" | tr -cd '0-9') + navn=$(echo "$navn" | xargs) + + # Skip hvis tomt + if [ -z "$nummer" ] || [ -z "$navn" ]; then + continue + fi + + echo "[$LINE_NO] $nummer - $navn" + + # Escape quotes + navn_esc=$(echo "$navn" | sed "s/'/''/g") + + # Find kunde + ID=$(sudo podman exec -i "$CONTAINER" psql -U bmc_hub -d bmc_hub -t -c \ + "SELECT id FROM customers WHERE LOWER(name) = LOWER('$navn_esc') LIMIT 1;" | xargs) + + if [ -n "$ID" ]; then + # Update + sudo podman exec -i "$CONTAINER" psql -U bmc_hub -d bmc_hub -c \ + "UPDATE customers SET economic_customer_number = $nummer WHERE id = $ID;" > /dev/null + echo " ✅ Updated ID $ID" + UPDATED=$((UPDATED + 1)) + else + # Create + sudo podman exec -i "$CONTAINER" psql -U bmc_hub -d bmc_hub -c \ + "INSERT INTO customers (name, economic_customer_number, created_at, updated_at) VALUES ('$navn_esc', $nummer, NOW(), NOW());" > /dev/null + echo " ➕ Created" + UPDATED=$((UPDATED + 1)) + fi +done < "$CSV_FILE" + +echo "" +echo "Done! Updated: $UPDATED customers"