| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 | 
							- <?php
 
- namespace App\Http\Controllers\Admin\Orders;
 
- use App\Shop\Addresses\Repositories\Interfaces\AddressRepositoryInterface;
 
- use App\Shop\Addresses\Transformations\AddressTransformable;
 
- use App\Shop\Couriers\Courier;
 
- use App\Shop\Couriers\Repositories\CourierRepository;
 
- use App\Shop\Couriers\Repositories\Interfaces\CourierRepositoryInterface;
 
- use App\Shop\Customers\Customer;
 
- use App\Shop\Customers\Repositories\CustomerRepository;
 
- use App\Shop\Customers\Repositories\Interfaces\CustomerRepositoryInterface;
 
- use App\Shop\Orders\Order;
 
- use App\Shop\Orders\Repositories\Interfaces\OrderRepositoryInterface;
 
- use App\Shop\Orders\Repositories\OrderRepository;
 
- use App\Shop\OrderStatuses\OrderStatus;
 
- use App\Shop\OrderStatuses\Repositories\Interfaces\OrderStatusRepositoryInterface;
 
- use App\Shop\OrderStatuses\Repositories\OrderStatusRepository;
 
- use App\Http\Controllers\Controller;
 
- use Illuminate\Http\Request;
 
- use Illuminate\Support\Collection;
 
- class OrderController extends Controller
 
- {
 
-     use AddressTransformable;
 
-     /**
 
-      * @var OrderRepositoryInterface
 
-      */
 
-     private $orderRepo;
 
-     /**
 
-      * @var CourierRepositoryInterface
 
-      */
 
-     private $courierRepo;
 
-     /**
 
-      * @var CustomerRepositoryInterface
 
-      */
 
-     private $customerRepo;
 
-     /**
 
-      * @var OrderStatusRepositoryInterface
 
-      */
 
-     private $orderStatusRepo;
 
-     public function __construct(
 
-         OrderRepositoryInterface $orderRepository,
 
-         CourierRepositoryInterface $courierRepository,
 
-         CustomerRepositoryInterface $customerRepository,
 
-         OrderStatusRepositoryInterface $orderStatusRepository
 
-     ) {
 
-         $this->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();
 
-     }
 
- }
 
 
  |