Files

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.