HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/ipsremont-demo/app/Services/WorkCompleteCertificate/WorkCompleteCertificateService.php
<?php

namespace App\Services\WorkCompleteCertificate;

use App\Http\Requests\Wcc\UpdateRequest;
use App\Models\Repair\Repair;
use App\Models\WorkCompleteCertificate;
use App\Models\WorkCompleteCertificateItem;
use App\Repository\Wcc\WccLogRepository;
use App\Repository\Wcc\WccRepository;

class WorkCompleteCertificateService
{

    private WccRepository $repository;

    public function __construct(WccRepository $repository)
    {
        $this->repository = $repository;
    }

    /**
     * @param $id
     *
     * @return mixed
     */
    public static function getById($id)
    {
        return WccRepository::getById($id);
    }

    public static function createItemLog(int $wccId, string $name, int $amount, string $article)
    {
        $newWorkCompleteCertificateItem = new WorkCompleteCertificateItem();
        $newWorkCompleteCertificateItem->work_complete_certificate_id = $wccId;
        $newWorkCompleteCertificateItem->name = $name;
        $newWorkCompleteCertificateItem->amount = $amount;
        $newWorkCompleteCertificateItem->article = $article;
        $newWorkCompleteCertificateItem->save();
        WccLogRepository::newItemLog($newWorkCompleteCertificateItem);
    }

    public static function createFromRepair(Repair $repair): void
    {
        // Не может быть АВР если есть акт ТС
        if (isset($repair->acttc)) {
            return;
        }

        $workCompleteCertificate = new WorkCompleteCertificate();
        $workCompleteCertificate->repair_id = $repair->id;
        $workDescriptions = [
            'Группа кодов неисправности: ' . $repair->getErrorGroup(),
            'Код неисправности: ' . $repair->getErrorName(),
            'Дата завершения: ' . date('d.m.Y', strtotime($repair->closed_at)),
            'Описание работ: ' . $repair->work_description,
        ];
        $workCompleteCertificate->serial_number = $repair->serial_number;
        $workCompleteCertificate->device_name = empty($repair->device) ? $repair->device_sku . ', ' . $repair->device_name : $repair->device->getSerialName();
        $workCompleteCertificate->client = $repair->name;
        $workCompleteCertificate->executor = $repair->service->getName();
        $workCompleteCertificate->work_description = implode(PHP_EOL, $workDescriptions);
        $workCompleteCertificate->save();
        WccLogRepository::log($workCompleteCertificate->id, $workCompleteCertificate);
        foreach ($repair->orders as $order) {
            foreach ($order->order_items as $item) {
                self::createItemLog($workCompleteCertificate->id, $item->part->name, $item->amount, $item->part->external_id);
            }
        }
        foreach ($repair->repairItems as $item) {
            self::createItemLog($workCompleteCertificate->id, 'Своя деталь', $item->amount, $item->vendor_code);
        }
    }

    public function update(UpdateRequest $request)
    {
        return $this->repository->update($request);
    }
}