File: /var/www/vhost/disk-apps/demo.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();
}
}
}