Untitled

 avatar
unknown
plain_text
4 years ago
5.9 kB
5
Indexable
<?php

namespace App\Imports\V2\HealthTracker;

use App\CoreArea;
use App\CoreEmployee;
use App\Models\v2\General\Lists;
use App\Models\v2\General\ListType;
use App\Models\v2\HealthTracker\HtOrganizationalUnit;
use Carbon\Carbon;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class EmployeesImport implements ToModel, WithHeadingRow
{
    public function model(array $row)
    {
        if (!is_null($row['uen']) && $row['uen'] != '' && $row['uen'] != '-') {
            $nameSociety = $row['uen'];
            $society = DB::table('societies')
                ->select('id', 'name')
                ->where('name', 'LIKE', "%$nameSociety%")
                ->first();
        }

        if (!is_null($row['posicion']) && $row['posicion'] != '' && $row['posicion'] != '-') {
            $namePosition = $row['posicion'];
            $position = DB::table('positions')
                ->select('id', 'name')
                ->where('name', 'LIKE', "%$namePosition%")
                ->first();
        }

        if (!is_null($row['nombre_jefe_inmediato']) && $row['nombre_jefe_inmediato'] != '' && $row['nombre_jefe_inmediato'] != '-') {
            $nameBoss = $row['nombre_jefe_inmediato'];
            $boss = DB::table('core_employees')
                ->select('id')
                ->where('name', 'LIKE', "%$nameBoss%")
                ->first();
        }

        if (!is_null($row['unidad_organizativa']) && $row['unidad_organizativa'] != '' && $row['unidad_organizativa'] != '-') {
            $nameArea = $row['unidad_organizativa'];
            $area = DB::table('core_areas')
                ->select('id')
                ->where('name', 'LIKE', "%$nameArea%")
                ->first();

            if (is_null($area)) {
                $area = new CoreArea();
                $area->name = $nameArea;
                $area->save();
            }
        }

        if (!is_null($row['me_macro_ent_name']) && $row['me_macro_ent_name'] != '' && $row['me_macro_ent_name'] != '-') {
            $organizationalUnitName = $row['me_macro_ent_name'];
            $organizationalUnit = DB::table('ht_organizational_unit')
                ->select('id')
                ->where('name', 'LIKE', "%$organizationalUnitName%")
                ->first();

            if (is_null($organizationalUnit)) {
                $organizationalUnit = new HtOrganizationalUnit();
                $organizationalUnit->name = $organizationalUnitName;
                $organizationalUnit->save();
            }
        }

        if (!is_null($row['eps_empleado']) && $row['eps_empleado'] != '' && $row['eps_empleado'] != '-') {
            $nameEps = ucwords(strtolower($row['eps_empleado']));
            $eps = DB::table('lists')
                ->select('id')
                ->where('name', 'LIKE', "%$nameEps%")
                ->first();

            if (is_null($eps)) {

                $typeListEps = DB::table('list_types')
                    ->select('id')
                    ->where('name', 'EPS')
                    ->first();

                if (is_null($typeListEps)) {
                    $typeListEps = new ListType();
                    $typeListEps->name = 'EPS';
                    $typeListEps->save();
                }

                $eps = new Lists();
                $eps->name = ucwords(strtolower($row['eps_empleado']));
                $eps->type_list_id = $typeListEps->id;
                $eps->save();
            }
        }

        $birthDate = $row['fecha_de_nacimiento'];
        $data = [
            'sharp_id' => $row['n_sharp'],
            'name' => ucwords(strtolower($row['nombre_completo'])),
            'position_type' => strtolower($row['tipo_de_posicion']),
            'age' => (!is_null($row['edad']) && $row['edad'] != '' && $row['edad'] != '-') ? $row['edad'] : null,
            'birthdate' => (!is_null($birthDate) && $birthDate != '' && $birthDate != '-') ? Carbon::parse(strtotime($birthDate))->format('Y-m-d') : null,
            'cc' => $row['n_identificacion'],
            'gender' => strtolower($row['genero']),
            'email' => strtolower($row['correo']),
            'society_id' => (isset($society)) ? $society->id : null,
            'position_id' => (isset($position)) ? $position->id : null,
            'boss_id' => (isset($boss)) ? $boss->id : null,
            'eps_id' => (isset($eps)) ? $eps->id : null,
            'core_area_id' => (isset($area)) ? $area->id : null,
            'ht_organizational_unit_id' => (isset($organizationalUnit)) ? $organizationalUnit->id : null,
        ];

        $message = 'Se actualizo el empleado';

        $employee = CoreEmployee::query()
            ->where('cc', $row['n_identificacion'])
            ->first();

        if (is_null($employee)) {
            $employee = new CoreEmployee();
            $message = 'Se creo el empleado';
        }

        $employee->forceFill($data);
        $employee->save();

        Log::info($message . ' ' . $employee->name);

        for ($i = 1; $i <= 3; $i++) {
            if (!is_null($row['sindicato_' . $i]) && $row['sindicato_' . $i] != '' && $row['sindicato_' . $i] != '-') {
                $laborUnion = DB::table('labor_unions')
                    ->select('id', 'name')
                    ->where('name', strtoupper($row['sindicato_' . $i]))
                    ->first();

                if (!is_null($laborUnion)) {
                    DB::table('core_employees_labor_unions')->insert([
                        [
                            'core_employee_id' => $employee->id,
                            'labor_union_id' => $laborUnion->id,
                            'created_at' => Carbon::now()
                        ]
                    ]);
                }
            }
        }
    }
}
Editor is loading...