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