const cartModel = require('../models/cart') const { ObjectID } = require('mongodb'); const Order = require('../models/order'); class Cart { constructor(order) { this.items = {}; if (!!order) { this.idapp = order.idapp || 0; this.items[order._id] = order; this.userId = order.userId || ""; } this.modify_at = new Date(); this.updatetotals(); } static constructByCart(cart) { try { const mynewcart = new Cart(null); mynewcart.idapp = cart.idapp || 0; mynewcart.items = cart.items; mynewcart.userId = cart.userId || ""; mynewcart.modify_at = new Date(); return mynewcart; } catch (e) { console.log('Error', e); return null; } } async addqty(itemorder) { const myitem = this.items.find((rec) => rec.order._id.toString() === itemorder._id) if (!!myitem) { myitem.order.quantity++; await Order.findOneAndUpdate({ _id: myitem.order._id }, { $set: myitem.order }, { new: false }); this.updatetotals(); return myitem.order.quantity; } } async subqty(itemorder) { const myitem = this.items.find((rec) => rec.order._id.toString() === itemorder._id) if (!!myitem) { myitem.order.quantity--; await Order.findOneAndUpdate({ _id: myitem.order._id }, { $set: myitem.order }, { new: false }); this.updatetotals(); return myitem.order.quantity; } } addItem(itemorder) { // this.items.push(itemorder); let ind = this.items.length; this.items[ind] = {}; this.items[ind].order = itemorder; this.updatetotals(); return ind; } removeItem(orderId) { // this.items.push(itemorder); this.items = this.items.filter(item => item.order._id.toString() !== orderId.toString()); this.updatetotals(); } generateModel() { let newCart = new cartModel({ idapp: this.idapp, items: this.generateArray(), totalQty: this.totalQty, totalPrice: this.totalPrice, userId: this.userId, modify_at: this.modify_at }) return newCart } updatetotals() { this.totalQty = 0; this.totalPrice = 0; for (const rec in this.items) { let order = this.items[rec].order; if (!order) { order = this.items[rec]; } this.totalQty += order.quantity; this.totalPrice += order.price * order.quantity; } this.totalPrice = parseFloat(this.totalPrice.toFixed(2)) } generateArray() { let arr = []; for (let id in this.items) { arr.push(this.items[id]) } return arr; } } module.exports = Cart