Agregada fila de suma mensual en reporte de pagos y PDF

This commit is contained in:
Administrador Ibiza
2025-12-29 23:53:46 -06:00
parent 5289fd4133
commit d20a51197d
7 changed files with 36 additions and 1629 deletions

View File

@@ -1,226 +0,0 @@
(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