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/HistoricalPayrollImport.php
<?php

namespace App\Imports;

use PhpOffice\PhpSpreadsheet\Shared\Date;
use Illuminate\Support\Facades\Log;

class HistoricalPayrollImport extends AbstractChunksImport
{
     protected function getExpectedHeaders(): array
    {
        return [
            "funcionario",
            "rut",
            "diastra",
            "sueldob",
            "hextra_lr",
            "gratifi",
            "bonos",
            "comision",
            "otrohab",
            "topimpo",
            "asig_fam",
            "bono_moviliz",
            "ohabnoimpo",
            "tothaberes",
            "afp",
            "isapre",
            "seg_cesan",
            "impto",
            "anticipos",
            "otrodescto",
            "totdescto",
            "liquido",
            "fecha"
        ];
    }

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

    protected function getSheetName()
    {
        return 0;
    }

    protected int $headingRowIndex = 1;

    protected function normalizeRow(array $row, int $numRow): ?array
    {
        $validation_errors = 0;
        $validation_messages = '';

        try {
            // Validación de data
            if (!empty($row['funcionario'])) {
                $funcionario = $row['funcionario'];
            } else {
                $funcionario = null;
            }


            if (!empty($row['rut'])) {
                if (!validateRut(trim($row['rut']))) {
                    $validation_errors++;
                    $validation_messages .= ($validation_errors) . ': rut inválido. ';
                } else {
                    $rut = formateaRut($row['rut']);
                }
            } else {
                $rut = null;
            }

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

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

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

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

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

            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['otrohab'])) {
                try {
                    $otrohab = floatval($row['otrohab']);
                } catch (\Throwable $th) {
                    $validation_errors++;
                    $validation_messages .= ($validation_errors) . ': otrohab inválido. ';
                }
            } else {
                $otrohab = 0;
            }

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

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

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

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

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

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

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

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

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

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

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

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

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

            if (!empty($row['fecha'])) {
                try {
                    $date = Date::excelToDateTimeObject($row['fecha']);
                    $fecha = $date->format('Y-m-d');
                } catch (\Throwable $th) {
                    $validation_errors++;
                    $validation_messages .= ($validation_errors) . ': fecha inválida. ';
                }
            } else {
                $fecha = null;
            }

            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 [
                'employee_name'              => $funcionario,
                'employee_rut'               => $rut,
                'worked_days'                => $diastra,
                'base_salary'                => $sueldob,
                'overtime_hours'             => $hextra_lr,
                'bonus_gratuity'             => $gratifi,
                'bonus'                      => $bonos,
                'commission'                 => $comision,
                'other_taxable_income'       => $otrohab,
                'taxable_income'             => $topimpo,
                'family_allowance'           => $asig_fam,
                'mobility_bonus'             => $bono_moviliz,
                'other_nontaxable_income'    => $ohabnoimpo,
                'total_income'               => $tothaberes,
                'afp_contribution'           => $afp,
                'isapre_contribution'        => $isapre,
                'unemployment_insurance'     => $seg_cesan,
                'tax'                        => $impto,
                'advances'                   => $anticipos,
                'other_deductions'           => $otrodescto,
                'total_deductions'           => $totdescto,
                'net_salary'                 => $liquido,
                'date'                       => $fecha,
                '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;
        }
    }
}