diff --git a/app/Http/Controllers/admin/OrderController.php b/app/Http/Controllers/admin/OrderController.php index a2870af..748b3c6 100644 --- a/app/Http/Controllers/admin/OrderController.php +++ b/app/Http/Controllers/admin/OrderController.php @@ -34,6 +34,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Carbon; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Validator; +use Yajra\DataTables\Facades\DataTables; class OrderController extends Controller @@ -55,11 +56,9 @@ class OrderController extends Controller ) {} public function index(Request $request) { - $orders = $this->orderRepository->filter($request->merge(['page' => $request->get('page', 1)])->all(), ['payment', 'customer', 'invoice']); - $title = 'List all orders'; - return view('administrator.pages.order.index', compact('title', 'orders')); + return view('administrator.pages.order.index', compact('title')); } // Tính billing @@ -261,12 +260,12 @@ class OrderController extends Controller public function create() { $title = 'Add new Order for Customer'; - $customer = Customer::select('id', 'firstname', 'lastname')->where('status', 1)->get(); + $customer = Customer::select('id', 'fullname')->where('status', 1)->get(); $payment = Payment::select('id', 'name')->where('status', 1)->get(); $discount = Discount::select('id', 'code', 'save', 'type')->where('status', 1)->get(); - $type = Type::select('id', 'name')->where('status', 1)->get(); + // $type = Type::select('id', 'name')->where('status', 1)->get(); - return view('administrator.pages.order.add', compact('title', 'customer', 'payment', 'discount', 'type')); + return view('administrator.pages.order.add', compact('title', 'customer', 'payment', 'discount')); } public function edit(int $id = 0) @@ -407,4 +406,43 @@ class OrderController extends Controller return back()->with('success', 'Delete Success'); } + + public function datatable(Request $request) + { + $query = $this->orderRepository->filter( + $request->all(), + ['payment', 'customer', 'invoice'], + [], + ['*'], + true + ); + + return DataTables::eloquent($query) + ->addColumn('order_num', function ($d) { + return view('administrator.pages.order.datatable.order_num', ['row' => $d])->render(); + }) + ->addColumn('date', function ($d) { + return view('administrator.pages.order.datatable.date', ['row' => $d])->render(); + }) + ->addColumn('customer', function ($d) { + return view('administrator.pages.order.datatable.customer', ['row' => $d])->render(); + }) + ->addColumn('payment', function ($d) { + return view('administrator.pages.order.datatable.payment', ['row' => $d])->render(); + }) + ->addColumn('amount', function ($d) { + return view('administrator.pages.order.datatable.amount', ['row' => $d])->render(); + }) + ->addColumn('invoice_status', function ($d) { + return view('administrator.pages.order.datatable.invoice_status', ['row' => $d])->render(); + }) + ->addColumn('status', function ($d) { + return view('administrator.pages.order.datatable.status', ['row' => $d])->render(); + }) + ->addColumn('action', function ($d) { + return view('administrator.pages.order.datatable.action', ['row' => $d])->render(); + }) + ->rawColumns(['order_num', 'date', 'customer', 'payment', 'amount', 'invoice_status', 'status', 'action']) + ->make(true); + } } diff --git a/app/Repositories/Order/OrderCachedRepository.php b/app/Repositories/Order/OrderCachedRepository.php index b70059b..21b60ac 100644 --- a/app/Repositories/Order/OrderCachedRepository.php +++ b/app/Repositories/Order/OrderCachedRepository.php @@ -16,8 +16,12 @@ class OrderCachedRepository extends BaseCachedRepository implements OrderReposit { return $this->orderRepository->getModel(); } - public function filter(array $data = [], array $relationships = [], array $withCount = [], array $select = ['*']) + public function filter(array $data = [], array $relationships = [], array $withCount = [], array $select = ['*'], bool $returnQuery = false) { + if ($returnQuery) { + return $this->orderRepository->filter($data, $relationships, $withCount, $select, true); + } + $cacheKey = $this->getCacheKey(md5(json_encode([ 'filterItem' => [ 'data' => $data, diff --git a/app/Repositories/Order/OrderRepository.php b/app/Repositories/Order/OrderRepository.php index 7db891d..b5dbe21 100644 --- a/app/Repositories/Order/OrderRepository.php +++ b/app/Repositories/Order/OrderRepository.php @@ -12,7 +12,7 @@ class OrderRepository extends BaseRepository implements OrderRepositoryInterface { return Order::class; } - public function filter(array $data = [], array $relationships = [], array $withCount = [], array $select = ['*']) + public function filter(array $data = [], array $relationships = [], array $withCount = [], array $select = ['*'], bool $returnQuery = false) { $model = $this->model->with($relationships)->select($select); if (isset($data['client']) && ! empty($data['client'])) { @@ -66,6 +66,11 @@ class OrderRepository extends BaseRepository implements OrderRepositoryInterface if (count($withCount) > 0) { $model = $model->withCount($withCount); } + + if ($returnQuery) { + return $model; + } + if (isset($data['limit']) && $data['limit']) { return $model->latest('id')->take($data['limit'])->get(); } diff --git a/app/Repositories/Order/OrderRepositoryInterface.php b/app/Repositories/Order/OrderRepositoryInterface.php index 7f94266..e5dbd1f 100644 --- a/app/Repositories/Order/OrderRepositoryInterface.php +++ b/app/Repositories/Order/OrderRepositoryInterface.php @@ -4,7 +4,7 @@ namespace App\Repositories\Order; use App\Repositories\BaseRepositoryInterface; interface OrderRepositoryInterface extends BaseRepositoryInterface{ - public function filter(array $data = [],array $relationships = [],array $withCount = [],array $select = ['*']); + public function filter(array $data = [],array $relationships = [],array $withCount = [],array $select = ['*'], bool $returnQuery = false); public function findWithRelationships(int $id = 0, array $relationships = [],array $withCount = [], array $withSum = []); public function updateBy(string $key = '',string|int $value = '',array $data =[]); } \ No newline at end of file diff --git a/config/assets.php b/config/assets.php index 086f348..44dc14e 100644 --- a/config/assets.php +++ b/config/assets.php @@ -15,10 +15,13 @@ return [ ], 'static' => [ 'css' => [ + 'build/plugins/select2/select2.min.css', 'build/plugins/perfect-scrollbar/perfect-scrollbar.css', ], 'js' => [ + 'build/plugins/jquery/jquery.min.js', 'build/plugins/bootstrap/bootstrap.bundle.min.js', + 'build/plugins/select2/select2.min.js', 'build/plugins/lucide/lucide.min.js', 'build/plugins/perfect-scrollbar/perfect-scrollbar.min.js', ], diff --git a/public/lib/core/main.js b/public/lib/core/main.js index e559127..0dce5eb 100644 --- a/public/lib/core/main.js +++ b/public/lib/core/main.js @@ -315,9 +315,9 @@ jQuery(function ($) { }); var initSelect2 = function () { - $(".select2.single__select").select2({ - allowClear: true, - width: "100%", - height: "100%", + $('.select2.single__select').select2({ + allowClear: false, + width: '100%', + height: '100%', }); }; diff --git a/resources/views/administrator/layout/master.blade.php b/resources/views/administrator/layout/master.blade.php index 520e5ec..8db0230 100644 --- a/resources/views/administrator/layout/master.blade.php +++ b/resources/views/administrator/layout/master.blade.php @@ -76,13 +76,20 @@ diff --git a/resources/views/administrator/pages/order/add.blade.php b/resources/views/administrator/pages/order/add.blade.php index 6c746e9..76bed80 100644 --- a/resources/views/administrator/pages/order/add.blade.php +++ b/resources/views/administrator/pages/order/add.blade.php @@ -1,35 +1,42 @@ -@extends("administrator.layout.master") -@section("content") +@php use App\Enums\Product\ProductTypeEnums; @endphp +@extends('administrator.layout.master') + +@section('breadcrumb') + @php + $breadcrumbItems = [ + ['label' => 'Order'], + ['label' => 'Order Management', 'url' => route('administrator.pages.order.index')], + ['label' => 'Add New Order', 'active' => true], + ]; + @endphp + +@endsection + +@section('content') @if(auth()->guard('admins')->user()->can("add order")) -
-
- @csrf - -
-
-
-
- {{--Client User--}} -
- -
- @if($customer->count()) @foreach($customer->all() as $item)
-
- {{--Payment Method--}} -
- -
- @if($payment->count()) @foreach($payment->all() as $item) - + @endforeach @endif
-
- {{--Promotion Code--}} -
- -
- @if($discount->count()) @foreach($discount->all() as $item) - + @endforeach @endif
-
- {{--Orders Status--}} -
- -
-
-
- {{--Orders Action--}} -
- -
-
- - +
+
+ +
-
-
-
-
-
-
-
- {{--Product Type--}} -
- -
- + + @foreach(ProductTypeEnums::cases() as $type) + + @endforeach
-
- {{--Product--}} -
- -
- +
-
- {{--Domain--}} -
- -
- +
+ +
-
- {{--Billing Cycle--}} -
- -
- @@ -154,67 +126,58 @@
-
- {{--Product Quantity--}} -
- -
- +
+ +
-
- {{--Product Price--}} -
- -
- +
+ +
- -
-
-
-

Order Summary

- -
- - - - - - - - - - - - - - - - -
VAT @ 10.00%0đ
Total0đ
-
-
+
- +
+ + + Cancel + Confirm Order + + @else
Access Denied - You are not assigned to any Order @@ -222,9 +185,9 @@
@endif @endsection -@push('scripts') - -@endpush + +@push('custom-scripts') + @foreach (config('assets.datatable.js') as $datatable) + + @endforeach +@endpush \ No newline at end of file diff --git a/resources/views/administrator/pages/order/datatable/action.blade.php b/resources/views/administrator/pages/order/datatable/action.blade.php new file mode 100644 index 0000000..3f24149 --- /dev/null +++ b/resources/views/administrator/pages/order/datatable/action.blade.php @@ -0,0 +1,47 @@ + + + diff --git a/resources/views/administrator/pages/order/datatable/amount.blade.php b/resources/views/administrator/pages/order/datatable/amount.blade.php new file mode 100644 index 0000000..f82c1ae --- /dev/null +++ b/resources/views/administrator/pages/order/datatable/amount.blade.php @@ -0,0 +1 @@ +{{ number_format($row->amount, 0, ',', '.') }}đ diff --git a/resources/views/administrator/pages/order/datatable/customer.blade.php b/resources/views/administrator/pages/order/datatable/customer.blade.php new file mode 100644 index 0000000..b07f2d3 --- /dev/null +++ b/resources/views/administrator/pages/order/datatable/customer.blade.php @@ -0,0 +1 @@ +{{ $row->customer->firstname . ' ' . $row->customer->lastname }} diff --git a/resources/views/administrator/pages/order/datatable/date.blade.php b/resources/views/administrator/pages/order/datatable/date.blade.php new file mode 100644 index 0000000..7645631 --- /dev/null +++ b/resources/views/administrator/pages/order/datatable/date.blade.php @@ -0,0 +1 @@ +@time($row->date) diff --git a/resources/views/administrator/pages/order/datatable/invoice_status.blade.php b/resources/views/administrator/pages/order/datatable/invoice_status.blade.php new file mode 100644 index 0000000..8ae259b --- /dev/null +++ b/resources/views/administrator/pages/order/datatable/invoice_status.blade.php @@ -0,0 +1,3 @@ +@if ($row->invoice_id !== 0) + {!! $row->invoice->getStatus() !!} +@endif \ No newline at end of file diff --git a/resources/views/administrator/pages/order/datatable/order_num.blade.php b/resources/views/administrator/pages/order/datatable/order_num.blade.php new file mode 100644 index 0000000..d2a4ff8 --- /dev/null +++ b/resources/views/administrator/pages/order/datatable/order_num.blade.php @@ -0,0 +1,3 @@ + + {{ $row->order_num }} + diff --git a/resources/views/administrator/pages/order/datatable/payment.blade.php b/resources/views/administrator/pages/order/datatable/payment.blade.php new file mode 100644 index 0000000..03e4d33 --- /dev/null +++ b/resources/views/administrator/pages/order/datatable/payment.blade.php @@ -0,0 +1 @@ +{{ $row->payment->name ?? 'VN Pay' }} diff --git a/resources/views/administrator/pages/order/datatable/status.blade.php b/resources/views/administrator/pages/order/datatable/status.blade.php new file mode 100644 index 0000000..201008d --- /dev/null +++ b/resources/views/administrator/pages/order/datatable/status.blade.php @@ -0,0 +1 @@ +{!! \App\Http\Helpers\Helper::OrderStatus($row->status) !!} diff --git a/resources/views/administrator/pages/order/edit.blade.php b/resources/views/administrator/pages/order/edit.blade.php index e5dd53a..eb18f3d 100644 --- a/resources/views/administrator/pages/order/edit.blade.php +++ b/resources/views/administrator/pages/order/edit.blade.php @@ -1,181 +1,201 @@ @php use Carbon\Carbon; @endphp -@extends("administrator.layout.master") -@section("content") +@extends('administrator.layout.master') + +@section('breadcrumb') + @php + $breadcrumbItems = [ + ['label' => 'Order'], + ['label' => 'Order Management', 'url' => route('administrator.pages.order.index')], + ['label' => 'View Order', 'active' => true], + ]; + @endphp + +@endsection + +@section('content') @if(auth()->guard('admins')->user()->can("edit order")) -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Date{{ Carbon::parse($order->date)->format("d/m/Y H:i:s") }}Payment Method{{ $order->payment->name ?? 'VN Pay' }}
Order #{{ $order->order_num }} (ID: {{$order->id}})Amount@money($order->amount) đ
Client - {{ $order->customer->firstname . ' ' . $order->customer->lastname }} -
- {{ $order->customer->address }} -
Invoice #{{ $order->invoice_id !== 0 ? $order->invoice_id : "No Invoice" }}
Status{!! App\Http\Helpers\Helper::OrderStatus($order->status) !!}IP Address - {{ $order->client_ip }} -
Order Placed By - @if($order->user) - {{ $order->user->username }} (#ID: {{ $order->user->id }}) - {{ $order->user->email }} - @endif - Promotion Code - @if($order->discount) - {{ $order->discount->code }} - @endif -
-
-
-
-

Order Item

- - - - - - - - - - - - - @if($order->orderItem->isNotEmpty()) - @foreach($order->orderItem->all() as $item) + + @csrf + @method('PUT') + +
+
+
+
+
Order Information
+
+
+
+
ItemDescriptionBilling CycleAmountStatusPayment Status
+ - - - - - - - + + + + - @endforeach - @endif - -
- @if($item->type && in_array($item->Type->id,[3,4])) - - {{ $item->type->name }} - - @else - {{ $item->type->name }} - @endif - - {{ $item->description }} - - {{ Helper::billing_cycle($item->billing) }} - - @money($item->amount) đ - - @if($item->status) - {!! $item->status->getStatus() !!} - @endif - - @if($order->invoice_id !== 0) - {!! $order->invoice->getStatus() !!} - @else - No Invoice Due - @endif - Date{{ Carbon::parse($order->date)->format("d/m/Y H:i:s") }}Payment Method{{ $order->payment->name ?? 'VN Pay' }}
-
-
- @if( $order->status !== 1) -
-
- + + Order # + {{ $order->order_num }} (ID: {{ $order->id }}) + Amount + @money($order->amount) đ + + + Client + + + {{ $order->customer->firstname . ' ' . $order->customer->lastname }} + +
+ {{ $order->customer->address }} + + Invoice # + {{ $order->invoice_id !== 0 ? $order->invoice_id : "No Invoice" }} + + + Status + {!! App\Http\Helpers\Helper::OrderStatus($order->status) !!} + IP Address + {{ $order->client_ip }} + + + Order Placed By + + @if($order->user) + {{ $order->user->username }} (#ID: {{ $order->user->id }}) +
+ {{ $order->user->email }} + @endif + + Promotion Code + {{ $order->discount?->code }} + + + +
- @endif + +
+
+
Order Item
+
+
+ + + + + + + + + + + + + @if($order->orderItem->isNotEmpty()) + @foreach($order->orderItem->all() as $item) + + + + + + + + + @endforeach + @endif + +
ItemDescriptionBilling CycleAmountStatusPayment Status
+ @if($item->type && in_array($item->Type->id, [3, 4])) + + {{ $item->type->name }} + + @else + {{ $item->type->name }} + @endif + {{ $item->description }}{{ Helper::billing_cycle($item->billing) }}@money($item->amount) đ + @if($item->status) + {!! $item->status->getStatus() !!} + @endif + + @if($order->invoice_id !== 0) + {!! $order->invoice->getStatus() !!} + @else + No Invoice Due + @endif +
+
+
+
+ +
+
+
+
Order Actions
+
+
+ @if($order->status !== 1) +
+ +
+ @endif + +
+ @if($order->status !== 1) + + Accept Order + + @endif + + + Cancel Order + + + @if(auth()->guard('admins')->user()->can("delete order")) + + @csrf + @method('DELETE') + + + Delete Order + + + @endif +
+
+
+
- -
+ + + Back + + @else
Access Denied - You are not assigned to any Order management department
@endif - @endsection -@push("scripts") - @endpush diff --git a/resources/views/administrator/pages/order/index.blade.php b/resources/views/administrator/pages/order/index.blade.php index 5c0e572..bf177af 100644 --- a/resources/views/administrator/pages/order/index.blade.php +++ b/resources/views/administrator/pages/order/index.blade.php @@ -1,194 +1,43 @@ -@php use App\Http\Helpers\Helper; @endphp -@extends("administrator.layout.master") -@section("content") - @if(auth()->guard('admins')->user()->can("manager order")) -
-
-
-
-
-
- - -
-
-
-
- - -
-
-
-
- - -
-
-
-
- -
-
- - - -
- -
-
-
-
-
- - -
-
-
- -
-
-
- - -
-
-
- - -
-
-
- {{ $orders->count() }} Records Found +@section('breadcrumb') + @php + $breadcrumbItems = [ + ['label' => 'Order'], + ['label' => 'Order Management'], + ['label' => 'Order List', 'active' => true], + ]; + @endphp + +@endsection + +@section('content') + @if(auth()->guard('admins')->user()->can("manager order")) +
+ -
- - - - - - - - - - - - - - - - - @if($orders->count()) - @foreach($orders->all() as $item) - - - - - - - - - - - - - @endforeach - @endif - -
- - Order #DateClient NamePayment MethodTotalPayment StatusStatus
- - - $item->id]) }}" - title="View Order"> {{ $item->order_num }} - - @time($item->date) - - {{ $item->customer->firstname . ' ' . $item->customer->lastname }} - - {{ $item->Payment->name ?? 'VN Pay' }} - - {{ number_format($item->amount,0,',','.') }}đ - - @if ($item->invoice_id !== 0) - {!! $item->invoice->getStatus() !!} - @endif - - {!! Helper::OrderStatus($item->status) !!} - - - - - - @if(auth()->guard('admins')->user()->can("delete order")) -
- @csrf - @method('delete') - -
- @endif -
-
- @else @@ -198,3 +47,8 @@
@endif @endsection +@push('plugin-scripts') + @foreach (config('assets.datatable.js') as $datatable) + + @endforeach +@endpush diff --git a/resources/views/administrator/pages/product/edit.blade.php b/resources/views/administrator/pages/product/edit.blade.php index b5ce641..ff25693 100644 --- a/resources/views/administrator/pages/product/edit.blade.php +++ b/resources/views/administrator/pages/product/edit.blade.php @@ -364,10 +364,6 @@ $breadcrumbItems = [ @endforeach