#!/usr/bin/env bash # ============================================================ # EFINTEL ERP Interno (Django) — Script de Arranque Local # ============================================================ # Uso en Mac / Linux: # chmod +x start.sh (solo la primera vez) # ./start.sh # # Para detener: Ctrl+C # ============================================================ set -e # Colores RED='\033[0;31m' GREEN='\033[0;32m' BLUE='\033[0;34m' CYAN='\033[0;36m' YELLOW='\033[1;33m' BOLD='\033[1m' NC='\033[0m' echo "" echo -e "${CYAN}${BOLD}╔══════════════════════════════════════════════════════╗${NC}" echo -e "${CYAN}${BOLD}║ EFINTEL ERP Interno I+D+i — Django Server ║${NC}" echo -e "${CYAN}${BOLD}║ Sistema de Control de Gastos & Proyectos ║${NC}" echo -e "${CYAN}${BOLD}╚══════════════════════════════════════════════════════╝${NC}" echo "" # Cambiar al directorio del script cd "$(dirname "$0")" # ---- Paso 1: Verificar Python 3 ---- echo -e "${BLUE}[1/6]${NC} Verificando Python 3..." if ! command -v python3 &> /dev/null; then echo -e "${RED}❌ Python 3 no está instalado.${NC}" echo "" echo " Para instalar en macOS:" echo " 1. Instala Homebrew:" echo " /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"" echo "" echo " 2. Instala Python:" echo " brew install python@3.12" echo "" exit 1 fi PYTHON_VERSION=$(python3 --version 2>&1) echo -e " ${GREEN}✅ ${PYTHON_VERSION}${NC}" # ---- Paso 2: Crear venv si no existe o si es de otro OS ---- echo -e "${BLUE}[2/6]${NC} Verificando entorno virtual (venv)..." NEEDS_VENV=false if [ ! -d "venv" ]; then NEEDS_VENV=true echo -e " ${YELLOW}⚠ No existe venv, creando uno nuevo...${NC}" elif [ ! -f "venv/bin/activate" ]; then # venv corrupto o de Windows NEEDS_VENV=true echo -e " ${YELLOW}⚠ venv inválido detectado, recreando...${NC}" rm -rf venv fi if [ "$NEEDS_VENV" = true ]; then python3 -m venv venv echo -e " ${GREEN}✅ venv creado exitosamente${NC}" else echo -e " ${GREEN}✅ venv ya existe${NC}" fi # ---- Paso 3: Activar venv ---- echo -e "${BLUE}[3/6]${NC} Activando entorno virtual..." source venv/bin/activate echo -e " ${GREEN}✅ venv activado ($(which python))${NC}" # ---- Paso 4: Instalar dependencias ---- echo -e "${BLUE}[4/6]${NC} Instalando dependencias de Django..." pip install --quiet --upgrade pip pip install --quiet -r requirements.txt echo -e " ${GREEN}✅ 29 paquetes instalados (Django 6.1, Channels, Daphne, etc.)${NC}" # ---- Paso 5: Migraciones y datos iniciales ---- echo -e "${BLUE}[5/6]${NC} Configurando base de datos..." # Ejecutar migraciones python manage.py migrate --run-syncdb --verbosity 0 echo -e " ${GREEN}✅ Migraciones aplicadas${NC}" # Crear roles y usuarios si no existen if ! python -c " import os, django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') django.setup() from django.contrib.auth.models import User exit(0 if User.objects.filter(username='admin').exists() else 1) " 2>/dev/null; then echo -e " ${YELLOW}⚠ Primera ejecución — creando usuarios y roles EFINTEL...${NC}" python setup_roles.py echo -e " ${GREEN}✅ Usuarios creados:${NC}" echo -e " ${BOLD}admin${NC} / admin (Administrador)" echo -e " ${BOLD}ginevra_ortega${NC} / ginevra123 (Administrador)" echo -e " ${BOLD}finanzas${NC} / finanzas123 (Adm. Finanzas)" echo -e " ${BOLD}miguel_contreras${NC} / miguel123 (Director Proyecto)" else echo -e " ${GREEN}✅ Usuarios ya configurados${NC}" fi # ---- Paso 6: Iniciar servidor ---- PORT=8000 URL="http://localhost:${PORT}" echo "" echo -e "${BLUE}[6/6]${NC} Iniciando servidor Django (Daphne)..." echo "" echo -e "${GREEN}${BOLD} ┌──────────────────────────────────────────────────────┐${NC}" echo -e "${GREEN}${BOLD} │ 🚀 EFINTEL ERP corriendo en: ${URL} │${NC}" echo -e "${GREEN}${BOLD} │ 🔑 Admin Django: ${URL}/admin/ │${NC}" echo -e "${GREEN}${BOLD} │ 📋 Presiona Ctrl+C para detener │${NC}" echo -e "${GREEN}${BOLD} └──────────────────────────────────────────────────────┘${NC}" echo "" echo -e "${CYAN} Cuentas de acceso:${NC}" echo -e " admin / admin | finanzas / finanzas123" echo -e " ginevra_ortega / ginevra123 | miguel_contreras / miguel123" echo "" # Abrir navegador automáticamente if [[ "$OSTYPE" == "darwin"* ]]; then sleep 2 && open "${URL}" & elif command -v xdg-open &> /dev/null; then sleep 2 && xdg-open "${URL}" & fi # Ejecutar con Daphne (ASGI server para WebSockets) python -m daphne -b 0.0.0.0 -p ${PORT} config.asgi:application