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/Http/Controllers/ShipmentController.php
<?php

namespace App\Http\Controllers;

use App\Http\Requests\IdRequest;
use App\Http\Requests\Shipment\CreateRequest;
use App\Http\Requests\Shipment\IndexRequest;
use App\Jobs\PekRequest;
use App\Jobs\SdekRequest;
use App\Models\Order;
use App\Models\Permission;
use App\Models\Service\Service;
use App\Models\Shipment;
use App\Services\Order\OrderService;
use App\Services\Shipment\ShipmentService;
use App\Services\Status\StatusService;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\RedirectResponse;
use Illuminate\View\View;

class ShipmentController extends Controller
{

    protected string $permission = Permission::shipments_view;
    protected ShipmentService $service;

    protected string $protectedRedirect = 'shipment.index';

    public function __construct()
    {
        parent::__construct();
        $this->service = new ShipmentService();
    }

    /**
     * Display a listing of the resource.
     *
     * @param IndexRequest $request
     *
     * @return Factory|View
     */
    public function index(IndexRequest $request)
    {
        $data = $this->service->search($request);
        $columns = Shipment::columns();
        $statuses = StatusService::getShipmentAll();

        return view('shipment.list', compact('data', 'columns', 'statuses'))
            ->with(['sections' => ['status']]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @param IdRequest $request
     */
    public function create(IdRequest $request)
    {
        if (can(Permission::shipments_edit)) {
            $model = new Shipment();
            $validate = new CreateRequest();
            $order_id = $request->id;
            $order = OrderService::getById($order_id);

            if ($redirect = $this->isRedirected($order->service_id)) {
                return $redirect;
            }

            if (!$order->canByStatus()) {
                return redirect(route('orders.index'));
            }

            $order_columns = Order::shipment_columns();

            return view('shipment.create', compact('model', 'validate', 'order_id', 'order', 'order_columns'))->with(["sections" => ["delivery_service"]]);
        } else {
            redirect(route('orders.index'));
        }
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param CreateRequest $request
     *
     * @return RedirectResponse
     */
    public function store(CreateRequest $request)
    {
        $order = OrderService::getById($request->order_id);
        if ($redirect = $this->isRedirected($order->service_id)) {
            return $redirect;
        }

        $this->service->save($request);

        return redirect()->route('shipment.index')
            ->with(["messageSuccess" => __('shipment.messageCreate')]);
    }

    /**
     * Display the specified resource.
     *
     * @param IdRequest $request
     *
     * @return Factory|View
     */
    public function show(IdRequest $request)
    {
        /** @var Shipment $model */
        $model = $this->service->getById($request->id);

        $order_columns = Order::shipment_columns();

        return view('shipment.show', compact('model', 'order_columns'));
    }

    public function status(IdRequest $request)
    {
        $model = $this->service->getById($request->id);

        $model->error = 0;
        $model->update();

        if ($model->delivery_service == Service::TYPE_CDEK) {
            SdekRequest::dispatch($model);
        }

        if ($model->delivery_service == Service::TYPE_PEK) {
            PekRequest::dispatch($model);
        }

        return redirect()->route('shipment.index')
            ->with(["messageSuccess" => __('shipment.statusUpdateQueue')]);
    }
}