diff --git a/.DS_Store b/.DS_Store index c659ec0..39644d9 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/logtrans.txt b/logtrans.txt index 92159e1..4029dfd 100644 --- a/logtrans.txt +++ b/logtrans.txt @@ -4,4 +4,5 @@ Lun 06/02 ORE 23:15: Inviate Monete da paoloar77 a surya1977 1 RISTEST [caus Lun 06/02 ORE 23:17: Inviate Monete da paoloar77 a surya1977 1 RISTEST [causale: ] [Saldo paoloar77: -52 RISTEST] [Saldo surya1977: 7 RISTEST] Dom 12/03 ORE 13:35: Inviate Monete da paoloar77 a 1 RIS [causale: ] [Saldo paoloar77: 3 RIS] [Saldo : 2 RIS] Mer 15/03 ORE 22:15: Inviate Monete da pontiUmani (paoloar77) a paoloar77 1 RIS [causale: ] [Saldo pontiUmani (paoloar77): 1 RIS] [Saldo paoloar77: 4 RIS] -Mer 15/03 ORE 22:37: Inviate Monete da pontiUmani (paoloar77) a surya1977 1 RIS [causale: ] [Saldo pontiUmani (paoloar77): 0 RIS] [Saldo surya1977: 1 RIS] \ No newline at end of file +Mer 15/03 ORE 22:37: Inviate Monete da pontiUmani (paoloar77) a surya1977 1 RIS [causale: ] [Saldo pontiUmani (paoloar77): 0 RIS] [Saldo surya1977: 1 RIS] +Ven 28/04 ORE 01:33: Inviate Monete da surya1977 a risotest 1 RISTEST [causale: ] [Saldo surya1977: 0 RISTEST] [Saldo risotest: 9.5 RISTEST] \ No newline at end of file diff --git a/src/server/locales/it.json b/src/server/locales/it.json index d5a8a78..c2aacae 100644 --- a/src/server/locales/it.json +++ b/src/server/locales/it.json @@ -36,29 +36,33 @@ "FRIEND_UNBLOCKED_TO_ME": "Sei stato riattivato da %s", "FRIEND_UNBLOCKED": "E' stato riattivato %s da %s.", "FRIEND_UNBLOCKED_YOU": "Hai riattivato %s.", - "CIRCUIT_ACCEPT_NEWENTRY": "❇️👥 🧍‍♂️ Accetta Ingresso nel Circuito %s:", - "CIRCUIT_ACCEPT_NEWENTRY_BYGROUP": "❇️👥 🧍‍♂️ Accetta Ingresso nel Circuito il gruppo %s:", - "CIRCUIT_REQUEST_TO_ENTER": "%s ha chiesto di entrare nel circuito %s", - "CIRCUIT_REQUEST_TO_ENTER_WITH_GROUP": "il gruppo %s ha chiesto di entrare nel circuito %s", + "CIRCUIT_ACCEPT_NEWENTRY": "❇️👥 🧍‍♂️ Abilita fido a %s nel '%s':", + "CIRCUIT_ACCEPT_NEWENTRY_BYGROUP": "❇️👥 🧍‍♂️ Abilita fido nel Circuito al gruppo %s:", + "CIRCUIT_REQUEST_TO_ENTER": "%s è entrato nel %s ed è in attesa di essere abilitato al Fido (è stato invitato da %s)", + "CIRCUIT_WHERE_IS_PRESENT": "\nAttualmente è presente in: %s", + "CIRCUIT_REQUEST_TO_ENTER_WITH_GROUP": "il gruppo %s ha chiesto di entrare nel %s", "CIRCUIT_CREATED": "✅ %s ha creato un nuovo Circuito chiamato %s", - "CIRCUIT_REQUEST": "Richiesta di entrare nel Circuito %s da parte di %s", - "CIRCUIT_ADDED_ADMIN": "E' stato aggiunto %s come Amministratore del circuito %s da parte di %s", - "CIRCUIT_ADDED_ADMIN_YOU": "Sei stato aggiunto come Amministratore del circuito %s da parte di %s", - "CIRCUIT_REMOVED_ADMIN": "E' stato rimosso l'incarico di Amministratore a %s del circuito %s da parte di %s", - "CIRCUIT_REMOVED_ADMIN_YOU": "Ti è stato rimosso l'incarico di Amministratore del circuito %s da parte di %s", - "RICHIESTA_BLOCCO_CIRCUIT": "Richiesta di bloccare il Circuito %s da parte di %s", - "CIRCUIT_ELIMINATO": "Il circuito %s è stato eliminato da parte di %s", - "ACCETTATO_NOTIFICA_ADMINS_CIRCUIT": "✅ l'utente %s è stato accettato a far parte del Circuito %s (da parte di %s)", - "ACCETTATO_NOTIFICA_ADMINS_CIRCUIT_MYGROUP": "✅ il Conto Collettivo %s è stato accettato a far parte del Circuito %s (da parte di %s)", - "CIRCUIT_ACCEPTED": "✅ Sei stato accettato da %s a far parte del Circuito %s.\nApri la APP e clicca in alto a destra sull'icona delle monete, oppure clicca qui: %s", - "CIRCUIT_ACCEPTED_YOU": "✅ Hai accettato %s a far parte del Circuito %s", - "CIRCUIT_REFUSED": "❌ Ti è stato rifiutato l'accesso da %s a far parte del Circuito %s. Se pensi sia un'errore, contatta l'amministratore del Circuito.", - "CIRCUIT_REMOVED": "❌ l'utente %s è stato rimosso del Circuito %s (da parte di %s)", - "CIRCUIT_REFUSED_TO_ME": "All'utente %s gli è stato rifiutato l'accesso a far parte del Circuito %s (da parte di %s).", - "CIRCUIT_REFUSED_TO_MYGROUP": "Al Conto Collettivo %s gli è stato rifiutato l'accesso a far parte del Circuito %s (da parte di %s).", - "CIRCUIT_EXIT_USER": "❌ l'utente %s è uscito dal Circuito %s", - "CIRCUIT_EXIT_USER_TO_ME": "❌ Sei uscito dal Circuito %s", - "CIRCUIT_REMOVED_TO_ME": "❌ Sei stato rimosso dal Circuito %s (da parte di %s)", + "CIRCUIT_REQUEST": "Richiesta di entrare nel %s da parte di %s", + "CIRCUIT_ADDED_ADMIN": "E' stato aggiunto %s come Amministratore del %s da parte di %s", + "CIRCUIT_ADDED_ADMIN_YOU": "%s sei stato aggiunto come Amministratore del %s da parte di %s", + "CIRCUIT_REMOVED_ADMIN": "E' stato rimosso l'incarico di Amministratore a %s del %s da parte di %s", + "CIRCUIT_REMOVED_ADMIN_YOU": "%s ti è stato rimosso l'incarico di Amministratore del %s da parte di %s", + "RICHIESTA_BLOCCO_CIRCUIT": "Richiesta di bloccare il %s da parte di %s", + "CIRCUIT_ELIMINATO": "Il %s è stato eliminato da parte di %s", + "FIDO_IMPOSTATO_ADMINS_CIRCUIT": "✅ l'utente %s è stato abilitato al Fido sul '%s' (da parte di %s)", + "FIDO_IMPOSTATO_ADMINS_CIRCUIT_MYGROUP": "✅ il Conto Collettivo %s è stato abilitato al Fido sul '%s' (da parte di %s)", + "ACCETTATO_NOTIFICA_ADMINS_CIRCUIT": "✅ l'utente %s è stato accettato a far parte del '%s' (da parte di %s)", + "ACCETTATO_NOTIFICA_ADMINS_CIRCUIT_MYGROUP": "✅ il Conto Collettivo %s è stato accettato a far parte del '%s' (da parte di %s)", + "CIRCUIT_ACCEPTED": "✅ Sei stato accettato da %s a far parte del %s.\nApri la APP e clicca in alto a destra sull'icona delle monete, oppure clicca qui: %s", + "FIDO_IMPOSTATO": "✅ Sei stato abilitato al fido da %s sul '%s'.", + "CIRCUIT_ACCEPTED_YOU": "✅ Hai accettato %s a far parte del '%s'", + "CIRCUIT_REFUSED": "❌ Ti è stato rifiutato l'accesso da %s a far parte del '%s'. Se pensi sia un'errore, contatta l'amministratore del Circuito.", + "CIRCUIT_REMOVED": "❌ l'utente %s è stato rimosso del %s (da parte di %s)", + "CIRCUIT_REFUSED_TO_ME": "All'utente %s gli è stato rifiutato l'accesso a far parte del '%s' (da parte di %s).", + "CIRCUIT_REFUSED_TO_MYGROUP": "Al Conto Collettivo %s gli è stato rifiutato l'accesso a far parte del '%s' (da parte di %s).", + "CIRCUIT_EXIT_USER": "❌ l'utente %s è uscito dal '%s'", + "CIRCUIT_EXIT_USER_TO_ME": "❌ Sei uscito dal '%s'", + "CIRCUIT_REMOVED_TO_ME": "❌ Sei stato rimosso dal '%s' (da parte di %s)", "CIRCUIT_SENDCOINSREQ": "%s ti sta inviando %s %s.", "COMUNITARIO": "Comunitario", "COLLETTIVO": "Collettivo", @@ -85,9 +89,9 @@ "CIRCUIT_COINS_ALREADY_PROCESSED": "La richiesta è stata già processata. Stato %s", "STATUS_SENT": "Inviato", "STATUS_REFUSED": "Rifiutato", - "SALDO_VARIATO": "[Circuito %s] l'utente %s ha variato il Saldo di %s da %s a %s %s", - "FIDOCONCESSO_VARIATO": "[Circuito %s] l'utente %s ha variato il Fido Concesso di %s da %s a %s %s", - "QTAMAX_VARIATO": "[Circuito %s] l'utente %s ha variato la quantità massima concessa di %s da %s a %s %s", + "SALDO_VARIATO": "[%s] l'utente %s ha variato il Saldo di %s da %s a %s %s", + "FIDOCONCESSO_VARIATO": "[%s] l'utente %s ha variato il Fido Concesso di %s da %s a %s %s", + "QTAMAX_VARIATO": "[%s] l'utente %s ha variato la quantità massima concessa di %s da %s a %s %s", "SET_FAVORITE": "%s ha messo 'Mi Piace' al tuo post: %s", "SET_FAVORITE_OTHERS": "%s e altre %s persone hanno messo 'Mi Piace' al tuo post: %s", "EVENT_SEND_MSG": "%s ha mandato un messaggio sull'evento %s: \n%s", diff --git a/src/server/models/account.js b/src/server/models/account.js index 082e4ff..41495a5 100755 --- a/src/server/models/account.js +++ b/src/server/models/account.js @@ -56,12 +56,15 @@ const AccountSchema = new Schema({ }, importo_iniziale: { type: Number, + default: 0, }, saldo: { type: Number, + default: 0, }, totTransato: { type: Number, + default: 0, }, regulation_ok: { type: Boolean, @@ -202,7 +205,7 @@ AccountSchema.pre('save', async function (next) { next(); }); -AccountSchema.statics.getAccountByUsernameAndCircuitId = async function (idapp, username, circuitId, createifnotexist, groupname = '', contocom = "") { +AccountSchema.statics.getAccountByUsernameAndCircuitId = async function (idapp, username, circuitId, createifnotexist, confido, groupname = '', contocom = "") { const Account = this; try { @@ -263,6 +266,9 @@ AccountSchema.statics.getAccountByUsernameAndCircuitId = async function (idapp, } } + if (!confido) { + myaccount.fidoConcesso = 0; + } return await myaccount.save(); } @@ -277,14 +283,52 @@ AccountSchema.statics.getAccountByUsernameAndCircuitId = async function (idapp, }; -AccountSchema.statics.createAccount = async function (idapp, username, circuitName, groupname = '', contocom = '') { +AccountSchema.statics.isExistAccountByUsernameAndCircuitId = async function (idapp, username, circuitId, groupname = '', contocom = "") { + const Account = this; + + try { + + const { Circuit } = require('../models/circuit'); + + if (username === undefined) + return false; + + let myquery = { + idapp, + circuitId, + }; + + if (groupname) { + myquery.groupname = groupname; + } else if (contocom) { + myquery.contocom = contocom; + } else { + myquery.username = username; + } + + let mycircuit = await Circuit.getCircuitById(circuitId); + + if (mycircuit) { + let myaccount = await Account.findOne(myquery); + return !!myaccount + } + + return false; + + } catch (e) { + console.error('error', e); + } + +}; + +AccountSchema.statics.createAccount = async function (idapp, username, circuitName, confido, groupname = '', contocom = '') { const { Circuit } = require('../models/circuit'); try { mycircuit = await Circuit.findOne({ name: circuitName }, { _id: 1 }); if (mycircuit) { - return await Account.getAccountByUsernameAndCircuitId(idapp, username, mycircuit._id, true, groupname, contocom); + return await Account.getAccountByUsernameAndCircuitId(idapp, username, mycircuit._id, true, confido, groupname, contocom); } else { return null; } @@ -337,6 +381,11 @@ AccountSchema.statics.getUserAccounts = async function (idapp, username) { }, }, }, + { + $group: + { _id: "$extrarec.notifIdToUpdate", result: { $first: "$$ROOT" } } + }, + ], }, }, @@ -349,8 +398,9 @@ AccountSchema.statics.getUserAccounts = async function (idapp, username) { if (ris) { for (const account of ris) { const pendingtransactions = await SendNotif.getSumPendingTransactions(idapp, username, account.circuit.name); - const saldopending = pendingtransactions.reduce((sum, rec) => sum + rec.extrarec.qty, 0); + const saldopending = pendingtransactions.reduce((sum, rec) => sum + rec.result.extrarec.qty, 0); account.saldo -= saldopending; + account.totTransato = account.totTransato || 0; } } @@ -403,6 +453,10 @@ AccountSchema.statics.getGroupAccounts = async function (idapp, groupname) { }, }, }, + { + $group: + { _id: "$extrarec.notifIdToUpdate", result: { $first: "$$ROOT" } } + }, ], }, }, @@ -415,7 +469,7 @@ AccountSchema.statics.getGroupAccounts = async function (idapp, groupname) { if (ris) { for (const account of ris) { const pendingtransactions = await SendNotif.getSumPendingTransactions(idapp, '', account.circuit.name, groupname); - const saldopending = pendingtransactions.reduce((sum, rec) => sum + rec.extrarec.qty, 0); + const saldopending = pendingtransactions.reduce((sum, rec) => sum + rec.result.extrarec.qty, 0); account.saldo -= saldopending; } } @@ -472,6 +526,16 @@ AccountSchema.statics.SetMinMaxPersonali = async function (idapp, valmin, valmax }; +AccountSchema.statics.updateFido = async function (idapp, username, circuitId, fido) { + + let paramstoupdate = { + fidoConcesso: fido, + }; + const risult = await Account.updateOne({ idapp, username, circuitId }, { $set: paramstoupdate }); + + return risult; +}; + AccountSchema.statics.addToPeopleOfMyAccount = async function (idapp, username, circuitId, person_username, perm) { return await Account.updateOne({ idapp, username, circuitId }, diff --git a/src/server/models/circuit.js b/src/server/models/circuit.js index 38105f6..012ebd2 100755 --- a/src/server/models/circuit.js +++ b/src/server/models/circuit.js @@ -505,59 +505,6 @@ CircuitSchema.statics.deleteCircuit = async function (idapp, usernameOrig, name) return await Circuit.findOneAndRemove({ idapp, name }); }; -CircuitSchema.statics.getUserCircuits = async function (idapp, username) { - - try { - let aggr1 = [ - { - $match: { - idapp, username, - $or: [ - { deleted: { $exists: false } }, - { deleted: { $exists: true, $eq: false } }], - }, - }, - { - $lookup: { - from: 'circuits', - localField: 'circuitId', - foreignField: '_id', - as: 'circuit', - }, - }, - { - '$replaceRoot': { - 'newRoot': { - '$mergeObjects': [ - { - '$arrayElemAt': [ - '$circuit', - 0, - ], - }, - '$$ROOT', - ], - }, - }, - }, - /* - { - $project: { - "circuit.name": 1, - }, - }, - - */ - ]; - - ris = await this.aggregate(aggr1); - - return ris; - } catch (e) { - console.error('e', e); - } - -}; CircuitSchema.statics.getUsersSingleCircuit = async function (idapp, username, circuitname, circuitId) { @@ -676,8 +623,16 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig if (circuittable) { const myqty = Math.abs(extrarec.qty); - const accountdestTable = await Account.getAccountByUsernameAndCircuitId(idapp, extrarec.dest, circuittable._id, true, extrarec.groupdest, extrarec.contoComDest); - const accountorigTable = await Account.getAccountByUsernameAndCircuitId(idapp, usernameOrig, circuittable._id, true, extrarec.grouporig, extrarec.contoComOrig); + 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 this.addCircuitToUser(idapp, usernameOrig, circuitname, false, extrarec.groupdest, extrarec.contoComDest); + } + + 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); @@ -903,6 +858,19 @@ CircuitSchema.statics.SetDefMinMaxCollettivi = async function (idapp, valmin, va }; +CircuitSchema.statics.AbilitaTuttiCircuiti = async function (idapp) { + + ris = await Circuit.updateMany({ idapp }, + { + $set: + { + transactionsEnabled: true + } + }); + + return ris; +}; + // Imposta a tutti i Conti Personali, i seguenti minimi e massimi CircuitSchema.statics.SetDefMinMaxPersonali = async function (idapp, valmin, valmax) { @@ -932,14 +900,14 @@ CircuitSchema.statics.createCircuitIfNotExist = async function (req, idapp, prov if (!circuit && nomeprovincia) { const circ = new Circuit({ idapp, - name: 'RIS ' + nomeprovincia, + name: 'Circuito RIS ' + nomeprovincia, path: 'ris' + tools.convertSpaces_ToUScore(nomeprovincia.toLowerCase()), strProv: province, photos: [], admins: [], color: '#ff5500', deperimento: false, - transactionsEnabled: false, + transactionsEnabled: true, // Abilita cmq il circuito dall'inizio status: shared_consts.CIRCUIT_STATUS.FASE1_CREAZIONE_GRUPPO, symbol: 'RIS', fido_scoperto_default: 100, @@ -960,13 +928,13 @@ CircuitSchema.statics.createCircuitIfNotExist = async function (req, idapp, prov // nuovo Circuito: 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) => { - + }); } @@ -981,6 +949,32 @@ CircuitSchema.statics.createCircuitIfNotExist = async function (req, idapp, prov return myrec; }; + +CircuitSchema.statics.getListCircuitsByUsername = async function (idapp, username, groupname) { + + let mystr = ''; + const { User } = require('../models/user'); + const myuser = await User.getUserByUsername(idapp, username); + + const useraccounts = await Account.getUserAccounts(idapp, username); + + for (let account of useraccounts) { + if (myuser.profile.mycircuits.find((rec) => (rec.circuitname === account.circuit.name))) { + mystr += '\n👉🏻 ' + account.circuit.name + '\n'; + mystr += '[Saldo: ' + account.saldo + ' RIS, '; + mystr += ' Fido: ' + account.fidoConcesso + ' RIS, '; + mystr += ' Transato: ' + account.totTransato + ' RIS]'; + } + } + + if (!mystr) { + mystr = '[Nessun Circuito]'; + } + + return mystr; + +}; + CircuitSchema.statics.SetDefMinMaxCollettivi = async function (idapp, valmin, valmax) { ris = await Circuit.updateMany({ idapp }, @@ -994,6 +988,27 @@ CircuitSchema.statics.SetDefMinMaxCollettivi = async function (idapp, valmin, va }; + +CircuitSchema.statics.setFido = async function (idapp, username, circuitName, groupname) { + + mycircuit = await Circuit.findOne({ idapp, name: circuitName }); + if (mycircuit) { + const circuitId = mycircuit._id; + + const account = await Account.getAccountByUsernameAndCircuitId(idapp, username, circuitId, true, true, groupname, ''); + if (account) { + let fido = 0; + if (groupname) + fido = mycircuit.fido_scoperto_default_grp; + else + fido = mycircuit.fido_scoperto_default; + + return await Account.updateFido(idapp, username, circuitId, fido); + } + } + return false; +}; + const Circuit = mongoose.model('Circuit', CircuitSchema); module.exports = { Circuit }; diff --git a/src/server/models/movement.js b/src/server/models/movement.js index 7c1e623..7d752be 100755 --- a/src/server/models/movement.js +++ b/src/server/models/movement.js @@ -47,9 +47,11 @@ const MovementSchema = new Schema({ }, causal: { type: String, + default: '', }, residual: { type: Number, + default: 0, }, expiringDate: { type: Date, @@ -128,7 +130,7 @@ MovementSchema.statics.getQueryMovsByCircuitId = async function (idapp, username if (!circuitId) { return []; } - const myaccount = await Account.getAccountByUsernameAndCircuitId(idapp, username, circuitId, false, groupname, contocom); + const myaccount = await Account.getAccountByUsernameAndCircuitId(idapp, username, circuitId, false, true, groupname, contocom); if (myaccount) { diff --git a/src/server/models/mybacheca.js b/src/server/models/mybacheca.js index be527e6..b40241c 100755 --- a/src/server/models/mybacheca.js +++ b/src/server/models/mybacheca.js @@ -176,6 +176,7 @@ MyBachecaSchema.statics.executeQueryTable = function (idapp, params, user) { MyBachecaSchema.statics.getMyRecById = function (idapp, id) { const MyBacheca = this; + let myparsid = { '_id': id, idapp, @@ -273,6 +274,20 @@ MyBachecaSchema.statics.getMyRecById = function (idapp, id) { }, }, }, + { + $lookup: { + 'from': 'mygroups', + 'localField': 'groupname', + 'foreignField': 'groupname', + 'as': 'mygrp', + }, + }, + { + $unwind: { + path: '$mygrp', + preserveNullAndEmptyArrays: true, + }, + }, { '$project': shared_consts.getProjectForAll({}, tableModel), }, @@ -330,7 +345,7 @@ MyBachecaSchema.statics.getMyRecById = function (idapp, id) { try { let numtab = tools.getNumTabByTable(shared_consts.TABLES_MYBACHECAS); - const objadd = tools.addNumFavoriteAndBookmarkToQuery(idapp, numtab); + let objadd = tools.addNumFavoriteAndBookmarkToQuery(idapp, numtab); query = [...query, ...objadd.query]; const toadd = { diff --git a/src/server/models/province.js b/src/server/models/province.js index 0139450..2d27f44 100755 --- a/src/server/models/province.js +++ b/src/server/models/province.js @@ -35,6 +35,9 @@ const ProvinceSchema = new Schema({ link_grp: { type: String, }, + link_telegram: { + type: String, + }, }, { _id : false }); ProvinceSchema.statics.getRegionByStrProvince = async function(strprovince) { diff --git a/src/server/models/sendnotif.js b/src/server/models/sendnotif.js index 1df662a..3653327 100755 --- a/src/server/models/sendnotif.js +++ b/src/server/models/sendnotif.js @@ -171,9 +171,12 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us let newdescr = ''; let mydescr = ''; let myidrec = ''; - let sender = recnotif.sender; + let sender = recnotif.sender ? recnotif.sender : ''; let tag = ''; + const { Circuit } = require('../models/circuit'); + const { User } = require('../models/user'); + try { if (recnotif.myrectableorig) { myidrec = recnotif.myrectableorig._id; @@ -309,11 +312,17 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us } } else if (recnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) { tag = 'circuit'; + let strtipocontoDest = ''; + let strtipocontoOrig = ''; + let groupOComorig = ''; + let groupOComdest = ''; recnotif.openUrl = shared_consts.getDirectoryByTable(shared_consts.TAB_MYCIRCUITS, true) + recnotif.paramsObj.path; - strtipocontoOrig = recnotif.paramsObj.extrarec.contoComOrig ? i18n.__('COMUNITARIO') : i18n.__('COLLETTIVO'); - strtipocontoDest = recnotif.paramsObj.extrarec.contoComDest ? i18n.__('COMUNITARIO') : i18n.__('COLLETTIVO'); - let groupOComorig = recnotif.paramsObj.extrarec.contoComOrig ? recnotif.paramsObj.extrarec.contoComOrig : recnotif.paramsObj.extrarec.grouporig; - let groupOComdest = recnotif.paramsObj.extrarec.contoComDest ? recnotif.paramsObj.extrarec.contoComDest : recnotif.paramsObj.extrarec.groupdest; + if (recnotif.paramsObj.extrarec) { + strtipocontoOrig = recnotif.paramsObj.extrarec.contoComOrig ? i18n.__('COMUNITARIO') : i18n.__('COLLETTIVO'); + strtipocontoDest = recnotif.paramsObj.extrarec.contoComDest ? i18n.__('COMUNITARIO') : i18n.__('COLLETTIVO'); + groupOComorig = recnotif.paramsObj.extrarec.contoComOrig ? recnotif.paramsObj.extrarec.contoComOrig : recnotif.paramsObj.extrarec.grouporig; + groupOComdest = recnotif.paramsObj.extrarec.contoComDest ? recnotif.paramsObj.extrarec.contoComDest : recnotif.paramsObj.extrarec.groupdest; + } let myorig = ''; let mydest = ''; let destinatario = ''; @@ -338,6 +347,21 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_NEW_REC) { newdescr = i18n.__('CIRCUIT_CREATED', sender, recnotif.paramsObj.circuitnameDest); + } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SETFIDO) { + if (recnotif.paramsObj.isAdmin) { + if (recnotif.extrarec.groupname) { + newdescr = i18n.__('FIDO_IMPOSTATO_ADMINS_CIRCUIT_MYGROUP', recnotif.extrarec.groupname, recnotif.paramsObj.circuitnameDest, + username_action); + } else { + newdescr = i18n.__('FIDO_IMPOSTATO_ADMINS_CIRCUIT', sender, recnotif.paramsObj.circuitnameDest, + username_action); + } + + recnotif.openUrl = '/my/' + sender; + } else { + newdescr = i18n.__('FIDO_IMPOSTATO', username_action, recnotif.paramsObj.circuitnameDest); + } + tag = 'setfido'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_ACCEPTED) { if (recnotif.paramsObj.isAdmin) { if (recnotif.extrarec.groupname) { @@ -380,12 +404,15 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us } tag = 'refcircuit'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_REQUEST_TO_ENTER) { + + aportador_solidario = await User.getAportadorSolidarioByUsername(idapp, sender); if (recnotif.extrarec.groupname) { newdescr = i18n.__('CIRCUIT_REQUEST_TO_ENTER_WITH_GROUP', recnotif.extrarec.groupname, recnotif.paramsObj.circuitnameDest, recnotif.paramsObj.singleadmin_username); } else { - newdescr = i18n.__('CIRCUIT_REQUEST_TO_ENTER', sender, recnotif.paramsObj.circuitnameDest, - recnotif.paramsObj.singleadmin_username); + newdescr = i18n.__('CIRCUIT_REQUEST_TO_ENTER', sender, '' + recnotif.paramsObj.circuitnameDest + '', aportador_solidario); + + newdescr += '\n' + i18n.__('CIRCUIT_WHERE_IS_PRESENT', await Circuit.getListCircuitsByUsername(recnotif.idapp, sender, recnotif.extrarec.groupname)); } tag = 'reqcircuits'; @@ -394,7 +421,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us tag = 'deletecircuit'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_ADDED_ADMIN) { if (sender === recnotif.paramsObj.usernameDest) { - newdescr = i18n.__('CIRCUIT_ADDED_ADMIN_YOU', recnotif.paramsObj.circuitnameDest, username_action); + newdescr = i18n.__('CIRCUIT_ADDED_ADMIN_YOU', recnotif.paramsObj.usernameDest, recnotif.paramsObj.circuitnameDest, username_action); } else { newdescr = i18n.__('CIRCUIT_ADDED_ADMIN', sender, recnotif.paramsObj.circuitnameDest, username_action); recnotif.openUrl = '/my/' + sender; @@ -402,7 +429,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us tag = 'addadmingrp'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_REMOVED_ADMIN) { if (sender === recnotif.paramsObj.usernameDest) { - newdescr = i18n.__('CIRCUIT_REMOVED_ADMIN_YOU', recnotif.paramsObj.circuitnameDest, username_action); + newdescr = i18n.__('CIRCUIT_REMOVED_ADMIN_YOU', recnotif.paramsObj.usernameDest, recnotif.paramsObj.circuitnameDest, username_action); } else { newdescr = i18n.__('CIRCUIT_REMOVED_ADMIN', sender, recnotif.paramsObj.circuitnameDest, username_action); recnotif.openUrl = '/my/' + sender; @@ -614,10 +641,10 @@ sendNotifSchema.statics.updateStatusAndDescr = async function (myrecnotif, onlys let typeidsearch = 0; let dest = ''; - let sender = myrecnotif.sender; - let newdest = myrecnotif.dest; - let sendergroup = myrecnotif.sendergroup; - let newdestgroup = myrecnotif.destgroup; + let sender = myrecnotif.sender ? myrecnotif.sender : ''; + let newdest = myrecnotif.dest ? myrecnotif.dest : ''; + let sendergroup = myrecnotif.sendergroup ? myrecnotif.sendergroup : ''; + let newdestgroup = myrecnotif.destgroup ? myrecnotif.destgroup : ''; // Controllare se devo modificare un Notif già esistente ! if (myrecnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_FRIENDS) { diff --git a/src/server/models/user.js b/src/server/models/user.js index f6f15c8..fe0a1ae 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -1530,7 +1530,7 @@ UserSchema.statics.getUserById = function (idapp, id) { UserSchema.statics.getUserByUsername = function (idapp, username) { const User = this; - return User.findne({ + return User.findOne({ idapp, username, $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], @@ -1900,13 +1900,65 @@ UserSchema.statics.removeFromMyGroups = async function ( return await User.updateOne({ idapp, username }, { $pull: { 'profile.mygroups': { groupname: { $in: [groupnameDest] } } } }); }; -// Rimuovo il Gruppo + +// Rimuovo il Circuito UserSchema.statics.removeFromCircuits = async function (idapp, username, circuitname) { - return await User.updateOne({ idapp, username }, + + // Elimina la richiesta (se esiste): + update = { $pull: { req_users: { username: { $in: [username] } } } }; + await Circuit.updateOne({ idapp, name: circuitname }, update); + + return await User.updateOne({ idapp, username }, { $pull: { 'profile.mycircuits': { circuitname: { $in: [circuitname] } } } }); }; +// Aggiungo il Circuito +UserSchema.statics.addCircuitToUser = async function (idapp, usernameOrig, circuitname, confido, groupname, contocom) { + + let ris = null; + + if (groupname) { + + ris = await MyGroup.addCircuitFromGroup(idapp, groupname, circuitname); + + // Elimina la richiesta: + update = { $pull: { req_groups: { groupname: { $in: [groupname] } } } }; + await Circuit.updateOne({ idapp, name: circuitname }, update); + + // Elimina eventualmente se era bloccato: + update = { $pull: { refused_groups: { groupname: { $in: [groupname] } } } }; + await Circuit.updateOne({ idapp, name: circuitname }, update); + + } else { + + let update = { + $push: { + 'profile.mycircuits': { + circuitname, + date: new Date(), + }, + }, + }; + ris = await User.updateOne({ idapp, username: usernameOrig }, update); + + if (confido) { + // Elimina la richiesta: + update = { $pull: { req_users: { username: { $in: [usernameOrig] } } } }; + await Circuit.updateOne({ idapp, name: circuitname }, update); + } + + // Elimina eventualmente se era bloccato: + update = { $pull: { refused_users: { username: { $in: [usernameOrig] } } } }; + await Circuit.updateOne({ idapp, name: circuitname }, update); + + } + + await Account.createAccount(idapp, usernameOrig, circuitname, confido, groupname, contocom); + + return ris; +}; + // Rimuovo il Gruppo per Tutti gli Utenti UserSchema.statics.removeAllUsersFromMyGroups = async function (idapp, groupnameDest) { return await User.updateMany({ idapp }, @@ -2521,7 +2573,7 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn const mycirc = await Circuit.findOne({ idapp, name: circuitname }); if (mycirc) { // Il Conto Comunitario prende il nome del circuito ! - await Account.createAccount(idapp, '', circuitname, '', mycirc.path); + await Account.createAccount(idapp, '', circuitname, true, '', mycirc.path); } } else if (cmd === shared_consts.CIRCUITCMD.SET) { @@ -2529,18 +2581,7 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn const foundIfCircuitInGroup = await MyGroup.ifCircuitAlreadyInGroup(idapp, groupname, circuitname); if (!foundIfCircuitInGroup) { - ris = await MyGroup.addCircuitFromGroup(idapp, groupname, circuitname); - - // Elimina la richiesta: - update = { $pull: { req_groups: { groupname: { $in: [groupname] } } } }; - await Circuit.updateOne({ idapp, name: circuitname }, update); - - // Elimina eventualmente se era bloccato: - update = { $pull: { refused_groups: { groupname: { $in: [groupname] } } } }; - await Circuit.updateOne({ idapp, name: circuitname }, update); - - await Account.createAccount(idapp, '', circuitname, groupname); - + ris = await this.addCircuitToUser(idapp, usernameOrig, circuitname, true, groupname); } else { ris = false; @@ -2552,7 +2593,6 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, value, true, username_action, extrarec); outres.result = await Circuit.getInfoCircuitByName(idapp, circuitname); } - } else { const foundIfAlreadyCircuit = await this.ifAlreadyInCircuit(idapp, usernameOrig, circuitname); @@ -2567,10 +2607,6 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn }; ris = await User.updateOne({ idapp, username: usernameOrig }, update); - // Elimina la richiesta: - update = { $pull: { req_users: { username: { $in: [usernameOrig] } } } }; - await Circuit.updateOne({ idapp, name: circuitname }, update); - // Elimina eventualmente se era bloccato: update = { $pull: { refused_users: { username: { $in: [usernameOrig] } } } }; await Circuit.updateOne({ idapp, name: circuitname }, update); @@ -2589,6 +2625,22 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn outres.result = await Circuit.getInfoCircuitByName(idapp, circuitname); } } + + } else if (cmd === shared_consts.CIRCUITCMD.SETFIDO) { + + ris = await Circuit.setFido(idapp, usernameOrig, circuitname, groupname); + + // Elimina la richiesta: + update = { $pull: { req_users: { username: { $in: [usernameOrig] } } } }; + await Circuit.updateOne({ idapp, name: circuitname }, update); + + await Circuit.updateData(idapp, circuitname) + if (ris) { + // Invia una notifica alla persona e agli Admin + tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, value, true, username_action, extrarec); + outres.result = await Circuit.getInfoCircuitByName(idapp, circuitname); + } + } else if (cmd === shared_consts.CIRCUITCMD.REQ) { if (groupname) { @@ -2628,7 +2680,7 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn } } else { - // Aggiungo la richiesta di Gruppo a me + // Aggiungo la richiesta di Circuito a me const foundIfAlreadyAskCircuit = await Circuit.findOne({ idapp, name: circuitname, @@ -2638,6 +2690,9 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn }); if (value) { + // Aggiungi intanto l'utente al Circuito (senza fido) + ris = await this.addCircuitToUser(idapp, usernameOrig, circuitname, false); + if (!foundIfAlreadyAskCircuit) { update = { $push: { @@ -2647,6 +2702,7 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn }, }, }; + // Aggiungi la richiesta per ottenere il fido ris = await Circuit.updateOne({ idapp, name: circuitname }, update); } diff --git a/src/server/populate/provinces.js b/src/server/populate/provinces.js index 682bab4..d8914d0 100644 --- a/src/server/populate/provinces.js +++ b/src/server/populate/provinces.js @@ -1,124 +1,124 @@ module.exports = { list: [ - {_id: 1, reg: 'SIC', prov: 'AG', descr: 'Agrigento', link_grp: 'https://t.me/c/1614195634/562?thread=553'}, - {_id: 2, reg: 'PIE', prov: 'AL', descr: 'Alessandria', link_grp: 'https://t.me/c/1614195634/513?thread=504'}, - {_id: 3, reg: 'MAR', prov: 'AN', descr: 'Ancona', link_grp: 'https://t.me/c/1614195634/450?thread=446'}, - {_id: 4, reg: 'VDA', prov: 'AO', descr: 'Aosta', link_grp: 'https://t.me/c/1614195634/521?thread=520'}, - {_id: 5, reg: 'TOS', prov: 'AR', descr: 'Arezzo', link_grp: 'https://t.me/c/1614195634/583?thread=572'}, - {_id: 6, reg: 'MAR', prov: 'AP', descr: 'Ascoli Piceno', link_grp: 'https://t.me/c/1614195634/451?thread=447'}, - {_id: 7, reg: 'PIE', prov: 'AT', descr: 'Asti', link_grp: 'https://t.me/c/1614195634/514?thread=505'}, - {_id: 8, reg: 'CAM', prov: 'AV', descr: 'Avellino', link_grp: 'https://t.me/c/1614195634/413?thread=409'}, - {_id: 9, reg: 'PUG', prov: 'BA', descr: 'Bari', link_grp: 'https://t.me/c/1614195634/534?thread=528'}, - {_id: 10, reg: 'PUG', prov: 'BT', descr: 'Barletta-Andria-Trani', link_grp: 'https://t.me/c/1614195634/535?thread=529'}, - {_id: 11, reg: 'VEN', prov: 'BL', descr: 'Belluno', link_grp: 'https://t.me/c/1614195634/608?thread=599'}, - {_id: 12, reg: 'CAM', prov: 'BN', descr: 'Benevento', link_grp: 'https://t.me/c/1614195634/415?thread=411'}, - {_id: 13, reg: 'LOM', prov: 'BG', descr: 'Bergamo', link_grp: 'https://t.me/c/1614195634/491?thread=477'}, - {_id: 14, reg: 'PIE', prov: 'BI', descr: 'Biella', link_grp: 'https://t.me/c/1614195634/515?thread=506'}, - {_id: 15, reg: 'EMR', prov: 'BO', descr: 'Bologna', link_grp: 'https://t.me/c/1614195634/428?thread=419'}, - {_id: 16, reg: 'TAA', prov: 'BZ', descr: 'Bolzano', link_grp: 'https://t.me/c/1614195634/596?thread=594'}, - {_id: 17, reg: 'LOM', prov: 'BS', descr: 'Brescia', link_grp: 'https://t.me/c/1614195634/490?thread=478'}, - {_id: 18, reg: 'PUG', prov: 'BR', descr: 'Brindisi', link_grp: 'https://t.me/c/1614195634/536?thread=530'}, - {_id: 19, reg: 'SAR', prov: 'CA', descr: 'Cagliari', link_grp: 'https://t.me/c/1614195634/546?thread=541'}, - {_id: 20, reg: 'SIC', prov: 'CL', descr: 'Caltanissetta', link_grp: 'https://t.me/c/1614195634/563?thread=554'}, - {_id: 21, reg: 'MOL', prov: 'CB', descr: 'Campobasso', link_grp: 'https://t.me/c/1614195634/398?thread=396'}, - {_id: 22, reg: 'SAR', prov: 'CI', descr: 'Carbonia-Iglesias', link_grp: ''}, - {_id: 23, reg: 'CAM', prov: 'CE', descr: 'Caserta', link_grp: 'https://t.me/c/1614195634/414?thread=410'}, - {_id: 24, reg: 'SIC', prov: 'CT', descr: 'Catania', link_grp: 'https://t.me/c/1614195634/564?thread=555'}, - {_id: 25, reg: 'CAL', prov: 'CZ', descr: 'Catanzaro', link_grp: 'https://t.me/c/1614195634/378?thread=377'}, - {_id: 26, reg: 'ABR', prov: 'CH', descr: 'Chieti', link_grp: 'https://t.me/c/1614195634/366?thread=365'}, - {_id: 27, reg: 'LOM', prov: 'CO', descr: 'Como', link_grp: 'https://t.me/c/1614195634/492?thread=479'}, - {_id: 28, reg: 'CAL', prov: 'CS', descr: 'Cosenza', link_grp: 'https://t.me/c/1614195634/381?thread=379'}, - {_id: 29, reg: 'LOM', prov: 'CR', descr: 'Cremona', link_grp: 'https://t.me/c/1614195634/493?thread=480'}, - {_id: 30, reg: 'CAL', prov: 'KR', descr: 'Crotone', link_grp: 'https://t.me/c/1614195634/382?thread=380'}, - {_id: 31, reg: 'PIE', prov: 'CN', descr: 'Cuneo', link_grp: 'https://t.me/c/1614195634/516?thread=507'}, - {_id: 32, reg: 'SIC', prov: 'EN', descr: 'Enna', link_grp: 'https://t.me/c/1614195634/565?thread=556'}, - {_id: 33, reg: 'MAR', prov: 'FM', descr: 'Fermo', link_grp: 'https://t.me/c/1614195634/453?thread=448'}, - {_id: 34, reg: 'EMR', prov: 'FE', descr: 'Ferrara', link_grp: 'https://t.me/c/1614195634/429?thread=420'}, - {_id: 35, reg: 'TOS', prov: 'FI', descr: 'Firenze', link_grp: 'https://t.me/c/1614195634/584?thread=573'}, - {_id: 36, reg: 'PUG', prov: 'FG', descr: 'Foggia', link_grp: 'https://t.me/c/1614195634/537?thread=531'}, - {_id: 37, reg: 'EMR', prov: 'FC', descr: 'Forli-Cesena', link_grp: 'https://t.me/c/1614195634/430?thread=421'}, - {_id: 38, reg: 'LAZ', prov: 'FR', descr: 'Frosinone', link_grp: 'https://t.me/c/1614195634/48?thread=44'}, - {_id: 39, reg: 'LIG', prov: 'GE', descr: 'Genova', link_grp: 'https://t.me/c/1614195634/392?thread=388'}, - {_id: 40, reg: 'FVG', prov: 'GO', descr: 'Gorizia', link_grp: 'https://t.me/c/1614195634/469?thread=465'}, - {_id: 41, reg: 'TOS', prov: 'GR', descr: 'Grosseto', link_grp: 'https://t.me/c/1614195634/585?thread=574'}, - {_id: 42, reg: 'LIG', prov: 'IM', descr: 'Imperia', link_grp: 'https://t.me/c/1614195634/393?thread=389'}, - {_id: 43, reg: 'MOL', prov: 'IS', descr: 'Isernia', link_grp: 'https://t.me/c/1614195634/399?thread=397'}, - {_id: 44, reg: 'LIG', prov: 'SP', descr: 'La Spezia', link_grp: 'https://t.me/c/1614195634/394?thread=390'}, - {_id: 45, reg: 'ABR', prov: 'AQ', descr: 'L\'Aquila', link_grp: 'https://t.me/c/1614195634/364?thread=363'}, - {_id: 46, reg: 'LAZ', prov: 'LT', descr: 'Latina', link_grp: 'https://t.me/c/1614195634/60?thread=46'}, - {_id: 47, reg: 'PUG', prov: 'LE', descr: 'Lecce', link_grp: 'https://t.me/c/1614195634/538?thread=532'}, - {_id: 48, reg: 'LOM', prov: 'LC', descr: 'Lecco', link_grp: 'https://t.me/c/1614195634/494?thread=482'}, - {_id: 49, reg: 'TOS', prov: 'LI', descr: 'Livorno', link_grp: 'https://t.me/c/1614195634/586?thread=575'}, - {_id: 50, reg: 'LOM', prov: 'LO', descr: 'Lodi', link_grp: 'https://t.me/c/1614195634/495?thread=483'}, - {_id: 51, reg: 'TOS', prov: 'LU', descr: 'Lucca', link_grp: 'https://t.me/c/1614195634/587?thread=576'}, - {_id: 52, reg: 'MAR', prov: 'MC', descr: 'Macerata', link_grp: 'https://t.me/c/1614195634/300?thread=162'}, - {_id: 53, reg: 'LOM', prov: 'MN', descr: 'Mantova', link_grp: 'https://t.me/c/1614195634/497?thread=484'}, - {_id: 54, reg: 'TOS', prov: 'MS', descr: 'Massa-Carrara', link_grp: 'https://t.me/c/1614195634/588?thread=577'}, - {_id: 55, reg: 'BAS', prov: 'MT', descr: 'Matera', link_grp: 'https://t.me/c/1614195634/374?thread=373'}, - {_id: 56, reg: 'SIC', prov: 'ME', descr: 'Messina', link_grp: 'https://t.me/c/1614195634/566?thread=557'}, - {_id: 57, reg: 'LOM', prov: 'MI', descr: 'Milano', link_grp: 'https://t.me/c/1614195634/214?thread=173'}, - {_id: 58, reg: 'EMR', prov: 'MO', descr: 'Modena', link_grp: 'https://t.me/c/1614195634/431?thread=422'}, - {_id: 59, reg: 'LOM', prov: 'MB', descr: 'Monza e della Brianza', link_grp: 'https://t.me/c/1614195634/498?thread=485'}, - {_id: 60, reg: 'CAM', prov: 'NA', descr: 'Napoli', link_grp: 'https://t.me/c/1614195634/407?thread=406'}, - {_id: 61, reg: 'PIE', prov: 'NO', descr: 'Novara', link_grp: 'https://t.me/c/1614195634/517?thread=508'}, - {_id: 62, reg: 'SAR', prov: 'NU', descr: 'Nuoro', link_grp: 'https://t.me/c/1614195634/548?thread=542'}, - {_id: 63, reg: 'SAR', prov: 'OT', descr: 'Olbia-Tempio', link_grp: ''}, - {_id: 64, reg: 'SAR', prov: 'OR', descr: 'Oristano', link_grp: 'https://t.me/c/1614195634/550?thread=543'}, - {_id: 65, reg: 'VEN', prov: 'PD', descr: 'Padova', link_grp: 'https://t.me/c/1614195634/610?thread=600'}, - {_id: 66, reg: 'SIC', prov: 'PA', descr: 'Palermo', link_grp: 'https://t.me/c/1614195634/568?thread=558'}, - {_id: 67, reg: 'EMR', prov: 'PR', descr: 'Parma', link_grp: 'https://t.me/c/1614195634/432?thread=423'}, - {_id: 68, reg: 'LOM', prov: 'PV', descr: 'Pavia', link_grp: 'https://t.me/c/1614195634/499?thread=486'}, - {_id: 69, reg: 'UMB', prov: 'PG', descr: 'Perugia', link_grp: 'https://t.me/c/1614195634/403?thread=401'}, - {_id: 70, reg: 'MAR', prov: 'PU', descr: 'Pesaro e Urbino', link_grp: 'https://t.me/c/1614195634/454?thread=449'}, - {_id: 71, reg: 'ABR', prov: 'PE', descr: 'Pescara', link_grp: 'https://t.me/c/1614195634/368?thread=367'}, - {_id: 72, reg: 'EMR', prov: 'PC', descr: 'Piacenza', link_grp: 'https://t.me/c/1614195634/433?thread=424'}, - {_id: 73, reg: 'TOS', prov: 'PI', descr: 'Pisa', link_grp: 'https://t.me/c/1614195634/589?thread=578'}, - {_id: 74, reg: 'TOS', prov: 'PT', descr: 'Pistoia', link_grp: 'https://t.me/c/1614195634/590?thread=579'}, - {_id: 75, reg: 'FVG', prov: 'PN', descr: 'Pordenone', link_grp: 'https://t.me/c/1614195634/470?thread=466'}, - {_id: 76, reg: 'BAS', prov: 'PZ', descr: 'Potenza', link_grp: 'https://t.me/c/1614195634/376?thread=375'}, - {_id: 77, reg: 'TOS', prov: 'PO', descr: 'Prato', link_grp: 'https://t.me/c/1614195634/591?thread=580'}, - {_id: 78, reg: 'SIC', prov: 'RG', descr: 'Ragusa', link_grp: 'https://t.me/c/1614195634/569?thread=559'}, - {_id: 79, reg: 'EMR', prov: 'RA', descr: 'Ravenna', link_grp: 'https://t.me/c/1614195634/434?thread=425'}, - {_id: 80, reg: 'CAL', prov: 'RC', descr: 'Reggio Calabria', link_grp: 'https://t.me/c/1614195634/385?thread=383'}, - {_id: 81, reg: 'EMR', prov: 'RE', descr: 'Reggio Emilia', link_grp: 'https://t.me/c/1614195634/435?thread=426'}, - {_id: 82, reg: 'LAZ', prov: 'RI', descr: 'Rieti', link_grp: 'https://t.me/c/1614195634/61?thread=45'}, - {_id: 83, reg: 'EMR', prov: 'RN', descr: 'Rimini', link_grp: 'https://t.me/c/1614195634/436?thread=https://t.me/c/1614195634/64?thread=57427'}, - {_id: 84, reg: 'LAZ', prov: 'RM', descr: 'Roma', link_grp: ''}, - {_id: 85, reg: 'VEN', prov: 'RO', descr: 'Rovigo', link_grp: 'https://t.me/c/1614195634/611?thread=601'}, - {_id: 86, reg: 'CAM', prov: 'SA', descr: 'Salerno', link_grp: 'https://t.me/c/1614195634/416?thread=412'}, - {_id: 87, reg: 'SAR', prov: 'VS', descr: 'Medio Campidano', link_grp: ''}, - {_id: 88, reg: 'SAR', prov: 'SS', descr: 'Sassari', link_grp: 'https://t.me/c/1614195634/551?thread=544'}, - {_id: 89, reg: 'LIG', prov: 'SV', descr: 'Savona', link_grp: 'https://t.me/c/1614195634/395?thread=391'}, - {_id: 90, reg: 'TOS', prov: 'SI', descr: 'Siena', link_grp: 'https://t.me/c/1614195634/592?thread=581'}, - {_id: 91, reg: 'SIC', prov: 'SR', descr: 'Siracusa', link_grp: 'https://t.me/c/1614195634/570?thread=560'}, - {_id: 92, reg: 'LOM', prov: 'SO', descr: 'Sondrio', link_grp: 'https://t.me/c/1614195634/500?thread=487'}, - {_id: 93, reg: 'PUG', prov: 'TA', descr: 'Taranto', link_grp: 'https://t.me/c/1614195634/539?thread=533'}, - {_id: 94, reg: 'ABR', prov: 'TE', descr: 'Teramo', link_grp: 'https://t.me/c/1614195634/370?thread=369'}, - {_id: 95, reg: 'UMB', prov: 'TR', descr: 'Terni', link_grp: 'https://t.me/c/1614195634/404?thread=402'}, - {_id: 96, reg: 'PIE', prov: 'TO', descr: 'Torino', link_grp: 'https://t.me/c/1614195634/518?thread=509'}, - {_id: 97, reg: 'SAR', prov: 'OG', descr: 'Ogliastra', link_grp: ''}, - {_id: 98, reg: 'SIC', prov: 'TP', descr: 'Trapani', link_grp: 'https://t.me/c/1614195634/571?thread=561'}, - {_id: 99, reg: 'TAA', prov: 'TN', descr: 'Trento', link_grp: 'https://t.me/c/1614195634/597?thread=595'}, - {_id: 100, reg: 'VEN', prov: 'TV', descr: 'Treviso', link_grp: 'https://t.me/c/1614195634/612?thread=602'}, - {_id: 101, reg: 'FVG', prov: 'TS', descr: 'Trieste', link_grp: 'https://t.me/c/1614195634/471?thread=467'}, - {_id: 102, reg: 'FVG', prov: 'UD', descr: 'Udine', link_grp: 'https://t.me/c/1614195634/472?thread=468'}, - {_id: 103, reg: 'LOM', prov: 'VA', descr: 'Varese', link_grp: 'https://t.me/c/1614195634/501?thread=488'}, - {_id: 104, reg: 'VEN', prov: 'VE', descr: 'Venezia', link_grp: 'https://t.me/c/1614195634/613?thread=603'}, - {_id: 105, reg: 'PIE', prov: 'VB', descr: 'Verbano-Cusio-Ossola', link_grp: 'https://t.me/c/1614195634/519?thread=510 '}, - {_id: 106, reg: 'PIE', prov: 'VC', descr: 'Vercelli', link_grp: 'https://t.me/c/1614195634/512?thread=511'}, - {_id: 107, reg: 'VEN', prov: 'VR', descr: 'Verona', link_grp: 'https://t.me/c/1614195634/614?thread=604'}, - {_id: 108, reg: 'CAL', prov: 'VV', descr: 'Vibo Valentia', link_grp: 'https://t.me/c/1614195634/386?thread=384'}, - {_id: 109, reg: 'VEN', prov: 'VI', descr: 'Vicenza', link_grp: 'https://t.me/c/1614195634/615?thread=605'}, - {_id: 110, reg: 'LAZ', prov: 'VT', descr: 'Viterbo', link_grp: 'https://t.me/c/1614195634/76?thread=74'}, - {_id: 111, reg: 'RSM', prov: 'RSM', descr: 'Repubblica di San Marino', link_grp: 'https://t.me/+HSdNurm0IXY1MGI0'}, - {_id: 112, reg: 'EST', prov: 'EST', descr: 'Estero', link_grp: ''}, - {_id: 113, reg: 'ONL', prov: 'ONL', descr: 'On Line', link_grp: ''}, - {_id: 114, reg: 'LAZ', prov: 'RM', descr: 'Roma Nord-Est', link_grp: 'https://t.me/c/1614195634/64?thread=57'}, - {_id: 115, reg: 'LAZ', prov: 'RM', descr: 'Roma Sud-Est', link_grp: 'https://t.me/c/1614195634/65?thread=58'}, - {_id: 116, reg: 'LAZ', prov: 'RM', descr: 'Roma Nord', link_grp: 'https://t.me/c/1614195634/75?thread=73'}, - {_id: 117, reg: 'LAZ', prov: 'RM', descr: 'Roma Nord-Ovest', link_grp: 'https://t.me/c/1614195634/62?thread=47'}, - {_id: 118, reg: 'LAZ', prov: 'RM', descr: 'Roma Sud e Litorale', link_grp: 'https://t.me/c/1614195634/67?thread=43'}, - {_id: 119, reg: 'PUG', prov: 'VAL', descr: 'Valle D\'Itria', link_grp: 'https://t.me/progettoriso/7016?thread=7015'}, - {_id: 120, reg: 'SAR', prov: 'SUS', descr: 'Sud Sardegna', link_grp: 'https://t.me/c/1614195634/552?thread=545'}, + {_id: 1, reg: 'SIC', prov: 'AG', descr: 'Agrigento', link_grp: 'https://t.me/c/1614195634/562?thread=553', link_telegram: ''}, + {_id: 2, reg: 'PIE', prov: 'AL', descr: 'Alessandria', link_grp: 'https://t.me/c/1614195634/513?thread=504', link_telegram: ''}, + {_id: 3, reg: 'MAR', prov: 'AN', descr: 'Ancona', link_grp: 'https://t.me/c/1614195634/450?thread=446', link_telegram: ''}, + {_id: 4, reg: 'VDA', prov: 'AO', descr: 'Aosta', link_grp: 'https://t.me/c/1614195634/521?thread=520', link_telegram: ''}, + {_id: 5, reg: 'TOS', prov: 'AR', descr: 'Arezzo', link_grp: 'https://t.me/c/1614195634/583?thread=572', link_telegram: ''}, + {_id: 6, reg: 'MAR', prov: 'AP', descr: 'Ascoli Piceno', link_grp: 'https://t.me/c/1614195634/451?thread=447', link_telegram: ''}, + {_id: 7, reg: 'PIE', prov: 'AT', descr: 'Asti', link_grp: 'https://t.me/c/1614195634/514?thread=505', link_telegram: ''}, + {_id: 8, reg: 'CAM', prov: 'AV', descr: 'Avellino', link_grp: 'https://t.me/c/1614195634/413?thread=409', link_telegram: ''}, + {_id: 9, reg: 'PUG', prov: 'BA', descr: 'Bari', link_grp: 'https://t.me/c/1614195634/534?thread=528', link_telegram: ''}, + {_id: 10, reg: 'PUG', prov: 'BT', descr: 'Barletta-Andria-Trani', link_grp: 'https://t.me/c/1614195634/535?thread=529', link_telegram: ''}, + {_id: 11, reg: 'VEN', prov: 'BL', descr: 'Belluno', link_grp: 'https://t.me/c/1614195634/608?thread=599', link_telegram: ''}, + {_id: 12, reg: 'CAM', prov: 'BN', descr: 'Benevento', link_grp: 'https://t.me/c/1614195634/415?thread=411', link_telegram: ''}, + {_id: 13, reg: 'LOM', prov: 'BG', descr: 'Bergamo', link_grp: 'https://t.me/c/1614195634/491?thread=477', link_telegram: ''}, + {_id: 14, reg: 'PIE', prov: 'BI', descr: 'Biella', link_grp: 'https://t.me/c/1614195634/515?thread=506', link_telegram: ''}, + {_id: 15, reg: 'EMR', prov: 'BO', descr: 'Bologna', link_grp: 'https://t.me/c/1614195634/428?thread=419', link_telegram: ''}, + {_id: 16, reg: 'TAA', prov: 'BZ', descr: 'Bolzano', link_grp: 'https://t.me/c/1614195634/596?thread=594', link_telegram: ''}, + {_id: 17, reg: 'LOM', prov: 'BS', descr: 'Brescia', link_grp: 'https://t.me/c/1614195634/490?thread=478', link_telegram: ''}, + {_id: 18, reg: 'PUG', prov: 'BR', descr: 'Brindisi', link_grp: 'https://t.me/c/1614195634/536?thread=530', link_telegram: ''}, + {_id: 19, reg: 'SAR', prov: 'CA', descr: 'Cagliari', link_grp: 'https://t.me/c/1614195634/546?thread=541', link_telegram: ''}, + {_id: 20, reg: 'SIC', prov: 'CL', descr: 'Caltanissetta', link_grp: 'https://t.me/c/1614195634/563?thread=554', link_telegram: ''}, + {_id: 21, reg: 'MOL', prov: 'CB', descr: 'Campobasso', link_grp: 'https://t.me/c/1614195634/398?thread=396', link_telegram: ''}, + {_id: 22, reg: 'SAR', prov: 'CI', descr: 'Carbonia-Iglesias', link_grp: '', link_telegram: ''}, + {_id: 23, reg: 'CAM', prov: 'CE', descr: 'Caserta', link_grp: 'https://t.me/c/1614195634/414?thread=410', link_telegram: ''}, + {_id: 24, reg: 'SIC', prov: 'CT', descr: 'Catania', link_grp: 'https://t.me/c/1614195634/564?thread=555', link_telegram: ''}, + {_id: 25, reg: 'CAL', prov: 'CZ', descr: 'Catanzaro', link_grp: 'https://t.me/c/1614195634/378?thread=377', link_telegram: ''}, + {_id: 26, reg: 'ABR', prov: 'CH', descr: 'Chieti', link_grp: 'https://t.me/c/1614195634/366?thread=365', link_telegram: ''}, + {_id: 27, reg: 'LOM', prov: 'CO', descr: 'Como', link_grp: 'https://t.me/c/1614195634/492?thread=479', link_telegram: ''}, + {_id: 28, reg: 'CAL', prov: 'CS', descr: 'Cosenza', link_grp: 'https://t.me/c/1614195634/381?thread=379', link_telegram: ''}, + {_id: 29, reg: 'LOM', prov: 'CR', descr: 'Cremona', link_grp: 'https://t.me/c/1614195634/493?thread=480', link_telegram: ''}, + {_id: 30, reg: 'CAL', prov: 'KR', descr: 'Crotone', link_grp: 'https://t.me/c/1614195634/382?thread=380', link_telegram: ''}, + {_id: 31, reg: 'PIE', prov: 'CN', descr: 'Cuneo', link_grp: 'https://t.me/c/1614195634/516?thread=507', link_telegram: ''}, + {_id: 32, reg: 'SIC', prov: 'EN', descr: 'Enna', link_grp: 'https://t.me/c/1614195634/565?thread=556', link_telegram: ''}, + {_id: 33, reg: 'MAR', prov: 'FM', descr: 'Fermo', link_grp: 'https://t.me/c/1614195634/453?thread=448', link_telegram: ''}, + {_id: 34, reg: 'EMR', prov: 'FE', descr: 'Ferrara', link_grp: 'https://t.me/c/1614195634/429?thread=420', link_telegram: ''}, + {_id: 35, reg: 'TOS', prov: 'FI', descr: 'Firenze', link_grp: 'https://t.me/c/1614195634/584?thread=573', link_telegram: ''}, + {_id: 36, reg: 'PUG', prov: 'FG', descr: 'Foggia', link_grp: 'https://t.me/c/1614195634/537?thread=531', link_telegram: ''}, + {_id: 37, reg: 'EMR', prov: 'FC', descr: 'Forli-Cesena', link_grp: 'https://t.me/c/1614195634/430?thread=421', link_telegram: ''}, + {_id: 38, reg: 'LAZ', prov: 'FR', descr: 'Frosinone', link_grp: 'https://t.me/c/1614195634/48?thread=44', link_telegram: ''}, + {_id: 39, reg: 'LIG', prov: 'GE', descr: 'Genova', link_grp: 'https://t.me/c/1614195634/392?thread=388', link_telegram: ''}, + {_id: 40, reg: 'FVG', prov: 'GO', descr: 'Gorizia', link_grp: 'https://t.me/c/1614195634/469?thread=465', link_telegram: ''}, + {_id: 41, reg: 'TOS', prov: 'GR', descr: 'Grosseto', link_grp: 'https://t.me/c/1614195634/585?thread=574', link_telegram: ''}, + {_id: 42, reg: 'LIG', prov: 'IM', descr: 'Imperia', link_grp: 'https://t.me/c/1614195634/393?thread=389', link_telegram: ''}, + {_id: 43, reg: 'MOL', prov: 'IS', descr: 'Isernia', link_grp: 'https://t.me/c/1614195634/399?thread=397', link_telegram: ''}, + {_id: 44, reg: 'LIG', prov: 'SP', descr: 'La Spezia', link_grp: 'https://t.me/c/1614195634/394?thread=390', link_telegram: ''}, + {_id: 45, reg: 'ABR', prov: 'AQ', descr: 'L\'Aquila', link_grp: 'https://t.me/c/1614195634/364?thread=363', link_telegram: ''}, + {_id: 46, reg: 'LAZ', prov: 'LT', descr: 'Latina', link_grp: 'https://t.me/c/1614195634/60?thread=46', link_telegram: ''}, + {_id: 47, reg: 'PUG', prov: 'LE', descr: 'Lecce', link_grp: 'https://t.me/c/1614195634/538?thread=532', link_telegram: ''}, + {_id: 48, reg: 'LOM', prov: 'LC', descr: 'Lecco', link_grp: 'https://t.me/c/1614195634/494?thread=482', link_telegram: ''}, + {_id: 49, reg: 'TOS', prov: 'LI', descr: 'Livorno', link_grp: 'https://t.me/c/1614195634/586?thread=575', link_telegram: ''}, + {_id: 50, reg: 'LOM', prov: 'LO', descr: 'Lodi', link_grp: 'https://t.me/c/1614195634/495?thread=483', link_telegram: ''}, + {_id: 51, reg: 'TOS', prov: 'LU', descr: 'Lucca', link_grp: 'https://t.me/c/1614195634/587?thread=576', link_telegram: ''}, + {_id: 52, reg: 'MAR', prov: 'MC', descr: 'Macerata', link_grp: 'https://t.me/c/1614195634/300?thread=162', link_telegram: ''}, + {_id: 53, reg: 'LOM', prov: 'MN', descr: 'Mantova', link_grp: 'https://t.me/c/1614195634/497?thread=484', link_telegram: ''}, + {_id: 54, reg: 'TOS', prov: 'MS', descr: 'Massa-Carrara', link_grp: 'https://t.me/c/1614195634/588?thread=577', link_telegram: ''}, + {_id: 55, reg: 'BAS', prov: 'MT', descr: 'Matera', link_grp: 'https://t.me/c/1614195634/374?thread=373', link_telegram: ''}, + {_id: 56, reg: 'SIC', prov: 'ME', descr: 'Messina', link_grp: 'https://t.me/c/1614195634/566?thread=557', link_telegram: ''}, + {_id: 57, reg: 'LOM', prov: 'MI', descr: 'Milano', link_grp: 'https://t.me/c/1614195634/214?thread=173', link_telegram: ''}, + {_id: 58, reg: 'EMR', prov: 'MO', descr: 'Modena', link_grp: 'https://t.me/c/1614195634/431?thread=422', link_telegram: ''}, + {_id: 59, reg: 'LOM', prov: 'MB', descr: 'Monza e della Brianza', link_grp: 'https://t.me/c/1614195634/498?thread=485', link_telegram: ''}, + {_id: 60, reg: 'CAM', prov: 'NA', descr: 'Napoli', link_grp: 'https://t.me/c/1614195634/407?thread=406', link_telegram: ''}, + {_id: 61, reg: 'PIE', prov: 'NO', descr: 'Novara', link_grp: 'https://t.me/c/1614195634/517?thread=508', link_telegram: ''}, + {_id: 62, reg: 'SAR', prov: 'NU', descr: 'Nuoro', link_grp: 'https://t.me/c/1614195634/548?thread=542', link_telegram: ''}, + {_id: 63, reg: 'SAR', prov: 'OT', descr: 'Olbia-Tempio', link_grp: '', link_telegram: ''}, + {_id: 64, reg: 'SAR', prov: 'OR', descr: 'Oristano', link_grp: 'https://t.me/c/1614195634/550?thread=543', link_telegram: ''}, + {_id: 65, reg: 'VEN', prov: 'PD', descr: 'Padova', link_grp: 'https://t.me/c/1614195634/610?thread=600', link_telegram: ''}, + {_id: 66, reg: 'SIC', prov: 'PA', descr: 'Palermo', link_grp: 'https://t.me/c/1614195634/568?thread=558', link_telegram: ''}, + {_id: 67, reg: 'EMR', prov: 'PR', descr: 'Parma', link_grp: 'https://t.me/c/1614195634/432?thread=423', link_telegram: ''}, + {_id: 68, reg: 'LOM', prov: 'PV', descr: 'Pavia', link_grp: 'https://t.me/c/1614195634/499?thread=486', link_telegram: ''}, + {_id: 69, reg: 'UMB', prov: 'PG', descr: 'Perugia', link_grp: 'https://t.me/c/1614195634/403?thread=401', link_telegram: ''}, + {_id: 70, reg: 'MAR', prov: 'PU', descr: 'Pesaro e Urbino', link_grp: 'https://t.me/c/1614195634/454?thread=449', link_telegram: ''}, + {_id: 71, reg: 'ABR', prov: 'PE', descr: 'Pescara', link_grp: 'https://t.me/c/1614195634/368?thread=367', link_telegram: ''}, + {_id: 72, reg: 'EMR', prov: 'PC', descr: 'Piacenza', link_grp: 'https://t.me/c/1614195634/433?thread=424', link_telegram: ''}, + {_id: 73, reg: 'TOS', prov: 'PI', descr: 'Pisa', link_grp: 'https://t.me/c/1614195634/589?thread=578', link_telegram: ''}, + {_id: 74, reg: 'TOS', prov: 'PT', descr: 'Pistoia', link_grp: 'https://t.me/c/1614195634/590?thread=579', link_telegram: ''}, + {_id: 75, reg: 'FVG', prov: 'PN', descr: 'Pordenone', link_grp: 'https://t.me/c/1614195634/470?thread=466', link_telegram: ''}, + {_id: 76, reg: 'BAS', prov: 'PZ', descr: 'Potenza', link_grp: 'https://t.me/c/1614195634/376?thread=375', link_telegram: ''}, + {_id: 77, reg: 'TOS', prov: 'PO', descr: 'Prato', link_grp: 'https://t.me/c/1614195634/591?thread=580', link_telegram: ''}, + {_id: 78, reg: 'SIC', prov: 'RG', descr: 'Ragusa', link_grp: 'https://t.me/c/1614195634/569?thread=559', link_telegram: ''}, + {_id: 79, reg: 'EMR', prov: 'RA', descr: 'Ravenna', link_grp: 'https://t.me/c/1614195634/434?thread=425', link_telegram: ''}, + {_id: 80, reg: 'CAL', prov: 'RC', descr: 'Reggio Calabria', link_grp: 'https://t.me/c/1614195634/385?thread=383', link_telegram: ''}, + {_id: 81, reg: 'EMR', prov: 'RE', descr: 'Reggio Emilia', link_grp: 'https://t.me/c/1614195634/435?thread=426', link_telegram: ''}, + {_id: 82, reg: 'LAZ', prov: 'RI', descr: 'Rieti', link_grp: 'https://t.me/c/1614195634/61?thread=45', link_telegram: ''}, + {_id: 83, reg: 'EMR', prov: 'RN', descr: 'Rimini', link_grp: 'https://t.me/c/1614195634/436?thread=https://t.me/c/1614195634/64?thread=57427', link_telegram: ''}, + {_id: 84, reg: 'LAZ', prov: 'RM', descr: 'Roma', link_grp: '', link_telegram: ''}, + {_id: 85, reg: 'VEN', prov: 'RO', descr: 'Rovigo', link_grp: 'https://t.me/c/1614195634/611?thread=601', link_telegram: ''}, + {_id: 86, reg: 'CAM', prov: 'SA', descr: 'Salerno', link_grp: 'https://t.me/c/1614195634/416?thread=412', link_telegram: ''}, + {_id: 87, reg: 'SAR', prov: 'VS', descr: 'Medio Campidano', link_grp: '', link_telegram: ''}, + {_id: 88, reg: 'SAR', prov: 'SS', descr: 'Sassari', link_grp: 'https://t.me/c/1614195634/551?thread=544', link_telegram: ''}, + {_id: 89, reg: 'LIG', prov: 'SV', descr: 'Savona', link_grp: 'https://t.me/c/1614195634/395?thread=391', link_telegram: ''}, + {_id: 90, reg: 'TOS', prov: 'SI', descr: 'Siena', link_grp: 'https://t.me/c/1614195634/592?thread=581', link_telegram: ''}, + {_id: 91, reg: 'SIC', prov: 'SR', descr: 'Siracusa', link_grp: 'https://t.me/c/1614195634/570?thread=560', link_telegram: ''}, + {_id: 92, reg: 'LOM', prov: 'SO', descr: 'Sondrio', link_grp: 'https://t.me/c/1614195634/500?thread=487', link_telegram: ''}, + {_id: 93, reg: 'PUG', prov: 'TA', descr: 'Taranto', link_grp: 'https://t.me/c/1614195634/539?thread=533', link_telegram: ''}, + {_id: 94, reg: 'ABR', prov: 'TE', descr: 'Teramo', link_grp: 'https://t.me/c/1614195634/370?thread=369', link_telegram: ''}, + {_id: 95, reg: 'UMB', prov: 'TR', descr: 'Terni', link_grp: 'https://t.me/c/1614195634/404?thread=402', link_telegram: ''}, + {_id: 96, reg: 'PIE', prov: 'TO', descr: 'Torino', link_grp: 'https://t.me/c/1614195634/518?thread=509', link_telegram: ''}, + {_id: 97, reg: 'SAR', prov: 'OG', descr: 'Ogliastra', link_grp: '', link_telegram: ''}, + {_id: 98, reg: 'SIC', prov: 'TP', descr: 'Trapani', link_grp: 'https://t.me/c/1614195634/571?thread=561', link_telegram: ''}, + {_id: 99, reg: 'TAA', prov: 'TN', descr: 'Trento', link_grp: 'https://t.me/c/1614195634/597?thread=595', link_telegram: ''}, + {_id: 100, reg: 'VEN', prov: 'TV', descr: 'Treviso', link_grp: 'https://t.me/c/1614195634/612?thread=602', link_telegram: ''}, + {_id: 101, reg: 'FVG', prov: 'TS', descr: 'Trieste', link_grp: 'https://t.me/c/1614195634/471?thread=467', link_telegram: ''}, + {_id: 102, reg: 'FVG', prov: 'UD', descr: 'Udine', link_grp: 'https://t.me/c/1614195634/472?thread=468', link_telegram: ''}, + {_id: 103, reg: 'LOM', prov: 'VA', descr: 'Varese', link_grp: 'https://t.me/c/1614195634/501?thread=488', link_telegram: ''}, + {_id: 104, reg: 'VEN', prov: 'VE', descr: 'Venezia', link_grp: 'https://t.me/c/1614195634/613?thread=603', link_telegram: ''}, + {_id: 105, reg: 'PIE', prov: 'VB', descr: 'Verbano-Cusio-Ossola', link_grp: 'https://t.me/c/1614195634/519?thread=510 ', link_telegram: ''}, + {_id: 106, reg: 'PIE', prov: 'VC', descr: 'Vercelli', link_grp: 'https://t.me/c/1614195634/512?thread=511', link_telegram: ''}, + {_id: 107, reg: 'VEN', prov: 'VR', descr: 'Verona', link_grp: 'https://t.me/c/1614195634/614?thread=604', link_telegram: ''}, + {_id: 108, reg: 'CAL', prov: 'VV', descr: 'Vibo Valentia', link_grp: 'https://t.me/c/1614195634/386?thread=384', link_telegram: ''}, + {_id: 109, reg: 'VEN', prov: 'VI', descr: 'Vicenza', link_grp: 'https://t.me/c/1614195634/615?thread=605', link_telegram: ''}, + {_id: 110, reg: 'LAZ', prov: 'VT', descr: 'Viterbo', link_grp: 'https://t.me/c/1614195634/76?thread=74', link_telegram: ''}, + {_id: 111, reg: 'RSM', prov: 'RSM', descr: 'Repubblica di San Marino', link_grp: 'https://t.me/+HSdNurm0IXY1MGI0', link_telegram: ''}, + {_id: 112, reg: 'EST', prov: 'EST', descr: 'Estero', link_grp: '', link_telegram: ''}, + {_id: 113, reg: 'ONL', prov: 'ONL', descr: 'On Line', link_grp: '', link_telegram: ''}, + {_id: 114, reg: 'LAZ', prov: 'RM', descr: 'Roma Nord-Est', link_grp: 'https://t.me/c/1614195634/64?thread=57', link_telegram: ''}, + {_id: 115, reg: 'LAZ', prov: 'RM', descr: 'Roma Sud-Est', link_grp: 'https://t.me/c/1614195634/65?thread=58', link_telegram: ''}, + {_id: 116, reg: 'LAZ', prov: 'RM', descr: 'Roma Nord', link_grp: 'https://t.me/c/1614195634/75?thread=73', link_telegram: ''}, + {_id: 117, reg: 'LAZ', prov: 'RM', descr: 'Roma Nord-Ovest', link_grp: 'https://t.me/c/1614195634/62?thread=47', link_telegram: ''}, + {_id: 118, reg: 'LAZ', prov: 'RM', descr: 'Roma Sud e Litorale', link_grp: 'https://t.me/c/1614195634/67?thread=43', link_telegram: ''}, + {_id: 119, reg: 'PUG', prov: 'VAL', descr: 'Valle D\'Itria', link_grp: 'https://t.me/progettoriso/7016?thread=7015', link_telegram: ''}, + {_id: 120, reg: 'SAR', prov: 'SUS', descr: 'Sud Sardegna', link_grp: 'https://t.me/c/1614195634/552?thread=545', link_telegram: ''}, ], }; diff --git a/src/server/router/circuits_router.js b/src/server/router/circuits_router.js index 861c1ef..4958980 100755 --- a/src/server/router/circuits_router.js +++ b/src/server/router/circuits_router.js @@ -73,7 +73,7 @@ router.post('/load', authenticate, async (req, res) => { } if (data) { - data.account = await Account.getAccountByUsernameAndCircuitId(idapp, '', data._id, false, '', data.path); + data.account = await Account.getAccountByUsernameAndCircuitId(idapp, '', data._id, false, false, '', data.path); } const arrrecnotif = await SendNotif.findAllNotifByUsernameIdAndIdApp(req.user.username, lastdr, idapp); diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 1414e9b..a7eba78 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -364,7 +364,7 @@ router.post('/settable', authenticate, async (req, res) => { } else if (params.table === 'hours') { } else { - if ((mydata['_id'] === undefined || mydata['_id'] === '' || (mytablerec.isNew && mydata['_id'] === 0)) && (mytablerec._id === undefined)) { + if ((mydata['_id'] === undefined || mydata['_id'] === '' || (mytablerec.isNew && mydata['_id'] === 0)) && (mytablerec._id === undefined || mytablerec._id === '0')) { mytablerec._id = new ObjectID(); mydata._id = new ObjectID(); } @@ -1252,11 +1252,11 @@ router.post('/duprec/:table/:id', authenticate, async (req, res) => { send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' }); } - if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) { + /* if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) { // If without permissions, exit return res.status(404). send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' }); - } + } */ return await mytable.findById(id).then(async (mydata) => { diff --git a/src/server/router/mygroups_router.js b/src/server/router/mygroups_router.js index 33882bb..fe3ee24 100755 --- a/src/server/router/mygroups_router.js +++ b/src/server/router/mygroups_router.js @@ -59,7 +59,7 @@ router.post('/load', authenticate, async (req, res) => { for (let i = 0; i < data.mycircuits.length; i++) { const mycirc = await Circuit.findOne({ idapp, name: data.mycircuits[i].circuitname }).lean(); if (mycirc) - data.mycircuits[i].account = await Account.getAccountByUsernameAndCircuitId(idapp, '', mycirc._id, true, groupname); + data.mycircuits[i].account = await Account.getAccountByUsernameAndCircuitId(idapp, '', mycirc._id, true, true, groupname); } } diff --git a/src/server/router/userrequest_router.js b/src/server/router/userrequest_router.js index 33882bb..fe3ee24 100755 --- a/src/server/router/userrequest_router.js +++ b/src/server/router/userrequest_router.js @@ -59,7 +59,7 @@ router.post('/load', authenticate, async (req, res) => { for (let i = 0; i < data.mycircuits.length; i++) { const mycirc = await Circuit.findOne({ idapp, name: data.mycircuits[i].circuitname }).lean(); if (mycirc) - data.mycircuits[i].account = await Account.getAccountByUsernameAndCircuitId(idapp, '', mycirc._id, true, groupname); + data.mycircuits[i].account = await Account.getAccountByUsernameAndCircuitId(idapp, '', mycirc._id, true, true, groupname); } } diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index 9a769cb..be1a8f1 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -1311,6 +1311,10 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) { await Circuit.SetDefMinMaxCollettivi(idapp, mydata.valmin, mydata.valmax); + } else if (mydata.dbop === 'AbilitaTuttiCircuiti') { + + await Circuit.AbilitaTuttiCircuiti(idapp); + } else if (mydata.dbop === 'setstrProvByIdCityCircuits') { await Circuit.setstrProvByIdCityCircuits(idapp); @@ -1440,7 +1444,7 @@ async function eseguiDbOpUser(idapp, mydata, locale, req, res) { for (const mycirc of allcirc) { // Il Conto Comunitario prende il nome del circuito ! - await Account.createAccount(idapp, '', mycirc.name, '', mycirc.path); + await Account.createAccount(idapp, '', mycirc.name, true, '', mycirc.path); } diff --git a/src/server/telegram/telegrambot.js b/src/server/telegram/telegrambot.js index c2b461f..87b5498 100755 --- a/src/server/telegram/telegrambot.js +++ b/src/server/telegram/telegrambot.js @@ -450,8 +450,6 @@ const Status = { const Cmd = { VALIDATE_REGISTRATION: 1, - RICHIESTA_GRUPPO: 2, - RICHIESTA_CIRCUIT: 3, }; const Destin = { @@ -891,37 +889,37 @@ const MyTelegramBot = { callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + groupid, }, ]); - } else if (myfunc === shared_consts.CallFunz.RICHIESTA_CIRCUIT) { + } else if (myfunc === shared_consts.CallFunz.RICHIESTA_FIDO) { if (groupname) { domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY_BYGROUP', locale: langdest }, groupname) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { - text: '✅ Accetta ' + groupname, + text: '✅ Abilita fido a ' + groupname, callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + groupid + tools.SEP + groupname, }, - { + /*{ text: '🚫 Rifiuta ' + groupname, callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + groupid + tools.SEP + groupname, - }, + },*/ ]); } else { - domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY', locale: langdest }, name) + '
' + struserinfomsg; + domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY', locale: langdest }, myuser.username, name) + '
' + struserinfomsg; keyb = cl.getInlineKeyboard(myuser.lang, [ { - text: '✅ Accetta ' + myuser.username, + text: '✅ Abilita fido a ' + myuser.username, callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + groupid, }, - { + /*{ text: '🚫 Rifiuta ' + myuser.username, callback_data: InlineConferma.RISPOSTA_NO + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP + groupid, - }, + }, */ ]); } } @@ -2809,8 +2807,6 @@ class Telegram { async setCmdToUsername(rec, username, cmd_to_set, valuebool) { if (cmd_to_set === Cmd.VALIDATE_REGISTRATION) { return await User.setVerifiedByAportador(rec.user.idapp, username, valuebool); - } else if (cmd_to_set === Cmd.RICHIESTA_GRUPPO) { - } } @@ -4083,20 +4079,14 @@ if (true) { } } - } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_CIRCUIT) { + } else if (data.action === InlineConferma.RISPOSTA_SI + shared_consts.CallFunz.RICHIESTA_FIDO) { if (circuit) { - cmd = shared_consts.CIRCUITCMD.SET; - let foundIfAlreadyCircuit = false; - if (data.groupname) { - foundIfAlreadyCircuit = await MyGroup.ifCircuitAlreadyInGroup(user.idapp, data.groupname, circuit.name); - } else { - foundIfAlreadyCircuit = await User.ifAlreadyInCircuit(user.idapp, data.username, circuit.name); - } - if (!foundIfAlreadyCircuit) { - // Aggiungilo nel Circuito - await User.setCircuitCmd(user.idapp, data.username, circuit.name, cmd, 0, username_action, { groupname: data.groupname }); - } + cmd = shared_consts.CIRCUITCMD.SETFIDO; + // Aggiungilo nel Circuito + // await User.setCircuitCmd(user.idapp, data.username, circuit.name, cmd, 0, username_action, { groupname: data.groupname }); + // Abiglitagli il Fido + await User.setCircuitCmd(user.idapp, data.username, circuit.name, cmd, 0, username_action, { groupname: data.groupname }); } } else if (data.action === InlineConferma.RISPOSTA_NO + shared_consts.CallFunz.RICHIESTA_CIRCUIT) { diff --git a/src/server/tools/general.js b/src/server/tools/general.js index abd16dc..e25201c 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -1093,11 +1093,13 @@ module.exports = { typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REQUEST_TO_ENTER; // paramsObj.options = MessageOptions.Notify_OnlyToNotifinApp + MessageOptions.Notify_ByBotTelegram; const myuserdata = await User.getUserShortDataByUsername(idapp, username_action); - telegrambot.askConfirmationUser(idapp, shared_consts.CallFunz.RICHIESTA_CIRCUIT, myuserdata, usernameDest, circuitname, + telegrambot.askConfirmationUser(idapp, shared_consts.CallFunz.RICHIESTA_FIDO, myuserdata, usernameDest, circuitname, myreccircuit._id, '', extrarec.groupname); onlysave = false; } else if (cmd === shared_consts.CIRCUITCMD.ADDADMIN) { typeid = shared_consts.TypeNotifs.ID_CIRCUIT_ADDED_ADMIN; + } else if (cmd === shared_consts.CIRCUITCMD.SETFIDO) { + typeid = shared_consts.TypeNotifs.ID_CIRCUIT_SETFIDO; } else if (cmd === shared_consts.CIRCUITCMD.REMOVEADMIN) { typeid = shared_consts.TypeNotifs.ID_CIRCUIT_REMOVED_ADMIN; } else if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REQ) { @@ -1938,149 +1940,156 @@ module.exports = { }, addNumFavoriteAndBookmarkToQuery(idapp, numtab) { - let query = - [{ - $lookup: { - from: 'users', - let: { - tab: numtab, - id: '$_id', - }, - pipeline: [ - { - $unwind: '$profile.favorite', - }, - { - $match: { - $expr: { - $and: [ - { $eq: ['$profile.favorite.id', '$$id'] }, - { $eq: ['$profile.favorite.tab', '$$tab'] }, - { $eq: ['$idapp', idapp] }, - ], - }, - }, - }, - { $project: { username: 1, name: 1, surname: 1, 'profile.resid_province': 1, 'profile.img': 1, 'profile.qualifica': 1 } }, - ], - as: 'myfav', - }, - }, - { - $lookup: { - from: "users", - let: { - tab: numtab, - id: '$_id', - }, - pipeline: [ - { - $unwind: '$profile.bookmark', - }, - { - $match: { - $expr: { - $and: [ - { $eq: ['$profile.bookmark.id', '$$id'] }, - { $eq: ['$profile.bookmark.tab', '$$tab'] }, - { $eq: ['$idapp', idapp] }, - ], - }, - }, - }, - { - $project: { - username: 1, name: 1, surname: 1, 'profile.resid_province': 1, 'profile.img': 1, - 'profile.qualifica': 1, - } - }, - ], - as: 'mybook', - }, - }, - { - $lookup: { - from: "users", - let: { - tab: numtab, - id: '$_id', - }, - pipeline: [ - { - $unwind: '$profile.seen', - }, - { - $match: { - $expr: { - $and: [ - { $eq: ['$profile.seen.id', '$$id'] }, - { $eq: ['$profile.seen.tab', '$$tab'] }, - { $eq: ['$idapp', idapp] }, - ], - }, - }, - }, - { - $project: { - username: 1, name: 1, surname: 1, 'profile.resid_province': 1, 'profile.img': 1, - 'profile.qualifica': 1, - } - }, - ], - as: 'myseen', - }, - }, - { - $lookup: { - from: "users", - let: { - tab: numtab, - id: '$_id', - }, - pipeline: [ - { - $unwind: '$profile.attend', - }, - { - $match: { - $expr: { - $and: [ - { $eq: ['$profile.attend.id', '$$id'] }, - { $eq: ['$profile.attend.tab', '$$tab'] }, - { $eq: ['$idapp', idapp] }, - ], - }, - }, - }, - { - $project: { - username: 1, name: 1, surname: 1, 'profile.resid_province': 1, 'profile.img': 1, - 'profile.qualifica': 1, - } - }, - ], - as: 'myattend', - }, - }]; - const numtabbacheca = this.getNumTabByTable(shared_consts.TABLES_MYBACHECAS); - if (numtab === numtabbacheca) { - const queryadd = this.getQueryMyBacheca(); - query = [...query, ...queryadd]; + let query = {}; + try { + query = + [{ + $lookup: { + from: 'users', + let: { + tab: numtab, + id: '$_id', + }, + pipeline: [ + { + $unwind: '$profile.favorite', + }, + { + $match: { + $expr: { + $and: [ + { $eq: ['$profile.favorite.id', '$$id'] }, + { $eq: ['$profile.favorite.tab', '$$tab'] }, + { $eq: ['$idapp', idapp] }, + ], + }, + }, + }, + { $project: { username: 1, name: 1, surname: 1, 'profile.resid_province': 1, 'profile.img': 1, 'profile.qualifica': 1 } }, + ], + as: 'myfav', + }, + }, + { + $lookup: { + from: "users", + let: { + tab: numtab, + id: '$_id', + }, + pipeline: [ + { + $unwind: '$profile.bookmark', + }, + { + $match: { + $expr: { + $and: [ + { $eq: ['$profile.bookmark.id', '$$id'] }, + { $eq: ['$profile.bookmark.tab', '$$tab'] }, + { $eq: ['$idapp', idapp] }, + ], + }, + }, + }, + { + $project: { + username: 1, name: 1, surname: 1, 'profile.resid_province': 1, 'profile.img': 1, + 'profile.qualifica': 1, + } + }, + ], + as: 'mybook', + }, + }, + { + $lookup: { + from: "users", + let: { + tab: numtab, + id: '$_id', + }, + pipeline: [ + { + $unwind: '$profile.seen', + }, + { + $match: { + $expr: { + $and: [ + { $eq: ['$profile.seen.id', '$$id'] }, + { $eq: ['$profile.seen.tab', '$$tab'] }, + { $eq: ['$idapp', idapp] }, + ], + }, + }, + }, + { + $project: { + username: 1, name: 1, surname: 1, 'profile.resid_province': 1, 'profile.img': 1, + 'profile.qualifica': 1, + } + }, + ], + as: 'myseen', + }, + }, + { + $lookup: { + from: "users", + let: { + tab: numtab, + id: '$_id', + }, + pipeline: [ + { + $unwind: '$profile.attend', + }, + { + $match: { + $expr: { + $and: [ + { $eq: ['$profile.attend.id', '$$id'] }, + { $eq: ['$profile.attend.tab', '$$tab'] }, + { $eq: ['$idapp', idapp] }, + ], + }, + }, + }, + { + $project: { + username: 1, name: 1, surname: 1, 'profile.resid_province': 1, 'profile.img': 1, + 'profile.qualifica': 1, + } + }, + ], + as: 'myattend', + }, + }]; + + const numtabbacheca = this.getNumTabByTable(shared_consts.TABLES_MYBACHECAS); + if (numtab === numtabbacheca) { + const queryadd = this.getQueryMyBacheca(idapp); + query = [...query, ...queryadd]; + } + + proj = { + myfav: 1, + mybook: 1, + myseen: 1, + myattend: 1, + mybookings: 1, + }; + } catch (e) { + console.error(e); } - proj = { - myfav: 1, - mybook: 1, - myseen: 1, - myattend: 1, - mybookings: 1, - }; - return { query, proj }; + }, - getQueryMyBacheca: function () { + getQueryMyBacheca: function (idapp) { const arrquery = [{ $lookup: { diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 228b135..c42fd0c 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -81,6 +81,7 @@ module.exports = { CREATE: 1001, REQ: 2000, SET: 2001, + SETFIDO: 2005, REMOVE_FROM_MYLIST: 2144, REFUSE_REQ: 2145, CANCEL_REQ: 2146, @@ -318,6 +319,7 @@ module.exports = { RICHIESTA_AMICIZIA: 15, RICHIESTA_HANDSHAKE: 16, RICHIESTA_CIRCUIT: 20, + RICHIESTA_FIDO: 25, }, OrderStatus: { @@ -452,6 +454,7 @@ module.exports = { ID_CIRCUIT_SENDCOINSREQ_SENT: 4096, ID_CIRCUIT_COINS_ACCEPTED_SENT: 8192, ID_CIRCUIT_COINS_REFUSED_SENT: 16384, + ID_CIRCUIT_SETFIDO: 32768, TYPEDIR_BOOKING: 6, @@ -579,7 +582,7 @@ module.exports = { 'idGood': 1, 'idShipping': 1, 'idStatusGood': 1, - //**ADDFIELD_MYGOOD + //**ADDFIELD_MYGOOD } } else if (table === this.TABLES_MYGROUPS) { @@ -695,7 +698,10 @@ module.exports = { max_partecip: 1, contribstr: 1, link_maplocation: 1, - //**ADDFIELD_MYBACHECAS + 'mygrp.groupname': 1, + 'mygrp.title': 1, + 'mygrp.photos': 1, + //**ADDFIELD_MYBACHECAS } } @@ -720,6 +726,7 @@ module.exports = { username: 1, name: 1, surname: 1, + groupname: 1, lasttimeonline: 1, comune: 1, mycities: 1,