HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
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/vhost/disk-apps/qas.sports-crowd.com/app/Http/Controllers/Imports/ImportCoverage.php
<?php

namespace App\Http\Controllers\Imports;

use App\Coverage;
use App\City;
use DB;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class ImportCoverage implements ToCollection, WithHeadingRow
{
    public $answer = [];
    public $edit = [
        'creados' => 0,
    ];

    public $data;
    // public $request;
    public $is_error;

    /**
     * @param Collection $collection
     */

    /**
     * @param array $row
     *
     * @return \Illuminate\Database\Eloquent\Model|null
     */

    public function rules(): array
    {
        return [
            '*.nombre_de_la_cobertura'   => 'required',
            '*.costo_de_entrega'         => 'required',
            '*.nombre_de_la_ciudad'      => 'required'
        ];
    }

    public function collection(Collection  $rows)
    {

        $this->data = $rows;
        $is_error = false;
        DB::beginTransaction();
        $cont = 0;
        foreach ($rows as $row) {
            $cont++;
            if (!$row->filter()->isNotEmpty()) {
                $is_error = true;
                $this->answer[] = [
                    'message'  => trans('messages.coverages.title_6', ['position' => $cont]),
                    'state' => false,
                ];
                break;
            }

            // Elimino espacios en blanco inicio y final
            $coverage_name = trim($row["nombre_de_la_cobertura"]);
            $cost_delivery = trim($row["costo_de_entrega"]);
            $active        = trim($row["activo"]);
            $city_name     = trim($row["nombre_de_la_ciudad"]);
            $state_name    = trim($row["nombre_del_estado"]);



            // Validamos que viene informacion
            if (!$coverage_name) {
                $this->answer[] = [
                    'message' => 'Información de nombre no especificada',
                    'state' => false,
                    'line' => $cont
                ];

                $is_error = true;
                continue;
            }

            // Validamos que viene informacion
            if (!$cost_delivery) {
                $this->answer[] = [
                    'message' => 'Información de costo de entrega no especificada',
                    'state' => false,
                    'line' => $cont
                ];

                $is_error = true;
                continue;
            }

            // Validamos que la ciudad exista
            $cities = City::where([['cities.name', $city_name], ['cities.active', 1]])
                ->join('states', 'cities.state_id', '=', 'states.id')
                ->select('cities.id', 'cities.name')
                ->where('states.name', $state_name)
                ->first();

            if (!$cities) {
                $this->answer[] = [
                    'message' => 'La siguiente ciudad no se encontro: ' . $city_name . ', en el estado ' . $state_name,
                    'state' => false,
                    'line' => $cont
                ];

                $is_error = true;
                continue;
            }

            $current_coverage = Coverage::where([['name', $coverage_name], ['city_id', $cities->id]])->first();
            if (!$current_coverage) { // Existe, Actualizar

                $new_coverage = Coverage::create([
                    'name'          => trim($coverage_name),
                    'cost_delivery' => intval($cost_delivery),
                    'active'        => intval($active),
                    'city_id'       => intval($cities->id),
                ]);
                $new_coverage->save();

            }else{
                    $current_coverage->cost_delivery = intval($cost_delivery);
                    $current_coverage->active        = intval($active);
                    $current_coverage->update();
            }

            $this->edit['creados'] += 1;
        }

        if ($is_error || sizeof($rows) <= 0) {
            DB::rollback();
            return;
        } else {
            DB::commit();
        }
    }
}