| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | <?phpnamespace 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');    }}
 |