package.blade.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. @extends('front.layout.master')
  2. @section('main_content')
  3. <div class="page-top page-top-package" style="background-image: url({{ asset('uploads/'.$package->banner) }})">
  4. <div class="container">
  5. <div class="row">
  6. <div class="col-md-12">
  7. <h2>{{ $package->name }}</h2>
  8. <h3><i class="fas fa-plane-departure"></i> {{ $package->destination->name }}</h3>
  9. @if($package->total_score || $package->total_rating)
  10. <div class="review">
  11. <div class="set">
  12. @php
  13. $package_rating = $package->total_score/$package->total_rating;
  14. @endphp
  15. @for($i=1; $i<=5; $i++)
  16. @if($i <= $package_rating)
  17. <i class="fas fa-star"></i>
  18. @elseif($i-0.5 <= $package_rating)
  19. <i class="fas fa-star-half-alt"></i>
  20. @else
  21. <i class="far fa-star"></i>
  22. @endif
  23. @endfor
  24. </div>
  25. <span>({{ $package_rating }} out of 5)</span>
  26. </div>
  27. @else
  28. <div class="review">
  29. <div class="set">
  30. @for($i=1; $i<=5; $i++)
  31. <i class="far fa-star"></i>
  32. @endfor
  33. </div>
  34. <span>(No Rating Found)</span>
  35. </div>
  36. @endif
  37. <div class="price">
  38. ${{ $package->price }} @if($package->old_price != '')<del>${{ $package->old_price }}</del>@endif
  39. </div>
  40. <div class="person">
  41. per person
  42. </div>
  43. </div>
  44. </div>
  45. </div>
  46. </div>
  47. <div class="package-detail pt_50 pb_50">
  48. <div class="container">
  49. <div class="row">
  50. <div class="col-lg-12 col-md-12">
  51. <div class="main-item mb_50">
  52. <ul class="nav nav-tabs d-flex justify-content-center" id="myTab" role="tablist">
  53. <li class="nav-item" role="presentation">
  54. <button class="nav-link active" id="tab-1" data-bs-toggle="tab" data-bs-target="#tab-1-pane" type="button" role="tab" aria-controls="tab-1-pane" aria-selected="true">Detail</button>
  55. </li>
  56. @if($package_itineraries->count() > 0)
  57. <li class="nav-item" role="presentation">
  58. <button class="nav-link" id="tab-2" data-bs-toggle="tab" data-bs-target="#tab-2-pane" type="button" role="tab" aria-controls="tab-2-pane" aria-selected="false">Itinerary</button>
  59. </li>
  60. @endif
  61. @if($package->map != '')
  62. <li class="nav-item" role="presentation">
  63. <button class="nav-link" id="tab-3" data-bs-toggle="tab" data-bs-target="#tab-3-pane" type="button" role="tab" aria-controls="tab-3-pane" aria-selected="false">Location</button>
  64. </li>
  65. @endif
  66. @if($package_photos->count() > 0 || $package_videos->count() > 0)
  67. <li class="nav-item" role="presentation">
  68. <button class="nav-link" id="tab-4" data-bs-toggle="tab" data-bs-target="#tab-4-pane" type="button" role="tab" aria-controls="tab-4-pane" aria-selected="false">Gallery</button>
  69. </li>
  70. @endif
  71. @if($package_faqs->count() > 0)
  72. <li class="nav-item" role="presentation">
  73. <button class="nav-link" id="tab-5" data-bs-toggle="tab" data-bs-target="#tab-5-pane" type="button" role="tab" aria-controls="tab-5-pane" aria-selected="false">FAQ</button>
  74. </li>
  75. @endif
  76. <li class="nav-item" role="presentation">
  77. <button class="nav-link" id="tab-6" data-bs-toggle="tab" data-bs-target="#tab-6-pane" type="button" role="tab" aria-controls="tab-6-pane" aria-selected="false">Review</button>
  78. </li>
  79. <li class="nav-item" role="presentation">
  80. <button class="nav-link" id="tab-7" data-bs-toggle="tab" data-bs-target="#tab-7-pane" type="button" role="tab" aria-controls="tab-7-pane" aria-selected="false">Enquery</button>
  81. </li>
  82. <li class="nav-item" role="presentation">
  83. <button class="nav-link" id="tab-8" data-bs-toggle="tab" data-bs-target="#tab-8-pane" type="button" role="tab" aria-controls="tab-8-pane" aria-selected="false">Booking</button>
  84. </li>
  85. </ul>
  86. <div class="tab-content" id="myTabContent">
  87. <div class="tab-pane fade show active" id="tab-1-pane" role="tabpanel" aria-labelledby="tab-1" tabindex="0">
  88. <!-- Detail -->
  89. <h2 class="mt_30">Detail</h2>
  90. <p>
  91. {!! $package->description !!}
  92. </p>
  93. @if($package_amenities_include->count() > 0)
  94. <h2 class="mt_30">Includes</h2>
  95. <div class="amenity">
  96. <div class="row">
  97. @foreach($package_amenities_include as $item)
  98. <div class="col-lg-3 mb_15">
  99. <i class="fas fa-check"></i> {{ $item->amenity->name }}
  100. </div>
  101. @endforeach
  102. </div>
  103. </div>
  104. @endif
  105. @if($package_amenities_exclude->count() > 0)
  106. <h2 class="mt_30">Excludes</h2>
  107. <div class="amenity">
  108. <div class="row">
  109. @foreach($package_amenities_exclude as $item)
  110. <div class="col-lg-3 mb_15">
  111. <i class="fas fa-times"></i> {{ $item->amenity->name }}
  112. </div>
  113. @endforeach
  114. </div>
  115. </div>
  116. @endif
  117. <!-- // Detail -->
  118. </div>
  119. <div class="tab-pane fade" id="tab-2-pane" role="tabpanel" aria-labelledby="tab-2" tabindex="0">
  120. <!-- Itinerary -->
  121. <h2 class="mt_30">Itinerary</h2>
  122. <div class="tour-plan">
  123. <div class="table-responsive">
  124. <table class="table table-bordered">
  125. @foreach($package_itineraries as $item)
  126. <tr>
  127. <td><b>{{ $item->name }}</b></td>
  128. <td>
  129. {!! $item->description !!}
  130. </td>
  131. </tr>
  132. @endforeach
  133. </table>
  134. </div>
  135. </div>
  136. <!-- // Itinerary -->
  137. </div>
  138. <div class="tab-pane fade" id="tab-3-pane" role="tabpanel" aria-labelledby="tab-3" tabindex="0">
  139. <!-- Location -->
  140. <h2 class="mt_30">Location Map</h2>
  141. <div class="location-map">
  142. {!! $package->map !!}
  143. </div>
  144. <!-- // Location -->
  145. </div>
  146. <div class="tab-pane fade" id="tab-4-pane" role="tabpanel" aria-labelledby="tab-4" tabindex="0">
  147. <!-- Gallery -->
  148. @if($package_photos->count() > 0)
  149. <h2 class="mt_30">
  150. Photos
  151. </h2>
  152. <div class="photo-all">
  153. <div class="row">
  154. @foreach($package_photos as $item)
  155. <div class="col-md-6 col-lg-3">
  156. <div class="item">
  157. <a href="{{ asset('uploads/'.$item->photo) }}" class="magnific">
  158. <img src="{{ asset('uploads/'.$item->photo) }}" alt="">
  159. </a>
  160. </div>
  161. </div>
  162. @endforeach
  163. </div>
  164. </div>
  165. @endif
  166. @if($package_videos->count() > 0)
  167. <h2 class="mt_30">
  168. Videos
  169. </h2>
  170. <div class="video-all">
  171. <div class="row">
  172. @foreach($package_videos as $item)
  173. <div class="col-md-6 col-lg-6">
  174. <div class="item">
  175. <a class="video-button" href="http://www.youtube.com/watch?v={{ $item->video }}">
  176. <img src="http://img.youtube.com/vi/{{ $item->video }}/0.jpg" alt="">
  177. <div class="icon">
  178. <i class="far fa-play-circle"></i>
  179. </div>
  180. <div class="bg"></div>
  181. </a>
  182. </div>
  183. </div>
  184. @endforeach
  185. </div>
  186. </div>
  187. @endif
  188. <!-- // Gallery -->
  189. </div>
  190. <div class="tab-pane fade" id="tab-5-pane" role="tabpanel" aria-labelledby="tab-5" tabindex="0">
  191. <!-- FAQ -->
  192. <h2 class="mt_30">Frequently Asked Questions</h2>
  193. <div class="faq-package">
  194. <div class="accordion" id="accordionExample">
  195. @foreach($package_faqs as $item)
  196. <div class="accordion-item mb_30">
  197. <h2 class="accordion-header" id="heading_{{ $loop->iteration }}">
  198. <button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapse_{{ $loop->iteration }}" aria-expanded="false" aria-controls="collapse_{{ $loop->iteration }}">
  199. {{ $item->question }}
  200. </button>
  201. </h2>
  202. <div id="collapse_{{ $loop->iteration }}" class="accordion-collapse collapse" aria-labelledby="heading_{{ $loop->iteration }}" data-bs-parent="#accordionExample">
  203. <div class="accordion-body">
  204. {!! $item->answer !!}
  205. </div>
  206. </div>
  207. </div>
  208. @endforeach
  209. </div>
  210. </div>
  211. <!-- // FAQ -->
  212. </div>
  213. <div class="tab-pane fade" id="tab-6-pane" role="tabpanel" aria-labelledby="tab-6" tabindex="0">
  214. <!-- Review -->
  215. <div class="review-package">
  216. <h2>Reviews ({{ $reviews->count() }})</h2>
  217. @forelse($reviews as $item)
  218. <div class="review-package-section">
  219. <div class="review-package-box d-flex justify-content-start">
  220. <div class="left">
  221. @if($item->user->photo == '')
  222. <img src="{{ asset('uploads/default.png') }}" alt="">
  223. @else
  224. <img src="{{ asset('uploads/'.$item->user->photo) }}" alt="">
  225. @endif
  226. </div>
  227. <div class="right">
  228. <div class="name">{{ $item->user->name }}</div>
  229. <div class="date">{{ $item->created_at->format('Y-m-d') }}</div>
  230. <div class="review mb-2">
  231. <div class="set">
  232. @for($i=1; $i<=5; $i++)
  233. @if($i <= $item->rating)
  234. <i class="fas fa-star"></i>
  235. @else
  236. <i class="far fa-star"></i>
  237. @endif
  238. @endfor
  239. </div>
  240. </div>
  241. <div class="text">
  242. {!! $item->comment !!}
  243. </div>
  244. </div>
  245. </div>
  246. </div>
  247. @empty
  248. <div class="alert alert-danger">
  249. No Review Found.
  250. </div>
  251. @endforelse
  252. <div class="mt_40"></div>
  253. <h2>Leave Your Review</h2>
  254. @if(Auth::guard('web')->check())
  255. @php
  256. $review_possible = App\Models\Booking::where('package_id',$package->id)->where('user_id',Auth::guard('web')->user()->id)->where('payment_status','Completed')->count();
  257. @endphp
  258. @if($review_possible > 0)
  259. @php
  260. App\Models\Review::where('package_id',$package->id)->where('user_id',Auth::guard('web')->user()->id)->count() > 0 ? $reviewed = true : $reviewed = false;
  261. @endphp
  262. @if($reviewed == false)
  263. <form action="{{ route('review_submit') }}" method="post">
  264. @csrf
  265. <input type="hidden" name="package_id" value="{{ $package->id }}">
  266. <div class="mb-3">
  267. <div class="give-review-auto-select">
  268. <input type="radio" id="star5" name="rating" value="5" /><label for="star5" title="5 stars"><i class="fas fa-star"></i></label>
  269. <input type="radio" id="star4" name="rating" value="4" /><label for="star4" title="4 stars"><i class="fas fa-star"></i></label>
  270. <input type="radio" id="star3" name="rating" value="3" /><label for="star3" title="3 stars"><i class="fas fa-star"></i></label>
  271. <input type="radio" id="star2" name="rating" value="2" /><label for="star2" title="2 stars"><i class="fas fa-star"></i></label>
  272. <input type="radio" id="star1" name="rating" value="1" /><label for="star1" title="1 star"><i class="fas fa-star"></i></label>
  273. </div>
  274. <script>
  275. document.addEventListener('DOMContentLoaded', (event) => {
  276. const stars = document.querySelectorAll('.star-rating label');
  277. stars.forEach(star => {
  278. star.addEventListener('click', function() {
  279. stars.forEach(s => s.style.color = '#ccc');
  280. this.style.color = '#f5b301';
  281. let previousStar = this.previousElementSibling;
  282. while(previousStar) {
  283. if (previousStar.tagName === 'LABEL') {
  284. previousStar.style.color = '#f5b301';
  285. }
  286. previousStar = previousStar.previousElementSibling;
  287. }
  288. });
  289. });
  290. });
  291. </script>
  292. </div>
  293. <div class="mb-3">
  294. <textarea class="form-control" rows="3" placeholder="Comment" name="comment"></textarea>
  295. </div>
  296. <div class="mb-3">
  297. <button type="submit" class="btn btn-primary">Submit</button>
  298. </div>
  299. </form>
  300. @else
  301. <div class="alert alert-danger">
  302. You have already given review.
  303. </div>
  304. @endif
  305. @else
  306. <div class="alert alert-danger">
  307. You have to book this package to give review.
  308. </div>
  309. @endif
  310. @else
  311. <a href="{{ route('login') }}" class="text-danger text-decoration-underline">Login to Review</a>
  312. @endif
  313. </div>
  314. <!-- // Review -->
  315. </div>
  316. <div class="tab-pane fade" id="tab-7-pane" role="tabpanel" aria-labelledby="tab-7" tabindex="0">
  317. <!-- Enquery -->
  318. <h2 class="mt_30">Ask Your Question</h2>
  319. <div class="enquery-form">
  320. <form action="{{ route('enquery_form_submit',$package->id) }}" method="post">
  321. @csrf
  322. <div class="mb-3">
  323. <input type="text" class="form-control" placeholder="Full Name" name="name">
  324. </div>
  325. <div class="mb-3">
  326. <input type="email" class="form-control" placeholder="Email Address" name="email">
  327. </div>
  328. <div class="mb-3">
  329. <input type="text" class="form-control" placeholder="Phone Number" name="phone">
  330. </div>
  331. <div class="mb-3">
  332. <textarea class="form-control h-150" rows="3" placeholder="Message" name="message"></textarea>
  333. </div>
  334. <div class="mb-3">
  335. <button type="submit" class="btn btn-primary">
  336. Send Message
  337. </button>
  338. </div>
  339. </form>
  340. </div>
  341. <!-- // Enquery -->
  342. </div>
  343. <div class="tab-pane fade" id="tab-8-pane" role="tabpanel" aria-labelledby="tab-8" tabindex="0">
  344. <!-- Booking -->
  345. @if($tours->count() > 0)
  346. <form action="{{ route('payment') }}" method="post">
  347. @csrf
  348. <input type="hidden" name="package_id" value="{{ $package->id }}">
  349. <div class="row">
  350. <div class="col-md-8">
  351. @php $i=0; @endphp
  352. @foreach($tours as $item)
  353. @if($item->booking_end_date < date('Y-m-d'))
  354. @continue
  355. @endif
  356. @php
  357. $i++;
  358. $total_booked_seats = 0;
  359. $all_data = App\Models\Booking::where('tour_id',$item->id)->where('package_id',$package->id)->get();
  360. foreach($all_data as $data) {
  361. $total_booked_seats += $data->total_person;
  362. }
  363. if($item->total_seat == '-1') {
  364. $remaining_seats = 'Unlimited';
  365. } else {
  366. $remaining_seats = $item->total_seat - $total_booked_seats;
  367. }
  368. @endphp
  369. <h2 class="mt_30">
  370. <input type="radio" name="tour_id" value="{{ $item->id }}" @if($i == 1) checked @endif>
  371. Tour {{ $i }}
  372. </h2>
  373. <div class="summary">
  374. <div class="table-responsive">
  375. <table class="table table-bordered">
  376. <tr>
  377. <td><b>Tour Start Date</b></td>
  378. <td>{{ $item->tour_start_date }}</td>
  379. </tr>
  380. <tr>
  381. <td><b>Tour End Date</b></td>
  382. <td>{{ $item->tour_end_date }}</td>
  383. </tr>
  384. <tr>
  385. <td><b>Booking End Date</b></td>
  386. <td class="text-danger">{{ $item->booking_end_date }}</td>
  387. </tr>
  388. <tr>
  389. <td><b>Total Seat</b></td>
  390. <td>
  391. @if($item->total_seat == -1)
  392. Unlimited
  393. @else
  394. {{ $item->total_seat }}
  395. @endif
  396. </td>
  397. </tr>
  398. <tr>
  399. <td><b>Booked Seat</b></td>
  400. <td>{{ $total_booked_seats }}</td>
  401. </tr>
  402. <tr>
  403. <td><b>Remaining Seat</b></td>
  404. <td>{{ $remaining_seats }}</td>
  405. </tr>
  406. </table>
  407. </div>
  408. </div>
  409. @endforeach
  410. </div>
  411. <div class="col-md-4">
  412. <h2 class="mt_30">Payment</h2>
  413. <div class="summary">
  414. <div class="table-responsive">
  415. <table class="table table-bordered">
  416. <tr>
  417. <td>
  418. <input type="hidden" name="ticket_price" id="ticketPrice" value="{{ $package->price }}">
  419. <label for=""><b>Number of Persons</b></label>
  420. <input type="number" min="1" max="100" name="total_person" class="form-control" value="1" id="numPersons" oninput="calculateTotal()">
  421. </td>
  422. </tr>
  423. <tr>
  424. <td>
  425. <label for=""><b>Total</b></label>
  426. <input type="text" name="" class="form-control" id="totalAmount" value="${{ $package->price }}" disabled>
  427. </td>
  428. </tr>
  429. <tr>
  430. <td>
  431. <label for=""><b>Select Payment Method</b></label>
  432. <select name="payment_method" class="form-select">
  433. <option value="PayPal">PayPal</option>
  434. <option value="Stripe">Stripe</option>
  435. <option value="Cash">Cash</option>
  436. </select>
  437. </td>
  438. </tr>
  439. <tr>
  440. <td>
  441. @if(Auth::guard('web')->check())
  442. <button type="submit" class="btn btn-primary">Pay Now</button>
  443. @else
  444. <a href="{{ route('login') }}" class="btn btn-primary">Login to Book</a>
  445. @endif
  446. </td>
  447. </tr>
  448. </table>
  449. </div>
  450. </div>
  451. <script>
  452. function calculateTotal() {
  453. const ticketPrice = document.getElementById('ticketPrice').value;
  454. const numPersons = document.getElementById('numPersons').value;
  455. const totalAmount = ticketPrice * numPersons;
  456. document.getElementById('totalAmount').value = `$${totalAmount}`;
  457. }
  458. </script>
  459. </div>
  460. </div>
  461. </form>
  462. @else
  463. <div class="alert alert-danger">
  464. No Tour Available.
  465. </div>
  466. @endif
  467. <!-- // Booking -->
  468. </div>
  469. </div>
  470. </div>
  471. </div>
  472. </div>
  473. </div>
  474. </div>
  475. @endsection