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);
}
}