- fix: "Circuito RIS {nomecircuito}" uniformati tutti quanti.

- fix Strette di mano dicitura.
- poter vedere e cliccare sul gruppo telegram della provincia (dalla lista dei circuiti).
This commit is contained in:
Surya Paolo
2024-04-25 23:26:16 +02:00
parent c79f6e8cc6
commit 7773c2a87b
11 changed files with 235 additions and 13 deletions

View File

@@ -144,3 +144,25 @@ Mer 24/04 ORE 20:45: USER [paoloar77]: 📨 invia a paolo
Mer 24/04 ORE 20:58: USER [paoloar77]: grass e prova italic
Mer 24/04 ORE 21:19: USER [paoloar77]: 👍 si
Mer 24/04 ORE 22:02: USER [paoloar77]: ✅ la regolarizzazione può avv
Mer 24/04 ORE 22:15: USER [paoloar77]: ❗importante❗
💚🍚 cari membri dei circuiti ris,
quando siete entrati nel vostro circuito territoriale, avete dichiarato di avere letto e approvato il regolamento di funzionamento dei circuiti ris.
📖 leggi qui il regolamento (https://riso.app/regolamento)
il gruppo dei facilitatori territoriali di riso ha individuato un punto che necessita di chiarimenti, per rendere più esplicito un meccanismo già presente nel testo stesso. propone dunque di aggiungere una nota esplicativa (vedi asterisco *) alla seguente frase del regolamento (indicata in corsivo):
➡️ "… ciascun detentore di un saldo negativo concorda che la sua esposizione funge da garanzia della quantità di ris equivalenti circolanti nel circuito e che può essere chiamato a regolarizzare con equivalente pagamento in euro * , entro un lasso di tempo ragionevolmente adeguato, nel caso in cui: la comunità, in accordo con il gruppo tecnico, deliberi il rientro di alcune posizioni con decisione motivata; lutente decida di uscire per motivi personali; il circuito chiuda, per decisione deliberata o per motivi di forza maggiore.”
✅ * la regolarizzazione può avvenire con equivalente valore in beni e servizi, oppure, in ultima istanza, con pagamento in euro.
📣 invitiamo tutti a prendere visione della proposta, e ad esprimere eventuali osservazioni nel gruppo territoriale, oppure come commento a questo stesso post, pubblicato sul canale progetto riso, entro il giorno 5 maggio
https://t.me/riso_canale/739
in attesa di riscontri, salutiamo! 🍚💚
il gruppo dei facilitatori territoriali riso

View File

@@ -811,4 +811,28 @@ Il gruppo dei Facilitatori Territoriali RISO
Mer 24/04 ORE 21:32: 1 ✉️ Messaggi Inviati !
Mer 24/04 ORE 21:35: PAOLO:
prova
Mer 24/04 ORE 21:35: 1 ✉️ Messaggi Inviati !
Mer 24/04 ORE 21:35: 1 ✉️ Messaggi Inviati !
Mer 24/04 ORE 21:58: APPARTIENE_CIRCUITO_RIS:
SDADA
Mer 24/04 ORE 22:01: APPARTIENE_CIRCUITO_RIS:
IMPORTANTE❗
💚🍚 Cari membri dei Circuiti Ris,
quando siete entrati nel vostro circuito territoriale, avete dichiarato di avere letto e approvato il Regolamento di funzionamento dei Circuiti Ris.
📖 Leggi qui il Regolamento
Il gruppo dei Facilitatori Territoriali di RISO ha individuato un punto che necessita di chiarimenti, per rendere più esplicito un meccanismo già presente nel testo stesso. Propone dunque di aggiungere una nota esplicativa (vedi asterisco *) alla seguente frase del Regolamento (indicata in corsivo):
➡️ "… Ciascun detentore di un saldo negativo concorda che la sua esposizione funge da garanzia della quantità di Ris equivalenti circolanti nel circuito e che può essere chiamato a regolarizzare con equivalente pagamento in euro *, entro un lasso di tempo ragionevolmente adeguato, nel caso in cui: la Comunità, in accordo con il Gruppo Tecnico, deliberi il rientro di alcune posizioni con decisione motivata; lutente decida di uscire per motivi personali; il circuito chiuda, per decisione deliberata o per motivi di forza maggiore.”
✅ * La regolarizzazione può avvenire con equivalente valore in beni e servizi, oppure, in ultima istanza, con pagamento in euro.
📣 Invitiamo tutti a prendere visione della proposta, e ad esprimere eventuali osservazioni nel Gruppo Territoriale, oppure come commento a questo stesso post, pubblicato sul canale Progetto RISO, entro il giorno 5 maggio!
https://t.me/riso_canale/739
In attesa di riscontri, salutiamo! 🍚💚
Il gruppo dei Facilitatori Territoriali RISO
Mer 24/04 ORE 22:02: 🤖: Da Sùrya (Paolo) (paoloar77):
✅ la regolarizzazione può avv

View File

@@ -176,4 +176,12 @@ piuchebuono: 2291.0999999999985 €]
Gio 11/04 ORE 16:57: [<b>Euro</b>]: Inviate Monete da paoloar77 a piuchebuono 110 € [causale: Pagato Ordine n.234]
Saldi:
paoloar77: -466.8 €]
piuchebuono: 2401.0999999999985 €]
piuchebuono: 2401.0999999999985 €]
Gio 25/04 ORE 11:43: [<b>Circuito RIS Bologna</b>]: Inviate Monete da SuryaArena a paoloar77 1 RIS [causale: ]
Saldi:
SuryaArena: -1 RIS]
paoloar77: 38 RIS]
Gio 25/04 ORE 14:37: [<b>Circuito RIS Bologna</b>]: Inviate Monete da paoloar77 a SuryaArena 38 RIS [causale: ]
Saldi:
paoloar77: 0 RIS]
SuryaArena: 37 RIS]

View File

@@ -24,6 +24,7 @@
"✅ %s accepted your Friendship request !": "✅ %s ha accettato la tua richiesta di Amicizia !",
"✅ You have accepted %s' Friendship request!": "✅ Hai accettato la richiesta di Amicizia di %s !",
"HANDSHAKE_SET": "<strong>%s</strong> ha comunicato che ti conosce personalmente e ha Fiducia in te (Stretta di mano).",
"HANDSHAKE_SENT_FROM_YOU": "🤝 hai inviato una Stretta di Mano a <strong>%s</strong>, perché la conosci personalmente !",
"HANDSHAKE_CONFIRMED": "🤝 Hai contraccambiato la stretta di mano di <strong>%s</strong>!",
"HANDSHAKE_ACCEPTED": "🤝 <strong>%s</strong> ha contraccambiato la tua stretta di mano !",
"GROUPS_ACCEPTED": "✅ Sei stato accettato a far parte del Gruppo %s (da parte di %s)",

View File

@@ -253,7 +253,7 @@ 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);
@@ -1315,7 +1315,7 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) {
// CORREGGI DUPLICATI NEI CIRCUITI
for (const user of usersWithDuplicateCircuits) {
// Troviamo l'utente dal suo _id e aggiorniamo il suo documento
const arraycirc = await User.findOne({_id: user._id}).lean();
const arraycirc = await User.findOne({ _id: user._id }).lean();
let risdel = await User.updateOne(
{ _id: user._id },
@@ -1544,6 +1544,99 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) {
};
CircuitSchema.statics.replaceAllCircuitNames = async function (idapp) {
const Circuit = this;
const { City } = require('../models/city');
const { Province } = require('../models/province');
const { MyGroup } = require('../models/mygroup');
const { User } = require('../models/user');
const myfind = { idapp };
let circuits = [];
try {
circuits = await Circuit.find(myfind);
let quanti = 0;
for (const circuit of circuits) {
if (!circuit || !circuit._id) {
console.error('Error: circuit is null or has no _id property');
continue;
}
const circuitId = circuit._id;
let provincia = '';
if (circuit.idCity && circuit.idCity.length > 0) {
provincia = await City.getProvinceByIdCity(circuit.idCity[0]);
}
if (!provincia)
provincia = circuit.strProv;
if (provincia) {
provincia = await Province.getStrProvinceByProv(provincia);
}
if (!provincia) {
console.log('PROVINCIA NON ESISTENTE !', circuit.name);
}
let path = '';
if (!circuit.showAlways) {
let newname = 'Circuito RIS ' + provincia;
// Se newname contiene 'ROMA', allora non aggiorna
if (circuit.name == 'RIS Roma Sud Est ' || circuit.name === 'Circuito RIS Roma Sud Est') {
newname = 'Circuito RIS Roma Sud Est';
} else if (circuit.name == 'Circuito RIS Roma Sud e Litora') {
newname = 'Circuito RIS Roma Sud e Litora';
} else if (circuit.name.trim() === 'RISO Roma Nord' || circuit.name.trim() === 'Circuito RISO Roma Nord') {
newname = 'Circuito RIS Roma Nord';
/* } else if (circuit.name == 'Circuito RIS Benevento' || circuit.name == 'Circuito RIS Campania') {
newname = 'Circuito RIS Campania';
path = 'riscampania'; */
} else if (circuit.name == 'Circuito RIS Milano Est') {
newname = 'Circuito RIS Milano Est';
} else if (circuit.name == 'Circuito RIS Repubblica di San Marino') {
newname = 'Circuito RIS Repubblica di San Marino';
}
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));
}
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));
}
}
}
console.log('Circuiti aggiornati: ' + quanti);
} catch (e) {
console.error('Err ', e);
return;
}
};
CircuitSchema.statics.addMovementByOrdersCart = async function (ordersCart, usernameDest, groupDest) {
const { User } = require('../models/user');

View File

@@ -628,6 +628,13 @@ MyGroupSchema.statics.getReceiveRISGroups = async function (idapp) {
};
MyGroupSchema.statics.renameCircuitName = async function (idapp, oldcircuitname, newcircuitname) {
return await this.updateMany({ idapp, 'mycircuits.circuitname': oldcircuitname }, { $set: { 'profile.mycircuits.$.circuitname': newcircuitname } });
};
MyGroupSchema.statics.setReceiveRisGroup = async function (idapp, groupname) {
return await this.findOneAndUpdate({

View File

@@ -1712,13 +1712,15 @@ UserSchema.methods.removeToken = function (token) {
});
};
// # Rimuove tutti i tokens di tutti gli utenti con idapp
// TODO: Cancellare i token che non hanno refreshToken, ad esempio quando l'utente esce dal browser
// TODO: Cancellare i token con data_login meno di 2 giorni fa, per esempio se l'utente si è disconnesso dal browser ma è ancora online
UserSchema.statics.SvuotaTuttiGliAccessiOnlineConToken = async function (idapp) {
const User = this;
return await User.updateMany({ idapp },
{ $set: { tokens: [] } });
};
{ $pull: { tokens: { refreshToken: { $exists: false } } } });
};
UserSchema.statics.getEmailByUsername = async function (idapp, username) {
@@ -1782,7 +1784,7 @@ UserSchema.statics.getUserByUsername = function (idapp, username) {
UserSchema.statics.getUserByUsernameTelegram = function (idapp, username_telegram) {
const User = this;
if (username_telegram[0] === '@'){
if (username_telegram[0] === '@') {
username_telegram = username_telegram.substring(1);
}
@@ -2162,6 +2164,14 @@ UserSchema.statics.removeFromCircuits = async function (idapp, username, circuit
const circuitId = await Circuit.getCircuitIdByName(idapp, circuitname);
let remove = false;
const circuit = await Circuit.findOne({ idapp, name: circuitname }).lean();
if (circuit) {
// Invio la notifica agli amministratori del circuito
const title = `L\'utente ${username} è uscito dal ${circuitname}`;
const msg = ``;
await tools.sendNotifToCircuitsAdmin(idapp, circuit, true, title, msg, '')
}
// Se il mio account non è stato utilizzato, allora lo cancello anche questo
const myaccount = await Account.getAccountByUsernameAndCircuitId(idapp, username, circuitId, false, false, '', '');
if (myaccount && myaccount.totTransato === 0) {
@@ -2460,6 +2470,10 @@ UserSchema.statics.setFriendsCmd = async function (req, idapp, usernameOrig, use
},
},
};
const already_stretta = await User.isMyHandShake(idapp, usernameDest, usernameOrig);
const already_stretta_orig = await User.isMyHandShake(idapp, usernameOrig, usernameDest);
rec = await User.updateOne({ idapp, username: usernameDest }, update);
tools.sendNotificationByUsername(idapp, usernameDest, cmd, true, usernameOrig);
@@ -2470,8 +2484,11 @@ UserSchema.statics.setFriendsCmd = async function (req, idapp, usernameOrig, use
if (!disablenotif) {
const userDest = await User.getRecLangAndIdByUsername(idapp, usernameDest);
const user = await User.getRecLangAndIdByUsername(idapp, usernameOrig);
const already_stretta = await User.isMyHandShake(idapp, usernameDest, usernameOrig);
const msgDest = i18n.__({ phrase: 'HANDSHAKE_CONFIRMED', locale: userDest.lang }, usernameDest);
let msgDest = i18n.__({ phrase: 'HANDSHAKE_SENT_FROM_YOU', locale: userDest.lang }, usernameDest);
if (already_stretta)
msgDest = i18n.__({ phrase: 'HANDSHAKE_CONFIRMED', locale: userDest.lang }, usernameDest);
let phrase = 'HANDSHAKE_SET';
if (already_stretta) {
phrase = 'HANDSHAKE_ACCEPTED';
@@ -5786,6 +5803,12 @@ UserSchema.statics.addNewSite = async function (idappPass, body) {
};
UserSchema.statics.renameCircuitName = async function (idapp, oldcircuitname, newcircuitname) {
const User = this;
return await User.updateMany({ idapp, 'profile.mycircuits.circuitname': oldcircuitname }, { $set: { 'profile.mycircuits.$.circuitname': newcircuitname } });
};
UserSchema.statics.createNewSubRecord = async function (idapp, req) {
const User = this;

View File

@@ -998,6 +998,9 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) {
// } else if (mydata.dbop === 'rigeneraTutto') {
// await ListaIngresso.Esegui_CronTab(idapp, mydata);
} else if (mydata.dbop === 'ReplaceAllCircuits') {
// ++ Replace All Circuitname with 'Circuito RIS %s'
await Circuit.replaceAllCircuitNames(idapp);
} else if (mydata.dbop === 'visuStat') {
// ris = await User.visuUtentiNonInNavi(idapp);
//} else if (mydata.dbop === 'creaNavi') {
@@ -1753,10 +1756,11 @@ async function eseguiDbOpUser(idapp, mydata, locale, req, res) {
} else if (mydata.dbop === 'noFoto') {
await User.findOneAndUpdate({ _id: mydata._id },
{ $set: { 'profile.noFoto': mydata.value } });
}
} catch (e) {
console.log(e.message);
}
};

View File

@@ -759,7 +759,7 @@ const MyTelegramBot = {
const cl = getclTelegByidapp(idapp);
if (cl && idtelegram) {
return await cl.sendMsg(idtelegram, text, null, MyForm, message_id,
chat_id, ripr_menuPrec);
}
@@ -3330,7 +3330,8 @@ class Telegram {
rec.entities = msg.entities;
// Se contiene della formattazione allora fai il FORWARD DEL MESSAGGIO
rec.forwardMessage = !!rec.entities;
//rec.forwardMessage = !!rec.entities;
rec.forwardMessage = false;
rec.chatId = msg.chat.id;
rec.messageId = msg.message_id;

View File

@@ -1445,6 +1445,44 @@ module.exports = {
},
*/
async sendNotifToCircuitsAdmin(idapp, circuit, alsotelegram, title, msg, tag = '') {
const { User } = require('../models/user');
const telegrambot = require('../telegram/telegrambot');
if (!circuit || !circuit.admins) {
console.error('sendNotifToCircuitsAdmin: missing circuit or circuit.admins', circuit);
return;
}
for (const singleadmin of circuit.admins) {
try {
if (singleadmin && singleadmin.username) {
const user = await User.getUserShortDataByUsername(idapp, singleadmin.username);
if (user) {
if (alsotelegram) {
if (!user.profile || !user.profile.teleg_id) {
console.error('sendNotifToCircuitsAdmin: missing user.profile.teleg_id', user);
} else {
telegrambot.local_sendMsgTelegramByIdTelegram(idapp, user.profile.teleg_id, title + ' ' + msg);
}
}
if (!user._id) {
console.error('sendNotifToCircuitsAdmin: missing user._id', user);
} else {
await this.sendNotificationToUser(user._id, title, msg, '/', '', tag, []);
}
}
}
} catch (e) {
console.error('sendNotifToCircuitsAdmin', e);
}
}
},
sendNotifToAdmin(idapp, alsotelegram, title, msg, tag = '') {
try {
const { User } = require('../models/user');

View File

@@ -788,6 +788,7 @@ module.exports = {
longdescr: 1,
regulation: 1,
numMembers: 1,
link_group: 1,
totCircolante: 1,
totTransato: 1,
systemUserId: 1,