pipicar/modules/applications/Logic/Approve.php

107 lines
3.7 KiB
PHP

<?php
namespace App\Modules\applications\Logic;
use A7kz\Platform\Models\UniModel;
use A7kz\Platform\Modules\Platform\Acl\Facades\Acl;
use A7kz\Platform\Modules\Platform\Core\Services\Base\Logic;
use App\Models\User;
use App\Modules\applications\Enum\ApplicationStatus;
use App\Modules\auto\Enums\AutoStatusEnums;
use Carbon\CarbonPeriod;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Hash;
class Approve extends Logic
{
public function run()
{
$user = new User();
if (!isset($this->row->user_id)) {
$checkUser = UniModel::model('core_users')->where('email', $this->row->user_email)->first();
if (isset($checkUser)) {
$this->row->user_id = $checkUser->id;
$this->row->save();
} else {
$user->forceFill([
'name' => $this->row->user_name . ' ' . $this->row->surname_name,
'username' => $this->row->user_email,
'email' => $this->row->user_email,
'phone' => $this->row->user_phone,
'password' => Hash::make('password'),
]);
$user->save();
$this->row->user_id = $user->id;
$this->row->save();
$userRole = UniModel::model('core_roles')
->where('alias', 'user')
->first();
if (!empty($userRole)) {
$userRoleModel = UniModel::model('core_user_roles');
$userRoleModel->forceFill([
'user_id' => $user->id,
'role_id' => $userRole->id
]);
$userRoleModel->save();
}
$company = UniModel::model(config('platform.company.tables.company'))
->firstOrCreate([
'name' => $this->row->user_name . ' ' . $this->row->surname_name,
'biniin' => $this->row->biniin ?? '',
'fullname' => $this->row->user_name . ' ' . $this->row->surname_name,
'segment' => 'sol'
]);
$ucr = UniModel::model(config('platform.company.tables.company_user_role'))
->firstOrCreate([
'user_id' => $user->id,
'role_id' => 7,
'company_id' => $company->id
]);
if (!$ucr) {
UniModel::model(config('platform.company.tables.company_user_role'))
->create([
'user_id' => $user->id,
'role_id' => 6,
'company_id' => $company->id
]);
}
UniModel::model(config('platform.company.tables.company_user'))
->firstOrCreate([
'company_id' => $company->id,
'user_id' => $user->id,
'default' => true,
]);
}
}
$this->fillCalendar($this->row);
$this->row->status = ApplicationStatus::approved->value;
$this->row->save();
return $this->response();
}
private function fillCalendar($row): void
{
$period = CarbonPeriod::create($row->started_at, $row->ended_at);
$dates = array_map(fn($date) => $date->toDateString(), iterator_to_array($period));
foreach ($dates as $date) {
UniModel::model('pipi_auto_calendar')->create([
'auto_id' => $row->car_id,
'date' => $date,
'status' => AutoStatusEnums::Rent->name
]);
}
}
}