diff --git a/src/components/CProductCard/CProductCard.scss b/src/components/CProductCard/CProductCard.scss index 45a9c435..c5714358 100755 --- a/src/components/CProductCard/CProductCard.scss +++ b/src/components/CProductCard/CProductCard.scss @@ -18,6 +18,10 @@ font-size: 1.2rem; } +.prod_preorder{ + font-size: 1.2rem; +} + .prod_qtywarn{ padding-left: 10px; font-size: 1rem; diff --git a/src/components/CProductCard/CProductCard.ts b/src/components/CProductCard/CProductCard.ts index 74009690..83b0a44b 100755 --- a/src/components/CProductCard/CProductCard.ts +++ b/src/components/CProductCard/CProductCard.ts @@ -88,33 +88,39 @@ export default defineComponent({ } - products.addToCart({ product: myproduct.value, order: myorder, addqty: add }).then((ris) => { - let strprod = t('ecomm.prodotto') + if (myproduct.value) { + products.addToCart({ product: myproduct.value, order: myorder, addqty: add }).then((ris: any) => { + let strprod = t('ecomm.prodotto') - if (myorder.quantity > 1 || myorder.quantity === 0) - strprod = t('ecomm.prodotti') - - let msg = '' - if (ris === null) - msg = t('ecomm.error_cart') - else { - - if (myorder.quantity === 0) { - msg = t('ecomm.prodotto_tolto') + let msg = '' + console.log('ris', ris) + if (ris === null || ris.myord == null) { + msg = t('ecomm.error_cart') + tools.showNegativeNotif($q, msg) + return } else { - msg = t('ecomm.prod_sul_carrello', { strprod, qty: myorder.quantity }) + + let qta = ris.myord.quantity + ris.myord.quantitypreordered + if (qta > 1 || qta === 0) + strprod = t('ecomm.prodotti') + + if (qta === 0) { + msg = t('ecomm.prodotto_tolto') + } else { + msg = t('ecomm.prod_sul_carrello', { strprod, qty: qta }) + } + } - } + updateproduct() - updateproduct() + if (ris === null || ris.myord.quantity === 0) + tools.showNotif($q, msg) + else + tools.showPositiveNotif($q, msg) - if (ris === null || myorder.quantity === 0) - tools.showNotif($q, msg) - else - tools.showPositiveNotif($q, msg) - - }) + }) + } } function getnumstore() { @@ -141,13 +147,13 @@ export default defineComponent({ function updateproduct() { myproduct.value = products.getProduct(props.code) - products.updateQuantityAvailable(myproduct.value._id) + // products.updateQuantityAvailable(myproduct.value._id) } function getStorehouses() { if (!myproduct.value) return [] - + const myarr: any = [] let ind = 1 myproduct.value.storehouses.forEach((store) => { @@ -175,6 +181,11 @@ export default defineComponent({ return qty } + function getQtyBookableAvailable() { + let qty = myproduct.value.bookableAvailableQty! + return qty + } + function getQtyWarn() { if (myorder.quantity > 0) { return t('ecomm.di_cui_x_in_carrello', { qty: myorder.quantity }) @@ -182,6 +193,13 @@ export default defineComponent({ return '' } + function getQtyWarnPreOrdered() { + if (myorder.quantitypreordered > 0) { + return t('ecomm.di_cui_x_in_carrello', { qty: myorder.quantitypreordered }) + } + return '' + } + watch(() => props.code, (newval, oldval) => { console.log('change code') load() @@ -206,6 +224,7 @@ export default defineComponent({ const ord = products.getOrderProductInCart(myproduct.value._id) if (ord) { myorder.quantity = ord.quantity + myorder.quantitypreordered = ord.quantitypreordered } } @@ -222,7 +241,8 @@ export default defineComponent({ } function enableSubQty() { - return myorder.quantity ? myorder.quantity > 0 : false + let qty = myorder.quantity + myorder.quantitypreordered + return qty ? qty > 0 : false } function enableAddQty() { @@ -262,6 +282,8 @@ export default defineComponent({ endload, shared_consts, site, + getQtyWarnPreOrdered, + getQtyBookableAvailable, } } }) diff --git a/src/components/CProductCard/CProductCard.vue b/src/components/CProductCard/CProductCard.vue index 71a251e4..69e18183 100755 --- a/src/components/CProductCard/CProductCard.vue +++ b/src/components/CProductCard/CProductCard.vue @@ -51,16 +51,17 @@ myproduct.after_price }} - +
{{ sconti.description }} -
+
- @@ -116,29 +117,18 @@ - - {{ t('ecomm.preorders') }} - - - {{ t('ecomm.available') }} - + {{ t('ecomm.available') }} - - {{ -getQtyAvailable() }} - - - {{ getQtyAvailable() }} - + {{ getQtyAvailable() }}
{{ getQtyWarn() }}
{{ @@ -152,6 +142,43 @@ + + + + + + + + {{ t('ecomm.preorders') }} + + + + {{ getQtyBookableAvailable() }} + +
+ {{ + getQtyWarnPreOrdered() + }} + +
+ {{ + $t('ecomm.qta_prenotate_in_attesa', { + qty: myproduct.QuantitaPrenotateInAttesa, + }) + }} +
+
+
+
+
{{ myorder.quantity }}
+
+ Preord.: {{ myorder.quantitypreordered }} +
@@ -221,7 +255,7 @@
- {{ - singleord.order.quantity - }} + + {{ singleord.order.quantity }} + + {{ singleord.order.quantitypreordered }}
diff --git a/src/components/CSingleCart/CSingleCart.ts b/src/components/CSingleCart/CSingleCart.ts index d0886fbe..c630c6fd 100755 --- a/src/components/CSingleCart/CSingleCart.ts +++ b/src/components/CSingleCart/CSingleCart.ts @@ -40,14 +40,29 @@ export default defineComponent({ } function addsubqty(addqty: boolean, subqty: boolean) { - if (addqty) { - if (props.order.quantity >= 10) - return false - } + if (products.isQtyAvailableByOrder(props.order)) { + if (addqty) { + if (props.order.quantity >= 20) + return false + } - if (subqty) { - if (props.order.quantity === 0) - return false + if (subqty) { + if (props.order.quantity === 0) + return false + } + } else { + + if (products.isInPreorderByOrder(props.order)) { + if (addqty) { + if (props.order.quantitypreordered >= 20) + return false + } + + if (subqty) { + if (props.order.quantitypreordered === 0) + return false + } + } } products.addSubQtyToItem({ @@ -56,14 +71,15 @@ export default defineComponent({ order: props.order, }).then((res: any) => { if (res.risult) { - order.value.quantity = res.qty + order.value.quantity = res.myord.quantity + order.value.quantitypreordered = res.myord.quantitypreordered } }) } function isApplicatoSconto() { - const totalipotetico = order.value.price! * order.value.quantity - if (totalipotetico > order.value.TotalPriceProduct!) { + const totalipotetico = order.value.price * (order.value.quantity + order.value.quantitypreordered) + if (totalipotetico > order.value.TotalPriceProduct) { return true } return false diff --git a/src/components/CSingleCart/CSingleCart.vue b/src/components/CSingleCart/CSingleCart.vue index 92081d2a..d78dc4f7 100755 --- a/src/components/CSingleCart/CSingleCart.vue +++ b/src/components/CSingleCart/CSingleCart.vue @@ -22,14 +22,14 @@
{{ order.quantity }}
--> -
{{ order.quantity }}
+
{{ order.quantity + order.quantitypreordered }}
- €  {{ (order.price * order.quantity).toFixed(2) }} + €  {{ ((order.price * order.quantity) + (order.price * order.quantitypreordered)).toFixed(2) }}
€ {{ order.TotalPriceProduct ? order.TotalPriceProduct.toFixed(2) : 0 }}
diff --git a/src/mixins/mixin-users.ts b/src/mixins/mixin-users.ts index bdf36765..81a70019 100755 --- a/src/mixins/mixin-users.ts +++ b/src/mixins/mixin-users.ts @@ -51,7 +51,7 @@ export default function () { if (!!arrcart) { if (!!arrcart.items) { // @ts-ignore - const total = arrcart.items.reduce((sum, item) => sum + item.order.quantity, 0) + const total = arrcart.items.reduce((sum, item) => sum + item.order.quantity + item.order.quantitypreordered , 0) return total } } diff --git a/src/model/Products.ts b/src/model/Products.ts index bfcaa892..f53c8529 100755 --- a/src/model/Products.ts +++ b/src/model/Products.ts @@ -22,8 +22,11 @@ export interface IProduct { color?: string, size?: string, quantityAvailable?: number, + bookableAvailableQty?: number, QuantitaOrdinateInAttesa?: number, - stockQty?: number, + QuantitaPrenotateInAttesa?: number, + stockQty: number, + bookableQty: number, canBeShipped?: boolean, canBeBuyOnline?: boolean, weight?: number, @@ -54,6 +57,7 @@ export interface IOrder { color?: string size?: string quantity: number + quantitypreordered: number weight?: number stars?: number product?: IProduct diff --git a/src/statics/lang/it.js b/src/statics/lang/it.js index c5593a46..d62625fa 100755 --- a/src/statics/lang/it.js +++ b/src/statics/lang/it.js @@ -62,6 +62,8 @@ const msg_it = { quantity: 'Quantità', quantityAvailable: 'Disponibili', stockQty: 'In Magazzino', + bookableQty: 'Prenotabili', + bookableAvailableQty: 'Disponib. Prenotabili', weight: 'Peso', unit: 'Unità di Misura', stars: 'Voto', @@ -1661,6 +1663,7 @@ const msg_it = { carrello: 'Carrello', settings: 'Impostazioni', qta_in_attesa: '(Ordinati In attesa {qty})', + qta_prenotate_in_attesa: '(Preordinate In attesa {qty})', }, }, diff --git a/src/store/Modules/fieldsTable.ts b/src/store/Modules/fieldsTable.ts index a31ea586..53113c14 100755 --- a/src/store/Modules/fieldsTable.ts +++ b/src/store/Modules/fieldsTable.ts @@ -1999,11 +1999,21 @@ export const colTableProducts = [ label_trans: 'products.quantityAvailable', fieldtype: costanti.FieldType.number }), + AddCol({ + name: 'bookableAvailableQty', + label_trans: 'products.bookableAvailableQty', + fieldtype: costanti.FieldType.number + }), AddCol({ name: 'stockQty', label_trans: 'products.stockQty', fieldtype: costanti.FieldType.number }), + AddCol({ + name: 'bookableQty', + label_trans: 'products.bookableQty', + fieldtype: costanti.FieldType.number + }), AddCol({ name: 'canBeShipped', label_trans: 'products.canBeShipped', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'canBeBuyOnline', label_trans: 'products.canBeBuyOnline', fieldtype: costanti.FieldType.boolean }), AddCol({ name: 'weight', label_trans: 'products.weight', fieldtype: costanti.FieldType.number }), diff --git a/src/store/Modules/tools.ts b/src/store/Modules/tools.ts index b7f9c7b0..26c174a9 100644 --- a/src/store/Modules/tools.ts +++ b/src/store/Modules/tools.ts @@ -8270,6 +8270,7 @@ export const tools = { }, + // FINE ! // getLocale() { diff --git a/src/store/Products.ts b/src/store/Products.ts index 6a191b58..92c44106 100755 --- a/src/store/Products.ts +++ b/src/store/Products.ts @@ -30,6 +30,17 @@ export const useProducts = defineStore('Products', { const indelem = state.products.findIndex((prod: IProduct) => prod._id === res.data.product._id) if (indelem >= 0) { state.products[indelem] = { ...res.data.product } + + /*if (!res.data.orders) { + // aggiorna anche tutti i product negli ordini ! + let ordcart: IOrderCart + for (ordcart of state.orders) { + for (const item of ordcart.items!) { + if (item.order.idProduct === res.data.product.idProduct) + item.order.product = res.data.product + } + } + }*/ } } if (res && res.data.orders) { @@ -44,7 +55,10 @@ export const useProducts = defineStore('Products', { getProduct: (state: IProductsState) => (code: string): IProduct => { const prod = state.products.find((prod: IProduct) => prod.code === code) - return prod ? prod : { active: false, img: '', code: '', name: '', storehouses: [], scontisticas: [], price: 0 } + return prod ? prod : { + active: false, img: '', code: '', name: '', storehouses: [], scontisticas: [], price: 0, + stockQty: 0, bookableQty: 0 + } }, getCart: (state: IProductsState) => (): ICart => { @@ -115,7 +129,7 @@ export const useProducts = defineStore('Products', { for (const item of myord.items) { if (item.order) { if (item.order.idProduct === idproduct) { - totalQuantity += item.order.quantity || 0; + totalQuantity += (item.order.quantity + item.order.quantitypreordered) || 0; } } } @@ -146,7 +160,7 @@ export const useProducts = defineStore('Products', { return [] }, - updateQuantityAvailable: (state: IProductsState) => (id: string): any => { + /* updateQuantityAvailable: (state: IProductsState) => (id: string): any => { const indelem = state.products.findIndex((prod: IProduct) => prod._id === id) if (indelem >= 0) { @@ -154,9 +168,14 @@ export const useProducts = defineStore('Products', { if (state.products[indelem].QuantitaOrdinateInAttesa! > 0) { state.products[indelem].quantityAvailable! -= state.products[indelem].QuantitaOrdinateInAttesa! } + state.products[indelem].bookableAvailableQty = state.products[indelem].bookableQty + if (state.products[indelem].QuantitaPrenotateInAttesa! > 0) { + state.products[indelem].bookableAvailableQty! -= state.products[indelem].QuantitaPrenotateInAttesa! + } } - }, + },*/ + getRecordEmpty: (state: IProductsState) => (): IProduct => { const tomorrow = tools.getDateNow() @@ -182,9 +201,12 @@ export const useProducts = defineStore('Products', { color: '', size: '', quantityAvailable: 0, + bookableAvailableQty: 0, stockQty: 0, + bookableQty: 0, canBeShipped: false, QuantitaOrdinateInAttesa: 0, + QuantitaPrenotateInAttesa: 0, canBeBuyOnline: false, weight: 0, unit: 0, @@ -218,6 +240,7 @@ export const useProducts = defineStore('Products', { weight: product.weight, quantity: order.quantity, + quantitypreordered: order.quantitypreordered, idStorehouse: order.idStorehouse, idScontisticas: product.idScontisticas, } @@ -388,12 +411,13 @@ export const useProducts = defineStore('Products', { const ordcart = this.getOrderProductInCart(product._id) if (ordcart) { - if (!addqty && ordcart.quantity === 1) { + if (!addqty && ((ordcart.quantity + ordcart.quantitypreordered) === 1)) { // sto per rimuovere l'ultimo pezzo, quindi cancello direttamente const risrem = await this.removeFromCart({ order: ordcart }) if (risrem) { order.quantity = 0 + order.quantitypreordered = 0 return true } else { return false @@ -406,14 +430,22 @@ export const useProducts = defineStore('Products', { order: ordcart, }).then((res: any) => { if (res && res.risult) { - order.quantity = res.qty + order.quantity = res.myord.quantity + order.quantitypreordered = res.myord.quantitypreordered } return res; }) } } else { - if (order.quantity === 0) + if (this.isQtyAvailableByProduct(product)) { + order.quantitypreordered = 0 order.quantity = 1 + } else { + if (this.isInPreorderByProduct(product)) { + order.quantity = 0 + order.quantitypreordered = 1 + } + } neworder = this.createOrderByProduct(product, order) } @@ -434,7 +466,7 @@ export const useProducts = defineStore('Products', { } this.updateDataProduct(res) - return { risult: !!res, qty: order.quantity } + return { risult: !!res } }) .catch((error) => { console.log('error addToCart', error) @@ -463,7 +495,7 @@ export const useProducts = defineStore('Products', { .then((res) => { this.updateDataProduct(res) - return { risult: !!res, qty: res.data.qty } + return { risult: !!res, myord: res.data.myord } }) .catch((error) => { console.log('error addSubQtyToItem', error) @@ -562,6 +594,47 @@ export const useProducts = defineStore('Products', { return ris }, + + getQuantityByOrder(order: IOrder): string { + let mystr = ''; + if (order.quantity > 0) { + mystr += order.quantity + } + if (order.quantitypreordered > 0) { + mystr += ' Prenotata :' + order.quantitypreordered + } + return mystr + }, + + isQtyAvailableByProduct(product: IProduct): boolean { + if (product) { + return (product.quantityAvailable! > 0) + } + return false; + }, + + isInPreorderByProduct(product: IProduct): boolean { + if (product) { + return (product.bookableAvailableQty! > 0) + } + return false; + }, + + isQtyAvailableByOrder(order: IOrder): boolean { + if (order && order.product) { + return this.isQtyAvailableByProduct(order.product) + } + return false; + }, + + isInPreorderByOrder(order: IOrder): boolean { + if (order && order.product) { + return this.isInPreorderByProduct(order.product) + } + return false; + }, + + }, }) diff --git a/src/views/ecommerce/orderInfo/orderInfo.ts b/src/views/ecommerce/orderInfo/orderInfo.ts index 82049b99..11b27da5 100755 --- a/src/views/ecommerce/orderInfo/orderInfo.ts +++ b/src/views/ecommerce/orderInfo/orderInfo.ts @@ -312,6 +312,7 @@ export default defineComponent({ getCols, endload, getOrdersCartWithTotals, + productStore, } } }) diff --git a/src/views/ecommerce/orderInfo/orderInfo.vue b/src/views/ecommerce/orderInfo/orderInfo.vue index 4543361e..31e2a655 100755 --- a/src/views/ecommerce/orderInfo/orderInfo.vue +++ b/src/views/ecommerce/orderInfo/orderInfo.vue @@ -57,7 +57,7 @@ v-if="!!item && item.order && item.order.product" > {{ item.order.product.name }} ({{ - item.order.quantity + productStore.getQuantityByOrder(item.order) }})
@@ -141,7 +141,7 @@
{{ item.order.product.name }} ({{ - item.order.quantity + productStore.getQuantityByOrder(item.order) }})