- Sistemato problema del Circuito ITALIA, quando veniva fatta la richiesta di entrare, ancora non si era entrati nel circuito territoriale.

- Ora pertanto viene inviata la richiesta agli admin solo dopo che l'utente viene abilitato al Circuito provinciale.
This commit is contained in:
Surya Paolo
2025-10-11 18:36:11 +02:00
parent ebfd80da76
commit 3f7eda05cf
9 changed files with 459 additions and 257 deletions

View File

@@ -539,6 +539,7 @@ const UserSchema = new mongoose.Schema({
},
],
version: { type: Number },
insert_circuito_ita: { type: Boolean },
},
});
@@ -2850,31 +2851,45 @@ UserSchema.statics.sendCmd = async function (req, idapp, usernameOrig, usernameD
try {
if (cmd === shared_consts.CallFunz.ENTRA_RIS_ITALIA) {
mycircuitOrig = await Circuit.getCircuitMyProvince(idapp, usernameOrig);
descr = i18n.__(
{ phrase: 'SENDMSG_ENTRA_IN_RISO_ITALIA', locale: langdest },
usernameDest,
usernameOrig,
mycircuitOrig
);
msgtelegram = descr;
openUrl = '/circuit/ris_italia';
bottone = i18n.__({ phrase: 'CIRCUIT_OPEN_RISITALIA', locale: langdest });
tag = 'risitalia';
let enableOnlyIf1CircuitExist = false;
let foundIfAlreadyCircuit = false;
send_notif = true;
send_msgTelegramBot = true;
if (mycircuitOrig) {
// Fai la richiesta solo se appartieni già al tuo Circuito Territoriale
foundIfAlreadyCircuit = await User.ifAlreadyInCircuit(idapp, usernameOrig, mycircuitOrig);
}
keyb = cl.getInlineKeyboard(langdest, [
{
text: bottone,
url: tools.getHostByIdApp(idapp) + openUrl,
// callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP +
// groupid,
},
]);
if (!foundIfAlreadyCircuit) {
// Se non sono dentro ad un circuito Provinciale, setto come flag la possibilità di inserire il Circuito ITA
await User.setInseriscimiAncheInCircuitoITA(idapp, usernameOrig);
} else {
descr = i18n.__(
{ phrase: 'SENDMSG_ENTRA_IN_RISO_ITALIA', locale: langdest },
usernameDest,
usernameOrig,
mycircuitOrig
);
msgtelegram = descr;
popupOnApp = 'Messaggio inviato al destinatario';
openUrl = '/circuit/ris_italia';
bottone = i18n.__({ phrase: 'CIRCUIT_OPEN_RISITALIA', locale: langdest });
tag = 'risitalia';
send_notif = true;
send_msgTelegramBot = true;
keyb = cl.getInlineKeyboard(langdest, [
{
text: bottone,
url: tools.getHostByIdApp(idapp) + openUrl,
// callback_data: InlineConferma.RISPOSTA_SI + myfunc + tools.SEP + myuser.username + tools.SEP + '' + tools.SEP + '' + tools.SEP +
// groupid,
},
]);
popupOnApp = 'Messaggio inviato al destinatario';
}
}
if (send_notif) {
@@ -2930,6 +2945,29 @@ UserSchema.statics.ifAlreadyInCircuit = async function (idapp, usernameOrig, cir
}).lean();
};
UserSchema.statics.ifAlreadyInCircuitItalia = async function (idapp, usernameOrig) {
try {
const circuitoItalia = await Circuit.getCircuitoItalia(idapp);
if (circuitoItalia) {
const circuitname = circuitoItalia.name;
// Controllo se è stato già inserito in Circuito Italia
return await User.findOne({
idapp,
username: usernameOrig,
'profile.mycircuits': {
$elemMatch: { circuitname: { $eq: circuitname } },
},
}).lean();
}
return false;
} catch (e) {
console.error('ifAlreadyInCircuitItalia', e);
}
};
//** Get true if in 'profile.mycircuits' exist at least one circuit */
UserSchema.statics.ExistAtLeastOneCircuit = async function (idapp, username) {
// Controllo se è stato più inserito
@@ -3213,130 +3251,164 @@ UserSchema.statics.setCircuitCmd = async function (
username_action,
extrarec
);
// Se gli è stato abilitato il Fido ad un Circuito Provinciale,
// se non è ancora dentro al Circuito Italia
const giainItalia = await User.ifAlreadyInCircuitItalia(idapp, usernameOrig);
if (!giainItalia) {
// allora ora attiva la richiesta per il circuito Italia
const inseriscimiInCircuitoItalia = await User.getInseriscimiAncheInCircuitoITA(idapp, usernameOrig);
const circuitItalia = await Circuit.getCircuitoItalia(idapp);
if (inseriscimiInCircuitoItalia) {
const mycmd = shared_consts.CIRCUITCMD.REQ;
await User.setCircuitCmd(idapp, usernameOrig, circuitItalia.name, mycmd, true, usernameOrig, {
groupname: groupname,
abilitaveramente: true,
});
}
}
outres.result = await Circuit.getInfoCircuitByName(idapp, circuitname);
}
} else {
// errore !?
}
} else if (cmd === shared_consts.CIRCUITCMD.REQ) {
if (groupname) {
// Aggiungo la richiesta di Gruppo a me
const foundIfAlreadyAskCircuit = await Circuit.findOne({
idapp,
name: circuitname,
req_groups: {
$elemMatch: { groupname: { $eq: groupname } },
},
});
let abilitareq = true;
if (value) {
ris = await this.addCircuitToUser(idapp, usernameOrig, circuitname, false, groupname, '');
const thiscircuit = await Circuit.findOne({
idapp,
name: circuitname,
});
if (!foundIfAlreadyAskCircuit) {
update = {
$push: {
req_groups: {
groupname,
date: new Date(),
// se è il circuito Italia e !extrarec.abilitoveramente allora
if (thiscircuit.isCircItalia && !extrarec.abilitaveramente) {
abilitareq = false;
}
// abilito il set
if (abilitareq) {
if (groupname) {
// Aggiungo la richiesta di Gruppo a me
const foundIfAlreadyAskCircuit = await Circuit.findOne({
idapp,
name: circuitname,
req_groups: {
$elemMatch: { groupname: { $eq: groupname } },
},
});
if (value) {
ris = await this.addCircuitToUser(idapp, usernameOrig, circuitname, false, groupname, '');
if (!foundIfAlreadyAskCircuit) {
update = {
$push: {
req_groups: {
groupname,
date: new Date(),
},
},
},
};
ris = await Circuit.updateOne({ idapp, name: circuitname }, update);
}
if (ris) {
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(
idapp,
usernameOrig,
circuitname,
cmd,
true,
true,
username_action,
extrarec
);
};
ris = await Circuit.updateOne({ idapp, name: circuitname }, update);
}
if (ris) {
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(
idapp,
usernameOrig,
circuitname,
cmd,
true,
true,
username_action,
extrarec
);
}
} else {
if (foundIfAlreadyAskCircuit) {
outres.result = await MyGroup.removeCircuitFromGroup(idapp, groupname, circuitname); // Rimuovo il Circuito dal gruppo
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(
idapp,
usernameOrig,
circuitname,
cmd,
false,
true,
username_action,
extrarec
);
}
}
} else {
if (foundIfAlreadyAskCircuit) {
outres.result = await MyGroup.removeCircuitFromGroup(idapp, groupname, circuitname); // Rimuovo il Circuito dal gruppo
// Aggiungo la richiesta di Circuito a me
const foundIfAlreadyAskCircuit = await Circuit.findOne({
idapp,
name: circuitname,
req_users: {
$elemMatch: { username: { $eq: usernameOrig } },
},
});
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(
idapp,
usernameOrig,
circuitname,
cmd,
false,
true,
username_action,
extrarec
);
if (value) {
if (!thiscircuit.askManagerToEnter) {
// Aggiungi intanto l'utente al Circuito (senza fido)
ris = await this.addCircuitToUser(idapp, usernameOrig, circuitname, false);
}
if (!foundIfAlreadyAskCircuit) {
update = {
$push: {
req_users: {
username: usernameOrig,
date: new Date(),
},
},
};
// Aggiungi la richiesta per ottenere il fido (o per entrare nel circuito)
ris = await Circuit.updateOne({ idapp, name: circuitname }, update);
}
if (ris) {
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(
idapp,
usernameOrig,
circuitname,
cmd,
true,
true,
username_action,
extrarec
);
}
} else {
if (foundIfAlreadyAskCircuit) {
outres.result = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo il Gruppo da me
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(
idapp,
usernameOrig,
circuitname,
cmd,
false,
true,
username_action,
extrarec
);
}
}
}
} else {
// Aggiungo la richiesta di Circuito a me
const foundIfAlreadyAskCircuit = await Circuit.findOne({
idapp,
name: circuitname,
req_users: {
$elemMatch: { username: { $eq: usernameOrig } },
},
});
const thiscircuit = await Circuit.findOne({
idapp,
name: circuitname,
});
if (value) {
if (!thiscircuit.askManagerToEnter) {
// Aggiungi intanto l'utente al Circuito (senza fido)
ris = await this.addCircuitToUser(idapp, usernameOrig, circuitname, false);
}
if (!foundIfAlreadyAskCircuit) {
update = {
$push: {
req_users: {
username: usernameOrig,
date: new Date(),
},
},
};
// Aggiungi la richiesta per ottenere il fido (o per entrare nel circuito)
ris = await Circuit.updateOne({ idapp, name: circuitname }, update);
}
if (ris) {
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(
idapp,
usernameOrig,
circuitname,
cmd,
true,
true,
username_action,
extrarec
);
}
} else {
if (foundIfAlreadyAskCircuit) {
outres.result = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo il Gruppo da me
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(
idapp,
usernameOrig,
circuitname,
cmd,
false,
true,
username_action,
extrarec
);
}
}
// imposta che quando lo attiveranno al circuito territoriale, allora verrà fatta anche la richiesta per il circuito Italia
await User.setInseriscimiAncheInCircuitoITA(idapp, usernameOrig);
ris = true;
}
} else if (cmd === shared_consts.CIRCUITCMD.REMOVE_FROM_MYLIST) {
if (groupname) {
@@ -4074,6 +4146,44 @@ UserSchema.statics.NonVoglioImbarcarmi = async function (idapp, username) {
});
};
UserSchema.statics.getInseriscimiAncheInCircuitoITA = async function (idapp, username) {
const User = this;
return await User.findOne(
{
idapp,
username,
$or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }],
},
{ 'profile.insert_circuito_ita': 1 }
)
.lean()
.then((rec) => {
return !!rec ? rec.profile.insert_circuito_ita : null;
})
.catch((e) => {
console.error('getInseriscimiAncheInCircuitoITA', e);
});
};
UserSchema.statics.setInseriscimiAncheInCircuitoITA = async function (idapp, username) {
const User = this;
const fields_to_update = {
'profile.insert_circuito_ita': true,
};
return await User.findOneAndUpdate(
{
idapp,
username,
},
{ $set: fields_to_update },
{ new: false }
).then((record) => {
return !!record;
});
};
UserSchema.statics.SetTelegramIdSuccess = async function (idapp, id, teleg_id) {
const User = this;