Calcular un campo de tipo fecha en Redmine

Calcular campos en Redmine

Hace ya unos años escribí una entrada en este blog donde explicaba cómo crear un campo calculado en Redmine utilizando el plugin Computed Custom Fields. Sin embargo, ese plugin ya no está siendo mantenido por su desarrollador y necesitamos una alternativa. En este post, te explico cómo calcular un campo personalizado de tipo fecha en Redmine.

Campos de tipo fecha

En este ejemplo disponemos de 3 campos personalizados:

  • Fecha inicial (campo personalizado de tipo fecha)
  • Plazo (campo personalizado de tipo número)
  • Fecha final (campo personalizado de tipo fecha, que es el que vamos a calcular)

Tenemos que calcular el campo Fecha final como una suma de la fecha inicial más el plazo. Por ejemplo:

  • Fecha inicial: 01/01/2024
  • Plazo: 90 días
  • Fecha final(calculada): 31/03/2024

Plugin View customize

Para realizar el cálculo, y visto que ya no deberíamos utilizar un plugin discontinuado para una instalación de Redmine que esté en producción, vamos a usar un plugin muy famoso en la comunidad de desarrollo de Redmine: View customize. Para los que no conozcáis este plugin, que está totalmente vigente, se trata de una verdadera navaja suiza, que permite generar muchas funcionalidades para aumentar las prestaciones del Redmine estándar.

La instalación de este plugin es la estándar:

  1. Guarda la carpeta del plugin en el directorio /plugins de Redmine (asegúrate de que el nombre de la carpeta del plugin sea “view_customize”)
  2. Lanza los comandos típicos:
    • bundle install –without development test
    • bundle exec rake redmine:plugins:migrate RAILS_ENV=production
  3. Reinicia tu servidor web

Ahora ya puedes ir a Administración > View customize para crear tu primera “vista”, que será donde incluirás el fragmento de código para calcular el campo.

Procedimiento para crear el campo calculado

  1. Crea los campos calculados
  2. Incluye el código informático en la vista
  3. Indica bajo qué condiciones debe actuar esa vista
  4. Activa la vista

1. Crea los campos calculados

Para este ejemplo, el id de los campos personalizados es el siguiente:

  • Fecha inicial: id= 84
  • Plazo: id= 85
  • Fecha final (calculada): id= 86

2. Código informático para el cálculo del campo de tipo fecha

A continuación te muestro el código:

$(function() {
  // Función para calcular y actualizar el campo "Fecha final"
  function updateCalculatedDate() {
    var lastDate = $('#issue_custom_field_values_84').val();
    var days = parseInt($('#issue_custom_field_values_85').val(), 10);
    if (lastDate && !isNaN(days)) {
      // Convierte el campo "Fecha inicial" en un objeto
      var lastDateObj = new Date(lastDate);
      // Suma "Plazo" a "Fecha inicial"
      lastDateObj.setDate(lastDateObj.getDate() + days);
      // Da formato al campo de fecha (YYYY-MM-DD)
      var calculatedDate = lastDateObj.toISOString().slice(0, 10);
      // Actualiza el campo "Fecha final"
      $('#issue_custom_field_values_86').val(calculatedDate);
    } else {
      // Borra el valor del campo calculado si los valores son inválidos
      $('#issue_custom_field_values_86').val("");
    }
  }
  // Gestiona los cambios en el valor del campo "Fecha inicial" o "Plazo"
  $('#issue_custom_field_values_84, #issue_custom_field_values_85').on('change', updateCalculatedDate);
  // Llamada inicial opcional para actualizar "Fecha final" al cargar la página
  updateCalculatedDate();
});

Se trata de un código javascript que se ejecutará cuando creemos o modifiquemos una tarea que contenga esos campos.

Es importante reseñar que para las tareas que ya estén creadas, este campo no se calculará, salvo que la edites, ya que el código se ejecuta en el navegador en el momento en el que visualizamos la página de edición de la tarea de Redmine, no es un cálculo en la base de datos propiamente dicho.

Nota: asegúrate de que en el código que te proporciono, cambias el id de los campos por los que corresponda. Por ejemplo, si el id de tu campo de fecha inicial es el 120, entonces la primera línea del código que he incluido aquí sería ésta:

var lastDate = $('#issue_custom_field_values_120').val();

Recuerda que el id de tus campos personalizados lo puedes ver en la URL de la página de edición del campo.

3. Personaliza la vista y actívala

Además del código informático que despliega la funcionalidad, podemos incluir en la vista que estamos creando las condiciones bajo las que queremos que se ejecute. Por ejemplo, si queremos que ese código se ejecute en cualquier proyecto o sólo en determinados proyectos.

En “path pattern”, indica “.*” y en “Insertion position” indica “Bottom of issue form”

Finalmente no olvides activar la vista, marcando el check “Enabled”.


¡Espero que te haya servido este consejo! Por favor, comparte el post a través de tus redes sociales si te ha gustado 🙂

Sobre el autor

2 comentarios en “Calcular un campo de tipo fecha en Redmine”

  1. Buenas Luis.
    He comenzado a seguir tu blog desde hace algunos días y espero conocer algo más en detalle las “tripas” de RedMine.

    Muy interesante tu entrada. Conocía el plugin “Computed Custom Fields”, pero la verdad es que siempre que intentamos ponerlo en funcionamiento, no había manera de que fuera operativo.

    Próximamente le meteremos mano a este “View Customize”, que si no tengo entendido, también puede personalizar estilos y vistas en RedMine.

    Un saludo y seguiré en contacto!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *