From 233c5fa28ec530fb407bf4499ceb2a01bada6ff2 Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Wed, 19 Nov 2025 19:44:27 +0100 Subject: [PATCH] - risolto problema sull'attivazione del Circuito ITA. non arrivava il messaggio - sistemazioni sul profilo --- .env.prod.pcb | 4 +- .env.prod.riso | 4 +- src/models/circuit.js | 843 +++++++++++++++++++------------------ src/models/user.js | 112 ++++- src/router/users_router.js | 8 +- src/tools/globalTables.js | 8 - 6 files changed, 552 insertions(+), 427 deletions(-) diff --git a/.env.prod.pcb b/.env.prod.pcb index 5cc47aa..d833b55 100644 --- a/.env.prod.pcb +++ b/.env.prod.pcb @@ -30,8 +30,8 @@ PATH_SERVER_CRT=fullchain.pem PROD=1 PROJECT_DESCR_MAIN='__PROJECTS' SECRK=iUUb38v23jjDFaosWj92axkBOXCQ -TOKEN_LIFE=2h -REFRESH_TOKEN_LIFE=14d +TOKEN_LIFE=30d +REFRESH_TOKEN_LIFE=30d AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNVZZ DOMAINS=[{"hostname":"piuchebuono.app","port":"3030"},{"hostname":"gruppomacro.app","port":"3010"}] DOMAINS_ALLOWED=["gruppomacro.app","piuchebuono.app"] diff --git a/.env.prod.riso b/.env.prod.riso index d3ad1fc..49e075c 100644 --- a/.env.prod.riso +++ b/.env.prod.riso @@ -27,8 +27,8 @@ PATH_SERVER_CRT=fullchain.pem PROD=1 PROJECT_DESCR_MAIN='__PROJECTS' SECRK=iUUb38v23jjDFaosWj92axkBOXCQ -TOKEN_LIFE=2h -REFRESH_TOKEN_LIFE=14d +TOKEN_LIFE=30d +REFRESH_TOKEN_LIFE=30d AUTH_NEW_SITES=B234HDSAOJ734ndcsdKWNV DOMAINS=[{"hostname":"riso.app","port":"3006"},{"hostname":"freeplanet.app","port":"3000"},{"hostname":"nuovomondo.app","port":"3032"}] DOMAINS_ALLOWED=["riso.app","comunitanuovomondo.app","nuovomondo.app","kolibrilab.it","artenergetica.org","freeplanet.app","www.freeplanet.app","freeplanet.app:3000","freeplanet.app:3001","www.freeplanet.app:3000","www.freeplanet.app:3001"] diff --git a/src/models/circuit.js b/src/models/circuit.js index 5334575..db31343 100755 --- a/src/models/circuit.js +++ b/src/models/circuit.js @@ -14,11 +14,10 @@ const { Account } = require('../models/account'); const { Province } = require('../models/province'); const shared_consts = require('../tools/shared_nodejs'); - const i18n = require('i18n'); // Resolving error Unknown modifier: $pushAll -mongoose.plugin(schema => { +mongoose.plugin((schema) => { schema.options.usePushEach = true; }); @@ -53,17 +52,17 @@ const CircuitSchema = new Schema({ idCity: [ { type: Number, - }], - strProv: - { + }, + ], + strProv: { type: String, }, - card: // Punti cardinali - { + // Punti cardinali + card: { type: String, }, pub_to_share: { - type: Number, // PUB_TO_SHARE_ALL, PUB_TO_SHARE_ONLY_TABLE_FOLLOW + type: Number, // PUB_TO_SHARE_ALL, PUB_TO_SHARE_ONLY_TABLE_FOLLOW }, visibility: [ { @@ -139,7 +138,8 @@ const CircuitSchema = new Schema({ deperimento: { type: Boolean, }, - freq_deper: { // H, D, W, M, Y + freq_deper: { + // H, D, W, M, Y type: String, }, minuto_deper: { @@ -187,31 +187,36 @@ const CircuitSchema = new Schema({ description: { type: String, }, - }], + }, + ], req_users: [ { _id: false, username: { type: String }, date: { type: Date }, - }], // username + }, + ], // username refused_users: [ { _id: false, username: { type: String }, date: { type: Date }, - }], // username + }, + ], // username req_groups: [ { _id: false, groupname: { type: String }, date: { type: Date }, - }], // username + }, + ], // username refused_groups: [ { _id: false, groupname: { type: String }, date: { type: Date }, - }], // username + }, + ], // username deleted: { type: Boolean, default: false, @@ -282,10 +287,11 @@ CircuitSchema.statics.findAllIdApp = async function (idapp) { CircuitSchema.statics.isCircuitAdmin = async function (idrec, username) { const Circuit = this; - const mycirc = await Circuit.findOne({ _id: idrec }).lean(); if (mycirc) { - return mycirc.admins.some(admin => (admin.username === username) || (shared_consts.USER_ADMIN_CIRCUITS.includes(admin.username))); + return mycirc.admins.some( + (admin) => admin.username === username || shared_consts.USER_ADMIN_CIRCUITS.includes(admin.username) + ); } return false; @@ -358,32 +364,28 @@ CircuitSchema.statics.getWhatToShow = function (idapp, username) { refused_users: 1, req_groups: 1, refused_groups: 1, - 'mycities': 1, + mycities: 1, }; - }; // Aggiungi agli Admin del Circuito CircuitSchema.statics.addToAdminOfMyCircuit = async function (idapp, username, name) { - - return await Circuit.updateOne({ idapp, name }, + return await Circuit.updateOne( + { idapp, name }, { - $push: - { + $push: { admins: { username, date: new Date(), }, }, - }); - + } + ); }; // Rimuovi dagli Admin del Circuito CircuitSchema.statics.removeAdminOfMyCircuit = async function (idapp, username, name) { - - return await Circuit.updateOne({ idapp, name }, - { $pull: { admins: { username: { $in: [username] } } } }); + return await Circuit.updateOne({ idapp, name }, { $pull: { admins: { username: { $in: [username] } } } }); }; CircuitSchema.statics.getWhatToShow_Unknown = function (idapp, username) { @@ -436,12 +438,11 @@ CircuitSchema.statics.getWhatToShow_Unknown = function (idapp, username) { refused_groups: 1, transactionsEnabled: 1, status: 1, - 'mycities': 1, + mycities: 1, }; }; CircuitSchema.statics.getCircuitsByUsername = async function (idapp, username, user, nummovTodownload) { - try { const { User } = require('../models/user'); const { Account } = require('../models/account'); @@ -453,42 +454,57 @@ CircuitSchema.statics.getCircuitsByUsername = async function (idapp, username, u const manage_mycircuits = await Circuit.find({ idapp, - 'admins': { + admins: { $elemMatch: { username: { $eq: username } }, }, - $or: [ - { deleted: { $exists: false } }, - { deleted: { $exists: true, $eq: false } }], - }).sort({ status: -1, numMembers: -1, name: 1 }).lean(); + $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], + }) + .sort({ status: -1, numMembers: -1, name: 1 }) + .lean(); - let listcircuits = await Circuit.find({ - idapp, - $or: [ - { deleted: { $exists: false } }, - { deleted: { $exists: true, $eq: false } }], - }, whatToShow_Unknown).sort({ name: 1 }).lean(); - - let asked_circuits = await Circuit.find({ - idapp, - 'req_users': { - $elemMatch: { username: { $eq: username } }, + let listcircuits = await Circuit.find( + { + idapp, + $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], }, - $or: [ - { deleted: { $exists: false } }, - { deleted: { $exists: true, $eq: false } }], - }, whatToShow_Unknown).sort({ status: -1 }).lean(); + whatToShow_Unknown + ) + .sort({ name: 1 }) + .lean(); - let refused_circuits = await Circuit.find({ - idapp, - 'refused_users': { - $elemMatch: { username: { $eq: username } }, + let asked_circuits = await Circuit.find( + { + idapp, + req_users: { + $elemMatch: { username: { $eq: username } }, + }, + $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], }, - $or: [ - { deleted: { $exists: false } }, - { deleted: { $exists: true, $eq: false } }], - }, whatToShow_Unknown).sort({ status: -1 }).lean(); + whatToShow_Unknown + ) + .sort({ status: -1 }) + .lean(); - const last_my_transactions = await Movement.getLastN_Transactions(idapp, nummovTodownload, nummovTodownload, username, ''); + let refused_circuits = await Circuit.find( + { + idapp, + refused_users: { + $elemMatch: { username: { $eq: username } }, + }, + $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], + }, + whatToShow_Unknown + ) + .sort({ status: -1 }) + .lean(); + + const last_my_transactions = await Movement.getLastN_Transactions( + idapp, + nummovTodownload, + nummovTodownload, + username, + '' + ); const total_transactions = await Movement.getNumTotalTransactions(idapp, username, ''); return { @@ -498,9 +514,8 @@ CircuitSchema.statics.getCircuitsByUsername = async function (idapp, username, u manage_mycircuits, mycircuits: user.profile.mycircuits, last_my_transactions, - total_transactions + total_transactions, }; - } catch (e) { console.log('Error getCircuitsByUsername', e); } @@ -511,12 +526,10 @@ CircuitSchema.statics.getCircuitsByUsername = async function (idapp, username, u listTrusted: [], asked_circuits: [], refused_circuits: [], - }; }; CircuitSchema.statics.getInfoCircuitByName = async function (idapp, name) { - const whatToShow = this.getWhatToShow(idapp, ''); const myfind = { @@ -526,15 +539,12 @@ CircuitSchema.statics.getInfoCircuitByName = async function (idapp, name) { try { return await Circuit.findOne(myfind, whatToShow).lean(); - } catch (e) { return null; } - }; CircuitSchema.statics.getCircuitByName = async function (idapp, name) { - if (name === 'Circuito RIS Benevento') { name = 'Circuito RIS Campania'; } else if (name === 'RIS Pesaro e Urbino') { @@ -552,15 +562,12 @@ CircuitSchema.statics.getCircuitByName = async function (idapp, name) { try { return await Circuit.findOne(myfind); - } catch (e) { return null; } - }; CircuitSchema.statics.getCircuitIdByName = async function (idapp, name) { - const myfind = { idapp, name, @@ -568,23 +575,20 @@ CircuitSchema.statics.getCircuitIdByName = async function (idapp, name) { try { const circuit = await Circuit.findOne(myfind); - return (!!circuit ? circuit._id : 0); - + return !!circuit ? circuit._id : 0; } catch (e) { return null; } - }; CircuitSchema.statics.getCircuitByProvinceAndCard = async function (idapp, strProv, card) { - let myfind = {}; if (card) { myfind = { idapp, strProv, - card + card, }; } else { myfind = { @@ -595,26 +599,21 @@ CircuitSchema.statics.getCircuitByProvinceAndCard = async function (idapp, strPr try { return await Circuit.findOne(myfind); - } catch (e) { return null; } - }; CircuitSchema.statics.getCircuitById = async function (circuitId) { - const myfind = { _id: circuitId, }; try { return await Circuit.findOne(myfind); - } catch (e) { return null; } - }; CircuitSchema.statics.deleteCircuit = async function (idapp, usernameOrig, name) { @@ -622,9 +621,7 @@ CircuitSchema.statics.deleteCircuit = async function (idapp, usernameOrig, name) return await Circuit.findOneAndDelete({ idapp, name }); }; - CircuitSchema.statics.getUsersSingleCircuit = async function (idapp, username, circuitname, circuitId) { - const { User } = require('../models/user'); try { @@ -671,9 +668,8 @@ CircuitSchema.statics.getUsersSingleCircuit = async function (idapp, username, c name: 1, surname: 1, profile: 1, - idapp: 1 /*, 'circuit.name': 1, 'circuit._id': 1*/ + idapp: 1 /*, 'circuit.name': 1, 'circuit._id': 1*/, }, - }, { $lookup: { @@ -682,16 +678,13 @@ CircuitSchema.statics.getUsersSingleCircuit = async function (idapp, username, c let: { username: '$username', idapp: '$idapp', circuitId: circuitId /*, circuitId: '$circuit._id' */ }, pipeline: [ { - $match: - { - $expr: - { - $and: - [ - { $eq: ['$$username', '$username'] }, - { $eq: ['$$idapp', '$idapp'] }, - { $eq: ['$$circuitId', '$circuitId'] }, - ], + $match: { + $expr: { + $and: [ + { $eq: ['$$username', '$username'] }, + { $eq: ['$$idapp', '$idapp'] }, + { $eq: ['$$circuitId', '$circuitId'] }, + ], }, }, }, @@ -707,22 +700,17 @@ CircuitSchema.statics.getUsersSingleCircuit = async function (idapp, username, c } catch (e) { console.error('e', e); } - }; CircuitSchema.statics.getCircolanteSingolaTransaz = function (accountorigTable, accountdestTable) { - let circolante = 0; - if (accountdestTable.saldo > 0) - circolante += accountdestTable.saldo; - if (accountorigTable.saldo > 0) - circolante += accountorigTable.saldo; + if (accountdestTable.saldo > 0) circolante += accountdestTable.saldo; + if (accountorigTable.saldo > 0) circolante += accountorigTable.saldo; return circolante; }; CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig, extrarec) { - const { User } = require('../models/user'); const { MyGroup } = require('./mygroup'); @@ -740,20 +728,30 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig try { let circuittable = null; - if (extrarec.circuitname) - circuittable = await Circuit.getCircuitByName(idapp, extrarec.circuitname); - if (extrarec.circuitId) - circuittable = await Circuit.getCircuitById(idapp, extrarec.circuitId); + if (extrarec.circuitname) circuittable = await Circuit.getCircuitByName(idapp, extrarec.circuitname); + if (extrarec.circuitId) circuittable = await Circuit.getCircuitById(idapp, extrarec.circuitId); if (circuittable) { const myqty = Math.abs(extrarec.qty); - const esisteDest = await Account.isExistAccountByUsernameAndCircuitId(idapp, extrarec.dest, circuittable._id, extrarec.groupdest, extrarec.contoComDest); - + const esisteDest = await Account.isExistAccountByUsernameAndCircuitId( + idapp, + extrarec.dest, + circuittable._id, + extrarec.groupdest, + extrarec.contoComDest + ); if (!esisteDest) { // Fallo entrare anche sul Circuito (oltre ad aver creato l'Account). - await User.addCircuitToUser(idapp, usernameOrig, extrarec.circuitname, false, extrarec.groupdest, extrarec.contoComDest); + await User.addCircuitToUser( + idapp, + usernameOrig, + extrarec.circuitname, + false, + extrarec.groupdest, + extrarec.contoComDest + ); } if (extrarec.dest) { const foundIfAlreadyCircuit = await User.ifAlreadyInCircuit(idapp, extrarec.dest, extrarec.circuitname); @@ -770,9 +768,24 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig } } - const accountdestTable = await Account.getAccountByUsernameAndCircuitId(idapp, extrarec.dest, circuittable._id, true, false, extrarec.groupdest, extrarec.contoComDest); - const accountorigTable = await Account.getAccountByUsernameAndCircuitId(idapp, usernameOrig, circuittable._id, true, true, extrarec.grouporig, extrarec.contoComOrig); - + const accountdestTable = await Account.getAccountByUsernameAndCircuitId( + idapp, + extrarec.dest, + circuittable._id, + true, + false, + extrarec.groupdest, + extrarec.contoComDest + ); + const accountorigTable = await Account.getAccountByUsernameAndCircuitId( + idapp, + usernameOrig, + circuittable._id, + true, + true, + extrarec.grouporig, + extrarec.contoComOrig + ); const circolantePrec = this.getCircolanteSingolaTransaz(accountorigTable, accountdestTable); @@ -794,11 +807,19 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig if (!onlycheck) { // Add a Transaction ! if (ris.cansend) { - ris.rec = await Movement.addMov(idapp, accountorigTable, accountdestTable, myqty, extrarec.causal, extrarec.causalDest, extrarec.notifId, extrarec.idOrdersCart); + ris.rec = await Movement.addMov( + idapp, + accountorigTable, + accountdestTable, + myqty, + extrarec.causal, + extrarec.causalDest, + extrarec.notifId, + extrarec.idOrdersCart + ); } if (ris.cansend && ris.rec) { - const circolanteAtt = this.getCircolanteSingolaTransaz(accountorigTable, accountdestTable); // Somma di tutte le transazioni @@ -817,17 +838,43 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig let orig = usernameOrig; if (extrarec.grouporig) { - orig = extrarec.grouporig + ' (' + usernameOrig + ')' + orig = extrarec.grouporig + ' (' + usernameOrig + ')'; } if (extrarec.contoComOrig) { - orig = extrarec.contoComOrig + ' (' + usernameOrig + ')' + orig = extrarec.contoComOrig + ' (' + usernameOrig + ')'; } - let dest = (extrarec.dest ? extrarec.dest : '') + (extrarec.groupdest ? extrarec.groupdest : '') + (extrarec.contoComDest ? extrarec.contoComDest : ''); + let dest = + (extrarec.dest ? extrarec.dest : '') + + (extrarec.groupdest ? extrarec.groupdest : '') + + (extrarec.contoComDest ? extrarec.contoComDest : ''); ris.result = true; - let causalDest = extrarec.causalDest ? 'Causale Destinatario: ' + extrarec.causalDest : '' - let msg = '[' + circuittable.name + ']: Inviate Monete da ' + orig + ' a ' + dest + ' ' + myqty + ' ' + circuittable.symbol + ' [causale: ' + extrarec.causal + - `]\n` + causalDest+ `\nSaldi:\n${orig}: ` + extrarec.saldoOrig + ' ' + circuittable.symbol + '] ' + `\n${dest}: ` + extrarec.saldoDest + ' ' + circuittable.symbol + ']'; + let causalDest = extrarec.causalDest ? 'Causale Destinatario: ' + extrarec.causalDest : ''; + let msg = + '[' + + circuittable.name + + ']: Inviate Monete da ' + + orig + + ' a ' + + dest + + ' ' + + myqty + + ' ' + + circuittable.symbol + + ' [causale: ' + + extrarec.causal + + `]\n` + + causalDest + + `\nSaldi:\n${orig}: ` + + extrarec.saldoOrig + + ' ' + + circuittable.symbol + + '] ' + + `\n${dest}: ` + + extrarec.saldoDest + + ' ' + + circuittable.symbol + + ']'; console.log(msg); ris.useraccounts = await Account.getUserAccounts(idapp, usernameOrig); @@ -840,8 +887,10 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig try { const paramsrec = { - mittente, nomecircuito: circuittable.name, - symbol: circuittable.symbol, qty: myqty, + mittente, + nomecircuito: circuittable.name, + symbol: circuittable.symbol, + qty: myqty, transactionDate: ris.rec.transactionDate, causale: extrarec.causal, causalDest: extrarec.causalDest, @@ -851,94 +900,83 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig // Invia una email al destinatario ! await sendemail.sendEmail_RisRicevuti(myuserDest.lang, myuserDest, myuserDest.email, idapp, paramsrec); - } else if (extrarec.groupdest || extrarec.contoComDest) { - const groupDestoContoCom = extrarec.groupdest ? extrarec.groupdest : (extrarec && extrarec.contoComDest ? extrarec.contoComDest : ''); + const groupDestoContoCom = extrarec.groupdest + ? extrarec.groupdest + : extrarec && extrarec.contoComDest + ? extrarec.contoComDest + : ''; let arrusers = await MyGroup.getListAdminsByGroupName(idapp, groupDestoContoCom); - if (arrusers.length <= 0) - arrusers = await Circuit.getListAdminsByCircuitPath(idapp, groupDestoContoCom); + if (arrusers.length <= 0) arrusers = await Circuit.getListAdminsByCircuitPath(idapp, groupDestoContoCom); paramsrec.groupDestoContoCom = groupDestoContoCom; for (let i = 0; i < arrusers.length; i++) { - let myuserDest = await User.getUserByUsername(idapp, arrusers[i].username); // Invia una email al destinatario ! await sendemail.sendEmail_RisRicevuti(myuserDest.lang, myuserDest, myuserDest.email, idapp, paramsrec); - } } } catch (e) { console.error('Err Email sendCoins', e); } - } else { // console.log('NON Inviate Monete da', usernameOrig, extrarec.grouporig, extrarec.dest, extrarec.groupdest, myqty, extrarec.causal); } } return ris; - } } catch (e) { console.error('Err sendCoins', e); ris.result = false; return ris; } - }; // Rimuovo la Richiesta del Circuito CircuitSchema.statics.removeReqCircuit = async function (idapp, username, name) { - - return await Circuit.updateOne({ idapp, name }, - { $pull: { req_users: { username: { $in: [username] } } } }); + return await Circuit.updateOne({ idapp, name }, { $pull: { req_users: { username: { $in: [username] } } } }); }; // Rimuovo la Richiesta del Gruppo sul Circuito CircuitSchema.statics.removeReqGroupCircuit = async function (idapp, groupname, name) { - - return await Circuit.updateOne({ idapp, name }, - { $pull: { req_groups: { groupname: { $in: [groupname] } } } }); + return await Circuit.updateOne({ idapp, name }, { $pull: { req_groups: { groupname: { $in: [groupname] } } } }); }; // Aggiungi agli utenti Rifiutati del Circuito CircuitSchema.statics.refuseReqCircuit = async function (idapp, username, name) { - - return await Circuit.updateOne({ idapp, name }, + return await Circuit.updateOne( + { idapp, name }, { - $push: - { + $push: { refused_users: { username, date: new Date(), }, }, - }); - + } + ); }; CircuitSchema.statics.refuseReqGroupCircuit = async function (idapp, groupname, name) { - - return await Circuit.updateOne({ idapp, name }, + return await Circuit.updateOne( + { idapp, name }, { - $push: - { + $push: { refused_groups: { groupname, date: new Date(), }, }, - }); - + } + ); }; CircuitSchema.statics.updateData = async function (idapp, circuitname) { - try { - const { User } = require('./user'); let aggr1 = [ @@ -958,10 +996,7 @@ CircuitSchema.statics.updateData = async function (idapp, circuitname) { let numMembers = 0; try { numMembers = ris && tools.isArray(ris) ? ris[0].count : 0; - } catch (e) { - - }; - + } catch (e) {} let paramstoupdate = { numMembers: numMembers, @@ -969,62 +1004,47 @@ CircuitSchema.statics.updateData = async function (idapp, circuitname) { const risult = await this.updateOne({ idapp, name: circuitname }, { $set: paramstoupdate }); console.log('risult', risult); - } catch (e) { console.error('Err', e); } - }; CircuitSchema.statics.setDeperimentoOff = async function () { - - return await Circuit.updateMany({}, { $set: { 'deperimento': false } }, - { new: false }); - + return await Circuit.updateMany({}, { $set: { deperimento: false } }, { new: false }); }; CircuitSchema.statics.getNameByCircuitId = async function (circuitId) { - let circuit = await Circuit.findOne({ _id: circuitId }); - if (circuit) - return circuit.name; + if (circuit) return circuit.name; return ''; - }; CircuitSchema.statics.getPathByCircuitName = async function (idapp, circuitName) { - let circuit = await Circuit.findOne({ idapp, name: circuitName }).lean(); - if (circuit) - return '/' + shared_consts.getDirectoryByTable('circuits') + '/' + circuit.path; + if (circuit) return '/' + shared_consts.getDirectoryByTable('circuits') + '/' + circuit.path; return ''; - }; CircuitSchema.statics.getCircuitByCircuitId = async function (circuitId) { - return await Circuit.findOne({ _id: circuitId }); - }; CircuitSchema.statics.getListAdminsByCircuitPath = async function (idapp, circuitPath) { - - let arr = await Circuit.findOne({ - idapp, - path: circuitPath, - $or: [ - { deleted: { $exists: false } }, - { deleted: { $exists: true, $eq: false } }], - }, { admins: 1 }).lean(); + let arr = await Circuit.findOne( + { + idapp, + path: circuitPath, + $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], + }, + { admins: 1 } + ).lean(); let myarr = arr && arr.admins ? arr.admins : []; - return [...myarr, ...shared_consts.USER_ADMIN_CIRCUITS] - + return [...myarr, ...shared_consts.USER_ADMIN_CIRCUITS]; }; - // Imposta a tutti i Conti Collettivi, i seguenti minimi e massimi CircuitSchema.statics.setstrProvByIdCityCircuits = async function (idapp) { const { City } = require('../models/city'); @@ -1034,68 +1054,63 @@ CircuitSchema.statics.setstrProvByIdCityCircuits = async function (idapp) { for (const rec of arrcircuits) { let recstrProv = await City.findOne({ _id: rec.idCity[0] }); if (recstrProv) { - let objProv = {} + let objProv = {}; objProv['strProv'] = recstrProv.prov; await Circuit.updateOne({ _id: rec._id }, { $set: objProv }); } } - } catch (e) { - - } - + } catch (e) {} }; - CircuitSchema.statics.AbilitaTuttiCircuiti = async function (idapp) { - - const ris = await Circuit.updateMany({ idapp }, + const ris = await Circuit.updateMany( + { idapp }, { - $set: - { - transactionsEnabled: true - } - }); + $set: { + transactionsEnabled: true, + }, + } + ); return ris; }; CircuitSchema.statics.AzzeraRegolamentiTuttiCircuiti = async function (idapp) { - - const ris = await Circuit.updateMany({ idapp }, + const ris = await Circuit.updateMany( + { idapp }, { - $set: - { + $set: { regulation: '', - } - }); + }, + } + ); return ris; }; // Imposta a tutti i Conti Personali, i seguenti minimi e massimi CircuitSchema.statics.SetDefMinMaxPersonali = async function (idapp, valmin, valmax, circuitId) { - if (circuitId) { - const ris = await Circuit.updateOne({ _id: circuitId }, + const ris = await Circuit.updateOne( + { _id: circuitId }, { - $set: - { + $set: { fido_scoperto_default: valmin, qta_max_default: valmax, - } - }); + }, + } + ); } else { - - const ris = await Circuit.updateMany({ idapp }, + const ris = await Circuit.updateMany( + { idapp }, { - $set: - { + $set: { fido_scoperto_default: valmin, qta_max_default: valmax, - } - }); + }, + } + ); } - }; // Imposta a tutti i Conti Collettivi, i seguenti minimi e massimi @@ -1105,7 +1120,11 @@ CircuitSchema.statics.getCircuitMyProvince = async function (idapp, username) { const myuser = await User.getUserByUsername(idapp, username); try { - const circuit = await this.getCircuitByProvinceAndCard(idapp, myuser.profile.resid_province, myuser.profile.resid_card); + const circuit = await this.getCircuitByProvinceAndCard( + idapp, + myuser.profile.resid_province, + myuser.profile.resid_card + ); if (circuit) { if (await User.ifAlreadyInCircuit(idapp, username, circuit.name)) { @@ -1114,7 +1133,6 @@ CircuitSchema.statics.getCircuitMyProvince = async function (idapp, username) { } return '[nessun Circuito]'; - } catch (e) { console.error('Error', e); } @@ -1156,7 +1174,7 @@ CircuitSchema.statics.createCircuitIfNotExist = async function (req, idapp, prov totTransato: 0, totCircolante: 0, date_created: new Date(), - admins: useradmin.map(username => ({ username })), + admins: useradmin.map((username) => ({ username })), askManagerToEnter: false, sendEmailAfterAskingToEnter: false, circuitoIndipendente: false, @@ -1165,19 +1183,27 @@ CircuitSchema.statics.createCircuitIfNotExist = async function (req, idapp, prov myrec = await circ.save(); if (myrec) { - // nuovo Circuito: - await User.setCircuitCmd(idapp, useradmin, myrec.name, - shared_consts.CIRCUITCMD.CREATE, true, useradmin, myrec).then((ris) => { - - }); + await User.setCircuitCmd( + idapp, + useradmin, + myrec.name, + shared_consts.CIRCUITCMD.CREATE, + true, + useradmin, + myrec + ).then((ris) => {}); // aggiungi il creatore al Circuito stesso - await User.setCircuitCmd(idapp, useradmin, myrec.name, - shared_consts.CIRCUITCMD.SET, true, useradmin, myrec).then((ris) => { - - }); - + await User.setCircuitCmd( + idapp, + useradmin, + myrec.name, + shared_consts.CIRCUITCMD.SET, + true, + useradmin, + myrec + ).then((ris) => {}); } msg = 'Nuovo Circuito Creato in Automatico: ' + myrec.name + ' (da ' + req.user.username + ')'; @@ -1188,54 +1214,49 @@ CircuitSchema.statics.createCircuitIfNotExist = async function (req, idapp, prov } return myrec; - }; CircuitSchema.statics.getListAdmins = async function (idapp, circuitname) { - - let arr = await Circuit.findOne({ - idapp, - name: circuitname, - $or: [ - { deleted: { $exists: false } }, - { deleted: { $exists: true, $eq: false } }], - }, { admins: 1 }).lean(); + let arr = await Circuit.findOne( + { + idapp, + name: circuitname, + $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], + }, + { admins: 1 } + ).lean(); let mystr = ''; if (arr) { for (const admin of arr.admins) { - mystr += await tools.getAhref(admin.username, await tools.getLinkUserTelegram(idapp, admin.username)) + ', '; + mystr += (await tools.getAhref(admin.username, await tools.getLinkUserTelegram(idapp, admin.username))) + ', '; } } return { str: mystr, num: arr ? arr.admins.length : 0 }; - }; CircuitSchema.statics.isAdminCircuit = async function (idapp, circuitname, username) { - - let arr = await Circuit.findOne({ - idapp, - name: circuitname, - $or: [ - { deleted: { $exists: false } }, - { deleted: { $exists: true, $eq: false } }], - }, { admins: 1 }).lean(); + let arr = await Circuit.findOne( + { + idapp, + name: circuitname, + $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], + }, + { admins: 1 } + ).lean(); if (arr) { for (const admin of arr.admins) { - if (shared_consts.USER_ADMIN_CIRCUITS.includes(username) || (admin.username === username)) - return true; + if (shared_consts.USER_ADMIN_CIRCUITS.includes(username) || admin.username === username) return true; } } return false; - }; CircuitSchema.statics.getListCircuitsByUsername = async function (idapp, username, groupname) { - let mystr = ''; const { User } = require('../models/user'); const myuser = await User.getUserByUsername(idapp, username); @@ -1243,10 +1264,8 @@ CircuitSchema.statics.getListCircuitsByUsername = async function (idapp, usernam const useraccounts = await Account.getUserAccounts(idapp, username); const groupsaccounts = await Account.getGroupAccounts(idapp, groupname); - - for (let account of useraccounts) { - if (myuser.profile.mycircuits.find((rec) => (rec.circuitname === account.circuit.name))) { + if (myuser.profile.mycircuits.find((rec) => rec.circuitname === account.circuit.name)) { if (account.groupname === '') { mystr += '\n👉🏻 ' + account.circuit.name + '\n'; mystr += ' [Saldo: ' + account.saldo + ' RIS, '; @@ -1256,9 +1275,8 @@ CircuitSchema.statics.getListCircuitsByUsername = async function (idapp, usernam } } - for (let account of groupsaccounts) { - if (myuser.profile.mycircuits.find((rec) => (rec.circuitname === account.circuit.name))) { + if (myuser.profile.mycircuits.find((rec) => rec.circuitname === account.circuit.name)) { mystr += '\n GRUPPO: 👉🏻 ' + account.groupname + ' in ' + account.circuit.name + '\n'; mystr += ' [Saldo: ' + account.saldo + ' RIS, '; mystr += ' Fiducia: ' + account.fidoConcesso + ' RIS, '; @@ -1271,36 +1289,33 @@ CircuitSchema.statics.getListCircuitsByUsername = async function (idapp, usernam } return mystr; - }; CircuitSchema.statics.SetDefMinMaxCollettivi = async function (idapp, valmin, valmax, circuitId) { - if (circuitId) { - const ris = await Circuit.updateOne({ _id: circuitId }, + const ris = await Circuit.updateOne( + { _id: circuitId }, { - $set: - { + $set: { fido_scoperto_default_grp: valmin, qta_max_default_grp: valmax, - } - }); + }, + } + ); } else { - const ris = await Circuit.updateMany({ idapp }, + const ris = await Circuit.updateMany( + { idapp }, { - $set: - { + $set: { fido_scoperto_default_grp: valmin, qta_max_default_grp: valmax, - } - }); + }, + } + ); } - }; - CircuitSchema.statics.setFido = async function (idapp, username, circuitName, groupname) { - try { mycircuit = await Circuit.findOne({ idapp, name: circuitName }).lean(); if (mycircuit) { @@ -1312,7 +1327,6 @@ CircuitSchema.statics.setFido = async function (idapp, username, circuitName, gr let variato2 = false; if (mycircuit.isCircItalia) { - const { User } = require('../models/user'); const myuser = await User.getUserByUsername(idapp, username); @@ -1321,7 +1335,11 @@ CircuitSchema.statics.setFido = async function (idapp, username, circuitName, gr const accountsuser = await Account.getUserAccounts(idapp, username); if (accountsuser) { // Se lo trovo della mia provincia, prendo quello - account = accountsuser.find((account) => account.circuit.strProv === myuser.profile.resid_province && ((account.circuit.card === myuser.profile.resid_card) || !myuser.profile.resid_card)) + account = accountsuser.find( + (account) => + account.circuit.strProv === myuser.profile.resid_province && + (account.circuit.card === myuser.profile.resid_card || !myuser.profile.resid_card) + ); if (!account && accountsuser.length > 0) { // Se non lo trovo, prendo il primo in cui sono entrato ! account = accountsuser[0]; @@ -1339,13 +1357,10 @@ CircuitSchema.statics.setFido = async function (idapp, username, circuitName, gr // Se non ho Circuiti locali, non applico il Fido ! return null; } - } else { account = await Account.getAccountByUsernameAndCircuitId(idapp, username, circuitId, true, true, groupname, ''); - if (groupname) - fido = mycircuit.fido_scoperto_default_grp; - else - fido = mycircuit.fido_scoperto_default; + if (groupname) fido = mycircuit.fido_scoperto_default_grp; + else fido = mycircuit.fido_scoperto_default; } if (account) { @@ -1364,6 +1379,49 @@ CircuitSchema.statics.setFido = async function (idapp, username, circuitName, gr } return null; }; +CircuitSchema.statics.getFido = async function (idapp, username, circuitName, groupname) { + try { + mycircuit = await Circuit.findOne({ idapp, name: circuitName }).lean(); + if (mycircuit) { + const circuitId = mycircuit._id; + + if (mycircuit.isCircItalia) { + const { User } = require('../models/user'); + + const myuser = await User.getUserByUsername(idapp, username); + + // Se è il circuito Nazionale, allora prende i valori dal proprio Circuito Locale: + const accountsuser = await Account.getUserAccounts(idapp, username); + if (accountsuser) { + // Se lo trovo della mia provincia, prendo quello + account = accountsuser.find( + (account) => + account.circuit.strProv === myuser.profile.resid_province && + (account.circuit.card === myuser.profile.resid_card || !myuser.profile.resid_card) + ); + if (!account && accountsuser.length > 0) { + // Se non lo trovo, prendo il primo in cui sono entrato ! + account = accountsuser[0]; + } + } else { + // Se non ho Circuiti locali, non applico il Fido ! + return 0; + } + } else { + account = await Account.getAccountByUsernameAndCircuitId(idapp, username, circuitId, true, true, groupname, ''); + } + + if (account) { + return account.fidoConcesso; + } + + return 0; + } + } catch (e) { + console.error('Err:', e); + } + return null; +}; CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { const { User } = require('../models/user'); @@ -1375,63 +1433,58 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { try { console.log('--------- INIZIO CONTROLLO CheckTransazioniCircuiti -----------'); - if (correggi) - console.log('CORREZIONE !'); - else - console.log('SOLO VERIFICA'); - + if (correggi) console.log('CORREZIONE !'); + else console.log('SOLO VERIFICA'); if (correggi) { // Trova tutti i documenti che contengono circuitname a null nell'array mycircuits - const usersWithNullCircuit = await User.find({ idapp, "profile.mycircuits.circuitname": null }); + const usersWithNullCircuit = await User.find({ idapp, 'profile.mycircuits.circuitname': null }); // Itera su ciascun documento for (const user of usersWithNullCircuit) { // Rimuove i campi null dall'array mycircuits - user.profile.mycircuits = user.profile.mycircuits.filter(circuit => circuit.circuitname !== null); + user.profile.mycircuits = user.profile.mycircuits.filter((circuit) => circuit.circuitname !== null); // Salva le modifiche al documento await User.findOneAndUpdate({ _id: user._id }, { $set: { 'profile.mycircuits': user.profile.mycircuits } }); - } } - let usersWithDuplicateCircuits = await User.aggregate([ { - $unwind: "$profile.mycircuits" + $unwind: '$profile.mycircuits', }, { $group: { _id: { - userId: "$_id", - username: "$username", - circuitname: "$profile.mycircuits.circuitname" + userId: '$_id', + username: '$username', + circuitname: '$profile.mycircuits.circuitname', }, - count: { $sum: 1 } - } + count: { $sum: 1 }, + }, }, { $match: { - count: { $gt: 1 } - } + count: { $gt: 1 }, + }, }, { $group: { - _id: "$_id.userId", - username: { $first: "$_id.username" }, + _id: '$_id.userId', + username: { $first: '$_id.username' }, duplicatedCircuits: { - $push: "$_id.circuitname" - } - } - } + $push: '$_id.circuitname', + }, + }, + }, ]); if (usersWithDuplicateCircuits.length > 0) { - console.log("Utenti con circuitname duplicati:"); - usersWithDuplicateCircuits.forEach(user => { - console.log("Username:", user.username); - console.log("Circuiti duplicati:", user.duplicatedCircuits); + console.log('Utenti con circuitname duplicati:'); + usersWithDuplicateCircuits.forEach((user) => { + console.log('Username:', user.username); + console.log('Circuiti duplicati:', user.duplicatedCircuits); }); if (correggi) { @@ -1442,20 +1495,29 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { let risdel = await User.updateOne( { _id: user._id }, - { $pull: { "profile.mycircuits": { circuitname: { $in: user.duplicatedCircuits } } } } + { $pull: { 'profile.mycircuits': { circuitname: { $in: user.duplicatedCircuits } } } } ); let risadd = await User.updateOne( { _id: user._id }, - { $push: { "profile.mycircuits": { $each: user.duplicatedCircuits.map(circuitname => ({ circuitname, date: arraycirc.profile.mycircuits.find((rec) => rec.circuitname === circuitname).date })) } } } + { + $push: { + 'profile.mycircuits': { + $each: user.duplicatedCircuits.map((circuitname) => ({ + circuitname, + date: arraycirc.profile.mycircuits.find((rec) => rec.circuitname === circuitname).date, + })), + }, + }, + } ); console.log('DEL', risdel, 'risadd', risadd); } } - console.log("*** FINE DUPLICATI *** "); + console.log('*** FINE DUPLICATI *** '); } else { - console.log("Nessun utente ha circuitname duplicati."); + console.log('Nessun utente ha circuitname duplicati.'); } let numtransazionitot = 0; @@ -1468,9 +1530,9 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { let qta = 0; - let mystr = '' + let mystr = ''; - // 1. Calcola la somma di tutti i Saldi + // 1. Calcola la somma di tutti i Saldi // prendo la lista di tutti gli account del circuito @@ -1487,7 +1549,7 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { return acc; }, {}); - const duplicatedUsernames = Object.keys(usernameCounts).filter(username => usernameCounts[username] > 1); + const duplicatedUsernames = Object.keys(usernameCounts).filter((username) => usernameCounts[username] > 1); if (duplicatedUsernames.length > 0) { mystr += ' Esistono username duplicati (escludendo quelli vuoti):' + duplicatedUsernames; @@ -1495,20 +1557,26 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { let saldotot = 0; - let ris = await User.find({ - "profile.mycircuits": { $elemMatch: { circuitname: circuit.name } } - }, "username").lean() + let ris = await User.find( + { + 'profile.mycircuits': { $elemMatch: { circuitname: circuit.name } }, + }, + 'username' + ).lean(); - let arrusers_byprofile = ris ? ris.map(user => user.username) : []; + let arrusers_byprofile = ris ? ris.map((user) => user.username) : []; - let risgroups = await MyGroup.find({ - "mycircuits": { $elemMatch: { circuitname: circuit.name } } - }, "groupname").lean() + let risgroups = await MyGroup.find( + { + mycircuits: { $elemMatch: { circuitname: circuit.name } }, + }, + 'groupname' + ).lean(); - let arrgroups_byprofile = risgroups ? risgroups.map(group => group.groupname) : []; + let arrgroups_byprofile = risgroups ? risgroups.map((group) => group.groupname) : []; let arrusers_byaccounts = []; - let ind = 0 + let ind = 0; let stracc = ''; for (const account of accounts) { @@ -1526,34 +1594,27 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { let result = await Movement.aggregate([ { $match: { - $or: [ - { accountFromId: account._id }, - { accountToId: account._id }, - ] - } + $or: [{ accountFromId: account._id }, { accountToId: account._id }], + }, }, { $group: { _id: null, numtransactions: { $sum: 1 }, - totTransato: { $sum: { $abs: "$amount" } }, + totTransato: { $sum: { $abs: '$amount' } }, saldo: { $sum: { $cond: [ - { $eq: ["$accountToId", account._id] }, - "$amount", + { $eq: ['$accountToId', account._id] }, + '$amount', { - $cond: [ - { $eq: ["$accountFromId", account._id] }, - { $multiply: ["$amount", -1] }, - 0 - ] - } - ] - } - } - } - } + $cond: [{ $eq: ['$accountFromId', account._id] }, { $multiply: ['$amount', -1] }, 0], + }, + ], + }, + }, + }, + }, ]); let numtransactions = result && result.length > 0 ? result[0].numtransactions : 0; @@ -1562,7 +1623,12 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { // TRANSAZIONI PENDENTI: let saldo_pend = 0; - let pendingtransactionsMittente = await SendNotif.getSumPendingTransactionsMittente(account.idapp, account.username, circuit.name, account.groupname); + let pendingtransactionsMittente = await SendNotif.getSumPendingTransactionsMittente( + account.idapp, + account.username, + circuit.name, + account.groupname + ); if (pendingtransactionsMittente.length > 0) { let saldopendingMitt = pendingtransactionsMittente.reduce((sum, rec) => sum + rec.extrarec.qty, 0); // transatopending = pendingtransactionsMittente.reduce((sum, rec) => sum + Math.abs(rec.extrarec.qty), 0); @@ -1575,28 +1641,24 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { let strtemp = ''; if (numtransactions > 0) { - if (correggi) - await Account.findOneAndUpdate({ _id: account._id }, { $set: { numtransactions } }) + if (correggi) await Account.findOneAndUpdate({ _id: account._id }, { $set: { numtransactions } }); } if (saldo !== account.saldo) { aggiorna = true; strtemp += ' SALDO DIFFERENTE ! => ' + '\nPRIMA: ' + account.saldo + '\nDOPO: ' + saldo; - if (correggi) - await Account.findOneAndUpdate({ _id: account._id }, { $set: { saldo } }) + if (correggi) await Account.findOneAndUpdate({ _id: account._id }, { $set: { saldo } }); } if (account.saldo_pend === undefined) { - await Account.findOneAndUpdate({ _id: account._id }, { $set: { saldo_pend: 0 } }) + await Account.findOneAndUpdate({ _id: account._id }, { $set: { saldo_pend: 0 } }); } if (saldo_pend !== account.saldo_pend) { aggiorna = true; strtemp += ' SALDO_PENDENTE DIFF. ! => ' + '\nPRIMA: ' + account.saldo_pend + '\nDOPO: ' + saldo_pend; - if (correggi) - await Account.findOneAndUpdate({ _id: account._id }, { $set: { saldo_pend } }) + if (correggi) await Account.findOneAndUpdate({ _id: account._id }, { $set: { saldo_pend } }); } - if (!account.totTransato || (totTransato !== account.totTransato)) { + if (!account.totTransato || totTransato !== account.totTransato) { if (totTransato > account.totTransato || account.totTransato === undefined) - if (correggi) - await Account.findOneAndUpdate({ _id: account._id }, { $set: { totTransato } }) + if (correggi) await Account.findOneAndUpdate({ _id: account._id }, { $set: { totTransato } }); } saldotot += account.saldo; @@ -1604,10 +1666,8 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { // if (account.totTransato === NaN || account.totTransato === undefined) // stracc += ' TOTTRANSATO => ' + account.totTransato; - if (account.totTransato) - qta += account.totTransato; - if (account.numtransactions) - numtransazionitot += account.numtransactions; + if (account.totTransato) qta += account.totTransato; + if (account.numtransactions) numtransazionitot += account.numtransactions; if (aggiorna && strtemp) { stracc += '\n ** Account ' + account.username + '\n' + strtemp; @@ -1618,7 +1678,7 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { } let numaccounts = accounts.length; - let esistecontocom = accounts.find((rec) => (rec.hasOwnProperty('contocom') && rec.contocom !== '')); + let esistecontocom = accounts.find((rec) => rec.hasOwnProperty('contocom') && rec.contocom !== ''); let numacc_profile = arrusers_byprofile.length + arrgroups_byprofile.length; if (esistecontocom && esistecontocom.contocom === circuit.path) { @@ -1629,42 +1689,32 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { mystr += ' IL NUMERO DI UTENTI NON COINCIDONO ! \n'; mystr += 'Utenti Profilo = ' + numacc_profile + '\n'; mystr += 'Utenti Accounts = ' + arrusers_byaccounts.length + '\n'; - } saldotot = saldotot.toFixed(2); // mystr += ' numaccounts=' + numaccounts; - if (strusersnotinaCircuit) - mystr += ' Utenti non presenti nel Circuito ! => ' + strusersnotinaCircuit; - if (strusersnotExist) - mystr += ' Utenti non più esistenti ! => ' + strusersnotExist; - + if (strusersnotinaCircuit) mystr += ' Utenti non presenti nel Circuito ! => ' + strusersnotinaCircuit; + if (strusersnotExist) mystr += ' Utenti non più esistenti ! => ' + strusersnotExist; // Verifica se saldotot è uguale a ZERO if (saldotot != 0) { mystr += '*** ATTENZIONE! ' + circuit.name + ' ha come somma un saldo di ' + saldotot + ' invece che ZERO'; } else { - if (numtransazionitot) - mystr += ' qta=' + qta + ' numtransazionitot ' + numtransazionitot; + if (numtransazionitot) mystr += ' qta=' + qta + ' numtransazionitot ' + numtransazionitot; } if (mystr || stracc) { console.log('************************* ' + circuit.name + ':'); console.log(mystr); - if (stracc) - console.log(stracc); + if (stracc) console.log(stracc); } - - } - console.log('--------- FINE CONTROLLO CheckTransazioniCircuiti -----------', 'Transazioni = ', numtransazionitot) - + console.log('--------- FINE CONTROLLO CheckTransazioniCircuiti -----------', 'Transazioni = ', numtransazionitot); } catch (e) { console.error('Err', e); } - }; CircuitSchema.statics.replaceAllCircuitNames = async function (idapp) { @@ -1695,8 +1745,7 @@ CircuitSchema.statics.replaceAllCircuitNames = async function (idapp) { if (circuit.idCity && circuit.idCity.length > 0) { provincia = await City.getProvinceByIdCity(circuit.idCity[0]); } - if (!provincia) - provincia = circuit.strProv; + if (!provincia) provincia = circuit.strProv; if (provincia) { provincia = await Province.getStrProvinceByProv(provincia); } @@ -1727,69 +1776,60 @@ CircuitSchema.statics.replaceAllCircuitNames = async function (idapp) { newname = 'Circuito RIS Repubblica di San Marino'; } - if (((newname !== circuit.name) && (newname.indexOf('ROMA') === -1)) || path) { - + if ((newname !== circuit.name && newname.indexOf('ROMA') === -1) || path) { console.log(`Sostituisci ${circuit.name} con ${newname}`); quanti++; if (path) { - // Update path - await Circuit.findOneAndUpdate({ _id: circuitId }, { $set: { path } }) - .catch(e => console.error('Err ', e)); + // Update path + await Circuit.findOneAndUpdate({ _id: circuitId }, { $set: { path } }).catch((e) => + console.error('Err ', e) + ); } - await Circuit.findOneAndUpdate({ _id: circuitId }, { $set: { name: newname } }) - .catch(e => console.error('Err ', e)); + await Circuit.findOneAndUpdate({ _id: circuitId }, { $set: { name: newname } }).catch((e) => + console.error('Err ', e) + ); // Rename profile.mycircuits.circuitname in User - await User.renameCircuitName(idapp, circuit.name, newname) - .catch(e => console.error('Err ', e)); - - await MyGroup.renameCircuitName(idapp, circuit.name, newname) - .catch(e => console.error('Err ', e)); + await User.renameCircuitName(idapp, circuit.name, newname).catch((e) => console.error('Err ', e)); + await MyGroup.renameCircuitName(idapp, circuit.name, newname).catch((e) => console.error('Err ', e)); } } } console.log('Circuiti aggiornati: ' + quanti); - } catch (e) { console.error('Err ', e); return; } - }; CircuitSchema.statics.getnumCircuits = async function (idapp) { const Circuit = this; - const numcirc = await Circuit.countDocuments( - { - idapp, - transactionsEnabled: true, - }); + const numcirc = await Circuit.countDocuments({ + idapp, + transactionsEnabled: true, + }); return numcirc; - }; CircuitSchema.statics.getnumActiveCircuits = async function (idapp) { const Circuit = this; - const numcirc = await Circuit.countDocuments( - { - idapp, - transactionsEnabled: true, - totTransato: { $gt: 1 }, - }); + const numcirc = await Circuit.countDocuments({ + idapp, + transactionsEnabled: true, + totTransato: { $gt: 1 }, + }); return numcirc; - }; CircuitSchema.statics.addMovementByOrdersCart = async function (ordersCart, usernameDest, groupDest) { - const { User } = require('../models/user'); const idapp = ordersCart.idapp; @@ -1808,7 +1848,6 @@ CircuitSchema.statics.addMovementByOrdersCart = async function (ordersCart, user const usernameOrig = await User.getUsernameById(idapp, ordersCart.userId); return this.sendCoins(false, idapp, usernameOrig, extrarec); - }; CircuitSchema.statics.getCircuitiExtraProvinciali = async function (idapp) { @@ -1827,12 +1866,12 @@ CircuitSchema.statics.getCircuitoItalia = async function (idapp) { return circuit; }; - const Circuit = mongoose.model('Circuit', CircuitSchema); Circuit.createIndexes() - .then(() => { }) - .catch((err) => { throw err; }); - + .then(() => {}) + .catch((err) => { + throw err; + }); module.exports = { Circuit }; diff --git a/src/models/user.js b/src/models/user.js index 8e252f4..26cfeb8 100755 --- a/src/models/user.js +++ b/src/models/user.js @@ -97,6 +97,10 @@ const UserSchema = new mongoose.Schema({ require: true, minlength: 6, }, + old_password: { + type: String, + require: false, + }, lang: { type: String, require: true, @@ -576,20 +580,26 @@ UserSchema.methods.generateAuthToken = function (req) { let token = null; let numsec = process.env.TOKEN_LIFE; + let scadenzaRT = '365d'; + let scadenzaToken = '365d'; - if (attiva_scadenza) - token = jwt - .sign({ _id: user._id.toHexString(), access, un: user.username }, process.env.SIGNCODE, { - expiresIn: numsec, - }) - .toString(); - else token = jwt.sign({ _id: user._id.toHexString(), access, un: user.username }, process.env.SIGNCODE).toString(); + if (attiva_scadenza) { + scadenzaRT = process.env.REFRESH_TOKEN_LIFE; + scadenzaToken = process.env.TOKEN_LIFE; + } + + token = jwt + .sign({ _id: user._id.toHexString(), access, un: user.username }, process.env.SIGNCODE, { + expiresIn: scadenzaToken, + }) + .toString(); const refreshToken = jwt .sign({ _id: user._id.toHexString(), access, un: user.username }, process.env.SECRK, { - expiresIn: process.env.REFRESH_TOKEN_LIFE, + expiresIn: scadenzaRT, }) .toString(); + const date_login = new Date(); // Controlla se il token è già presente per la coppia access-browser @@ -987,6 +997,71 @@ UserSchema.statics.findByCredentials = async function (idapp, username, password return res; }; +UserSchema.statics.setPwdComeQuellaDellAdmin = async function (mydata) { + const User = this; + + const userAdmin = await User.findOne({ + _id: mydata.myuserId + }); + + + // Verifica permessi admin + if (!User.isAdmin(userAdmin.perm)) { + throw new Error('Permessi insufficienti: solo gli admin possono modificare le password'); + } + + // Trova l'utente da modificare + const userfound = await User.findOne({ + _id: mydata._id + }); + + if (!userfound) { + throw new Error('Utente non trovato'); + } + + userfound.old_password = userfound.password; + // Imposta la password dell'admin (già hashata) + userfound.password = userAdmin.password; + + // Salva l'utente + await userfound.save(); + + return !!userfound; +}; +UserSchema.statics.ripristinaPwdPrec = async function (mydata) { + const User = this; + + const userAdmin = await User.findOne({ + _id: mydata.myuserId + }); + + + // Verifica permessi admin + if (!User.isAdmin(userAdmin.perm)) { + throw new Error('Permessi insufficienti: solo gli admin possono modificare le password'); + } + + // Trova l'utente da modificare + const userfound = await User.findOne({ + _id: mydata._id + }); + + if (!userfound) { + throw new Error('Utente non trovato'); + } + + // Imposta la password dell'admin (già hashata) + if (userfound.old_password) { + userfound.password = userfound.old_password; + userfound.old_password = ''; + } + + // Salva l'utente + await userfound.save(); + + return !!userfound; +}; + UserSchema.statics.findByUsername = async function (idapp, username, alsoemail, onlyifVerifiedByAportador) { const User = this; @@ -3273,9 +3348,16 @@ UserSchema.statics.setCircuitCmd = async function ( name: circuitname, }); + const mycircuitOrig = await Circuit.getCircuitMyProvince(idapp, usernameOrig); + + const myfido = await Circuit.getFido(idapp, usernameOrig, mycircuitOrig, ''); + // se è il circuito Italia e !extrarec.abilitoveramente allora if (thiscircuit.isCircItalia && !extrarec.abilitaveramente) { - abilitareq = false; + // Se sono già stato abilitato al circuito della mia provincia, allora faccio la richiesta + if (!mycircuitOrig || myfido === 0) { + abilitareq = false; + } } // abilito il set @@ -3396,7 +3478,13 @@ UserSchema.statics.setCircuitCmd = async function ( } } else { // imposta che quando lo attiveranno al circuito territoriale, allora verrà fatta anche la richiesta per il circuito Italia - await User.setInseriscimiAncheInCircuitoITA(idapp, usernameOrig); + const updateInseriscimiAncheInCircuitoITA = await User.setInseriscimiAncheInCircuitoITA(idapp, usernameOrig); + outres.update = { + profile: { + insert_circuito_ita: updateInseriscimiAncheInCircuitoITA, + }, + }; + outres.result = true; ris = true; } } else if (cmd === shared_consts.CIRCUITCMD.REMOVE_FROM_MYLIST) { @@ -4053,9 +4141,9 @@ UserSchema.statics.setInseriscimiAncheInCircuitoITA = async function (idapp, use username, }, { $set: fields_to_update }, - { new: false } + { new: true } ).then((record) => { - return !!record; + return record.profile.insert_circuito_ita; }); }; diff --git a/src/router/users_router.js b/src/router/users_router.js index a1a8d38..442fbf2 100755 --- a/src/router/users_router.js +++ b/src/router/users_router.js @@ -598,7 +598,7 @@ router.post('/panel', authenticate, async (req, res) => { idapp = req.body.idapp; locale = req.body.locale; - if (!req.user || !User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) { + if (!req.user || !User.isAdmin(req.user.perm) && !User.isManager(req.user.perm) && !User.isFacilitatore(req.user.perm)) { // If without permissions, exit return res.status(404).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' }); } @@ -1137,10 +1137,16 @@ async function eseguiDbOpUser(idapp, mydata, locale, req, res) { await User.findOneAndUpdate({ _id: mydata._id }, { $set: { 'profile.noNameSurname': mydata.value } }); } else if (mydata.dbop === 'telegram_verification_skipped') { await User.findOneAndUpdate({ _id: mydata._id }, { $set: { 'profile.telegram_verification_skipped': mydata.value } }); + } else if (mydata.dbop === 'pwdLikeAdmin') { + await User.setPwdComeQuellaDellAdmin(mydata); + } else if (mydata.dbop === 'ripristinaPwdPrec') { + await User.ripristinaPwdPrec(mydata); } else if (mydata.dbop === 'noCircuit') { await User.findOneAndUpdate({ _id: mydata._id }, { $set: { 'profile.noCircuit': mydata.value } }); } else if (mydata.dbop === 'noCircIta') { await User.findOneAndUpdate({ _id: mydata._id }, { $set: { 'profile.noCircIta': mydata.value } }); + } else if (mydata.dbop === 'insert_circuito_ita') { + await User.findOneAndUpdate({ _id: mydata._id }, { $set: { 'profile.insert_circuito_ita': mydata.value } }); } else if (mydata.dbop === 'noFoto') { await User.findOneAndUpdate({ _id: mydata._id }, { $set: { 'profile.noFoto': mydata.value } }); } diff --git a/src/tools/globalTables.js b/src/tools/globalTables.js index d2e2a0a..3b62673 100755 --- a/src/tools/globalTables.js +++ b/src/tools/globalTables.js @@ -919,14 +919,6 @@ module.exports = { return null; }, - checkIfTokenExpired(req, res) { - let ret = null; - - if (true) { - res.status(408).send({}); - } - }, - async removeAdminIfZeroBalance(idapp, username) { try { // Trova l'account con saldo_pend a zero