Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hotfix - Flujos de trabajo - Corrección del manejo de zonas horarias en flujos de trabajo desde actualización masiva. #539

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from

Conversation

PaulaaSTIC
Copy link
Collaborator

@PaulaaSTIC PaulaaSTIC commented Jan 13, 2025

Descripción del problema

Al ejecutar un workflow que manipula fechas, se ha detectado un comportamiento inconsistente en el manejo de zonas horarias:

  • En la vista de edición: Las fechas se procesan correctamente según la zona horaria del usuario (ej: Europe/Madrid)
  • En actualización masiva: Las fechas se convierten incorrectamente a UTC, resultando en una hora menos de la esperada

El problema se origina en FormulaCalculator::getDBFormat() cuando llama a $timedate->tzUser($date, $current_user). En el contexto de actualización masiva, esta función acaba utilizando GMT/UTC en lugar de la zona horaria del usuario debido a la lógica en TimeDate::_getUserTZ().

private function getDBFormat($date) {
// 1) If WF is thrown by the after_save LH, the bean is already loaded and the date/datetime value
// is properly formatted, so will only change the timezone value from UTC to user's one.
// 2) If WF is run by the scheduler task, will change date/datetime value to DB format.
$formatDate = 'Y-m-d';
$validDate = DateTime::createFromFormat($formatDate, $date);
$formatDateTime = 'Y-m-d H:i:s';
$validDateTime = DateTime::createFromFormat($formatDateTime, $date);
if ($validDate && $validDate->format($formatDate) === $date) {
// Nothing to do
return $date;
} else if ($validDateTime && $validDateTime->format($formatDateTime) === $date) {
// Set TZ to user's TZ
global $timedate, $current_user;
$date = $timedate->fromDb($date);
$date = $timedate->tzUser($date, $current_user);
return $date->format('Y-m-d H:i:s');

Se ha modificado FormulaCalculator::getDBFormat() para manejar específicamente el caso de actualización masiva, asegurando que se utilice la zona horaria correcta del usuario en todos los contextos.

Como probarlo

  1. Crear un flujo de trabajo con las siguientes característicaS:
  • Ejecutar: Siempre
  • Ejecutar en: Todos los registros
  • Ejecuciones repetitivvas: Si
  • Acción: Calcular campos.
  • Añadir como parámetro un campo de fecha y hora, como "Fecha de modificación" {P0}, con la siguiente fórmula:
    Nombre = ({date(d-m-Y H:i; {P0})})
  1. Ir a un registro del módulo del flujo de trabajo y realizar las siguientes pruebas:
  • Ejecutar el flujo de trabajo desde la vista de edición.
  • Ejecutar el flujo de trabajo desde la actualización masiva en la vista de lista.
  1. Verificar que, en ambos casos, el campo "Nombre" muestra el mismo valor calculado.

@PaulaaSTIC PaulaaSTIC added bug Something isn't working Flujos de trabajo labels Jan 13, 2025
@PaulaaSTIC PaulaaSTIC self-assigned this Jan 13, 2025
Copy link

github-actions bot commented Jan 13, 2025

Actions executed at: 2025-01-13 11:59:14.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working Flujos de trabajo
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Incidencia - Flujos de trabajo - Calcular campos de fecha distinto en actualización masiva
1 participant