- fix zona provinciale

- email abilitazione circuito: invio email ad admin
- admin che abilita la fiducia cliccando sul bottone
This commit is contained in:
Surya Paolo
2025-11-27 23:51:48 +01:00
parent 514c2488cc
commit 331a5451b2
14 changed files with 652 additions and 5803 deletions

View File

@@ -1030,8 +1030,10 @@ CircuitSchema.statics.getCircuitByCircuitId = async function (circuitId) {
return await Circuit.findOne({ _id: circuitId });
};
// getListAdminsByCircuitPath - ritorna oggetti interi + USER_ADMIN_CIRCUITS
// getListAdminsByCircuitPath - ritorna oggetti interi senza duplicati
CircuitSchema.statics.getListAdminsByCircuitPath = async function (idapp, circuitPath) {
let arr = await Circuit.findOne(
let circuit = await Circuit.findOne(
{
idapp,
path: circuitPath,
@@ -1040,9 +1042,22 @@ CircuitSchema.statics.getListAdminsByCircuitPath = async function (idapp, circui
{ admins: 1 }
).lean();
let myarr = arr && arr.admins ? arr.admins : [];
let adminObjects = circuit && circuit.admins ? circuit.admins : [];
return [...myarr, ...shared_consts.USER_ADMIN_CIRCUITS];
// Aggiungi USER_ADMIN_CIRCUITS come oggetti
let systemAdmins = shared_consts.USER_ADMIN_CIRCUITS.map(username => ({
username,
date: null,
_id: null
}));
// Unisci e rimuovi duplicati per username
let allAdmins = [...adminObjects, ...systemAdmins];
let uniqueAdmins = allAdmins.filter((admin, index, self) =>
index === self.findIndex(a => a.username === admin.username)
);
return uniqueAdmins;
};
// Imposta a tutti i Conti Collettivi, i seguenti minimi e massimi
@@ -1177,7 +1192,7 @@ CircuitSchema.statics.createCircuitIfNotExist = async function (req, idapp, prov
date_created: new Date(),
admins: admins.map((username) => ({ username })),
askManagerToEnter: false,
sendEmailAfterAskingToEnter: false,
sendEmailAfterAskingToEnter: true,
circuitoIndipendente: false,
});

View File

@@ -465,6 +465,7 @@ const UserSchema = new mongoose.Schema({
_id: false,
circuitname: { type: String },
date: { type: Date },
token: { type: String },
},
],
last_circuitpath: {
@@ -2489,25 +2490,38 @@ UserSchema.statics.addCircuitToUser = async function (idapp, usernameOrig, circu
} else {
// prima di aggiungerlo controlla se esiste già !
let update = {
$addToSet: {
// Utilizziamo $addToSet invece di $push per garantire che l'elemento venga aggiunto solo se non esiste già
'profile.mycircuits': {
$each: [
{
circuitname,
date: new Date(),
},
],
},
const token = tools.getTokenRandom();
let update = null;
const updateparams = {
$set: {
'profile.mycircuits.$[elem].date': new Date(),
'profile.mycircuits.$[elem].token': token,
},
};
ris = await User.updateOne(
{ idapp, username: usernameOrig, 'profile.mycircuits': { $not: { $elemMatch: { circuitname } } } },
update
let ris = await User.updateOne(
{ idapp, username: usernameOrig, 'profile.mycircuits.circuitname': circuitname },
updateparams,
{ arrayFilters: [{ 'elem.circuitname': circuitname }] }
);
// Se non ha modificato nulla (nModified === 0), significa che non esiste, quindi lo aggiungiamo
if (ris.modifiedCount === 0) {
const insertUpdate = {
$push: {
'profile.mycircuits': {
circuitname,
date: new Date(),
token,
},
},
};
ris = await User.updateOne({ idapp, username: usernameOrig }, insertUpdate);
}
if (confido) {
// Elimina la richiesta:
update = { $pull: { req_users: { username: { $in: [usernameOrig] } } } };
@@ -2525,6 +2539,24 @@ UserSchema.statics.addCircuitToUser = async function (idapp, usernameOrig, circu
};
// Rimuovo il Gruppo per Tutti gli Utenti
UserSchema.statics.getCircuitByTokenAndUsername = async function (idapp, username, token) {
try {
const user = await User.findOne({
idapp,
username,
'profile.mycircuits.token': token,
});
// Il circuito sarà in: circuit?.profile?.mycircuits?.[0]
const foundCircuit = user?.profile?.mycircuits?.[0];
if (foundCircuit) {
return { circuitname: foundCircuit.circuitname, user };
}
} catch (e) {
return { circuitname: '', user: null };
}
return { circuitname: '', user: null };
};
UserSchema.statics.removeAllUsersFromMyGroups = async function (idapp, groupnameDest) {
return await User.updateMany({ idapp }, { $pull: { 'profile.mygroups': { groupname: { $in: [groupnameDest] } } } });
};
@@ -2630,7 +2662,7 @@ UserSchema.statics.setFriendsCmd = async function (req, idapp, usernameOrig, use
);
msgDest = i18n.__({ phrase: '✅ Sei stato Ammesso correttamente da %s!', locale: lang }, usernameOrig);
msgAdmin = i18n.__(
{ phrase: '✅ %s è stato Ammesso correttamente (da %s)!', locale: userDest.lang },
{ phrase: '✅ %s è stato Ammesso/a correttamente (da %s) tramite Email!', locale: userDest.lang },
userDest.username,
usernameOrig
);
@@ -6912,6 +6944,25 @@ UserSchema.statics.createNewSubRecord = async function (idapp, req) {
return rec;
};
// Nel tuo User schema, aggiungi questo metodo statico:
UserSchema.statics.getTokenByUsernameAndCircuitName = async function (idapp, username, circuitname) {
const User = this;
const user = await User.findOne(
{
idapp,
username,
'profile.mycircuits.circuitname': circuitname,
},
{
'profile.mycircuits.$': 1,
}
);
return user?.profile?.mycircuits?.[0]?.token || null;
};
const User = mongoose.model('User', UserSchema);
class Hero {