From 8399df86633dc1342baf3b0fa054a3e9ca412388 Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Fri, 15 Dec 2023 21:50:28 +0100 Subject: [PATCH] Corretto Ordini e visualizzazione dei Totali --- src/components/CMyCart/CMyCart.vue | 2 +- src/components/CProductCard/CProductCard.scss | 7 +- src/components/CProductCard/CProductCard.ts | 87 ++++++------ src/components/CProductCard/CProductCard.vue | 108 ++++++++++++--- src/components/CSingleCart/CSingleCart.ts | 6 +- src/model/Products.ts | 19 ++- src/rootgen/admin/importdata/importdata.ts | 1 - src/statics/lang/it.js | 29 ++-- src/store/Products.ts | 131 ++++++++++++++---- src/views/ecommerce/cartList/cartList.vue | 2 +- src/views/ecommerce/checkOut/checkOut.ts | 22 ++- src/views/ecommerce/checkOut/checkOut.vue | 94 +++++++------ src/views/ecommerce/orderInfo/orderInfo.scss | 5 + src/views/ecommerce/orderInfo/orderInfo.ts | 21 ++- src/views/ecommerce/orderInfo/orderInfo.vue | 10 +- .../ecommerce/productsList/productsList.vue | 2 +- 16 files changed, 376 insertions(+), 170 deletions(-) diff --git a/src/components/CMyCart/CMyCart.vue b/src/components/CMyCart/CMyCart.vue index 13b77aae..730be054 100755 --- a/src/components/CMyCart/CMyCart.vue +++ b/src/components/CMyCart/CMyCart.vue @@ -26,7 +26,7 @@
- Il Carrello è Vuoto + {{ $t('ecomm.carrello_vuoto') }}
{ + const myorder = reactive({ idapp: process.env.APP_ID, quantity: 0, idStorehouse: '', idProvider: '' }) - const myproduct = ref({}) - const storeSelected = ref('') + const arrordersCart = ref([]) + + const openlistorders = ref(false) + const endload = ref(false) const valoriopt = computed(() => (item: any, addall: boolean, addnone: boolean) => { // console.log('valoriopt', item.table) return globalStore.getTableJoinByName(item.table, addall, addnone, item.filter) }) + const myproduct = computed((): IProduct => { + return products.getProduct(props.code) + }) + function iconWhishlist(order: IProduct) { if (true) { @@ -64,17 +73,6 @@ export default defineComponent({ return 'fas fa-heart' } } - - function decqty() { - if (myorder.value.quantity > 0) - myorder.value.quantity-- - } - - function addqty() { - if (myorder.value.quantity < 10) - myorder.value.quantity++ - } - function addtoCart(add: boolean) { if (!userStore.isLogged) { @@ -83,24 +81,27 @@ export default defineComponent({ return false } - products.addToCart({ product: myproduct.value, order: myorder.value, addqty: add }).then((ris) => { + + products.addToCart({ product: myproduct.value, order: myorder, addqty: add }).then((ris) => { let strprod = t('ecomm.prodotto') - if (myorder.value.quantity > 1 || myorder.value.quantity === 0) + + if (myorder.quantity > 1 || myorder.quantity === 0) strprod = t('ecomm.prodotti') let msg = '' if (ris === null) msg = t('ecomm.error_cart') else { - if (myorder.value.quantity === 0) { + + if (myorder.quantity === 0) { msg = t('ecomm.prodotto_tolto') } else { - msg = t('ecomm.prod_sul_carrello', { strprod, qty: myorder.value.quantity }) + msg = t('ecomm.prod_sul_carrello', { strprod, qty: myorder.quantity }) } } - if (ris === null || myorder.value.quantity === 0) + if (ris === null || myorder.quantity === 0) tools.showNotif($q, msg) else tools.showPositiveNotif($q, msg) @@ -147,28 +148,26 @@ export default defineComponent({ } function checkifCartDisable() { - return !myorder.value.idStorehouse + // return !myorder.idStorehouse + return false } function updateQtyAvailable() { myproduct.value.quantityAvailable = myproduct.value.stockQty - if (myorder.value.quantity > 0) { - myproduct.value.quantityAvailable -= myorder.value.quantity - } - if (myproduct.value.QuantitaOrdinateInAttesa > 0) { - myproduct.value.quantityAvailable -= myproduct.value.QuantitaOrdinateInAttesa + if (myproduct.value.QuantitaOrdinateInAttesa! > 0) { + myproduct.value.quantityAvailable! -= myproduct.value.QuantitaOrdinateInAttesa! } } function getQtyAvailable() { updateQtyAvailable() - let qty = myproduct.value.quantityAvailable + let qty = myproduct.value.quantityAvailable! return qty } function getQtyWarn() { - if (myorder.value.quantity > 0) { - return t('ecomm.di_cui_x_in_carrello', { qty: myorder.value.quantity }) + if (myorder.quantity > 0) { + return t('ecomm.di_cui_x_in_carrello', { qty: myorder.quantity }) } return '' } @@ -179,32 +178,27 @@ export default defineComponent({ }) watch(() => storeSelected.value, (newval, oldval) => { - myorder.value.idStorehouse = newval + myorder.idStorehouse = newval }) - async function load() { + function load() { // console.log('created Cproductcard', code) - if (props.code) { - myproduct.value = await products.loadProduct({ code: props.code }) - } else { - // @ts-ignore - myproduct.value = props.product - } - console.log('myproduct', myproduct, 'product', props.product) + arrordersCart.value = products.getOrdersCartByIdProduct(myproduct.value._id) if (!!myproduct.value) { if (myproduct.value.storehouses && myproduct.value.storehouses.length === 1) { - myorder.value.idStorehouse = myproduct.value.storehouses[0]._id + myorder.idStorehouse = myproduct.value.storehouses[0]._id } const ord = products.getOrderProductInCart(myproduct.value._id) if (ord) { - myorder.value.quantity = ord.quantity + myorder.quantity = ord.quantity } } + endload.value = true } function getmycardcl() { @@ -216,7 +210,7 @@ export default defineComponent({ } function enableSubQty() { - return myorder.value ? myorder.value.quantity > 0 : true + return myorder.quantity ? myorder.quantity > 0 : false } function enableAddQty() { @@ -226,8 +220,6 @@ export default defineComponent({ onMounted(load) return { - decqty, - addqty, addtoCart, iconWhishlist, getmycardcl, @@ -245,6 +237,13 @@ export default defineComponent({ enableAddQty, getQtyAvailable, getQtyWarn, + openlistorders, + func_tools, + toolsext, + products, + arrordersCart, + endload, + shared_consts, } } }) diff --git a/src/components/CProductCard/CProductCard.vue b/src/components/CProductCard/CProductCard.vue index 87749499..015be9ad 100755 --- a/src/components/CProductCard/CProductCard.vue +++ b/src/components/CProductCard/CProductCard.vue @@ -1,7 +1,13 @@ diff --git a/src/components/CSingleCart/CSingleCart.ts b/src/components/CSingleCart/CSingleCart.ts index af4ec264..a7c4aea2 100755 --- a/src/components/CSingleCart/CSingleCart.ts +++ b/src/components/CSingleCart/CSingleCart.ts @@ -54,8 +54,10 @@ export default defineComponent({ addqty, subqty, order: props.order, - }).then((newqty) => { - order.value.quantity = newqty + }).then((res: any) => { + if (res.risult) { + order.value.quantity = res.qty + } }) } diff --git a/src/model/Products.ts b/src/model/Products.ts index 7e28c4f5..bfa6345c 100755 --- a/src/model/Products.ts +++ b/src/model/Products.ts @@ -1,12 +1,15 @@ +import { IUserFields } from './UserStore' + + export interface IProduct { _id?: any active?: boolean idProducer?: string, idProvider?: string, idStorehouses?: string[], - producer: IProducer, + producer?: IProducer, storehouses: IStorehouse[], - provider: IProvider, + provider?: IProvider, code?: string, name?: string, description?: string, @@ -16,13 +19,13 @@ export interface IProduct { after_price?: string, color?: string, size?: string, - quantityAvailable: number, - QuantitaOrdinateInAttesa: number, - stockQty: number, + quantityAvailable?: number, + QuantitaOrdinateInAttesa?: number, + stockQty?: number, canBeShipped?: boolean, canBeBuyOnline?: boolean, weight?: number, - unit: number, + unit?: number, stars?: number, date?: Date, icon?: string, @@ -135,13 +138,13 @@ export interface IOrderCart { idapp?: string numorder: number userId: string + user: IUserFields, totalQty: number totalPrice: number department?: string items?: IBaseOrder[] nameSurname?: string status: number - note?: string modify_at?: Date evaso: boolean date_evaso?: Date @@ -155,6 +158,8 @@ export interface IOrderCart { date_ricevuto?: Date completato: boolean date_completato?: Date + created_at: Date + note: string } export interface IShareWithUs { diff --git a/src/rootgen/admin/importdata/importdata.ts b/src/rootgen/admin/importdata/importdata.ts index cab6887d..81f84773 100755 --- a/src/rootgen/admin/importdata/importdata.ts +++ b/src/rootgen/admin/importdata/importdata.ts @@ -382,7 +382,6 @@ export default defineComponent({ strris += ', "name":"' + tools.removeescape(tools.addslashes(rec[1])) + '"' strris += ', "price":"' + tools.removeescape(tools.addslashes(tools.convertPriceEurToValue(rec[2]))) + '"' strris += ', "stockQty":"' + tools.removeescape(tools.addslashes(rec[3])) + '"' - strris += ', "quantityAvailable":"' + tools.removeescape(tools.addslashes(rec[3])) + '"' strris += ', "link":"' + tools.removeescape(tools.addslashes(rec[4])) + '"' strris += ', "perc_iva":"' + tools.removeescape(tools.addslashes(rec[5])) + '"' strris += ', "price_acquistato":"' + tools.removeescape(tools.addslashes(tools.convertPriceEurToValue(rec[6]))) + '"' diff --git a/src/statics/lang/it.js b/src/statics/lang/it.js index 4dd781c0..11407f67 100755 --- a/src/statics/lang/it.js +++ b/src/statics/lang/it.js @@ -1610,6 +1610,18 @@ const msg_it = { seen: 'Visto da {num} utenti', attend: '{num} Partecipanti', }, + install: { + Installazione_Sito: 'Installazione Sito', + title_inst: 'Installa un nuovo Sito', + submit: 'Installa Sito', + name: 'Nome Sito (Esempio)', + domain: 'Host: (esempio.it)', + code: 'Codice Auth', + username: 'Username Admin', + password: 'Password Admin', + idapp:'Id Applicazione', + created: 'Sito Installato [IdApp = {idapp}] !', + }, ecomm: { already_in_cart: 'Questo prodotto è stato già aggiunto al Carrello', area_personale: 'Devi prima accedere alla tua Area Personale', @@ -1632,19 +1644,12 @@ const msg_it = { spedito: 'Ordine Spedito', completed: 'Ordine Completato', ricevuto: 'Prodotti Ricevuti', + listaord: 'Lista Ordini', + carrello_vuoto:'Il Carrello è Vuoto', + note:'Scrivi qui per eventuali note o chiarimenti:', + totale: 'Totale', + carrello: 'Carrello', }, - install: { - Installazione_Sito: 'Installazione Sito', - title_inst: 'Installa un nuovo Sito', - submit: 'Installa Sito', - name: 'Nome Sito (Esempio)', - domain: 'Host: (esempio.it)', - code: 'Codice Auth', - username: 'Username Admin', - password: 'Password Admin', - idapp:'Id Applicazione', - created: 'Sito Installato [IdApp = {idapp}] !', - } }, }; diff --git a/src/store/Products.ts b/src/store/Products.ts index 3afce8f7..e3491dc0 100755 --- a/src/store/Products.ts +++ b/src/store/Products.ts @@ -24,6 +24,29 @@ export const useProducts = defineStore('Products', { return state.products }, + updateDataProduct: (state: IProductsState) => (res: any) => { + if (res && res.data.product) { + // Update product from server + const indelem = state.products.findIndex((prod: IProduct) => prod._id === res.data.product._id) + if (indelem >= 0) { + state.products[indelem] = { ...res.data.product } + } + } + if (res && res.data.orders) { + state.orders = res.data.orders + } + + if (res && res.data.cart) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories) + state.cart = res.data.cart + } + + }, + + getProduct: (state: IProductsState) => (code: string): IProduct => { + const prod = state.products.find((prod: IProduct) => prod.code === code) + return prod ? prod : { storehouses: [] } + }, + getCart: (state: IProductsState) => (): ICart => { return state.cart }, @@ -69,6 +92,55 @@ export const useProducts = defineStore('Products', { return null }, + getOrderProductInOrdersCart: (state: IProductsState) => (idordercart: string, idproduct: string): IOrder | null => { + // console.log('.cart.items', this.cart.items) + if (state.orders) { + const orderscart = state.orders.find((rec: IOrderCart) => rec._id === idordercart) + if (orderscart) { + const ris = orderscart.items!.find((item: IBaseOrder) => item.order.idProduct === idproduct) + return ris ? ris.order : null + } + } + return null + }, + + getSumQtyOrderProductInOrdersCart: (state: IProductsState) => (idproduct: string): number => { + let totalQuantity = 0; + if (state.orders) { + const orderscart = state.orders + if (orderscart) { + for (const myord of orderscart) { + myord.items?.forEach((item: IBaseOrder) => { + if (item.order) { + if (item.order.idProduct === idproduct) { + totalQuantity += item.order.quantity || 0; + } + } + }); + } + } + } + return totalQuantity + }, + + getOrdersCartByIdProduct: (state: IProductsState) => (idproduct: string): IOrderCart[] | [] => { + // console.log('.cart.items', this.cart.items) + try { + if (state.orders) { + const ris = state.orders.filter((ordercart: IOrderCart) => { + return ordercart.items!.some(item => { + if (item.order) + return item.order.idProduct === idproduct + }) + }) + return ris ? ris : [] + } + } catch (e) { + console.error('Err', e) + } + return [] + }, + getRecordEmpty: (state: IProductsState) => (): IProduct => { const tomorrow = tools.getDateNow() @@ -129,7 +201,7 @@ export const useProducts = defineStore('Products', { quantity: order.quantity, idStorehouse: order.idStorehouse, - + } if (product.storehouses.length === 1) { @@ -165,17 +237,21 @@ export const useProducts = defineStore('Products', { let ris = null - ris = await Api.SendReq('/products', 'POST', null) + ris = await Api.SendReq('/products', 'POST', { userId: userStore.my._id }) .then((res) => { - if (res.data.products) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories) + if (res.data.products) { this.products = res.data.products } else { this.products = [] } - // console.log('ARRAY PRODUCTS = ', this.products) + if (res.data.orders) { + this.orders = res.data.orders + } else { + this.orders = [] + } + if (process.env.DEBUG === '1') { - // console.log('dbLoad', 'this.products', this.products) } return res @@ -212,6 +288,7 @@ export const useProducts = defineStore('Products', { .then((res) => { console.log('product', res.data.product) if (res.data.product) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories) + this.updateDataProduct(res) return res.data.product } else { return null @@ -249,6 +326,8 @@ export const useProducts = defineStore('Products', { this.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' } } + this.updateDataProduct(res) + return res }) .catch((error) => { @@ -261,17 +340,14 @@ export const useProducts = defineStore('Products', { return ris }, + async removeFromCart({ order }: { order: IOrder }) { const userStore = useUserStore() return Api.SendReq('/cart/' + userStore.my._id, 'DELETE', { orderId: order._id }) .then((res) => { - if (res.data.cart) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories) - this.cart = res.data.cart - } else { - this.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' } - } + this.updateDataProduct(res) return res }) @@ -308,8 +384,11 @@ export const useProducts = defineStore('Products', { addqty, subqty: !addqty, order: ordcart, - }).then((newqty) => { - order.quantity = newqty + }).then((res: any) => { + if (res && res.risult) { + order.quantity = res.qty + } + return res; }) } } else { @@ -333,8 +412,9 @@ export const useProducts = defineStore('Products', { } else { this.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' } } + this.updateDataProduct(res) - return res + return { risult: !!res, qty: order.quantity } }) .catch((error) => { console.log('error addToCart', error) @@ -361,15 +441,9 @@ export const useProducts = defineStore('Products', { ris = await Api.SendReq('/cart/' + userStore.my._id, 'POST', { addqty, subqty, order }) .then((res) => { - this.cart = res.data.cart - if (!!res.data.qty) { - // const ind = this.cart.items.findIndex((rec) => rec.order._id === order._id) - // this.cart.items[ind].order.quantity = res.data.qty + this.updateDataProduct(res) - return res.data.qty - } - - return 0 + return { risult: !!res, qty: res.data.qty } }) .catch((error) => { console.log('error addSubQtyToItem', error) @@ -382,7 +456,7 @@ export const useProducts = defineStore('Products', { return ris }, - async CreateOrdersCart({ cart_id, status }: { cart_id: string, status: number }) { + async CreateOrdersCart({ cart_id, status, note }: { cart_id: string, status: number, note: string }) { const userStore = useUserStore() const globalStore = useGlobalStore() @@ -392,15 +466,15 @@ export const useProducts = defineStore('Products', { let ris = null - ris = await Api.SendReq('/cart/' + userStore.my._id + '/createorderscart', 'POST', { cart_id, status }) + ris = await Api.SendReq('/cart/' + userStore.my._id + '/createorderscart', 'POST', { cart_id, status, note }) .then((res) => { if (res.data.status === shared_consts.OrderStatus.CHECKOUT_SENT) { // Cancella il Carrello, ho creato l'ordine ! this.cart = {} } - if (res.data.orders) - this.orders = res.data.orders + + this.updateDataProduct(res) return res.data.recOrderCart }) @@ -429,8 +503,7 @@ export const useProducts = defineStore('Products', { if (res.data.status === shared_consts.OrderStatus.CHECKOUT_SENT) { this.cart = {} } - if (res.data.orders) - this.orders = res.data.orders + this.updateDataProduct(res) return res.data.status }) @@ -455,8 +528,8 @@ export const useProducts = defineStore('Products', { ris = await Api.SendReq('/cart/' + userStore.my._id + '/ordercartstatus', 'POST', { order_id, status }) .then((res) => { - if (res.data.orders) - this.orders = res.data.orders + + this.updateDataProduct(res) return res.data.status diff --git a/src/views/ecommerce/cartList/cartList.vue b/src/views/ecommerce/cartList/cartList.vue index 951b6d0e..2d657bae 100755 --- a/src/views/ecommerce/cartList/cartList.vue +++ b/src/views/ecommerce/cartList/cartList.vue @@ -4,7 +4,7 @@
- +
diff --git a/src/views/ecommerce/checkOut/checkOut.ts b/src/views/ecommerce/checkOut/checkOut.ts index e049ec1c..0f3fe230 100755 --- a/src/views/ecommerce/checkOut/checkOut.ts +++ b/src/views/ecommerce/checkOut/checkOut.ts @@ -1,4 +1,4 @@ -import { defineComponent, onMounted, ref } from 'vue' +import { defineComponent, onMounted, ref, computed } from 'vue' import { tools } from '@store/Modules/tools' import { useUserStore } from '@store/UserStore' import { useRouter } from 'vue-router' @@ -31,8 +31,15 @@ export default defineComponent({ const myrec = ref([]) const oldrec = ref([]) const note = ref('') + const endload = ref(false) const recOrderCart = ref({}) - const statusnow = ref(shared_consts.OrderStatus.NONE) + + const statusnow = computed(() => (): number => { + if (recOrderCart.value) { + return recOrderCart.value.status + } + return 0 + }) function mounted() { // Inizializza @@ -98,10 +105,12 @@ export default defineComponent({ note.value = mycart.value.note! if (mycart.value) { - recOrderCart.value = await productStore.CreateOrdersCart({ cart_id: mycart.value._id, status: 0 }) + recOrderCart.value = await productStore.CreateOrdersCart({ cart_id: mycart.value._id, status: 0, note: note.value }) } console.log('myrec', myrec.value) + + endload.value = true } function CanBeShipped() { @@ -150,11 +159,11 @@ export default defineComponent({ }).onOk(async () => { const status = shared_consts.OrderStatus.CHECKOUT_SENT - const myordercart = await productStore.CreateOrdersCart({ cart_id: mycart.value._id, status }) + recOrderCart.value = await productStore.CreateOrdersCart({ cart_id: mycart.value._id, status, note: note.value }) - statusnow.value = myordercart ? myordercart.status : 0 + // statusnow.value = myordercart ? myordercart.status : 0 - if (statusnow.value === status) { + if (recOrderCart.value.status === status) { tools.showPositiveNotif($q, t('ecomm.ord_confirmed')) setTimeout(() => { $router.push('/orderinfo') @@ -187,6 +196,7 @@ export default defineComponent({ myTotalQty, recOrderCart, mycart, + endload, } } }) diff --git a/src/views/ecommerce/checkOut/checkOut.vue b/src/views/ecommerce/checkOut/checkOut.vue index 8d9a418f..335ffebb 100755 --- a/src/views/ecommerce/checkOut/checkOut.vue +++ b/src/views/ecommerce/checkOut/checkOut.vue @@ -1,50 +1,62 @@