HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux Bradford-Sitios 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: www-data (33)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/dtw.bradford/app/Imports/ColegiumCpagosimport.php
<?php

namespace App\Imports;

use DateTime;
use Exception;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use PhpOffice\PhpSpreadsheet\Shared\Date;

class ColegiumCpagosimport extends AbstractChunksImport
{
     protected function getExpectedHeaders(): array
    {
        return [
            'fecha',
            'orden_de_compra',
            'cod_autorizacion',
            'pagador',
            'medio_de_pago',
            'monto',
            'fecha_de_abono',
            'comision',
            'iva',
            'abono',
        ];
    }

    protected function getTableName(): string
    {
        return 'colegium_cpagos';
    }

    protected function getSheetName()
    {
        return 0;
    }

    protected int $headingRowIndex = 2;

    protected function normalizeRow(array $row, int $numRow): ?array
    {
        // 👇 OMITIR FILAS DE TOTALES
        if (empty($row['orden_de_compra']) && stripos($row['pagador'] ?? '', 'total') !== false) {
            return null;
        }

        $validation_errors = 0;
        $validation_messages = '';

        try {
            // Validación de data
            if (!empty($row['fecha'])) {
                try {
                    $fecha = ordenar_fechaSlashHoraServidor($row['fecha']);
                } catch (Exception $e) {
                    $validation_errors++;
                    $validation_messages .= ($validation_errors) . ': fecha inválida. ';
                }
            } else {
                $fecha = null;
            }

            if (!empty($row['orden_de_compra'])) {
                $orden_de_compra = $row['orden_de_compra'];
            } else {
                $orden_de_compra = null;
            }

            if (!empty($row['cod_autorizacion'])) {
                $cod_autorizacion = $row['cod_autorizacion'];
            } else {
                $cod_autorizacion = null;
            }

            if (!empty($row['pagador'])) {
                $pagador = $row['pagador'];
            } else {
                $pagador = null;
            }

            if (!empty($row['medio_de_pago'])) {
                $medio_de_pago = $row['medio_de_pago'];
            } else {
                $medio_de_pago = null;
            }

            if (!empty($row['monto'])) {
                try {
                    $monto = floatval($row['monto']);
                } catch (\Throwable $th) {
                    $validation_errors++;
                    $validation_messages .= ($validation_errors) . ': monto inválido. ';
                }
                
            } else {
                $monto = 0;
            }

            if (!empty($row['fecha_de_abono'])) {
                if (validateDate($row['fecha_de_abono'], 'd/m/Y')) {
                    $validation_errors++;
                    $validation_messages .= ($validation_errors) . ': fecha_de_abono inválida. ';
                } else {
                    $fecha_de_abono = ordenar_fechaSlashServidor($row['fecha_de_abono']);
                }
            } else {
                $fecha_de_abono = null;
            }

            if (!empty($row['comision'])) {
                try {
                    $comision = floatval($row['comision']);
                } catch (\Throwable $th) {
                    $validation_errors++;
                    $validation_messages .= ($validation_errors) . ': comision inválido. ';
                }
                
            } else {
                $comision = 0;
            }

            if (!empty($row['iva'])) {
                try {
                    $iva = floatval($row['iva']);
                } catch (\Throwable $th) {
                    $validation_errors++;
                    $validation_messages .= ($validation_errors) . ': iva inválido. ';
                }
                
            } else {
                $iva = 0;
            }

            if (!empty($row['abono'])) {
                try {
                    $abono = floatval($row['abono']);
                } catch (\Throwable $th) {
                    $validation_errors++;
                    $validation_messages .= ($validation_errors) . ': abono inválido. ';
                }
                
            } else {
                $abono = 0;
            }

            if ($validation_errors > 0) {
                $this->hasErrors = true;
                $this->error_data[] = [
                    'numero_de_linea' => $numRow,
                    'errores' => $validation_messages,
                    'fecha_de_carga' => date('d-m-Y H:i'),
                ];
                return null;
            }

            return [
                'date' => $fecha,
                'purchase_order' => $orden_de_compra,
                'auth_code' => $cod_autorizacion,
                'payer' => $pagador,
                'payment_method' => $medio_de_pago,
                'amount' => $monto,
                'deposit_date' => $fecha_de_abono,
                'commission' => $comision,
                'iva' => $iva,
                'deposit' => $abono,
                'created_at' => ahoraServidor()
            ];
        } catch (\Throwable $e) {
            $this->error_data[] = [
                'numero_de_linea' => $numRow,
                'errores' => 'Excepción: ' . $e->getMessage(),
                'fecha_de_carga' => date('d-m-Y H:i'),
            ];
            return null;
        }
    }
}