Incluir tiempo estimado e imputado en las líneas de tareas en Feng Office

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.

Línea de tarea en Feng Office

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.

sb.append('

');
}

// AÑADIDO boc
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

//Draw time tracking
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.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>