Cómo modificar el Calculator desde un plugin

Para modificar los cálculos de totales y subtotales de los albaranes, factura, etc ... debemos crear una clase que implemente el CalculatorModInterface:

  • FacturaScripts\Core\Contract\CalculatorModInterface

Por convención se llamará CalculatorMod y se ubicará en el directorio Mod del plugin.

Podemos editar o recalcular datos al momento de calcular los totales del documento, ya sea para compras y ventas, o solo para uno de ellos.

La función calculate se usa para recalcular el total del documento

public function calculate(BusinessDocument &$doc, array &$lines): bool
{
    $doc->total = 'aquí tu cálculo';
    return true;
}

Para recalcular las líneas de los documentos se usa calculateLine

public function calculateLine(BusinessDocument $doc, BusinessDocumentLine &$line): bool
{
    $line->pvptotal = 'aquí tu cálculo';
    return true;
}

Para inicializar los registros se usa clear. Normalmente se inicializan todos los valores a 0, aunque si es necesario se puede utilizar otro valor

public function clear(BusinessDocument &$doc, array &$lines): bool
{
    $doc->total = 0.0;

    foreach ($lines as $line) {
        $line->total = 0.0;
    }

    return true;
}

Para modificar los subtotales se utiliza getSubtotals, donde los subtotales se especifican mediante un array

public function getSubtotals(array &$subtotals, BusinessDocument $doc, array $lines)
{
    $subtotals['neto'] += 10;  
    $subtotals['total'] += 10;  
    return true;
}

Podemos utilizar apply para aplicar configuraciones o precargar datos

public function apply(BusinessDocument &$doc, array &$lines): bool  
{  
    // Obtener y guardar el régimen de IVA una sola vez  
    $subject = $doc->getSubject();  
    $this->regimenIVA = $subject->regimeniva ?? RegimenIVA::TAX_SYSTEM_GENERAL;  
    return true;  
}

Archivo Init

Como cualquier mod, debemos cargarlo desde el archivo Init.php del plugin:

<?php

namespace FacturaScripts\Plugins\MyNewPlugin;

use FacturaScripts\Core\Template\InitClass;
use FacturaScripts\Core\Lib\Calculator;

class Init extends InitClass
{
    public function init(): void
    {
        Calculator::addMod(new Mod\CalculatorMod());
    }

    public function uninstall(): void
    {
    }

    public function update(): void
    {
    }
}

Para más información sobre el Init, puedes consultar la documentación del Init

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-2026 FacturaScripts
0.21312s

Soporte