- Aggiunto bottone Aggiungi al Carrello sulla lista dei libri dei cataloghi

This commit is contained in:
Surya Paolo
2025-06-06 00:07:47 +02:00
parent 06fe6eb861
commit 664975b1fd
36 changed files with 1110 additions and 751 deletions

View File

@@ -1,30 +1,38 @@
import type { PropType} from 'vue';
import { defineComponent, ref, toRef, computed, watch, onMounted, reactive, onBeforeUnmount } from 'vue'
import { useI18n } from 'vue-i18n'
import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore'
import { useQuasar } from 'quasar'
import type { PropType } from 'vue';
import {
defineComponent,
ref,
toRef,
computed,
watch,
onMounted,
reactive,
onBeforeUnmount,
} from 'vue';
import { useI18n } from 'vue-i18n';
import { useUserStore } from '@store/UserStore';
import { useGlobalStore } from '@store/globalStore';
import { useQuasar } from 'quasar';
import { CTitleBanner } from '../CTitleBanner'
import { CCardState } from '../CCardState'
import { CCopyBtn } from '../CCopyBtn'
import { CMyFieldRec } from '../CMyFieldRec'
import { CBarCode } from '../CBarCode'
import { CText } from '../CText'
import { CMyValueDb } from '../CMyValueDb'
import { CTitleBanner } from '../CTitleBanner';
import { CCardState } from '../CCardState';
import { CCopyBtn } from '../CCopyBtn';
import { CMyFieldRec } from '../CMyFieldRec';
import { CBarCode } from '../CBarCode';
import { CText } from '../CText';
import { CMyValueDb } from '../CMyValueDb';
import { func_tools, toolsext } from '@store/Modules/toolsext'
import { func_tools, toolsext } from '@store/Modules/toolsext';
import type { IGasordine, IOrder, IOrderCart, IProduct } from '@src/model';
import { IBaseOrder } from '@src/model'
import { tools } from '@tools'
import { useProducts } from '@store/Products'
import { IBaseOrder } from '@src/model';
import { tools } from '@tools';
import { useProducts } from '@store/Products';
import { shared_consts } from '@src/common/shared_vuejs'
import { useRouter } from 'vue-router'
import { costanti } from '@costanti'
import { shared_consts } from '@src/common/shared_vuejs';
import { useRouter } from 'vue-router';
import { costanti } from '@costanti';
export default defineComponent({
name: 'CProductCard',
@@ -51,27 +59,32 @@ export default defineComponent({
},
},
components: {
CTitleBanner, CCardState, CCopyBtn,
CMyFieldRec, CMyValueDb, CBarCode, CText,
CTitleBanner,
CCardState,
CCopyBtn,
CMyFieldRec,
CMyValueDb,
CBarCode,
CText,
},
setup(props, { emit }) {
const $q = useQuasar()
const { t } = useI18n()
const userStore = useUserStore()
const globalStore = useGlobalStore()
const products = useProducts()
const $q = useQuasar();
const { t } = useI18n();
const userStore = useUserStore();
const globalStore = useGlobalStore();
const Products = useProducts();
const listord = ref(<IOrderCart[]>[])
const sumval = ref(0)
const editOn = ref(false)
const listord = ref(<IOrderCart[]>[]);
const sumval = ref(0);
const editOn = ref(false);
const site = ref(globalStore.site)
const site = ref(globalStore.site);
const $router = useRouter()
const $router = useRouter();
const fullscreenImage = ref(<any>null)
const fullscreenImage = ref(<any>null);
const apriSchedaPDF = ref(false)
const apriSchedaPDF = ref(false);
let myorder = reactive(<IOrder>{
idapp: tools.getEnv('VITE_APP_ID'),
@@ -81,219 +94,209 @@ export default defineComponent({
idGasordine: '',
storehouse: {},
gasordine: { active: false },
})
});
const storeSelected = ref('')
const arrordersCart = ref(<IOrderCart[]>[])
const storeSelected = ref('');
const arrordersCart = ref(<IOrderCart[]>[]);
const timerInterval = ref(<any>null)
const timerLabelScadenza = ref('')
const labelDataRitiro = ref('')
const labelDataArrivoMerce = ref('')
const timerInterval = ref(<any>null);
const timerLabelScadenza = ref('');
const labelDataRitiro = ref('');
const labelDataArrivoMerce = ref('');
const openlistorders = ref(false)
const endload = ref(false)
const myproduct = ref(<IProduct>{})
const openlistorders = ref(false);
const endload = ref(false);
const myproduct = ref(<IProduct>{});
const isFullScreen = ref(false)
const imageSrc = ref('URL_DEL_TUO_FILE_IMMAGINE')
const startX = ref(0)
const startY = ref(0)
const scale = ref(1)
watch(() => editOn.value, (to: any, from: any) => {
if (!editOn.value)
ricarica()
})
const isFullScreen = ref(false);
const imageSrc = ref('URL_DEL_TUO_FILE_IMMAGINE');
const startX = ref(0);
const startY = ref(0);
const scale = ref(1);
watch(
() => editOn.value,
(to: any, from: any) => {
if (!editOn.value) ricarica();
}
);
/*const myproduct = computed((): IProduct => {
console.log('getproduct computed')
const ris = products.getProduct(props.code)
const ris = Products.getProduct(props.code)
console.log(' received', ris)
return ris
})*/
function iconWhishlist(order: IProduct) {
if (true) {
return 'far fa-heart'
return 'far fa-heart';
} else {
return 'fas fa-heart'
return 'fas fa-heart';
}
}
async function addtoCart(add: boolean) {
if (!userStore.isLogged) {
tools.showNeutralNotif($q, t('ecomm.area_personale'))
globalStore.rightDrawerOpen = true
return false
tools.showNeutralNotif($q, t('ecomm.area_personale'));
globalStore.rightDrawerOpen = true;
return false;
}
const ris = await products.addtoCartBase({ $q, t, id: myproduct.value._id, order: myorder, addqty: add })
updateproduct()
const ris = await Products.addtoCartBase({
$q,
t,
id: myproduct.value._id,
order: myorder,
addqty: add,
});
updateproduct();
if (ris && ris.myord) {
}
}
function getnumstore() {
if (myproduct.value) {
if (myproduct.value.storehouses)
return myproduct.value.storehouses.length
else
return 0
if (myproduct.value.storehouses) return myproduct.value.storehouses.length;
else return 0;
}
return 0
return 0;
}
function getSingleStorehouse() {
try {
const mystore = myproduct.value.storehouses[0]
if (mystore)
return mystore.name + ' (' + mystore.city + ')'
else
return ''
const mystore = myproduct.value.storehouses[0];
if (mystore) return mystore.name + ' (' + mystore.city + ')';
else return '';
} catch (e) {
return ''
return '';
}
}
function getSingleGasordine(gasordine: IGasordine) {
try {
const mygas = gasordine
const mygas = gasordine;
if (mygas)
/*return mygas.name + ' (' + mygas.city + ') ' + t('gas.dataora_chiusura_ordini') + ': ' + tools.getstrDateShort(mygas.dataora_chiusura_ordini)
+ ' ' + t('gas.data_arrivo_merce') + ': ' + tools.getstrDateShort(mygas.data_arrivo_merce)
+ ' ' + t('gas.dataora_ritiro') + ': ' + tools.getstrDateShort(mygas.dataora_ritiro)*/
return mygas.name
else
return ''
return mygas.name;
else return '';
} catch (e) {
return ''
return '';
}
}
function initproduct() {
myorder.quantity = 0
myorder.quantitypreordered = 0
myorder.idStorehouse = ''
myorder.idGasordine = ''
}
async function updateproduct() {
// console.log('props.id', props.id)
myproduct.value = await products.getProductById(props.id)
myproduct.value = await Products.getProductById(props.id);
// products.updateQuantityAvailable(myproduct.value._id)
// Products.updateQuantityAvailable(myproduct.value._id)
}
async function ricarica() {
endload.value = false
const prod = await products.loadProductById(myproduct.value._id)
endload.value = false;
const prod = await Products.loadProductById(myproduct.value._id);
if (prod) {
myproduct.value = prod
myproduct.value = prod;
}
await load()
endload.value = true
await load();
endload.value = true;
}
async function updateproductmodif(element: any) {
// console.log('updateproductmodif')
try {
if (element?._id) {
myproduct.value = await products.getProductById(element?._id)
myproduct.value = await Products.getProductById(element?._id);
} else {
myproduct.value = await products.getProductById(props.id)
myproduct.value = await Products.getProductById(props.id);
}
updateLabel()
updateLabel();
} catch (e) {
console.error('err', e)
console.error('err', e);
}
}
function getStorehouses() {
if (!myproduct.value)
return []
if (!myproduct.value) return [];
const myarr: any = []
let ind = 1
const myarr: any = [];
let ind = 1;
myproduct.value.storehouses.forEach((store) => {
myarr.push(
{
id: ind,
label: store.name + ' (' + store.city + ')',
value: store._id
})
myarr.push({
id: ind,
label: store.name + ' (' + store.city + ')',
value: store._id,
});
ind++
})
ind++;
});
// console.log('arraystore', myarr)
return myarr
return myarr;
}
function checkifCartDisable() {
// return !myorder.idStorehouse
return isOrdineChiuso()
return isOrdineChiuso();
}
function getQtyWarn() {
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 });
}
return ''
return '';
}
function getQtyWarnPreOrdered() {
if (myorder.quantitypreordered > 0) {
return t('ecomm.di_cui_x_in_carrello', { qty: myorder.quantitypreordered })
return t('ecomm.di_cui_x_in_carrello', { qty: myorder.quantitypreordered });
}
return ''
return '';
}
watch(() => props.id, async (newval, oldval) => {
// console.log('change code')
await load()
})
watch(
() => props.id,
async (newval, oldval) => {
// console.log('change code')
await load();
}
);
watch(() => storeSelected.value, (newval, oldval) => {
myorder.idStorehouse = newval
})
watch(
() => storeSelected.value,
(newval, oldval) => {
myorder.idStorehouse = newval;
}
);
function updateLabel() {
let dataArrivoMerce = ''
let dataRitiro = ''
let dataArrivoMerce = '';
let dataRitiro = '';
try {
if (myproduct.value && myproduct.value.gasordine) {
if (myproduct.value.gasordine.data_arrivo_merce)
dataArrivoMerce = tools.getstrDateShort(myproduct.value.gasordine.data_arrivo_merce)
dataArrivoMerce = tools.getstrDateShort(
myproduct.value.gasordine.data_arrivo_merce
);
if (myproduct.value.gasordine.dataora_ritiro)
dataRitiro = tools.getstrDateTime(myproduct.value.gasordine.dataora_ritiro)
dataRitiro = tools.getstrDateTime(myproduct.value.gasordine.dataora_ritiro);
} else {
dataArrivoMerce = ''
dataRitiro = ''
dataArrivoMerce = '';
dataRitiro = '';
}
} catch (e) {
}
} catch (e) {}
if (labelDataArrivoMerce.value !== dataArrivoMerce)
labelDataArrivoMerce.value = dataArrivoMerce
if (labelDataRitiro.value !== dataRitiro)
labelDataRitiro.value = dataRitiro
labelDataArrivoMerce.value = dataArrivoMerce;
if (labelDataRitiro.value !== dataRitiro) labelDataRitiro.value = dataRitiro;
updateTimerLabel()
updateTimerLabel();
}
async function mounted() {
await load()
await load();
// Start the timer when the component is mounted
startTimer();
@@ -305,15 +308,24 @@ export default defineComponent({
}
function updateTimerLabel() {
if (myproduct.value && myproduct.value.gasordine && myproduct.value.gasordine._id && myproduct.value.gasordine.dataora_chiusura_ordini)
timerLabelScadenza.value = tools.getCountDown(myproduct.value.gasordine.dataora_chiusura_ordini)
else
timerLabelScadenza.value = ''
if (
myproduct.value &&
myproduct.value.gasordine &&
myproduct.value.gasordine._id &&
myproduct.value.gasordine.dataora_chiusura_ordini
)
timerLabelScadenza.value = tools.getCountDown(
myproduct.value.gasordine.dataora_chiusura_ordini
);
else timerLabelScadenza.value = '';
}
function isOrdineChiuso() {
return myproduct.value.gasordine && myproduct.value.gasordine.dataora_chiusura_ordini &&
return (
myproduct.value.gasordine &&
myproduct.value.gasordine.dataora_chiusura_ordini &&
tools.getCountDown(myproduct.value.gasordine.dataora_chiusura_ordini) === ''
);
}
function startTimer() {
@@ -322,76 +334,74 @@ export default defineComponent({
}
async function load() {
initproduct()
await updateproduct()
labelDataArrivoMerce.value = ''
labelDataRitiro.value = ''
Products.initproduct(myorder);
await updateproduct();
// console.log('Load', myproduct.value.name)
// console.log('created Cproductcard', code)
labelDataArrivoMerce.value = '';
labelDataRitiro.value = '';
arrordersCart.value = products.getOrdersCartInAttesaByIdProduct(myproduct.value._id)
arrordersCart.value = Products.getOrdersCartInAttesaByIdProduct(
myproduct.value._id
);
if (!!myproduct.value) {
if (myproduct.value.storehouses && myproduct.value.storehouses.length === 1) {
// Se solo 1 presente, metto fisso l'unico negozio !
myorder.idStorehouse = myproduct.value.storehouses[0]._id
}
if (myproduct.value.gasordine) {
myorder.idGasordine = myproduct.value.gasordine._id
}
const ord = products.getOrderProductInCart(myproduct.value._id)
if (ord) {
myorder.quantity = ord.quantity
myorder.quantitypreordered = ord.quantitypreordered
// Seleziona il Negozio che avevo già scelto nell'ordine !
if (ord.idStorehouse)
storeSelected.value = ord.idStorehouse
}
Products.setMyOrder(myorder, myproduct.value, storeSelected.value, {
setstore: true,
});
}
updateLabel()
updateLabel();
// console.log('°°° ENDLOAD °°°')
endload.value = true
endload.value = true;
}
function getclimgproduct() {
return 'myimgproduct centermydiv'
return 'myimgproduct centermydiv';
}
function visuListDisponibili() {
openlistorders.value = true
sumval.value = products.getSumQtyOrderProductInOrdersCart(myproduct.value._id)
openlistorders.value = true;
sumval.value = Products.getSumQtyOrderProductInOrdersCart(myproduct.value._id);
listord.value = arrordersCart.value.filter((orderscart: IOrderCart) => orderscart.items!.reduce((accumulator, item) => {
return accumulator + item.order.quantity
}, 0))
listord.value = arrordersCart.value.filter((orderscart: IOrderCart) =>
orderscart.items!.reduce((accumulator, item) => {
return accumulator + item.order.quantity;
}, 0)
);
}
function visuListBookable() {
openlistorders.value = true
sumval.value = products.getSumQtyPreOrderInOrdersCart(myproduct.value._id)
openlistorders.value = true;
sumval.value = Products.getSumQtyPreOrderInOrdersCart(myproduct.value._id);
listord.value = arrordersCart.value.filter((orderscart: IOrderCart) => orderscart.items!.reduce((accumulator, item) => {
return accumulator + item.order.quantitypreordered
}, 0))
listord.value = arrordersCart.value.filter((orderscart: IOrderCart) =>
orderscart.items!.reduce((accumulator, item) => {
return accumulator + item.order.quantitypreordered;
}, 0)
);
}
function isOrdGas(): boolean {
return (myproduct.value && !!myproduct.value.idGasordine && myproduct.value.gasordine! && myproduct.value.gasordine.active)
return (
myproduct.value &&
!!myproduct.value.idGasordine &&
myproduct.value.gasordine! &&
myproduct.value.gasordine.active
);
}
function getpercqtaraggiunta(): number {
if (myproduct.value)
return tools.calcperc((myproduct.value.bookableGASBloccatiQty + myproduct.value.QuantitaPrenotateInAttesa!) * myproduct.value.productInfo.weight!, myproduct.value.qtyToReachForGas * myproduct.value.productInfo.weight!) / 100
else
return 0
return (
tools.calcperc(
(myproduct.value.bookableGASBloccatiQty +
myproduct.value.QuantitaPrenotateInAttesa!) *
myproduct.value.productInfo.weight!,
myproduct.value.qtyToReachForGas * myproduct.value.productInfo.weight!
) / 100
);
else return 0;
}
function toggleFullScreen() {
@@ -430,7 +440,7 @@ export default defineComponent({
}
function naviga(path: string) {
$router.push(path)
$router.push(path);
}
function hasImage(): boolean {
@@ -439,11 +449,11 @@ export default defineComponent({
}
const { imagefile, image_link } = myproduct.value.productInfo;
return ((!!imagefile && imagefile !== '') || (!!image_link && image_link !== ''))
return (!!imagefile && imagefile !== '') || (!!image_link && image_link !== '');
}
onMounted(mounted)
onBeforeUnmount(beforeDestroy)
onMounted(mounted);
onBeforeUnmount(beforeDestroy);
return {
visuListDisponibili,
@@ -465,7 +475,7 @@ export default defineComponent({
openlistorders,
func_tools,
toolsext,
products,
Products,
arrordersCart,
endload,
shared_consts,
@@ -493,6 +503,6 @@ export default defineComponent({
ricarica,
apriSchedaPDF,
hasImage,
}
}
})
};
},
});

View File

@@ -136,7 +136,7 @@
v-if="
(cosa === shared_consts.PROD.TUTTI && !isOrdGas()) ||
cosa === shared_consts.PROD.BOTTEGA ||
(cosa === shared_consts.PROD.GAS && products.getQtyAvailable(myproduct) > 0)
(cosa === shared_consts.PROD.GAS && Products.getQtyAvailable(myproduct) > 0)
"
:clickable="tools.isManager()"
style="padding: 16px !important;"
@@ -166,7 +166,7 @@
v-if="!editOn"
class="prod_disp"
>
{{ products.getQtyAvailable(myproduct) }}
{{ Products.getQtyAvailable(myproduct) }}
</span>
<CMyValueDb
v-if="editOn"
@@ -193,7 +193,7 @@
</q-item-label>
</q-item-section>
<q-item-section
v-if="tools.isManager() && products.getQtyBloccataAvailable(myproduct) > 0"
v-if="tools.isManager() && Products.getQtyBloccataAvailable(myproduct) > 0"
>
<q-item-section avatar>
<q-icon
@@ -203,7 +203,7 @@
</q-item-section>
<q-item-section
v-if="
tools.isManager() && products.getQtyBloccataAvailable(myproduct) > 0
tools.isManager() && Products.getQtyBloccataAvailable(myproduct) > 0
"
>
<q-item-label> {{ t('ecomm.bloccati') }}: </q-item-label>
@@ -240,7 +240,7 @@
{{ myproduct.productInfo.name }}
</div>
<div v-if="myproduct?.productInfo?.authors" class="text-h8 text-italic titolo_prod q-mb-sm">
{{ products.getAutoriByArrayAuthors(myproduct.productInfo.authors) }}
{{ Products.getAutoriByArrayAuthors(myproduct.productInfo.authors) }}
</div>
<div class="product_code">
&nbsp; {{ t('ecomm.codice') }}: {{ myproduct.productInfo.code }}
@@ -552,7 +552,7 @@
</q-item-section>
<q-item-section
v-if="
tools.isManager() && products.getQtyBloccataBookableAvailable(myproduct) > 0
tools.isManager() && Products.getQtyBloccataBookableAvailable(myproduct) > 0
"
>
<q-item-section avatar>
@@ -715,7 +715,7 @@
</q-item-label>
</q-item-section>
<q-item-section
v-if="tools.isManager() && products.getQtyBloccataAvailable(myproduct) > 0"
v-if="tools.isManager() && Products.getQtyBloccataAvailable(myproduct) > 0"
>
<q-item-section avatar>
<q-icon
@@ -724,12 +724,12 @@
/>
</q-item-section>
<q-item-section
v-if="tools.isManager() && products.getQtyBloccataAvailable(myproduct) > 0"
v-if="tools.isManager() && Products.getQtyBloccataAvailable(myproduct) > 0"
>
<q-item-label> {{ t('ecomm.bloccati') }}: </q-item-label>
<q-item-label>
<span class="text-black q-ml-xs text-h8">
{{ products.getQtyBloccataAvailable(myproduct) }}</span
{{ Products.getQtyBloccataAvailable(myproduct) }}</span
>
</q-item-label>
</q-item-section>
@@ -843,16 +843,16 @@
<q-btn
icon="fas fa-cart-arrow-down"
:color="
checkifCartDisable() || !products.enableSubQty(myorder)
checkifCartDisable() || !Products.enableSubQty(myorder)
? 'grey'
: 'negative'
"
:disable="checkifCartDisable() || !products.enableSubQty(myorder)"
:disable="checkifCartDisable() || !Products.enableSubQty(myorder)"
rounded
size="md"
:label="
t('products.subcart', {
qta: products.qtaNextSub(myorder, myproduct),
qta: Products.qtaNextSub(myorder, myproduct),
})
"
@click="addtoCart(false)"
@@ -877,16 +877,16 @@
<q-btn
icon-right="fas fa-cart-plus"
:color="
checkifCartDisable() || !products.enableAddQty(myorder, myproduct)
checkifCartDisable() || !Products.enableAddQty(myorder, myproduct)
? 'grey'
: 'positive'
"
:disable="checkifCartDisable() || !products.enableAddQty(myorder, myproduct)"
:disable="checkifCartDisable() || !Products.enableAddQty(myorder, myproduct)"
rounded
size="md"
:label="
t('products.addcart', {
qta: products.qtaNextAdd(myorder, myproduct),
qta: Products.qtaNextAdd(myorder, myproduct),
})
"
@click="addtoCart(true)"