Warning: Undefined variable $post in /var/www/vhosts/cloudframework.io/httpdocs/wp-content/themes/cloudframework/public.php on line 203

Warning: Undefined variable $post in /var/www/vhosts/cloudframework.io/httpdocs/wp-content/themes/cloudframework/public.php on line 207

Acciones Multifila (multiselect)

Descripción

Esta opción activa la posibilidad de aplicar acciones sobre múltiples filas a la vez. Dentro de cada vista (view) añadiremos un elemento {"multiselect": {..},...} que estará compuesto de un atributo active y un atributo menu.

Cuando se activa, aparece un checkbox en la primera columna del DataTable que permite seleccionar filas. Al seleccionar una o más filas, aparece un desplegable con las acciones disponibles.

Estructura del Multiselect

Elemento
Descripción
Ejemplo
*active (bool)
Debe valer true para que el multiselect quede activo.
{"active":true}
*menu[]
Array de objetos que indican las acciones que se puede realizar sobre las múltiples filas
{"menu":[{..},{..}]}

Atributos del Menu

El atributo menu estará compuesto por un array de objetos con los siguientes atributos:

Elemento
Descripción
Ejemplo
*title
Título que aparecerá en el menú. Soporta localización con $namespace:
{"title":"Borrar"}
*type
Tipo de acción a ejecutar:
  • delete: Ejecuta borrado sobre cada fila seleccionada
  • cfo-update-fields: Actualiza campos específicos a valores determinados
  • external-api: Llama a un API externo pasando los IDs seleccionados
{"type":"delete"}
ico
[opcional] Icono FontAwesome asociado al menú (sin prefijo fa-)
{"ico":"trash-alt"}
color
[opcional] Color asociado al elemento: green, red, orange, blue, etc.
{"color":"green"}
api
[Sólo type=='external-api'] URL del endpoint que recibirá los IDs seleccionados como parámetro ?_ids=id1,id2,id3. Soporta variables de template como {{Platform:namespace}} y {{User:KeyName}}
{"api":"/erp/finance/{{Platform:namespace}}/{{User:KeyName}}/cfo/update"}
values
[Sólo type=='cfo-update-fields'] Objeto con los campos y valores a actualizar en cada registro seleccionado.
{"values":{"Active":true,"Status":"closed"}}
security
[opcional] Objeto para restringir qué usuarios pueden ver/usar este elemento del menú. Puede contener:
  • user_privileges: Array de privilegios requeridos
  • field_values: Condición basada en valores de campo
{"security":{
"user_privileges":["finance-admin"]
}}
only_if_filters
[opcional] Restringe la visibilidad del elemento según los filtros activos. Valores especiales:
  • __null__: El filtro no tiene valor
  • __notnull__: El filtro tiene algún valor
{"only_if_filters":{
"Active":[true,"__null__"]
}}

Implementación en el Código

El multiselect está implementado en los siguientes archivos:

  • firebase/core20.web.app/public/ajax/js/cfo.js - Métodos principales:
    • CloudFrameWorkCFO.deleteMultiselect() - Ejecuta borrado múltiple
    • CloudFrameWorkCFO.updateMultiselect() - Actualiza campos múltiples
    • CloudFrameWorkCFO.externalAPIMultiselect() - Llama a API externa
    • CloudFrameWorkCFO.checkAllMultiselect() - Gestiona el estado de selección
    • CloudFrameWorkCFO.clickAllMultiSelect() - Selecciona/deselecciona todas las filas
  • firebase/core20.web.app/public/ajax/tpl/cfo_mustache_templates.htm - Template del checkbox

Los IDs seleccionados se almacenan en CloudFrameWorkCFO.multiselect[] como array.


Ejemplos Prácticos de CFOs

1. CloudFrameWorkLogs - Borrado Simple

El CFO de logs implementa un multiselect básico solo para borrar múltiples registros:

"multiselect": {
"active": true,
"menu": [
{
"type": "delete",
"title": "Delete"
}
]
}

2. CloudFrameWorkCompanies - Actualización con Filtros Condicionales

El CFO de empresas muestra elementos del menú condicionalmente según el filtro de Active:

"multiselect": {
"active": true,
"menu": [
{
"only_if_filters": {
"Active": ["__null__", true]
},
"type": "cfo-update-fields",
"title": "Desactivar",
"ico": "hand-middle-finger",
"color": "red",
"values": {
"Active": false
}
},
{
"only_if_filters": {
"Active": ["__null__", false]
},
"type": "cfo-update-fields",
"title": "Activar",
"ico": "hand-peace",
"color": "green",
"values": {
"Active": true
}
}
]
}

Nota: Cuando el filtro Active no está seleccionado (__null__) o vale true, se muestra "Desactivar". Cuando no está seleccionado o vale false, se muestra "Activar".

3. FINANCE_documents - Ejemplo Completo con Seguridad

El CFO de documentos financieros combina todos los tipos de acciones con seguridad:

"multiselect": {
"active": true,
"menu": [
{
"title": "Delete",
"type": "delete",
"ico": "trash-alt",
"security": {
"field_values": {
"FinancialInvoice_FinancialInvoicesState_Id": ["equals", 1]
}
}
},
{
"title": "Actualizar multi-campos",
"type": "external-api",
"api": "/erp/finance/{{Platform:namespace}}/{{User:KeyName}}/cfo/filter-invoices-update",
"ico": "list-alt"
},
{
"title": "Asignar a Proyecto",
"type": "external-api",
"api": "/erp/finance/{{Platform:namespace}}/{{User:KeyName}}/cfo/assign-to-project/update",
"ico": "people-carry"
}
]
}

Nota sobre security.field_values: El elemento "Delete" solo está disponible cuando el campo FinancialInvoice_FinancialInvoicesState_Id es igual a 1 (estado borrador).


CFOs que Utilizan Multiselect

A continuación se listan los CFOs de la plataforma CloudFramework que implementan multiselect en sus vistas:

  • CloudFrameWorkLogs - Logs del sistema (delete)
  • CloudFrameWorkCompanies - Empresas (cfo-update-fields)
  • CloudFrameWorkContacts - Contactos (cfo-update-fields)
  • CloudFrameWorkUsers - Usuarios (cfo-update-fields)
  • FINANCE_documents - Documentos financieros (delete, external-api)
  • FINANCE_movements - Movimientos financieros
  • CloudFrameWorkCFOs - Gestión de CFOs
  • CloudFrameWorkContracts - Contratos
  • CloudFrameWorkProjectsTasks - Tareas de proyectos
  • OauthUsers - Usuarios OAuth
  • OauthOrganizations - Organizaciones OAuth

Ejemplo General Completo

"views": {
"default": {
"name": "General View",
"all_fields": true,
"server_order": "DateInsertion DESC",
"server_limit": 100,
"multiselect": {
"active": true,
"menu": [
{
"title": "Delete",
"type": "delete",
"ico": "trash-alt",
"color": "red"
},
{
"title": "Cambiar a Activo",
"type": "cfo-update-fields",
"values": {"Active": true, "Status": "active"},
"ico": "check",
"color": "green",
"only_if_filters": {
"Active": [false, "__null__"]
}
},
{
"title": "Procesar seleccionados",
"type": "external-api",
"api": "/erp/module/{{Platform:namespace}}/{{User:KeyName}}/process-items",
"ico": "cogs",
"color": "blue",
"security": {
"user_privileges": ["admin", "processor"]
}
}
]
}
}
}
Cesta de compras