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