- email Abilitazione Circuito RISO

This commit is contained in:
Surya Paolo
2025-11-28 18:53:43 +01:00
parent 331a5451b2
commit 997a7b8b98
15 changed files with 630 additions and 38 deletions

View File

@@ -56,6 +56,9 @@ const AccountSchema = new Schema({
fidoConcesso: {
type: Number,
},
username_admin_abilitante: {
type: String,
},
qta_maxConcessa: {
type: Number,
},
@@ -318,6 +321,7 @@ AccountSchema.statics.getAccountByUsernameAndCircuitId = async function (
saldo: 0,
saldo_pend: 0,
fidoConcesso: 0,
username_admin_abilitante: '',
qta_maxConcessa: 0,
totTransato: 0,
numtransactions: 0,
@@ -643,9 +647,10 @@ AccountSchema.statics.SetMinMaxPersonali = async function (idapp, fidoConcesso,
}
};
AccountSchema.statics.updateFido = async function (idapp, username, groupname, circuitId, fido) {
AccountSchema.statics.updateFido = async function (idapp, username, groupname, circuitId, fido, username_action) {
let paramstoupdate = {
fidoConcesso: fido,
username_admin_abilitante: username_action,
};
let risult = null;
if (groupname) risult = await Account.updateOne({ idapp, circuitId, groupname }, { $set: paramstoupdate });

View File

@@ -174,6 +174,7 @@ const CircuitSchema = new Schema({
{
username: { type: String },
date: { type: Date },
enable_to_receive_email: { type: Boolean },
},
],
photos: [
@@ -1331,7 +1332,7 @@ CircuitSchema.statics.SetDefMinMaxCollettivi = async function (idapp, valmin, va
}
};
CircuitSchema.statics.setFido = async function (idapp, username, circuitName, groupname) {
CircuitSchema.statics.setFido = async function (idapp, username, circuitName, groupname, username_action) {
try {
mycircuit = await Circuit.findOne({ idapp, name: circuitName }).lean();
if (mycircuit) {
@@ -1384,9 +1385,9 @@ CircuitSchema.statics.setFido = async function (idapp, username, circuitName, gr
variato = await Account.updateQtaMax(idapp, username, groupname, circuitId, qtamax);
}
const ris = await Account.updateFido(idapp, username, groupname, circuitId, fido);
const ris = await Account.updateFido(idapp, username, groupname, circuitId, fido, username_action);
if (ris) {
return { qta_maxConcessa: qtamax, fidoConcesso: fido, changed: variato || (ris && ris.modifiedCount > 0) };
return { qta_maxConcessa: qtamax, fidoConcesso: fido, username_admin_abilitante: username_action, changed: variato || (ris && ris.modifiedCount > 0) };
}
}
}
@@ -1882,6 +1883,15 @@ CircuitSchema.statics.getCircuitoItalia = async function (idapp) {
return circuit;
};
CircuitSchema.statics.isEnableToReceiveEmailByExtraRec = async function (idapp, recnotif) {
let ricevo = true;
if (recnotif.tag === 'setfido') {
// Controllo se l'utente ha scelto di ricevere l'email
}
return ricevo;
};
const Circuit = mongoose.model('Circuit', CircuitSchema);
Circuit.createIndexes()

View File

@@ -505,6 +505,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us
recnotif.paramsObj.circuitnameDest,
username_action
);
tag = 'setfido_admin_group';
} else {
newdescr = i18n.__(
'FIDO_IMPOSTATO_ADMINS_CIRCUIT',
@@ -513,6 +514,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us
recnotif.paramsObj.circuitnameDest,
username_action
);
tag = 'setfido_admin';
}
recnotif.openUrl = '/my/' + sender;
@@ -520,11 +522,12 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us
newdescr = i18n.__(
'FIDO_IMPOSTATO',
-recnotif.paramsObj.extrarec.fidoConcesso,
username_action,
recnotif.paramsObj.circuitnameDest
recnotif.paramsObj.extrarec.username_admin_abilitante,
recnotif.paramsObj.circuitnameDest,
);
tag = 'setfido';
}
tag = 'setfido';
} else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_ACCEPTED) {
if (recnotif.paramsObj.isAdmin) {
if (recnotif.extrarec.groupname) {
@@ -971,7 +974,7 @@ sendNotifSchema.statics.findAllNotifCoinsAllIdAndIdApp = function (idapp) {
});
};
sendNotifSchema.statics.saveAndSendNotif = async function (myrecnotif, req, res, user) {
sendNotifSchema.statics.saveAndSendNotif = async function (myrecnotif, req, res, user, paramsObj) {
const SendNotif = this;
let idapp = req.body.idapp;
@@ -1003,7 +1006,8 @@ sendNotifSchema.statics.saveAndSendNotif = async function (myrecnotif, req, res,
res,
idapp,
user ? user : req.user,
myrecread
myrecread,
paramsObj
);
else return false;
}
@@ -1018,7 +1022,8 @@ sendNotifSchema.statics.saveAndSendNotif = async function (myrecnotif, req, res,
res,
idapp,
user ? user : req.user,
myrecout
myrecout,
paramsObj
);
}
@@ -1312,7 +1317,7 @@ sendNotifSchema.statics.createNewNotifToSingleUser = async function (req, res, p
myrecnotif = this.getExtraParam(myrecnotif, paramsObj);
return await SendNotif.sendToSingleUserDest(myrecnotif, req, res, onlysave);
return await SendNotif.sendToSingleUserDest(myrecnotif, req, res, onlysave, paramsObj);
} catch (e) {
console.error('createNewNotification', e);
return null;
@@ -1547,7 +1552,7 @@ sendNotifSchema.statics.sendToTheDestinations = async function (myrecnotifpass,
}
};
sendNotifSchema.statics.sendToSingleUserDest = async function (myrecnotif, req, res, onlysave) {
sendNotifSchema.statics.sendToSingleUserDest = async function (myrecnotif, req, res, onlysave, paramsObj) {
const SendNotif = this;
try {
@@ -1559,9 +1564,9 @@ sendNotifSchema.statics.sendToSingleUserDest = async function (myrecnotif, req,
: myrecnotif.dest;
if (onlysave) {
return await SendNotif.saveNotif(myrecnotif, req);
return await SendNotif.saveNotif(myrecnotif, req, paramsObj);
} else {
return await SendNotif.saveAndSendNotif(myrecnotif, req, res, null);
return await SendNotif.saveAndSendNotif(myrecnotif, req, res, null, paramsObj);
}
} catch (e) {
console.error('sendToSingleUserDest', e);

View File

@@ -2547,8 +2547,7 @@ UserSchema.statics.getCircuitByTokenAndUsername = async function (idapp, usernam
'profile.mycircuits.token': token,
});
// Il circuito sarà in: circuit?.profile?.mycircuits?.[0]
const foundCircuit = user?.profile?.mycircuits?.[0];
const foundCircuit = user?.profile?.mycircuits?.find((c) => c.token === token);
if (foundCircuit) {
return { circuitname: foundCircuit.circuitname, user };
}
@@ -2557,6 +2556,7 @@ UserSchema.statics.getCircuitByTokenAndUsername = async function (idapp, usernam
}
return { circuitname: '', user: null };
};
UserSchema.statics.removeAllUsersFromMyGroups = async function (idapp, groupnameDest) {
return await User.updateMany({ idapp }, { $pull: { 'profile.mygroups': { groupname: { $in: [groupnameDest] } } } });
};
@@ -3458,11 +3458,12 @@ UserSchema.statics.setCircuitCmd = async function (
}
}
} else if (cmd === shared_consts.CIRCUITCMD.SETFIDO) {
ris = await Circuit.setFido(idapp, usernameOrig, circuitname, groupname);
ris = await Circuit.setFido(idapp, usernameOrig, circuitname, groupname, username_action);
if (ris && ris.fidoConcesso && ris.changed) {
if (extrarec) {
extrarec.fidoConcesso = ris.fidoConcesso;
extrarec.qta_maxConcessa = ris.qta_maxConcessa;
extrarec.username_admin_abilitante = ris.username_admin_abilitante;
}
// Elimina la richiesta:
@@ -3991,6 +3992,15 @@ UserSchema.statics.getInfoAskFriendByUsername = async function (idapp, username)
.then((rec) => (!!rec ? rec : null));
};
UserSchema.statics.isFidoConcesso = async function (idapp, username, nomeCircuito) {
try {
const myfido = await Circuit.getFido(idapp, username, nomeCircuito, '');
return !!myfido && myfido > 0 ? true : false;
} catch (e) {
return false;
}
};
UserSchema.statics.getAskedFriendsByUsername = async function (idapp, username) {
const whatToShow_Unknown = getWhatToShow_Unknown(idapp, username);
@@ -6946,6 +6956,16 @@ UserSchema.statics.createNewSubRecord = async function (idapp, req) {
// Nel tuo User schema, aggiungi questo metodo statico:
UserSchema.statics.isEnableToReceiveEmailByUsernameECmd = async function (idapp, username, cmd) {
let ricevo = true;
if (cmd === shared_consts.CIRCUITCMD.SETFIDO) {
// Controllo se l'utente ha scelto di ricevere l'email
}
return ricevo;
};
UserSchema.statics.getTokenByUsernameAndCircuitName = async function (idapp, username, circuitname) {
const User = this;

View File

@@ -206,7 +206,8 @@ router.post('/abcirc', async (req, res) => {
const username = body.username;
const groupname = body.groupname;
const username_action = body.username_action;
const cmd = body.cmd;
const cmd = parseInt(body.cmd);
try {
// Cerco il token se è ancora da ammettere
@@ -215,21 +216,24 @@ router.post('/abcirc', async (req, res) => {
.then(async (ris) => {
const { circuitname, user } = ris;
if (!user) {
return res.status(404).send();
return res.send({
code: server_constants.RIS_CODE_ERRORE,
msg: 'La richiesta di Abilitazione non è più presente su questo circuito !',
});
} else {
const lang = user.lang;
// console.log('user', user);
let nomeCircuito = circuitname;
let giaabilitato = false;
let giaabilitato = await User.isFidoConcesso(idapp, username, nomeCircuito);
let ret = null;
// user.verified_by_aportador = false;
if (giaabilitato) {
res.send({
return res.send({
code: server_constants.RIS_CODE_GIA_AMMESSO,
msg: 'Il membro ' + user.username + ' è stato già Abilitato!',
msg: 'Il membro <strong>' + user.username + '</strong> è già stato abilitato al circuito ' + nomeCircuito + '!',
circuitName: nomeCircuito,
});
} else {
@@ -244,11 +248,6 @@ router.post('/abcirc', async (req, res) => {
});
}
return res.send({
code: server_constants.RIS_CODE_GIA_AMMESSO,
msg: 'L\'utente è già stato abilitato al circuito ' + nomeCircuito + '!',
circuitName: nomeCircuito,
});
}
})
.catch((e) => {

View File

@@ -134,7 +134,7 @@ router.post('/send', authenticate, async (req, res) => {
params.usernameDest = req.user.username;
}
const ris = await globalTables.SendMsgToParam(idapp, params);
const ris = await globalTables.SendMsgToParam(idapp, params, null);
return res.send({
code: server_constants.RIS_CODE_OK,

View File

@@ -64,7 +64,7 @@ router.post('/', authenticate, (req, res) => {
myrecsend.msg = recmsg.message;
let myid = recmsg._id;
// ##Todo !! DA SISTEMARE !!!
return await SendNotif.saveAndSendNotif(myrecsend, req, res).then((out) => {
return await SendNotif.saveAndSendNotif(myrecsend, req, res, null).then((out) => {
if (out)
return res.send({ code: server_constants.RIS_CODE_OK, msg: '', id: myid });
else

View File

@@ -21,7 +21,7 @@ router.post('/', authenticate, async (req, res) => {
tools.mylog('crea SendNotif');
let myrecnotif = new SendNotif(body);
const recout = await SendNotif.saveAndSendNotif(myrecnotif, req, res);
const recout = await SendNotif.saveAndSendNotif(myrecnotif, req, res, null);
if (recout) {
return res.send({ code: server_constants.RIS_CODE_OK, notif: '', record: recout });
} else {

View File

@@ -507,14 +507,15 @@ module.exports = {
},
getLinkAbilitaCircuito: function (idapp, user, data) {
if (data.token_circuito_da_ammettere) {
const strlink = tools.getHostByIdApp(idapp) + `/abcirc/${data.cmd}/${data.token_circuito_da_ammettere}/${user.username}`;
const strlink = tools.getHostByIdApp(idapp) + `/abcirc/${data.cmd}/${data.token_circuito_da_ammettere}/${user.username}/${data.myusername}`;
return strlink;
}
return '';
},
getPathEmail(idapp, email_template) {
const RISO_TEMPLATES = ['reg_notifica_all_invitante', 'reg_email_benvenuto_ammesso', 'reg_chiedi_ammettere_all_invitante', 'circuit_chiedi_facilitatori_di_entrare'];
const RISO_TEMPLATES = ['reg_notifica_all_invitante', 'reg_email_benvenuto_ammesso', 'reg_chiedi_ammettere_all_invitante',
'circuit_chiedi_facilitatori_di_entrare', 'circuit_abilitato_al_fido_membro'];
if (idapp === '13') {
if (RISO_TEMPLATES.includes(email_template)) {
@@ -674,11 +675,40 @@ module.exports = {
console.error('Err sendEmail_Utente_Ammesso', e);
}
},
sendEmail_Utente_Abilitato_Circuito_FidoConcesso: async function (lang, emailto, user, idapp, dati) {
try {
let mylocalsconf = {
idapp,
dataemail: await this.getdataemail(idapp),
baseurl: tools.getHostByIdApp(idapp),
locale: lang,
nomeapp: tools.getNomeAppByIdApp(idapp),
strlinksito: tools.getHostByIdApp(idapp),
emailto: emailto,
usernameInvitante: dati.usernameInvitante,
linkProfiloAdmin: tools.getLinkUserProfile(idapp, dati.usernameInvitante),
user,
usernameMembro: user.username,
nomeTerritorio: dati.nomeTerritorio,
linkTelegramTerritorio: dati.link_group,
};
const quale_email_inviare = this.getPathEmail(idapp, 'circuit_abilitato_al_fido_membro') + '/' + lang;
const ris = await this.sendEmail_base(quale_email_inviare, emailto, mylocalsconf, '');
await telegrambot.notifyToTelegram(telegrambot.phase.AMMETTI_UTENTE, mylocalsconf);
return ris;
} catch (e) {
console.error('Err sendEmail_Utente_Ammesso', e);
}
},
sendEmail_Richiesta_Al_Facilitatore_Di_FarEntrare_AlCircuito: async function (lang, emailto, user, userInvitante, idapp, dati) {
try {
// dati.circuitId
// dati.groupname
dati.cmd = shared_consts.CallFunz.RICHIESTA_FIDO;
dati.cmd = shared_consts.CIRCUITCMD.SETFIDO;
const linkAbilitazione = this.getLinkAbilitaCircuito(idapp, user, dati);

View File

@@ -1047,6 +1047,7 @@ const MyTelegramBot = {
const data = {
token_circuito_da_ammettere: token,
nomeTerritorio: mycircuit.name,
myusername: userDest,
};
// if (usersmanagers) {
// for (const recadminCirc of usersmanagers) {

View File

@@ -1217,6 +1217,7 @@ module.exports = {
if (mycircuit && extrarec) {
extrarec.fido_scoperto_default = mycircuit.fido_scoperto_default;
extrarec.fido_scoperto_default_grp = mycircuit.fido_scoperto_default_grp;
extrarec.link_group = mycircuit.link_group;
}
if (cmd) {
@@ -1489,6 +1490,7 @@ module.exports = {
) {
const { Circuit } = require('../models/circuit');
const { SendNotif } = require('../models/sendnotif');
var { User } = require('../models/user');
const circuit = await Circuit.findOne(
{ idapp, name: circuitname },
@@ -1626,6 +1628,8 @@ module.exports = {
if (singleadmin.username) {
if (usernameOrig === singleadmin.username) giainviato = true;
extrarec.send_email = !!singleadmin.enable_to_receive_email ? singleadmin.enable_to_receive_email : true;
await this.sendNotifCircuitByUsername(
cmd,
idapp,
@@ -1649,6 +1653,8 @@ module.exports = {
}
if (!giainviato && cmd !== shared_consts.CIRCUITCMD.REQ) {
extrarec.send_email = await User.isEnableToReceiveEmailByUsernameECmd(idapp, usernameOrig, cmd);
// SEND TO THE USER DEST THE NOTIFICATION
ris = await this.sendNotifCircuitByUsername(
cmd,

View File

@@ -201,7 +201,7 @@ module.exports = {
return process.env.ENABLE_PUSHNOTIFICATION === '1';
},
async sendNotifCmd(typenotif, idnotif, res, idapp, user, recnotif, cmd) {
async sendNotifCmd(typenotif, idnotif, res, idapp, user, recnotif, paramsObj) {
// Controlla nelle impostazioni che tipo di Notifica visualizzare
const sendemail = require('../sendemail');
@@ -250,8 +250,12 @@ module.exports = {
invia = true;
}
if (recnotif.extrarec.send_email) {
params.typesend = params.typesend + shared_consts.TypeSend.EMAIL;
}
if (invia) {
ris = await this.SendMsgToParam(idapp, params);
ris = await this.SendMsgToParam(idapp, params, recnotif, paramsObj);
}
// Send Msg by EMAIL
@@ -270,11 +274,12 @@ module.exports = {
}
},
SendMsgToParam: async function (idapp, params) {
SendMsgToParam: async function (idapp, params, recnotif, paramsObj) {
try {
// console.log('SendMsgToParam', params.typesend, params.typemsg);
const { User } = require('../models/user');
const sendemail = require('../sendemail');
let textsent = '';
@@ -432,6 +437,21 @@ module.exports = {
} catch (e) { }
}
}
if (tools.isBitActive(params.typesend, shared_consts.TypeSend.EMAIL)) {
// Invia una Email
if (params.tag === 'setfido') {
const usertosend = await User.getUserByUsername(params.idapp, params.usernameDest);
if (paramsObj) {
}
const dati = {
usernameInvitante: paramsObj.extrarec.username_admin_abilitante,
nomeTerritorio: paramsObj.circuitnameDest,
link_group: paramsObj.extrarec.link_group,
};
await sendemail.sendEmail_Utente_Abilitato_Circuito_FidoConcesso(usertosend.lang, usertosend.email, usertosend, params.idapp, dati);
}
}
}
numrec++;
@@ -470,7 +490,7 @@ module.exports = {
params.sendreally = true;
params.typesend = shared_consts.TypeSend.PUSH_NOTIFICATION;
return await this.SendMsgToParam(idapp, params);
return await this.SendMsgToParam(idapp, params, null);
},
SearchString: async function (idapp, searchString) {

View File

@@ -1,6 +1,6 @@
module.exports = {
USER_ADMIN_CIRCUITS: ['surya1977', 'ElenaEspx'],
ADMIN_IDTELEGRAM_TEST_USERNAME: ['surya1977', 'SuryaArena', 'surya4'],
ADMIN_IDTELEGRAM_TEST_USERNAME: ['surya1977', 'SuryaArena', 'surya4', 'test1234'],
ADMIN_USER_SERVER: 'surya1977',
Accepted: {
CHECK_READ_GUIDELINES: 1,
@@ -604,6 +604,7 @@ module.exports = {
TypeSend: {
PUSH_NOTIFICATION: 1,
TELEGRAM: 2,
EMAIL: 4,
},
UsersNotif: {
NEW_ADV_CITY: 1,