feat: Agregar filtros avanzados a reporte de Deudores de Conceptos
- Filtros por casas: selección múltiple con opción 'Todas las casas' - Filtros por conceptos: selección múltiple con opción 'Todos los conceptos' - Estado inicial: todos los filtros marcados por defecto (muestra toda la info) - Exportación PDF: incluye solo datos filtrados según selección - JavaScript interactivo: lógica de checkboxes con estados intermedios - Modelo actualizado: método getConceptDebtorsFiltered para filtrado avanzado - Interfaz intuitiva: scrollable containers para listas largas - Preserva permisos: respeta restricciones de acceso por casas
This commit is contained in:
226
docs/ESPECIFICACION_COMPLETA.md
Executable file
226
docs/ESPECIFICACION_COMPLETA.md
Executable file
@@ -0,0 +1,226 @@
|
||||
(Documento convertido a PHP puro con MySQL)
|
||||
|
||||
## ESPECIFICACIÓN COMPLETA PARA SISTEMA IBIZA CEA
|
||||
|
||||
## Desarrollo desde Cero con PHP Puro + MySQL
|
||||
|
||||
---
|
||||
|
||||
## 📋 RESUMEN EJECUTIVO
|
||||
|
||||
**Proyecto**: Sistema de Gestión Integral para Condominio IBIZA CEA
|
||||
**Tecnología**: PHP 8.x (procedimental / OOP simple) + MySQL 8.0
|
||||
**Arquitectura**: Aplicación web monolítica clásica (MVC ligero propio)
|
||||
**Objetivo**: Unificar dos sistemas separados en una plataforma estable, sin frameworks
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ ARQUITECTURA TÉCNICA
|
||||
|
||||
### Stack Tecnológico
|
||||
|
||||
```
|
||||
Backend: PHP 8.x (sin framework)
|
||||
Frontend: HTML5 + CSS3 + Bootstrap 5 + JavaScript
|
||||
Base de Datos: MySQL 8.0 (PDO)
|
||||
Autenticación: Sesiones PHP + password_hash()
|
||||
API Interna: Endpoints PHP (JSON)
|
||||
```
|
||||
|
||||
### Estructura de Directorios
|
||||
|
||||
```
|
||||
ibizacea/
|
||||
├── config/
|
||||
│ └── database.php
|
||||
├── core/
|
||||
│ ├── Database.php
|
||||
│ ├── Auth.php
|
||||
│ └── Router.php
|
||||
├── models/
|
||||
│ ├── User.php
|
||||
│ ├── House.php
|
||||
│ ├── Payment.php
|
||||
│ ├── Expense.php
|
||||
│ └── ActivityLog.php
|
||||
├── controllers/
|
||||
│ ├── auth.php
|
||||
│ ├── dashboard.php
|
||||
│ ├── payments.php
|
||||
│ ├── finance.php
|
||||
│ └── reports.php
|
||||
├── views/
|
||||
│ ├── layout/
|
||||
│ ├── dashboard/
|
||||
│ ├── payments/
|
||||
│ └── finance/
|
||||
├── public/
|
||||
│ ├── index.php
|
||||
│ └── assets/
|
||||
└── sql/
|
||||
└── schema.sql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🗄️ DISEÑO DE BASE DE DATOS (MySQL)
|
||||
|
||||
### Tabla users
|
||||
|
||||
```sql
|
||||
CREATE TABLE users (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
username VARCHAR(180) UNIQUE NOT NULL,
|
||||
email VARCHAR(180) UNIQUE NOT NULL,
|
||||
password VARCHAR(255) NOT NULL,
|
||||
first_name VARCHAR(100),
|
||||
last_name VARCHAR(100),
|
||||
role ENUM('ADMIN','CAPTURIST','VIEWER') DEFAULT 'VIEWER',
|
||||
is_active TINYINT(1) DEFAULT 1,
|
||||
last_login DATETIME NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
### Tabla houses
|
||||
|
||||
```sql
|
||||
CREATE TABLE houses (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
number VARCHAR(10) UNIQUE NOT NULL,
|
||||
status VARCHAR(20),
|
||||
consumption_only TINYINT(1) DEFAULT 0,
|
||||
owner_name VARCHAR(200),
|
||||
owner_email VARCHAR(180),
|
||||
owner_phone VARCHAR(20)
|
||||
);
|
||||
```
|
||||
|
||||
### Tabla payments
|
||||
|
||||
```sql
|
||||
CREATE TABLE payments (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
house_id INT NOT NULL,
|
||||
year INT NOT NULL,
|
||||
month VARCHAR(20) NOT NULL,
|
||||
amount DECIMAL(10,2) DEFAULT 0,
|
||||
payment_date DATETIME NULL,
|
||||
created_by INT,
|
||||
FOREIGN KEY (house_id) REFERENCES houses(id)
|
||||
);
|
||||
```
|
||||
|
||||
### Tabla expenses
|
||||
|
||||
```sql
|
||||
CREATE TABLE expenses (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
description VARCHAR(300),
|
||||
amount DECIMAL(10,2),
|
||||
expense_date DATE,
|
||||
category VARCHAR(100),
|
||||
notes TEXT
|
||||
);
|
||||
```
|
||||
|
||||
### Tabla activity_logs
|
||||
|
||||
```sql
|
||||
CREATE TABLE activity_logs (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id INT,
|
||||
action VARCHAR(100),
|
||||
details TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 AUTENTICACIÓN Y ROLES
|
||||
|
||||
### Login PHP (ejemplo)
|
||||
|
||||
```php
|
||||
session_start();
|
||||
$user = User::findByUsername($_POST['username']);
|
||||
|
||||
if ($user && password_verify($_POST['password'], $user['password'])) {
|
||||
$_SESSION['user_id'] = $user['id'];
|
||||
$_SESSION['role'] = $user['role'];
|
||||
}
|
||||
```
|
||||
|
||||
### Roles
|
||||
|
||||
* ADMIN: Acceso total
|
||||
* CAPTURIST: Registrar pagos y gastos
|
||||
* VIEWER: Solo lectura
|
||||
|
||||
---
|
||||
|
||||
## 🎛️ CONTROLADORES (PHP)
|
||||
|
||||
### dashboard.php
|
||||
|
||||
```php
|
||||
require '../core/Auth.php';
|
||||
Auth::check();
|
||||
|
||||
$data = Dashboard::getData($_GET['year'] ?? date('Y'));
|
||||
require '../views/dashboard/index.php';
|
||||
```
|
||||
|
||||
### payments.php
|
||||
|
||||
```php
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
Payment::update($_POST);
|
||||
echo json_encode(['success' => true]);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎨 VISTAS (HTML + PHP)
|
||||
|
||||
### layout/base.php
|
||||
|
||||
```php
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>IBIZA CEA</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<?php include $view; ?>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 DESPLIEGUE
|
||||
|
||||
### Requisitos
|
||||
|
||||
* PHP 8.x
|
||||
* MySQL 8.0
|
||||
* Apache o Nginx
|
||||
|
||||
### index.php
|
||||
|
||||
```php
|
||||
require '../config/database.php';
|
||||
require '../core/Router.php';
|
||||
Router::dispatch();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## AGREGAR MODULO PARA IMPORTAR
|
||||
|
||||
--De acuerdo a la relación de la base de datos crear un modulo para poder importar datos de forma masiva y coherente con el sistema.
|
||||
--Cada importación tendrá un archivo descargable de ejemplo para poder hacer la importación
|
||||
Reference in New Issue
Block a user