Aggiungi il codice alla cassa in automatico
This commit is contained in:
@@ -10,17 +10,15 @@
|
||||
</q-btn>
|
||||
</div>
|
||||
<div class="col-6" style="text-align: right">
|
||||
<span v-if="myTotalPrice" class="text-grey q-mr-xs">Totale:</span> <span
|
||||
class="text-subtitle1 q-mr-sm ">€ {{ myTotalPrice ? myTotalPrice.toFixed(2) : 0 }}</span>
|
||||
<span v-if="myTotalPrice" class="text-grey q-mr-xs">Totale:</span> <span class="text-subtitle1 q-mr-sm ">€ {{
|
||||
myTotalPrice ? myTotalPrice.toFixed(2) : 0 }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<q-separator></q-separator>
|
||||
<div id="mybody">
|
||||
<div v-for="(rec, index) in ordersCart" :key="index" class="col">
|
||||
|
||||
<CSingleCart
|
||||
:order="rec.order"
|
||||
:showall="false">
|
||||
<CSingleCart :order="rec.order" :showall="false">
|
||||
</CSingleCart>
|
||||
|
||||
</div>
|
||||
@@ -29,11 +27,14 @@
|
||||
{{ $t('ecomm.carrello_vuoto') }}
|
||||
</div>
|
||||
<div v-else style="text-align: center">
|
||||
<q-btn
|
||||
rounded icon="fas fa-shopping-cart" color="green" :label="$t('ecomm.btn_cassa')" class="q-mb-sm" to="/checkout"
|
||||
@click="closecart"></q-btn>
|
||||
<div class="text-center">
|
||||
<q-btn rounded icon="fas fa-shopping-cart" color="primary" :label="$t('ecomm.btn_cassa')"
|
||||
class="q-mb-sm" to="/checkout">
|
||||
</q-btn>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -6,25 +6,25 @@
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.centeritems{
|
||||
.centeritems {
|
||||
place-content: center;
|
||||
}
|
||||
|
||||
.prod_price{
|
||||
.prod_price {
|
||||
font-size: 1.25rem;
|
||||
}
|
||||
|
||||
.prod_disp{
|
||||
.prod_disp {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.prod_qtywarn{
|
||||
.prod_qtywarn {
|
||||
padding-left: 10px;
|
||||
font-size: 1rem;
|
||||
color: grey;
|
||||
}
|
||||
|
||||
.totali{
|
||||
.totali {
|
||||
font-weight: bold;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
@@ -33,3 +33,8 @@
|
||||
font-size: 1.1rem;
|
||||
color: blue;
|
||||
}
|
||||
|
||||
.product_code {
|
||||
font-size: 0.75rem;
|
||||
color: gray;
|
||||
}
|
||||
@@ -79,41 +79,15 @@ export default defineComponent({
|
||||
return 'fas fa-heart'
|
||||
}
|
||||
}
|
||||
function addtoCart(add: boolean) {
|
||||
async function addtoCart(add: boolean) {
|
||||
|
||||
if (!userStore.isLogged) {
|
||||
tools.showNeutralNotif($q, t('ecomm.area_personale'))
|
||||
globalStore.rightDrawerOpen = true
|
||||
return false
|
||||
}
|
||||
await products.addtoCartBase({ $q, t, code: myproduct.value.code!, order: myorder, addqty: add })
|
||||
|
||||
products.addToCart({ product: myproduct.value, order: myorder, addqty: add }).then((ris) => {
|
||||
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')
|
||||
} else {
|
||||
msg = t('ecomm.prod_sul_carrello', { strprod, qty: myorder.quantity })
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
updateproduct()
|
||||
|
||||
if (ris === null || myorder.quantity === 0)
|
||||
tools.showNotif($q, msg)
|
||||
else
|
||||
tools.showPositiveNotif($q, msg)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
function getnumstore() {
|
||||
@@ -139,7 +113,7 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
function updateproduct() {
|
||||
myproduct.value = products.getProduct(props.code)
|
||||
myproduct.value = products.getProductByCode(props.code)
|
||||
products.updateQuantityAvailable(myproduct.value._id)
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,9 @@
|
||||
<div class="text-h7 boldhigh">
|
||||
{{ myproduct.name }}
|
||||
</div>
|
||||
<div class="product_code">
|
||||
{{$t('ecomm.codice')}}: {{ myproduct.code }}
|
||||
</div>
|
||||
</div>
|
||||
</q-item>
|
||||
<q-item>
|
||||
|
||||
@@ -15,9 +15,12 @@
|
||||
width: 50px;
|
||||
}
|
||||
|
||||
.ordine_scontato_barrato{
|
||||
text-decoration: line-through;
|
||||
.ordine_scontato{
|
||||
color: gray;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.barrato {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
.ordine_scontato_nuovo{
|
||||
font-size: 1.1rem;
|
||||
|
||||
@@ -73,11 +73,16 @@ export default defineComponent({
|
||||
products.removeFromCart({ order: order.value })
|
||||
}
|
||||
|
||||
function getRisparmio(): string {
|
||||
return ((order.value.price * order.value.quantity) - order.value.TotalPriceProduct).toFixed(2)
|
||||
}
|
||||
|
||||
return {
|
||||
myimgclass,
|
||||
addsubqty,
|
||||
removeFromCard,
|
||||
isApplicatoSconto,
|
||||
getRisparmio,
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
@@ -27,12 +27,12 @@
|
||||
@click="addsubqty(true, false)"></q-btn>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-2 no-wrap text-subtitle3 q-mr-sm">
|
||||
<div v-if="isApplicatoSconto()">
|
||||
<span class="ordine_scontato_barrato">€ {{ (order.price * order.quantity).toFixed(2) }}</span>
|
||||
</div>
|
||||
<span v-if="isApplicatoSconto()" class="ordine_scritta_sconto">{{ $t('ecomm.sconto_applicato') }}</span>
|
||||
<div class="col-2 no-wrap text-subtitle3_short q-mr-sm">
|
||||
<span :class="isApplicatoSconto() ? 'ordine_scontato_nuovo' : ''">€ {{ order.TotalPriceProduct ? order.TotalPriceProduct.toFixed(2) : 0 }}</span>
|
||||
<span v-if="isApplicatoSconto()">
|
||||
<span class="ordine_scontato">(<span class="barrato">€ {{(order.price * order.quantity).toFixed(2) }}</span>)</span>
|
||||
</span>
|
||||
<span v-if="isApplicatoSconto()" class="ordine_scritta_sconto">{{ $t('ecomm.sconto_applicato', {risparmio: getRisparmio()}) }}</span>
|
||||
</div>
|
||||
<div class="col-1">
|
||||
<q-btn v-if="!nomodif" icon="fas fa-times" color="negative" round size="xs" @click="removeFromCard">
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1664,7 +1664,10 @@ const msg_it = {
|
||||
carrello: 'Carrello',
|
||||
settings: 'Impostazioni',
|
||||
qta_in_attesa: '(Ordinati In attesa {qty})',
|
||||
sconto_applicato: 'Sconto!',
|
||||
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',
|
||||
},
|
||||
},
|
||||
|
||||
|
||||
@@ -42,7 +42,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 }
|
||||
},
|
||||
|
||||
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 }
|
||||
},
|
||||
@@ -114,7 +119,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 || 0;
|
||||
}
|
||||
}
|
||||
@@ -132,7 +137,8 @@ export const useProducts = defineStore('Products', {
|
||||
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)
|
||||
@@ -432,6 +438,14 @@ export const useProducts = defineStore('Products', {
|
||||
if (order.quantity === 0)
|
||||
order.quantity = 1
|
||||
|
||||
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)
|
||||
}
|
||||
@@ -581,6 +595,38 @@ 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')
|
||||
|
||||
if (order.quantity > 1 || order.quantity === 0)
|
||||
strprod = t('ecomm.prodotti')
|
||||
|
||||
let msg = ''
|
||||
if (ris === null)
|
||||
msg = t('ecomm.error_cart')
|
||||
else {
|
||||
|
||||
if (order.quantity === 0) {
|
||||
msg = t('ecomm.prodotto_tolto')
|
||||
} else {
|
||||
msg = t('ecomm.prod_sul_carrello', { strprod, qty: order.quantity })
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
this.updateQuantityAvailable(product._id)
|
||||
|
||||
if (ris === null || order.quantity === 0)
|
||||
tools.showNotif($q, msg)
|
||||
else
|
||||
tools.showPositiveNotif($q, msg)
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
})
|
||||
|
||||
@@ -3,3 +3,6 @@ $heightBtn: 100%;
|
||||
.card .product-image {
|
||||
height: 300px;
|
||||
}
|
||||
.insert{
|
||||
cursor:pointer;
|
||||
}
|
||||
@@ -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'
|
||||
|
||||
@@ -34,6 +34,8 @@ export default defineComponent({
|
||||
const endload = ref(false)
|
||||
const recOrderCart = ref(<IOrderCart>{})
|
||||
|
||||
const search = ref('')
|
||||
|
||||
const statusnow = computed(() => (): number => {
|
||||
if (recOrderCart.value) {
|
||||
return recOrderCart.value.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,
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -55,6 +55,27 @@
|
||||
<div v-else style="text-align: center" class="text-grey">
|
||||
{{ $t('ecomm.carrello_vuoto') }}
|
||||
</div>
|
||||
|
||||
<br >
|
||||
<div
|
||||
class="q-gutter-y-md column text-center q-mx-auto"
|
||||
style="width: 350px; max-width: 100%"
|
||||
>
|
||||
<q-input
|
||||
filled
|
||||
stack-label
|
||||
dense
|
||||
:label="$t('ecomm.code_add_to_cart')"
|
||||
v-model="search"
|
||||
class="q-ml-md"
|
||||
@keyup.enter="insertArticolo()"
|
||||
>
|
||||
<template v-slot:append>
|
||||
<q-icon class="insert" name="fas fa-shopping-cart" color="green" @click="insertArticolo()"/>
|
||||
</template>
|
||||
</q-input>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<q-input
|
||||
filled
|
||||
stack-label
|
||||
label="Inserisci il codice o il testo"
|
||||
:label="$t('ecomm.code_o_text_search')"
|
||||
v-model="search"
|
||||
class="q-ml-md"
|
||||
>
|
||||
|
||||
Reference in New Issue
Block a user