Campos Personalizados

Los campos personalizados son campos que se pueden añadir a algunos elementos de los módulos de Gobierto como las Cartas de Servicios o los Planes.

Los campos personalizados se pueden definir a nivel de módulo (aparecen en todos los elementos de los tipos para los que están definidos) o a nivel de instancia (en el caso de planes, se pueden definir los campos personalizados de los proyectos de un plan en concreto)

Para crear un campo personalizado se ha de elegir un nombre, un identificador (este identificador sirve para hacer referencia a este campo desde otros), el tipo y configuraciones adicionales dependientes del tipo.

Tipos de campo

Texto (línea)

Se trata de un texto breve que se presentará como un text field en el formulario de edición del elemento para el que está definido este campo, con un valor para cada idioma configurado en el sitio

Texto sin traducciones (línea)

Tiene las mismas características que el anterior campo pero no admite traducciones

Texto largo

Se trata de un texto largo que se presentará con un editor de texto con un valor para cada idioma configurado en el sitio.

Texto largo sin traducciones

Como el anterior pero no admite traducciones

Selección única

Con este campo se genera un select con las opciones que se definan en la administración del campo

Selección múltiple

Con este campo se genera un select con las opciones que se definan en la administración del campo

Color

Almacena un color y proporciona un selector de color en el formulario del elemento para el que está definido.

Imagen

Proporciona una interfaz para adjuntar imágenes desde el formulario del elemento para el que está definido. Este campo de una opción múltiple que de ser habilitada permite añadir y gestionar diversas imágenes.

Fecha

Permite gestionar fechas. Dispone de dos opciones:

  • Fecha. Mostrará en el formulario un selector de fecha
  • Fecha y hora. Mostrará en el formulario un selector de fecha y hora

Vocabulario

Para este campo se configura un vocabulario y se puede establecer el tipo de selección que se puede establecer sobre el vocabulario:

  • Selección única. Se muestra un select que solo admite un valor en el formulario
  • Selección múltiple. Se muestra un select2 en el que se pueden seleccionar múltiples términos
  • Tags. Se muestra un select2 en el que se pueden seleccionar y añadir elementos nuevos

Número

Con este campo se genera un campo numérico. Los valores pueden incluir decimales. Dispone de dos opciones para el tipo de unidad. No afecta a la interfaz en la edición de sus valores desde el panel de administración, pero se informa desde la API. Estas son las opciones:

  • Genérica
  • Monetaria

Plugin

Los plugins son campos personalizados que se pueden instalar como aplicaciones externas.

Tabla

Este plugin permite crear una tabla en la que previamente se han definido las columnas que la conforman y para cada recurso asociado se pueden añadir, editar y eliminar sus filas correspondientes.

La configuración por defecto de un plugin de tipo tabla consiste en un listado de definiciones de columnas y un category_term_decorator opcional que se describe a continuación. Este es un ejemplo de su estructura:

{
  "columns": [

  ],
  "category_term_decorator": ···
}

Cada uno de los elementos de columns es un objeto que ha de constar de:

  • id: Un identificador de la columna, que ha de ser único por tabla
  • name_translations: Un objeto en el que para cada idioma configurado para el site se coloca el encabezamiento de la columna en el idioma correspondiente.
  • type: El tipo de columna. Actualmente hay 5 posibles tipos de columna:
    • text: Campo de tipo texto
    • integer: Campo numérico de tipo entero
    • float: Campo numérico que admite decimales
    • date: Campo de tipo flecha, despliega un selector de fechas cuando se selecciona
    • vocabulary: Este campo está asociado a un vocabulario y muestra un select cuyas opciones son los términos del vocabulario. Para configurar el vocabulario se ha de configurar la ruta de la API que devuelve la información del vocabulario en un campo denominado dataSource
  • dataSource: La ruta de la API a un vocabulario. Si el vocabulario está dentro de la aplicación tiene la forma /admin/api/vocabularies/ID, donde ID es el ID del vocabulario

Un ejemplo de configuración de tabla es el siguiente:

{
  "columns": [
    {
      "id": "person",
      "type": "text",
      "name_translations": {
        "en": "Person",
        "es": "Persona"
      }
    },
    {
      "id": "phone_number",
      "type": "integer",
      "name_translations": {
        "en": "Phone number",
        "es": "Número de teléfono"
      }
    },
    {
      "id": "email",
      "type": "text",
      "name_translations": {
        "en": "email",
        "es": "Correo electrónico"
      }
    },
    {
      "id": "birthdate",
      "type": "date",
      "name_translations": {
        "en": "Birthdate",
        "es": "Fecha de nacimiento"
      }
    },
    {
      "id": "position",
      "type": "vocabulary",
      "dataSource": "/admin/api/vocabularies/74",
      "name_translations": {
        "en": "Position",
        "es": "Puesto"
      }
    }
  ]
}

La opción category_term_decorator permite especificar en el caso de planes la manera en la que se va exponer el contenido por parte de la API, dado que algunos de estos custom fields están asociados a otras fuentes de datos o contiene datos en bruto que han de ser procesados. Estas son las opciones para category_term_decorator:

human_resources

Se trata de una tabla en la que hay una serie de recursos humanos con un coste total, una fecha de inicio y otra de fin. Lo que devuelve la API para una tabla de este tipo es el coste planificado, correspondiente a la suma de todos ellos, y el ejecutado, correspondiente a la suma de cada coste ejecutado a fecha de hoy distribuyendo su coste entre la fecha de inicio y la de fin. Se espera que la tabla que disponga como mínimo de las siguientes columnas con los identificadores y tipos especificados:

  • Fecha de inicio: Con id start_date y tipo date
  • Fecha de fin: Con id end_date y tipo date
  • Coste: Con id cost y tipo integer, float o text (su contenido va a ser transformado a un valor decimal)

Este es un ejemplo de definición de tabla de recursos humanos:

{
  "columns": [
    {
      "id": "human_resource",
      "type": "vocabulary",
      "dataSource": "/admin/api/vocabularies/79",
      "name_translations": {
        "en": "Human resource",
        "es": "Recurso humano"
      }
    },
    {
      "id": "cost",
      "type": "text",
      "name_translations": {
        "en": "Cost",
        "es": "Coste"
      }
    },
    {
      "id": "start_date",
      "type": "date",
      "name_translations": {
        "en": "Start date",
        "es": "Fecha de inicio"
      }
    },
    {
      "id": "end_date",
      "type": "date",
      "name_translations": {
        "en": "End date",
        "es": "Fecha de fin"
      }
    }
  ],
  "category_term_decorator": "human_resources"
}

Para una tabla con este contenido:

Recurso humanoCosteFecha de inicioFecha de fin
Grupo B100002019-01-012020-12-31
Grupo C100002019-01-012020-12-31
Grupo C100002019-01-012019-12-31

El resultado en el front, a fecha de 10/06/2020 sería:

Inicial - 30.000,00 € - 100%
Ejecutado - 24.411,00 € - 81 %

indicators

La tabla contiene una serie de indicadores que tienen un nombre y una descripción (opcional, puede estar en blanco), un valor objetivo, un valor y una fecha. Mediante este decorator se indica a la API que para cada indicador devuelva el nombre, la descripción, el valor alcanzado en la última fecha y la última fecha.
Se espera que la tabla que disponga como mínimo de las siguientes columnas con los identificadores y tipos especificados:

  • Indicador: Puede ser una columna con id indicator de tipo vocabulary (el nombre y la descripción del indicador se sacan del término correspondiente) o bien dos columnas de tipo text e identificadores indicator y description.
  • Objetivo: Con id objective y tipo float
  • Valor: Con id value_reached y tipo float
  • Fecha: Con id date y tipo text. Puede ser un año, un año con mes o una fecha completa en formato YYYY-MM-DD
  • Coste: Con id cost y tipo integer, float o text (su contenido va a ser transformado a un valor decimal)

Este es un ejemplo de definición de tabla de indicadores:

{
  "columns": [
    {
      "id": "indicator",
      "type": "vocabulary",
      "dataSource": "/admin/api/vocabularies/80",
      "name_translations": {
        "en": "Indicator",
        "es": "Indicador"
      }
    },
    {
      "id": "objective",
      "type": "float",
      "name_translations": {
        "en": "Objective",
        "es": "Objetivo"
      }
    },
    {
      "id": "value_reached",
      "type": "float",
      "name_translations": {
        "en": "Value reached",
        "es": "Valor alcanzado"
      }
    },
    {
      "id": "date",
      "type": "text",
      "name_translations": {
        "en": "Date",
        "es": "Fecha"
      }
    }
  ],
  "category_term_decorator": "indicators"
}

Para una tabla con este contenido:

IndicadorObjetivoValor alcanzadoFecha
Municipios afectados30102017
Municipios afectados35302018
Municipios afectados40382019
Municipios afectados42412020
Sector forestal - Hectáreas afectadas50472019

El resultado en el front sería:
Municipios afectados - 41
Sector Forestal - Hectáreas afectadas - 47

raw_indicators

Este decorator espera una tabla igual que el anterior, sin embargo no es necesario usar unos nombres específicos de columna, pudiéndose usar los deseados, pero sí que hay que atenerse a una serie de particularidades:

  • Devuelve una serie de tablas agrupadas por la primera columna que se haya especificado.
  • La segunda columna que se añada ocultará su título.
  • Si existe una columna con un id llamado date los datos serán ordenados por fecha descendiente.

Por tanto, el ejemplo anterior con raw_indicators devolvería lo siguiente:

Municipios afectados

ObjetivoValor Alcanzado
20204241
20194038
20183530
20173010

Sector forestal - Hectáreas afectadas

ObjetivoValor Alcanzado
20195047

Progreso

El plugin de progreso se emplea para calcular automáticamente el progreso de un proyecto en función de otros campos personalizados. Para ello, en el campo de Configuración del plugin se ha de colocar el listado de uids de otros campos personalizados a partir de cuyos valores se va a calcular el progreso.

{
  "custom_field_uids": [

  ]
}

Al guardar la configuración del plugin se verifica que los uids hacen referencia a campos existentes y que son capaces de proporcionar un valor de progreso