Untitled

 avatar
unknown
plain_text
a year ago
2.7 kB
4
Indexable
public function goodsBalance(Request $request): JsonResponse
{
    try {
        $blocked = false;
        $filter = $this->validate($request, [
            'date' => 'required|date',
            'account' => 'nullable|string|regex:/^[0-9]+$/|size:4',
            'warehouse_id' => 'nullable|uuid',
            'product_ids' => 'nullable|array', // Изменено на массив
            'product_ids.*' => 'uuid', // Каждый элемент массива должен быть UUID
        ]);
        if ($request->has('warehouse_id')) {
            $warehouse = Warehouse::findOrFail($request['warehouse_id']);
            if ($warehouse->blocked === true) {
                $blocked = true;
            }
        }
        $query = 'SELECT * FROM warehouse.goods_balance(:mailbox, :date';
        $params = ['mailbox' => $request->user()->profile['mailbox_id'], 'date' => $filter['date']];

        if (isset($filter['account'])) {
            $query .= ', :account';
            $params['account'] = $filter['account'];
        }
        if (isset($filter['warehouse_id'])) {
            $query .= ', :warehouse_id';
            $params['warehouse_id'] = $filter['warehouse_id'];
        }
        if (isset($filter['product_ids']) && count($filter['product_ids']) > 0) {
            $query .= ', :product_ids';
            $params['product_ids'] = $filter['product_ids'];
        }
        $query .= ')';
        DB::beginTransaction();
        if (isset($filter['warehouse_id'])) {
            $readyToSendEntries = ExchangeHistory::where('warehouse_id', $filter['warehouse_id'])->where('accepted', false);
            if ($readyToSendEntries->count() > 0) {
                $readyToSendEntries->update(['accepted' => true]);
            }
        }
        $data = DB::select($query, $params);
        DB::commit();

        return AppResponseService::success('Report goods balance received successfully', $blocked ? [] : $data);
    } catch (ValidationException $exception) {
        DB::rollBack();
        return AppResponseService::error(
            'Report goods balance received unsuccessfully',
            3532,
            422,
            TdrHelpers::validationHandle($exception)
        );
    } catch (Throwable $exception) {
        DB::rollBack();
        app('Illuminate\Contracts\Debug\ExceptionHandler')->report($exception);

        return AppResponseService::error(
            'Report goods balance received unsuccessfully',
            3487,
            500,
            [
                'exception' => class_basename($exception),
                'message' => $exception->getMessage(),
            ]
        );
    }
}
Editor is loading...
Leave a Comment