From b643c7cdc33e3dfda1417ab8f38492a5a170e53a Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Tue, 11 Feb 2025 18:57:57 +0100 Subject: [PATCH] - Cataloghi aggiornamento... --- src/server/models/catalog.js | 15 +++++-- src/server/models/collana.js | 4 +- src/server/models/myelem.js | 70 +++++++++++++++++++++++++++++++ src/server/models/mypage.js | 4 +- src/server/models/publisher.js | 2 +- src/server/router/index_router.js | 4 +- src/server/version.txt | 2 +- 7 files changed, 88 insertions(+), 13 deletions(-) diff --git a/src/server/models/catalog.js b/src/server/models/catalog.js index e02af90..42ad718 100755 --- a/src/server/models/catalog.js +++ b/src/server/models/catalog.js @@ -24,10 +24,6 @@ const CatalogSchema = new Schema({ type: Boolean, default: false, }, - versione_perstampa: { - type: Boolean, - default: false, - }, title: { type: String, }, @@ -35,6 +31,9 @@ const CatalogSchema = new Schema({ idCollane: [{ type: Number, }], + argomenti: [{ + type: String, + }], editore: [{ type: String }], descr_introduttiva: { type: String, @@ -42,12 +41,17 @@ const CatalogSchema = new Schema({ idPageAssigned: { type: String, }, + idPageAssigned_stampa: { + type: String, + }, referenti: [{ type: String, }], img_bordata: IImg, img_intro: IImg, + img_bordata_stampa: IImg, + img_intro_stampa: IImg, pagina_introduttiva_sfondo_nero: { type: Boolean, }, @@ -70,6 +74,8 @@ const CatalogSchema = new Schema({ }, }); +/* +TOLTO ALTRIMENTI su /settable non mi crea l'ID CatalogSchema.pre('save', async function (next) { if (this.isNew) { this._id = new ObjectId(); @@ -77,6 +83,7 @@ CatalogSchema.pre('save', async function (next) { next(); }); +*/ CatalogSchema.statics.getFieldsForSearch = function () { return [{ field: 'title', type: tools.FieldType.string }] diff --git a/src/server/models/collana.js b/src/server/models/collana.js index e2470c5..4b0dee3 100755 --- a/src/server/models/collana.js +++ b/src/server/models/collana.js @@ -37,7 +37,7 @@ var Collana = module.exports = mongoose.model('Collana', CollanaSchema); module.exports.getFieldsForSearch = function () { return [ - { field: 'descrizione', type: tools.FieldType.string }, + { field: 'title', type: tools.FieldType.string }, ] }; @@ -49,7 +49,7 @@ module.exports.executeQueryTable = function (idapp, params) { module.exports.findAllIdApp = async function (idapp) { const myfind = { idapp }; - return await Collana.find(myfind).sort({descrizione: 1}); + return await Collana.find(myfind).sort({title: 1}).lean(); }; module.exports.createIndexes((err) => { diff --git a/src/server/models/myelem.js b/src/server/models/myelem.js index ec25400..afb153c 100755 --- a/src/server/models/myelem.js +++ b/src/server/models/myelem.js @@ -68,6 +68,7 @@ const catalogo = new Schema( pdf_filename: { type: String }, printable: { type: Boolean }, indebug: { type: Boolean }, + maxnumlibri: { type: Number }, first_page: IDimensioni, last_page: IDimensioni, @@ -381,11 +382,40 @@ MyElemSchema.statics.findAllIdApp = async function (idapp) { return arrrec; }; +async function deleteOldMyElems(idapp) { + try { + + const { MyPage } = require('../models/mypage'); + + // 1. Recupera tutti gli _id dalle pagine + const existingPages = await MyPage.find({idapp}).select('_id').lean(); + const existingPageIds = existingPages.map(page => page._id.toString()); + + // 2. Trova gli MyElem che hanno idPage non esistenti in MyPage + const elemsToDelete = await MyElem.find({ + idapp, + idPage: { $nin: existingPageIds } + }); + + if (elemsToDelete.length > 0) { + // 3. Esegui la cancellazione + const result = await MyElem.deleteMany({ idPage: { $nin: existingPageIds } }); + console.log(`Cancellati ${result.deletedCount} documenti di MyElem.`); + } else { + console.log('Nessun documento da cancellare.'); + } + } catch (error) { + console.error('Errore durante la cancellazione dei documenti:', error); + } +} + MyElemSchema.statics.findallSchedeTemplate = async function (idapp) { const MyElem = this; try { + const { MyPage } = require('../models/mypage'); + const ris = await MyElem.find({ idapp }).lean(); const schedeTemplate = ris.flatMap(elem => @@ -399,6 +429,45 @@ MyElemSchema.statics.findallSchedeTemplate = async function (idapp) { : [] ); + const duplicateIds = schedeTemplate.reduce((acc, scheda) => { + const id = scheda.scheda._id; // Ottieni l'ID della scheda + if (!acc[id]) { + acc[id] = []; // Inizializza un array per tenere traccia delle pagine + } + acc[id].push(scheda.idPageOrig); // Aggiungi l'idPage all'array + return acc; + }, {}); + + // Filtra i duplicati + const duplicates = Object.entries(duplicateIds) + .filter(([_, pages]) => pages.length > 1) // Mantieni solo gli ID con più di un'istanza + .map(([id, pages]) => ({ id, pages })); // Ottieni ID e pagine corrispondenti + + // Recupera i dettagli delle pagine + const pageIds = duplicates.flatMap(dup => dup.pages); // Estrai tutti gli idPage + const pages = await MyPage.find({ idapp, _id: { $in: pageIds } }).lean(); + + // Crea una mappatura tra idPage e title + const pageMap = pages.reduce((acc, page) => { + acc[page._id] = page.title; // Mappa idPage a title + return acc; + }, {}); + + // Associa i titoli delle pagine agli ID duplicati + const resultWithTitles = duplicates.map(dup => ({ + id: dup.id, + pages: dup.pages.map(_id => ({ + _id, + title: pageMap[_id] || 'Titolo non trovato' // Usa la mappatura per trovare il titolo + })) + })); + + if (resultWithTitles.length > 0) { + console.log('Duplicati e titoli delle pagine:', JSON.stringify(resultWithTitles, null, 2)); + await deleteOldMyElems(idapp); + } + + return schedeTemplate; } catch (e) { console.error('Err', e); @@ -420,6 +489,7 @@ MyElemSchema.statics.getNewFreeNameTemplate = async function (idapp, idPageOrig, { 'catalogo.arrSchede.scheda.name': 1, 'catalogo.arrSchede.scheda.isTemplate': 1, + 'catalogo.arrSchede.scheda.isPagIntro': 1, 'catalogo.arrSchede.scheda.idPage': 1 }); diff --git a/src/server/models/mypage.js b/src/server/models/mypage.js index b1fb77b..9d7adef 100755 --- a/src/server/models/mypage.js +++ b/src/server/models/mypage.js @@ -166,7 +166,7 @@ MyPageSchema.statics.findAllIdApp = async function (idapp) { return await MyPage.find(myfind, (err, arrrec) => { return arrrec - }); + }).sort({ title: 1 }).lean(); }; MyPageSchema.statics.findOnlyStruttRec = async function (idapp) { @@ -229,7 +229,7 @@ MyPageSchema.statics.findInternalPages = async function (idapp) { only_residenti: 1, }, (err, arrrec) => { return arrrec - }); + }).lean(); }; const MyPage = mongoose.model('MyPage', MyPageSchema); diff --git a/src/server/models/publisher.js b/src/server/models/publisher.js index bf70c9c..5bdd3b2 100755 --- a/src/server/models/publisher.js +++ b/src/server/models/publisher.js @@ -42,7 +42,7 @@ module.exports.executeQueryTable = function (idapp, params) { module.exports.findAllIdApp = async function (idapp) { const myfind = { idapp }; - return await Publisher.find(myfind); + return await Publisher.find(myfind).sort({ name: 1 }).lean(); }; module.exports.createIndexes((err) => { diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 61b6e74..66a697d 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -682,7 +682,7 @@ router.post('/getobj', authenticate_noerror, async (req, res) => { perm: { $bitsAnySet: 0b10000 }, }, { username: 1, name: 1, surname: 1 } - ).lean(); + ).sort({ username: 1 }).lean(); } // Invia la risposta @@ -905,8 +905,6 @@ async function duplicatePage(pageId, newpath) { } } - let newelem = { ...elem }; - if (catalogo) elem.catalogo = { ...catalogo }; diff --git a/src/server/version.txt b/src/server/version.txt index 0ee9c5d..a2a8e42 100644 --- a/src/server/version.txt +++ b/src/server/version.txt @@ -1 +1 @@ -1.1.20 \ No newline at end of file +1.1.21 \ No newline at end of file