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;
}
}
}