# CRM Dreinet

Sistema de gestión de relaciones con clientes (CRM) desarrollado con Django y MySQL.

---

## 📋 Descripción

Este proyecto es una aplicación CRM completa que permite gestionar clientes, contactos, oportunidades de venta y seguimiento de actividades comerciales.

---

## 🛠️ Tecnologías utilizadas

- **Backend**: Django (Python)
- **Base de datos**: MySQL
- **Frontend**: HTML, CSS, JavaScript
- **Contenedores**: Docker & Docker Compose
- **Documentación API**: Swagger/OpenAPI

---

## 📁 Estructura del proyecto

```
crm_dreinet/
├── manage.py              # Comando principal de Django
├── config/                # Configuración del proyecto
│   ├── settings.py        # Configuraciones principales
│   ├── urls.py           # URLs principales
│   └── wsgi.py           # Configuración WSGI
├── requirements.txt       # Dependencias Python
├── docker-compose.yml     # Configuración Docker
├── Dockerfile            # Imagen Docker
└── README.md             # Este archivo
```

---

## ⚙️ Requisitos previos

### Para instalación local:
- **Python 3.13** o superior
- **pip** (gestor de paquetes de Python)
- **MySQL 8.0** o superior
- **Git**

### Para instalación con Docker:
- **Docker** 20.10 o superior
- **Docker Compose** 2.0 o superior

---

## 🚀 Instalación y configuración

### Opción 1: Instalación local (sin Docker)

#### 1. Clonar el repositorio
```bash
git clone <URL_DEL_REPOSITORIO>
cd crm_dreinet
```

#### 2. Crear entorno virtual
```bash
# Crear entorno virtual
python3 -m venv venv

# Activar entorno virtual
# En Linux/Mac:
source venv/bin/activate
# En Windows:
# venv\Scripts\activate
```

#### 3. Instalar dependencias
```bash
pip install -r requirements.txt
```

#### 4. Configurar base de datos
Edita el archivo `config/settings.py` con tus credenciales de MySQL:

```python
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'crm_dreinet',
        'USER': 'tu_usuario',
        'PASSWORD': 'tu_contraseña',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
```

#### 5. Crear base de datos
```bash
# Conectar a MySQL y crear la base de datos
mysql -u root -p
CREATE DATABASE crm_dreinet CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;
```

#### 6. Ejecutar migraciones
```bash
python manage.py makemigrations
python manage.py migrate
```

#### 7. Crear superusuario (opcional)
```bash
python manage.py createsuperuser
```

#### 8. Ejecutar servidor de desarrollo
```bash
python manage.py runserver
```

**✅ Aplicación disponible en:** [http://127.0.0.1:8000](http://127.0.0.1:8000)

---

### Opción 2: Instalación con Docker

#### 1. Clonar el repositorio
```bash
git clone <URL_DEL_REPOSITORIO>
cd crm_dreinet
```

#### 2. Construir y ejecutar contenedores
```bash
# Construir la imagen
docker-compose build

# Ejecutar contenedores en segundo plano
docker-compose up -d

# Ver logs en tiempo real
docker-compose logs -f
```

#### 3. Ejecutar migraciones (primera vez)
```bash
docker-compose exec web python manage.py migrate
```

#### 4. Crear superusuario (opcional)
```bash
docker-compose exec web python manage.py createsuperuser
```

**✅ Aplicación disponible en:** [http://127.0.0.1:8020](http://127.0.0.1:8020)

#### Comandos útiles Docker:
```bash
# Detener contenedores
docker-compose down

# Reiniciar contenedores
docker-compose restart

# Ver contenedores activos
docker-compose ps

# Acceder al shell del contenedor web
docker-compose exec web bash

# Ver logs de un servicio específico
docker-compose logs web
```

---

## 📚 Documentación de la API

Una vez que el servidor esté ejecutándose, puedes acceder a:

- **Swagger UI**: [http://127.0.0.1:8020/swagger/](http://127.0.0.1:8020/swagger/)
- **ReDoc**: [http://127.0.0.1:8020/redoc/](http://127.0.0.1:8020/redoc/)
- **Panel de administración**: [http://127.0.0.1:8020/admin/](http://127.0.0.1:8020/admin/)

---

## 🔧 Comandos útiles de Django

### Gestión de modelos y base de datos:
```bash
# Crear migraciones
python manage.py makemigrations

# Aplicar migraciones
python manage.py migrate

# Verificar migraciones pendientes
python manage.py showmigrations

# Retroceder migraciones
python manage.py migrate app_name migration_name
```

### Gestión de usuarios:
```bash
# Crear superusuario
python manage.py createsuperuser

# Cambiar contraseña de usuario
python manage.py changepassword username
```

### Debugging y testing:
```bash
# Verificar configuración
python manage.py check

# Ejecutar tests
python manage.py test

# Shell de Django
python manage.py shell

# Recolectar archivos estáticos
python manage.py collectstatic
```

---

## 🐛 Solución de problemas comunes

### Error: "No module named 'django'"
```bash
# Asegúrate de tener el entorno virtual activado
source venv/bin/activate
pip install -r requirements.txt
```

### Error de conexión a MySQL
- Verifica que MySQL esté ejecutándose
- Revisa las credenciales en `config/settings.py`
- Asegúrate de que la base de datos existe

### Error de puertos en Docker
```bash
# Verificar puertos ocupados
netstat -tlnp | grep :8020

# Cambiar puerto en docker-compose.yml si es necesario
```

### Error de permisos en Docker
```bash
# Ejecutar con sudo (Linux)
sudo docker-compose up
```

---

## 🌐 Variables de entorno

Para configuración de producción, crea un archivo `.env` en la raíz del proyecto:

```bash
DEBUG=False
SECRET_KEY=tu_secret_key_super_seguro
DB_NAME=crm_dreinet
DB_USER=usuario_db
DB_PASSWORD=contraseña_db
DB_HOST=localhost
DB_PORT=3306
ALLOWED_HOSTS=tu-dominio.com,127.0.0.1
```

---

## 🔒 Consideraciones de seguridad

- Cambiar `SECRET_KEY` en producción
- Configurar `DEBUG=False` en producción
- Usar HTTPS en producción
- Configurar `ALLOWED_HOSTS` apropiadamente
- Usar variables de entorno para credenciales sensibles

---

## 📈 Monitoreo y logs

### Ver logs de Django:
```bash
# Logs en tiempo real
python manage.py runserver --verbosity=2

# Con Docker
docker-compose logs -f web
```

### Logs de base de datos:
```bash
# Ver queries SQL (en settings.py)
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    },
}
```

---

## 🤝 Contribución

1. Haz fork del proyecto
2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`)
3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`)
4. Push a la rama (`git push origin feature/AmazingFeature`)
5. Abre un Pull Request

---

## 📄 Licencia

Este proyecto está bajo la licencia [MIT](LICENSE).

---

## 📞 Soporte

Si tienes problemas o preguntas:

1. Revisa la sección de [problemas comunes](#-solución-de-problemas-comunes)
2. Busca en los [issues](link-a-issues) existentes
3. Crea un nuevo issue si no encuentras solución
4. Contacta al equipo de desarrollo

---

## 📊 Estado del proyecto

- ✅ Backend API funcional
- ✅ Base de datos configurada
- ✅ Documentación API (Swagger)
- ✅ Configuración Docker
- 🔄 Frontend en desarrollo
- 🔄 Tests unitarios
- 📋 Deploy en producción (pendiente)

---

**Desarrollado con ❤️ por el equipo de Dreinet**
