- 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

@@ -0,0 +1,494 @@
doctype html
html(lang="it")
head
meta(charset="UTF-8")
meta(name="viewport" content="width=device-width, initial-scale=1.0")
style(type="text/css").
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
background-color: #f5f5f5;
padding: 20px;
line-height: 1.6;
}
.header-logo {
width: 120px;
height: auto;
margin-bottom: 16px;
display: block;
margin-left: auto;
margin-right: auto;
}
.email-container {
max-width: 600px;
margin: 0 auto;
background: white;
border-radius: 12px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.email-header {
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
color: white;
padding: 40px 24px;
text-align: center;
}
.email-header h1 {
margin: 0 0 8px 0;
font-size: 26px;
font-weight: 600;
line-height: 1.3;
}
.email-header .subtitle {
margin: 8px 0 0 0;
font-size: 17px;
opacity: 0.95;
font-style: italic;
}
.email-body {
padding: 32px 24px;
}
.intro-text {
font-size: 16px;
color: #333;
margin-bottom: 20px;
text-align: center;
line-height: 1.7;
}
.congrats-card {
background: linear-gradient(135deg, #e8f5e9 0%, #f1f8f4 100%);
border: 2px solid #7cb342;
border-radius: 12px;
padding: 24px;
margin: 20px 0;
text-align: center;
}
.congrats-card .congrats-icon {
font-size: 48px;
margin-bottom: 12px;
}
.congrats-card h3 {
font-size: 22px;
color: #558b2f;
margin-bottom: 12px;
font-weight: 700;
}
.congrats-card .territory-name {
font-size: 20px;
color: #7cb342;
font-weight: 600;
margin-top: 8px;
}
.info-section {
background: #ffffff;
border-radius: 8px;
padding: 20px;
margin: 24px 0;
}
.info-section h3 {
font-size: 18px;
color: #1a1a1a;
margin-bottom: 16px;
font-weight: 600;
display: flex;
align-items: center;
gap: 8px;
}
.info-section p {
font-size: 15px;
color: #555;
line-height: 1.7;
margin-bottom: 12px;
}
.info-section ul {
margin: 12px 0;
padding-left: 24px;
}
.info-section li {
font-size: 15px;
color: #555;
line-height: 1.7;
margin-bottom: 8px;
}
.highlight-box {
background: linear-gradient(135deg, #fff8dc 0%, #fef9f3 100%);
border-left: 4px solid #f0ad4e;
border-radius: 8px;
padding: 20px;
margin: 20px 0;
}
.highlight-box h4 {
font-size: 17px;
color: #f0ad4e;
margin-bottom: 12px;
font-weight: 600;
}
.highlight-box p {
font-size: 15px;
color: #555;
line-height: 1.7;
margin-bottom: 8px;
}
.example-box {
background: #e3f2fd;
border-radius: 8px;
padding: 20px;
margin: 20px 0;
}
.example-box h4 {
font-size: 16px;
color: #1976d2;
margin-bottom: 12px;
font-weight: 600;
}
.example-box .transaction {
background: white;
border-radius: 6px;
padding: 12px;
margin: 8px 0;
font-size: 14px;
}
.example-box .benefit {
background: #c8e6c9;
border-radius: 6px;
padding: 12px;
margin-top: 12px;
font-size: 14px;
color: #2e7d32;
}
.steps-box {
background: #f8f9fa;
border-radius: 8px;
padding: 20px;
margin: 20px 0;
}
.steps-box h4 {
font-size: 17px;
color: #1a1a1a;
margin-bottom: 16px;
font-weight: 600;
text-align: center;
}
.step-item {
display: flex;
align-items: flex-start;
margin-bottom: 16px;
padding: 12px;
background: white;
border-radius: 6px;
}
.step-number {
font-size: 24px;
font-weight: 700;
color: #7cb342;
min-width: 40px;
margin-right: 12px;
}
.step-content h5 {
font-size: 16px;
color: #1a1a1a;
margin-bottom: 6px;
font-weight: 600;
}
.step-content p {
font-size: 14px;
color: #555;
line-height: 1.6;
margin: 0;
}
.cta-section {
text-align: center;
margin: 32px 0;
padding: 24px 0;
border-top: 2px solid #e0e0e0;
border-bottom: 2px solid #e0e0e0;
}
.cta-title {
font-size: 18px;
font-weight: 600;
color: #1a1a1a;
margin-bottom: 20px;
}
.cta-button {
display: inline-block;
padding: 18px 56px;
font-size: 20px;
font-weight: 700;
color: white;
background: linear-gradient(135deg, #7cb342 0%, #558b2f 100%);
border-radius: 50px;
text-decoration: none;
box-shadow: 0 6px 20px rgba(124, 179, 66, 0.4);
transition: all 0.3s ease;
}
.button-icon {
font-size: 20px;
margin-right: 10px;
vertical-align: middle;
}
.community-box {
background: linear-gradient(135deg, #e8f5e9 0%, #f1f8f4 100%);
border-radius: 8px;
padding: 20px;
margin: 20px 0;
text-align: center;
}
.community-box h4 {
font-size: 17px;
color: #558b2f;
margin-bottom: 12px;
font-weight: 600;
}
.community-box p {
font-size: 15px;
color: #555;
line-height: 1.7;
margin-bottom: 12px;
}
.community-box a {
color: #2196f3;
text-decoration: none;
font-weight: 600;
}
.email-footer {
padding: 20px;
text-align: center;
background: #f8f9fa;
color: #777;
font-size: 13px;
}
.email-footer p {
margin: 4px 0;
}
.divider {
height: 1px;
background: linear-gradient(to right, transparent, #e0e0e0, transparent);
margin: 20px 0;
}
@media only screen and (max-width: 600px) {
body {
padding: 10px;
}
.email-header {
padding: 24px 16px;
}
.email-header h1 {
font-size: 22px;
}
.email-body {
padding: 20px 16px;
}
.congrats-card .congrats-icon {
font-size: 40px;
}
.congrats-card h3 {
font-size: 20px;
}
.cta-button {
padding: 16px 40px;
font-size: 18px;
width: 100%;
max-width: 300px;
}
.step-item {
flex-direction: column;
}
.step-number {
margin-bottom: 8px;
}
}
body
.email-container
//- Header
.email-header
img.header-logo(src=baseurl+'/images/logo.png' alt=nomeapp)
h1 🎉 Benvenuto nel #{nomeTerritorio}!
p.subtitle Sei stato abilitato con successo
//- Body
.email-body
//- Intro
.intro-text
| Ciao <strong>#{usernameMembro}</strong>,<br>
| complimenti! Sei stato abilitato al Circuito RIS del tuo territorio da #{usernameInvitante}.
linkProfiloAdmin
if linkProfiloAdmin
.divider(style="margin: 16px 0;")
p(style="text-align: center; margin: 16px 0;")
a.profile-button(href=linkProfiloAdmin target="_blank" style="display: inline-block; padding: 10px 24px; font-size: 15px; font-weight: 600; color: #7cb342; background: white; border: 2px solid #7cb342; border-radius: 20px; text-decoration: none; transition: all 0.3s ease;")
span(style="margin-right: 6px;") 👤
| Profilo #{usernameInvitante}
//- Congratulazioni
.congrats-card
.congrats-icon ✅
h3 Abilitazione Completata
p(style="font-size: 15px; color: #555; margin-top: 8px;")
| Ora puoi utilizzare i RIS per i tuoi scambi nella comunità
.territory-name 📍 #{nomeTerritorio}
//- Info comunità
.community-box
h4 💬 Unisciti alla Comunità Territoriale
p
| Entra nel gruppo Telegram di <strong>#{nomeTerritorio}</strong> per interagire con i partecipanti, rimanere aggiornato su eventi, mercatini e opportunità di scambio nella tua zona, e per poter inserire, anche tu, annunci di offro/cerco.
if linkTelegramTerritorio
a.telegram-button(href=linkTelegramTerritorio target="_blank" style="display: inline-block; margin-top: 16px; padding: 14px 32px; font-size: 17px; font-weight: 600; color: white; background: linear-gradient(135deg, #0088cc 0%, #006699 100%); border-radius: 25px; text-decoration: none; box-shadow: 0 4px 12px rgba(0, 136, 204, 0.3); transition: all 0.3s ease;")
span(style="font-size: 20px; margin-right: 8px; vertical-align: middle;") ✈️
| Unisciti al gruppo Telegram
//- Cos'è RIS
.info-section
h3
span 💰
| Cosa sono i RIS?
p
| <strong>RIS</strong> (Rete Italiana Scambio) è un sistema di <strong>credito comunitario</strong> basato sulla fiducia reciproca. Non sono soldi tradizionali, ma un'unità di misura che rappresenta il valore degli scambi all'interno della comunità RISO.
p
| <strong>Parità con l'Euro:</strong> 1 RIS = 1 Euro (solo come riferimento di valore, non come convertibilità)
//- Come funziona la fiducia
.highlight-box
h4 🤝 Come Funziona la "Fiducia Concessa"
p
| <strong>Parti da 0 RIS</strong> - Non devi avere un "saldo positivo" per iniziare a scambiare!
p
| <strong>Quando ricevi</strong> un bene o servizio pagando in RIS → il tuo saldo <strong>diventa positivo</strong>
p
| <strong>Quando offri</strong> un bene o servizio ricevendo RIS → il tuo saldo <strong>diventa negativo</strong>
p(style="margin-top: 12px; padding-top: 12px; border-top: 1px solid #f0ad4e;")
| 💡 <strong>Il saldo negativo non è un debito!</strong> È la fiducia che la comunità ti concede. Significa che hai ricevuto prima di aver dato, e la comunità si fida che restituirai nel tempo.
//- Esempio pratico
.example-box
h4 📖 Esempio Pratico
.transaction
| <strong>Situazione:</strong> Sei un grafico e vuoi comprare 100€ di verdure da un produttore locale
.transaction
| <strong>Transazione mista:</strong>
| <br>• Paghi <strong>80€ in Euro</strong>
| <br>• Paghi <strong>20 RIS</strong> (20% in RIS)
| <br><br>🔻 Il tuo saldo RIS passa da 0 a <strong>-20 RIS</strong>
.benefit
| <strong>✓ Beneficio:</strong> Hai ridotto del 20% l'uso degli Euro, sostenendo il produttore locale e rafforzando la comunità! Puoi iniziare con percentuali basse (5-10%) e aumentare man mano che acquisisci fiducia.
//- Come riequilibrare
.info-section
h3
span ⚖️
| Come Riequilibrare il Saldo
p
| Per riportare il tuo saldo verso lo zero (o in positivo), puoi:
ul
li <strong>Offrire beni o servizi</strong> ricevendo RIS in cambio
li <strong>Vendere prodotti</strong> accettando pagamenti parziali o totali in RIS
li <strong>Mettere annunci</strong> sulla piattaforma specificando che accetti RIS
li <strong>Partecipare ai mercatini</strong> locali della comunità RISO
//- Primi passi
.steps-box
h4 🚀 I Tuoi Primi Passi
.step-item
.step-number 1
.step-content
h5 Esplora la Piattaforma
p Familiarizza con gli annunci, i membri e le funzionalità del Circuito RIS
.step-item
.step-number 2
.step-content
h5 Crea il Tuo Primo Annuncio
p Pubblica cosa offri o cosa cerchi, specificando se accetti pagamenti in RIS
.step-item
.step-number 3
.step-content
h5 Inizia con Piccole Transazioni
p Comincia con percentuali basse di RIS (5-10%) per prendere confidenza e vedi cosa succede. Più siamo aperti noi e più l'Universo ci aiuta e sostiene e ci dona quello di cui abbiamo bisogno.
.step-item
.step-number 4
.step-content
h5 Partecipa alla Comunità
p Unisciti agli incontri locali e ai mercatini per conoscere altri membri. Se non ci sono membri che propongono incontri, puoi proporti anche tu!
//- CTA
.cta-section
.cta-title Inizia Subito a Usare i RIS!
a.cta-button(href=strlinksito target="_blank")
span.button-icon 🌾
| Vai alla Piattaforma
//- Supporto
.info-section
h3
span ❓
| Hai Domande?
p
| Se hai dubbi sul funzionamento dei RIS o sulla piattaforma, non esitare a:
ul
li Contattare il facilitatore del tuo territorio
li Chiedere nel gruppo Telegram locale
li Partecipare agli incontri di comunità
//- Footer
.email-footer
.divider
p Benvenuto nella Rete Italiana Scambio orizzontale - #{nomeTerritorio}
p(style="margin-top: 12px; font-size: 12px;")
| #{new Date().getFullYear()} #{nomeapp}

View File

@@ -0,0 +1 @@
=`Richiesta ingresso di ${usernameMembro} - ${nomeMembro} ${cognomeMembro} su ${nomeTerritorio} in ${nomeapp}`

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,