123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- namespace App\Http\Controllers\Front;
- use App\Shop\Carts\Requests\AddToCartRequest;
- use App\Shop\Carts\Requests\UpdateCartRequest;
- use App\Shop\Carts\Repositories\Interfaces\CartRepositoryInterface;
- use App\Shop\Couriers\Repositories\Interfaces\CourierRepositoryInterface;
- use App\Shop\ProductAttributes\Repositories\ProductAttributeRepositoryInterface;
- use App\Shop\Products\Product;
- use App\Shop\Products\Repositories\Interfaces\ProductRepositoryInterface;
- use App\Shop\Products\Repositories\ProductRepository;
- use App\Shop\Products\Transformations\ProductTransformable;
- use Gloudemans\Shoppingcart\CartItem;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- class CartController extends Controller
- {
- use ProductTransformable;
- /**
- * @var CartRepositoryInterface
- */
- private $cartRepo;
- /**
- * @var ProductRepositoryInterface
- */
- private $productRepo;
- /**
- * @var CourierRepositoryInterface
- */
- private $courierRepo;
- /**
- * @var ProductAttributeRepositoryInterface
- */
- private $productAttributeRepo;
- /**
- * CartController constructor.
- * @param CartRepositoryInterface $cartRepository
- * @param ProductRepositoryInterface $productRepository
- * @param CourierRepositoryInterface $courierRepository
- * @param ProductAttributeRepositoryInterface $productAttributeRepository
- */
- public function __construct(
- CartRepositoryInterface $cartRepository,
- ProductRepositoryInterface $productRepository,
- CourierRepositoryInterface $courierRepository,
- ProductAttributeRepositoryInterface $productAttributeRepository
- ) {
- $this->cartRepo = $cartRepository;
- $this->productRepo = $productRepository;
- $this->courierRepo = $courierRepository;
- $this->productAttributeRepo = $productAttributeRepository;
- }
- /**
- * Display a listing of the resource.
- *
- * @return \Illuminate\Http\Response
- */
- public function index()
- {
- $courier = $this->courierRepo->findCourierById(request()->session()->get('courierId', 1));
- $shippingFee = $this->cartRepo->getShippingFee($courier);
- return view('front.carts.cart', [
- 'cartItems' => $this->cartRepo->getCartItemsTransformed(),
- 'subtotal' => $this->cartRepo->getSubTotal(),
- 'tax' => $this->cartRepo->getTax(),
- 'shippingFee' => $shippingFee,
- 'total' => $this->cartRepo->getTotal(2, $shippingFee)
- ]);
- }
- /**
- * Store a newly created resource in storage.
- *
- * @param AddToCartRequest $request
- * @return \Illuminate\Http\Response
- */
- public function store(AddToCartRequest $request)
- {
- $product = $this->productRepo->findProductById($request->input('product'));
- if ($product->attributes()->count() > 0) {
- $productAttr = $product->attributes()->where('default', 1)->first();
- if (isset($productAttr->sale_price)) {
- $product->price = $productAttr->price;
- if (!is_null($productAttr->sale_price)) {
- $product->price = $productAttr->sale_price;
- }
- }
- }
- $options = [];
- if ($request->has('productAttribute')) {
- $attr = $this->productAttributeRepo->findProductAttributeById($request->input('productAttribute'));
- $product->price = $attr->price;
- $options['product_attribute_id'] = $request->input('productAttribute');
- $options['combination'] = $attr->attributesValues->toArray();
- }
- $this->cartRepo->addToCart($product, $request->input('quantity'), $options);
- return redirect()->route('cart.index')
- ->with('message', 'Add to cart successful');
- }
- /**
- * Update the specified resource in storage.
- *
- * @param \Illuminate\Http\Request $request
- * @param int $id
- * @return \Illuminate\Http\Response
- */
- public function update(UpdateCartRequest $request, $id)
- {
- $this->cartRepo->updateQuantityInCart($id, $request->input('quantity'));
- request()->session()->flash('message', 'Update cart successful');
- return redirect()->route('cart.index');
- }
- /**
- * Remove the specified resource from storage.
- *
- * @param int $id
- * @return \Illuminate\Http\Response
- */
- public function destroy($id)
- {
- $this->cartRepo->removeToCart($id);
- request()->session()->flash('message', 'Removed to cart successful');
- return redirect()->route('cart.index');
- }
- }
|