view_cart.blade.php 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. @extends('frontend.layouts.app')
  2. @section('content')
  3. <section class="pt-5 mb-4">
  4. <div class="container">
  5. <div class="row">
  6. <div class="col-xl-8 mx-auto">
  7. <div class="row aiz-steps arrow-divider">
  8. <div class="col active">
  9. <div class="text-center text-primary">
  10. <i class="la-3x mb-2 las la-shopping-cart"></i>
  11. <h3 class="fs-14 fw-600 d-none d-lg-block">{{ translate('1. My Cart') }}</h3>
  12. </div>
  13. </div>
  14. <div class="col">
  15. <div class="text-center">
  16. <i class="la-3x mb-2 opacity-50 las la-map"></i>
  17. <h3 class="fs-14 fw-600 d-none d-lg-block opacity-50">{{ translate('2. Shipping info') }}
  18. </h3>
  19. </div>
  20. </div>
  21. <div class="col">
  22. <div class="text-center">
  23. <i class="la-3x mb-2 opacity-50 las la-truck"></i>
  24. <h3 class="fs-14 fw-600 d-none d-lg-block opacity-50">{{ translate('3. Delivery info') }}
  25. </h3>
  26. </div>
  27. </div>
  28. <div class="col">
  29. <div class="text-center">
  30. <i class="la-3x mb-2 opacity-50 las la-credit-card"></i>
  31. <h3 class="fs-14 fw-600 d-none d-lg-block opacity-50">{{ translate('4. Payment') }}</h3>
  32. </div>
  33. </div>
  34. <div class="col">
  35. <div class="text-center">
  36. <i class="la-3x mb-2 opacity-50 las la-check-circle"></i>
  37. <h3 class="fs-14 fw-600 d-none d-lg-block opacity-50">{{ translate('5. Confirmation') }}
  38. </h3>
  39. </div>
  40. </div>
  41. </div>
  42. </div>
  43. </div>
  44. </div>
  45. </section>
  46. <section class="mb-4" id="cart-summary">
  47. <div class="container">
  48. @if ($carts && count($carts) > 0)
  49. <div class="row">
  50. <div class="col-xxl-8 col-xl-10 mx-auto">
  51. <div class="shadow-sm bg-white p-3 p-lg-4 rounded text-left">
  52. <div class="mb-4">
  53. <div class="row gutters-5 d-none d-lg-flex border-bottom mb-3 pb-3">
  54. <div class="col-md-5 fw-600">{{ translate('Product') }}</div>
  55. <div class="col fw-600">{{ translate('Price') }}</div>
  56. <div class="col fw-600">{{ translate('Tax') }}</div>
  57. <div class="col fw-600">{{ translate('Quantity') }}</div>
  58. <div class="col fw-600">{{ translate('Total') }}</div>
  59. <div class="col-auto fw-600">{{ translate('Remove') }}</div>
  60. </div>
  61. <ul class="list-group list-group-flush">
  62. @php
  63. $total = 0;
  64. @endphp
  65. @foreach ($carts as $key => $cartItem)
  66. @php
  67. $product = \App\Models\Product::find($cartItem['product_id']);
  68. $product_stock = $product->stocks->where('variant', $cartItem['variation'])->first();
  69. // $total = $total + ($cartItem['price'] + $cartItem['tax']) * $cartItem['quantity'];
  70. $total = $total + cart_product_price($cartItem, $product, false) * $cartItem['quantity'];
  71. $product_name_with_choice = $product->getTranslation('name');
  72. if ($cartItem['variation'] != null) {
  73. $product_name_with_choice = $product->getTranslation('name') . ' - ' . $cartItem['variation'];
  74. }
  75. @endphp
  76. <li class="list-group-item px-0 px-lg-3">
  77. <div class="row gutters-5">
  78. <div class="col-lg-5 d-flex">
  79. <span class="mr-2 ml-0">
  80. <img src="{{ uploaded_asset($product->thumbnail_img) }}"
  81. class="img-fit size-60px rounded"
  82. alt="{{ $product->getTranslation('name') }}">
  83. </span>
  84. <span class="fs-14 opacity-60">{{ $product_name_with_choice }}</span>
  85. </div>
  86. <div class="col-lg col-4 order-1 order-lg-0 my-3 my-lg-0">
  87. <span
  88. class="opacity-60 fs-12 d-block d-lg-none">{{ translate('Price') }}</span>
  89. <span
  90. class="fw-600 fs-16">{{ cart_product_price($cartItem, $product, true, false) }}</span>
  91. </div>
  92. <div class="col-lg col-4 order-2 order-lg-0 my-3 my-lg-0">
  93. <span
  94. class="opacity-60 fs-12 d-block d-lg-none">{{ translate('Tax') }}</span>
  95. <span
  96. class="fw-600 fs-16">{{ cart_product_tax($cartItem, $product) }}</span>
  97. </div>
  98. <div class="col-lg col-6 order-4 order-lg-0">
  99. @if ($cartItem['digital'] != 1 && $product->auction_product == 0)
  100. <div
  101. class="row no-gutters align-items-center aiz-plus-minus mr-2 ml-0">
  102. <button
  103. class="btn col-auto btn-icon btn-sm btn-circle btn-light"
  104. type="button" data-type="minus"
  105. data-field="quantity[{{ $cartItem['id'] }}]">
  106. <i class="las la-minus"></i>
  107. </button>
  108. <input type="number" name="quantity[{{ $cartItem['id'] }}]"
  109. class="col border-0 text-center flex-grow-1 fs-16 input-number"
  110. placeholder="1" value="{{ $cartItem['quantity'] }}"
  111. min="{{ $product->min_qty }}"
  112. max="{{ $product_stock->qty }}"
  113. onchange="updateQuantity({{ $cartItem['id'] }}, this)">
  114. <button
  115. class="btn col-auto btn-icon btn-sm btn-circle btn-light"
  116. type="button" data-type="plus"
  117. data-field="quantity[{{ $cartItem['id'] }}]">
  118. <i class="las la-plus"></i>
  119. </button>
  120. </div>
  121. @elseif($product->auction_product == 1)
  122. <span class="fw-600 fs-16">1</span>
  123. @endif
  124. </div>
  125. <div class="col-lg col-4 order-3 order-lg-0 my-3 my-lg-0">
  126. <span
  127. class="opacity-60 fs-12 d-block d-lg-none">{{ translate('Total') }}</span>
  128. <span
  129. class="fw-600 fs-16 text-primary">{{ single_price(cart_product_price($cartItem, $product, false) * $cartItem['quantity']) }}</span>
  130. </div>
  131. <div class="col-lg-auto col-6 order-5 order-lg-0 text-right">
  132. <a href="javascript:void(0)"
  133. onclick="removeFromCartView(event, {{ $cartItem['id'] }})"
  134. class="btn btn-icon btn-sm btn-soft-primary btn-circle">
  135. <i class="las la-trash"></i>
  136. </a>
  137. </div>
  138. </div>
  139. </li>
  140. @endforeach
  141. </ul>
  142. </div>
  143. <div class="px-3 py-2 mb-4 border-top d-flex justify-content-between">
  144. <span class="opacity-60 fs-15">{{ translate('Subtotal') }}</span>
  145. <span class="fw-600 fs-17">{{ single_price($total) }}</span>
  146. </div>
  147. <div class="row align-items-center">
  148. <div class="col-md-6 text-center text-md-left order-1 order-md-0">
  149. <a href="{{ route('home') }}" class="btn btn-link">
  150. <i class="las la-arrow-left"></i>
  151. {{ translate('Return to shop') }}
  152. </a>
  153. </div>
  154. <div class="col-md-6 text-center text-md-right">
  155. @if (Auth::check())
  156. <a href="{{ route('checkout.shipping_info') }}" class="btn btn-primary fw-600">
  157. {{ translate('Continue to Shipping') }}
  158. </a>
  159. @else
  160. <button class="btn btn-primary fw-600"
  161. onclick="showCheckoutModal()">{{ translate('Continue to Shipping') }}</button>
  162. @endif
  163. </div>
  164. </div>
  165. </div>
  166. </div>
  167. </div>
  168. @else
  169. <div class="row">
  170. <div class="col-xl-8 mx-auto">
  171. <div class="shadow-sm bg-white p-4 rounded">
  172. <div class="text-center p-3">
  173. <i class="las la-frown la-3x opacity-60 mb-3"></i>
  174. <h3 class="h4 fw-700">{{ translate('Your Cart is empty') }}</h3>
  175. </div>
  176. </div>
  177. </div>
  178. </div>
  179. @endif
  180. </div>
  181. </section>
  182. @endsection
  183. @section('modal')
  184. <div class="modal fade" id="login-modal">
  185. <div class="modal-dialog modal-dialog-zoom">
  186. <div class="modal-content">
  187. <div class="modal-header">
  188. <h6 class="modal-title fw-600">{{ translate('Login') }}</h6>
  189. <button type="button" class="close" data-dismiss="modal">
  190. <span aria-hidden="true"></span>
  191. </button>
  192. </div>
  193. <div class="modal-body">
  194. <div class="p-3">
  195. <form class="form-default" role="form" action="{{ route('cart.login.submit') }}" method="POST">
  196. @csrf
  197. @if (addon_is_activated('otp_system') && env('DEMO_MODE') != 'On')
  198. <div class="form-group phone-form-group mb-1">
  199. <input type="tel" id="phone-code"
  200. class="form-control{{ $errors->has('phone') ? ' is-invalid' : '' }}"
  201. value="{{ old('phone') }}" placeholder="" name="phone" autocomplete="off">
  202. </div>
  203. <input type="hidden" name="country_code" value="">
  204. <div class="form-group email-form-group mb-1 d-none">
  205. <input type="email"
  206. class="form-control {{ $errors->has('email') ? ' is-invalid' : '' }}"
  207. value="{{ old('email') }}" placeholder="{{ translate('Email') }}" name="email"
  208. id="email" autocomplete="off">
  209. @if ($errors->has('email'))
  210. <span class="invalid-feedback" role="alert">
  211. <strong>{{ $errors->first('email') }}</strong>
  212. </span>
  213. @endif
  214. </div>
  215. <div class="form-group text-right">
  216. <button class="btn btn-link p-0 opacity-50 text-reset" type="button"
  217. onclick="toggleEmailPhone(this)">{{ translate('Use Email Instead') }}</button>
  218. </div>
  219. @else
  220. <div class="form-group">
  221. <input type="email"
  222. class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}"
  223. value="{{ old('email') }}" placeholder="{{ translate('Email') }}" name="email"
  224. id="email" autocomplete="off">
  225. @if ($errors->has('email'))
  226. <span class="invalid-feedback" role="alert">
  227. <strong>{{ $errors->first('email') }}</strong>
  228. </span>
  229. @endif
  230. </div>
  231. @endif
  232. <div class="form-group">
  233. <input type="password"
  234. class="form-control {{ $errors->has('password') ? ' is-invalid' : '' }}"
  235. placeholder="{{ translate('Password') }}" name="password" id="password">
  236. </div>
  237. <div class="row mb-2">
  238. <div class="col-6">
  239. <label class="aiz-checkbox">
  240. <input type="checkbox" name="remember" {{ old('remember') ? 'checked' : '' }}>
  241. <span class=opacity-60>{{ translate('Remember Me') }}</span>
  242. <span class="aiz-square-check"></span>
  243. </label>
  244. </div>
  245. <div class="col-6 text-right">
  246. <a href="{{ route('password.request') }}"
  247. class="text-reset opacity-60 fs-14">{{ translate('Forgot password?') }}</a>
  248. </div>
  249. </div>
  250. <div class="mb-5">
  251. <button type="submit"
  252. class="btn btn-primary btn-block fw-600">{{ translate('Login') }}</button>
  253. </div>
  254. </form>
  255. </div>
  256. <div class="text-center mb-3">
  257. <p class="text-muted mb-0">{{ translate('Dont have an account?') }}</p>
  258. <a href="{{ route('user.registration') }}">{{ translate('Register Now') }}</a>
  259. </div>
  260. @if (get_setting('google_login') == 1 || get_setting('facebook_login') == 1 || get_setting('twitter_login') == 1)
  261. <div class="separator mb-3">
  262. <span class="bg-white px-3 opacity-60">{{ translate('Or Login With') }}</span>
  263. </div>
  264. <ul class="list-inline social colored text-center mb-3">
  265. @if (get_setting('facebook_login') == 1)
  266. <li class="list-inline-item">
  267. <a href="{{ route('social.login', ['provider' => 'facebook']) }}"
  268. class="facebook">
  269. <i class="lab la-facebook-f"></i>
  270. </a>
  271. </li>
  272. @endif
  273. @if (get_setting('google_login') == 1)
  274. <li class="list-inline-item">
  275. <a href="{{ route('social.login', ['provider' => 'google']) }}"
  276. class="google">
  277. <i class="lab la-google"></i>
  278. </a>
  279. </li>
  280. @endif
  281. @if (get_setting('twitter_login') == 1)
  282. <li class="list-inline-item">
  283. <a href="{{ route('social.login', ['provider' => 'twitter']) }}"
  284. class="twitter">
  285. <i class="lab la-twitter"></i>
  286. </a>
  287. </li>
  288. @endif
  289. </ul>
  290. @endif
  291. </div>
  292. </div>
  293. </div>
  294. </div>
  295. @endsection
  296. @section('script')
  297. <script type="text/javascript">
  298. function removeFromCartView(e, key) {
  299. e.preventDefault();
  300. removeFromCart(key);
  301. }
  302. function updateQuantity(key, element) {
  303. $.post('{{ route('cart.updateQuantity') }}', {
  304. _token: AIZ.data.csrf,
  305. id: key,
  306. quantity: element.value
  307. }, function(data) {
  308. updateNavCart(data.nav_cart_view, data.cart_count);
  309. $('#cart-summary').html(data.cart_view);
  310. });
  311. }
  312. function showCheckoutModal() {
  313. $('#login-modal').modal();
  314. }
  315. // Country Code
  316. var isPhoneShown = true,
  317. countryData = window.intlTelInputGlobals.getCountryData(),
  318. input = document.querySelector("#phone-code");
  319. for (var i = 0; i < countryData.length; i++) {
  320. var country = countryData[i];
  321. if (country.iso2 == 'bd') {
  322. country.dialCode = '88';
  323. }
  324. }
  325. var iti = intlTelInput(input, {
  326. separateDialCode: true,
  327. utilsScript: "{{ static_asset('assets/js/intlTelutils.js') }}?1590403638580",
  328. onlyCountries: @php echo json_encode(\App\Models\Country::where('status', 1)); @endphp,
  329. customPlaceholder: function(selectedCountryPlaceholder, selectedCountryData) {
  330. if (selectedCountryData.iso2 == 'bd') {
  331. return "01xxxxxxxxx";
  332. }
  333. return selectedCountryPlaceholder;
  334. }
  335. });
  336. var country = iti.getSelectedCountryData();
  337. $('input[name=country_code]').val(country.dialCode);
  338. input.addEventListener("countrychange", function(e) {
  339. // var currentMask = e.currentTarget.placeholder;
  340. var country = iti.getSelectedCountryData();
  341. $('input[name=country_code]').val(country.dialCode);
  342. });
  343. function toggleEmailPhone(el) {
  344. if (isPhoneShown) {
  345. $('.phone-form-group').addClass('d-none');
  346. $('.email-form-group').removeClass('d-none');
  347. $('input[name=phone]').val(null);
  348. isPhoneShown = false;
  349. $(el).html('{{ translate('Use Phone Instead') }}');
  350. } else {
  351. $('.phone-form-group').removeClass('d-none');
  352. $('.email-form-group').addClass('d-none');
  353. $('input[name=email]').val(null);
  354. isPhoneShown = true;
  355. $(el).html('{{ translate('Use Email Instead') }}');
  356. }
  357. }
  358. </script>
  359. @endsection