- 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

4
.env
View File

@@ -1,6 +1,6 @@
VITE_APP_VERSION="1.2.52"
VITE_APP_VERSION="1.2.53"
VITE_LANG_DEFAULT="it"
VITE_PAO_APP_ID="KKPPAA5KJK435J3KSS9F9D8S9F8SD98F9SDF"
VITE_SERVICE_WORKER_FILE="sw-1.2.52.js"
VITE_SERVICE_WORKER_FILE="sw-1.2.53.js"
VITE_PROJECT_ID_MAIN="5cc0a13fe5c9d156728f400a"
VITE_VUE_ROUTER_MODE="history"

View File

@@ -10,7 +10,7 @@
<meta name="description" content="<%= productDescription %>">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="version" content="1.2.52">
<meta name="version" content="1.2.53">
<meta name="viewport"
content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">

View File

@@ -1,6 +1,6 @@
{
"name": "gruppomacro",
"version": "1.2.52",
"version": "1.2.53",
"description": "Gruppo Macro",
"productName": "Gruppo Macro",
"author": "Surya",
@@ -9,20 +9,20 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8089 APP_VERSION='1.2.52' quasar dev",
"dev": "PORT=8089 APP_VERSION='1.2.53' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "APP_VERSION='1.2.52' quasar build -m spa",
"buildspa": "APP_VERSION='1.2.53' quasar build -m spa",
"lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"",
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.52' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.52' quasar dev",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.53' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.53' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "cnm",
"version": "1.2.52",
"version": "1.2.53",
"description": "Comunita Nuovo Mondo",
"productName": "ComunitaNuovoMondo",
"author": "Surya",
@@ -9,7 +9,7 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8083 APP_VERSION='1.2.52' quasar dev",
"dev": "PORT=8083 APP_VERSION='1.2.53' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production quasar build -m pwa",
@@ -21,8 +21,8 @@
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.52' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.52' quasar dev",
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.53' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.53' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "freeplanet",
"version": "1.2.52",
"version": "1.2.53",
"description": "freeplanet",
"productName": "freeplanet",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8087 APP_VERSION='1.2.52' quasar dev",
"dev": "PORT=8087 APP_VERSION='1.2.53' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -21,8 +21,8 @@
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.52' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.52' quasar dev",
"pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.53' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.53' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "gruppomacro",
"version": "1.2.52",
"version": "1.2.53",
"description": "Gruppo Macro",
"productName": "Gruppo Macro",
"author": "Surya",
@@ -9,20 +9,20 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8089 APP_VERSION='1.2.52' quasar dev",
"dev": "PORT=8089 APP_VERSION='1.2.53' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "APP_VERSION='1.2.52' quasar build -m spa",
"buildspa": "APP_VERSION='1.2.53' quasar build -m spa",
"lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"",
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.52' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.52' quasar dev",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.53' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.53' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "kolibrilab",
"version": "1.2.52",
"version": "1.2.53",
"description": "kolibrilab",
"productName": "kolibrilab",
"author": "Surya Paolo",
@@ -8,11 +8,11 @@
"keywords": [],
"license": "MIT",
"scripts": {
"dev": "PORT=8083 APP_VERSION='1.2.52' quasar dev",
"dev": "PORT=8083 APP_VERSION='1.2.53' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -20,8 +20,8 @@
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint --ext .ts,.vue --ignore-path .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.52' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.52' quasar dev",
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.53' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.53' quasar dev",
"spanorefresh": "NODE_ENV=development NODE_OPTIONS=--max_old_space_size=4096 DEBUG=v8:* quasar dev -m spa",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js"

View File

@@ -1,6 +1,6 @@
{
"name": "nutriben",
"version": "1.2.52",
"version": "1.2.53",
"description": "Nutriben",
"productName": "Nutriben",
"author": "Surya",
@@ -9,20 +9,20 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8093 APP_VERSION='1.2.52' quasar dev",
"dev": "PORT=8093 APP_VERSION='1.2.53' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "APP_VERSION='1.2.52' quasar build -m spa",
"buildspa": "APP_VERSION='1.2.53' quasar build -m spa",
"lint": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\"",
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.52' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.52' quasar dev",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.53' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.53' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "piuchebuono",
"version": "1.2.52",
"version": "1.2.53",
"description": "PiuCheBuono",
"productName": "PiuCheBuono",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8085 APP_VERSION='1.2.52' quasar dev",
"dev": "PORT=8085 APP_VERSION='1.2.53' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -21,8 +21,8 @@
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.52' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.52' quasar dev",
"pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.53' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.53' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -1,6 +1,6 @@
{
"name": "riso",
"version": "1.2.52",
"version": "1.2.53",
"description": "Siamo la Rete Italiana di Scambio Orizzontale, abbiamo creato questa piattaforma per metterla al servizio di chi vuole riscoprire il valore della condivisione e della cooperazione. Valori semplici e profondi che ci aiutano a ritrovare il Senso della Vita, perduto in questa società consumista, e riporti quei Sani Pricìpi Naturali ed Umani di Fratellanza che intere popolazioni antiche conoscevano bene.",
"productName": "Riso",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "APP_VERSION='1.2.52' PORT=8084 quasar dev",
"dev": "APP_VERSION='1.2.53' PORT=8084 quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.52' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.53' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "quasar build -m spa",
@@ -21,8 +21,8 @@
"lintfile": "eslint --ext .js,.ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"lintfileNoJS": "eslint --ext .ts,.vue --ignore-path .gitignore ./ > file.out.txt",
"fix": "eslint -c ./eslint.config.js \"./src*/**/*.{ts,js,cjs,mjs,vue}\" --ignore-pattern .gitignore ./ --fix > file.out.txt",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.52' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.52' quasar dev",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.53' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.53' quasar dev",
"debug": "quasar dev --mode debug",
"test": "echo \"No test specified\" && exit 0",
"generate-sw": "workbox generateSW workbox-config.js",

View File

@@ -3,7 +3,7 @@
/* global workbox */
/* global cfgenv */
const VITE_APP_VERSION = '1.2.52';
const VITE_APP_VERSION = '1.2.53';
// Costanti di configurazione
const DYNAMIC_CACHE = 'dynamic-cache-v2';

View File

@@ -328,6 +328,7 @@ export const shared_consts = {
TABLES_MYGROUPS: 'mygroups',
TABLES_ATTIVITAS: 'attivitas',
TABLES_CATALOG: 'catalogs',
TABLES_PRODUCTS: 'products',
TABLES_LISTA_EDITORI: 'lista_editori',
TABLES_RACCOLTACATALOGHIS: 'raccoltacataloghis',

View File

@@ -112,7 +112,7 @@ export default defineComponent({
const { t } = useI18n();
const userStore = useUserStore();
const globalStore = useGlobalStore();
const products = useProducts();
const Products = useProducts();
const listord = ref(<IOrderCart[]>[]);
const sumval = ref(0);
@@ -137,19 +137,19 @@ export default defineComponent({
const field_updated_fromGM = ref('');
const dataextractedWeb = ref('');
const widthoggetto = ref(40)
const heightoggetto = ref(40)
const widthoggetto = ref(40);
const heightoggetto = ref(40);
// Crea una copia locale reattiva di modelValue
const optcatalogo = ref<IOptCatalogo>({ ...props.modelValue });
const mywidthogg = computed(() => {
return widthoggetto.value * tools.getScaleX(optcatalogo.value, props.scheda)
})
return widthoggetto.value * tools.getScaleX(optcatalogo.value, props.scheda);
});
const myheightogg = computed(() => {
return heightoggetto.value * tools.getScaleY(optcatalogo.value, props.scheda)
})
return heightoggetto.value * tools.getScaleY(optcatalogo.value, props.scheda);
});
const editOn = computed({
get(): boolean {
@@ -213,7 +213,7 @@ export default defineComponent({
const scale = ref(1);
const getTesto_Right = computed(() => {
return products.replaceKeyWordsByProduct(
return Products.replaceKeyWordsByProduct(
optcatalogo.value,
myproduct.value!,
props.scheda.testo_right!,
@@ -221,7 +221,7 @@ export default defineComponent({
);
});
const getTesto_Right_attaccato = computed(() => {
return products.replaceKeyWordsByProduct(
return Products.replaceKeyWordsByProduct(
optcatalogo.value,
myproduct.value!,
props.scheda.testo_right_attaccato!,
@@ -229,7 +229,7 @@ export default defineComponent({
);
});
const getTesto_Debug = computed(() => {
return products.replaceKeyWordsByProduct(
return Products.replaceKeyWordsByProduct(
optcatalogo.value,
myproduct.value!,
{ contenuto: '{debug}', maxlength: 10000 },
@@ -238,7 +238,7 @@ export default defineComponent({
});
const getTesto_Bottom = computed(() => {
return products.replaceKeyWordsByProduct(
return Products.replaceKeyWordsByProduct(
optcatalogo.value,
myproduct.value!,
props.scheda.testo_bottom!,
@@ -255,7 +255,7 @@ export default defineComponent({
/*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
})*/
@@ -271,7 +271,7 @@ export default defineComponent({
}
if (myproduct.value) {
const ris = await products.addtoCartBase({
const ris = await Products.addtoCartBase({
$q,
t,
id: myproduct.value._id,
@@ -286,8 +286,7 @@ export default defineComponent({
function getnumstore() {
if (myproduct.value) {
if (myproduct.value.storehouses)
return myproduct.value.storehouses.length;
if (myproduct.value.storehouses) return myproduct.value.storehouses.length;
else return 0;
}
return 0;
@@ -320,13 +319,6 @@ export default defineComponent({
}
}
function initproduct() {
myorder.quantity = 0;
myorder.quantitypreordered = 0;
myorder.idStorehouse = '';
myorder.idGasordine = '';
}
async function updateproduct(atload: boolean, forza?: boolean) {
let carica = true;
@@ -343,13 +335,13 @@ export default defineComponent({
updateproductmodif(null, forza);
}
// products.updateQuantityAvailable(myproduct.value._id)
// Products.updateQuantityAvailable(myproduct.value._id)
}
async function ricarica() {
endload.value = false;
if (myproduct.value) {
const prod = await products.loadProductById(myproduct.value._id);
const prod = await Products.loadProductById(myproduct.value._id);
if (prod) {
myproduct.value = prod;
}
@@ -361,9 +353,9 @@ export default defineComponent({
console.log('CCATALOGOCARD: updateproductmodif');
try {
if (element?._id) {
myproduct.value = await products.getProductById(element?._id, forza);
myproduct.value = await Products.getProductById(element?._id, forza);
} else {
myproduct.value = await products.getProductById(props.id, forza);
myproduct.value = await Products.getProductById(props.id, forza);
}
updateLabel();
@@ -441,9 +433,7 @@ export default defineComponent({
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 = '';
@@ -451,8 +441,7 @@ export default defineComponent({
} catch (e) {}
if (labelDataArrivoMerce.value !== dataArrivoMerce)
labelDataArrivoMerce.value = dataArrivoMerce;
if (labelDataRitiro.value !== dataRitiro)
labelDataRitiro.value = dataRitiro;
if (labelDataRitiro.value !== dataRitiro) labelDataRitiro.value = dataRitiro;
updateTimerLabel();
}
@@ -487,9 +476,7 @@ export default defineComponent({
return (
myproduct.value.gasordine &&
myproduct.value.gasordine.dataora_chiusura_ordini &&
tools.getCountDown(
myproduct.value.gasordine.dataora_chiusura_ordini
) === ''
tools.getCountDown(myproduct.value.gasordine.dataora_chiusura_ordini) === ''
);
} else return false;
}
@@ -501,7 +488,7 @@ export default defineComponent({
async function load() {
indvariazSel.value = -1;
initproduct();
Products.initproduct(myorder);
await updateproduct(true, true);
labelDataArrivoMerce.value = '';
labelDataRitiro.value = '';
@@ -509,30 +496,9 @@ export default defineComponent({
// console.log('Load', myproduct.value.name)
if (myproduct.value) {
arrordersCart.value = products.getOrdersCartInAttesaByIdProduct(
myproduct.value._id
);
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();
@@ -554,9 +520,7 @@ export default defineComponent({
function visuListDisponibili() {
if (myproduct.value) {
openlistorders.value = true;
sumval.value = products.getSumQtyOrderProductInOrdersCart(
myproduct.value._id
);
sumval.value = Products.getSumQtyOrderProductInOrdersCart(myproduct.value._id);
listord.value = arrordersCart.value.filter((orderscart: IOrderCart) =>
orderscart.items!.reduce((accumulator, item) => {
@@ -569,9 +533,7 @@ export default defineComponent({
function visuListBookable() {
if (myproduct.value) {
openlistorders.value = true;
sumval.value = products.getSumQtyPreOrderInOrdersCart(
myproduct.value._id
);
sumval.value = Products.getSumQtyPreOrderInOrdersCart(myproduct.value._id);
listord.value = arrordersCart.value.filter((orderscart: IOrderCart) =>
orderscart.items!.reduce((accumulator, item) => {
@@ -601,8 +563,7 @@ export default defineComponent({
(myproduct.value.bookableGASBloccatiQty +
myproduct.value.QuantitaPrenotateInAttesa!) *
myproduct.value.productInfo.weight!,
myproduct.value.qtyToReachForGas *
myproduct.value.productInfo.weight!
myproduct.value.qtyToReachForGas * myproduct.value.productInfo.weight!
) / 100
);
else return 0;
@@ -770,12 +731,11 @@ export default defineComponent({
loading.value = true;
updatefromgm.value = true;
field_updated_fromGM.value = '';
field_updated_fromGM.value =
await globalStore.getGM_FieldOf_T_Web_Articoli(
myproduct.value.productInfo.sku!,
field,
shared_consts.CmdQueryMs.GET
);
field_updated_fromGM.value = await globalStore.getGM_FieldOf_T_Web_Articoli(
myproduct.value.productInfo.sku!,
field,
shared_consts.CmdQueryMs.GET
);
loading.value = false;
}
}
@@ -798,7 +758,7 @@ export default defineComponent({
}
if (!dataupdated) {
tools.showNegativeNotif($q, t('dbgm.dati_non_estratti'));
visudataextracted.value = false
visudataextracted.value = false;
}
return dataupdated;
})
@@ -858,7 +818,7 @@ export default defineComponent({
openlistorders,
func_tools,
toolsext,
products,
Products,
arrordersCart,
endload,
shared_consts,
@@ -918,7 +878,7 @@ export default defineComponent({
widthoggetto,
heightoggetto,
mywidthogg,
myheightogg
myheightogg,
};
},
});

View File

@@ -82,16 +82,17 @@ export default defineComponent({
// console.log('options', props.options)
if (props.options.length > 0) {
props.options.forEach((rec: any, index) => {
// console.log('rec', rec)
if (props.type === costanti.FieldType.multiselect) {
if (!!myval.value) {
/*
console.log('rec', rec)
console.log('optval', props.optval)
console.log('optlab', props.optlab)
console.log('myval.value', myval.value)
console.log('rec[props.optval]', rec[props.optval])
*/
*/
let trovato = false

View File

@@ -28,7 +28,7 @@ export default defineComponent({
// console.log('$route.path', $route.path)
rec.value = globalStore.getPage(props.path)
console.log('rec', rec)
// console.log('rec', rec)
}
onMounted(mounted)

View File

@@ -74,7 +74,7 @@ export default defineComponent({
const argomentistr = ref('')
const numprodtot = ref(0)
const editorestr = ref('')
const editore_escludi_str = ref('')
const editorestr_escludi = ref('')
const products = useProducts()
@@ -142,11 +142,11 @@ export default defineComponent({
editorestr.value += rectrovato?.name + ' '
}
}
editore_escludi_str.value = ''
editorestr_escludi.value = ''
if (myrec.value.editore_escludi) {
for (const receditore of myrec.value.editore_escludi) {
const rectrovato: IPublisher = products.publishers.find((editore: IPublisher) => editore._id === receditore)
editores_escludi_tr.value += rectrovato?.name + ' '
editorestr_escludi.value += rectrovato?.name + ' '
}
}

View File

@@ -93,7 +93,7 @@
<span class="text-blue">{{ editorestr }}</span>
</div>
<div
v-if="!tools.isUtente() && editore_escludi_str && dettagli"
v-if="!tools.isUtente() && editorestr_escludi && dettagli"
class="text-caption text-h7 text-grey q-pb-xs"
>
<q-icon name="fas fa-book-open" /> {{ $t('cataloglist.editore_escludi') }}:

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)"

View File

@@ -1,4 +1,12 @@
import { PropType, computed, defineComponent, onMounted, ref, watch } from 'vue';
import {
PropType,
computed,
defineComponent,
onMounted,
ref,
watch,
reactive,
} from 'vue';
import draggable from 'vuedraggable';
import { tools } from '@tools';
@@ -7,7 +15,8 @@ import { useQuasar } from 'quasar';
import { useRouter } from 'vue-router';
import { useGlobalStore } from '@src/store/globalStore';
import { useProducts } from '@src/store/productStore';
import { useProducts } from '@src/store/Products';
import { useUserStore } from '@src/store/UserStore';
import { CMyValueDb } from '@src/components/CMyValueDb';
import { CSchedaProdotto } from '@src/components/CSchedaProdotto';
@@ -20,7 +29,6 @@ import { IAuthor, ICatProd } from 'app/src/model';
import type { IMyScheda, IOptCatalogo, IProduct } from '@src/model';
import { shared_consts } from 'app/src/common/shared_vuejs';
import { useProducts } from 'app/src/store/Products';
import { CViewTable } from '../CViewTable';
import { CLabel } from '../CLabel';
import { useI18n } from 'vue-i18n';
@@ -67,16 +75,17 @@ export default defineComponent({
// Copia locale della lista_prodotti per manipolazione interna
const internalProducts = ref([...(props.lista_prodotti || [])]);
const productStore = useProducts();
const $router = useRouter();
const { t } = useI18n();
const $q = useQuasar();
const arrordersCart = ref(<IOrderCart[]>[]);
const globalStore = useGlobalStore();
const products = useProducts();
const ProductStore = useProducts();
const userStore = useUserStore();
const showProd = ref(false);
const selProd = ref(<IProduct | null>null);
@@ -97,6 +106,7 @@ export default defineComponent({
const addstr = ref('');
const optionscatalogo = ref(<any>{ maxlength: 0 });
function handleUpdate(newList) {
@@ -302,6 +312,14 @@ export default defineComponent({
noexp: true,
notsortable: true,
},
{
name: 'addtocart',
label: 'Carrello',
field: 'addtocart',
align: 'center',
noexp: true,
notsortable: true,
},
{ name: 'name', label: 'Titolo', field: 'name', align: 'left' },
{
name: 'sottotitolo',
@@ -436,18 +454,28 @@ export default defineComponent({
const allColumnsComputed = computed(() => {
return allColumns.value.filter(
(col) => !col.visu || col.visu === costanti.VISUCAMPI.PER_TUTTI || (col.visu === costanti.VISUCAMPI.PER_EDITORE && tools.isCollaboratore())
(col) =>
!col.visu ||
col.visu === costanti.VISUCAMPI.PER_TUTTI ||
(col.visu === costanti.VISUCAMPI.PER_EDITORE && tools.isCollaboratore())
);
});
async function mounted() {
console.log('mounted CProductTable');
//myorder = ProductStore.createMyOrder()
// ProductStore.initproduct(myorder);
internalProducts.value.forEach((p: IProduct) => {
p.myorder = ProductStore.createMyOrder();
});
// console.log('mounted CProductTable');
loading.value = true;
if (props.table === shared_consts.TABLES_CATALOG) {
selectedColumns.value = selectedColumns_Catalogs.value;
} else {
// "products"
// "ProductStore"
selectedColumns.value = tools.isUtente()
? selectedColumns_Utenti.value
: selectedColumns_Editori.value;
@@ -455,10 +483,10 @@ export default defineComponent({
addstr.value = tools.addstrCookie(props.table);
if (props.table === 'products') {
if (props.table === shared_consts.TABLES_PRODUCTS) {
allColumns.value = allColumns_Catalog.value;
isVisibleEditBtn.value = true;
} else if (props.table === 'catalogs') {
} else if (props.table === shared_consts.TABLES_CATALOG) {
allColumns.value = allColumns_Raccolta.value;
isVisibleEditBtn.value = false;
}
@@ -522,6 +550,8 @@ export default defineComponent({
return tools.getstrDate(catalog.data_online);
case 'data_online_stampa':
return tools.getstrDate(catalog.data_online_stampa);
case 'addtocart':
return true;
case 'image':
return catalog.foto_collana?.imagefile
? tools.getFullFileNameByImageFile(
@@ -535,7 +565,10 @@ export default defineComponent({
switch (field.field) {
case 'image':
return element.productInfo?.imagefile
? tools.getFullFileNameByImageFile('productInfos', element.productInfo?.imagefile)
? tools.getFullFileNameByImageFile(
'productInfos',
element.productInfo?.imagefile
)
: element.productInfo?.image_link;
case 'name':
@@ -576,21 +609,25 @@ export default defineComponent({
return element.arrvariazioni?.[0]?.edizione;
case 'casaeditrice':
return products.getCasaEditriceByIdPublisher(element.productInfo?.idPublisher);
return ProductStore.getCasaEditriceByIdPublisher(
element.productInfo?.idPublisher
);
case 'idCollana':
return tools.formatCollane(element.productInfo?.idCollana);
case 'stato':
return products.getDescrStatiProdottoByIdStatoProdotto(
return ProductStore.getDescrStatiProdottoByIdStatoProdotto(
element.productInfo?.idStatoProdotto || ''
);
case 'tipologia':
return products.getDescrByIdTipologia(element.arrvariazioni?.[0]?.idTipologia || '');
return ProductStore.getDescrByIdTipologia(
element.arrvariazioni?.[0]?.idTipologia || ''
);
case 'tipoformato':
return products.getDescrByIdTipoFormato(
return ProductStore.getDescrByIdTipoFormato(
element.arrvariazioni?.[0]?.idTipoFormato || ''
);
@@ -599,11 +636,11 @@ export default defineComponent({
case 'prezzo':
// return element.price ? '€ ' + element.price.toFixed(2) : '';
return '€ ' + element.arrvariazioni?.[0]?.price.toFixed(2);
return '€ ' + element.arrvariazioni?.[0]?.price?.toFixed(2);
case 'prezzo_sconto':
// return element.sale_price ? '€ ' + element.sale_price.toFixed(2) : '';
return '€ ' + element.arrvariazioni?.[0]?.sale_price.toFixed(2);
return '€ ' + element.arrvariazioni?.[0]?.sale_price?.toFixed(2);
case 'rank3M':
return element.productInfo?.rank3M;
@@ -637,7 +674,9 @@ export default defineComponent({
case 'quantity':
if (tools.isUtente())
return tools.getDescrQuantitàByQuantity(element.arrvariazioni?.[0]?.quantita);
return tools.getDescrQuantitàByQuantity(
element.arrvariazioni?.[0]?.quantita
);
else return element.arrvariazioni?.[0]?.quantita;
default:
@@ -659,13 +698,13 @@ export default defineComponent({
: 'text-red';
case 'stato':
if (products.isProssimaUscita(element.productInfo)) {
if (ProductStore.isProssimaUscita(element.productInfo)) {
return 'bg-purple-3';
}
if (products.isPrevendita(element.productInfo)) {
if (ProductStore.isPrevendita(element.productInfo)) {
return 'bg-blue-3';
}
if (products.isNonVendibile(element.productInfo)) {
if (ProductStore.isNonVendibile(element.productInfo)) {
return 'bg-grey';
}
return '';
@@ -680,14 +719,14 @@ export default defineComponent({
}
case 'quantity':
if (products.isPubblicato(element.productInfo)) {
if (products.isQtaLimitata(element)) {
if (ProductStore.isPubblicato(element.productInfo)) {
if (ProductStore.isQtaLimitata(element)) {
return 'bg-yellow';
}
if (products.isInEsaurendo(element)) {
if (ProductStore.isInEsaurendo(element)) {
return 'bg-orange';
}
if (products.isEsaurito(element)) {
if (ProductStore.isEsaurito(element)) {
return 'text-white bg-red-10';
}
}
@@ -846,14 +885,19 @@ export default defineComponent({
persistent: false,
})
.onOk(() => {
internalProducts.value = internalProducts.value.filter((p: any) => p._id !== product._id);
internalProducts.value = internalProducts.value.filter(
(p: any) => p._id !== product._id
);
emit('update:lista_prodotti', internalProducts.value); // Notifica il parent del cambiamento
});
};
// 8. Salvataggio delle colonne selezionate in un cookie
const saveSelectedColumns = () => {
tools.setCookie(addstr.value + 'selColCat_2', JSON.stringify(selectedColumns.value));
tools.setCookie(
addstr.value + 'selColCat_2',
JSON.stringify(selectedColumns.value)
);
};
// 9. Watcher per salvare automaticamente le preferenze quando cambiano
@@ -901,7 +945,7 @@ export default defineComponent({
let link_macro = element.productInfo?.link_macro;
if (tools.isUtente() && link_macro) {
tools.openUrl(link_macro + '?utm_source=catalog&id=' + props.idcatalog)
tools.openUrl(link_macro + '?utm_source=catalog&id=' + props.idcatalog);
} else {
selProd.value = element;
@@ -910,7 +954,7 @@ export default defineComponent({
} else if (isCatalog()) {
// Apri la pagina del catalogo
if (element.idPageAssigned) {
const mypagepath = productStore.getPathByPage(element.idPageAssigned);
const mypagepath = ProductStore.getPathByPage(element.idPageAssigned);
// fai il route sulla pagina myfilename
$router.push(`/${mypagepath}`);
@@ -953,9 +997,9 @@ export default defineComponent({
console.log('PRODUCT TABLE: updateproductmodif');
try {
if (element?._id) {
selProd.value = await products.getProductById(element?._id);
selProd.value = await ProductStore.getProductById(element?._id);
} else {
selProd.value = await products.getProductById(selProd.value?._id);
selProd.value = await ProductStore.getProductById(selProd.value?._id);
}
// update record inside internalProducts
@@ -1019,7 +1063,9 @@ export default defineComponent({
return sortDirection.value === 1 ? aVal - bVal : bVal - aVal;
}
if (typeof aVal === 'string' && typeof bVal === 'string') {
return sortDirection.value === 1 ? aVal.localeCompare(bVal) : bVal.localeCompare(aVal);
return sortDirection.value === 1
? aVal.localeCompare(bVal)
: bVal.localeCompare(aVal);
}
return sortDirection.value === 1
? String(aVal).localeCompare(String(bVal))
@@ -1092,7 +1138,9 @@ export default defineComponent({
}
function isSortable(field: string): boolean {
return allColumns && !allColumns.value.find((col) => col.name === field)?.notsortable;
return (
allColumns && !allColumns.value.find((col) => col.name === field)?.notsortable
);
}
function getImageByElement(element) {
@@ -1107,10 +1155,48 @@ export default defineComponent({
}
function isProduct() {
return props.table === 'products';
return props.table === shared_consts.TABLES_PRODUCTS;
}
function isCatalog() {
return props.table === 'catalogs';
return props.table === shared_consts.TABLES_CATALOG;
}
/*
async function addToCart(element: any) {
if (props.table === shared_consts.TABLES_PRODUCTS) {
await updateProduct(element);
if (!!element) {
arrordersCart.value = ProductStore.getOrdersCartInAttesaByIdProduct(
element._id
);
ProductStore.setMyOrder(myorder, element, null, {
setstore: false,
});
}
}
}*/
async function addtoCart(element: any, add: boolean) {
if (!userStore.isLogged) {
tools.showNeutralNotif($q, t('ecomm.area_personale'));
globalStore.rightDrawerOpen = true;
return false;
}
ProductStore.setMyOrder(element.myorder, element, null, {
setstore: false,
});
const ris = await ProductStore.addtoCartBase({
$q,
t,
id: element._id,
order: element.myorder,
addqty: add,
});
updateProduct(element);
}
onMounted(mounted);
@@ -1144,7 +1230,7 @@ export default defineComponent({
updateproductmodif,
optionscatalogo,
t,
products,
ProductStore,
sortTable,
sortAttribute,
sortDirection,
@@ -1160,6 +1246,8 @@ export default defineComponent({
isProduct,
isCatalog,
allColumnsComputed,
addtoCart,
arrordersCart,
};
},
});

View File

@@ -54,9 +54,7 @@
<span>{{ col.label }}</span>
<span v-if="isSortable(col.name)">
<q-icon
v-if="
sortAttribute === col.name && optcatalogo.showListaArgomenti
"
v-if="sortAttribute === col.name && optcatalogo.showListaArgomenti"
:name="sortDirection === 1 ? 'expand_less' : 'expand_more'"
size="36px"
class="q-ml-xs"
@@ -131,11 +129,40 @@
/>
</span>
</td>
<td v-else-if="field.name === 'addtocart' && isColumnVisible('addtocart')">
<q-btn
icon-right="fas fa-cart-plus"
color="positive"
rounded
dense
size="sm"
:label="
t('products.addcart', {
qta: ProductStore.qtaNextAdd(element.myorder, element),
})
"
@click="addtoCart(element, true)"
>
</q-btn>
<q-btn
v-if="ProductStore.enableSubQty(element.myorder)"
icon-right="fas fa-cart-arrow-down"
color="negative"
rounded
dense
size="sm"
:label="
t('products.subcart', {
qta: ProductStore.qtaNextSub(element.myorder, element),
})
"
@click="addtoCart(element, false)"
>
</q-btn>
</td>
<!-- Immagine Piccola -->
<td
v-else-if="field.name === 'image' && isColumnVisible('image')"
>
<td v-else-if="field.name === 'image' && isColumnVisible('image')">
<q-img
:src="
getImageByElement(element)
@@ -162,9 +189,7 @@
</td>
<!-- Azioni -->
<td
v-else-if="
field.name === 'actions' && isColumnVisible('actions', true)
"
v-else-if="field.name === 'actions' && isColumnVisible('actions', true)"
>
<q-btn-dropdown
label="Azioni"

View File

@@ -365,7 +365,7 @@ export default defineComponent({
mykey: 'idCatProds',
debounce: '1000',
type: costanti.FieldType.multiselect,
jointable: 'catprtotali',
jointable: 'catprods',
dense: true,
},
{

View File

@@ -72,7 +72,7 @@
v-model="causal"
rounded
filled
maxlength="80"
maxlength="120"
counter
:label="$t('circuit.note_richiedente')"
class="q-ma-sm full-width q-px-xs"

View File

@@ -17,7 +17,6 @@ export interface ICatalog {
collana_info?: ICollana
descr_introduttiva?: string
idPageAssigned?: string
idPageAssigned_stampa?: string
referenti?: string[]
img_bordata?: IImg,
img_intro?: IImg,
@@ -65,7 +64,6 @@ export interface IRaccoltaCatalogo {
foto_raccolta?: IImg,
idPageAssigned?: string
idPageAssigned_stampa?: string
nomefile_da_generare?: string

View File

@@ -195,6 +195,7 @@ export interface IProductsState {
products: IProduct[]
authors: IAuthor[]
publishers: IPublisher[]
publishers_sort_qty?: IPublisher[]
stati_prodotto?: T_Web_StatiProdotto[]
tipologie?: T_Web_Tipologie[]
tipoformato?: T_WEB_TipiFormato[]

View File

@@ -80,6 +80,7 @@ const msg_it = {
canBeShipped: 'Può essere spedito',
canBeBuyOnline: 'Acquistabile On Line',
date: 'Data',
date_pub: 'Data Pubbl.',
quantity: 'Quantità',
quantityAvailable: 'Disponibili',
stockQty: 'In Magazzino',
@@ -2054,7 +2055,6 @@ const msg_it = {
isCatalogoGenerale: 'Fa parte del Catalogo Generale',
collane: 'Collane',
idPageAssigned: 'Pagina Assegnata',
idPageAssigned_stampa: 'Pagina Assegnata (per STAMPA)',
descr_introduttiva: 'Descrizione Introduttiva (circa 1300 battute)',
editore: 'Marchio Editoriale',
editore_includi: 'Includi Editoriale',

View File

@@ -63,7 +63,7 @@ export const useCatalogStore = defineStore('CatalogStore', {
ris = await Api.SendReq('/catalogs/id/' + id, 'GET', null)
.then((res) => {
console.log('catalogs', res.data.catalog);
// console.log('catalogs', res.data.catalog);
if (res.data.catalog) {
// console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
return res.data.catalog;

View File

@@ -140,12 +140,6 @@ export const colTableRaccoltaCataloghi = [
fieldtype: costanti.FieldType.select,
jointable: 'mypages_id',
}),
AddCol({
name: 'idPageAssigned_stampa',
label_trans: 'cataloglist.idPageAssigned_stampa',
fieldtype: costanti.FieldType.select,
jointable: 'mypages_id',
}),
AddCol({
name: 'nomefile_da_generare',
@@ -224,14 +218,14 @@ export const colTableCatalogList = [
name: 'editore',
label_trans: 'cataloglist.editore_includi',
fieldtype: costanti.FieldType.multiselect,
jointable: 'publishers_totali',
jointable: 'publishers_totali_sort_qty',
isadvanced_field: true,
}),
AddCol({
name: 'editore_escludi',
label_trans: 'cataloglist.editore_escludi',
fieldtype: costanti.FieldType.multiselect,
jointable: 'publishers_totali',
jointable: 'publishers_totali_sort_qty',
isadvanced_field: true,
}),
AddCol({
@@ -272,13 +266,6 @@ export const colTableCatalogList = [
label_trans: 'cataloglist.pdf_online',
}),
AddCol({
name: 'idPageAssigned_stampa',
label_trans: 'cataloglist.idPageAssigned_stampa',
fieldtype: costanti.FieldType.select,
jointable: 'mypages_id',
}),
AddCol({
name: 'img_bordata_stampa',
label_trans: 'cataloglist.img_bordata_stampa',
@@ -4607,6 +4594,13 @@ export const fieldsTable = {
colkey: '_id',
collabel: (row: any) => row.name + ' (' + row.quanti + ')',
},
{
value: 'publishers_totali_sort_qty',
label: 'Nome',
columns: colTablePublisher,
colkey: '_id',
collabel: (row: any) => row.name + ' (' + row.quanti + ')',
},
{
value: 'catais',
label: 'Categorie AI',

View File

@@ -101,6 +101,7 @@ export const tools = {
FILTER_MYFOLLOW: 2,
COOK_TIPOCONTO: 'TC_',
COOK_ARGOM: 'CK_ARG',
COOK_SEARCH: 'SEARCH_',
COOK_SELCART: 'SELCART_',
COOK_SELGAS: 'SELGAS',
@@ -4105,7 +4106,7 @@ export const tools = {
},
setLangAtt($q: any, $router: Router, mylang: string) {
console.log('setLangAtt =', mylang);
// console.log('setLangAtt =', mylang);
const globalStore = useGlobalStore();
if (!mylang || typeof mylang !== 'string') {

View File

@@ -36,7 +36,7 @@ import { defineStore } from 'pinia';
import { useUserStore } from '@store/UserStore';
import { toolsext } from '@store/Modules/toolsext';
import { useGlobalStore } from './globalStore';
import { ref } from 'vue';
import { ref, reactive } from 'vue';
import objectId from '@src/js/objectId';
import { costanti } from '@costanti';
@@ -1109,7 +1109,7 @@ export const useProducts = defineStore('Products', {
ris = await Api.SendReq('/products/id/' + id, 'GET', null)
.then((res) => {
console.log('product', res.data.product);
// console.log('product', res.data.product);
if (res.data.product) {
// console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
this.updateDataProduct(res);
@@ -1242,8 +1242,8 @@ export const useProducts = defineStore('Products', {
if (res && res.msgerr) {
return res;
} else if (res && res.risult) {
order.quantity = res.myord.quantity;
order.quantitypreordered = res.myord.quantitypreordered;
order.quantity = res?.myord?.quantity;
order.quantitypreordered = res?.myord?.quantitypreordered;
}
return res;
});
@@ -1672,7 +1672,7 @@ export const useProducts = defineStore('Products', {
},
qtaNextAdd(myorder: IOrder, myproduct: IProduct): number {
let step = myproduct.minStepQty;
let step = myproduct.minStepQty || 1;
if (this.getQtyAvailable(myproduct) > 0) {
if (myorder.quantity === 0) step = myproduct.minBuyQty;
} else {
@@ -2557,5 +2557,52 @@ export const useProducts = defineStore('Products', {
return '';
}
},
createMyOrder() {
let myorder = reactive(<IOrder>{
idapp: tools.getEnv('VITE_APP_ID'),
quantity: 0,
quantitypreordered: 0,
idStorehouse: '',
idGasordine: '',
storehouse: {},
gasordine: { active: false },
});
return myorder;
},
initproduct(myorder: IOrder) {
myorder.quantity = 0;
myorder.quantitypreordered = 0;
myorder.idStorehouse = '';
myorder.idGasordine = '';
},
setMyOrder(myorder: IOrder, myproduct: IProduct, storeSelected: any = null, options: any = {setstore: false}) {
if (myproduct.storehouses && myproduct.storehouses.length === 1) {
// Se solo 1 presente, metto fisso l'unico negozio !
myorder.idStorehouse = myproduct.storehouses[0]._id;
} else if (myproduct.storehouse) {
myorder.idStorehouse = myproduct.storehouse._id;
}
if (myproduct.gasordine) {
myorder.idGasordine = myproduct.gasordine._id;
}
const ord = this.getOrderProductInCart(myproduct._id);
if (ord) {
myorder.quantity = ord.quantity;
myorder.quantitypreordered = ord.quantitypreordered;
// Seleziona il Negozio che avevo già scelto nell'ordine !
if (options.setstore && ord.idStorehouse) {
storeSelected = ord.idStorehouse;
}
}
}
},
});

View File

@@ -244,7 +244,9 @@ export const useGlobalStore = defineStore('GlobalStore', {
sovrascriviPaginaDefaultFromTemplate:
(state: IGlobalState) => (idTemplate: string, origDimensioni: IDimensioni) => {
const myfindelem = state.myelems.find((myelem: IMyElem) => myelem._id === idTemplate);
const myfindelem = state.myelems.find(
(myelem: IMyElem) => myelem._id === idTemplate
);
const precname = origDimensioni.name;
@@ -255,7 +257,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
// myelemtocopy.scheda._id = origScheda.scheda?._id;
myelemtocopy.catalogo.dimensioni_def.isTemplate = false;
myelemtocopy.catalogo.dimensioni_def.name = precname;
myelemtocopy.catalogo.dimensioni_def.linkIdTemplate = origDimensioni.linkIdTemplate;
myelemtocopy.catalogo.dimensioni_def.linkIdTemplate =
origDimensioni.linkIdTemplate;
return myelemtocopy.catalogo;
}
@@ -266,13 +269,15 @@ export const useGlobalStore = defineStore('GlobalStore', {
sovrascriviAreadistampaFromTemplate:
(state: IGlobalState) => (idTemplate: string, optCatalogo: IOptCatalogo) => {
const myfindelem = state.myelems.find((myelem: IMyElem) => myelem._id === idTemplate);
const myfindelem = state.myelems.find(
(myelem: IMyElem) => myelem._id === idTemplate
);
if (myfindelem) {
const myelemtocopy = tools.jsonCopy(myfindelem);
if (myelemtocopy) {
const linkIdTemplate = myelemtocopy.catalogo.print_linkIdTemplate
const linkIdTemplate = myelemtocopy.catalogo.print_linkIdTemplate;
myelemtocopy.catalogo.print_isTemplate = false;
myelemtocopy.catalogo.print_linkIdTemplate = linkIdTemplate;
@@ -304,24 +309,31 @@ export const useGlobalStore = defineStore('GlobalStore', {
},
getColByStatusSkills: (state: IGlobalState) => (id: number) => {
const ctrec = state.statusSkills.find((mystatus: IStatusSkill) => mystatus._id === id);
const ctrec = state.statusSkills.find(
(mystatus: IStatusSkill) => mystatus._id === id
);
return ctrec && ctrec.color ? ctrec.color : 'green';
},
getStatusSkillById: (state: IGlobalState) => (id: number) => {
const ctrec = state.statusSkills.find((mystatus: IStatusSkill) => mystatus._id === id);
const ctrec = state.statusSkills.find(
(mystatus: IStatusSkill) => mystatus._id === id
);
return ctrec ? ctrec.descr : '';
},
getStatusSkillIconById: (state: IGlobalState) => (id: number) => {
const ctrec = state.statusSkills.find((mystatus: IStatusSkill) => mystatus._id === id);
const ctrec = state.statusSkills.find(
(mystatus: IStatusSkill) => mystatus._id === id
);
return ctrec ? ctrec.icon : '';
},
isNewVersionAvailable: (state: IGlobalState) => {
// console.log('cfgServer', cfgServer)
const serversrec = state.cfgServer.find(
(x) => x.chiave === toolsext.SERVKEY_VERS && x.idapp === tools.getEnv('VITE_APP_ID')
(x) =>
x.chiave === toolsext.SERVKEY_VERS && x.idapp === tools.getEnv('VITE_APP_ID')
);
// console.log('Record ', serversrec)
if (serversrec) {
@@ -499,7 +511,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
else if (table === 'mypages_id') ris = state.mypage;
else if (table === toolsext.TABMYELEMS) ris = state.myelems;
else if (table === toolsext.TABCATALOGS) ris = catalogStore.catalogs!;
else if (table === toolsext.TABRACCOLTA_CATALOGHI) ris = catalogStore.raccoltacataloghis!;
else if (table === toolsext.TABRACCOLTA_CATALOGHI)
ris = catalogStore.raccoltacataloghis!;
else if (table === toolsext.TABCALZOOM) ris = state.calzoom;
else if (table === 'producers') ris = state.producers;
else if (table === 'storehouses') ris = state.storehouses;
@@ -522,6 +535,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
else if (table === 'authors') ris = Products.authors;
else if (table === 'publishers') ris = Products.publishers;
else if (table === 'publishers_totali') ris = Products.publishers;
else if (table === 'publishers_totali_sort_qty')
ris = Products.publishers_sort_qty;
else if (table === 't_web_statiprodottos') ris = Products.stati_prodotto;
else if (table === 't_web_tipologies') ris = Products.tipologie;
else if (table === 't_web_tipiformatos') ris = Products.tipoformato;
@@ -556,7 +571,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
else if (table === toolsext.TABSECTORS) return state.sectors;
else if (table === 'sectorgoods') return state.sectorgoods;
else if (table === 'catgrps') return state.catgrps;
else if (table === 'schedeopt') return Products.getSchedeOptByArrSchede(state.myschedas);
else if (table === 'schedeopt')
return Products.getSchedeOptByArrSchede(state.myschedas);
else if (table === 'provinces')
return state.provinces.filter(
(rec: IProvince) => !rec.card && rec.prov !== 'ITA' && rec.prov !== 'EST'
@@ -567,10 +583,12 @@ export const useGlobalStore = defineStore('GlobalStore', {
);
if (arrprov) {
// const idCardArray: { _id: number, card: string }[] = arrprov.map(({ _id, card }) => ({ _id, card }));
const idCardArray: { card: string; label: string }[] = arrprov.map(({ card }) => ({
card,
label: card,
}));
const idCardArray: { card: string; label: string }[] = arrprov.map(
({ card }) => ({
card,
label: card,
})
);
return idCardArray;
}
return [];
@@ -601,7 +619,9 @@ export const useGlobalStore = defineStore('GlobalStore', {
getdestnewsletterbyId:
(mystate: IGlobalState) =>
(id: string): string => {
const myrec = mystate.destnewsletter.find((rec: IDestNewsletter) => rec._id === id);
const myrec = mystate.destnewsletter.find(
(rec: IDestNewsletter) => rec._id === id
);
return !!myrec ? myrec.descr! : '';
},
},
@@ -624,7 +644,15 @@ export const useGlobalStore = defineStore('GlobalStore', {
return [];
},
setValueSettingsByKey({ key, value, serv }: { key: string; value: any; serv: boolean }): any {
setValueSettingsByKey({
key,
value,
serv,
}: {
key: string;
value: any;
serv: boolean;
}): any {
// Update the Server
// Update in Memory
@@ -633,7 +661,10 @@ export const useGlobalStore = defineStore('GlobalStore', {
else myrec = this.settings.find((rec: any) => rec.key === key);
if (myrec) {
if (myrec.type === costanti.FieldType.date || myrec.type === costanti.FieldType.onlydate)
if (
myrec.type === costanti.FieldType.date ||
myrec.type === costanti.FieldType.onlydate
)
myrec.value_date = value;
else if (
myrec.type === costanti.FieldType.number ||
@@ -651,9 +682,15 @@ export const useGlobalStore = defineStore('GlobalStore', {
const myrec = this.getrecSettingsByKey(key, serv);
// console.log('getValueSettingsByKey', myrec, 'key=', key, 'srv=', serv)
if (myrec) {
if (myrec.type === costanti.FieldType.date || myrec.type === costanti.FieldType.onlydate)
if (
myrec.type === costanti.FieldType.date ||
myrec.type === costanti.FieldType.onlydate
)
return myrec.value_date;
if (myrec.type === costanti.FieldType.number || myrec.type === costanti.FieldType.hours)
if (
myrec.type === costanti.FieldType.number ||
myrec.type === costanti.FieldType.hours
)
return myrec.value_num;
if (myrec.type === costanti.FieldType.boolean) return myrec.value_bool;
else if (myrec.type === costanti.FieldType.crypted) return '***********';
@@ -1496,9 +1533,20 @@ export const useGlobalStore = defineStore('GlobalStore', {
const obj = { test: 'OK! Versione Client: ' + tools.getvers(), timeout };
return Api.SendReq('/api/test-lungo', 'POST', obj, false, false, 0, 5000, null, null, {
timeout,
})
return Api.SendReq(
'/api/test-lungo',
'POST',
obj,
false,
false,
0,
5000,
null,
null,
{
timeout,
}
)
.then((res) => {
return res;
})
@@ -1851,7 +1899,13 @@ export const useGlobalStore = defineStore('GlobalStore', {
});
},
async GetArrDoniNavi({ ricalcola, showall }: { ricalcola: boolean; showall: boolean }) {
async GetArrDoniNavi({
ricalcola,
showall,
}: {
ricalcola: boolean;
showall: boolean;
}) {
console.log('GetArrDoniNavi');
const mydata = {
@@ -1933,7 +1987,11 @@ export const useGlobalStore = defineStore('GlobalStore', {
},
async loadTest(ind: number, numval: number) {
const restest = await Api.SendReq(`/testpao/?numval=${numval}&ind=${ind}`, 'GET', null);
const restest = await Api.SendReq(
`/testpao/?numval=${numval}&ind=${ind}`,
'GET',
null
);
return restest;
},
@@ -1968,12 +2026,18 @@ export const useGlobalStore = defineStore('GlobalStore', {
calendarStore.bookedevent = res.data.bookedevent ? res.data.bookedevent : [];
calendarStore.eventlist = res.data.eventlist ? res.data.eventlist : [];
calendarStore.operators = res.data.operators ? res.data.operators : [];
calendarStore.internalpages = res.data.internalpages ? res.data.internalpages : [];
calendarStore.internalpages = res.data.internalpages
? res.data.internalpages
: [];
calendarStore.wheres = res.data.wheres ? res.data.wheres : [];
calendarStore.contribtype = res.data.contribtype ? res.data.contribtype : [];
circuitStore.listcircuits = res.data.listcircuits ? res.data.listcircuits : [];
circuitStore.listaccounts = res.data.listaccounts ? res.data.listaccounts : [];
circuitStore.listcircuits = res.data.listcircuits
? res.data.listcircuits
: [];
circuitStore.listaccounts = res.data.listaccounts
? res.data.listaccounts
: [];
catalogStore.catalogs = res.data.catalogs;
catalogStore.raccoltacataloghis = res.data.raccoltacataloghis;
@@ -1984,7 +2048,9 @@ export const useGlobalStore = defineStore('GlobalStore', {
this.gallery = res.data.gallery ? [...res.data.gallery] : [];
this.calzoom = res.data.calzoom ? [...res.data.calzoom] : [];
Products.products = res.data.products ? [...res.data.products] : [];
Products.productInfos = res.data.productInfos ? [...res.data.productInfos] : [];
Products.productInfos = res.data.productInfos
? [...res.data.productInfos]
: [];
this.producers = res.data.producers ? [...res.data.producers] : [];
this.storehouses = res.data.storehouses ? [...res.data.storehouses] : [];
this.providers = res.data.providers ? [...res.data.providers] : [];
@@ -1993,13 +2059,23 @@ export const useGlobalStore = defineStore('GlobalStore', {
Products.catprtotali = res.data.catprtotali ? [...res.data.catprtotali] : [];
Products.collane = res.data.collane ? [...res.data.collane] : [];
Products.subcatprods = res.data.subcatprods ? [...res.data.subcatprods] : [];
Products.stati_prodotto = res.data.stati_prodotto ? [...res.data.stati_prodotto] : [];
Products.stati_prodotto = res.data.stati_prodotto
? [...res.data.stati_prodotto]
: [];
Products.tipologie = res.data.tipologie ? [...res.data.tipologie] : [];
Products.tipoformato = res.data.tipoformato ? [...res.data.tipoformato] : [];
Products.catprods_gas = res.data.catprods_gas ? [...res.data.catprods_gas] : [];
Products.catprods_gas = res.data.catprods_gas
? [...res.data.catprods_gas]
: [];
Products.authors = res.data.authors ? [...res.data.authors] : [];
Products.publishers = res.data.publishers ? [...res.data.publishers] : [];
Products.publishers_sort_qty = [...res.data.publishers];
Products.publishers_sort_qty.sort((a, b) => b.quanti - a.quanti);
// console.table(Products.publishers)
// console.table(Products.publishers_sort_qty)
this.gasordines = res.data.gasordines ? [...res.data.gasordines] : [];
this.scontisticas = res.data.scontisticas ? [...res.data.scontisticas] : [];
this.groups = res.data.groups ? [...res.data.groups] : [];
@@ -2372,7 +2448,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
else if (table === 'confpages_lang') myarr = costanti.ArrLang;
else if (table === 'bottype') myarr = shared_consts.BotType;
else if (table === 'visibility') myarr = shared_consts.Visibility;
else if (table === 'cat_interesse_arcadei') myarr = shared_consts.Cat_Interesse_Arcadei;
else if (table === 'cat_interesse_arcadei')
myarr = shared_consts.Cat_Interesse_Arcadei;
else if (table === 'pub_to_share') myarr = shared_consts.Pub_to_Share;
else if (table === 'visibilGroup') myarr = shared_consts.VisibilGroup;
else if (table === 'statuscircuit') myarr = shared_consts.StatusCircuit;
@@ -2391,7 +2468,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
else if (table === toolsext.TABTYPEACCOM) myarr = shared_consts.TypeAccom;
else if (table === toolsext.TABLOCACCOM) myarr = shared_consts.LocationAccom;
else if (table === toolsext.TABPREF) myarr = shared_consts.Preferences;
else if (table === toolsext.TABUNITS) myarr = shared_consts.Units_Of_Measure_ListBox;
else if (table === toolsext.TABUNITS)
myarr = shared_consts.Units_Of_Measure_ListBox;
else if (table === toolsext.TABTYPECASH) myarr = shared_consts.TypeCashStr;
else if (table === 'usernotifs') myarr = shared_consts.UsersNotif_Adv_List;
else if (table === 'typenotifs') myarr = shared_consts.TypeNotifs_Arr;
@@ -2478,7 +2556,12 @@ export const useGlobalStore = defineStore('GlobalStore', {
getTableJoinLabelValueByName(col: IColGridTable) {
let myarrrec: any = [];
if (col.jointable) {
let myarrtab = this.getTableJoinByName(col.jointable, col.addall, col.addnone, col.filter);
let myarrtab = this.getTableJoinByName(
col.jointable,
col.addall,
col.addnone,
col.filter
);
const key = fieldsTable.getKeyByTable(col.jointable);
const collab = fieldsTable.getLabelByTable(col.jointable);
@@ -2523,20 +2606,22 @@ export const useGlobalStore = defineStore('GlobalStore', {
async delMyElem($q: any, t: any, myelem: IMyElem) {
if (!myelem._id) return false;
return await this.DeleteRec({ table: 'myelems', id: myelem._id }).then(async (ris) => {
if (ris) {
this.myelems = this.myelems.filter((rec) => rec._id !== myelem._id);
return await this.DeleteRec({ table: 'myelems', id: myelem._id }).then(
async (ris) => {
if (ris) {
this.myelems = this.myelems.filter((rec) => rec._id !== myelem._id);
// Aggiorna anche tutto il sito...
// await this.loadSite()
// Aggiorna anche tutto il sito...
// await this.loadSite()
tools.showPositiveNotif($q, t('db.deletedrecord'));
return true;
} else {
tools.showNegativeNotif($q, t('db.recdelfailed'));
return false;
tools.showPositiveNotif($q, t('db.deletedrecord'));
return true;
} else {
tools.showNegativeNotif($q, t('db.recdelfailed'));
return false;
}
}
});
);
},
async saveMyElem($q: any, t: any, myelem: IMyElem) {
@@ -2748,7 +2833,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
dir_out: string = '',
file_out: string = '',
print: boolean = false,
optcatalogo: IOptCatalogo | null = null,
optcatalogo: IOptCatalogo | null = null
) {
try {
if (!pdfFile) {
@@ -2756,7 +2841,8 @@ export const useGlobalStore = defineStore('GlobalStore', {
return;
}
const filenameToDownload = tools.removeFileExtension(pdfFile.name) + '-compresso.pdf';
const filenameToDownload =
tools.removeFileExtension(pdfFile.name) + '-compresso.pdf';
const formData = new FormData();
if (pdfFile instanceof File) {
@@ -2775,8 +2861,10 @@ export const useGlobalStore = defineStore('GlobalStore', {
formData.append('print_right', optcatalogo.areadistampa.margini.right);
formData.append('print_bottom', optcatalogo.areadistampa.margini.bottom); // 7 mm 0,275"
}
formData.append('salvasufiledascaricare', salvasufiledascaricare ? 'true' : 'false');
formData.append(
'salvasufiledascaricare',
salvasufiledascaricare ? 'true' : 'false'
);
console.log('2) Invia le immagini al convertitore/compressione di PDF...');
@@ -2877,7 +2965,9 @@ export const useGlobalStore = defineStore('GlobalStore', {
numrec: 1,
query: '',
where:
'T.IdArticolo =' + sku + ' AND T.DataPubblicazione IS NOT NULL ORDER BY T.DataOra DESC;',
'T.IdArticolo =' +
sku +
' AND T.DataPubblicazione IS NOT NULL ORDER BY T.DataOra DESC;',
fieldGM: field,
showQtaDisponibile: false,
outhtml: false,
@@ -2913,7 +3003,11 @@ export const useGlobalStore = defineStore('GlobalStore', {
return valueris;
},
async setGM_FieldOf_T_Web_Articoli(sku: string, data: Record<string, any>, cmd: number) {
async setGM_FieldOf_T_Web_Articoli(
sku: string,
data: Record<string, any>,
cmd: number
) {
try {
// Verifica se i campi specificati sono validi
if (!data || Object.keys(data).length === 0) {
@@ -3051,7 +3145,9 @@ export const useGlobalStore = defineStore('GlobalStore', {
if (mytablerec && resdata && resdata.rec) {
// Trova l'indice del record da aggiornare
const index = mytablerec.findIndex((item: any) => item._id === resdata.rec._id);
const index = mytablerec.findIndex(
(item: any) => item._id === resdata.rec._id
);
if (index !== -1 && index !== undefined) {
// Aggiorna il record mantenendo reattività
@@ -3075,8 +3171,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
} catch (e) {}
},
setshowHeader(value: boolean) {
this.showHeader = value
}
this.showHeader = value;
},
},
});

View File

@@ -47,6 +47,11 @@
color="accent"
@click="EseguiFunz('updateAllBook', { usaDBGMLocale: false, caricatutti: true })"
></q-btn>
<q-btn
label="Riaggiorna TUTTI gli ARTICOLI (Cron)"
color="accent"
@click="EseguiFunz('updateAllBooksAndRemoveCanc')"
></q-btn>
<q-btn
label="Riaggiorna TUTTI gli ARTICOLI da GM SERVER e Rimuovi Cancellati !"
color="negative"

View File

@@ -246,4 +246,9 @@ body {
&:hover {
color: #5c8ef4;
}
}
.clCondiz {
margin-bottom: 2px;
margin-left: 2px;
margin-right: 2px;
}

View File

@@ -317,10 +317,12 @@ export default defineComponent({
const tabvisu = ref('categorie');
const tabcatalogo = ref('visu');
const tabgen = ref('condizioni');
const searchList = ref([] as ISearchList[]);
const arrProducts = ref<IProduct[]>([]);
const arrListaTemporanea = ref<IProduct[]>([]);
const arrProdToView = ref<IProdView[]>([]);
const numRecLoaded = ref(0);
@@ -1000,7 +1002,7 @@ export default defineComponent({
return arrris;
}
async function calcArrProducts(generalista?: boolean) {
async function calcArrProducts(generalista?: boolean, salva_listatemp: boolean) {
// console.log('calcArrProducts (generalista=' + generalista + ')');
if (generalista) {
@@ -1089,31 +1091,35 @@ export default defineComponent({
salva = true;
}
arrProducts.value = arrprod;
if (salva_listatemp) {
arrListaTemporanea.value = arrprod;
} else {
arrProducts.value = arrprod;
// console.log('arrprod', arrprod)
optcatalogo.value = productStore.populateDataWithlinkIdTemplate(
optcatalogo.value
);
optcatalogo.value = productStore.populateDataWithlinkIdTemplate(optcatalogo.value);
// Ordina la lista
generatearrProdToViewSorted(!generalista, salva, !showListaFiltrata.value);
loaddata();
// Ordina la lista
generatearrProdToViewSorted(!generalista, salva, !showListaFiltrata.value);
loaddata();
if (generalista) {
const catalog = myCatalog.value;
if (catalog && !showListaFiltrata.value) {
catalog.data_lista_generata = tools.getDateNow();
catalog.username_lista_generata = userStore.my.username;
await saveCatalog();
if (generalista) {
const catalog = myCatalog.value;
if (catalog && !showListaFiltrata.value) {
catalog.data_lista_generata = tools.getDateNow();
catalog.username_lista_generata = userStore.my.username;
await saveCatalog();
}
}
}
// console.log('***** FINE calcArrPROD');
// console.log('areadistampa FINITO...', optcatalogo.value.areadistampa)
generatinglist.value = false;
rigeneraLibri.value = false;
if (!salva_listatemp) {
rigeneraLibri.value = false;
} else {
tabgen.value = 'generato'
}
}
async function saveCatalog() {
@@ -1146,6 +1152,13 @@ export default defineComponent({
});
}
function generaListaTempLibri() {
// chiedi prima "Sei sicuro di rigenerare il catalogo?"
let risposta_si = false;
calcArrProducts(true, true);
}
function reSortList() {
let risposta_si = false;
@@ -1344,12 +1357,12 @@ export default defineComponent({
salva?: boolean,
salvasudb?: boolean
) {
console.log(
/*console.log(
'generatearrProdToViewSorted... usaprodottiSalvati=',
usaprodottiSalvati,
' salva=',
salva
);
);*/
try {
// Svuota
@@ -2922,6 +2935,7 @@ export default defineComponent({
componentToFixRef,
isFixed,
arrProducts,
arrListaTemporanea,
show_hide,
onLoadScroll,
numRecLoaded,
@@ -2996,6 +3010,8 @@ export default defineComponent({
isStampa,
onlyCatalogoPDF,
updatecatalogmodif,
tabgen,
generaListaTempLibri,
};
},
});

View File

@@ -188,7 +188,7 @@
icon="fas fa-redo"
label="Rigenera Lista"
color="primary"
@click="rigeneraLibri = true"
@click="rigeneraLibri = true; tabgen = 'condizioni'"
></q-btn>
<!--<q-bcctn
@@ -619,7 +619,10 @@
</div>
<div class="row">
<div v-if="myCatalog.pdf_online" class="catalog-download-section">
<div
v-if="myCatalog.pdf_online"
class="catalog-download-section"
>
<q-card class="catalog-card shadow-8">
<q-card-section class="text-center">
<q-img
@@ -1532,144 +1535,197 @@
title="Rigenera Lista"
class="q-ma-sm"
>
<q-card class="q-ma-sm">
<q-card-section>
<div style="width: 800px; margin: 0 auto">
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.idTipoFormato')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="idTipoFormato"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="t_web_tipiformatos"
class="q-mb-md"
@save="(v) => updatecatalogmodif('idTipoFormato', v)"
:dense="false"
>
</CMyValueDb>
<q-tabs
dense
class="bg-green text-white"
v-model="tabgen"
>
<q-tab
name="condizioni"
icon="fas fa-list"
label="Rigenera"
/>
<q-tab
name="generato"
icon="fas fa-list"
label="Anteprima Lista"
/>
</q-tabs>
<q-tab-panels
v-model="tabgen"
animated
keep-alive
>
<q-tab-panel name="condizioni">
<q-card>
<q-card-section class="q-ma-sm">
<div style="min-width: 800px; width: 100%; margin: 0 auto">
<div class="row">
<CMyValueDb
v-if="myCatalog"
:editOn="true"
table="catalogs"
:title="t('cataloglist.op_andor')"
:id="myCatalog._id"
:rec="myCatalog"
mykey="condition_andor"
debounce="1000"
:type="costanti.FieldType.op_andor"
class="clCondiz"
@save="(v) => updatecatalogmodif('condition_andor', v)"
:dense="false"
>
</CMyValueDb>
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.argomenti')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="argomenti"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="catprods"
@save="(v) => updatecatalogmodif('argomenti', v)"
class="clCondiz"
:dense="false"
>
</CMyValueDb>
<div class="row">
<CMyValueDb
v-if="myCatalog"
:editOn="true"
table="catalogs"
:title="t('cataloglist.op_andor')"
:id="myCatalog._id"
:rec="myCatalog"
mykey="condition_andor"
debounce="1000"
:type="costanti.FieldType.op_andor"
class="q-mb-md"
@save="(v) => updatecatalogmodif('condition_andor', v)"
:dense="false"
>
</CMyValueDb>
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.argomenti')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="argomenti"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="catprods"
@save="(v) => updatecatalogmodif('argomenti', v)"
class="q-mb-md"
:dense="false"
>
</CMyValueDb>
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.collane')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="idCollane"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="collanastotali"
@save="(v) => updatecatalogmodif('idCollane', v)"
class="q-mb-md"
:dense="false"
>
</CMyValueDb>
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.editore_includi')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="editore"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="publishers_totali"
@save="(v) => updatecatalogmodif('editore', v)"
class="q-mb-md"
:dense="false"
>
</CMyValueDb>
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.editore_escludi')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="editore_escludi"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="publishers_totali"
@save="(v) => updatecatalogmodif('editore_escludi', v)"
class="q-mb-md"
:dense="false"
>
</CMyValueDb>
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.collane')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="idCollane"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="collanastotali"
@save="(v) => updatecatalogmodif('idCollane', v)"
class="clCondiz"
:dense="false"
>
</CMyValueDb>
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.editore_includi')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="editore"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="publishers_totali_sort_qty"
@save="(v) => updatecatalogmodif('editore', v)"
class="clCondiz"
:dense="false"
>
</CMyValueDb>
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.editore_escludi')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="editore_escludi"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="publishers_totali_sort_qty"
@save="(v) => updatecatalogmodif('editore_escludi', v)"
class="clCondiz"
:dense="false"
>
</CMyValueDb>
</div>
<CMyValueDb
v-if="myCatalog"
:editOn="true"
:title="t('cataloglist.idTipoFormato')"
table="catalogs"
:id="myCatalog._id"
:rec="myCatalog"
mykey="idTipoFormato"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="t_web_tipiformatos"
class="clCondiz"
@save="(v) => updatecatalogmodif('idTipoFormato', v)"
:dense="false"
>
</CMyValueDb>
<div>Filtra per Disponibilità Magazzino:</div>
<q-btn-toggle
v-model="optrigenera.visibilitaDisp"
toggle-color="green"
class="q-my-md"
:options="optDisp"
>
</q-btn-toggle>
<div>Modalità di Creazione:</div>
<q-btn-toggle
v-model="optrigenera.rig_mod"
toggle-color="red"
class="q-my-md"
:options="optRigeneraModalita"
>
</q-btn-toggle>
</div>
</q-card-section>
<div class="row justify-center">
<q-spinner-hourglass
v-if="generatinglist"
size="4em"
/>
</div>
<q-card-actions align="center">
<q-btn
rounded
label="Anteprima"
color="positive"
icon="fas fa-eye"
@click="generaListaTempLibri()"
class="float-right"
></q-btn>
<q-btn
rounded
label="Rigenera"
color="primary"
icon="fas fa-redo"
@click="generaListaLibri()"
class="float-right"
></q-btn>
<q-btn
rounded
label="Chiudi"
outlined
class="float-right"
@click="rigeneraLibri = false"
></q-btn>
</q-card-actions>
<div>Filtra per Disponibilità Magazzino:</div>
<q-btn-toggle
v-model="optrigenera.visibilitaDisp"
toggle-color="green"
class="q-my-md"
:options="optDisp"
>
</q-btn-toggle>
<div>Modalità di Creazione:</div>
<q-btn-toggle
v-model="optrigenera.rig_mod"
toggle-color="red"
class="q-my-md"
:options="optRigeneraModalita"
>
</q-btn-toggle>
</div>
</q-card-section>
<q-card-actions align="center">
<q-btn
rounded
label="Rigenera"
color="primary"
icon="fas fa-redo"
@click="generaListaLibri()"
class="float-right"
></q-btn>
<q-btn
rounded
label="Chiudi"
outlined
class="float-right"
@click="rigeneraLibri = false"
></q-btn>
</q-card-actions>
</q-card>
</q-card>
</q-tab-panel>
<q-tab-panel name="generato">
<CProductTable
v-if="arrListaTemporanea?.length > 0"
:lista_prodotti="arrListaTemporanea"
:optcatalogo="optcatalogo"
table="products"
@rigenera="generaListaLibri()"
/>
</q-tab-panel>
</q-tab-panels>
</CMyDialog>
<CMyDialog

View File

@@ -1,45 +1,44 @@
import { defineComponent, onMounted, ref, watch, computed, onBeforeUnmount } from 'vue'
import { tools } from '@tools'
import { useUserStore } from '@store/UserStore'
import { useRouter } from 'vue-router'
import { useGlobalStore } from '@store/globalStore'
import { useProducts } from '@store/Products'
import { useI18n } from 'vue-i18n'
import { toolsext } from '@store/Modules/toolsext'
import { useQuasar } from 'quasar'
import { costanti } from '@costanti'
import { defineComponent, onMounted, ref, watch, computed, onBeforeUnmount } from 'vue';
import { tools } from '@tools';
import { useUserStore } from '@store/UserStore';
import { useRouter } from 'vue-router';
import { useGlobalStore } from '@store/globalStore';
import { useProducts } from '@store/Products';
import { useI18n } from 'vue-i18n';
import { toolsext } from '@store/Modules/toolsext';
import { useQuasar } from 'quasar';
import { costanti } from '@costanti';
import { shared_consts } from '@src/common/shared_vuejs'
import { CProductCard } from '@src/components/CProductCard'
import { CSelectUserActive } from '@src/components/CSelectUserActive'
import type { IProduct } from '@src/model'
import { shared_consts } from '@src/common/shared_vuejs';
import { CProductCard } from '@src/components/CProductCard';
import { CSelectUserActive } from '@src/components/CSelectUserActive';
import type { IProduct } from '@src/model';
export default defineComponent({
name: 'ProductsList',
components: { CProductCard, CSelectUserActive },
props: {},
setup() {
const userStore = useUserStore()
const globalStore = useGlobalStore()
const productStore = useProducts()
const router = useRouter()
const $q = useQuasar()
const { t } = useI18n()
const userStore = useUserStore();
const globalStore = useGlobalStore();
const productStore = useProducts();
const router = useRouter();
const $q = useQuasar();
const { t } = useI18n();
const search = ref('')
const search = ref('');
const cosa = ref(0)
const cat = ref('')
const subcat = ref('')
const idGasSel = ref('')
const loadpage = ref(false)
const refreshpage = ref(false)
const show_hide = ref(false)
const cosa = ref(0);
const cat = ref('');
const subcat = ref('');
const idGasSel = ref('');
const loadpage = ref(false);
const refreshpage = ref(false);
const show_hide = ref(false);
const arrProducts = ref<any>([])
const numRecLoaded = ref(0)
const arrProducts = ref<any>([]);
const numRecLoaded = ref(0);
// Create a ref for the component to fix
const componentToFixRef = ref(<any>null);
@@ -48,11 +47,11 @@ export default defineComponent({
const arrLoaded = computed(() => {
if (arrProducts.value && numRecLoaded.value)
return arrProducts.value.slice(0, numRecLoaded.value)
return arrProducts.value.slice(0, numRecLoaded.value);
else {
return []
return [];
}
})
});
// Register the scroll event on component mount
const handleScroll = () => {
@@ -65,60 +64,93 @@ export default defineComponent({
isFixed.value = scrollTop > threshold;
};
watch(() => cat.value, (newval, oldval) => {
calcArrProducts()
})
watch(() => subcat.value, (newval, oldval) => {
calcArrProducts()
})
watch(() => idGasSel.value, (newval, oldval) => {
calcArrProducts()
})
watch(() => search.value, (newval, oldval) => {
calcArrProducts()
if (tools.scrollTop() > 300) {
tools.scrollToTopValue(300)
watch(
() => cat.value,
(newval, oldval) => {
if (loadpage.value) {
tools.setCookie(tools.COOK_ARGOM, cat.value.toString());
calcArrProducts();
}
}
})
);
watch(() => cosa.value, (newval, oldval) => {
tools.setCookie(tools.COOK_COSA_PRODOTTI, cosa.value.toString())
if (cosa.value !== shared_consts.PROD.TUTTI) {
cat.value = ''
subcat.value = ''
watch(
() => subcat.value,
(newval, oldval) => {
if (loadpage.value) {
calcArrProducts();
}
}
);
calcArrProducts()
})
watch(
() => idGasSel.value,
(newval, oldval) => {
if (loadpage.value) {
calcArrProducts();
}
}
);
watch(
() => search.value,
(newval, oldval) => {
if (loadpage.value) {
calcArrProducts();
if (tools.scrollTop() > 300) {
tools.scrollToTopValue(300);
}
}
}
);
watch(
() => cosa.value,
(newval, oldval) => {
if (loadpage.value) {
tools.setCookie(tools.COOK_COSA_PRODOTTI, cosa.value.toString());
if (cosa.value !== shared_consts.PROD.TUTTI) {
cat.value = '';
subcat.value = '';
}
calcArrProducts();
}
}
);
function calcArrProducts() {
// console.log('calcArrProducts')
refreshpage.value = true
let arrprod = productStore.getProducts(cosa.value)
refreshpage.value = true;
let arrprod = productStore.getProducts(cosa.value);
const catstr = cat.value;
const subcatstr = subcat.value;
let gasselstr = ''
let gasselstr = '';
if (cosa.value === shared_consts.PROD.GAS) {
gasselstr = idGasSel.value
gasselstr = idGasSel.value;
}
const lowerSearchText = search.value.toLowerCase().trim();
if ((!lowerSearchText || (lowerSearchText && lowerSearchText.length < 2)) && !catstr && !subcatstr && (!gasselstr && (cosa.value !== shared_consts.PROD.GAS))) {
if (
(!lowerSearchText || (lowerSearchText && lowerSearchText.length < 2)) &&
!catstr &&
!subcatstr &&
!gasselstr &&
cosa.value !== shared_consts.PROD.GAS
) {
} else {
arrprod = arrprod.filter((product: IProduct) => {
if (product && product.productInfo && !!product.productInfo.name) {
const lowerName = product.productInfo.name.toLowerCase();
const hasCategoria = !catstr || (catstr && product.productInfo.idCatProds?.includes(catstr));
const hasSubCategoria = !subcatstr || (subcatstr && product.productInfo.idSubCatProds?.includes(subcatstr));
const hasCategoria =
!catstr || (catstr && product.productInfo.idCatProds?.includes(catstr));
const hasSubCategoria =
!subcatstr ||
(subcatstr && product.productInfo.idSubCatProds?.includes(subcatstr));
let productgassel = true
if (gasselstr || (cosa.value === shared_consts.PROD.GAS)) {
productgassel = (product.idGasordine === gasselstr)
let productgassel = true;
if (gasselstr || cosa.value === shared_consts.PROD.GAS) {
productgassel = product.idGasordine === gasselstr;
}
// Use a regular expression to match whole words
@@ -126,16 +158,23 @@ export default defineComponent({
const nameMatch = new RegExp(`\\b${lowerSearchText}`, 'i');
// Check if any word in lowerName starts with lowerSearchText
const anyWordStartsWithSearch = lowerName.split(/\s+/).some(word => nameMatch.test(word));
const anyWordStartsWithSearch = lowerName
.split(/\s+/)
.some((word) => nameMatch.test(word));
return (codeMatch.test(product.productInfo.code) || anyWordStartsWithSearch) && hasCategoria && hasSubCategoria && productgassel;
return (
(codeMatch.test(product.productInfo.code) || anyWordStartsWithSearch) &&
hasCategoria &&
hasSubCategoria &&
productgassel
);
}
});
}
arrProducts.value = arrprod
loaddata()
refreshpage.value = false
arrProducts.value = arrprod;
loaddata();
refreshpage.value = false;
}
/*function getProducts() {
@@ -155,23 +194,30 @@ export default defineComponent({
}*/
async function mounted() {
loadpage.value = false
await productStore.loadProducts(true)
cosa.value = tools.getCookie(tools.COOK_COSA_PRODOTTI, shared_consts.PROD.GAS, true)
if (cosa.value === shared_consts.PROD.TUTTI)
cosa.value = shared_consts.PROD.GAS
loadpage.value = false;
cosa.value = tools.getCookie(
tools.COOK_COSA_PRODOTTI,
shared_consts.PROD.GAS,
true
);
if (cosa.value === shared_consts.PROD.TUTTI) cosa.value = shared_consts.PROD.GAS;
cat.value = tools.getCookie(tools.COOK_ARGOM, '');
await productStore.loadProducts(true);
// Inizializza
loadpage.value = true
loadpage.value = true;
window.addEventListener('scroll', handleScroll);
calcArrProducts()
calcArrProducts();
loaddata()
loaddata();
}
function loaddata() {
numRecLoaded.value = 20
numRecLoaded.value = 20;
}
// Remove the event listener on component destroy
@@ -180,65 +226,76 @@ export default defineComponent({
});
function getCatProds() {
const arrcat = productStore.getCatProds(shared_consts.PROD.BOTTEGA)
const arrcat = productStore.getCatProds(shared_consts.PROD.BOTTEGA);
// console.log('getCatProds', arrcat)
let riscat: any = []
let riscat: any = [];
if (arrcat && arrcat.length > 0) {
riscat = [{ label: 'Tutti', value: '', icon: undefined, color: undefined }]
riscat = [{ label: 'Tutti', value: '', icon: undefined, color: undefined }];
for (const rec of arrcat) {
riscat.push({ label: rec.name, value: rec._id, icon: rec.icon, color: rec.color })
riscat.push({
label: rec.name,
value: rec._id,
icon: rec.icon,
color: rec.color,
});
}
}
return riscat
return riscat;
}
function getCatProdsByGas(idGasOrdine: string): any {
const arrcat = productStore.getCatProdsByGas(idGasOrdine)
let riscat: any = []
const arrcat = productStore.getCatProdsByGas(idGasOrdine);
let riscat: any = [];
if (arrcat && arrcat.length > 0) {
riscat = [{ label: 'Tutti', value: '', icon: undefined, color: undefined }]
riscat = [{ label: 'Tutti', value: '', icon: undefined, color: undefined }];
for (const rec of arrcat) {
riscat.push({ label: rec.name, value: rec._id, icon: rec.icon, color: rec.color })
riscat.push({
label: rec.name,
value: rec._id,
icon: rec.icon,
color: rec.color,
});
}
}
return riscat
return riscat;
}
function getSubCatProdsByGas(idGasOrdine: string, idCatProd: string): any {
const arrcat = productStore.getSubCatProdsByGas(idGasOrdine, idCatProd)
let riscat: any = []
const arrcat = productStore.getSubCatProdsByGas(idGasOrdine, idCatProd);
let riscat: any = [];
if (arrcat && arrcat.length > 0) {
riscat = [{ label: 'Tutti', value: '', icon: undefined, color: undefined }]
riscat = [{ label: 'Tutti', value: '', icon: undefined, color: undefined }];
for (const rec of arrcat) {
riscat.push({ label: rec.name, value: rec._id, icon: rec.icon, color: rec.color })
riscat.push({
label: rec.name,
value: rec._id,
icon: rec.icon,
color: rec.color,
});
}
}
return riscat
return riscat;
}
function onLoadScroll(index: number, done: any) {
if (index >= 1) {
if (numRecLoaded.value < arrProducts.value.length) {
const step = 10;
let mynrec = numRecLoaded.value + step;
const step = 10
let mynrec = numRecLoaded.value + step
if (mynrec > arrProducts.value.length)
mynrec = arrProducts.value.length
numRecLoaded.value = mynrec
if (mynrec > arrProducts.value.length) mynrec = arrProducts.value.length;
numRecLoaded.value = mynrec;
}
done()
done();
} else {
done(true)
done(true);
}
}
onMounted(mounted)
onMounted(mounted);
return {
userStore,
@@ -265,7 +322,6 @@ export default defineComponent({
numRecLoaded,
arrLoaded,
getSubCatProdsByGas,
}
}
})
};
},
});