File: /var/www/ipsremont-demo/app/Repository/Wcc/WccRepository.php
<?php
namespace App\Repository\Wcc;
use App\Helpers\UserHelper;
use App\Http\Requests\ActTc\IndexRequest;
use App\Http\Requests\Wcc\UpdateRequest;
use App\Models\WorkCompleteCertificate;
use App\Models\WorkCompleteCertificateChangeLog;
use App\Models\WorkCompleteCertificateItem;
use App\Repository\BaseRepository;
use App\Traits\GridTrait;
class WccRepository extends BaseRepository
{
use GridTrait;
public static function getQuery()
{
return WorkCompleteCertificate::query();
}
/**
* @param IndexRequest $request
*
* @return mixed
*/
public function search(IndexRequest $request)
{
$query = self::getAvailable();
if (isset($request->id) && !empty($request->id)) {
$query->where('id', $request->id);
}
return $query->appends($request->all());
}
public function update(UpdateRequest $request)
{
/** @var WorkCompleteCertificate $model */
$model = self::getById($request->id);
$model->work_description = $request->work_description;
$model->executor = $request->executor;
$model->serial_number = $request->serial_number;
$model->client = $request->client;
$model->device_name = $request->device_name;
$model->result = $request->result;
if ($model->isDirty()) {
WccLogRepository::log($model->id, $model, WorkCompleteCertificateChangeLog::TYPE_UPDATE);
}
$workCompleteCertificateItems = $model->workCompleteCertificateItems->keyBy('id');
$isItemsChanged = false;
foreach ($request->workCompleteCertificateItems ?? [] as $itemId => $requestWorkCompleteCertificateItem) {
$needCreate = empty($workCompleteCertificateItems[$itemId]);
$workCompleteCertificateItem = $needCreate ? new WorkCompleteCertificateItem() : $workCompleteCertificateItems[$itemId];
$workCompleteCertificateItem->name = $requestWorkCompleteCertificateItem['name'];
$workCompleteCertificateItem->amount = $requestWorkCompleteCertificateItem['amount'];
$workCompleteCertificateItem->article = $requestWorkCompleteCertificateItem['article'];
if ($needCreate) {
$isItemsChanged = true;
$workCompleteCertificateItem->work_complete_certificate_id = $model->id;
$workCompleteCertificateItem->save();
WccLogRepository::newItemLog($workCompleteCertificateItem);
} elseif ($workCompleteCertificateItem->isDirty()) {
$isItemsChanged = true;
WccLogRepository::log($model->id, $workCompleteCertificateItem, WorkCompleteCertificateChangeLog::TYPE_UPDATE);
$workCompleteCertificateItem->save();
}
}
$requestItemIds = array_keys($request->workCompleteCertificateItems ?? []);
foreach ($workCompleteCertificateItems as $itemId => $workCompleteCertificateItem) {
if (in_array($itemId, $requestItemIds)) {
continue;
}
$isItemsChanged = true;
WccLogRepository::deleteItemLog($workCompleteCertificateItem);
$workCompleteCertificateItem->delete();
}
if ($model->isDirty() || $isItemsChanged) {
$user = UserHelper::getUser();
if (isset($user) && $user->isService()) {
$chaged = $model->getDirty();
if (1 !== count($chaged) || !isset($chaged['result'])) {
$model->is_updated = 1;
}
}
}
$model->update();
return $model;
}
public static function getWorkCompleteCertificateItem(int $itemId): ?WorkCompleteCertificateItem
{
/** @var WorkCompleteCertificateItem $workCompleteCertificateItem * */
$workCompleteCertificateItem = WorkCompleteCertificateItem::withTrashed()->find($itemId);
return $workCompleteCertificateItem;
}
}