Feng Office és una buena herramienta de gestión de proyects, open source y gratuita. Las herramientas gestoras de proyectos siempre tienen el inconveniente que no todas las funcionalidades se adaptan a la manera de trabajar de uno, sin embargo, gracias a ser open source, se puede modificar para conseguirlo.
Una de las necesidades que tenía, era la de visualizar rápidamente y en cada tarea el tiempo estimado en esa tarea y el tiempo acumulado en el desarrollo de la misma, para poder valorar en mientras trabajo si estoy cumpliendo los plazos.
A continuación voy a detallar los cambios que he realizado para visualizarlo. He trabajado sobre la versión de Feng Office 1.7.5.
/application/models/projects_tasks/Project.Task.class.php
Este archivo es el que se encarga de devolver los datos que posteriormente se cargan en cada línea de tarea. Tenemos que incluir los datos que nos interesa recuperar: el tiempo estimado y el tiempo imputado en las tareas.
$result = array(
'id' => $this->getId(),
't' => $this->getTitle(),
'wsid' => $this->getWorkspacesIdsCSV(),
'c' => $this->getCreatedOn() instanceof DateTimeValue ? $this->getCreatedOn()->getTimestamp() : 0,
'cid' => $this->getCreatedById(),
'isread' => $this->getIsRead(logged_user()->getId()),
'otype' => $this->getObjectSubtype(),
'est' => $this->getTimeEstimate() // AÑADIDO
);
A continuación cargamos el tiempo imputado en las tareas, que se almacena en diferentes registros Timeslot. Recuperamos el tiempo en segundos.
$ot = $this->getOpenTimeslots();
// AÑADIDO boc
$timeslotsArray = Timeslots::getTaskTimeslots(null,null,null,null,null, $this->getId());
$seconds = 0;
if ( $timeslotsArray ) {
foreach ( $timeslotsArray as $ts ) {
$seconds += $ts['ts']->getSeconds();
}
$seconds = round($seconds / 60);
$result['acu'] = $seconds;
}
// AÑADIDO eoc
if ($ot){
/public/assets/javascript/og/tasks/main.js
Este archivo se modifica para cargar en el objeto de javascript los datos obtenidos de la respuesta JSON. Modificamos la función ogTasksTask.prototype.setFromTdata.
if (tdata.otype) this.otype = tdata.otype; else this.otype = null;
// AÑADIDO boc
if (tdata.est) this.est = tdata.est; else this.est = 0;
if (tdata.acu) this.acu = tdata.acu; else this.acu = 0;
// AÑADIDO eoc
}
/public/assets/javascript/og/tasks/drawing.js
Este archivo se encarga de imprimir todo el código html.
'); // AÑADIDO boc '); //Draw time tracking sb.append('
}
sb.append('
');
var estimateTimeString = 'estimate' + ': ' + task.est;
sb.append(estimateTimeString);
sb.append(' - ');
var reportedTimeString = 'accumulated' + ': ' + task.acu;
sb.append(reportedTimeString);
sb.append('
// AÑADIDO eoc
if (drawOptions.show_time){
Conclusiones
Una vez visto es relativamente sencillo conseguir la información. Para ir un poco más allá y mejorar la nueva funcionalidad, se podría hacer que el texto incluido “estimate” y “accumulated” fuese traducible a otros idiomas. También se podría pulir presentando el tiempo de manera más legible, como horas y minutos y no únicamente en minutos, o también que si el tiempo imputado supera el estimado que el texto salga en color rojo. Otra posibilidad sería incluir la opción para que el usuario decida si quiere mostrar esta información o no.
Por lo que sé ahora mismo, la única manera de incluir todo esto es tocando el core de la aplicación.