File: /var/www/ipsremont-demo/app/Repository/ActTc/ActTcRepository.php
<?php
namespace App\Repository\ActTc;
use App\Http\Requests\ActTc\CreateRequest;
use App\Http\Requests\ActTc\IndexRequest;
use App\Http\Requests\ActTc\UpdateRequest;
use App\Models\ActTc;
use App\Repository\BaseRepository;
use App\Services\Repair\RepairService;
use App\Traits\GridTrait;
class ActTcRepository extends BaseRepository
{
use GridTrait;
public static function getQuery()
{
return ActTc::query();
}
/**
* @param IndexRequest $request
*
* @return mixed
*/
public function search(IndexRequest $request)
{
$query = self::getAvailable();
$this->makeQueryOrdered(ActTc::class, $query, $request);
if (isset($request->serial_number) && !empty($request->serial_number)) {
$query->where('serial_number', 'like', '%' . $request->serial_number . '%');
}
if (isset($request->client) && !empty($request->client)) {
$query->whereHas('repair', function ($query) use ($request) {
$query
->where('name', 'like', '%' . $request->client . '%')
->orWhere('email', 'like', '%' . $request->client . '%')
->orWhere('phone', 'like', '%' . $request->client . '%');
});
}
if (isset($request->id) && !empty($request->id)) {
$query->where('id', $request->id);
}
if (isset($request->repair_id) && !empty($request->repair_id)) {
$query->where('repair_id', $request->repair_id);
}
if (isset($request->status) && !empty($request->status)) {
$query->where('status', $request->status);
}
if (isset($request->branch_id) && !empty($request->branch_id)) {
$query->where('branch_id', $request->branch_id);
}
if (isset($request->service_id) && !empty($request->service_id)) {
$query->where('service_id', $request->service_id);
}
$perPage = $request->per_page ?? config('crud.defaultPerPage');
return $query->paginate((int) $perPage)->appends($request->all());
}
/**
* @param CreateRequest $request
*/
public function save(CreateRequest $request)
{
$model = new ActTc();
$request->validate($request->rules());
$fields = $request->all();
$model->fill($fields);
$repair = RepairService::getById($request->repair_id);
$model->serial_number = $repair->serial_number;
$model->repair_id = $repair->id;
$model->device_id = $repair->device_id ?? 0;
$model->service_id = $repair->service_id;
$model->branch_id = $repair->branch_id;
$model->status = 'new';
$model->reason_for_confirmation = '';
$model->save();
if (!empty($request->get('filePath'))) {
$fileName = basename($request->get('filePath')[0]);
$filePath = storage_path('app/public/acttc') . '/' . $fileName;
$newFileName = str_replace('0_', $model->id . '_', $fileName);
$newFilePath = storage_path('app/public/acttc') . '/' . $newFileName;
rename($filePath, $newFilePath);
$model->file_path = $newFileName;
$model->save();
}
return $model;
}
public function update(UpdateRequest $request)
{
$model = self::getById($request->id);
$model->reason_for_confirmation = $request->reason_for_confirmation;
$model->additional_info = $request->additional_info;
if ($model->isAllowManager($request->status)) {
$model->status = $request->status;
}
$model->update();
return $model;
}
public function updateSource(CreateRequest $request)
{
$model = self::getById($request->acttc_id);
$fields = $request->all();
if (!empty($request->get('filePath'))) {
$fields['file_path'] = basename($request->get('filePath')[0]);
}
$model->fill($fields);
$model->update();
return $model;
}
public static function getByRepairId($repair_id)
{
return ActTc::where('repair_id', $repair_id)->first();
}
}