orderRepo = $orderRepository; $this->courierRepo = $courierRepository; $this->customerRepo = $customerRepository; $this->orderStatusRepo = $orderStatusRepository; $this->middleware(['permission:update-order, guard:employee'], ['only' => ['edit', 'update']]); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $list = $this->orderRepo->listOrders('created_at', 'desc'); if (request()->has('q')) { $list = $this->orderRepo->searchOrder(request()->input('q') ?? ''); } $orders = $this->orderRepo->paginateArrayResults($this->transFormOrder($list), 10); return view('admin.orders.list', ['orders' => $orders]); } /** * Display the specified resource. * * @param int $orderId * @return \Illuminate\Http\Response */ public function show($orderId) { $order = $this->orderRepo->findOrderById($orderId); $orderRepo = new OrderRepository($order); $order->courier = $orderRepo->getCouriers()->first(); $order->address = $orderRepo->getAddresses()->first(); $items = $orderRepo->listOrderedProducts(); return view('admin.orders.show', [ 'order' => $order, 'items' => $items, 'customer' => $this->customerRepo->findCustomerById($order->customer_id), 'currentStatus' => $this->orderStatusRepo->findOrderStatusById($order->order_status_id), 'payment' => $order->payment, 'user' => auth()->guard('employee')->user() ]); } /** * @param $orderId * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function edit($orderId) { $order = $this->orderRepo->findOrderById($orderId); $orderRepo = new OrderRepository($order); $order->courier = $orderRepo->getCouriers()->first(); $order->address = $orderRepo->getAddresses()->first(); $items = $orderRepo->listOrderedProducts(); return view('admin.orders.edit', [ 'statuses' => $this->orderStatusRepo->listOrderStatuses(), 'order' => $order, 'items' => $items, 'customer' => $this->customerRepo->findCustomerById($order->customer_id), 'currentStatus' => $this->orderStatusRepo->findOrderStatusById($order->order_status_id), 'payment' => $order->payment, 'user' => auth()->guard('employee')->user() ]); } /** * @param Request $request * @param $orderId * * @return \Illuminate\Http\RedirectResponse */ public function update(Request $request, $orderId) { $order = $this->orderRepo->findOrderById($orderId); $orderRepo = new OrderRepository($order); if ($request->has('total_paid') && $request->input('total_paid') != null) { $orderData = $request->except('_method', '_token'); } else { $orderData = $request->except('_method', '_token', 'total_paid'); } $orderRepo->updateOrder($orderData); return redirect()->route('admin.orders.edit', $orderId); } /** * Generate order invoice * * @param int $id * @return mixed */ public function generateInvoice(int $id) { $order = $this->orderRepo->findOrderById($id); $data = [ 'order' => $order, 'products' => $order->products, 'customer' => $order->customer, 'courier' => $order->courier, 'address' => $this->transformAddress($order->address), 'status' => $order->orderStatus, 'payment' => $order->paymentMethod ]; $pdf = app()->make('dompdf.wrapper'); $pdf->loadView('invoices.orders', $data)->stream(); return $pdf->stream(); } /** * @param Collection $list * @return array */ private function transFormOrder(Collection $list) { $courierRepo = new CourierRepository(new Courier()); $customerRepo = new CustomerRepository(new Customer()); $orderStatusRepo = new OrderStatusRepository(new OrderStatus()); return $list->transform(function (Order $order) use ($courierRepo, $customerRepo, $orderStatusRepo) { $order->courier = $courierRepo->findCourierById($order->courier_id); $order->customer = $customerRepo->findCustomerById($order->customer_id); $order->status = $orderStatusRepo->findOrderStatusById($order->order_status_id); return $order; })->all(); } }