From 5668c620da15931d8b9b5741dd79ba8257ab39c2 Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Fri, 13 Jun 2025 17:46:03 +0200 Subject: [PATCH] - Sistemato link pdf che ogni volta che si aggiorna prendeva il PDF dalla cache... - Raccolta Cataloghi, procedura che li AUTO genera in automatico. --- src/server/controllers/articleController.js | 2 +- src/server/modules/Cart.js | 2 +- src/server/modules/CronMod.js | 16 +++ src/server/modules/GenPdf.js | 145 +++++++++++++++++++- src/server/modules/Macro.js | 81 ++++++----- src/server/router/admin_router.js | 73 +--------- src/server/tools/general.js | 6 + src/server/tools/globalTables.js | 5 +- src/server/version.txt | 2 +- 9 files changed, 223 insertions(+), 109 deletions(-) diff --git a/src/server/controllers/articleController.js b/src/server/controllers/articleController.js index e814558..c63ade1 100644 --- a/src/server/controllers/articleController.js +++ b/src/server/controllers/articleController.js @@ -823,7 +823,7 @@ exports.updateLocalDb = async (tableContent, options) => { } } - if (!reccateg.idArgomento) { + if (!reccateg?.idArgomento) { // Se non c'è l'argomento, allora lo cerco nel DB const recarg = await T_Web_Argomenti.findOne({ Descrizione: reccateg.name }).lean(); reccateg.idArgomento = recarg.IdArgomento; diff --git a/src/server/modules/Cart.js b/src/server/modules/Cart.js index d9ce1b8..21b65e1 100755 --- a/src/server/modules/Cart.js +++ b/src/server/modules/Cart.js @@ -6,7 +6,7 @@ const { ObjectId } = require('mongodb'); const Gasordine = require('../models/gasordine'); const Order = require('../models/order'); -const OrderClass = require('../modules/orderclass'); +const OrderClass = require('../modules/OrderClass'); const Scontistica = require('../models/scontistica'); diff --git a/src/server/modules/CronMod.js b/src/server/modules/CronMod.js index 5b173f9..cfbf944 100644 --- a/src/server/modules/CronMod.js +++ b/src/server/modules/CronMod.js @@ -88,6 +88,22 @@ class CronMod { await genPdf.launch(); return await genPdf.generatePdfFromIdCatalog(mydata.options); + } else if (mydata.dbop === 'GeneraPdfRaccolta') { + + const genPdf = new GenPdf(idapp); + + await genPdf.launch(); + + return await genPdf.generatePdfFromIdRaccolta(mydata.options); + } else if (mydata.dbop === 'onlinePdfRaccolta') { + + const genPdf = new GenPdf(idapp); + + await genPdf.launch(); + + mydata.options.idapp = idapp; + + return await genPdf.onlinePdfFromIdRaccolta(mydata.options); } else if (mydata.dbop === 'ReplaceAllCircuits') { // ++ Replace All Circuitname with 'Circuito RIS %s' await Circuit.replaceAllCircuitNames(idapp); diff --git a/src/server/modules/GenPdf.js b/src/server/modules/GenPdf.js index 71a9aa3..c3fa52e 100644 --- a/src/server/modules/GenPdf.js +++ b/src/server/modules/GenPdf.js @@ -15,6 +15,7 @@ const tools = require('../tools/general'); const shared_consts = require('../tools/shared_nodejs'); const { compress } = require('compress-pdf'); +const { RaccoltaCataloghi } = require('../models/raccoltacataloghi'); class GenPdf { constructor(idapp) { @@ -210,7 +211,6 @@ class GenPdf { // Assicurati che la directory output esista const outputDir = path.dirname(outputFile); - const fs = require('fs').promises; try { await fs.mkdir(outputDir, { recursive: true }); } catch (error) { @@ -387,6 +387,49 @@ class GenPdf { return ''; } + async generatePdfFromIdRaccolta(options) { + try { + if (!options) { + console.error('Opzioni non passate !'); + return null; + } + const raccolta = await RaccoltaCataloghi.findById(options.idRaccolta); + if (raccolta) { + for (const catalogo of raccolta.lista_cataloghi) { + await this.generatePdfFromIdCatalog({ + ...options, + idCatalog: catalogo._id, + }); + } + } + } catch (e) { + console.error('err', e); + } + } + async onlinePdfFromIdRaccolta(options) { + try { + if (!options) { + console.error('Opzioni non passate !'); + return null; + } + const raccolta = await RaccoltaCataloghi.findById(options.idRaccolta); + if (raccolta) { + for (const catalogo of raccolta.lista_cataloghi) { + await this.onlinePdfFromIdCatalog({ + ...options, + id_catalog: catalogo._id, + }); + } + } + } catch (e) { + console.error('err', e); + } + } + + async onlinePdfFromIdCatalog(options) { + const risout = await GenPdf.onlinePdf(options); + } + async generatePdfFromIdCatalog(options) { try { if (!options) { @@ -435,13 +478,36 @@ class GenPdf { } } - return { + const ris = { fileout: filenamerelative, fileout_compressed: filenamerelative_compressed, filesize: await tools.getSizeFile(fullnamepath), filesize_compressed: await tools.getSizeFile(fullnamepath_compr), error: '', }; + + if (catalog) { + if (stampa) { + catalog.pdf_generato_stampa = ris.fileout; + catalog.pdf_generato_stampa_compressed = ris.fileout_compressed; + + catalog.pdf_generato_stampa_size = ris.filesize; + catalog.pdf_generato_stampa_compr_size = ris.filesize_compressed; + + catalog.data_generato_stampa = tools.getDateNow(); + } else { + catalog.pdf_generato_compressed = ris.fileout_compressed; + catalog.pdf_generato = ris.fileout; + + catalog.pdf_generato_size = ris.filesize; + catalog.pdf_generato_compr_size = ris.filesize_compressed; + + catalog.data_generato = tools.getDateNow(); + } + await catalog.save(); + } + + return ris; } catch (error) { console.error('Errore durante la generazione del PDF dal catalogo ID:', error); return { @@ -481,6 +547,81 @@ class GenPdf { }); }); } + + static async onlinePdf(options) { + const idapp = options.idapp; + const id_catalog = options.id_catalog; + const id_raccolta = options.id_raccolta; + const stampa = options.stampa; + const compresso = options.compresso; + let mydir = ''; + let risout = {}; + + try { + let myrec = null; + + // Aggiorna il PDF OnLine, copiando il file da Generato a OnLine + if (id_catalog) { + myrec = await Catalog.findOne({ _id: id_catalog }); + } else if (id_raccolta) { + myrec = await RaccoltaCataloghi.findOne({ _id: id_raccolta }); + } + + if (myrec) { + mydir = tools.getdirByIdApp(idapp) + '/'; + // const baseurl = this.getHostByIdApp(idapp); + + if (stampa) { + myrec.pdf_online_stampa = myrec.pdf_generato_stampa?.replace('_generato', ''); + } else { + myrec.pdf_online = myrec.pdf_generato?.replace('_generato', ''); + } + + const myfile = stampa ? myrec.pdf_generato_stampa : myrec.pdf_generato; + + + if (myfile && (await tools.isFileExistsAsync(mydir + myfile))) { + // Aggiorna il PDF OnLine, copiando il file da Generato a OnLine + let fileOrigin = mydir + (stampa ? myrec.pdf_generato_stampa : myrec.pdf_generato); + + if (compresso) { + let fileInCompressed = tools.removeFileExtension(fileOrigin) + `_compressed.pdf`; + // Se esiste allora prende questo COmpresso ! + if (await tools.isFileExistsAsync(fileInCompressed)) { + fileOrigin = fileInCompressed; + } else { + } + } + const fileDest = mydir + (stampa ? myrec.pdf_online_stampa : myrec.pdf_online); + const fileDestNoDir = stampa ? myrec.pdf_online_stampa : myrec.pdf_online; + // copia il file + await fs.copyFile(fileOrigin, fileDest); + + if (stampa) { + myrec.pdf_online_stampa_size = await tools.getSizeFile(fileDest); + } else { + myrec.pdf_online_size = await tools.getSizeFile(fileDest); + } + + if (stampa) { + myrec.data_online_stampa = myrec.data_generato_stampa; + } else { + myrec.data_online = myrec.data_generato; + } + + // Aggiorna il record + await myrec.save(); + } + + risout = { record: myrec._doc }; + } + + return risout; + } catch (e) { + console.error('Err Online-pdf', e.message); + return null; + } + } } module.exports = GenPdf; diff --git a/src/server/modules/Macro.js b/src/server/modules/Macro.js index 24072f7..6d56245 100644 --- a/src/server/modules/Macro.js +++ b/src/server/modules/Macro.js @@ -436,7 +436,6 @@ class Macro { console.log('numrec', numrec); } - let rimuoviTabellePerIniziare = false; let count = 0; @@ -467,16 +466,16 @@ class Macro { .filter(([isbn, products]) => products.length > 1) .map(([isbn]) => isbn); - recproducts = recproducts.filter(product => isbnConMultipliRecord.includes(product.Ean13)); + recproducts = recproducts.filter((product) => isbnConMultipliRecord.includes(product.Ean13)); - console.log(`Trovati ${isbnConMultipliRecord.length} record con ISBN duplicati: ${isbnConMultipliRecord.join(', ')}`); - + console.log( + `Trovati ${isbnConMultipliRecord.length} record con ISBN duplicati: ${isbnConMultipliRecord.join(', ')}` + ); } for (const recproduct of recproducts) { await this.elaboraProdotto(recproduct, opt); - const sku = recproduct.IdArticolo; if (sku) { @@ -859,44 +858,52 @@ class Macro { * Gestisce le categorie e sottocategorie del prodotto. */ async gestisciCategorie(productInfo, product) { - if (product.DescrArgomento) { - productInfo.idCatProds = []; - const reccateg = await CatProd.findOne({ idapp: this.idapp, name: product.DescrArgomento }); - let nuovaCategoria = null; - if (!reccateg) { - nuovaCategoria = new CatProd({ idapp: this.idapp, name: product.DescrArgomento }); - await nuovaCategoria.save(); - } - - if (!reccateg.idArgomento) { - // Se non c'è l'argomento, allora lo cerco nel DB - const recarg = await T_Web_Argomenti.findOne({ Descrizione: product.DescrArgomento }).lean(); - reccateg.idArgomento = recarg.IdArgomento; - await reccateg.save(); - } - - const myriscat = reccateg?._id || (nuovaCategoria ? nuovaCategoria._id : null); - if (myriscat) productInfo.idCatProds.push(myriscat); - } else { - if (product.categories) { - // const arrcat = product.categories.trim().split(','); - const arrcat = product.categories.trim().split(','); + try { + if (product.DescrArgomento) { productInfo.idCatProds = []; + const reccateg = await CatProd.findOne({ idapp: this.idapp, name: product.DescrArgomento }); + let nuovaCategoria = null; + if (!reccateg) { + nuovaCategoria = new CatProd({ idapp: this.idapp, name: product.DescrArgomento }); + await nuovaCategoria.save(); + } - for (const mycat of arrcat) { - const mycatstr = mycat.trim(); - const reccateg = await CatProd.findOne({ idapp: this.idapp, name: mycatstr }).lean(); - - let nuovaCategoria = null; - if (!reccateg) { - nuovaCategoria = new CatProd({ idapp: this.idapp, name: mycatstr }); - await nuovaCategoria.save(); + + if (!reccateg?.idArgomento && product.DescrArgomento) { + // Se non c'è l'argomento, allora lo cerco nel DB + const recarg = await T_Web_Argomenti.findOne({ Descrizione: product.DescrArgomento }).lean(); + if (recarg) { + reccateg.idArgomento = recarg.IdArgomento; + await reccateg.save(); } + } - const myriscat = reccateg?._id || (nuovaCategoria ? nuovaCategoria._id : null); - if (myriscat) productInfo.idCatProds.push(myriscat); + + const myriscat = reccateg?._id || (nuovaCategoria ? nuovaCategoria._id : null); + if (myriscat) productInfo.idCatProds.push(myriscat); + } else { + if (product.categories) { + // const arrcat = product.categories.trim().split(','); + const arrcat = product.categories.trim().split(','); + productInfo.idCatProds = []; + + for (const mycat of arrcat) { + const mycatstr = mycat.trim(); + const reccateg = await CatProd.findOne({ idapp: this.idapp, name: mycatstr }).lean(); + + let nuovaCategoria = null; + if (!reccateg) { + nuovaCategoria = new CatProd({ idapp: this.idapp, name: mycatstr }); + await nuovaCategoria.save(); + } + + const myriscat = reccateg?._id || (nuovaCategoria ? nuovaCategoria._id : null); + if (myriscat) productInfo.idCatProds.push(myriscat); + } } } + } catch (error) { + console.error('Errore gestisciCategorie:', error); } } diff --git a/src/server/router/admin_router.js b/src/server/router/admin_router.js index 7359cbe..b9422d6 100755 --- a/src/server/router/admin_router.js +++ b/src/server/router/admin_router.js @@ -513,7 +513,7 @@ async function ConvertPDF_Generatore(options, instampa) { let marginLeft = instampa ? parseFloat(options.print_left) : 0; if (instampa) { - suffisso_filename = '-stampabile_generato'; + suffisso_filename = '_stampabile_generato'; } else { suffisso_filename = '_generato'; } @@ -614,72 +614,13 @@ async function ConvertPDF_Generatore(options, instampa) { }; } + + router.post('/online-pdf', authenticate, async (req, res) => { console.log('/online-pdf'); - idapp = req.body.idapp; - id_catalog = req.body.id_catalog; - id_raccolta = req.body.id_raccolta; - stampa = req.body.stampa; - compresso = req.body.compresso; - let mydir = ''; - let risout = {}; - try { - let myrec = null; - - // Aggiorna il PDF OnLine, copiando il file da Generato a OnLine - if (id_catalog) { - myrec = await Catalog.findOne({ _id: id_catalog }); - } else if (id_raccolta) { - myrec = await RaccoltaCataloghi.findOne({ _id: id_raccolta }); - } - - if (myrec) { - mydir = tools.getdirByIdApp(idapp) + '/'; - // const baseurl = this.getHostByIdApp(idapp); - - if (stampa) { - myrec.pdf_online_stampa = myrec.pdf_generato_stampa.replace('_generato', ''); - } else { - myrec.pdf_online = myrec.pdf_generato?.replace('_generato', ''); - } - - // Aggiorna il PDF OnLine, copiando il file da Generato a OnLine - let fileOrigin = mydir + (stampa ? myrec.pdf_generato_stampa : myrec.pdf_generato); - - if (compresso) { - let fileInCompressed = tools.removeFileExtension(fileOrigin) + `_compressed.pdf`; - // Se esiste allora prende questo COmpresso ! - if (await tools.isFileExistsAsync(fileInCompressed)) { - fileOrigin = fileInCompressed; - } else { - } - } - const fileDest = mydir + (stampa ? myrec.pdf_online_stampa : myrec.pdf_online); - const fileDestNoDir = stampa ? myrec.pdf_online_stampa : myrec.pdf_online; - // copia il file - await fs.promises.copyFile(fileOrigin, fileDest); - - if (stampa) { - myrec.pdf_online_stampa_size = await tools.getSizeFile(fileDest); - } else { - myrec.pdf_online_size = await tools.getSizeFile(fileDest); - } - - if (stampa) { - myrec.data_online_stampa = myrec.data_generato_stampa; - } else { - myrec.data_online = myrec.data_generato; - } - - // Aggiorna il record - await myrec.save(); - - risout = { record: myrec._doc }; - } - - // risout + const risout = await GenPdf.onlinePdf(req.body); return res.status(200).send(risout); } catch (e) { @@ -687,6 +628,7 @@ router.post('/online-pdf', authenticate, async (req, res) => { } }); + async function JoinPDFCatalogs(cataloghi, options, outputFile, stampa) { try { // Per ogni catalogo prendi il suo PDF Generato @@ -769,7 +711,7 @@ router.post('/join-pdf', authenticate, async (req, res) => { if (options.stampa) { outputFileStampa = - path.join(full_dir_out, path.basename(tools.removeFileExtension(outputFile))) + '-stampabile.pdf'; + path.join(full_dir_out, path.basename(tools.removeFileExtension(outputFile))) + '_stampabile.pdf'; // Creazione file per STAMPA const ris_stampa = await JoinPDFCatalogs(cataloghi, options, outputFileStampa, true); if (ris_stampa) { @@ -805,7 +747,7 @@ router.post('/join-pdf', authenticate, async (req, res) => { } } - raccolta.save(); + await raccolta.save(); risout = { raccolta: raccolta._doc }; } @@ -1978,7 +1920,6 @@ async function importaCatalogo(data) { let nontrovati = 0; - for (const product of dataObjects) { let isnuovo = false; let setta = false; diff --git a/src/server/tools/general.js b/src/server/tools/general.js index e462091..5fc7716 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -6206,4 +6206,10 @@ module.exports = { fixFilePath(myfilepath) { return myfilepath.replace(/\\/g, '/'); }, + + getDateNow() { + const mydate = new Date(); + return mydate; + }, + }; diff --git a/src/server/tools/globalTables.js b/src/server/tools/globalTables.js index df5ed1c..5019f76 100755 --- a/src/server/tools/globalTables.js +++ b/src/server/tools/globalTables.js @@ -1070,9 +1070,12 @@ module.exports = { // modifiche ai campi se necessario, per esempio: path: newpath, title: title || newpath, + subtitle: '', inmenu: false, active: true, date_updated: new Date(), + isTemplate: false, + author_username: '', }); // Salva il nuovo record di Page @@ -1112,7 +1115,7 @@ module.exports = { const newElems = await MyElem.find({ idPage: newPage._id }).lean(); - console.log('Duplicazione completata con successo.'); + // console.log('Duplicazione completata con successo.'); const newPageOut = await MyPage.findById(newPage._id).lean(); return { newPage: newPageOut, newElems }; diff --git a/src/server/version.txt b/src/server/version.txt index 66472fc..7b330ae 100644 --- a/src/server/version.txt +++ b/src/server/version.txt @@ -1 +1 @@ -1.2.54 \ No newline at end of file +1.2.56 \ No newline at end of file