6.9 KiB
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.