Files
tilbudgivern/archive/scripts/sync_ordrestyring_data.sh

154 lines
5.3 KiB
Bash
Executable File

#!/bin/bash
#
# COMPREHENSIVE Ordrestyring Data Sync Script
# Imports ALL data from Ordrestyring API v2 for advanced tilbudsberegning
# Includes: Cases, Materials, Hours, Calendar, Employees, Financial data
# Suitable for running as hourly cron job for fresh data
#
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m'
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOG_FILE="$SCRIPT_DIR/ordrestyring_comprehensive_sync.log"
LOCK_FILE="$SCRIPT_DIR/ordrestyring_comprehensive_sync.lock"
# Function to log with timestamp
log() {
echo -e "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Function to cleanup on exit
cleanup() {
if [ -f "$LOCK_FILE" ]; then
rm -f "$LOCK_FILE"
fi
}
trap cleanup EXIT
# Check if another sync is already running
if [ -f "$LOCK_FILE" ]; then
log "${RED}❌ Another comprehensive sync process is already running (lock file exists)${NC}"
exit 1
fi
# Create lock file
echo $$ > "$LOCK_FILE"
log "${CYAN}🚀 Starting COMPREHENSIVE Ordrestyring sync for Tilbudsberegning${NC}"
log "${BLUE}📊 Importing: Cases, Materials, Hours, Calendar, Employees, Financial Data${NC}"
# Export API token (using the working v2 API key)
export ORDRESTYRING_TOKEN="<ORDRESTYRING_API_TOKEN>"
# Change to script directory
cd "$SCRIPT_DIR"
# Check if comprehensive import script exists
if [ ! -f "comprehensive_ordrestyring_import.js" ]; then
log "${RED}❌ Comprehensive import script not found: comprehensive_ordrestyring_import.js${NC}"
exit 1
fi
# Check database connection
log "${YELLOW}🔍 Checking database connection...${NC}"
if ! command -v mysql &> /dev/null; then
log "${RED}❌ MySQL client not found${NC}"
exit 1
fi
# Test database connection
if ! mysql -u ordrestyring_user -p"${ORDRESTYRING_DB_PASSWORD}" -h localhost ordrestyring_local -e "SELECT 1;" &> /dev/null; then
log "${RED}❌ Database connection failed${NC}"
exit 1
fi
log "${GREEN}✅ Database connection verified${NC}"
# Run comprehensive sync
log "${PURPLE}📥 Running comprehensive Ordrestyring data sync...${NC}"
log "${CYAN} - All Cases with historical data${NC}"
log "${CYAN} - Customer database (Debtors)${NC}"
log "${CYAN} - Employee data and types${NC}"
log "${CYAN} - Time tracking (Hours)${NC}"
log "${CYAN} - Materials and cost data${NC}"
log "${CYAN} - Calendar/planning data${NC}"
log "${CYAN} - Financial data (Invoices)${NC}"
log "${CYAN} - Analytics generation${NC}"
# Run the comprehensive import
START_TIME=$(date +%s)
node comprehensive_ordrestyring_import.js 2>&1 | tee -a "$LOG_FILE"
# Check exit status
IMPORT_EXIT_CODE=${PIPESTATUS[0]}
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
if [ $IMPORT_EXIT_CODE -eq 0 ]; then
log "${GREEN}✅ Comprehensive sync completed successfully in ${DURATION} seconds${NC}"
# Log success metrics
TOTAL_RECORDS=$(mysql -u ordrestyring_user -p"${ORDRESTYRING_DB_PASSWORD}" -h localhost ordrestyring_local -se "
SELECT
(SELECT COUNT(*) FROM ordrestyring_cases) +
(SELECT COUNT(*) FROM ordrestyring_debtors) +
(SELECT COUNT(*) FROM ordrestyring_users) +
(SELECT COUNT(*) FROM ordrestyring_hours) +
(SELECT COUNT(*) FROM ordrestyring_case_materials) +
(SELECT COUNT(*) FROM ordrestyring_calendar) as total_records
" 2>/dev/null || echo "0")
log "${GREEN}📊 Total records in local database: ${TOTAL_RECORDS}${NC}"
# Check for active employees
ACTIVE_EMPLOYEES=$(mysql -u ordrestyring_user -p"${ORDRESTYRING_DB_PASSWORD}" -h localhost ordrestyring_local -se "
SELECT COUNT(*) FROM ordrestyring_users WHERE full_name IS NOT NULL AND email IS NOT NULL
" 2>/dev/null || echo "0")
log "${GREEN}👥 Active employees found: ${ACTIVE_EMPLOYEES}${NC}"
# Check calendar entries for planning
CALENDAR_ENTRIES=$(mysql -u ordrestyring_user -p"${ORDRESTYRING_DB_PASSWORD}" -h localhost ordrestyring_local -se "
SELECT COUNT(*) FROM ordrestyring_calendar
WHERE start_time > UNIX_TIMESTAMP(CURDATE())
AND start_time < UNIX_TIMESTAMP(DATE_ADD(CURDATE(), INTERVAL 7 DAY))
" 2>/dev/null || echo "0")
log "${GREEN}📅 Calendar entries for next 7 days: ${CALENDAR_ENTRIES}${NC}"
# Update sync status for tilbudsberegning app
echo "{
\"last_sync\": \"$(date -Iseconds)\",
\"status\": \"success\",
\"duration_seconds\": $DURATION,
\"total_records\": $TOTAL_RECORDS,
\"active_employees\": $ACTIVE_EMPLOYEES,
\"calendar_entries_next_7_days\": $CALENDAR_ENTRIES
}" > "$SCRIPT_DIR/last_sync_status.json"
else
log "${RED}❌ Comprehensive sync failed with exit code: $IMPORT_EXIT_CODE${NC}"
# Update error status
echo "{
\"last_sync\": \"$(date -Iseconds)\",
\"status\": \"failed\",
\"error_code\": $IMPORT_EXIT_CODE,
\"duration_seconds\": $DURATION
}" > "$SCRIPT_DIR/last_sync_status.json"
exit 1
fi
log "${PURPLE}🎉 COMPREHENSIVE Ordrestyring sync completed successfully${NC}"
log "${BLUE}💡 Data is now ready for advanced tilbudsberegning with historical analysis${NC}"
log "${CYAN}📋 Calendar data available for tilbudsbereger.alw.dk planning integration${NC}"