HEX
Server: LiteSpeed
System: Linux sv4.hami.host 5.14.0-611.54.3.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:31:24 EDT 2026 x86_64
User: armgroup (1008)
PHP: 8.2.32
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open, mail, socket_create, socket_create_listen, socket_create_pair, link, dl, openlog, syslog, stream_socket_server, curl_multi_init
Upload Files
File: /home/armgroup/libs/app/Http/Controllers/Admin/OrderController.php
<?php

namespace App\Http\Controllers\Admin;

use App\DataTables\OrdersDataTable;
use App\Enums\OrderPaymentType;
use App\Http\Controllers\Controller;
use App\Models\Order;
use App\Models\OrderProduct;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class OrderController extends Controller
{
    public function __construct()
    {
        $this->middleware('permission:manage all orders');
    }

    public function index(OrdersDataTable $dataTable)
    {
        return $dataTable->render('admin.orders.index');
    }

    public function edit(Order $order)
    {
        if (! $order->checked) {
            $order->update(['checked' => true]);
        }

        $order->load('user', 'discountCode', 'payments');

        $orderProducts = OrderProduct::query()
            ->with('product:id,code,slug')
            ->where('order_id', $order->id)
            ->get();

        $address = $order->addresses()->with('city', 'city.province')->first();

        return view('admin.orders.edit', compact('order', 'address', 'orderProducts'));
    }

    public function show(Order $order)
    {
        if (! $order->checked) {
            $order->update(['checked' => true]);
        }

        $order->load('user', 'discountCode');

        $orderProducts = OrderProduct::query()
            ->with('product:id,code,slug')
            ->where('order_id', $order->id)
            ->get();

        $address = $order->addresses()->with('city', 'city.province')->first();

        return view('admin.orders.show', compact('order', 'address', 'orderProducts'));
    }

    public function destroy(Order $order)
    {
        if ($order->payment_type->is(OrderPaymentType::WALLET) || ($order->payment_type->is(OrderPaymentType::ONLINE) && $order->payments()->where('status', true)->exists())) {
            $this->doneMessage('امکان حذف سفارشاتی که پرداخت شده‌اند وجود ندارد!', 'error');

            return redirect()->route('admin.orders.index');
        }

        DB::transaction(function () use ($order) {
            $address = $order->addresses()->first();

            $check = DB::table('addressables')->where('address_id', $address->id)->count();

            if ($check == 1) {
                $address->delete();
            }

            DB::table('addressables')
                ->where('address_id', $address->id)
                ->where('addressable_id', $order->id)
                ->where('addressable_type', Order::class)->delete();

            $order->delete();

            saveActivity("سفارش {$order->tracking_code} حذف شد", $order);
        });

        $this->doneMessage("سفارش $order->tracking_code با موفقیت حذف شد");

        return back();
    }

    public function groupPrint(Request $request)
    {
        $ids = array_filter(explode(',', $request->ids), function ($value) {
            return is_numeric($value);
        });

        $orders = [];
        if (count($ids)) {
            $orders = Order::query()
                ->whereIn('id', $ids)
                ->with(['user', 'discountCode', 'addresses', 'addresses.city', 'addresses.city.province'])
                ->get();
        }

        if (! count($orders)) {
            $this->doneMessage('هیچ سفارشی برای چاپ پیدا نشد!', 'error');

            return redirect()->route('admin.orders.index');
        }

        $orderProducts = OrderProduct::query()
            ->with('product:id,code,slug')
            ->whereIn('order_id', $orders->pluck('id')->toArray())
            ->get();

        return view('admin.orders.group-print', compact('orders', 'orderProducts'));
    }
}