# Guía de Instalación - Parte Diario Docente

Sistema de gestión de partes diarios docentes desarrollado con CodeIgniter 4, Shield (autenticación) y Tailwind CSS.

---

## 1. Requisitos previos

Asegúrate de tener instalado en tu máquina:

| Requisito     | Versión mínima | Verificar            |
| ------------- | -------------- | -------------------- |
| PHP           | 8.2+           | `php -v`             |
| Composer      | 2.x            | `composer -V`        |
| Node.js / npm | 16+ / 9+       | `node -v` / `npm -v` |
| MySQL         | 8.0+           | (Laragon lo incluye) |
| Servidor web  | Apache         | Laragon / XAMPP      |

Extensiones PHP requeridas: `intl`, `mbstring`, `json`, `mysqlnd`, `openssl`.

---

## 2. Clonar el repositorio

```bash
cd C:\laragon\www
git clone https://github.com/jyhirozth/parte-diario-docente.git
```

> Si usas Laragon, la carpeta debe quedar dentro de `C:\laragon\www\` para que funcione el virtual host automático.

---

## 3. Instalar dependencias PHP

```bash
cd C:\laragon\www\parte-diario-docente
composer install
```

Esto instala CodeIgniter 4, Shield, DomPDF y PhpSpreadsheet.

---

## 4. Instalar dependencias CSS/JS (Tailwind CSS)

```bash
npm install
```

Compilar los estilos de Tailwind:

```bash
npm run build:css
```

> Si vas a desarrollar, puedes ejecutar `npm run watch:css` para que recompile automáticamente al guardar archivos.

---

## 5. Configurar el archivo .env

Copia el archivo `env` como `.env` y edítalo:

```bash
copy env .env
```

Edita `app/Config/Paths.php` si es necesario (por defecto apunta a `public/`).

En `.env` configura los siguientes valores:

```ini
CI_ENVIRONMENT = development

app.baseURL = 'http://localhost/parte-diario-docente/public/'

database.default.hostname = localhost
database.default.database = parte-diario-docente
database.default.username = root
database.default.password =
database.default.DBDriver = MySQLi
database.default.port = 3306
```

> **Nota:** Si usas Laragon, el usuario MySQL es `root` y la contraseña está vacía por defecto. Ajusta según tu configuración.

---

## 6. Crear la base de datos

Abre MySQL (Consola de Laragon, phpMyAdmin o cualquier cliente) y ejecuta:

```sql
CREATE DATABASE `parte-diario-docente`
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_general_ci;
```

---

## 7. Ejecutar migraciones

**IMPORTANTE:** Se debe usar `--all` para que se ejecuten las migraciones de Shield (tablas de autenticación) ANTES de las migraciones del proyecto:

```bash
php spark migrate --all
```

Esto crea en orden:
1. Tablas de Shield: `users`, `auth_identities`, `auth_logins`, `auth_token_logins`, `auth_remember_tokens`, `auth_groups_users`, `auth_permissions_users`
2. Tablas del proyecto: `personal`, `programas`, `docentes`, `periodos_academicos`, `cursos`, `feriados`, `horario_academico`, `franjas_academicas`, `disponibilidad_docente`, `asignaciones`, `horarios`, `registros_sesion`, `config_sistema`, `auditoria`, `notificaciones`, `solicitudes_password`, `login_attempts`
3. Tablas de Settings (CodeIgniter Settings)

> **Si ejecutas `php spark migrate` sin `--all`**, fallará porque intenta crear la tabla `personal` antes de que exista la tabla `users` de Shield.

---

## 8. Cargar datos iniciales (Seeders)

```bash
php spark db:seed MainSeeder
```

Esto ejecuta los siguientes seeders en orden:

| Seeder                      | Descripción                                    |
|-----------------------------|------------------------------------------------|
| UserSeeder                  | Usuarios y roles del sistema                   |
| PersonalSeeder              | Datos personales de cada usuario               |
| ProgramasSeeder             | Programas académicos                           |
| DocentesSeeder              | Registro de docentes                           |
| PeriodosAcademicosSeeder    | Periodos académicos del año                    |
| CursosSeeder                | Cursos asignados                               |
| HorarioAcademicoSeeder      | Configuración de horarios académicos           |
| FranjasAcademicasSeeder     | Franjas horarias del día                       |
| AsignacionesSeeder          | Asignación docente-curso-horario               |
| HorariosSeeder              | Horarios individuales de cada docente          |
| RegistrosSesionSeeder       | Registros de sesión de ejemplo                 |
| ConfigSistemaSeeder         | Configuración general del sistema              |

---

## 9. Credenciales de acceso

### Usuarios de administración y coordinación (login con email y contraseña)

| Usuario     | Email                  | Contraseña         | Rol          |
|-------------|------------------------|--------------------|--------------|
| admin       | admin@gmail.com        | admin123           | admin        |
| jonatan     | coordinador@gmail.com  | coordinador123     | coordinador  |

---

## 10. Estructura de roles y permisos

| Rol           | Acceso                          |
|---------------|---------------------------------|
| `admin`       | Panel completo: usuarios, configuración, docentes, registros, reportes, auditoría |
| `coordinador` | Gestión académica: cursos, horarios, asignaciones, disponibilidad, registros, reportes |
| `docente`     | Consulta: clases, horario, historial, perfil, registro de sesiones |
