- Altri aggiornamenti della scheda
This commit is contained in:
@@ -24,6 +24,7 @@ import type {
|
||||
IMyScheda, IProdView, IProduct, ISchedaSingola, ISearchList, ICatalog, IImg,
|
||||
IText,
|
||||
ICollana,
|
||||
IOptRigenera,
|
||||
} from 'model';
|
||||
import {
|
||||
IMyPage,
|
||||
@@ -60,12 +61,31 @@ export default defineComponent({
|
||||
const $q = useQuasar()
|
||||
const { t } = useI18n()
|
||||
|
||||
const rigeneraLibri = ref(false)
|
||||
|
||||
const search = ref('')
|
||||
const optauthors = ref(<any>[])
|
||||
|
||||
const pdfContent = ref(null);
|
||||
const addnewProd = ref(false)
|
||||
|
||||
const optDisp = ref([
|
||||
{ label: 'Tutti', value: costanti.DISP.TUTTI },
|
||||
{ label: 'Disponibili', value: costanti.DISP.DISPONIBILI },
|
||||
{ label: 'Esauriti', value: costanti.DISP.ESAURITI }])
|
||||
|
||||
const optStato = ref([
|
||||
{ label: 'Tutti', value: costanti.STATO.TUTTI },
|
||||
{ label: 'In Commercio', value: costanti.STATO.IN_COMMERCIO },
|
||||
{ label: 'Prossima Uscita', value: costanti.STATO.SOLO_PROSSIMA_USCITA },
|
||||
{ label: 'Prevendita', value: costanti.STATO.PREVENDITA },
|
||||
{ label: 'Non Vendibile', value: costanti.STATO.NON_VENDIBILE },
|
||||
])
|
||||
|
||||
const generatinglist = ref(false)
|
||||
|
||||
const optrigenera = ref<IOptRigenera>({ visibilitaDisp: costanti.DISP.DISPONIBILI, stato: costanti.STATO.IN_COMMERCIO })
|
||||
|
||||
const optcatalogo = ref(<IOptCatalogo>{ ...props.modelValue });
|
||||
|
||||
function updateCatalogoPadre() {
|
||||
@@ -84,6 +104,12 @@ export default defineComponent({
|
||||
optcatalogo.value = { ...newVal };
|
||||
}, { deep: false });
|
||||
|
||||
watch(optrigenera.value, (newVal) => {
|
||||
tools.setCookie(showListaArgomenti.value ? 'INC_ES' : 'VIS_DISP', newVal.visibilitaDisp);
|
||||
if (showListaArgomenti.value)
|
||||
calcArrProducts()
|
||||
}, { deep: true });
|
||||
|
||||
/*watch(optcatalogo, (newValue) => {
|
||||
emit('update:modelValue', newValue);
|
||||
}, { deep: true });*/
|
||||
@@ -99,7 +125,6 @@ export default defineComponent({
|
||||
const cat = ref('')
|
||||
const idGasSel = ref('')
|
||||
const loadpage = ref(false)
|
||||
const refreshpage = ref(false)
|
||||
const show_hide = ref(false)
|
||||
|
||||
const mycolumns = ref([])
|
||||
@@ -215,12 +240,13 @@ export default defineComponent({
|
||||
|
||||
watch(() => cat.value, (newval, oldval) => {
|
||||
|
||||
if (loadpage.value)
|
||||
tools.setCookie(tools.COOK_CATEGORIA, cat.value.toString())
|
||||
filter.value.author = '' // disattivo il filtro autore
|
||||
resetSearch()
|
||||
if (loadpage.value) {
|
||||
tools.setCookie(getKeyCatAtLoad(), cat.value.toString())
|
||||
filter.value.author = '' // disattivo il filtro autore
|
||||
resetSearch()
|
||||
|
||||
calcArrProducts()
|
||||
calcArrProducts()
|
||||
}
|
||||
})
|
||||
|
||||
watch(() => idGasSel.value, (newval, oldval) => {
|
||||
@@ -239,7 +265,7 @@ export default defineComponent({
|
||||
if (filter.value.author) {
|
||||
cat.value = '' // disattivo il filtro categoria
|
||||
if (loadpage.value)
|
||||
tools.setCookie(tools.COOK_CATEGORIA, '')
|
||||
tools.setCookie(getKeyCatAtLoad(), '')
|
||||
resetSearch()
|
||||
}
|
||||
|
||||
@@ -270,7 +296,7 @@ export default defineComponent({
|
||||
if (cosa.value !== shared_consts.PROD.TUTTI) {
|
||||
cat.value = ''
|
||||
if (loadpage.value)
|
||||
tools.setCookie(tools.COOK_CATEGORIA, '')
|
||||
tools.setCookie(getKeyCatAtLoad(), '')
|
||||
}
|
||||
calcArrProducts()
|
||||
}
|
||||
@@ -447,6 +473,7 @@ export default defineComponent({
|
||||
filtroAuthor: string,
|
||||
filtroProductTypes: number[],
|
||||
filtroExcludeProductTypes: number[],
|
||||
filtroidTipologie: number[],
|
||||
editore: string[],
|
||||
idCollane: ICollana[],
|
||||
arrargomstr: any[],
|
||||
@@ -463,6 +490,7 @@ export default defineComponent({
|
||||
const boolfiltroVuotoProductTypes =
|
||||
filtroProductTypes.length === 0 || (filtroProductTypes.length === 1 && filtroProductTypes[0] === 0);
|
||||
const boolfiltroVuotoExcludeProductTypes = filtroExcludeProductTypes.length === 0;
|
||||
const boolfiltroVuotoidTipologie = filtroidTipologie.length === 0;
|
||||
const boolfiltroVuotoEditore = editore.length === 0;
|
||||
const boolfiltroVuotoCollane = idCollane.length === 0;
|
||||
// const boolfiltroVuotoArgomenti = arrargomstr.length === 0;
|
||||
@@ -475,8 +503,23 @@ export default defineComponent({
|
||||
}
|
||||
|
||||
// il prodotto dev'essere disponibile
|
||||
if (!productStore.isPubblicato(product))
|
||||
return false
|
||||
//if (!productStore.isPubblicato(product.productInfo))
|
||||
// return false
|
||||
|
||||
if (!(optrigenera.value.visibilitaDisp === costanti.DISP.TUTTI ||
|
||||
(optrigenera.value.visibilitaDisp === costanti.DISP.ESAURITI && productStore.isEsaurito(product)) ||
|
||||
(optrigenera.value.visibilitaDisp === costanti.DISP.DISPONIBILI && productStore.isDisponibile(product)))) {
|
||||
return false;
|
||||
}
|
||||
if (!(optrigenera.value.stato === costanti.STATO.TUTTI ||
|
||||
(optrigenera.value.stato === costanti.STATO.IN_COMMERCIO && productStore.isPubblicato(product.productInfo)) ||
|
||||
(optrigenera.value.stato === costanti.STATO.SOLO_PROSSIMA_USCITA && productStore.isProssimaUscita(product.productInfo)) ||
|
||||
(optrigenera.value.stato === costanti.STATO.PREVENDITA && productStore.isPrevendita(product.productInfo)) ||
|
||||
(optrigenera.value.stato === costanti.STATO.NON_VENDIBILE && productStore.isNonVendibile(product.productInfo))
|
||||
|
||||
)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const lowerName = (product.productInfo.name || '').toLowerCase();
|
||||
const lowerCode = (product.productInfo.code || '').toLowerCase();
|
||||
@@ -504,6 +547,10 @@ export default defineComponent({
|
||||
? false
|
||||
: (product.productInfo.productTypes || []).every((item: any) => filtroExcludeProductTypes.includes(item));
|
||||
|
||||
const hasidTipologie = boolfiltroVuotoidTipologie
|
||||
? true
|
||||
: filtroidTipologie.includes(product.arrvariazioni?.[0].idTipologia);
|
||||
|
||||
// Filtri per editore
|
||||
const hasPublished = boolfiltroVuotoEditore
|
||||
? true
|
||||
@@ -530,15 +577,15 @@ export default defineComponent({
|
||||
searchMatch &&
|
||||
hasAuthor &&
|
||||
productgassel &&
|
||||
hasProductTypes &&
|
||||
hasidTipologie &&
|
||||
// hasProductTypes &&
|
||||
(
|
||||
hasPublished &&
|
||||
hasCollana &&
|
||||
hasCategoria &&
|
||||
hasArgomentiCat
|
||||
)
|
||||
&&
|
||||
!hasExcludeProductTypes
|
||||
// && !hasExcludeProductTypes
|
||||
);
|
||||
})
|
||||
.sort((a, b) => getProductsSorted([a, b], sortField, sortDir)[0] === a ? -1 : 1);
|
||||
@@ -552,14 +599,20 @@ export default defineComponent({
|
||||
return arrris
|
||||
}
|
||||
|
||||
function calcArrProducts(generalista?: boolean) {
|
||||
async function calcArrProducts(generalista?: boolean) {
|
||||
console.log('calcArrProducts (generalista=' + generalista + ')')
|
||||
|
||||
if (!loadpage.value)
|
||||
return
|
||||
|
||||
generatinglist.value = true
|
||||
|
||||
const searchtext = getSearchText();
|
||||
let arrprod = [];
|
||||
const filtroAuthor = filter.value.author || '';
|
||||
const filtroProductTypes = optcatalogo.value.productTypes || [0];
|
||||
const filtroExcludeProductTypes = optcatalogo.value.excludeproductTypes || [0];
|
||||
const filtroidTipologie = optcatalogo.value.idTipologie || [];
|
||||
const editore = getEditoreDaFiltrare(optcatalogo.value.editore);
|
||||
const filtroPublishers = editore || [];
|
||||
const idCollane = getIdCollaneDaFiltrare(optcatalogo.value.idCollane);
|
||||
@@ -574,6 +627,9 @@ export default defineComponent({
|
||||
// Se nel catalogo è stato già generato, allora gli passo quello.
|
||||
const trovatocatalogo = getCatalogoByMyPage.value
|
||||
|
||||
if (editore)
|
||||
console.log('FILTRO editore', editore)
|
||||
|
||||
if (optcatalogo.value.showListaArgomenti) {
|
||||
generalista = true
|
||||
}
|
||||
@@ -592,6 +648,7 @@ export default defineComponent({
|
||||
filtroAuthor,
|
||||
filtroProductTypes,
|
||||
filtroExcludeProductTypes,
|
||||
filtroidTipologie,
|
||||
filtroPublishers,
|
||||
filtroCollane,
|
||||
arrargomstr,
|
||||
@@ -599,7 +656,7 @@ export default defineComponent({
|
||||
gasselstr,
|
||||
cosa.value,
|
||||
filter.value.sort_field,
|
||||
filter.value.sort_dir
|
||||
filter.value.sort_dir,
|
||||
);
|
||||
|
||||
salva = true
|
||||
@@ -613,7 +670,10 @@ export default defineComponent({
|
||||
generatearrProdToViewSorted(!generalista, salva, !optcatalogo.value.showListaArgomenti);
|
||||
loaddata();
|
||||
|
||||
refreshpage.value = false;
|
||||
console.log('***** FINE calcArrPROD')
|
||||
|
||||
generatinglist.value = false
|
||||
rigeneraLibri.value = false
|
||||
}
|
||||
|
||||
function generaListaLibri() {
|
||||
@@ -630,11 +690,38 @@ export default defineComponent({
|
||||
})
|
||||
}
|
||||
|
||||
function arraysEqual(arr1, arr2) {
|
||||
return (
|
||||
Array.isArray(arr1) &&
|
||||
Array.isArray(arr2) &&
|
||||
arr1.length === arr2.length &&
|
||||
arr1.every((val, index) => val === arr2[index])
|
||||
);
|
||||
}
|
||||
|
||||
function checkIfFiltriDiversi(scheda: IMyScheda, schedaprec: IMyScheda) {
|
||||
if (schedaprec === null)
|
||||
return true
|
||||
|
||||
const isDifferent =
|
||||
!arraysEqual(scheda.productTypes, schedaprec?.productTypes) ||
|
||||
!arraysEqual(scheda.excludeproductTypes, schedaprec?.excludeproductTypes) ||
|
||||
!arraysEqual(scheda.idTipologie, schedaprec?.idTipologie) ||
|
||||
!arraysEqual(scheda.editore, schedaprec?.editore) ||
|
||||
!arraysEqual(scheda.idCollane, schedaprec?.idCollane)
|
||||
;
|
||||
|
||||
return isDifferent;
|
||||
|
||||
}
|
||||
|
||||
function getProductsFilteredByScheda(scheda: IMyScheda): IProduct[] {
|
||||
let arrprod = productStore.getProducts(cosa.value) || [];
|
||||
let arrprod = [];
|
||||
|
||||
const filtroAuthor = filter.value.author || '';
|
||||
const filtroProductTypes = scheda.productTypes || [0];
|
||||
const filtroExcludeProductTypes = scheda.excludeproductTypes || [0];
|
||||
const filtroidTipologie = scheda.idTipologie || [];
|
||||
const editore = getEditoreDaFiltrare(scheda.editore);
|
||||
const filtroPublishers = editore || [];
|
||||
const idCollane = getIdCollaneDaFiltrare(scheda.idCollane);
|
||||
@@ -649,6 +736,7 @@ export default defineComponent({
|
||||
if (trovatocatalogo?.lista_prodotti.length > 0) {
|
||||
arrprod = trovatocatalogo?.lista_prodotti
|
||||
} else {
|
||||
arrprod = productStore.getProducts(cosa.value)
|
||||
|
||||
arrprod = filterProducts(
|
||||
arrprod,
|
||||
@@ -656,6 +744,7 @@ export default defineComponent({
|
||||
filtroAuthor,
|
||||
filtroProductTypes,
|
||||
filtroExcludeProductTypes,
|
||||
filtroidTipologie,
|
||||
filtroPublishers,
|
||||
filtroCollane,
|
||||
arrargomstr,
|
||||
@@ -785,6 +874,8 @@ export default defineComponent({
|
||||
|
||||
let arrprod = []
|
||||
|
||||
let schedaprec = null;
|
||||
|
||||
for (const recscheda of optcatalogo.value.arrSchede!) {
|
||||
if (recscheda && recscheda.scheda) {
|
||||
const schedePerRiga = recscheda.scheda.numschede_perRiga || 1
|
||||
@@ -798,8 +889,11 @@ export default defineComponent({
|
||||
} else {
|
||||
if (recscheda.scheda.productTypes!.length > 0) {
|
||||
// Filtra i prodotti in base ai filtri impostati !
|
||||
arrProdFiltrati = getProductsFilteredByScheda(recscheda.scheda)
|
||||
indprod = 0
|
||||
if (checkIfFiltriDiversi(recscheda.scheda, schedaprec) || indprod === 0) {
|
||||
arrProdFiltrati = getProductsFilteredByScheda(recscheda.scheda)
|
||||
schedaprec = { ...recscheda.scheda }
|
||||
indprod = 0
|
||||
}
|
||||
} else {
|
||||
let sort_field = recscheda.scheda.sort_field! || optcatalogo.value.sort_field
|
||||
let sort_dir = recscheda.scheda.sort_dir || optcatalogo.value.sort_dir
|
||||
@@ -852,9 +946,9 @@ export default defineComponent({
|
||||
if (indtotale > optcatalogo.value.maxnumlibri!)
|
||||
return
|
||||
|
||||
//} else {
|
||||
// if (indtotale > 5000)
|
||||
// return
|
||||
//} else {
|
||||
// if (indtotale > 5000)
|
||||
// return
|
||||
}
|
||||
|
||||
}
|
||||
@@ -934,11 +1028,19 @@ export default defineComponent({
|
||||
});
|
||||
}*/
|
||||
|
||||
function getKeyCatAtLoad() {
|
||||
return tools.COOK_CATEGORIA + (showListaArgomenti.value ? '_LA' : '')
|
||||
}
|
||||
|
||||
async function mounted() {
|
||||
// console.log('mounted Catalogo')
|
||||
|
||||
cat.value = tools.getCookie(getKeyCatAtLoad(), '')
|
||||
|
||||
tabcatalogo.value = tools.getCookie('TAB_CAT', 'visu')
|
||||
|
||||
optrigenera.value.visibilitaDisp = tools.getCookie(showListaArgomenti.value ? 'INC_ES' : 'VIS_DISP', 'tutti')
|
||||
|
||||
loadpage.value = false
|
||||
await productStore.loadProducts()
|
||||
|
||||
@@ -965,7 +1067,7 @@ export default defineComponent({
|
||||
//++Todo: Per ora visualizzo solo il "Negozio" e non i GAS...
|
||||
cosa.value = shared_consts.PROD.BOTTEGA
|
||||
|
||||
cat.value = tools.getCookie(tools.COOK_CATEGORIA, '')
|
||||
|
||||
|
||||
//cosa.value = tools.getCookie(tools.COOK_COSA_PRODOTTI, shared_consts.PROD.GAS, true)
|
||||
//if (cosa.value === shared_consts.PROD.TUTTI)
|
||||
@@ -977,7 +1079,6 @@ export default defineComponent({
|
||||
|
||||
calcArrProducts()
|
||||
|
||||
loaddata()
|
||||
}
|
||||
|
||||
function loaddata() {
|
||||
@@ -990,17 +1091,18 @@ export default defineComponent({
|
||||
});
|
||||
|
||||
function getCatProds() {
|
||||
const arrcat = productStore.getCatProds(cosa.value)
|
||||
const riscat: any = [{ label: 'Tutti', value: '', icon: undefined, color: undefined }]
|
||||
for (const rec of arrcat) {
|
||||
const label = rec.name + ' (' + productStore.getTotaliProdottiByIdCatProd(rec._id) + ')'
|
||||
riscat.push({ label, value: rec._id, icon: rec.icon, color: rec.color })
|
||||
}
|
||||
|
||||
return riscat
|
||||
return [{ label: 'Tutti', value: '', icon: undefined, color: undefined }].concat(
|
||||
productStore.getCatProds(cosa.value).map(rec => ({
|
||||
label: `${rec.name} (${productStore.getTotaliProdottiByIdCatProd(rec._id)})`,
|
||||
value: rec._id,
|
||||
icon: rec.icon,
|
||||
color: rec.color,
|
||||
})),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function onLoadScroll(index: number, done: any) {
|
||||
if (index >= 1) {
|
||||
if (numRecLoaded.value < arrProducts.value.length) {
|
||||
@@ -1299,7 +1401,6 @@ export default defineComponent({
|
||||
productStore,
|
||||
t,
|
||||
loadpage,
|
||||
refreshpage,
|
||||
componentToFixRef,
|
||||
isFixed,
|
||||
arrProducts,
|
||||
@@ -1345,6 +1446,11 @@ export default defineComponent({
|
||||
addProductToList,
|
||||
addnewProd,
|
||||
showListaArgomenti,
|
||||
rigeneraLibri,
|
||||
optrigenera,
|
||||
generatinglist,
|
||||
optDisp,
|
||||
optStato,
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
dense
|
||||
class="bg-green text-white"
|
||||
>
|
||||
<q-tab
|
||||
<q-tab
|
||||
v-if="lista_prodotti"
|
||||
name="lista"
|
||||
icon="fas fa-list"
|
||||
@@ -46,7 +46,7 @@
|
||||
>
|
||||
</q-tab>
|
||||
<q-tab
|
||||
v-if="tools.isAdmin()"
|
||||
v-if="tools.isAdmin()"
|
||||
name="opzioni"
|
||||
icon="fas fa-save"
|
||||
label="Avanzati"
|
||||
@@ -80,7 +80,22 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center q-py-sm prod_trov">
|
||||
|
||||
<q-inner-loading
|
||||
id="spinner"
|
||||
:showing="generatinglist"
|
||||
>
|
||||
<q-spinner-tail
|
||||
color="primary"
|
||||
size="4em"
|
||||
>
|
||||
</q-spinner-tail>
|
||||
</q-inner-loading>
|
||||
|
||||
<div
|
||||
v-if="!generatinglist"
|
||||
class="text-center q-py-sm prod_trov"
|
||||
>
|
||||
<span v-show="productStore.getNumProdTot() !== arrProducts.length">{{
|
||||
t('ecomm.prodotti_trovati', {
|
||||
qta: arrProducts.length,
|
||||
@@ -93,9 +108,9 @@
|
||||
<q-btn
|
||||
v-if="!showListaArgomenti"
|
||||
rounded
|
||||
label="Rigenera Ordinamento Libri"
|
||||
label="Rigenera Lista"
|
||||
color="primary"
|
||||
@click="generaListaLibri()"
|
||||
@click="rigeneraLibri = true"
|
||||
></q-btn>
|
||||
|
||||
<q-btn
|
||||
@@ -107,10 +122,33 @@
|
||||
@click="clickaddNewBook()"
|
||||
></q-btn>
|
||||
|
||||
<div class="text-subtitle2 text-center">Includi nei filtri:</div>
|
||||
<div
|
||||
class="q-ma-sm column q-pa-sm"
|
||||
style="border: 1px solid #ccc"
|
||||
v-if="showListaArgomenti"
|
||||
>
|
||||
<q-btn-toggle
|
||||
v-model="optrigenera.visibilitaDisp"
|
||||
toggle-color="green"
|
||||
class="q-my-md"
|
||||
:options="optDisp"
|
||||
>
|
||||
</q-btn-toggle>
|
||||
<q-btn-toggle
|
||||
v-model="optrigenera.stato"
|
||||
toggle-color="purple"
|
||||
class="q-my-md"
|
||||
:options="optStato"
|
||||
>
|
||||
</q-btn-toggle>
|
||||
</div>
|
||||
|
||||
<CProductTable
|
||||
:lista_prodotti="lista_prodotti"
|
||||
@update:lista_prodotti="updateProducts"
|
||||
:optcatalogo="optcatalogo"
|
||||
@rigenera="generaListaLibri()"
|
||||
/>
|
||||
</q-tab-panel>
|
||||
|
||||
@@ -674,6 +712,27 @@
|
||||
|
||||
<!--<div ref="pdfContent" class="pdf-content">-->
|
||||
</q-page>
|
||||
<CMyDialog
|
||||
v-model="rigeneraLibri"
|
||||
title="Rigenera Lista"
|
||||
class="q-ma-md"
|
||||
>
|
||||
<div class="q-ma-md column">
|
||||
<q-btn-toggle
|
||||
v-model="optrigenera.visibilitaDisp"
|
||||
toggle-color="green"
|
||||
class="q-my-md"
|
||||
:options="optDisp"
|
||||
>
|
||||
</q-btn-toggle>
|
||||
<q-btn
|
||||
rounded
|
||||
label="Rigenera"
|
||||
color="primary"
|
||||
@click="generaListaLibri()"
|
||||
></q-btn>
|
||||
</div>
|
||||
</CMyDialog>
|
||||
|
||||
<CMyDialog
|
||||
v-model="addnewProd"
|
||||
|
||||
Reference in New Issue
Block a user