- corretto scheda prodotto, record salvato

This commit is contained in:
Surya Paolo
2025-05-01 00:20:02 +02:00
parent 358f0d6816
commit 721d2ac38c
32 changed files with 296 additions and 177 deletions

4
.env
View File

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

View File

@@ -1,13 +1,11 @@
VITE_APP_ID="18"
VITE_APP_URL="https://gruppomacro.app"
VITE_MONGODB_HOST="https://api.gruppomacro.app"
VITE_LOGO_REG='gruppomacro-logo-full.png'
VITE_APP_URL="https://test.gruppomacro.app"
VITE_MONGODB_HOST="https://testapi.gruppomacro.app"
VITE_LOGO_REG="gruppomacro-logo-full.png"
VITE_PUBLICKEY_PUSH="BJgo8XR_upbnbMLWgCAUELo6DK7dRXffYAnFOxbaMMz5favBgcQBKT-eISqouO-jRad4Sw8l5nd2wCF6KorGiTc"
VITE_DEBUG="0"
VITE_VUE_APP_ISTEST="0"
VITE_DEBUG="1"
VITE_VUE_APP_ISTEST="1"
DIRECTORY_LOCAL="myprojplanet_vite"
DIRECTORY_SERVER="/var/www/nodejs_piuchebuono_server"
SERVERDIR_WEBSITE="/var/www/gruppomacro.app"
SERVERPW_WEBSITE="pwdadmin@1AOK"
PORT_SPA="8089"
PORT_PWA="8099"
DIRECTORY_SERVER="/var/www/nodejs_test.piuchebuono_server"
SERVERDIR_WEBSITE="/var/www/test.gruppomacro.app"
SERVERPW_WEBSITE="pwdadmin@1AOK"

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.33">
<meta name="version" content="1.2.34">
<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.33",
"version": "1.2.34",
"description": "Gruppo Macro",
"productName": "Gruppo Macro",
"author": "Surya",
@@ -9,20 +9,20 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8089 APP_VERSION='1.2.33' quasar dev",
"dev": "PORT=8089 APP_VERSION='1.2.34' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.34' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.34' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "APP_VERSION='1.2.33' quasar build -m spa",
"buildspa": "APP_VERSION='1.2.34' 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.33' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.33' quasar dev",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.34' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.34' 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.33",
"version": "1.2.34",
"description": "Comunita Nuovo Mondo",
"productName": "ComunitaNuovoMondo",
"author": "Surya",
@@ -9,7 +9,7 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8083 APP_VERSION='1.2.33' quasar dev",
"dev": "PORT=8083 APP_VERSION='1.2.34' 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.33' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.33' quasar dev",
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.34' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.34' 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.33",
"version": "1.2.34",
"description": "freeplanet",
"productName": "freeplanet",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8087 APP_VERSION='1.2.33' quasar dev",
"dev": "PORT=8087 APP_VERSION='1.2.34' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.34' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.34' 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.33' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.33' quasar dev",
"pwa": "NODE_ENV=development PORT=8097 APP_VERSION='1.2.34' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8087 APP_VERSION='1.2.34' 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.33",
"version": "1.2.34",
"description": "Gruppo Macro",
"productName": "Gruppo Macro",
"author": "Surya",
@@ -9,20 +9,20 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8089 APP_VERSION='1.2.33' quasar dev",
"dev": "PORT=8089 APP_VERSION='1.2.34' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.34' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.34' quasar build -m pwa",
"type-check": "vue-tsc --noEmit",
"type-check:watch": "vue-tsc --noEmit --watch",
"buildspa": "APP_VERSION='1.2.33' quasar build -m spa",
"buildspa": "APP_VERSION='1.2.34' 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.33' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.33' quasar dev",
"pwa": "NODE_ENV=development PORT=8099 APP_VERSION='1.2.34' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8089 APP_VERSION='1.2.34' 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.33",
"version": "1.2.34",
"description": "kolibrilab",
"productName": "kolibrilab",
"author": "Surya Paolo",
@@ -8,11 +8,11 @@
"keywords": [],
"license": "MIT",
"scripts": {
"dev": "PORT=8083 APP_VERSION='1.2.33' quasar dev",
"dev": "PORT=8083 APP_VERSION='1.2.34' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.34' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.34' 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.33' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.33' quasar dev",
"pwa": "NODE_ENV=development PORT=8093 APP_VERSION='1.2.34' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8083 APP_VERSION='1.2.34' 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": "piuchebuono",
"version": "1.2.33",
"version": "1.2.34",
"description": "PiuCheBuono",
"productName": "PiuCheBuono",
"author": "Surya",
@@ -9,11 +9,11 @@
"license": "MIT",
"type": "module",
"scripts": {
"dev": "PORT=8085 APP_VERSION='1.2.33' quasar dev",
"dev": "PORT=8085 APP_VERSION='1.2.34' quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.34' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.34' 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.33' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.33' quasar dev",
"pwa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.34' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8085 APP_VERSION='1.2.34' 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.33",
"version": "1.2.34",
"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.33' PORT=8084 quasar dev",
"dev": "APP_VERSION='1.2.34' PORT=8084 quasar dev",
"dev_noCheck": "SKIP_TSC=true quasar dev",
"build": "quasar build",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.33' quasar build -m pwa",
"buildpwa": "NODE_ENV=production APP_VERSION='1.2.34' quasar build -m pwa",
"buildpwatest": "NODE_ENV=production APP_VERSION='1.2.34' 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.33' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.33' quasar dev",
"pwa": "NODE_ENV=development PORT=8094 APP_VERSION='1.2.34' quasar dev -m pwa",
"spa": "NODE_ENV=development PORT=8084 APP_VERSION='1.2.34' 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.33";
const VITE_APP_VERSION = "1.2.34";
// Costanti di configurazione
const DYNAMIC_CACHE = 'dynamic-cache-v2';

View File

@@ -128,13 +128,13 @@
>
<q-item-section avatar>
<q-avatar
icon="fas fa-pencil-alt"
icon="fas fa-file-alt"
color="primary"
text-color="white"
/>
</q-item-section>
<q-item-section>
<q-item-label>Modifica</q-item-label>
<q-item-label>Scheda Libro</q-item-label>
</q-item-section>
</q-item>
<q-item
@@ -149,7 +149,7 @@
>
<q-item-section avatar>
<q-avatar
icon="fas fa-pencil-alt"
icon="fas fa-align-left"
color="primary"
text-color="white"
/>
@@ -188,13 +188,13 @@
>
<q-item-section avatar>
<q-avatar
icon="fas fa-pencil-alt"
icon="fas fa-cloud-download-alt"
color="accent"
text-color="white"
/>
</q-item-section>
<q-item-section>
<q-item-label>Riaggiorna il Libro da GM</q-item-label>
<q-item-label>Carica dati del Libro (da GM)</q-item-label>
</q-item-section>
</q-item>
<q-item
@@ -207,13 +207,13 @@
>
<q-item-section avatar>
<q-avatar
icon="fas fa-pencil-alt"
icon="fas fa-database"
color="accent"
text-color="white"
/>
</q-item-section>
<q-item-section>
<q-item-label>Riaggiorna il Libro da DBLocale</q-item-label>
<q-item-label>Carica dati del Libro (dal DB Locale)</q-item-label>
</q-item-section>
</q-item>
<!--<q-item
@@ -312,13 +312,13 @@
>
<q-item-section avatar>
<q-avatar
icon="fas fa-eye"
icon="fas fa-boxes"
color="orange"
text-color="white"
/>
</q-item-section>
<q-item-section>
<q-item-label>Visualizza su GM (Tutti i campi)</q-item-label>
<q-item-label>Visualizza su GM (con le Quantità in Magazzino)</q-item-label>
</q-item-section>
</q-item>
</q-list>
@@ -691,7 +691,7 @@
:type="costanti.FieldType.editor_nohtml"
@updateproductmodif="updateproductmodif"
@close="modifTrafiletto = false"
:maxlength="800"
:maxlength="680"
>
</CModifTrafiletto>

View File

@@ -1647,7 +1647,7 @@ export default defineComponent({
}
function SaveValue(newVal: any, valinitial: any) {
console.log('SaveValue', newVal)
// console.log('SaveValue', newVal)
// console.log('rowsel', rowsel, 'colsel', colsel.value)
let myfield = ''
let subf = ''

View File

@@ -49,7 +49,7 @@
v-tooltip="'Copia negli appunti'"
/>
<CAITools></CAITools>
<!--<CAITools></CAITools>-->
<CMyEditorAI
v-if="modelValue"

View File

@@ -1676,6 +1676,22 @@
map-options
>
</q-select>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
rounded
outlined
v-model="myel.catalogo.idTipoFormato"
:options="Products.tipoformato"
@update:model-value="modifElem"
multiple
label="Tipo Formato"
style="width: 300px"
option-value="IdTipoFormato"
option-label="Descrizione"
emit-value
map-options
>
</q-select>
<q-select
:behavior="$q.platform.is.ios === true ? 'dialog' : 'menu'"
v-if="enableEdit"

View File

@@ -65,7 +65,7 @@ export default defineComponent({
const cmd = ref(shared_consts.SCHEDA_PRODOTTO.CMD_NONE)
const showQtaDisponibile = ref(false)
const loading = ref(false)
const loading = ref(true)
const visufromgm = ref(false)
const updatefromgm = ref(false)
const field_updated_fromGM = ref('')
@@ -77,6 +77,10 @@ export default defineComponent({
const optionscatalogo = ref(<any>{ maxlength: 0 })
function handleUpdate(newList) {
internalProducts.value = newList
emit('update:lista_prodotti', internalProducts.value)
}
const editOn = computed({
get(): boolean {
@@ -90,10 +94,19 @@ export default defineComponent({
async function mounted() {
console.log('mounted CProductTable')
loading.value = true
optionscatalogo.value = {
maxlength: props.scheda?.testo_bottom?.maxlength
}
const savedColumns = tools.getCookie("selColCat");
if (savedColumns) {
selectedColumns.value = savedColumns;
}
loading.value = false
}
// Aggiorna la copia locale quando il prop cambia
@@ -102,7 +115,7 @@ export default defineComponent({
(newVal) => {
internalProducts.value = [...newVal];
}
);
), { deep: true };
// Colonne della tabella
const allColumns = [
@@ -119,6 +132,7 @@ export default defineComponent({
{ name: "idCollana", label: "Collana", field: "idCollana", align: "left" },
{ name: "stato", label: "Stato", field: "stato", align: "left" },
{ name: "tipologia", label: "Tipologia", field: "tipologia", align: "left" },
{ name: "tipoformato", label: "Formato", field: "tipoformato", align: "left" },
{ name: "date_pub", label: "Pubblicato", field: "date_pub", align: "left" },
//{ name: "ranking", label: "Class.", field: "ranking", align: "right" },
//{ name: "rank3M", label: "Class. 3M", field: "rank3M", align: "right", visu: costanti.VISUCAMPI.PER_EDITORE },
@@ -136,87 +150,97 @@ export default defineComponent({
];
function getFieldValue(element: any, field: any): any {
switch (field.field) {
case 'image':
return element.productInfo?.imagefile
? tools.getFullFileNameByImageFile('productInfos', element.productInfo?.imagefile)
: element.productInfo?.image_link;
if (!element)
return ''
case 'name':
return element.productInfo?.name;
try {
switch (field.field) {
case 'image':
return element.productInfo?.imagefile
? tools.getFullFileNameByImageFile('productInfos', element.productInfo?.imagefile)
: element.productInfo?.image_link;
case 'authors':
return formatAuthors(element.productInfo?.authors);
case 'name':
return element.productInfo?.name;
case 'isbn':
return element.isbn;
case 'authors':
return formatAuthors(element.productInfo?.authors);
case 'trafiletto':
return element.productInfo?.descr_trafiletto_catalogo?.length > 100 ? 'SI' : 'NO';
case 'isbn':
return element.isbn;
case 'catprods':
return tools.formatCatProds(element.productInfo?.catprods);
case 'trafiletto':
return element.productInfo?.descr_trafiletto_catalogo?.length > 100 ? 'SI' : 'NO';
case 'edizione':
return element.arrvariazioni?.[0]?.edizione;
case 'catprods':
return tools.formatCatProds(element.productInfo?.catprods);
case 'casaeditrice':
return products.getCasaEditriceByIdPublisher(element.productInfo?.idPublisher);
case 'edizione':
return element.arrvariazioni?.[0]?.edizione;
case 'idCollana':
return tools.formatCollane(element.productInfo?.idCollana);
case 'casaeditrice':
return products.getCasaEditriceByIdPublisher(element.productInfo?.idPublisher);
case 'stato':
return products.getDescrStatiProdottoByIdStatoProdotto(element.productInfo?.idStatoProdotto || '');
case 'idCollana':
return tools.formatCollane(element.productInfo?.idCollana);
case 'tipologia':
return products.getDescrByIdTipologia(element.arrvariazioni?.[0]?.idTipologia || '');
case 'stato':
return products.getDescrStatiProdottoByIdStatoProdotto(element.productInfo?.idStatoProdotto || '');
case 'tipoformato':
return products.getDescrByIdTipoFormato(element.arrvariazioni?.[0]?.idTipoFormato || '');
case 'tipologia':
return products.getDescrByIdTipologia(element.arrvariazioni?.[0]?.idTipologia || '');
case 'date_pub':
return tools.getstrDate(element.productInfo?.date_pub);
case 'tipoformato':
return products.getDescrByIdTipoFormato(element.arrvariazioni?.[0]?.idTipoFormato || '');
case 'rank3M':
return element.productInfo?.rank3M;
case 'date_pub':
return tools.getstrDate(element.productInfo?.date_pub);
case 'rank6M':
return element.productInfo?.rank6M;
case 'rank3M':
return element.productInfo?.rank3M;
case 'rank1Y':
return element.productInfo?.rank1Y;
case 'rank6M':
return element.productInfo?.rank6M;
case 'pagine':
return element.arrvariazioni?.[0]?.pagine;
case 'rank1Y':
return element.productInfo?.rank1Y;
case 'totVen':
return element.productInfo?.totVen;
case 'pagine':
return element.arrvariazioni?.[0]?.pagine;
case 'totFat':
return element.productInfo?.totFat;
case 'totVen':
return element.productInfo?.totVen;
case 'fatLast6M':
return element.productInfo?.fatLast6M;
case 'totFat':
return element.productInfo?.totFat;
case 'fatLast1Y':
return element.productInfo?.fatLast1Y;
case 'fatLast6M':
return element.productInfo?.fatLast6M;
case 'fatLast2Y':
return element.productInfo?.fatLast2Y;
case 'fatLast1Y':
return element.productInfo?.fatLast1Y;
case 'ult_ord':
return tools.getstrDate(element.productInfo?.dataUltimoOrdine);
case 'fatLast2Y':
return element.productInfo?.fatLast2Y;
case 'quantity':
return element.arrvariazioni?.[0]?.quantita;
case 'ult_ord':
return tools.getstrDate(element.productInfo?.dataUltimoOrdine);
default:
return null;
case 'quantity':
return element.arrvariazioni?.[0]?.quantita;
default:
return null;
}
} catch (e) {
console.error('Errore getFieldValue:', e, element, field);
return null;
}
}
function getFieldClass(element: any, field: any): string {
if (!element)
return ''
switch (field.field) {
case 'trafiletto':
return element.productInfo?.descr_trafiletto_catalogo?.length > 100
@@ -265,6 +289,8 @@ export default defineComponent({
}
function getFieldStyle(element: any, field: any): Record<string, string> {
if (!element)
return ''
switch (field.field) {
case 'image':
return {
@@ -357,13 +383,6 @@ export default defineComponent({
.join(", ");
}
// Caricamento delle preferenze al mount del componente
onMounted(() => {
const savedColumns = tools.getCookie("selColCat");
if (savedColumns) {
selectedColumns.value = savedColumns;
}
});
function showProduct(element: any) {
selProd.value = element
@@ -524,6 +543,7 @@ export default defineComponent({
getFieldClass,
getFieldStyle,
getFieldClick,
handleUpdate,
}
}
})

View File

@@ -50,11 +50,13 @@
</thead>
<!-- Corpo della Tabella (Tbody) -->
<draggable
v-model="internalProducts"
v-if="!loading"
:model-value="internalProducts"
tag="tbody"
handle=".drag-handle"
item-key="_id"
@end="onDragEnd"
@update:modelValue="handleUpdate"
>
<template #item="{ element }">
<tr

View File

@@ -296,6 +296,17 @@ export default defineComponent({
type: costanti.FieldType.string,
dense: true,
},
/*{
editOn: true,
label: "Pagine",
table: "arrvariazioni",
id: myproduct.value._id,
rec: myproduct.value,
mykey: "data_verifica",
debounce: "0",
type: costanti.FieldType.date,
dense: true,
},*/
{
editOn: false,
label: "Pubblicazione",

View File

@@ -233,7 +233,6 @@
</div>
<div v-if="tools.isLogged()" class="q-mt-lg"></div>
<slot></slot>
</q-drawer>
</div>
</template>

View File

@@ -10,6 +10,7 @@ export interface ICatalog {
foto_collana?: IImg,
idCollane?: string[]
argomenti?: string[]
idTipoFormato?: number[]
condition_andor: number,
editore?: string[]
collana_info?: ICollana

View File

@@ -809,6 +809,7 @@ export interface IMyScheda {
productTypes?: number[]
excludeproductTypes?: number[]
idTipologie?: number[]
idTipoFormato?: number[]
editore?: string[]
argomenti?: string[]
idCollane?: string[]
@@ -858,6 +859,7 @@ export interface IOptCatalogo {
excludeproductTypes?: number[]
formato?: string[]
idTipologie?: number[]
idTipoFormato?: number[]
Categoria?: string[]
editore?: string[]
argomenti?: string[]

View File

@@ -1,5 +1,11 @@
import type { IUserFields, IUserShort } from './UserStore'
export interface IVerificaProd {
esito?: number
data?: Date
username?: string
note?: string
}
export interface IProductInfo {
_id?: any

View File

@@ -2051,6 +2051,7 @@ const msg_it = {
pdf_generato_stampa: 'Pdf generato (per STAMPA)',
pdf_online_stampa: 'Pdf online Ufficiale (per STAMPA)',
argomenti: 'Argomenti',
idTipoFormato: 'Tipo Formato',
numprodtot: 'Numero Prodotti',
},

View File

@@ -27,10 +27,14 @@ export const costanti = {
CATALOGO_FIELDS: [
'productTypes',
'excludeproductTypes',
'formato',
'idTipologie',
'idTipoFormato',
'misure',
'Categoria',
'idCollane',
'editore',
'argomenti',
'idCollane',
'pdf',
'Printable',
'numschede_perCol',

View File

@@ -169,6 +169,12 @@ export const colTableCatalogList = [
fieldtype: costanti.FieldType.multiselect,
jointable: 'publishers_totali',
}),
AddCol({
name: 'idTipoFormato',
label_trans: 'cataloglist.idTipoFormato',
fieldtype: costanti.FieldType.multiselect,
jointable: 't_web_tipiformatos',
}),
AddCol({ name: 'descr_introduttiva', label_trans: 'cataloglist.descr_introduttiva', fieldtype: costanti.FieldType.html, maxlength: 1300 }),
AddCol({ name: 'pagina_introduttiva_sfondo_nero', label_trans: 'cataloglist.pagina_introduttiva_sfondo_nero', fieldtype: costanti.FieldType.boolean }),
@@ -316,6 +322,12 @@ export const colmyScheda = [
AddCol({ name: 'productTypes', label_trans: 'productTypes', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'excludeproductTypes', label_trans: 'excludeproductTypes', fieldtype: costanti.FieldType.number }),
AddCol({ name: 'idTipologie', label_trans: 'idTipologie', fieldtype: costanti.FieldType.number }),
AddCol({
name: 'idTipoFormato',
label_trans: 'cataloglist.idTipoFormato',
fieldtype: costanti.FieldType.multiselect,
jointable: 't_web_tipiformatos',
}),
AddCol({ name: 'editore', label_trans: 'editore' }),
AddCol({ name: 'author', label_trans: 'scheda.author' }),
AddCol({ name: 'argomenti', label_trans: 'scheda.argomenti' }),

View File

@@ -1529,7 +1529,7 @@ export const useProducts = defineStore('Products', {
replacements['{collana}'] = tools.formatCollane(myproduct.productInfo.idCollana) || '';
}
const maxDescriptionLength = testo.maxlength || 600;
const maxDescriptionLength = testo.maxlength || 680;
if (testo.contenuto.includes('{descrizione_da_fdv}')) {
const description = myproduct.productInfo.short_descr || '';
@@ -1564,16 +1564,17 @@ export const useProducts = defineStore('Products', {
if (testo.contenuto.includes('{descrizione_breve_macro}')) {
const short_descr = myproduct.productInfo.descrizione_breve_macro || '';
replacements['{descrizione_breve_macro}'] = short_descr.length > maxDescriptionLength && maxDescriptionLength > 0
replacements['{descrizione_breve_macro}'] = short_descr.length > maxDescriptionLength && maxDescriptionLength > 0
? short_descr.substring(0, short_descr.lastIndexOf(' ', maxDescriptionLength)) + '...'
: short_descr;
}
if (testo.contenuto.includes('{descr_trafiletto_catalogo}')) {
if (testo.contenuto.includes('{descr_trafiletto_catalogo}') || testo.contenuto.includes('{descrizione_completa_macro}')) {
const short_descr = myproduct.productInfo.descr_trafiletto_catalogo || '';
replacements['{descr_trafiletto_catalogo}'] = short_descr.length > maxDescriptionLength && maxDescriptionLength > 0
replacements['{descr_trafiletto_catalogo}'] = short_descr.length > maxDescriptionLength && maxDescriptionLength > 0
? short_descr.substring(0, short_descr.lastIndexOf(' ', maxDescriptionLength)) + '...'
: short_descr;
replacements['{descrizione_completa_macro}'] = replacements['{descr_trafiletto_catalogo}']
}
if (testo.contenuto.includes('{prezzo}') || testo.contenuto.includes('{prezzo_scontato}')) {
@@ -1666,7 +1667,7 @@ export const useProducts = defineStore('Products', {
case '{debug}':
const date_pub = replacements['{date_pub}'] || '';
const fatLast6M = myproduct.productInfo.fatLast6M! || 0;
const linkvenduti = `<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-ordini-by-idarticolo/${myproduct.productInfo.sku}" target="_blank">${replacements['{venduti}']}</a>`;
const linkvenduti = `<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-ordini-by-idarticolo/${myproduct.productInfo.sku}" target="_blank">${myproduct.productInfo.totVen!}</a>`;
const vLast3M = myproduct.productInfo.vLast3M! || 0;
const vLast6M = myproduct.productInfo.vLast6M! || 0;
const linkfatturati = `<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-fatturati-by-idarticolo/${myproduct.productInfo.sku}" target="_blank">${myproduct.productInfo.totFat! || 0}</a>`;

View File

@@ -2674,6 +2674,7 @@ export const useGlobalStore = defineStore('GlobalStore', {
try {
// aggiungi idapp ad options
options.idapp = tools.getEnv('VITE_APP_ID')
console.log('CHIAMATA fetchTableContent...', options)
return Api.SendReq('/apisqlsrv/view-table', 'POST', { options })
.then((res) => {
return res.data.data
@@ -2682,7 +2683,6 @@ export const useGlobalStore = defineStore('GlobalStore', {
})
} catch (error) {
console.error("Errore nel recupero della tabella:", error);
throw error;
}
},
@@ -2783,7 +2783,16 @@ export const useGlobalStore = defineStore('GlobalStore', {
if (index !== -1 && index !== undefined) {
// Aggiorna il record mantenendo reattività
mytablerec![index] = { ...mytablerec[index], ...resdata.rec }
if (datain.table === 'catalogs') {
// salva lista_prodotti
const prec_lista_prodotti = mytablerec![index].lista_prodotti
mytablerec![index] = { ...mytablerec[index], ...resdata.rec }
mytablerec![index].lista_prodotti = prec_lista_prodotti
} else {
mytablerec![index] = { ...mytablerec[index], ...resdata.rec }
console.log('Aggiorna il record mantenendo reattività')
}
}
}
}

View File

@@ -62,7 +62,7 @@ export default defineComponent({
}
function SaveValue(newVal: any, valinitial: any) {
console.log('SaveValue', newVal)
// console.log('SaveValue', newVal)
const mydata: ICfgServer = {
chiave: keysel.value,

View File

@@ -11,6 +11,21 @@
@click="EseguiFunz('MigrateMSSQLToMongoDb', {tutte: true})"
></q-btn>
<q-btn
label="Migrazione del DB MSSQL su MongoDB (Parte 1)"
color="positive"
@click="EseguiFunz('MigrateMSSQLToMongoDb', {parte1: true})"
></q-btn>
<q-btn
label="Migrazione del DB MSSQL su MongoDB (Parte 2)"
color="positive"
@click="EseguiFunz('MigrateMSSQLToMongoDb', {parte2: true})"
></q-btn>
<q-btn
label="Migrazione del DB MSSQL su MongoDB (Parte 3)"
color="positive"
@click="EseguiFunz('MigrateMSSQLToMongoDb', {parte3: true})"
></q-btn>
<q-btn
label="Migrazione del DB MSSQL su MongoDB (ALCUNE)"
color="positive"

View File

@@ -112,6 +112,7 @@ body {
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(20 * var(--scalecatalog) * 1px);
height: calc(380 * var(--scalecatalog) * 1px);
line-height: 130%;
}
.book-text-down {
@@ -121,7 +122,6 @@ body {
.book-pagina-title {
font-family: 'DINPro', sans-serif;
color: white;
margin-top: calc(20 * var(--scalecatalog) * 1px);
margin-bottom: calc(5 * var(--scalecatalog) * 1px);
font-size: calc(35 * var(--scalecatalog) * 1px);

View File

@@ -214,6 +214,16 @@ export default defineComponent({
let testo = getTextSostituito(recscheda.scheda!.dimensioni.pagina?.testo_title)
const catalog = getCatalogoByMyPage.value
let clcol = ''
if (catalog.pagina_introduttiva_sfondo_nero) {
clcol = `text-white`
}
testo = `<span class="book-pagina-title ${clcol}">` + testo + `</span>`
return testo
})
@@ -489,6 +499,7 @@ export default defineComponent({
filtroProductTypes: number[],
filtroExcludeProductTypes: number[],
filtroidTipologie: number[],
filtroidTipoFormato: number[],
editore: string[],
idCollane: string[],
arrargomstr: any[],
@@ -507,6 +518,7 @@ export default defineComponent({
filtroProductTypes.length === 0 || (filtroProductTypes.length === 1 && filtroProductTypes[0] === 0);
const boolfiltroVuotoExcludeProductTypes = filtroExcludeProductTypes.length === 0;
const boolfiltroVuotoidTipologie = filtroidTipologie.length === 0;
const boolfiltroVuotoidTipoFormato = filtroidTipoFormato.length === 0;
const boolfiltroVuotoEditore = editore.length === 0;
const boolfiltroVuotoCollane = idCollane.length === 0;
const boolfiltroVuotoArgomenti = arrargomstr.length === 0;
@@ -587,6 +599,10 @@ export default defineComponent({
? true
: filtroidTipologie.includes(product.arrvariazioni?.[0].idTipologia);
const hasidTipoFormato = boolfiltroVuotoidTipoFormato
? true
: filtroidTipoFormato.includes(product.arrvariazioni?.[0].idTipoFormato);
// Filtri per editore
const hasPublished = boolfiltroVuotoEditore
? se_tutti_veri
@@ -615,7 +631,7 @@ export default defineComponent({
const filtri = [hasArgomentiCat, hasCategoria, hasCollana, hasPublished];
// Decido se combinare in AND o OR sulla base della scelta globale
let risult = searchMatch && hasAuthor && productgassel && hasidTipologie
let risult = searchMatch && hasAuthor && productgassel && hasidTipologie && hasidTipoFormato
if (op_andor.condition_andor === costanti.OP_ANDOR.OP_AND) {
risult = risult && filtri.every(Boolean); // Tutti i gruppi devono essere veri
@@ -653,6 +669,7 @@ export default defineComponent({
const filtroProductTypes = optcatalogo.value.productTypes || [0];
const filtroExcludeProductTypes = optcatalogo.value.excludeproductTypes || [0];
const filtroidTipologie = optcatalogo.value.idTipologie || [];
const filtroidTipoFormato = optcatalogo.value.idTipoFormato || [];
const editore = getEditoreDaFiltrare(optcatalogo.value.editore);
const filtroPublishers = editore || [];
const idCollane = getIdCollaneDaFiltrare(optcatalogo.value.idCollane);
@@ -693,6 +710,7 @@ export default defineComponent({
filtroProductTypes,
filtroExcludeProductTypes,
filtroidTipologie,
filtroidTipoFormato,
filtroPublishers,
filtroCollane,
arrargomstr,
@@ -752,6 +770,7 @@ export default defineComponent({
!arraysEqual(scheda.productTypes, schedaprec?.productTypes) ||
!arraysEqual(scheda.excludeproductTypes, schedaprec?.excludeproductTypes) ||
!arraysEqual(scheda.idTipologie, schedaprec?.idTipologie) ||
!arraysEqual(scheda.idTipoFormato, schedaprec?.idTipoFormato) ||
!arraysEqual(scheda.editore, schedaprec?.editore) ||
!arraysEqual(scheda.idCollane, schedaprec?.idCollane)
;
@@ -767,6 +786,7 @@ export default defineComponent({
const filtroProductTypes = scheda.productTypes || [0];
const filtroExcludeProductTypes = scheda.excludeproductTypes || [0];
const filtroidTipologie = scheda.idTipologie || [];
const filtroidTipoFormato = scheda.idTipoFormato || [];
const editore = getEditoreDaFiltrare(scheda.editore);
const filtroPublishers = editore || [];
const idCollane = getIdCollaneDaFiltrare(scheda.idCollane);
@@ -795,6 +815,7 @@ export default defineComponent({
filtroProductTypes,
filtroExcludeProductTypes,
filtroidTipologie,
filtroidTipoFormato,
filtroPublishers,
filtroCollane,
arrargomstr,
@@ -1091,7 +1112,11 @@ export default defineComponent({
if (showListaArgomenti.value)
cat.value = tools.getCookie(getKeyCatAtLoad(), '')
tabcatalogo.value = tools.getCookie('TAB_CAT', 'visu')
if (getCatalogoByMyPage.value) {
tabcatalogo.value = tools.getCookie('TAB_CAT', 'visu')
} else {
tabcatalogo.value = 'visu'
}
optrigenera.value.visibilitaDisp = tools.getCookie((showListaArgomenti.value ? 'INC_ES_' : '') + 'VIS_DISP', costanti.DISP.DISPONIBILI)
optrigenera.value.stato = tools.getCookie((showListaArgomenti.value ? 'INC_ES_' : '') + 'VIS_STATO', costanti.STATO.IN_COMMERCIO)

View File

@@ -190,6 +190,7 @@
</div>
<CProductTable
v-if="loadpage"
:lista_prodotti="lista_prodotti"
@update:lista_prodotti="updateProducts"
:optcatalogo="optcatalogo"
@@ -698,37 +699,24 @@
<pre>
<strong>PASSI DA COMPIERE PER FARE AGGIORNAMENTI :</strong>
1. Ottenere il file delle descrizioni aggiornato (da Matteo chiedere l'export di tutti i prodotti presenti su GruppoMacro - XML)
1. Ottenere il file delle descrizioni aggiornato (esportare tutti i prodotti presenti su GruppoMacro - XML)
<a
href="https://www.gruppomacro.com/admin/prodotti_esportazione.php"
target="_blank"
>Esporta Prodotti (XML)</a>
2. Eseguire "IMPORTA DESCRIZIONI E LINK DA SITO GRUPPOMACRO (XML)" - importa_descrizioni_e_link.xml
3. Visualizza
<a
href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-articles-fatturati"
target="_blank"
>Ranking</a> -
3. Visualizza:
<a
href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-articles-sales"
target="_blank"
>(Ranking Ordini)</a>
>Articoli Venduti</a>
e controlla se tutto ok
<br>
4. Esporta il file del Ranking ed importarlo con "IMPORTA RANKING DA JSON"
<a
href="http://vps-88271abb.vps.ovh.net/apimacro/public/export-articles-sales-json"
target="_blank"
>(Esporta Ranking Venduti e Fatturati)</a
>
5. Scarica Catalogo (<a
href="https://www.fioredellavita.it/wp-content/uploads/woo-feed/custom/json/primofeed-2.json"
target="_blank"
>Catalogo primofeed-2.json</a
>)
6. Esegui "Importa Cataloghi da JSON (ImportaMacro)"
7. GENERARE UN CATALOGO cliccando su "CREA CATALOGO ..."
4 . GENERARE UN CATALOGO cliccando su "CREA CATALOGO ..."
8. <a
href="https://gruppomacro.app/admin/convertPDF"
@@ -749,11 +737,6 @@
target="_blank"
>Tabella Argomenti </a>
<a
href="https://www.fioredellavita.it/wp-admin/admin.php?page=webappick-manage-feeds"
target="_blank"
>Gestisci Campi Catalogo FDV (CTXFEED)</a
>
<a
href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-lista-ordini-totale/2024-11-01"
target="_blank"
@@ -775,11 +758,27 @@
<CMyDialog
v-model="rigeneraLibri"
title="Rigenera Lista"
class="q-ma-md"
class="q-ma-sm"
>
<q-card class="q-ma-md">
<q-card class="q-ma-sm">
<q-card-section>
<div style="width: 600px; margin: 0 auto">
<div style="width: 800px; margin: 0 auto">
<CMyValueDb
v-if="getCatalogoByMyPage"
:editOn="true"
:title="t('cataloglist.idTipoFormato')"
table="catalogs"
:id="getCatalogoByMyPage._id"
:rec="getCatalogoByMyPage"
mykey="idTipoFormato"
debounce="1000"
:type="costanti.FieldType.multiselect"
jointable="t_web_tipiformatos"
class="q-mb-md"
:dense="false"
>
</CMyValueDb>
<div class="row">
<CMyValueDb
v-if="getCatalogoByMyPage"
@@ -795,8 +794,6 @@
:dense="false"
>
</CMyValueDb>
</div>
<div>
<CMyValueDb
v-if="getCatalogoByMyPage"
:editOn="true"