# Sistema de Bolsa de Trabajo - IESTP "Joaquín Reátegui Medina"

Este proyecto es un sistema web integral para la gestión de una bolsa de trabajo, diseñado específicamente para el **IESTP "Joaquín Reátegui Medina"**. La plataforma conecta a alumnos y egresados con oportunidades laborales ofrecidas por empresas registradas, todo bajo la supervisión de los administradores del instituto.

El sistema cuenta con una interfaz moderna y responsiva basada en **AdminLTE 3** y está construido con **PHP 8** y **MySQL**.

---

## ✨ Características Principales

El sistema está organizado en módulos según el tipo de usuario, cada uno con funcionalidades específicas:

### 👨‍💼 Módulo de Administración
- **Gestión Total de Usuarios**: Creación, visualización, edición y eliminación de todos los tipos de usuarios (alumnos, egresados, empresas, etc.).
- **Gestión de Contenido**: Administración de ofertas laborales, programas de estudio y perfiles de empresas.
- **Validación de Egresados**: Activación y desactivación de cuentas de egresados para controlar el acceso.
- **Carga Masiva**: Funcionalidad para importar alumnos desde un archivo CSV, agilizando el registro.
- **Reportes Personalizados**: Generación de reportes dinámicos de alumnos y egresados con filtros por fechas y programas de estudio.
- **Exportación de Datos**: Exportación de listados (ofertas, usuarios, alumnos, etc.) a formatos **PDF** y **Excel (CSV)**.
- **Sistema de Notificaciones**: Envío de notificaciones personalizadas a usuarios o grupos de usuarios.

### 🎓 Módulo de Alumno / Egresado
- **Perfil Profesional Completo**: Gestión de información personal, foto, experiencia laboral, capacitaciones e idiomas.
- **Generación de CV en PDF**: Creación y descarga automática de un currículum vitae profesional en formato PDF basado en la información del perfil.
- **Búsqueda y Postulación**: Búsqueda avanzada de ofertas laborales y postulación con un solo clic.
- **Seguimiento de Postulaciones**: Visualización del estado de las postulaciones realizadas.
- **Notificaciones**: Recepción de alertas sobre nuevas ofertas de trabajo o cambios en el estado de sus postulaciones.

### 🏢 Módulo de Empresa
- **Gestión de Perfil**: Administración de la información de la empresa, incluyendo logo y descripción.
- **Publicación de Ofertas**: Creación y gestión de ofertas de trabajo dirigidas a los perfiles del instituto.
- **Gestión de Postulantes**: Visualización y seguimiento de los alumnos/egresados que postulan a sus ofertas.
- **Gestión de Estados de Postulación**: Actualización del estado de las postulaciones (pendiente, revisado, aceptado, rechazado).

### 🔗 Sistema de URLs Amigables
- **Router Inteligente**: El sistema utiliza un router personalizado que maneja URLs amigables sin necesidad de archivos `.php` en la URL.
- **URLs Limpias**: Acceso a recursos mediante rutas como `/admin/jobs`, `/company/jobs/new`, `/student/profile` en lugar de archivos PHP directos.
- **Compatibilidad**: Funciona tanto con URLs amigables como con acceso directo a archivos PHP.

---

## 🛠️ Tecnologías Utilizadas

- **Backend**: PHP 8
- **Base de Datos**: MySQL
- **Frontend**: HTML5, CSS3, JavaScript
- **Framework/Plantilla**: [AdminLTE 3](https://adminlte.io/) (basado en Bootstrap 5)
- **Librerías**:
  - **TCPDF**: Para la generación de reportes y CVs en formato PDF.
  - **jQuery & DataTables**: Para tablas interactivas y responsivas.
  - **Bootstrap 5**: Como base del diseño responsivo.

---

## 🚀 Instalación y Puesta en Marcha

Sigue estos pasos para instalar el proyecto en un entorno de desarrollo local.

### Prerrequisitos
- Un servidor web local como XAMPP, WAMP o MAMP.
- **PHP 8.0** o superior.
- **MySQL** o MariaDB.
- Un gestor de base de datos como phpMyAdmin o DBeaver.

### 1. Clonar el Repositorio

```bash
git clone <URL_DEL_REPOSITORIO> bolsa-trabajo
cd bolsa-trabajo
```

### 2. Configurar la Base de Datos

1.  Abre tu gestor de base de datos (ej. phpMyAdmin).
2.  Crea una nueva base de datos llamada `bolsa_trabajo`.
    ```sql
    CREATE DATABASE IF NOT EXISTS bolsa_trabajo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    ```
3.  Importa el esquema y los datos iniciales ejecutando el contenido del archivo `schema.sql` en la base de datos recién creada.

### 3. Configurar la Conexión a la Base de Datos

1.  Navega a la carpeta `includes/`.
2.  Edita el archivo `db.php` con tus credenciales de la base de datos:

    ```php
    <?php
    $host = 'localhost';
    $db   = 'bolsa_trabajo';
    $user = 'root'; // Tu usuario de MySQL
    $pass = '';     // Tu contraseña de MySQL
    $charset = 'utf8mb4';
    // ...
    ```

### 4. Iniciar el Servidor

Copia la carpeta del proyecto en el directorio `htdocs` (XAMPP) o `www` (WAMP/MAMP) de tu servidor local. Inicia los servicios de Apache y MySQL.

### 5. Acceder al Sistema

Abre tu navegador y ve a `http://localhost/bolsa2/login.php`.

Puedes usar las siguientes credenciales de administrador por defecto (definidas en `schema.sql`):
- **Usuario**: `admin`
- **Contraseña**: `password`

> **Nota de Seguridad**: Es **muy importante** que cambies la contraseña del administrador por defecto después de tu primer inicio de sesión.

---

## 🏛️ Estructura del Proyecto

El proyecto está organizado de la siguiente manera para mantener una separación clara de responsabilidades:

- `/`: Archivos principales de acceso público (login, registro, etc.).
- `/admin/`: Módulo del administrador.
- `/company/`: Módulo de la empresa.
- `/student/`: Módulo del alumno.
- `/graduate/`: Módulo del egresado.
- `/teacher/`: Módulo del profesor.
- `/includes/`: Archivos PHP reutilizables (conexión a BD, autenticación, layout).
- `/assets/`: Archivos estáticos como CSS, JS e imágenes.
- `/uploads/`: Directorio para archivos subidos por los usuarios (fotos, CVs, etc.).
