Una de las cosas que más nos gustó de Dolibarr cuando decidimos usarlo como nuestro gestor de tareas principal es lo sencillo que es obtener estádisticas de gastos, crear informes y tener toda la información unificada en un mismo lugar.
Sin embargo, había un pequeño problema para nuestra situación particular, y es que el informe de los proyectos que generaba este ERP por defecto mostraba el tiempo presupuestado en las tareas. En nuestro caso particular, el tiempo que nosotros cobramos a los clientes es el tiempo real invertido en las tareas. Lo decidimos así porque es lo más justo para ambas partes. De esta forma el cliente paga lo que consume, evitando pagar sobreestimaciones y nosotros evitamos perder dinero en malas estimaciones por desconocimiento inicial. Por lo tanto, era primordial para nosotros que esta herramienta nos proporcionase en los informes de los proyectos el tiempo real invertido por tarea.
Con un poco de ayuda de la IA de Google, Gemini, y revisando la base de datos conseguimos realizar este cambio. Tengo que decir que si bien Gemini me orientó para saber cómo empezar, erró mucho en los cambios que me proponía. Tras varios intentos de prueba y error finalmente di con la solución, había que obtener el tiempo invertido de la tabla llx_element_time
filtrando los siguientes valores:
elementtype='task'
fk_element=[ID_DE_LA_TAREA]
Del resultado obtenido solo faltaba crear una sumatoria de la duración de la siguiente manera:
Quedando la query en su totalidad de la siguiente forma:
SELECT SUM(element_duration)
FROM llx_element_time
WHERE fk_element = [ID_DE_LA_TAREA] AND elementtype = 'task'
Teniendo esta query lo demás fue sencillo, solamente había que modificar el script core/modules/project/doc/pdf_baleine.modules.php
. Busqué dónde se imprimía el campo que viene por defecto, es decir, dónde se mostraba el tiempo presupuestado y lo sustituí con el tiempo real obtenido de la query.
ADVERTENCIA: Recomiendo hacer un respaldo de pdf_baleine.modules.php antes de modificarlo para tener un plan B por si todo truena 😅