Hola @rociohub,
Los compañeros @sergio_dev y @raul_store han dado en el clavo. Tu código actual no persiste los cambios porque, como bien señala Sergio, loyalty_points no es un atributo estándar del objeto Customer y, aunque lo fuera, te falta la llamada al método update() para guardar los datos en la base de datos. Para que esto funcione, primero tendrías que haber extendido la clase Customer (por ejemplo, en override/classes/Customer.php) para añadir este campo a su definición de objeto y a la tabla ps_customer.
Aquí te muestro cómo se vería el fragmento de tu hook una vez que el campo loyalty_points ya esté definido correctamente en el objeto Customer y la columna en la base de datos:
public function hookActionObjectOrderAddAfter($params)
{
$order = $params['object'];
if (Validate::isLoadedObject($order) && $order->id_customer) {
$customer = new Customer((int)$order->id_customer);
if (Validate::isLoadedObject($customer)) {
$pointsToAdd = (int)($order->total_paid_tax_incl / Configuration::get('LOYALTY_POINT_VALUE', 10));
$customer->loyalty_points = (int)$customer->loyalty_points + $pointsToAdd;
$customer->update(); // ¡Esta línea es crucial para guardar los cambios!
}
}
}
Esta solución con un override y un hook custom puede funcionar, pero como dice Raúl, la gestión de puntos de lealtad es mucho más compleja (devoluciones, canjeos, caducidad, etc.). Mantener un sistema así de forma manual es propenso a errores y a romperse con futuras actualizaciones de PrestaShop (especialmente si pasas de PS 1.7.8.6 a PS 8.x o superior).
Para una tienda en producción, te recomiendo encarecidamente utilizar una herramienta de puntos de lealtad dedicada. Estos módulos ya se encargan de toda la lógica de cálculo, gestión de estados (pendientes, canjeados, cancelados), historial de puntos, y son mucho más fáciles de mantener y actualizar.