- email Abilitazione Circuito RISO
This commit is contained in:
494
emails/RISO/circuit_abilitato_al_fido_membro/it/html.pug
Executable file
494
emails/RISO/circuit_abilitato_al_fido_membro/it/html.pug
Executable 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}
|
||||
1
emails/RISO/circuit_abilitato_al_fido_membro/it/subject.pug
Executable file
1
emails/RISO/circuit_abilitato_al_fido_membro/it/subject.pug
Executable file
@@ -0,0 +1 @@
|
||||
=`Richiesta ingresso di ${usernameMembro} - ${nomeMembro} ${cognomeMembro} su ${nomeTerritorio} in ${nomeapp}`
|
||||
@@ -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 });
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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) => {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user