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();

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
manel_11440
ORO
aliksi_1525
ORO
soporte.fs_10883
ORO
roberto_1699
ORO
facturacion_11803
ORO
ursuslider_2562
ORO
wf_12852
ORO
asistecnicasoluciones_17043
ORO
garridoservers_19777
PLATA
acaselles_13670
PLATA
oguimera_10015
PLATA
jlgonzalezdiaz_12316
PLATA
atimicroson_10546
PLATA
v.delgado_14821
PLATA
luis_12743
PLATA
klikatu_19216
PLATA
rexmaris_12857
PLATA
s3rtec_4534
PLATA
josepmp_2501
PLATA
zapasoft_1521
PLATA
castor.agra_2284
PLATA
appzaragoza_20607
PLATA
raljopa_851
PLATA
sergicapella_17317
PLATA
manuel_9234
PLATA
jesusangel.hernandez_21803
PLATA
juanjoseprieto88_1282
PLATA
alexis_8932
PLATA
hfernandez9211_12051
BRONCE
fnusmas_5683
BRONCE
silentgrowonline_19393
PRO
neorazorx_1
PRO
yopli2000_5
PRO
mariano_6807
PRO
smartcuines_1378
PRO
daniel89fg_739
PRO
javi150985_4944
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.

24 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.

349 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.

123 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.40685s

Soporte