# 🍽️ Cocina Angi - Sistema de Gestión

Sistema web completo para la gestión de una cocina económica desarrollado con PHP nativo, MySQL (PDO) y Bootstrap 5.

## 📋 Tabla de Contenidos

- [Características](#características)
- [Tecnologías](#tecnologías)
- [Estructura del Proyecto](#estructura-del-proyecto)
- [Instalación](#instalación)
- [Configuración](#configuración)
- [Base de Datos](#base-de-datos)
- [Archivos Principales](#archivos-principales)
- [Seguridad](#seguridad)
- [Deployment Automatizado](#deployment-automatizado)
- [Próximos Pasos](#próximos-pasos)
- [Changelog](#changelog)

## ✨ Características

- ✅ **Dashboard completo** con estadísticas en tiempo real
- ✅ **Gestión de ventas** con múltiples métodos de pago
- ✅ **Control de inventario** de ingredientes
- ✅ **Gestión de platillos** y menú
- ✅ **Registro de clientes**
- ✅ **Control de gastos** operativos
- ✅ **Reportes** y análisis de ventas
- ✅ **Alertas de stock bajo**
- ✅ **Diseño responsive** con Bootstrap 5
- ✅ **Seguridad** con PDO y prepared statements

## 🛠️ Tecnologías

- **Backend**: PHP 7.4+ (nativo)
- **Base de Datos**: MySQL 5.7+ / MariaDB
- **Conexión**: PDO (PHP Data Objects)
- **Frontend**: Bootstrap 5.3.2
- **Iconos**: Bootstrap Icons 1.11.1
- **JavaScript**: Vanilla JS (ES6+)

## 📁 Estructura del Proyecto

```
dailyfood/
├── config/
│   └── db.php                 # Configuración de base de datos (PDO)
├── includes/
│   ├── header.php             # Header común (Bootstrap, meta tags)
│   ├── footer.php             # Footer común (scripts JS)
│   ├── sidebar.php             # Menú lateral de navegación
│   └── auth.php                # Sistema de autenticación
├── modals/                     # Formularios emergentes (pendiente)
├── assets/
│   ├── css/
│   │   └── style.css          # Estilos personalizados
│   └── js/
│       └── main.js             # JavaScript principal
├── index.html                  # Página de presentación del proyecto
├── index.php                   # Dashboard principal (protegido)
├── login.php                   # Página de inicio de sesión
├── logout.php                  # Cerrar sesión
├── cambiar_password.php        # Cambiar contraseña
├── crear_usuario_admin.php     # Script para crear usuario admin (eliminar después)
├── database.sql                # Script SQL completo
└── README.md                   # Este archivo
```

## 🚀 Instalación

### Requisitos Previos

- Servidor web (Apache/Nginx)
- PHP 7.4 o superior
- MySQL 5.7+ o MariaDB 10.2+
- Extensiones PHP: `pdo`, `pdo_mysql`, `mbstring`

### Pasos de Instalación

1. **Clonar o descargar el proyecto** en tu servidor web (cPanel public_html o subdirectorio)

2. **Importar la base de datos**:
   - Acceder a phpMyAdmin en cPanel
   - Crear una nueva base de datos o usar una existente
   - Importar el archivo `database.sql`
   - Verificar que todas las tablas se crearon correctamente

3. **Configurar la conexión**:
   - Editar `config/db.php`
   - Actualizar las constantes de conexión:
     ```php
     define('DB_HOST', 'localhost');
     define('DB_NAME', 'cocina_economica');
     define('DB_USER', 'tu_usuario');
     define('DB_PASS', 'tu_contraseña');
     ```

4. **Crear usuario administrador**:
   - Acceder a `crear_usuario_admin.php` desde el navegador
   - Esto creará el usuario "Roberto" con contraseña "admin"
   - **IMPORTANTE**: Eliminar `crear_usuario_admin.php` después de crear el usuario por seguridad
   - Cambiar la contraseña desde el sistema después del primer login

5. **Verificar permisos**:
   - Asegurar que PHP tiene permisos de lectura en todas las carpetas
   - Si se suben imágenes, dar permisos de escritura a `assets/uploads/` (si existe)

6. **Acceder al sistema**:
   - Navegar a `http://tudominio.com/dailyfood/index.php`
   - El dashboard debería cargar correctamente

## ⚙️ Configuración

### Base de Datos (`config/db.php`)

El archivo de configuración utiliza el patrón **Singleton** para garantizar una única conexión a la base de datos:

```php
// Obtener conexión directa
$db = getDB();

// Obtener instancia para transacciones
$database = getDatabase();
$database->beginTransaction();
```

### Variables de Configuración

- `DB_HOST`: Host de MySQL (generalmente `localhost` en cPanel)
- `DB_NAME`: Nombre de la base de datos
- `DB_USER`: Usuario de MySQL
- `DB_PASS`: Contraseña de MySQL
- `DB_CHARSET`: Charset (utf8mb4 por defecto)

## 🗄️ Base de Datos

### Tablas Principales

1. **usuarios**: Usuarios del sistema (administradores)
2. **metodos_pago**: Métodos de pago disponibles (Efectivo, Tarjeta, etc.)
3. **clientes**: Información de clientes
4. **ingredientes**: Inventario de ingredientes con stock y precios
5. **platillos**: Menú de platillos disponibles
6. **platillo_ingredientes**: Relación muchos a muchos (platillos ↔ ingredientes)
7. **ventas**: Registro de ventas realizadas (incluye pedidos)
8. **venta_detalles**: Detalles de cada venta (qué platillos se vendieron)
9. **gastos**: Registro de gastos operativos
10. **roles**: Roles disponibles en el sistema
11. **permisos**: Permisos del sistema
12. **roles_permisos**: Relación entre roles y permisos
13. **produccion_diaria**: Límites de producción diaria por platillo
14. **caja**: Registro de aperturas y cierres de caja

### Características de la Base de Datos

- ✅ Charset UTF8MB4 para soporte completo de caracteres
- ✅ Claves foráneas con restricciones de integridad
- ✅ Índices optimizados para consultas frecuentes
- ✅ Campos de auditoría (fecha_creacion, fecha_actualizacion)
- ✅ Soft delete con campo `activo` en tablas principales
- ✅ Datos iniciales (métodos de pago, roles y permisos predefinidos)
- ✅ Sistema de roles y permisos completo
- ✅ Soporte para pedidos (ventas telefónicas)
- ✅ Control de producción diaria
- ✅ Gestión de apertura y cierre de caja

## 📄 Archivos Principales

### `index.html` - Página de Presentación

Página estática de presentación del proyecto que incluye:
- **Hero section** con información principal del sistema
- **Características principales** con cards interactivas
- **Tecnologías utilizadas** (Backend y Frontend)
- **Estructura del proyecto** visualizada
- **Información de la base de datos** con las 14 tablas principales (consolidadas en `database.sql`)
- **Medidas de seguridad** implementadas
- **Enlaces rápidos** al sistema y documentación
- Diseño moderno y responsive con Bootstrap 5

### `index.php` - Dashboard

Página principal que muestra:
- **Estadísticas del día**: Ventas e ingresos del día actual
- **Estadísticas del mes**: Ingresos, gastos y ganancia neta
- **Últimas ventas**: Las 5 ventas más recientes
- **Platillos más vendidos**: Top 5 del mes actual
- **Alertas de stock**: Ingredientes con stock bajo

### `login.php` - Sistema de Autenticación

Página de inicio de sesión con:
- Formulario de login seguro
- Validación de credenciales con PDO
- Verificación de contraseñas con `password_verify()`
- Redirección automática después del login
- Manejo de errores y mensajes

### `includes/auth.php` - Verificación de Autenticación

Sistema de autenticación que incluye:
- Función `verificarAutenticacion()`: Protege páginas
- Función `obtenerUsuarioActual()`: Obtiene datos del usuario
- Función `tieneRol()`: Verifica roles de usuario
- Verificación de usuarios activos
- Actualización de último acceso

### `cambiar_password.php` - Cambio de Contraseña

Página para cambiar la contraseña del usuario:
- Validación de contraseña actual
- Verificación de coincidencia de nuevas contraseñas
- Hash seguro con `password_hash()`
- Recomendaciones de seguridad

### `logout.php` - Cerrar Sesión

Script que destruye la sesión y redirige al login.

### `config/db.php` - Conexión a Base de Datos

- Clase `Database` con patrón Singleton
- Métodos helper: `getDB()`, `getDatabase()`, `query()`
- Manejo seguro de errores y excepciones
- Soporte para transacciones

### `includes/header.php`

- DOCTYPE HTML5
- Meta tags responsive
- Bootstrap 5.3.2 (CDN)
- Bootstrap Icons
- Enlace a CSS personalizado

### `includes/sidebar.php`

- Menú de navegación lateral
- Indicador de página activa
- Iconos de Bootstrap Icons
- Diseño responsive (colapsable en móviles)

### `assets/css/style.css`

- Variables CSS personalizadas
- Estilos para sidebar, cards, tablas
- Cards de estadísticas con gradientes
- Spinner de carga
- Diseño responsive

### `assets/js/main.js`

- Inicialización de tooltips y popovers
- Manejo de sidebar en móviles
- Formateo de moneda mexicana
- Confirmaciones de eliminación
- Funciones helper para alertas y loading

## 🔒 Seguridad

### Implementaciones de Seguridad

1. **PDO con Prepared Statements**: Prevención de inyecciones SQL
2. **Control de Acceso**: Constante `APP_ACCESS` para prevenir acceso directo
3. **Escape de Output**: Uso de `htmlspecialchars()` en datos de usuario
4. **Manejo de Errores**: Logging de errores sin exponer información sensible
5. **Transacciones**: Soporte para operaciones atómicas

### Buenas Prácticas

- ✅ Nunca exponer credenciales en el código
- ✅ Usar variables de entorno en producción (recomendado)
- ✅ Validar y sanitizar todos los inputs
- ✅ Usar HTTPS en producción
- ✅ Sistema de autenticación de usuarios implementado
- ✅ Manejo de sesiones seguro
- ✅ Hash de contraseñas con `password_hash()`

## 🚀 Deployment Automatizado

Para automatizar el proceso de actualización de la aplicación en cPanel, consulta la [Guía de Deployment](DEPLOYMENT.md) que incluye:

- **Git Hooks**: Deployment automático vía SSH/Git (recomendado)
- **Scripts FTP/SFTP**: Deployment vía FTP para servidores sin SSH
- **GitHub Actions**: CI/CD automatizado
- **Scripts de backup**: Respaldos automáticos antes de desplegar

### Inicio Rápido

1. Revisa `DEPLOYMENT.md` para ver todas las opciones
2. Elige el método que mejor se adapte a tu infraestructura
3. Configura los archivos de ejemplo:
   - `deploy.config.production.sh.example` → `deploy.config.production.sh`
   - `deploy.config.ini.example` → `deploy.config.ini`
4. Ejecuta el script de deployment correspondiente

## 📝 Próximos Pasos

### Archivos CRUD Pendientes

- [ ] `ventas.php` - Gestión de ventas
- [ ] `inventario.php` - Control de inventario de ingredientes
- [ ] `platillos.php` - Gestión de platillos y menú
- [ ] `clientes.php` - CRUD de clientes
- [ ] `gastos.php` - Registro de gastos
- [ ] `reportes.php` - Reportes y análisis

### Funcionalidades Pendientes

- [x] Sistema de autenticación y sesiones ✅
- [ ] Subida de imágenes para platillos
- [ ] Exportación de reportes (PDF, Excel)
- [ ] Búsqueda y filtros avanzados
- [ ] Modales para formularios (`/modals/`)
- [ ] Validación de formularios en frontend y backend
- [ ] Paginación en listados
- [ ] Notificaciones en tiempo real

## 📊 Changelog

### [Versión 1.0.0] - 2024-12-XX

#### ✨ Agregado
- Estructura inicial del proyecto
- Script SQL completo con todas las tablas
- Archivo de configuración `config/db.php` con conexión PDO segura
- Estructura de carpetas (`/config`, `/includes`, `/assets`)
- `includes/header.php` con Bootstrap 5
- `includes/footer.php` con scripts
- `includes/sidebar.php` con menú de navegación
- `assets/css/style.css` con estilos personalizados
- `assets/js/main.js` con funciones JavaScript
- `index.html` - Página de presentación del proyecto
- `index.php` - Dashboard completo con estadísticas (protegido con autenticación)
- `login.php` - Sistema de autenticación
- `logout.php` - Cerrar sesión
- `cambiar_password.php` - Cambio de contraseña
- `includes/auth.php` - Sistema de verificación de autenticación
- `crear_usuario_admin.php` - Script para crear usuario admin inicial
- `README.md` - Documentación del proyecto

#### 🔧 Características Técnicas
- Patrón Singleton para conexión a base de datos
- Consultas SQL optimizadas con índices
- Diseño responsive con Bootstrap 5
- Manejo de errores con try-catch
- Funciones helper para operaciones comunes

---

## 👨‍💻 Desarrollo

Este proyecto está diseñado para ser alojado en **cPanel** y utiliza tecnologías estándar compatibles con la mayoría de los hosting compartidos.

### Notas para Desarrollo

- El proyecto usa PHP nativo sin frameworks para máxima compatibilidad
- Todas las consultas usan PDO con prepared statements
- El código sigue las PSR básicas de PHP
- Los comentarios están en español para facilitar el mantenimiento

---

**Desarrollado con ❤️ para Cocinas Económicas**
