addGridView() - (obsoleto)

Añade una vista para editar un registro padre de un modelo y múltiples registros hijos de un modelo. La edición de los registros hijos se realiza mediante el componente handsontable que nos permite editar los datos a modo de hoja de cálculo. Sólo es posible tener una única vista Grid dentro de un PanelController. Se usa dentro de la función createViews() del PanelController. Debido a la necesidad de enlazar la vista padre con su detalle este método difiere de los otros métodos usados para añadir vistas. En este caso debemos informar con un array la vista padre y la hija. El array debe contener las claves name y model junto con sus valores.

OBSOLETO: fue eliminado de FacturaScripts 2022

El tratamiento de las dos vistas (padre y detalle) se realiza de manera conjunta por lo que en caso de utilizar un EditController como base de nuestro controlador no debemos llamar al método padre en createViews (esto crearía dos veces la vista padre).

Para el correcto renderizado de estás vistas es necesario usar la plantilla GridView o una que herede de esta. Esta sólo es utilizada cuando el modelo padre tiene un registro de datos. En caso de ser un alta nueva, se utiliza la plantilla EditView visualizando sólo el formulario para introducir los datos del padre y al grabar se refrescará la página visualizando el grid de datos.

protected function createViews()
{
    $master = ['name' => 'EditAsiento', 'model' => 'Asiento'];
    $detail = ['name' => 'EditPartida', 'model' => 'Partida'];
    $this->addGridView($master, $detail, 'accounting-entry', 'fas fa-balance-scale');
    $this->views['EditAsiento']->template = 'EditAsiento.html.twig';
    $this->setTabsPosition('bottom');
}

El modelo que se indica para los datos padre debe implementar la interface GridModelInterface. Dicha interface obliga a implementar los métodos accumulateAmounts y initTotals encargados del cálculo de importes totales. En caso de no necesitar importes totales se deben implementar vacíos.

El método accumulateAmounts recibe un array con los datos del registro detalle que se está procesando.

/// Acumular importes en su total
public function accumulateAmounts(array &$detail)
{
    $haber = isset($detail['haber']) ? (float) $detail['haber'] : 0.0;
    $this->importe += round($haber, (int) FS_NF0);
}

/// Inicializar atributos de totales
public function initTotals()
{
    $this->importe = 0.00;
}

Personalización:

La plantilla GridView añade la carga de archivos y la creación de los objetos necesarios para gestionar el grid de datos, y creando un nuevo bloque denominado gridcard donde inserta el grid. Los datos son cargados en una variable de JavaScript denominada documentLineData y la visualización se realiza dentro de un card de bootstrap, en el bloque body con el identificador document-lines.

{% block gridcard %}
    <div class="col">
        {# Grid data panel #}
        <div class="card">
            <div class="card-body p-0">
                <div id="document-lines"></div>
            </div>
        </div>
    </div>
{% endblock %}

Aunque estas tareas se realizan de manera automática es posible personalizar la apariencia creando nuestras propias plantillas de manera sencilla heredando de la plantilla base y sobrescribiendo el bloque gridcard. En este caso debemos asegurarnos que nuestra plantilla incluya una división con el identificador document-lines dónde se incluirá el grid.

{% block gridcard %}
    <div class="col-9 mr-2">
        <div class="card">
            <div class="card-header">
                <span><small id="account-description"></small></span>
                <span class="float-right"><small><strong>{{ i18n.trans('unbalance') }}: <span id="unbalance">0.00</span></strong></small></span>
            </div>
            <div class="body">
                <div id="document-lines"></div>
            </div>
        </div>
    </div>
{% endblock %}

Establecer automatismos:

La vista lleva incorporado un gestor de eventos que hacen de intermediario entre nuestro código y el componente HandsOnTable, simplificando la personalización y evitando que tengamos que conocer en profundidad el componente. La propia vista utiliza algunos de estos eventos para su correcto funcionamiento, por lo que si se realizan configuraciones sobre el componente HandsOnTable directamente, puede dejar de funcionar correctamente.

Para añadir un control sobre el Grid añadiremos un archivo de JavaScript con el nombre del controlador en la carpeta Assets/JS que será cargado automáticamente junto con la vista. En el evento $(document).ready de nuestro archivo introduciremos los eventos a controlar realizando una llamada a la función addEvent por cada evento a controlar.

$(document).ready(function () {
    // Controla que se haya cargado el componente Grid
    if (document.getElementById("document-lines")) {
        // Añade eventos al gestor de eventos
        addEvent("afterChange", customAfterChange);
        addEvent("afterSelection", customAfterSelection);
    }
});

addEvent

Esta función añade un evento al gestor de eventos. En la llamada indicaremos el nombre del evento a controlar y la función que se ejecutará cuando se lance el evento. Los eventos de estado que se pueden controlar tienen dos partes.

  • before: Se ejecuta antes de iniciar el evento indicado.
  • after: Se ejecuta después de completarse el evento indicado.

Así el evento con nombre beforeChange se ejecutará antes de comenzar la edición de una celda, mientras que el evento afterChange se ejecutará después de terminar la edición. Algunos ejemplos de eventos. Más información en la documentación del componente HandsOnTable.

  • BeginEditing: Se activa cuando el editor se abra y se procesa.
  • Change: Se ejecuta cuando una o más celdas hayan sido cambiadas. Por razones de rendimiento, la matriz de cambios es null para durante el evento loadData.
  • ColumnMove: Se ejecuta cuando se cambia el orden de los índices visuales de una columna.
  • ColumnResize: Se ejecuta cuando se cambia el tamaño de una columna.
  • Copy: Al hacer un copiar hacia el portapapeles.
  • Cut: Al hacer un cortar hacia el portapapeles.
  • Paste: Al pegar el contenido del portapapeles.
  • Undo: Al deshacer un cambio.
  • Select: Al seleccionar una celda o fila.
  • Deselect: Al deseleccionar una celda o fila.
  • OnCellMouseDown: Al pulsar el botón del ratón sobre una celda.
  • OnCellMouseOver: Al pasar el cursor del ratón sobre una celda.

Métodos incorporados

Además del gestor de eventos, las vistas Grid incorporan una serie de funciones JavaScript para facilitar la programación de tareas personalizadas.

  • getGridColumnName: Obtiene el nombre de campo asociado a una columna.
  • getGridData: Nos retorna un array con la estructura de datos. Se puede indicar el nombre de campo donde almacenar el índice del orden actual de las líneas
  • getGridFieldData: Para obtener el valor de una celda. Devemos indicar el indice de la fila y el nombre de campo.
  • getGridRowValues: Nos retorna un array con los datos de la fila indicada.
  • setGridRowValues: Establece los valores informados en un array a una fila. El array con los datos debe estar formado por las claves “field” y “value” por cada columna que deseamos cambiar.
  • selectCell: Selecciona una celda o un rango de celdas.
  • deselectCell: Deselecciona todas las celdas.
  • getRowSelected: Obtiene la fila seleccionada.
  • getColumnSelected: Obtiene la celda seleccionada.

Ejemplos de uso

// Selecionar fila y cambiar sus valores
var selectedRow = getRowSelected();
if (selectedRow !== null) {
    var vatBody = $("#modal" + idmodal).find(".modal-body");
    var values = [
        {"field": "documento", "value": vatBody.find(".form-group input[name=\"documento\"]").val()},
        {"field": "cifnif", "value": vatBody.find(".form-group input[name=\"cifnif\"]").val()},
        {"field": "baseimponible", "value": vatBody.find(".form-group input[name=\"baseimponible\"]").val()},
        {"field": "iva", "value": vatBody.find(".form-group input[name=\"iva\"]").val()},
        {"field": "recargo", "value": vatBody.find(".form-group input[name=\"recargo\"]").val()}
    ];
    setGridRowValues(selectedRow, values);
}

// Cargar datos del grid a un formulario modal
var values = getGridRowValues(selectedRow);
var vatBody = $("#modal" + idmodal).find(".modal-body");
vatBody.find(".form-group input[name=\"cifnif\"]").val(values["cifnif"]);
vatBody.find(".form-group input[name=\"baseimponible\"]").val(values["baseimponible"]);
vatBody.find(".form-group input[name=\"iva\"]").val(values["iva"]);
vatBody.find(".form-group input[name=\"recargo\"]").val(values["recargo"]);

// Seleccionar la primera celda del grid
selectCell(0, 0);

// Deseleccionar todas las celdas
deselectCell();

Pregunta al chatbot

Necesita identificarse para continuar con esta acción. Haga clic en iniciar sesión o cree una cuenta.

Iniciar sesión
PRO
neorazorx_1
neorazorx_1

España, 11 años, nivel 100

Migración de plugins antiguos

Patrocinadores

FacturaScripts avanza más rápido gracias al apoyo financiero de los patrocinadores, que contribuyen a que podamos dedicar más tiempo al desarrollo, testeo y documentación. Usted también puede poner su granito de arena y convertirse en patrocinador ;-)

ORO
elurk_3992
ORO
aliksi_1525
ORO
manel_11440
ORO
oguimera_10015
ORO
soporte.fs_10883
ORO
zitrusmx_23357
ORO
jlgonzalezdiaz_12316
ORO
programacion_j0v
ORO
jordicasan_2169
ORO
luciaballesterginer_2482
ORO
borja_jdk
ORO
wf_12852
ORO
lvidal_12581
PLATA
rexmaris_12857
PLATA
acaselles_13670
PLATA
alexis_8932
PLATA
jorasago_22167
PLATA
pauetgl_12617
PLATA
afernandez_12047
PLATA
jeroyugo_ik4
PLATA
adelantia_311
PLATA
famphuelva_2031
BRONCE
reprosturias_20117
BRONCE
joseluis_23311
BRONCE
11isma_3844
BRONCE
victornc83_9559
BRONCE
fnusmas_5683
BRONCE
hamblett89_ins
BRONCE
vtcbilbao_isq
BRONCE
samuelrg0703_10983
BRONCE
alexi_casco_10742
BRONCE
ivan_16222
BRONCE
vitamweb_1929
PRO
neorazorx_1
PRO
mariano_6807
PRO
smartcuines_1378
PRO
yopli2000_5
PRO
jmallop_22092
PRO
cablea_70t
PRO
ingenierosistemas_12177
PRO
fernandoblz_1829
PRO
sistemas_21378
PRO
aernestocf_2988
PRO
marcosbb_548
PRO
finansierra_1770
PRO
mbbeniel_if6
PRO
palaciussl_15438
PRO
jairo_23048
PRO
jjsanmartin_23413
PRO
alamas_12291
PRO
autodispar_21155
PRO
sat_12505
PRO
roxu31_11067
PRO
juanfcots_5213
PRO
cuesta.misinformaticos_26
PRO
jcondino_14226
PRO
jmoreno_2610
PRO
idelpcocinas_22602
PRO
gnomio_2844
PRO
elenaplanab_17848
PRO
david.sarda_6719
PRO
giovannyavillalobosu_48
PRO
jordi_iin
PRO
corp.compunec_495
PRO
europanormandia_13066
PRO
alvarohpardo_23321
PRO
myshopspain_iv5
PRO
regjos_88z
PRO
manuel.vazquez.suarez_23059
PRO
carlosmorenogil_16533
PRO
ander.elor_160
Patrocinar

Amplíe sus conocimientos con los cursos oficiales

Curso básico de PHP

¡Aprende a programar en PHP de manera fácil y divertida con nuestro curso básico! En este curso, te enseñaremos los conceptos fundamentales de la programación en PHP, incluyendo la sintaxis básica, el manejo de variables, estructuras de control de flujo y mucho más. Al terminar estarás listo para comenzar con el curso de creación de plugins para FacturaScripts.

34 9,99 €
Curso básico de programación

Con este curso aprenderá cómo crear un plugin sencillo para FacturaScripts: añadir nuevas páginas, tablas y columnas. Para entender este curso no se necesita mucha experiencia en programación, le enseñaremos los básico para modelar problemas sencillos. ¿A quién va dirigido? A cualquier persona con unos conocimientos muy básicos de programación o que ya han completado el curso de PHP. ¿Qué incluye? 18 lecciones con 14 vídeos explicativos.

361 9,99 €
Sesiones de programación

Esta es una recopilación de vídeos y documentación de pequeños desarrollos sobre FacturaScripts y sus plugins. Perfecto para expandir tus conocimientos de programación. ¿A quién va dirigido? A personas que ya hayan superado el curso básico de programación y busquen ampliar sus conocimientos. ¿Qué incluye? 22 lecciones con 22 vídeos explicativos (más de 11 horas de vídeos) y el código fuente de los ejemplos.

140 19,99 €
Cookies
Usamos cookies en nuestro sitio web para brindarte la experiencia más relevante recordando tus preferencias y visitas repetidas. Al hacer clic en "Aceptar", aceptas el uso de TODAS las cookies necesarias.
Copyright (c) 2013-2024 FacturaScripts
0.95895s

Soporte