File: /var/www/ipsremont-demo/app/Http/Controllers/AjaxController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests\AjaxSelectRequest;
use App\Http\Requests\IdRequest;
use App\Http\Requests\Order\CreateDataRequest;
use App\Http\Requests\Repair\PriceRequest;
use App\Models\Device;
use App\Models\Repair\Repair;
use App\Repository\Device\DeviceRepository;
use App\Repository\Repair\RepairRepository;
use App\Services\Address\AddressService;
use App\Services\Errors\ErrorsService;
use App\Services\Part\PartService;
use App\Services\Repair\RepairService;
use App\Services\Service\ServiceService;
use App\Traits\RoleTrait;
use App\Traits\UserTrait;
use function GuzzleHttp\json_encode;
class AjaxController extends Controller
{
use UserTrait, RoleTrait;
/** @var string */
protected string $permission = '';
protected $service;
/**
* @param AjaxSelectRequest $request {id, search, type = null or 'avail'
*
* @return \Illuminate\Http\JsonResponse
*/
public function serviceList(AjaxSelectRequest $request)
{
$id = 0;
if ($request->id) {
$id = $request->id;
} elseif ($request->branch_id) {
$id = $request->branch_id;
}
$items = ($id) ? ServiceService::getByBranchAjax($id, $request->search, $request->type) : [];
return response()->json(compact('items'));
}
public function getParts(IdRequest $request)
{
$items = PartService::searchByNameOrCode($request->q);
return response()->json(compact('items'));
}
public function createDataOrder(CreateDataRequest $request)
{
$address = AddressService::getById($request->address_id);
return json_encode($address);
}
public function getPrice(PriceRequest $request): int
{
/** @var Repair $repair */
$repair = RepairService::getById($request->repair_id);
/** @var Device $device */
$device = DeviceRepository::getById($request->device_id);
return RepairRepository::getPrice($repair->service_id, $request->repair_category, $device->external_id);
}
public function getErrorCodes(AjaxSelectRequest $request)
{
$items = ErrorsService::getCodes($request->id);
return response()->json(compact('items'));
}
}