@@ -27,11 +27,12 @@
@click="addsubqty(true, false)">
-
- € {{ ((order.price * order.quantity) + (order.price * order.quantitypreordered)).toFixed(2) }}
-
- € {{ order.TotalPriceProduct ? order.TotalPriceProduct.toFixed(2) : 0 }}
+
+ € {{ order.TotalPriceProduct ? order.TotalPriceProduct.toFixed(2) : 0 }}
+
+ (€ {{((order.price * order.quantity) + (order.price * order.quantitypreordered)).toFixed(2) }})
+
+ {{ $t('ecomm.sconto_applicato', {risparmio: getRisparmio()}) }}
diff --git a/src/css/app.scss b/src/css/app.scss
index 4f3de891..0cb008b9 100755
--- a/src/css/app.scss
+++ b/src/css/app.scss
@@ -263,6 +263,13 @@ h3 {
letter-spacing: .00937em;
}
+.text-subtitle3_short {
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.25rem;
+ letter-spacing: .00937em;
+}
+
.text-3d {
letter-spacing: .00937em;
font-size: 1rem;
diff --git a/src/mixins/mixin-users.ts b/src/mixins/mixin-users.ts
index 81a70019..496b431c 100755
--- a/src/mixins/mixin-users.ts
+++ b/src/mixins/mixin-users.ts
@@ -45,12 +45,11 @@ export default function () {
return ''
}
- function getnumItemsCart(): any {
+ function getnumItemsCart(): number {
const products = useProducts()
const arrcart = products.cart
if (!!arrcart) {
if (!!arrcart.items) {
- // @ts-ignore
const total = arrcart.items.reduce((sum, item) => sum + item.order.quantity + item.order.quantitypreordered , 0)
return total
}
diff --git a/src/statics/lang/it.js b/src/statics/lang/it.js
index d62625fa..80bd1958 100755
--- a/src/statics/lang/it.js
+++ b/src/statics/lang/it.js
@@ -258,6 +258,9 @@ const msg_it = {
},
db: {
recupdated: 'Record Aggiornato',
+ records_imported: '{num} Record Importati',
+ records_updated: '{num} Record Aggiornati',
+ records_errors: '{num} Record con Errori',
recfailed: 'Errore durante aggiornamento Record',
reccanceled: 'Annullato Aggiornamento. Ripristinato valore precendente',
deleterecord: 'Elimina Record',
@@ -1663,6 +1666,10 @@ const msg_it = {
carrello: 'Carrello',
settings: 'Impostazioni',
qta_in_attesa: '(Ordinati In attesa {qty})',
+ sconto_applicato: 'Risparmi {risparmio} € !',
+ codice: 'Codice',
+ code_o_text_search: 'Inserisci il codice o il testo',
+ code_add_to_cart: 'Aggiungi un codice al carrello',
qta_prenotate_in_attesa: '(Preordinate In attesa {qty})',
},
},
diff --git a/src/store/Products.ts b/src/store/Products.ts
index 92c44106..91b8fb26 100755
--- a/src/store/Products.ts
+++ b/src/store/Products.ts
@@ -53,7 +53,12 @@ export const useProducts = defineStore('Products', {
},
- getProduct: (state: IProductsState) => (code: string): IProduct => {
+ getProductById: (state: IProductsState) => (id: string): IProduct => {
+ const prod = state.products.find((prod: IProduct) => prod._id === id)
+ return prod ? prod : { active: false, img: '', code: '', name: '', storehouses: [], scontisticas: [], price: 0, stockQty: 0, bookableQty: 0 }
+ },
+
+ getProductByCode: (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,
@@ -128,7 +133,7 @@ export const useProducts = defineStore('Products', {
if (myord.items) {
for (const item of myord.items) {
if (item.order) {
- if (item.order.idProduct === idproduct) {
+ if ((item.order.idProduct === idproduct) && (item.order.status! < shared_consts.OrderStatus.CHECKOUT_SENT)) {
totalQuantity += (item.order.quantity + item.order.quantitypreordered) || 0;
}
}
@@ -141,14 +146,32 @@ export const useProducts = defineStore('Products', {
},
getOrdersCartByIdProduct: (state: IProductsState) => (idproduct: string): IOrderCart[] | [] => {
- // console.log('getOrdersCartByIdProduct')
- // 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 (item.order.idProduct === idproduct)
+ && (item.order.status! < shared_consts.OrderStatus.CHECKOUT_SENT)
+ })
+ })
+ // console.log('Ordini ', ris)
+ return ris ? ris : []
+ }
+ } catch (e) {
+ console.error('Err', e)
+ }
+ return []
+ },
+
+ getOrdersCartInAttesaByIdProduct: (state: IProductsState) => (idproduct: string): IOrderCart[] | [] => {
+ try {
+ if (state.orders) {
+ const ris = state.orders.filter((ordercart: IOrderCart) => {
+ return ordercart.items!.some(item => {
+ if (item.order)
+ return (item.order.idProduct === idproduct)
+ && (item.order.status! < shared_consts.OrderStatus.CHECKOUT_SENT)
})
})
// console.log('Ordini ', ris)
@@ -447,11 +470,22 @@ export const useProducts = defineStore('Products', {
}
}
- neworder = this.createOrderByProduct(product, order)
+
+ if (!order.idStorehouse) {
+ if (product.storehouses.length === 1) {
+ order.idStorehouse = product.storehouses[0]._id
+ } else {
+ order.idStorehouse = globalStore.storehouses ? globalStore.storehouses[0]._id : ''
+ }
+ }
+
+ if (order.idStorehouse) {
+ neworder = this.createOrderByProduct(product, order)
+ }
}
- if (neworder && !neworder.idStorehouse)
- return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, 'Nessuno Store')
+ // if (neworder && !neworder.idStorehouse)
+ // return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, 'Nessuno Store')
console.log('addToCart', 'userid=', userStore.my._id, neworder)
@@ -594,6 +628,41 @@ export const useProducts = defineStore('Products', {
return ris
},
+ async addtoCartBase({ $q, t, code, order, addqty }: { $q: any, t: any, code: string, order: IOrder, addqty: boolean }) {
+ let product = this.getProductByCode(code)
+
+ return this.addToCart({ product, order, addqty }).then((ris) => {
+ let strprod = t('ecomm.prodotto')
+
+ let msg = ''
+ console.log('ris', ris)
+ if (ris === null || ris.myord == null) {
+ msg = t('ecomm.error_cart')
+ tools.showNegativeNotif($q, msg)
+ return
+ } else {
+
+ 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()
+
+ if (ris === null || ris.myord.quantity === 0)
+ tools.showNotif($q, msg)
+ else
+ tools.showPositiveNotif($q, msg)
+
+ })
+ },
getQuantityByOrder(order: IOrder): string {
let mystr = '';
@@ -605,36 +674,6 @@ export const useProducts = defineStore('Products', {
}
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/store/UserStore.ts b/src/store/UserStore.ts
index 9f28b25a..5ef2fd23 100755
--- a/src/store/UserStore.ts
+++ b/src/store/UserStore.ts
@@ -1754,9 +1754,23 @@ export const useUserStore = defineStore('UserStore', {
async importToServerCmd($q: any, t: any, cmd: number, data: any) {
return Api.SendReq('/admin/import', 'POST', { cmd, data })
- .then((res) => {
+ .then((res: any) => {
if (res) {
- tools.showPositiveNotif($q, t('db.recupdated'))
+ let msg = ''
+
+ if (res.data.imported) {
+ msg += ' ' + t('db.records_imported', {num: res.data.imported})
+ }
+ if (res.data.errors) {
+ msg += ' ' + t('db.records_errors', {num: res.data.errors})
+ }
+ if (res.data.updated) {
+ msg += ' ' + t('db.records_updated', {num: res.data.updated})
+ }
+ if (!msg) {
+ msg = t('db.recupdated')
+ }
+ tools.showPositiveNotif($q, msg)
}
}).catch((error) => {
tools.showNegativeNotif($q, t('db.recfailed'))
diff --git a/src/views/ecommerce/checkOut/checkOut.scss b/src/views/ecommerce/checkOut/checkOut.scss
index 9df13d3c..4067f7bb 100755
--- a/src/views/ecommerce/checkOut/checkOut.scss
+++ b/src/views/ecommerce/checkOut/checkOut.scss
@@ -3,3 +3,6 @@ $heightBtn: 100%;
.card .product-image {
height: 300px;
}
+.insert{
+ cursor:pointer;
+}
\ No newline at end of file
diff --git a/src/views/ecommerce/checkOut/checkOut.ts b/src/views/ecommerce/checkOut/checkOut.ts
index 0f3fe230..15db645f 100755
--- a/src/views/ecommerce/checkOut/checkOut.ts
+++ b/src/views/ecommerce/checkOut/checkOut.ts
@@ -8,7 +8,7 @@ import { useI18n } from '@/boot/i18n'
import { toolsext } from '@store/Modules/toolsext'
import { useQuasar } from 'quasar'
import { costanti } from '@costanti'
-import { ICart, IOrderCart, IShareWithUs } from '@src/model/Products'
+import { ICart, IOrder, IOrderCart, IShareWithUs } from '@src/model/Products'
import { shared_consts } from '@src/common/shared_vuejs'
@@ -33,7 +33,9 @@ export default defineComponent({
const note = ref('')
const endload = ref(false)
const recOrderCart = ref({})
-
+
+ const search = ref('')
+
const statusnow = computed(() => (): number => {
if (recOrderCart.value) {
return recOrderCart.value.status
@@ -158,9 +160,9 @@ export default defineComponent({
title: t('ecomm.order')
}).onOk(async () => {
const status = shared_consts.OrderStatus.CHECKOUT_SENT
-
+
recOrderCart.value = await productStore.CreateOrdersCart({ cart_id: mycart.value._id, status, note: note.value })
-
+
// statusnow.value = myordercart ? myordercart.status : 0
if (recOrderCart.value.status === status) {
@@ -176,6 +178,17 @@ export default defineComponent({
})
}
+ async function insertArticolo() {
+ let lowerSearchText = search.value.trim();
+
+ const myprod = productStore.getProductByCode(lowerSearchText);
+ if (myprod && myprod.active) {
+ let myorder: IOrder = { quantity: 1, price: 0, TotalPriceProduct: 0 }
+ await productStore.addtoCartBase({ $q, t, code: myprod.code!, order: myorder, addqty: true })
+ search.value = ''
+ load()
+ }
+ }
onMounted(mounted)
@@ -197,6 +210,8 @@ export default defineComponent({
recOrderCart,
mycart,
endload,
+ search,
+ insertArticolo,
}
}
})
diff --git a/src/views/ecommerce/checkOut/checkOut.vue b/src/views/ecommerce/checkOut/checkOut.vue
index 304b4b3f..219369cc 100755
--- a/src/views/ecommerce/checkOut/checkOut.vue
+++ b/src/views/ecommerce/checkOut/checkOut.vue
@@ -55,6 +55,27 @@
{{ $t('ecomm.carrello_vuoto') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/ecommerce/productsList/productsList.vue b/src/views/ecommerce/productsList/productsList.vue
index 9720420f..e6aff2bd 100755
--- a/src/views/ecommerce/productsList/productsList.vue
+++ b/src/views/ecommerce/productsList/productsList.vue
@@ -9,7 +9,7 @@