Project: Mall App Client: Maiora
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

cart.page.ts 7.1 KiB

6 vuotta sitten
6 vuotta sitten
6 vuotta sitten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. import { Component, OnInit } from '@angular/core';
  2. import { Location } from '@angular/common';
  3. import { MallService } from '../services/mall.service';
  4. import { Router } from '@angular/router';
  5. import { OrderService } from '../services/order.service';
  6. import * as moment from 'moment';
  7. export type ICart = {
  8. orderedlist: Array<{
  9. mall_id: number,
  10. outlet_id: number,
  11. menuitem_id: number,
  12. quantity: number,
  13. pickup_time: string,
  14. take_away: boolean,
  15. order_status: boolean,
  16. total_price: number,
  17. soft_delete: boolean
  18. }>
  19. };
  20. @Component({
  21. selector: 'app-cart',
  22. templateUrl: './cart.page.html',
  23. styleUrls: ['./cart.page.scss'],
  24. })
  25. export class CartPage implements OnInit {
  26. userCart: ICart = {
  27. orderedlist: []
  28. };
  29. show_order_details: boolean = false;
  30. cart_outlets: any = [];
  31. allMalls: any = [];
  32. tempPickupTime: any;
  33. showInstantMenu: boolean = false;
  34. temp_outlet_details: any;
  35. selectedTempMallId: string;
  36. constructor(
  37. private location: Location,
  38. private router: Router,
  39. private orderService: OrderService,
  40. private mallService: MallService
  41. ) { }
  42. ngOnInit() {}
  43. ionViewDidEnter() {
  44. this.fetchCartItems();
  45. this.allMalls = JSON.parse(localStorage.allMalls);
  46. }
  47. fetchCartItems() {
  48. this.cart_outlets = [];
  49. if (localStorage.userCart) {
  50. this.userCart = JSON.parse(localStorage.userCart);
  51. } else {
  52. localStorage.userCart = JSON.stringify(this.userCart);
  53. }
  54. // this.cart_malls = this.userCart.orderedlist.map(order => order.mall_id);
  55. for (let i = 0; i < this.userCart.orderedlist.length; i += 1) {
  56. let tempOutlet = this.cart_outlets.find((outlet) => {
  57. return outlet.outlet_id === this.userCart.orderedlist[i].outlet_id &&
  58. outlet.mall_id === this.userCart.orderedlist[i].mall_id
  59. });
  60. if (!tempOutlet) {
  61. this.cart_outlets.push({
  62. outlet_id: this.userCart.orderedlist[i].outlet_id,
  63. mall_id: this.userCart.orderedlist[i].mall_id
  64. })
  65. }
  66. }
  67. }
  68. hideMenuButton() {
  69. document.querySelector('.menu-icon-holder').classList.add('hide');
  70. }
  71. showMenuButton() {
  72. setTimeout(() => {
  73. document.querySelector('.menu-icon-holder').classList.remove('hide');
  74. }, 1000);
  75. }
  76. checkIfTimeFeasible(oldTime, newTime) {
  77. return moment(newTime) > moment(oldTime);
  78. }
  79. getOutletDetails(cartOutlet: any) {
  80. let mall, outlet;
  81. mall = this.allMalls.find((mall) => {
  82. return mall.mall.mall_id === cartOutlet.mall_id;
  83. });
  84. if (mall) {
  85. return outlet = mall.mall.outlet.find((outlet) => {
  86. return outlet.outlet_id === cartOutlet.outlet_id;
  87. });
  88. }
  89. }
  90. getMallDetails(mallId: number) {
  91. return this.allMalls.find((mall) => {
  92. return mall.mall.mall_id === mallId;
  93. });
  94. }
  95. getItemDetails(item) {
  96. let mall, outlet, outletitem;
  97. mall = this.allMalls.find((mall) => {
  98. return mall.mall.mall_id === item.mall_id;
  99. });
  100. if (mall) {
  101. outlet = mall.mall.outlet.find((outlet) => {
  102. return outlet.outlet_id === item.outlet_id;
  103. });
  104. }
  105. if (outlet) {
  106. return outletitem = outlet.menuitems.find((menu) => {
  107. return menu.menuitem_id === item.menuitem_id;
  108. });
  109. }
  110. }
  111. storeData() {
  112. localStorage.userCart = JSON.stringify(this.userCart);
  113. }
  114. getFormatterDateTime(date: any, format: string) {
  115. return moment(date).format(format);
  116. }
  117. back() {
  118. this.storeData();
  119. this.location.back();
  120. }
  121. openInstantMenu(outlet) {
  122. this.selectedTempMallId = outlet.mall_id;
  123. this.showInstantMenu = true;
  124. this.temp_outlet_details = this.getOutletDetails(outlet);
  125. }
  126. isPresentInCart(outletId: number, itemId: number, tempMallId: number) {
  127. let item: any;
  128. item = this.userCart.orderedlist.find((order) => {
  129. return order.menuitem_id === itemId && order.outlet_id === outletId && order.mall_id === tempMallId;
  130. });
  131. return item? item.quantity: 0;
  132. }
  133. incrementCartCount(outletId: number, itemId: number, tempMallId: number) {
  134. let outletitem = this.getItemDetailsByIds(outletId, itemId, tempMallId);
  135. if (outletitem) {
  136. let i = this.userCart.orderedlist.findIndex((order) => {
  137. return order.menuitem_id === itemId && order.outlet_id === outletId && order.mall_id === tempMallId;
  138. });
  139. this.userCart.orderedlist[i].quantity += 1;
  140. this.userCart.orderedlist[i].total_price = (outletitem.item_price - outletitem.item_discount) * this.userCart.orderedlist[i].quantity;
  141. }
  142. }
  143. decrementCartCount(outletId: number, itemId: number, tempMallId: number) {
  144. let outletitem = this.getItemDetailsByIds(outletId, itemId, tempMallId);
  145. if (outletitem) {
  146. let i = this.userCart.orderedlist.findIndex((order) => {
  147. return order.menuitem_id === itemId && order.outlet_id === outletId && order.mall_id === tempMallId;
  148. });
  149. if (this.userCart.orderedlist[i].quantity > 1) {
  150. this.userCart.orderedlist[i].quantity -= 1;
  151. this.userCart.orderedlist[i].total_price = (outletitem.item_price - outletitem.item_discount) * this.userCart.orderedlist[i].quantity;
  152. } else if (this.userCart.orderedlist[i].quantity === 1) {
  153. this.userCart.orderedlist.splice(i, 1);
  154. this.storeData();
  155. this.fetchCartItems();
  156. }
  157. }
  158. }
  159. getItemDetailsByIds(outletId: number, itemId: number, tempMallId: number) {
  160. let mall, outlet, outletitem;
  161. mall = this.allMalls.find((mall) => {
  162. return mall.mall.mall_id === tempMallId;
  163. });
  164. if (mall) {
  165. outlet = mall.mall.outlet.find((outlet) => {
  166. return outlet.outlet_id === outletId;
  167. });
  168. }
  169. if (outlet) {
  170. return outletitem = outlet.menuitems.find((menu) => {
  171. return menu.menuitem_id === itemId;
  172. });
  173. }
  174. }
  175. addToCart(outletId: number, itemId: number, tempMallId: number) {
  176. let outletitem = this.getItemDetailsByIds(outletId, itemId, tempMallId);
  177. if (outletitem) {
  178. this.userCart.orderedlist.push({
  179. mall_id: tempMallId,
  180. outlet_id: outletId,
  181. menuitem_id: itemId,
  182. quantity: 1,
  183. pickup_time: moment().add(moment.duration(outletitem.wait_duration).asMinutes(), 'minutes').format(),
  184. take_away: true,
  185. order_status: false,
  186. total_price: outletitem.item_price - outletitem.item_discount,
  187. soft_delete: false
  188. });
  189. }
  190. }
  191. getTotalCartAmount() {
  192. let total: number = 0;
  193. this.userCart.orderedlist.forEach((order) => {
  194. total = order.total_price + total;
  195. });
  196. return total;
  197. }
  198. placeOrder() {
  199. this.orderService.createOrder({
  200. soft_delete: false,
  201. orderedlist: this.userCart.orderedlist
  202. }).then((resp) => {
  203. console.log(resp);
  204. }, (err) => {
  205. console.log(err);
  206. })
  207. }
  208. }