Como añadir una plantilla automática a CSVimport🔗

Las plantillas automáticas son aquellas que se utilizan de forma automática sin que el usuario tenga que hacer nada para configurar las columnas del csv cargado. En dicha plantilla tendremos que dejar configurado como son las columnas del archivo csv cargado, el sistema comprobará si coinciden las columnas, de ser así entonces se aplicará dicha plantilla, de lo contrario seguirá buscando otra plantilla o le dará al usuario la opción de crear una nueva plantilla en pantalla el mismo.

Ejemplo de como añadir la plantilla automática al archivo init.php del plugin.

<?php

namespace FacturaScripts\Plugins\MyPlugin;

use FacturaScripts\Core\Template\InitClass;
use FacturaScripts\Dinamic\Lib\AutoTemplates\FactusolCustomers;
use FacturaScripts\Dinamic\Model\CSVfile;

final class Init extends InitClass
{
    public function init(): void
    {
        CSVfile::addAutoTemplate('customers', new FactusolCustomers());
    }
}

Ejemplo de como implementar nuestra clase automática FactusolCustomers, dicha clase tendrá que implementar la clase AutoTemplateInterface.


<?php

namespace FacturaScripts\Plugins\MyPlugin\Lib\AutoTemplates;

use FacturaScripts\Dinamic\Model\Cliente;
use FacturaScripts\Plugins\CSVimport\Contract\AutoTemplateInterface;
use FacturaScripts\Plugins\CSVimport\Lib\CsvFileTools;

class FactusolCustomers implements AutoTemplateInterface
{
    const LIMIT_IMPORT = 500;

    /** @var bool */
    private $continue = false;

    /** @var int */
    private $start = 0;

    /** @var int */
    private $total_lines = 0;

    /**
    * Sirve para indicar que continue
    */
    public function continue(): bool
    {
        return $this->continue;
    }

    /**
    * Sirve para obtener el total de líneas del csv
    */
    public function getTotalLines(): int
    {
        return $this->total_lines;
    }

    /**
    * Aquí es donde validaremos las columnas del archivo csv cargado
    */
    public function isValid(string $filePath, string $profile): bool
    {
        // Si el perfil no es el que hemos definido en la clase init, terminamos
        if ($profile !== 'customers') {
            return false;
        }

        // recorremos las primeras líneas del csv para comprobrar los títulos
        // probamos empezando desde las líneas 0 a la 6
        foreach (range(0, 6) as $start) {
            $this->start = $start;
            $csv = CsvFileTools::read($filePath, $start, 0, 1);
            $this->total_lines = CsvFileTools::getTotalLines();

            if ($csv['titles'][0] === 'Código' && in_array('N.I.F.', $csv['titles'])) {
                // si la columna 0 es el "Código" y además en la fila existe la columna "N.I.F.", entonces es un csv correcto
                return true;
            } elseif ($csv['titles'][0] === 'Cód' && $csv['titles'][1] === 'Nombre') {
                // si la columna 0 es el cod y además en la fila existe la columna nombre, entonces es un csv correcto
                return true;
            } elseif ($csv['titles'][0] === 'Cód.' && $csv['titles'][1] === 'Nombre') {
                // si la columna 0 es el cod. y además en la fila existe la columna nif, entonces es un csv correcto
                return true;
            }
        }

        return false;
    }

    /**
    * Aquí es donde vamos a leer el carchivo csv, obtener los datos y guardarlos, podremos hacer comprobaciones y todo lo necesario para asegurar los datos
    */
    public function run(string $filePath, string $profile, string $mode, int &$offset, int &$saveLines): bool
    {
        $csv = CsvFileTools::read($filePath, $this->start, $offset, static::LIMIT_IMPORT);
        $this->total_lines = CsvFileTools::getTotalLines();

        foreach ($csv['data'] as $row) {
            // buscamos si exsite el cliente
            $customer = new Cliente();
            $code = $row['Código'] ?? $row['Cód'] ?? $row['Cód.'];
            if (empty($code) ||
                ($customer->loadFromCode($code) && $mode === CsvFileTools::INSERT_MODE) ||
                (false === $customer->loadFromCode($code) && $mode === CsvFileTools::UPDATE_MODE)) {
                    continue;
            }

            // obtenemos los datos del cliente
            $customer->codcliente = $code;
            $customer->cifnif = $row['N.I.F.'];
            $customer->nombre = substr($row['Nombre comercial'] ?? $row['Nombre'], 0, 100);
            $customer->telefono1 = $row['Teléfono'];

            // validamos datos
            if (isset($row['E-mail']) && filter_var(trim($row['E-mail']), FILTER_VALIDATE_EMAIL)) {
                $customer->email = trim($row['E-mail']);
            }

            $this->continue = true;
            $offset++;
            $saveLines++;
        }

        return true;
    }
}
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-2025 FacturaScripts
0.23328s

Soporte