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