====== Ejemplo para la utilización del objeto de nómina wtNomina ======

Dentro de una función Ajax controladora de una forma:

<code php>
if ($this->resAjax->eventoAjax() == 'onReady')
{
    //Se carga la librería de nómina
    $this->controller->load->library('wtNomina');
    //Se abre el objeto de nómina de un empleado, indicando el id del empleado y el número de periodo a abrir

    $nomina = $this->controller->wtNomina->abreNomina([$objEmpleado->id], [9], ['filtro1' => '"hola1"']);
    $nomina->generaTotales();
  
    if ($nomina->primerRegistro())
    {
        if (!$nomina->traeConcepto('12'))
        {
            //Se agrega el concepto, la función regresa la instancia del objeto agregado
            $nuevoConcepto = $nomina->agregaConcepto('12');
            if ($nuevoConcepto)
            {
                //Se agrega una nueva propiedad, el valor de la propiedad es un arreglo.
                $nuevoConcepto->agregaPropiedad ('captura1', 10);
                //Se indica el total del concepto.
                $nuevoConcepto->ponTotalConcepto('280.20');

                $this->resAjax->insertaAccionDebug ("Suma de captura1 en conceptos ". $nomina->totalizaPropiedad ("captura1"));            
            }

            //Si el concepto que se agrega es múltiple, permitirá varias capturas.
            //Tanto la funcion agregaConcepto como agregaPropiedad regresan la misma instancia desde donde son invocados, por lo que se pueden encadenar los metodos.
            $nuevoConceptoAborrar = $nomina->agregaConcepto('12')->agregaPropiedad('captura1', 20);

            //Se agrega un tercer concepto a las capturas múltiples.
            $nuevoConcepto = $nomina->agregaConcepto('12')->agregaPropiedad('captura1', 50)->agregaPropiedad('captura2', 'hola');

            //Se agrega un tercer concepto a las capturas múltiples.
            $nuevoConcepto = $nomina->agregaConcepto('14')->agregaPropiedad('captura1', 80)->agregaPropiedad('captura2', 'hola')->agregaPropiedad('captura2', 50)->ponTotalConcepto(200.20);

            //Al estar instanciado en una variable, un concepto puede ser borrado directamente
            $nuevoConceptoAborrar->eliminaConcepto();

            //Se recorre la lista de todos los conceptos de tipo 12 para imprimirlos en el debug.
            $conceptoCapturado = $nomina->traeConcepto ('12');
            while ($conceptoCapturado)
            {
                //Se accesa el valor "raw" del concepto, imprimiendo su representación en XML
                $this->resAjax->insertaAccionDebug ($conceptoCapturado->XMLToStr());    
                //Imprime especificamente el valor de una de sus propiedades.
                $this->resAjax->insertaAccionDebug ($conceptoCapturado->propiedadConcepto('captura1'));
                //Se trae el siguiente concepto del mismo tipo (12)
                $conceptoCapturado = $conceptoCapturado->siguienteConcepto();
            }

            //Se establecen algunas propiedades a nivel de todo el objeto de nómina. Estas propiedades en un futuro pueden indicar
            //el estado del empleado en el momento de ser serializado y/o calculado el objeto de nómina.
            $nomina->agregaPropiedadNomina ('filtro1', 'hola1');
            $nomina->agregaPropiedadNomina ('filtro2', 'hola2');
            $nomina->agregaPropiedadNomina ('filtro3', 'hola3');
            $nomina->eliminaPropiedadNomina ('filtro2');    
        }

        if ($nomina->traeConcepto('12'))
            $this->resAjax->insertaAccionDebug ('si está el concepto 12');
        else 
            $this->resAjax->insertaAccionDebug ('no está el concepto 12');

        //Cierra la nómina... si se detectan cambios se serializa el objeto.
        $this->controller->wtNomina->cierraNomina($nomina);

        //Se imprime en debug toda la representación del objeto de nomina.
        //Dentro del objeto se pueden ver propiedades relativas al catálogo de conceptos del periodo, datos del periodo, tipo de nómina, etc.
        $this->resAjax->insertaAccionDebug ($nomina->XMLToStr());
        //$this->resAjax->insertaAccionDebug ("El total del concepto 12 (" . $nomina->traeConcepto('12')->traeDefinicionConcepto()['descripcion'] . ") es: " . $nomina->traeConcepto('12')->totalConcepto());

        //foreach ($nomina->conceptosCapturados(["@clave='12'"]) as $concepto) //Todos los conceptos de clave 12
        //foreach ($nomina->conceptosCapturados(["@clave='12'","@total!=0"]) as $concepto) //Todos los conceptos de clave 12 y total diferente de 0
        //foreach ($nomina->conceptosCapturados(["defConcepto/@clave='12'"]) as $concepto) //Todos los conceptos de clave 12 referenciado por el nodo de desConcepto
        //foreach ($nomina->conceptosCapturados(["defConcepto/@pdc='1'"]) as $concepto) //Todos los conceptos de tipo percepción
        //foreach ($nomina->conceptosCapturados(["propiedad/@nombre='captura1'"]) as $concepto) //Todos los conceptos con una propiedad llamada captura1
        //foreach ($nomina->conceptosCapturados(["propiedad = '50'"]) as $concepto) //Todos los conceptos con una propiedad con valor de 50 
        //foreach ($nomina->conceptosCapturados(["propiedad/@nombre='captura1'", "propiedad = '50'"]) as $concepto) //Todos los conceptos con propiedad  = 50 y una propiedad llamada captura1 (No necesariamente la misma)
        //foreach ($nomina->conceptosCapturados(["propiedad='\"hola\"'"]) as $concepto) //Todos los conceptos con una propiedad = "hola"
        //foreach ($nomina->conceptosCapturados(["propiedad[@nombre='captura1'] = '50'"]) as $concepto) //Todos los conceptos con una propiedad llamada captura1 con valor de 50
        //foreach ($nomina->conceptosCapturados(["@clave='12'", "propiedad[@nombre='captura1'] = '50'"]) as $concepto) //Todos los conceptos de tipo 12 que en su propiedad llamada captura1 tengan un valor de 50

        foreach ($nomina->conceptosCapturados() as $concepto) //Todos los conceptos
        {
            $this->resAjax->insertaAccionDebug ("Concepto capturado {$concepto->traeDefinicionConcepto()['descripcion']} tiene un total de {$concepto->totalConcepto()}");
        }

        $this->resAjax->insertaAccionDebug ("Suma de total de percepciones ". $nomina->totalizaConceptos(wtXMLNomina::filtroConceptoTipoPercepcion));
        $this->resAjax->insertaAccionDebug ("Suma de captura1 en conceptos ". $nomina->totalizaPropiedad ("captura1"));
        $this->resAjax->insertaAccionDebug ("Id del periodo actual ". (string)$nomina->wtNominaPeriodos['id']);
    }
    $this->resAjax->insertaAccionDebug ("Primer Registro ". $nomina->primerRegistro());
    $this->resAjax->insertaAccionDebug ("Siguiente Registro ". $nomina->siguienteRegistro());
    $this->resAjax->insertaAccionDebug ($nomina->XMLToStr());
    $this->resAjax->insertaAccionDebug ("Totales generales ");
        foreach ($nomina->totalesNomina->conceptosCapturados() as $concepto) //Todos los conceptos
        {
            $this->resAjax->insertaAccionDebug ("Total del Concepto {$concepto->traeDefinicionConcepto()['descripcion']} tiene un total de {$concepto->totalConcepto()}");
        }
    $timbre = $nomina->timbrar (function (&$datos){
        $datos['idEmpresa'] = 1;
    });
    $this->resAjax->insertaAccionDebug ($timbre);
}
</code>