187 lines
6.9 KiB
Markdown
187 lines
6.9 KiB
Markdown
# CHANGES.md — AutoBooking Admin Dashboard
|
|
|
|
**Fecha:** 2026-05-29
|
|
**Autor:** Claude Code (claude-sonnet-4-6)
|
|
**Tarea:** PARTE A: fix rol corporate_admin + PARTE B: nuevo plugin autobooking-admin-dashboard
|
|
|
|
---
|
|
|
|
## ESTADO INICIAL (antes de tocar nada)
|
|
|
|
### Plugins existentes
|
|
| Plugin | Versión | Archivo principal |
|
|
|--------|---------|-------------------|
|
|
| autobooking-driver-dashboard | 2.0.0 | autobooking-driver-dashboard.php |
|
|
| autobooking-passenger-dashboard | 1.0.0 | autobooking-passenger-dashboard.php |
|
|
| autobooking-corporate-dashboard | (sin versión definida) | autobooking-corporate-dashboard.php |
|
|
| autobooking-roles | 1.0.0 | autobooking-roles.php |
|
|
|
|
### wp_snippets
|
|
VACÍO. No hay snippets activos. El plugin Code Snippets está instalado pero sin snippets.
|
|
|
|
### wp_options con prefijo fare/tariff/autobooking
|
|
NINGUNA. No existe configuración de tarifas en wp_options.
|
|
|
|
### Tablas de tarifas dedicadas
|
|
NO EXISTEN. Búsqueda de tablas con LIKE '%rate%', '%fare%', '%tarif%', '%price%' devolvió vacío.
|
|
|
|
### Sistema de tarifas actual (HALLAZGO CRITICO)
|
|
Las tarifas están hardcodeadas en cada plugin con inconsistencias:
|
|
|
|
- autobooking-passenger-dashboard.php linea 317:
|
|
$base_fare = 2.50 + $per_mile (usa MILLAS)
|
|
|
|
- autobooking-corporate-dashboard.php lineas 514-515:
|
|
$base = 3.00 + $per_km = 1.80 (usa KILOMETROS)
|
|
|
|
Conclusion: No existe un sistema centralizado de tarifas. Los valores son diferentes
|
|
entre plugins y usan unidades distintas (millas vs km). Ver TODOs al final.
|
|
|
|
### Bug critico identificado
|
|
- autobooking-roles v1.0.0 crea roles 'driver' y 'driver_pending' pero NO 'corporate_admin'
|
|
- El corporate dashboard verifica in_array('corporate_admin', $user->roles) -> acceso denegado siempre
|
|
|
|
### Esquema de tablas verificado
|
|
Todas las tablas inspeccionadas. Tabla wp_ab_trips incluye columna country_code char(2).
|
|
Tabla wp_ab_company_users: columna user_id bigint(20) NULL (puede o no tener WP user ligado).
|
|
|
|
---
|
|
|
|
## CAMBIOS REALIZADOS
|
|
|
|
### PARTE A -- autobooking-roles.php
|
|
|
|
[MODIFICADO] -- /wp-content/plugins/autobooking-roles/autobooking-roles.php -- v1.0.0 -> v1.1.0
|
|
|
|
Que cambio:
|
|
- Agregado rol 'corporate_admin' con caps read + read_corporate_dashboard
|
|
- Agregada cap custom 'manage_autobooking' asignada a 'administrator'
|
|
- Agregada funcion migracion retroactiva abr_migrate_existing_corporate_users() en activation hook
|
|
- Version bumped a 1.1.0
|
|
|
|
CODIGO ORIGINAL COMPLETO (para revertir):
|
|
|
|
--- INICIO ORIGINAL ---
|
|
<?php
|
|
/**
|
|
* Plugin Name: AutoBooking Roles (Drivers)
|
|
* Description: Crea los roles "Driver" y "Pending Driver" y capacidades para controlar acceso a dashboards.
|
|
* Version: 1.0.0
|
|
* Author: AutoBooking
|
|
*/
|
|
|
|
if (!defined('ABSPATH')) { exit; }
|
|
|
|
define('ABR_ROLE_DRIVER', 'driver');
|
|
define('ABR_ROLE_DRIVER_PENDING', 'driver_pending');
|
|
define('ABR_CAP_READ_DRIVER_DASH', 'read_driver_dashboard');
|
|
define('ABR_CAP_READ_CUST_DASH', 'read_customer_dashboard');
|
|
|
|
function abr_register_roles_caps() {
|
|
$driver_caps = [ 'read' => true, ABR_CAP_READ_DRIVER_DASH => true ];
|
|
if (!get_role(ABR_ROLE_DRIVER)) {
|
|
add_role(ABR_ROLE_DRIVER, 'Driver', $driver_caps);
|
|
} else {
|
|
$r = get_role(ABR_ROLE_DRIVER);
|
|
foreach ($driver_caps as $cap => $grant) {
|
|
if (!$r->has_cap($cap)) { $r->add_cap($cap, $grant); }
|
|
}
|
|
}
|
|
|
|
$pending_caps = [ 'read' => true ];
|
|
if (!get_role(ABR_ROLE_DRIVER_PENDING)) {
|
|
add_role(ABR_ROLE_DRIVER_PENDING, 'Pending Driver', $pending_caps);
|
|
} else {
|
|
$r = get_role(ABR_ROLE_DRIVER_PENDING);
|
|
foreach ($pending_caps as $cap => $grant) {
|
|
if (!$r->has_cap($cap)) { $r->add_cap($cap, $grant); }
|
|
}
|
|
}
|
|
|
|
if ($admin = get_role('administrator')) {
|
|
if (!$admin->has_cap(ABR_CAP_READ_DRIVER_DASH)) { $admin->add_cap(ABR_CAP_READ_DRIVER_DASH); }
|
|
if (!$admin->has_cap(ABR_CAP_READ_CUST_DASH)) { $admin->add_cap(ABR_CAP_READ_CUST_DASH); }
|
|
}
|
|
}
|
|
register_activation_hook(__FILE__, 'abr_register_roles_caps');
|
|
add_action('init', 'abr_register_roles_caps');
|
|
--- FIN ORIGINAL ---
|
|
|
|
### PARTE B -- autobooking-admin-dashboard (nuevo plugin)
|
|
|
|
[ANADIDO] -- /wp-content/plugins/autobooking-admin-dashboard/autobooking-admin-dashboard.php -- v1.0.0
|
|
[ANADIDO] -- /wp-content/plugins/autobooking-admin-dashboard/assets/admin-dashboard.css
|
|
[ANADIDO] -- /wp-content/plugins/autobooking-admin-dashboard/assets/admin-dashboard.js
|
|
|
|
Tablas creadas en activacion (via dbDelta):
|
|
|
|
wp_ab_admin_audit:
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PK
|
|
admin_user_id BIGINT UNSIGNED
|
|
action VARCHAR(60)
|
|
target_type VARCHAR(40)
|
|
target_id BIGINT UNSIGNED
|
|
meta LONGTEXT NULL
|
|
created_at DATETIME
|
|
Keys: admin_user_id, (target_type,target_id), created_at
|
|
|
|
wp_ab_fare_config:
|
|
id BIGINT UNSIGNED AUTO_INCREMENT PK
|
|
country_code CHAR(2) UNIQUE
|
|
currency CHAR(3) DEFAULT 'USD'
|
|
base_fare DECIMAL(10,2) DEFAULT 3.00
|
|
per_km DECIMAL(10,4) DEFAULT 1.80
|
|
per_minute DECIMAL(10,4) DEFAULT 0.30
|
|
platform_fee_pct DECIMAL(5,4) DEFAULT 0.2000
|
|
minimum_fare DECIMAL(10,2) DEFAULT 5.00
|
|
active TINYINT(1) DEFAULT 1
|
|
updated_at DATETIME
|
|
|
|
---
|
|
|
|
## COMO REVERTIR
|
|
|
|
### Revertir PARTE A:
|
|
1. WP Admin -> Plugins -> AutoBooking Roles -> Desactivar
|
|
2. Reemplazar contenido del PHP con el CODIGO ORIGINAL de arriba
|
|
3. Reactivar
|
|
4. Los roles ya creados en DB no se borran (comportamiento seguro de WordPress)
|
|
|
|
### Revertir PARTE B:
|
|
1. WP Admin -> Plugins -> AutoBooking Admin Dashboard -> Desactivar
|
|
2. Borrar directorio /wp-content/plugins/autobooking-admin-dashboard/
|
|
3. Tablas wp_ab_admin_audit y wp_ab_fare_config quedan en DB (por seguridad)
|
|
4. Para borrar tablas manualmente:
|
|
DROP TABLE IF EXISTS wp_ab_admin_audit;
|
|
DROP TABLE IF EXISTS wp_ab_fare_config;
|
|
|
|
---
|
|
|
|
## TODOs / DECISIONES PENDIENTES PARA EL DUENO
|
|
|
|
1. [DECISION URGENTE] Inconsistencia de unidades en tarifas:
|
|
- passenger-dashboard calcula en MILLAS con base $2.50
|
|
- corporate-dashboard calcula en KILOMETROS con base $3.00
|
|
- El admin dashboard usa km (consistente con la columna fare_distance_m en metros de wp_ab_trips)
|
|
- Accion requerida: migrar passenger dashboard a km y unificar valores base
|
|
|
|
2. [TODO] Verificacion de documentos de conductores:
|
|
- La cola de aprobacion muestra datos basicos pero NO documentos (licencia, seguro, foto vehiculo)
|
|
- No existe tabla ni columnas para almacenar URLs de documentos en la DB actual
|
|
- Accion: crear wp_ab_driver_documents o usar wp_usermeta
|
|
|
|
3. [TODO] Motor de despacho (matching conductor-pasajero):
|
|
- Fuera del alcance de este prompt.
|
|
|
|
4. [TODO] Stripe Connect / payouts:
|
|
- Fuera del alcance. La config de comision existe en el admin pero no ejecuta pagos.
|
|
|
|
5. [CANDIDATO A ELIMINAR] Tablas duplicadas de rides:
|
|
- wp_ab_rides y wp_autobooking_rides parecen versiones antiguas (no usadas por plugins v2)
|
|
- NO se borraron. Decision pendiente del dueno.
|
|
|
|
6. [CANDIDATO A ELIMINAR] wp_ab_scheduled_trips:
|
|
- Driver dashboard v2 usa wp_ab_trips con status='assigned' para viajes programados
|
|
- wp_ab_scheduled_trips parece una version anterior sin uso activo
|
|
- NO se borró. Decision pendiente del dueno.
|