File: /var/www/ipsremont-demo/app/Repository/Wcc/WccLogRepository.php
<?php
namespace App\Repository\Wcc;
use App\Helpers\UserHelper;
use App\Models\BaseModel;
use App\Models\WorkCompleteCertificateChangeLog;
use App\Models\WorkCompleteCertificateItem;
use App\Repository\BaseRepository;
use App\Traits\GridTrait;
class WccLogRepository extends BaseRepository
{
use GridTrait;
public const NOT_LOG_FIELDS = [
'id',
'repair_id',
'updated_at',
'created_at',
];
public static function getQuery()
{
return WorkCompleteCertificateChangeLog::query();
}
public static function log(int $workCompleteCertificateId, BaseModel $model, int $type = WorkCompleteCertificateChangeLog::TYPE_CREATE): void
{
$isCreate = WorkCompleteCertificateChangeLog::TYPE_CREATE === $type;
$diff = $isCreate ? $model->getAttributes() : $model->getDirty();
foreach ($diff as $field => $value) {
if (in_array($field, self::NOT_LOG_FIELDS, true)) {
continue;
}
$repairChangeLog = new WorkCompleteCertificateChangeLog();
$repairChangeLog->work_complete_certificate_id = $workCompleteCertificateId;
$repairChangeLog->user_id = UserHelper::getUser()->id ?? null;
$repairChangeLog->field = $field;
$repairChangeLog->old_value = $isCreate ? null : $model->getOriginal($field);
$repairChangeLog->new_value = $value;
$repairChangeLog->type = $type;
$repairChangeLog->save();
}
}
public static function changeItemStatusLog(WorkCompleteCertificateItem $item, $isDeleted = false, int $type = WorkCompleteCertificateChangeLog::TYPE_CREATE): void
{
$repairChangeLog = new WorkCompleteCertificateChangeLog();
$repairChangeLog->work_complete_certificate_id = $item->work_complete_certificate_id;
$repairChangeLog->user_id = UserHelper::getUser()->id ?? null;
$repairChangeLog->field = $isDeleted ? 'deleted_item' : 'new_item';
$repairChangeLog->new_value = $item->id;
$repairChangeLog->type = $type;
$repairChangeLog->save();
}
public static function newItemLog(WorkCompleteCertificateItem $item): void
{
self::changeItemStatusLog($item);
}
public static function updateItemLog(WorkCompleteCertificateItem $item): void
{
self::changeItemStatusLog($item, false, WorkCompleteCertificateChangeLog::TYPE_UPDATE);
}
public static function deleteItemLog(WorkCompleteCertificateItem $item): void
{
self::changeItemStatusLog($item, true, WorkCompleteCertificateChangeLog::TYPE_DELETE);
}
}