import { Component, OnInit } from '@angular/core'; import { Location } from '@angular/common'; import { MallService } from '../services/mall.service'; import { Router } from '@angular/router'; import { OrderService } from '../services/order.service'; import * as moment from 'moment'; export type ICart = { orderedlist: Array<{ mall_id: number, outlet_id: number, menuitem_id: number, quantity: number, pickup_time: string, take_away: boolean, order_status: boolean, total_price: number, soft_delete: boolean }> }; @Component({ selector: 'app-cart', templateUrl: './cart.page.html', styleUrls: ['./cart.page.scss'], }) export class CartPage implements OnInit { userCart: ICart = { orderedlist: [] }; show_order_details: boolean = false; cart_outlets: any = []; allMalls: any = []; tempPickupTime: any; showInstantMenu: boolean = false; temp_outlet_details: any; selectedTempMallId: string; constructor( private location: Location, private router: Router, private orderService: OrderService, private mallService: MallService ) { } ngOnInit() {} ionViewDidEnter() { this.fetchCartItems(); this.allMalls = JSON.parse(localStorage.allMalls); } fetchCartItems() { this.cart_outlets = []; if (localStorage.userCart) { this.userCart = JSON.parse(localStorage.userCart); } else { localStorage.userCart = JSON.stringify(this.userCart); } // this.cart_malls = this.userCart.orderedlist.map(order => order.mall_id); for (let i = 0; i < this.userCart.orderedlist.length; i += 1) { let tempOutlet = this.cart_outlets.find((outlet) => { return outlet.outlet_id === this.userCart.orderedlist[i].outlet_id && outlet.mall_id === this.userCart.orderedlist[i].mall_id }); if (!tempOutlet) { this.cart_outlets.push({ outlet_id: this.userCart.orderedlist[i].outlet_id, mall_id: this.userCart.orderedlist[i].mall_id }) } } } hideMenuButton() { document.querySelector('.menu-icon-holder').classList.add('hide'); } showMenuButton() { setTimeout(() => { document.querySelector('.menu-icon-holder').classList.remove('hide'); }, 1000); } checkIfTimeFeasible(oldTime, newTime) { return moment(newTime) > moment(oldTime); } getOutletDetails(cartOutlet: any) { let mall, outlet; mall = this.allMalls.find((mall) => { return mall.mall.mall_id === cartOutlet.mall_id; }); if (mall) { return outlet = mall.mall.outlet.find((outlet) => { return outlet.outlet_id === cartOutlet.outlet_id; }); } } getMallDetails(mallId: number) { return this.allMalls.find((mall) => { return mall.mall.mall_id === mallId; }); } getItemDetails(item) { let mall, outlet, outletitem; mall = this.allMalls.find((mall) => { return mall.mall.mall_id === item.mall_id; }); if (mall) { outlet = mall.mall.outlet.find((outlet) => { return outlet.outlet_id === item.outlet_id; }); } if (outlet) { return outletitem = outlet.menuitems.find((menu) => { return menu.menuitem_id === item.menuitem_id; }); } } storeData() { localStorage.userCart = JSON.stringify(this.userCart); } getFormatterDateTime(date: any, format: string) { return moment(date).format(format); } back() { this.storeData(); this.location.back(); } openInstantMenu(outlet) { this.selectedTempMallId = outlet.mall_id; this.showInstantMenu = true; this.temp_outlet_details = this.getOutletDetails(outlet); } isPresentInCart(outletId: number, itemId: number, tempMallId: number) { let item: any; item = this.userCart.orderedlist.find((order) => { return order.menuitem_id === itemId && order.outlet_id === outletId && order.mall_id === tempMallId; }); return item? item.quantity: 0; } incrementCartCount(outletId: number, itemId: number, tempMallId: number) { let outletitem = this.getItemDetailsByIds(outletId, itemId, tempMallId); if (outletitem) { let i = this.userCart.orderedlist.findIndex((order) => { return order.menuitem_id === itemId && order.outlet_id === outletId && order.mall_id === tempMallId; }); this.userCart.orderedlist[i].quantity += 1; this.userCart.orderedlist[i].total_price = (outletitem.item_price - outletitem.item_discount) * this.userCart.orderedlist[i].quantity; } } decrementCartCount(outletId: number, itemId: number, tempMallId: number) { let outletitem = this.getItemDetailsByIds(outletId, itemId, tempMallId); if (outletitem) { let i = this.userCart.orderedlist.findIndex((order) => { return order.menuitem_id === itemId && order.outlet_id === outletId && order.mall_id === tempMallId; }); if (this.userCart.orderedlist[i].quantity > 1) { this.userCart.orderedlist[i].quantity -= 1; this.userCart.orderedlist[i].total_price = (outletitem.item_price - outletitem.item_discount) * this.userCart.orderedlist[i].quantity; } else if (this.userCart.orderedlist[i].quantity === 1) { this.userCart.orderedlist.splice(i, 1); this.storeData(); this.fetchCartItems(); } } } getItemDetailsByIds(outletId: number, itemId: number, tempMallId: number) { let mall, outlet, outletitem; mall = this.allMalls.find((mall) => { return mall.mall.mall_id === tempMallId; }); if (mall) { outlet = mall.mall.outlet.find((outlet) => { return outlet.outlet_id === outletId; }); } if (outlet) { return outletitem = outlet.menuitems.find((menu) => { return menu.menuitem_id === itemId; }); } } addToCart(outletId: number, itemId: number, tempMallId: number) { let outletitem = this.getItemDetailsByIds(outletId, itemId, tempMallId); if (outletitem) { this.userCart.orderedlist.push({ mall_id: tempMallId, outlet_id: outletId, menuitem_id: itemId, quantity: 1, pickup_time: moment().add(moment.duration(outletitem.wait_duration).asMinutes(), 'minutes').format(), take_away: true, order_status: false, total_price: outletitem.item_price - outletitem.item_discount, soft_delete: false }); } } getTotalCartAmount() { let total: number = 0; this.userCart.orderedlist.forEach((order) => { total = order.total_price + total; }); return total; } placeOrder() { this.orderService.createOrder({ soft_delete: false, orderedlist: this.userCart.orderedlist }).then((resp) => { console.log(resp); }, (err) => { console.log(err); }) } }