Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
peripherad
/
back
/
app
/
Http
/
Controllers
/
Api
/
V1
/
Auth
:
ContragentsController.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php declare(strict_types=1); namespace App\Http\Controllers\Api\V1; use App\Attributes\OpenApiResponse; use App\Domain\Counterparty\CounterPartyService; use App\Domain\Counterparty\Requests\CreateNewRequest; use App\Domain\Counterparty\Requests\UpdateRequest; use App\Http\Controllers\Api\ApiController; use App\Models\Counterparty; use App\Requests\SearchRequest; use App\Responses\ResponseDto; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use Knuckles\Scribe\Attributes\Group; /** * Контроллер для управления счетами */ class ContragentsController extends ApiController { protected CounterPartyService $counterPartyService; public function __construct(counterPartyService $counterPartyService) { $this->counterPartyService = $counterPartyService; } /** * Получение списка * * @queryParam search string Поисковый запрос для фильтрации. Пример: "Laravel" */ #[Group('contragents')] public function index(int $modelID, SearchRequest $request): ResponseDto { return new ResponseDto( data: $this->counterPartyService->getAll($modelID, $request)->simplePaginate(4000), status: true ); } public function listWithoutPaginate(int $modelID, SearchRequest $request) { return new ResponseDto( data: $this->counterPartyService->getAll($modelID, $request)->get(), status: true ); } /** * Получение по ID * * @param int $modelID * @param int $id * @return ResponseDto */ #[Group('contragents')] public function show(int $modelID, int $id): ResponseDto { $account = $this->counterPartyService->getById($id); return new ResponseDto( data: $account, status: true ); } /** * Создание * * @param int $modelID * @param CreateNewRequest $request * @return ResponseDto */ #[Group('contragents')] #[OpenApiResponse(ResponseDto::class)] public function store(int $modelID, CreateNewRequest $request): ResponseDto { $account = $this->counterPartyService->addNew($modelID, $request); return new ResponseDto( data: $account, status: true ); } /** * Обновление * * @param int $modelID * @param int $id * @param UpdateRequest $request * @return ResponseDto */ #[Group('contragents')] #[OpenApiResponse(ResponseDto::class)] public function update(int $modelID, int $id, Request $request): ResponseDto { $account = $this->counterPartyService->update($id, $request); return new ResponseDto( data: $account, status: true ); } /** * Удаление * * @param int $modelID * @param int $id * @return ResponseDto */ #[Group('contragents')] #[OpenApiResponse(ResponseDto::class)] public function destroy(int $modelID, int $id, Request $request): ResponseDto { if(!$request->has('transfer_id') || !(int) $request->get('transfer_id')) { return $this->error('Не передан контрагент, для переноса платежей'); } $transferId = (int) $request->get('transfer_id'); if($id == $transferId) { return $this->error('Нельзя перенести данные в удаляемого контрагента'); } $this->counterPartyService->getById($id); if(!$this->counterPartyService->transferPayments($id, $transferId)) { return $this->error('Не удалось перенести платежи'); } $this->counterPartyService->delete($id); return new ResponseDto( status: true ); } /** * Получение списка вместе с платежами * * @queryParam search string Поисковый запрос для фильтрации. Пример: "Laravel" */ #[Group('contragents')] public function contragentsWithPayments(int $modelID, SearchRequest $request): ResponseDto { $result = []; $this->counterPartyService->getAll($modelID, $request)->with('payments') ->each(function ($item) use (&$result): void { $amount = 0; foreach ($item->payments as $payment) { $amount += $payment->amount; } /** @var Counterparty $item */ $item->forceFill([ 'payments_amount' => $amount ]); $result[] = $item; }); return new ResponseDto( data: $result, status: true ); } }