Filas agrupadas, sumas e informes
Agrupación de filas colapsable en varios niveles con subtotales, además de un pie sum() de total general sobre todo el conjunto de resultados filtrado.
group_by_columns(): niveles de anidamiento
public function group_by_columns(string $columns): self
Una lista de columnas separadas por comas agrupa las filas de la vista de lista bajo filas de cabecera colapsables - la enésima columna se convierte en el enésimo nivel de anidamiento:
$xcrud->group_by_columns('customerNumber,paymentDate');
Esto agrupa las filas primero por customerNumber (nivel 1), y luego por paymentDate dentro de cada cliente (nivel 2). Cada columna debe ser una de las columnas incluidas en la lista blanca de la tabla. La cuadrícula se reordena automáticamente para que las filas del mismo grupo permanezcan contiguas - las columnas de agrupación se ordenan primero, y la columna en la que se hace clic para ordenar actúa como criterio de desempate secundario dentro del grupo más interno.
Una columna de fecha/fecha-hora usada como nivel de agrupación no agrupa por su valor exacto (lo que convertiría casi cada fila en su propio grupo) - en su lugar la clasifica en etiquetas relativas: "Hoy", "Ayer", "Hace N días", "La semana pasada", "Este mes", "El mes pasado", luego "{Mes}" para el año en curso y "{Mes} {Año}" para fechas más antiguas.
group_sum_columns(): subtotales por grupo
public function group_sum_columns(string $columns): self
Añade un subtotal de la(s) columna(s) numérica(s) indicada(s) a la fila de cabecera de cada grupo, en todos los niveles, calculado solo sobre las filas de ese grupo en la página actual:
$xcrud->group_by_columns('customerNumber');
$xcrud->group_sum_columns('amount');
La cabecera de grupo de cada cliente muestra el total de ese cliente en sus filas de la página actual - no de todo el conjunto filtrado. A diferencia del pie de total general de sum() de abajo, esto tiene el alcance de un grupo, y un grupo puede repartirse entre páginas igual que el propio group_by_columns().
group_table_collapsed(): estado abierto/cerrado por defecto
public function group_table_collapsed(bool $collapsed, ?int $level = null): self
| Parámetro | Tipo | Predeterminado | Descripción |
|---|---|---|---|
$collapsed | bool | - | Si los grupos empiezan colapsados (ocultando sus filas hasta que se hace clic para abrirlos). |
$level | int|null | null | Nivel indexado desde 1 a sobrescribir, siguiendo el orden de argumentos de group_by_columns(). Se omite para fijar el valor por defecto de todo nivel sin excepción. |
$xcrud->group_table_collapsed(true); // every level starts collapsed...
$xcrud->group_table_collapsed(false, 1); // ...except level 1
Todo grupo se puede seguir abriendo/cerrando haciendo clic en él, independientemente de su estado inicial.
Personalizar las etiquetas de los subtotales
public function group_sum_show_label(bool $show = true): self
public function group_sum_label(string $field, string $label): self
group_sum_show_label(false) elimina el prefijo "Etiqueta:" de cada subtotal de columna sumada, mostrando solo el valor (p. ej. "23.000" en lugar de "Amount: 23.000"). group_sum_label() sobrescribe la etiqueta de una columna en concreto, en lugar de su propio label()/nombre auto-humanizado:
$xcrud->group_sum_columns('amount');
$xcrud->group_sum_label('amount', 'Total Paid');
Esto muestra "Total Paid: 23.000" en cada cabecera de grupo. No tiene efecto si también se establece group_sum_show_label(false), ya que en ese caso no se muestra ninguna etiqueta en absoluto.
sum(): un pie de total general
public function sum(string $field): self
Añade un total de pie SUM() para una columna numérica, calculado del lado del servidor sobre el conjunto de resultados filtrado/buscado actual en su totalidad - no solo la página actual, e independiente de cualquier agrupación:
$xcrud->sum('amount');
Juntándolo todo
$xcrud->group_by_columns('paymentDate,customerNumber');
$xcrud->group_sum_columns('amount');
$xcrud->group_sum_label('amount', 'Total Paid');
$xcrud->group_table_collapsed(true);
$xcrud->group_table_collapsed(false, 1);
$xcrud->sum('amount');
Aquí el nivel 1 (grupos de fechas, normalmente un puñado) empieza expandido, mientras que el nivel 2 (número de cliente, a menudo decenas por grupo) empieza colapsado, cada cabecera de grupo muestra un subtotal "Total Paid: ...", y el pie de la cuadrícula muestra el total general de todo el conjunto filtrado.