Merge branch 'develop' of ssh://risosrv:5522/~/repository/newfreeplanet into develop
This commit is contained in:
@@ -18,6 +18,15 @@
|
|||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.prod_preorder{
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.prod_preorder{
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
.prod_qtywarn {
|
.prod_qtywarn {
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
font-size: 1rem;
|
font-size: 1rem;
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import { CCopyBtn } from '../CCopyBtn'
|
|||||||
|
|
||||||
import { func_tools, toolsext } from '@store/Modules/toolsext'
|
import { func_tools, toolsext } from '@store/Modules/toolsext'
|
||||||
|
|
||||||
import { IOrder, IOrderCart, IProduct } from '@src/model'
|
import { IBaseOrder, IOrder, IOrderCart, IProduct } from '@src/model'
|
||||||
import { tools } from '@store/Modules/tools'
|
import { tools } from '@store/Modules/tools'
|
||||||
import { useProducts } from '@store/Products'
|
import { useProducts } from '@store/Products'
|
||||||
|
|
||||||
@@ -43,11 +43,15 @@ export default defineComponent({
|
|||||||
const globalStore = useGlobalStore()
|
const globalStore = useGlobalStore()
|
||||||
const products = useProducts()
|
const products = useProducts()
|
||||||
|
|
||||||
|
const listord = ref(<IOrderCart[]>[])
|
||||||
|
const sumval = ref(0)
|
||||||
|
|
||||||
const site = ref(globalStore.site)
|
const site = ref(globalStore.site)
|
||||||
|
|
||||||
const myorder = reactive(<IOrder>{
|
const myorder = reactive(<IOrder>{
|
||||||
idapp: process.env.APP_ID,
|
idapp: process.env.APP_ID,
|
||||||
quantity: 0,
|
quantity: 0,
|
||||||
|
quantitypreordered: 0,
|
||||||
idStorehouse: '',
|
idStorehouse: '',
|
||||||
idProvider: ''
|
idProvider: ''
|
||||||
})
|
})
|
||||||
@@ -86,8 +90,12 @@ export default defineComponent({
|
|||||||
globalStore.rightDrawerOpen = true
|
globalStore.rightDrawerOpen = true
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
await products.addtoCartBase({ $q, t, code: myproduct.value.code!, order: myorder, addqty: add })
|
|
||||||
|
|
||||||
|
const ris = await products.addtoCartBase({ $q, t, code: myproduct.value.code!, order: myorder, addqty: add })
|
||||||
|
updateproduct()
|
||||||
|
if (ris && ris.myord) {
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getnumstore() {
|
function getnumstore() {
|
||||||
@@ -114,7 +122,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
function updateproduct() {
|
function updateproduct() {
|
||||||
myproduct.value = products.getProductByCode(props.code)
|
myproduct.value = products.getProductByCode(props.code)
|
||||||
products.updateQuantityAvailable(myproduct.value._id)
|
// products.updateQuantityAvailable(myproduct.value._id)
|
||||||
}
|
}
|
||||||
|
|
||||||
function getStorehouses() {
|
function getStorehouses() {
|
||||||
@@ -148,6 +156,11 @@ export default defineComponent({
|
|||||||
return qty
|
return qty
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getQtyBookableAvailable() {
|
||||||
|
let qty = myproduct.value.bookableAvailableQty!
|
||||||
|
return qty
|
||||||
|
}
|
||||||
|
|
||||||
function getQtyWarn() {
|
function getQtyWarn() {
|
||||||
if (myorder.quantity > 0) {
|
if (myorder.quantity > 0) {
|
||||||
return t('ecomm.di_cui_x_in_carrello', { qty: myorder.quantity })
|
return t('ecomm.di_cui_x_in_carrello', { qty: myorder.quantity })
|
||||||
@@ -155,6 +168,13 @@ export default defineComponent({
|
|||||||
return ''
|
return ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getQtyWarnPreOrdered() {
|
||||||
|
if (myorder.quantitypreordered > 0) {
|
||||||
|
return t('ecomm.di_cui_x_in_carrello', { qty: myorder.quantitypreordered })
|
||||||
|
}
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
|
||||||
watch(() => props.code, (newval, oldval) => {
|
watch(() => props.code, (newval, oldval) => {
|
||||||
console.log('change code')
|
console.log('change code')
|
||||||
load()
|
load()
|
||||||
@@ -179,6 +199,7 @@ export default defineComponent({
|
|||||||
const ord = products.getOrderProductInCart(myproduct.value._id)
|
const ord = products.getOrderProductInCart(myproduct.value._id)
|
||||||
if (ord) {
|
if (ord) {
|
||||||
myorder.quantity = ord.quantity
|
myorder.quantity = ord.quantity
|
||||||
|
myorder.quantitypreordered = ord.quantitypreordered
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,21 +216,42 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
function enableSubQty() {
|
function enableSubQty() {
|
||||||
return myorder.quantity ? myorder.quantity > 0 : false
|
let qty = myorder.quantity + myorder.quantitypreordered
|
||||||
|
return qty ? qty > 0 : false
|
||||||
}
|
}
|
||||||
|
|
||||||
function enableAddQty() {
|
function enableAddQty() {
|
||||||
if (site.value.ecomm && site.value.ecomm.enablePreOrders) {
|
if (site.value.ecomm && site.value.ecomm.enablePreOrders) {
|
||||||
return true
|
return getQtyBookableAvailable() > 0 || getQtyAvailable() > 0
|
||||||
} else {
|
} else {
|
||||||
return getQtyAvailable() > 0
|
return getQtyAvailable() > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function visuListDisponibili() {
|
||||||
|
openlistorders.value = true
|
||||||
|
sumval.value = products.getSumQtyOrderProductInOrdersCart(myproduct.value._id)
|
||||||
|
|
||||||
|
listord.value = arrordersCart.value.filter((ordercart: IOrderCart) => ordercart.items!.reduce((accumulator, item) => {
|
||||||
|
return accumulator + item.order.quantity
|
||||||
|
}, 0))
|
||||||
|
}
|
||||||
|
|
||||||
|
function visuListBookable() {
|
||||||
|
openlistorders.value = true
|
||||||
|
sumval.value = products.getSumQtyPreOrderInOrdersCart(myproduct.value._id)
|
||||||
|
|
||||||
|
listord.value = arrordersCart.value.filter((ordercart: IOrderCart) => ordercart.items!.reduce((accumulator, item) => {
|
||||||
|
return accumulator + item.order.quantitypreordered
|
||||||
|
}, 0))
|
||||||
|
}
|
||||||
|
|
||||||
onMounted(load)
|
onMounted(load)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
visuListDisponibili,
|
||||||
|
visuListBookable,
|
||||||
addtoCart,
|
addtoCart,
|
||||||
iconWhishlist,
|
iconWhishlist,
|
||||||
getmycardcl,
|
getmycardcl,
|
||||||
@@ -235,6 +277,10 @@ export default defineComponent({
|
|||||||
endload,
|
endload,
|
||||||
shared_consts,
|
shared_consts,
|
||||||
site,
|
site,
|
||||||
|
getQtyWarnPreOrdered,
|
||||||
|
getQtyBookableAvailable,
|
||||||
|
listord,
|
||||||
|
sumval,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -54,7 +54,9 @@
|
|||||||
myproduct.after_price
|
myproduct.after_price
|
||||||
}}</span>
|
}}</span>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
<q-item-label v-if="myproduct.scontisticas && myproduct.scontisticas.length > 0">
|
<q-item-label
|
||||||
|
v-if="myproduct.scontisticas && myproduct.scontisticas.length > 0"
|
||||||
|
>
|
||||||
<div
|
<div
|
||||||
class="prod_sconti"
|
class="prod_sconti"
|
||||||
v-for="(sconti, index) of myproduct.scontisticas"
|
v-for="(sconti, index) of myproduct.scontisticas"
|
||||||
@@ -63,7 +65,6 @@
|
|||||||
{{ sconti.description }}
|
{{ sconti.description }}
|
||||||
</div>
|
</div>
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
|
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
@@ -108,40 +109,29 @@
|
|||||||
<q-list>
|
<q-list>
|
||||||
<q-item
|
<q-item
|
||||||
:clickable="tools.isManager()"
|
:clickable="tools.isManager()"
|
||||||
@click="tools.isManager() ? (openlistorders = true) : null"
|
@click="tools.isManager() ? (visuListDisponibili()) : null"
|
||||||
>
|
>
|
||||||
<q-item-section avatar>
|
<q-item-section avatar>
|
||||||
<q-icon
|
<q-icon
|
||||||
:color="getQtyAvailable() >= 0 ? 'green' : 'blue'"
|
color="green"
|
||||||
:name="getQtyAvailable() >= 0 ? 'fas fa-store' : 'fas fa-edit'"
|
name="fas fa-store"
|
||||||
/>
|
/>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
|
|
||||||
<q-item-section>
|
<q-item-section>
|
||||||
<q-item-label>
|
<q-item-label>
|
||||||
<span v-if="getQtyAvailable() < 0">
|
|
||||||
{{ t('ecomm.preorders') }}
|
|
||||||
</span>
|
|
||||||
<span v-else>
|
|
||||||
{{ t('ecomm.available') }}
|
{{ t('ecomm.available') }}
|
||||||
</span>
|
|
||||||
</q-item-label>
|
</q-item-label>
|
||||||
<q-item-label>
|
<q-item-label>
|
||||||
<span class="prod_disp">
|
<span class="prod_disp">
|
||||||
<span v-if="getQtyAvailable() < 0">
|
|
||||||
{{ -getQtyAvailable() }}
|
|
||||||
</span>
|
|
||||||
<span v-else>
|
|
||||||
{{ getQtyAvailable() }}
|
{{ getQtyAvailable() }}
|
||||||
</span>
|
</span>
|
||||||
</span>
|
|
||||||
<div class="prod_qtywarn">
|
<div class="prod_qtywarn">
|
||||||
{{ getQtyWarn() }}
|
{{ getQtyWarn() }}
|
||||||
|
|
||||||
<div
|
<div
|
||||||
v-if="
|
v-if="
|
||||||
tools.isManager() &&
|
tools.isManager() && !!myproduct.QuantitaOrdinateInAttesa
|
||||||
!!myproduct.QuantitaOrdinateInAttesa
|
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
{{
|
{{
|
||||||
@@ -155,6 +145,43 @@
|
|||||||
<q-item-label> </q-item-label>
|
<q-item-label> </q-item-label>
|
||||||
</q-item-section>
|
</q-item-section>
|
||||||
</q-item>
|
</q-item>
|
||||||
|
<q-item
|
||||||
|
v-if="getQtyBookableAvailable() > 0 || (myproduct.bookableQty > 0)"
|
||||||
|
:clickable="tools.isManager()"
|
||||||
|
@click="tools.isManager() ? (visuListBookable()) : null"
|
||||||
|
>
|
||||||
|
<q-item-section avatar>
|
||||||
|
<q-icon color="blue" name="fas fa-edit" />
|
||||||
|
</q-item-section>
|
||||||
|
|
||||||
|
<q-item-section>
|
||||||
|
<q-item-label>
|
||||||
|
{{ t('ecomm.preorders') }}
|
||||||
|
</q-item-label>
|
||||||
|
<q-item-label>
|
||||||
|
<span class="prod_preorder">
|
||||||
|
{{ getQtyBookableAvailable() }}
|
||||||
|
</span>
|
||||||
|
<div class="prod_qtywarn">
|
||||||
|
<span v-if="getQtyWarnPreOrdered()">{{
|
||||||
|
getQtyWarnPreOrdered()
|
||||||
|
}}</span>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="
|
||||||
|
tools.isManager() && !!myproduct.QuantitaPrenotateInAttesa
|
||||||
|
"
|
||||||
|
>
|
||||||
|
{{
|
||||||
|
$t('ecomm.qta_prenotate_in_attesa', {
|
||||||
|
qty: myproduct.QuantitaPrenotateInAttesa,
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</q-item-label>
|
||||||
|
</q-item-section>
|
||||||
|
</q-item>
|
||||||
</q-list>
|
</q-list>
|
||||||
<div class="row q-mb-sm no-wrap items-center centeritems">
|
<div class="row q-mb-sm no-wrap items-center centeritems">
|
||||||
<q-btn
|
<q-btn
|
||||||
@@ -178,6 +205,12 @@
|
|||||||
<div class="self-center no-outline" tabindex="0">
|
<div class="self-center no-outline" tabindex="0">
|
||||||
{{ myorder.quantity }}
|
{{ myorder.quantity }}
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="myorder.quantitypreordered"
|
||||||
|
class="self-center no-outline"
|
||||||
|
tabindex="0"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</q-field>
|
</q-field>
|
||||||
|
|
||||||
@@ -224,7 +257,7 @@
|
|||||||
|
|
||||||
<q-card-actions vertical align="center">
|
<q-card-actions vertical align="center">
|
||||||
<q-btn
|
<q-btn
|
||||||
v-if="myorder.quantity > 0"
|
v-if="myorder.quantity + myorder.quantitypreordered > 0"
|
||||||
rounded
|
rounded
|
||||||
icon="fas fa-shopping-cart"
|
icon="fas fa-shopping-cart"
|
||||||
color="primary"
|
color="primary"
|
||||||
@@ -264,7 +297,7 @@
|
|||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr
|
<tr
|
||||||
v-for="(ordcart, index) of arrordersCart"
|
v-for="(ordcart, index) of listord"
|
||||||
:key="index"
|
:key="index"
|
||||||
class="listaev listaev__table"
|
class="listaev listaev__table"
|
||||||
>
|
>
|
||||||
@@ -285,9 +318,22 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<div v-for="(singleord, index) in ordcart.items" :key="index">
|
<div v-for="(singleord, index) in ordcart.items" :key="index">
|
||||||
<span v-if="singleord.order.idProduct === myproduct._id">{{
|
<span
|
||||||
singleord.order.quantity
|
v-if="
|
||||||
}}</span>
|
singleord.order.idProduct === myproduct._id &&
|
||||||
|
singleord.order.quantity > 0
|
||||||
|
"
|
||||||
|
>
|
||||||
|
{{ singleord.order.quantity }}</span
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
v-if="
|
||||||
|
singleord.order.idProduct === myproduct._id &&
|
||||||
|
singleord.order.quantitypreordered > 0
|
||||||
|
"
|
||||||
|
>
|
||||||
|
{{ singleord.order.quantitypreordered }}</span
|
||||||
|
>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
@@ -300,7 +346,7 @@
|
|||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
Totali:
|
Totali:
|
||||||
<span class="totali">{{
|
<span class="totali">{{
|
||||||
products.getSumQtyOrderProductInOrdersCart(myproduct._id)
|
sumval
|
||||||
}}</span>
|
}}</span>
|
||||||
</td>
|
</td>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
|
|||||||
@@ -40,8 +40,9 @@ export default defineComponent({
|
|||||||
}
|
}
|
||||||
|
|
||||||
function addsubqty(addqty: boolean, subqty: boolean) {
|
function addsubqty(addqty: boolean, subqty: boolean) {
|
||||||
|
if (products.isQtyAvailableByOrder(props.order)) {
|
||||||
if (addqty) {
|
if (addqty) {
|
||||||
if (props.order.quantity >= 10)
|
if (props.order.quantity >= 20)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,6 +50,20 @@ export default defineComponent({
|
|||||||
if (props.order.quantity === 0)
|
if (props.order.quantity === 0)
|
||||||
return false
|
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({
|
products.addSubQtyToItem({
|
||||||
addqty,
|
addqty,
|
||||||
@@ -56,13 +71,14 @@ export default defineComponent({
|
|||||||
order: props.order,
|
order: props.order,
|
||||||
}).then((res: any) => {
|
}).then((res: any) => {
|
||||||
if (res.risult) {
|
if (res.risult) {
|
||||||
order.value.quantity = res.qty
|
order.value.quantity = res.myord.quantity
|
||||||
|
order.value.quantitypreordered = res.myord.quantitypreordered
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
function isApplicatoSconto() {
|
function isApplicatoSconto() {
|
||||||
const totalipotetico = order.value.price * order.value.quantity
|
const totalipotetico = order.value.price * (order.value.quantity + order.value.quantitypreordered)
|
||||||
if (totalipotetico > order.value.TotalPriceProduct) {
|
if (totalipotetico > order.value.TotalPriceProduct) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,45 +1,89 @@
|
|||||||
<template>
|
<template>
|
||||||
<div v-if="order && order.product" class="q-pa-xs q-gutter-xs">
|
<div v-if="order && order.product" class="q-pa-xs q-gutter-xs">
|
||||||
|
|
||||||
<div v-if="order.product" class="row items-center justify-evenly no-wrap">
|
<div v-if="order.product" class="row items-center justify-evenly no-wrap">
|
||||||
<div class="col-2 text-h6 ellipsis">
|
<div class="col-2 text-h6 ellipsis">
|
||||||
<q-img v-if="order.product && order.product.img" :src="`` + order.product.img" :alt="order.product.name"
|
<q-img
|
||||||
:class="myimgclass">
|
v-if="order.product && order.product.img"
|
||||||
|
:src="`` + order.product.img"
|
||||||
|
:alt="order.product.name"
|
||||||
|
:class="myimgclass"
|
||||||
|
>
|
||||||
</q-img>
|
</q-img>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-4 q-ml-xs">
|
<div class="col-4 q-ml-xs">
|
||||||
{{ order.product.name }}
|
{{ order.product.name }}
|
||||||
<div v-if="showall">
|
<div v-if="showall">
|
||||||
<br><span class="text-grey">{{ order.product.description }}</span>
|
<br /><span class="text-grey">{{ order.product.description }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-3">
|
<div class="col-3">
|
||||||
<div class="row q-mb-xs no-wrap items-center centeritems">
|
<div class="row q-mb-xs no-wrap items-center centeritems">
|
||||||
<q-btn v-if="showall && !nomodif" round size="xs" text-color="grey" icon="fas fa-minus"
|
<q-btn
|
||||||
@click="addsubqty(false, true)"></q-btn>
|
v-if="showall && !nomodif"
|
||||||
<!--<q-field outlined dense style="width: 25px; height: 20px; " class="q-mx-xs text-subtitle4">
|
round
|
||||||
<template v-slot:control>
|
size="xs"
|
||||||
<div class="self-center no-outline" tabindex="0" >{{ order.quantity }}</div>
|
text-color="grey"
|
||||||
</template>
|
icon="fas fa-minus"
|
||||||
</q-field>-->
|
@click="addsubqty(false, true)"
|
||||||
<div :class="`q-mx-sm text-blue-14`">{{ order.quantity }}</div>
|
></q-btn>
|
||||||
<q-btn v-if="showall && !nomodif" round size="xs" text-color="grey" icon="fas fa-plus"
|
<div v-if="order.quantity > 0" :class="`q-mx-sm text-blue-14`">
|
||||||
@click="addsubqty(true, false)"></q-btn>
|
{{ order.quantity }}
|
||||||
|
</div>
|
||||||
|
<div v-if="order.quantity > 0 && order.quantitypreordered > 0">
|
||||||
|
+ {{ $t('ecomm.preord') }}:
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
v-if="order.quantitypreordered > 0"
|
||||||
|
:class="`q-mx-sm text-blue-14`"
|
||||||
|
>
|
||||||
|
{{ order.quantitypreordered }}
|
||||||
|
</div>
|
||||||
|
<q-btn
|
||||||
|
v-if="showall && !nomodif"
|
||||||
|
round
|
||||||
|
size="xs"
|
||||||
|
text-color="grey"
|
||||||
|
icon="fas fa-plus"
|
||||||
|
@click="addsubqty(true, false)"
|
||||||
|
></q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-2 no-wrap text-subtitle3_short q-mr-sm">
|
<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 :class="isApplicatoSconto() ? 'ordine_scontato_nuovo' : ''"
|
||||||
|
>€ {{
|
||||||
|
order.TotalPriceProduct ? order.TotalPriceProduct.toFixed(2) : 0
|
||||||
|
}}</span
|
||||||
|
>
|
||||||
<span v-if="isApplicatoSconto()">
|
<span v-if="isApplicatoSconto()">
|
||||||
<span class="ordine_scontato">(<span class="barrato">€ {{(order.price * order.quantity).toFixed(2) }}</span>)</span>
|
<span class="ordine_scontato"
|
||||||
|
>(<span class="barrato"
|
||||||
|
>€
|
||||||
|
{{
|
||||||
|
(
|
||||||
|
order.price * order.quantity +
|
||||||
|
order.price * order.quantitypreordered
|
||||||
|
).toFixed(2)
|
||||||
|
}}</span
|
||||||
|
>)</span
|
||||||
|
>
|
||||||
</span>
|
</span>
|
||||||
<span v-if="isApplicatoSconto()" class="ordine_scritta_sconto">{{ $t('ecomm.sconto_applicato', {risparmio: getRisparmio()}) }}</span>
|
<span v-if="isApplicatoSconto()" class="ordine_scritta_sconto">{{
|
||||||
|
$t('ecomm.sconto_applicato', { risparmio: getRisparmio() })
|
||||||
|
}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-1">
|
<div class="col-1">
|
||||||
<q-btn v-if="!nomodif" icon="fas fa-times" color="negative" round size="xs" @click="removeFromCard">
|
<q-btn
|
||||||
|
v-if="!nomodif"
|
||||||
|
icon="fas fa-times"
|
||||||
|
color="negative"
|
||||||
|
round
|
||||||
|
size="xs"
|
||||||
|
@click="removeFromCard"
|
||||||
|
>
|
||||||
</q-btn>
|
</q-btn>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ const msg_website_it = {
|
|||||||
categories: 'Categorie',
|
categories: 'Categorie',
|
||||||
storehouses: 'Magazzino',
|
storehouses: 'Magazzino',
|
||||||
providers: 'Fornitori',
|
providers: 'Fornitori',
|
||||||
|
gasordine: 'Gas Ordine',
|
||||||
scontisticas: 'Scontistica',
|
scontisticas: 'Scontistica',
|
||||||
departments: 'Uffici',
|
departments: 'Uffici',
|
||||||
orders: 'Ordini Ricevuti',
|
orders: 'Ordini Ricevuti',
|
||||||
@@ -125,6 +126,7 @@ const msg_website_it = {
|
|||||||
only_residenti: 'Solo Residenti',
|
only_residenti: 'Solo Residenti',
|
||||||
only_consiglio: 'Solo Consiglieri',
|
only_consiglio: 'Solo Consiglieri',
|
||||||
color: 'Colore',
|
color: 'Colore',
|
||||||
|
gasordini: 'Gas Ordini',
|
||||||
},
|
},
|
||||||
msg: {
|
msg: {
|
||||||
myAppName: 'Più che Buono',
|
myAppName: 'Più che Buono',
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ export default function () {
|
|||||||
const arrcart = products.cart
|
const arrcart = products.cart
|
||||||
if (!!arrcart) {
|
if (!!arrcart) {
|
||||||
if (!!arrcart.items) {
|
if (!!arrcart.items) {
|
||||||
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
|
return total
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { IAction } from '@src/model/Projects'
|
import { IAction } from '@src/model/Projects'
|
||||||
import { IFriends, IGroupShort, IMyGroup, IPaymentType } from '@src/model/UserStore'
|
import { IFriends, IGroupShort, IMyGroup, IPaymentType } from '@src/model/UserStore'
|
||||||
import {
|
import {
|
||||||
IDepartment, IProducer, IShareWithUs, IStorehouse, IProvider, IScontistica, ICategory
|
IDepartment, IProducer, IShareWithUs, IStorehouse, IProvider, IScontistica, ICategory, IGasordine
|
||||||
} from '@src/model/Products'
|
} from '@src/model/Products'
|
||||||
|
|
||||||
import { IUserFields, IUserProfile } from '@src/model/UserStore'
|
import { IUserFields, IUserProfile } from '@src/model/UserStore'
|
||||||
@@ -442,6 +442,7 @@ export interface IGlobalState {
|
|||||||
calzoom: ICalZoom[],
|
calzoom: ICalZoom[],
|
||||||
producers: IProducer[],
|
producers: IProducer[],
|
||||||
providers: IProvider[],
|
providers: IProvider[],
|
||||||
|
gasordines: IGasordine[],
|
||||||
scontisticas: IScontistica[],
|
scontisticas: IScontistica[],
|
||||||
storehouses: IStorehouse[],
|
storehouses: IStorehouse[],
|
||||||
departments: IDepartment[],
|
departments: IDepartment[],
|
||||||
|
|||||||
@@ -22,8 +22,11 @@ export interface IProduct {
|
|||||||
color?: string,
|
color?: string,
|
||||||
size?: string,
|
size?: string,
|
||||||
quantityAvailable?: number,
|
quantityAvailable?: number,
|
||||||
|
bookableAvailableQty?: number,
|
||||||
QuantitaOrdinateInAttesa?: number,
|
QuantitaOrdinateInAttesa?: number,
|
||||||
stockQty?: number,
|
QuantitaPrenotateInAttesa?: number,
|
||||||
|
stockQty: number,
|
||||||
|
bookableQty: number,
|
||||||
canBeShipped?: boolean,
|
canBeShipped?: boolean,
|
||||||
canBeBuyOnline?: boolean,
|
canBeBuyOnline?: boolean,
|
||||||
weight?: number,
|
weight?: number,
|
||||||
@@ -46,6 +49,7 @@ export interface IOrder {
|
|||||||
idProduct?: string
|
idProduct?: string
|
||||||
idProducer?: string
|
idProducer?: string
|
||||||
idProvider?: string
|
idProvider?: string
|
||||||
|
idGasordine?: string
|
||||||
idStorehouse?: string
|
idStorehouse?: string
|
||||||
idScontisticas?: string[]
|
idScontisticas?: string[]
|
||||||
price: number
|
price: number
|
||||||
@@ -54,6 +58,7 @@ export interface IOrder {
|
|||||||
color?: string
|
color?: string
|
||||||
size?: string
|
size?: string
|
||||||
quantity: number
|
quantity: number
|
||||||
|
quantitypreordered: number
|
||||||
weight?: number
|
weight?: number
|
||||||
stars?: number
|
stars?: number
|
||||||
product?: IProduct
|
product?: IProduct
|
||||||
@@ -61,6 +66,7 @@ export interface IOrder {
|
|||||||
storehouse?: IStorehouse
|
storehouse?: IStorehouse
|
||||||
scontisticas?: IScontistica[]
|
scontisticas?: IScontistica[]
|
||||||
provider?: IProvider
|
provider?: IProvider
|
||||||
|
gasordine?: IGasordine
|
||||||
date_created?: Date
|
date_created?: Date
|
||||||
date_checkout?: Date
|
date_checkout?: Date
|
||||||
date_payment?: Date
|
date_payment?: Date
|
||||||
@@ -126,6 +132,19 @@ export interface IProvider {
|
|||||||
website?: string,
|
website?: string,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IGasordine {
|
||||||
|
_id?: any
|
||||||
|
idapp?: string
|
||||||
|
active: boolean
|
||||||
|
name?: string,
|
||||||
|
description?: string,
|
||||||
|
referent?: string,
|
||||||
|
city?: string,
|
||||||
|
img?: string,
|
||||||
|
dataora_chiusura?: Date,
|
||||||
|
dataora_ritiro?: Date,
|
||||||
|
}
|
||||||
|
|
||||||
export interface IScontistica {
|
export interface IScontistica {
|
||||||
_id?: any
|
_id?: any
|
||||||
idapp?: string
|
idapp?: string
|
||||||
|
|||||||
0
src/rootgen/admin/gasordini/gasordini.scss
Executable file
0
src/rootgen/admin/gasordini/gasordini.scss
Executable file
34
src/rootgen/admin/gasordini/gasordini.ts
Executable file
34
src/rootgen/admin/gasordini/gasordini.ts
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
|
||||||
|
import { colTableGasordine } from '@src/store/Modules/fieldsTable'
|
||||||
|
|
||||||
|
import { CImgText } from '../../../components/CImgText/index'
|
||||||
|
|
||||||
|
import { defineComponent } from 'vue'
|
||||||
|
import { CCard } from '../../../components/CCard'
|
||||||
|
import { CMyPage } from '../../../components/CMyPage'
|
||||||
|
import { CTitleBanner } from '../../../components/CTitleBanner'
|
||||||
|
import { CGridTableRec } from '../../../components/CGridTableRec'
|
||||||
|
|
||||||
|
import MixinMetaTags from '../../../mixins/mixin-metatags'
|
||||||
|
|
||||||
|
export default defineComponent({
|
||||||
|
name: 'GasOrdini',
|
||||||
|
components: { CImgText, CCard, CMyPage, CTitleBanner, CGridTableRec },
|
||||||
|
setup() {
|
||||||
|
const pagination = {
|
||||||
|
sortBy: 'name',
|
||||||
|
descending: false,
|
||||||
|
page: 2,
|
||||||
|
rowsPerPage: 5
|
||||||
|
// rowsNumber: xx if getting data from a server
|
||||||
|
}
|
||||||
|
|
||||||
|
const { setmeta } = MixinMetaTags()
|
||||||
|
|
||||||
|
return {
|
||||||
|
colTableGasordine,
|
||||||
|
setmeta,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
31
src/rootgen/admin/gasordini/gasordini.vue
Executable file
31
src/rootgen/admin/gasordini/gasordini.vue
Executable file
@@ -0,0 +1,31 @@
|
|||||||
|
<template>
|
||||||
|
<CMyPage title="Gas Ordini" imgbackground="images/fornitori.jpg" sizes="max-height: 120px">
|
||||||
|
<span>{{
|
||||||
|
setmeta({
|
||||||
|
title: 'Gas Ordini',
|
||||||
|
description: '',
|
||||||
|
keywords: '',
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div class="q-ma-sm q-gutter-sm q-pa-xs">
|
||||||
|
<CTitleBanner title="Gas Ordini"></CTitleBanner>
|
||||||
|
<CGridTableRec
|
||||||
|
prop_mytable="gasordines"
|
||||||
|
prop_mytitle="Lista Gas Ordini"
|
||||||
|
:prop_mycolumns="colTableGasordine"
|
||||||
|
prop_colkey="name"
|
||||||
|
nodataLabel="Nessun Gas Ordine"
|
||||||
|
noresultLabel="Il filtro selezionato non ha trovato nessun risultato">
|
||||||
|
|
||||||
|
</CGridTableRec>
|
||||||
|
</div>
|
||||||
|
</CMyPage>
|
||||||
|
</template>
|
||||||
|
<script lang="ts" src="./gasordini.ts">
|
||||||
|
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import 'gasordini.scss';
|
||||||
|
</style>
|
||||||
@@ -125,6 +125,20 @@ function getRoutesEcomm(site: ISites) {
|
|||||||
onlyManager: true,
|
onlyManager: true,
|
||||||
onlyEditor: true
|
onlyEditor: true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
active: true,
|
||||||
|
order: 30,
|
||||||
|
path: '/admin/ecommerce/gasordini',
|
||||||
|
materialIcon: 'fas fa-file-alt',
|
||||||
|
name: 'pages.gasordini',
|
||||||
|
component: () => import('@/rootgen/admin/gasordini/gasordini.vue'),
|
||||||
|
inmenu: true,
|
||||||
|
submenu: true,
|
||||||
|
level_parent: 0,
|
||||||
|
level_child: 0.5,
|
||||||
|
onlyManager: true,
|
||||||
|
onlyEditor: true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
active: true,
|
active: true,
|
||||||
order: 30,
|
order: 30,
|
||||||
|
|||||||
@@ -62,6 +62,8 @@ const msg_it = {
|
|||||||
quantity: 'Quantità',
|
quantity: 'Quantità',
|
||||||
quantityAvailable: 'Disponibili',
|
quantityAvailable: 'Disponibili',
|
||||||
stockQty: 'In Magazzino',
|
stockQty: 'In Magazzino',
|
||||||
|
bookableQty: 'Prenotabili',
|
||||||
|
bookableAvailableQty: 'Disponib. Prenotabili',
|
||||||
weight: 'Peso',
|
weight: 'Peso',
|
||||||
unit: 'Unità di Misura',
|
unit: 'Unità di Misura',
|
||||||
stars: 'Voto',
|
stars: 'Voto',
|
||||||
@@ -1649,7 +1651,8 @@ const msg_it = {
|
|||||||
ord_not_confirmed: 'E\' avvenuto un errore. Ordine non Confermato. Ricaricare la pagina e riprovare.',
|
ord_not_confirmed: 'E\' avvenuto un errore. Ordine non Confermato. Ricaricare la pagina e riprovare.',
|
||||||
btn_cassa: 'Vai alla Cassa',
|
btn_cassa: 'Vai alla Cassa',
|
||||||
available: 'Disponibili',
|
available: 'Disponibili',
|
||||||
preorders: 'In Prenotazione',
|
preorders: 'Pre-Ordinabili',
|
||||||
|
preord: 'Pre-Ordinate',
|
||||||
di_cui_x_in_carrello: '(nel tuo carrello: {qty})',
|
di_cui_x_in_carrello: '(nel tuo carrello: {qty})',
|
||||||
evaso: 'Ordine Evaso',
|
evaso: 'Ordine Evaso',
|
||||||
consegnato: 'Ordine Consegnato',
|
consegnato: 'Ordine Consegnato',
|
||||||
@@ -1668,6 +1671,7 @@ const msg_it = {
|
|||||||
codice: 'Codice',
|
codice: 'Codice',
|
||||||
code_o_text_search: 'Inserisci il codice o il testo',
|
code_o_text_search: 'Inserisci il codice o il testo',
|
||||||
code_add_to_cart: 'Aggiungi un codice al carrello',
|
code_add_to_cart: 'Aggiungi un codice al carrello',
|
||||||
|
qta_prenotate_in_attesa: '(Preordinate In attesa {qty})',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -442,6 +442,18 @@ export const colTableProviders = [
|
|||||||
AddCol(DeleteRec),
|
AddCol(DeleteRec),
|
||||||
AddCol(DuplicateRec),
|
AddCol(DuplicateRec),
|
||||||
]
|
]
|
||||||
|
export const colTableGasordine = [
|
||||||
|
AddCol({ name: 'active', label_trans: 'sites.active', fieldtype: costanti.FieldType.boolean }),
|
||||||
|
AddCol({ name: 'name', label_trans: 'store.name' }),
|
||||||
|
AddCol({ name: 'description', label_trans: 'store.description' }),
|
||||||
|
AddCol({ name: 'referente', label_trans: 'store.referent' }),
|
||||||
|
AddCol({ name: 'city', label_trans: 'store.city' }),
|
||||||
|
AddCol({ name: 'img', label_trans: 'store.img' }),
|
||||||
|
AddCol({ name: 'dataora_chiusura', label_trans: 'gas.dataora_chiusura', fieldtype: costanti.FieldType.date }),
|
||||||
|
AddCol({ name: 'dataora_ritiro', label_trans: 'gas.dataora_ritiro', fieldtype: costanti.FieldType.date }),
|
||||||
|
AddCol(DeleteRec),
|
||||||
|
AddCol(DuplicateRec),
|
||||||
|
]
|
||||||
export const colTableScontistica = [
|
export const colTableScontistica = [
|
||||||
AddCol({ name: 'code', label_trans: 'scontistica.code' }),
|
AddCol({ name: 'code', label_trans: 'scontistica.code' }),
|
||||||
AddCol({ name: 'description', label_trans: 'scontistica.description' }),
|
AddCol({ name: 'description', label_trans: 'scontistica.description' }),
|
||||||
@@ -1999,11 +2011,21 @@ export const colTableProducts = [
|
|||||||
label_trans: 'products.quantityAvailable',
|
label_trans: 'products.quantityAvailable',
|
||||||
fieldtype: costanti.FieldType.number
|
fieldtype: costanti.FieldType.number
|
||||||
}),
|
}),
|
||||||
|
AddCol({
|
||||||
|
name: 'bookableAvailableQty',
|
||||||
|
label_trans: 'products.bookableAvailableQty',
|
||||||
|
fieldtype: costanti.FieldType.number
|
||||||
|
}),
|
||||||
AddCol({
|
AddCol({
|
||||||
name: 'stockQty',
|
name: 'stockQty',
|
||||||
label_trans: 'products.stockQty',
|
label_trans: 'products.stockQty',
|
||||||
fieldtype: costanti.FieldType.number
|
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: 'canBeShipped', label_trans: 'products.canBeShipped', fieldtype: costanti.FieldType.boolean }),
|
||||||
AddCol({ name: 'canBeBuyOnline', label_trans: 'products.canBeBuyOnline', 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 }),
|
AddCol({ name: 'weight', label_trans: 'products.weight', fieldtype: costanti.FieldType.number }),
|
||||||
@@ -3563,6 +3585,13 @@ export const fieldsTable = {
|
|||||||
colkey: '_id',
|
colkey: '_id',
|
||||||
collabel: 'name',
|
collabel: 'name',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
value: 'gasordines',
|
||||||
|
label: 'Gas Ordini',
|
||||||
|
columns: colTableGasordine,
|
||||||
|
colkey: '_id',
|
||||||
|
collabel: 'name',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
value: 'scontisticas',
|
value: 'scontisticas',
|
||||||
label: 'Scontistica',
|
label: 'Scontistica',
|
||||||
|
|||||||
@@ -8270,6 +8270,7 @@ export const tools = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// FINE !
|
// FINE !
|
||||||
|
|
||||||
// getLocale() {
|
// getLocale() {
|
||||||
|
|||||||
@@ -30,6 +30,17 @@ export const useProducts = defineStore('Products', {
|
|||||||
const indelem = state.products.findIndex((prod: IProduct) => prod._id === res.data.product._id)
|
const indelem = state.products.findIndex((prod: IProduct) => prod._id === res.data.product._id)
|
||||||
if (indelem >= 0) {
|
if (indelem >= 0) {
|
||||||
state.products[indelem] = { ...res.data.product }
|
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) {
|
if (res && res.data.orders) {
|
||||||
@@ -44,12 +55,15 @@ export const useProducts = defineStore('Products', {
|
|||||||
|
|
||||||
getProductById: (state: IProductsState) => (id: string): IProduct => {
|
getProductById: (state: IProductsState) => (id: string): IProduct => {
|
||||||
const prod = state.products.find((prod: IProduct) => prod._id === id)
|
const prod = state.products.find((prod: IProduct) => prod._id === id)
|
||||||
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 }
|
||||||
},
|
},
|
||||||
|
|
||||||
getProductByCode: (state: IProductsState) => (code: string): IProduct => {
|
getProductByCode: (state: IProductsState) => (code: string): IProduct => {
|
||||||
const prod = state.products.find((prod: IProduct) => prod.code === code)
|
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 => {
|
getCart: (state: IProductsState) => (): ICart => {
|
||||||
@@ -109,6 +123,28 @@ export const useProducts = defineStore('Products', {
|
|||||||
return null
|
return null
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getSumQtyPreOrderInOrdersCart: (state: IProductsState) => (idproduct: string): number => {
|
||||||
|
let totalQuantity = 0;
|
||||||
|
|
||||||
|
if (state.orders) {
|
||||||
|
const orderscart = state.orders
|
||||||
|
if (orderscart) {
|
||||||
|
for (const myord of orderscart) {
|
||||||
|
if (myord.items) {
|
||||||
|
for (const item of myord.items) {
|
||||||
|
if (item.order) {
|
||||||
|
if ((item.order.idProduct === idproduct) && (item.order.status! < shared_consts.OrderStatus.CHECKOUT_SENT)) {
|
||||||
|
totalQuantity += (item.order.quantitypreordered) || 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return totalQuantity
|
||||||
|
},
|
||||||
|
|
||||||
getSumQtyOrderProductInOrdersCart: (state: IProductsState) => (idproduct: string): number => {
|
getSumQtyOrderProductInOrdersCart: (state: IProductsState) => (idproduct: string): number => {
|
||||||
let totalQuantity = 0;
|
let totalQuantity = 0;
|
||||||
|
|
||||||
@@ -120,7 +156,7 @@ export const useProducts = defineStore('Products', {
|
|||||||
for (const item of myord.items) {
|
for (const item of myord.items) {
|
||||||
if (item.order) {
|
if (item.order) {
|
||||||
if ((item.order.idProduct === idproduct) && (item.order.status! < shared_consts.OrderStatus.CHECKOUT_SENT)) {
|
if ((item.order.idProduct === idproduct) && (item.order.status! < shared_consts.OrderStatus.CHECKOUT_SENT)) {
|
||||||
totalQuantity += item.order.quantity || 0;
|
totalQuantity += (item.order.quantity) || 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -169,17 +205,6 @@ export const useProducts = defineStore('Products', {
|
|||||||
return []
|
return []
|
||||||
},
|
},
|
||||||
|
|
||||||
updateQuantityAvailable: (state: IProductsState) => (id: string): any => {
|
|
||||||
|
|
||||||
const indelem = state.products.findIndex((prod: IProduct) => prod._id === id)
|
|
||||||
if (indelem >= 0) {
|
|
||||||
state.products[indelem].quantityAvailable = state.products[indelem].stockQty
|
|
||||||
if (state.products[indelem].QuantitaOrdinateInAttesa! > 0) {
|
|
||||||
state.products[indelem].quantityAvailable! -= state.products[indelem].QuantitaOrdinateInAttesa!
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
getRecordEmpty: (state: IProductsState) => (): IProduct => {
|
getRecordEmpty: (state: IProductsState) => (): IProduct => {
|
||||||
|
|
||||||
const tomorrow = tools.getDateNow()
|
const tomorrow = tools.getDateNow()
|
||||||
@@ -205,9 +230,12 @@ export const useProducts = defineStore('Products', {
|
|||||||
color: '',
|
color: '',
|
||||||
size: '',
|
size: '',
|
||||||
quantityAvailable: 0,
|
quantityAvailable: 0,
|
||||||
|
bookableAvailableQty: 0,
|
||||||
stockQty: 0,
|
stockQty: 0,
|
||||||
|
bookableQty: 0,
|
||||||
canBeShipped: false,
|
canBeShipped: false,
|
||||||
QuantitaOrdinateInAttesa: 0,
|
QuantitaOrdinateInAttesa: 0,
|
||||||
|
QuantitaPrenotateInAttesa: 0,
|
||||||
canBeBuyOnline: false,
|
canBeBuyOnline: false,
|
||||||
weight: 0,
|
weight: 0,
|
||||||
unit: 0,
|
unit: 0,
|
||||||
@@ -241,6 +269,7 @@ export const useProducts = defineStore('Products', {
|
|||||||
weight: product.weight,
|
weight: product.weight,
|
||||||
|
|
||||||
quantity: order.quantity,
|
quantity: order.quantity,
|
||||||
|
quantitypreordered: order.quantitypreordered,
|
||||||
idStorehouse: order.idStorehouse,
|
idStorehouse: order.idStorehouse,
|
||||||
idScontisticas: product.idScontisticas,
|
idScontisticas: product.idScontisticas,
|
||||||
}
|
}
|
||||||
@@ -411,12 +440,13 @@ export const useProducts = defineStore('Products', {
|
|||||||
const ordcart = this.getOrderProductInCart(product._id)
|
const ordcart = this.getOrderProductInCart(product._id)
|
||||||
if (ordcart) {
|
if (ordcart) {
|
||||||
|
|
||||||
if (!addqty && ordcart.quantity === 1) {
|
if (!addqty && ((ordcart.quantity + ordcart.quantitypreordered) === 1)) {
|
||||||
// sto per rimuovere l'ultimo pezzo, quindi cancello direttamente
|
// sto per rimuovere l'ultimo pezzo, quindi cancello direttamente
|
||||||
const risrem = await this.removeFromCart({ order: ordcart })
|
const risrem = await this.removeFromCart({ order: ordcart })
|
||||||
|
|
||||||
if (risrem) {
|
if (risrem) {
|
||||||
order.quantity = 0
|
order.quantity = 0
|
||||||
|
order.quantitypreordered = 0
|
||||||
return true
|
return true
|
||||||
} else {
|
} else {
|
||||||
return false
|
return false
|
||||||
@@ -429,14 +459,22 @@ export const useProducts = defineStore('Products', {
|
|||||||
order: ordcart,
|
order: ordcart,
|
||||||
}).then((res: any) => {
|
}).then((res: any) => {
|
||||||
if (res && res.risult) {
|
if (res && res.risult) {
|
||||||
order.quantity = res.qty
|
order.quantity = res.myord.quantity
|
||||||
|
order.quantitypreordered = res.myord.quantitypreordered
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (order.quantity === 0)
|
if (this.isQtyAvailableByProduct(product)) {
|
||||||
order.quantity = 1
|
order.quantity = 1
|
||||||
|
order.quantitypreordered = 0
|
||||||
|
} else {
|
||||||
|
if (this.isInPreorderByProduct(product)) {
|
||||||
|
order.quantitypreordered = 1
|
||||||
|
order.quantity = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!order.idStorehouse) {
|
if (!order.idStorehouse) {
|
||||||
if (product.storehouses.length === 1) {
|
if (product.storehouses.length === 1) {
|
||||||
@@ -467,7 +505,7 @@ export const useProducts = defineStore('Products', {
|
|||||||
}
|
}
|
||||||
this.updateDataProduct(res)
|
this.updateDataProduct(res)
|
||||||
|
|
||||||
return { risult: !!res, qty: order.quantity }
|
return { risult: !!res, myord: res.data.myord }
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.log('error addToCart', error)
|
console.log('error addToCart', error)
|
||||||
@@ -496,7 +534,7 @@ export const useProducts = defineStore('Products', {
|
|||||||
.then((res) => {
|
.then((res) => {
|
||||||
this.updateDataProduct(res)
|
this.updateDataProduct(res)
|
||||||
|
|
||||||
return { risult: !!res, qty: res.data.qty }
|
return { risult: !!res, myord: res.data.myord }
|
||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
console.log('error addSubQtyToItem', error)
|
console.log('error addSubQtyToItem', error)
|
||||||
@@ -598,34 +636,86 @@ export const useProducts = defineStore('Products', {
|
|||||||
async addtoCartBase({ $q, t, code, order, addqty }: { $q: any, t: any, code: string, order: IOrder, addqty: boolean }) {
|
async addtoCartBase({ $q, t, code, order, addqty }: { $q: any, t: any, code: string, order: IOrder, addqty: boolean }) {
|
||||||
let product = this.getProductByCode(code)
|
let product = this.getProductByCode(code)
|
||||||
|
|
||||||
return this.addToCart({ product, order, addqty }).then((ris) => {
|
return await this.addToCart({ product, order, addqty })
|
||||||
|
.then((ris) => {
|
||||||
let strprod = t('ecomm.prodotto')
|
let strprod = t('ecomm.prodotto')
|
||||||
|
|
||||||
if (order.quantity > 1 || order.quantity === 0)
|
let msg = ''
|
||||||
|
console.log('ris', ris)
|
||||||
|
if (ris && ris.myord == null) {
|
||||||
|
msg = t('ecomm.prodotto_tolto')
|
||||||
|
tools.showNotif($q, msg)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
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')
|
strprod = t('ecomm.prodotti')
|
||||||
|
|
||||||
let msg = ''
|
if (qta > 0) {
|
||||||
if (ris === null)
|
msg = t('ecomm.prod_sul_carrello', { strprod, qty: qta })
|
||||||
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)
|
//updateproduct()
|
||||||
|
|
||||||
if (ris === null || order.quantity === 0)
|
if (ris === null || ris.myord.quantity === 0)
|
||||||
tools.showNotif($q, msg)
|
tools.showNotif($q, msg)
|
||||||
else
|
else
|
||||||
tools.showPositiveNotif($q, msg)
|
tools.showPositiveNotif($q, msg)
|
||||||
|
|
||||||
|
return ris
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
getQuantityByOrder($t: any, order: IOrder): string {
|
||||||
|
let mystr = '';
|
||||||
|
if (order.quantity > 0) {
|
||||||
|
mystr += order.quantity
|
||||||
}
|
}
|
||||||
|
if ((order.quantitypreordered > 0) && (order.quantity > 0)) {
|
||||||
|
mystr += ' ' + $t('ecomm.available')
|
||||||
|
mystr += ' + '
|
||||||
|
}
|
||||||
|
if (order.quantitypreordered > 0) {
|
||||||
|
mystr += ' ' + order.quantitypreordered + ' ' + $t('ecomm.preord');
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
},
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
|||||||
storehouses: [],
|
storehouses: [],
|
||||||
scontisticas: [],
|
scontisticas: [],
|
||||||
providers: [],
|
providers: [],
|
||||||
|
gasordines: [],
|
||||||
departments: [],
|
departments: [],
|
||||||
categories: [],
|
categories: [],
|
||||||
sharewithus: [],
|
sharewithus: [],
|
||||||
@@ -309,6 +310,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
|||||||
else if (table === 'producers') ris = state.producers
|
else if (table === 'producers') ris = state.producers
|
||||||
else if (table === 'storehouses') ris = state.storehouses
|
else if (table === 'storehouses') ris = state.storehouses
|
||||||
else if (table === 'providers') ris = state.providers
|
else if (table === 'providers') ris = state.providers
|
||||||
|
else if (table === 'gasordines') ris = state.gasordines
|
||||||
else if (table === 'scontisticas') ris = state.scontisticas
|
else if (table === 'scontisticas') ris = state.scontisticas
|
||||||
else if (table === 'groups') ris = state.groups
|
else if (table === 'groups') ris = state.groups
|
||||||
else if (table === 'resps') ris = state.resps
|
else if (table === 'resps') ris = state.resps
|
||||||
@@ -1537,6 +1539,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
|
|||||||
this.producers = (res.data.producers) ? [...res.data.producers] : []
|
this.producers = (res.data.producers) ? [...res.data.producers] : []
|
||||||
this.storehouses = (res.data.storehouses) ? [...res.data.storehouses] : []
|
this.storehouses = (res.data.storehouses) ? [...res.data.storehouses] : []
|
||||||
this.providers = (res.data.providers) ? [...res.data.providers] : []
|
this.providers = (res.data.providers) ? [...res.data.providers] : []
|
||||||
|
this.gasordines = (res.data.gasordines) ? [...res.data.gasordines] : []
|
||||||
this.scontisticas = (res.data.scontisticas) ? [...res.data.scontisticas] : []
|
this.scontisticas = (res.data.scontisticas) ? [...res.data.scontisticas] : []
|
||||||
this.groups = (res.data.groups) ? [...res.data.groups] : []
|
this.groups = (res.data.groups) ? [...res.data.groups] : []
|
||||||
this.resps = (res.data.resps) ? [...res.data.resps] : []
|
this.resps = (res.data.resps) ? [...res.data.resps] : []
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
const myprod = productStore.getProductByCode(lowerSearchText);
|
const myprod = productStore.getProductByCode(lowerSearchText);
|
||||||
if (myprod && myprod.active) {
|
if (myprod && myprod.active) {
|
||||||
let myorder: IOrder = { quantity: 1, price: 0, TotalPriceProduct: 0 }
|
let myorder: IOrder = { quantity: 1, quantitypreordered: 0, price: 0, TotalPriceProduct: 0 }
|
||||||
await productStore.addtoCartBase({ $q, t, code: myprod.code!, order: myorder, addqty: true })
|
await productStore.addtoCartBase({ $q, t, code: myprod.code!, order: myorder, addqty: true })
|
||||||
search.value = ''
|
search.value = ''
|
||||||
load()
|
load()
|
||||||
|
|||||||
@@ -312,6 +312,7 @@ export default defineComponent({
|
|||||||
getCols,
|
getCols,
|
||||||
endload,
|
endload,
|
||||||
getOrdersCartWithTotals,
|
getOrdersCartWithTotals,
|
||||||
|
productStore,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
v-if="!!item && item.order && item.order.product"
|
v-if="!!item && item.order && item.order.product"
|
||||||
>
|
>
|
||||||
{{ item.order.product.name }} ({{
|
{{ item.order.product.name }} ({{
|
||||||
item.order.quantity
|
productStore.getQuantityByOrder($t, item.order)
|
||||||
}})<br />
|
}})<br />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -141,7 +141,7 @@
|
|||||||
<div v-for="(item, index) of props.row.items" :key="index">
|
<div v-for="(item, index) of props.row.items" :key="index">
|
||||||
<div v-if="!!item.order && item.order.product">
|
<div v-if="!!item.order && item.order.product">
|
||||||
{{ item.order.product.name }} ({{
|
{{ item.order.product.name }} ({{
|
||||||
item.order.quantity
|
productStore.getQuantityByOrder($t, item.order)
|
||||||
}})<br />
|
}})<br />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user