Modifiche ultimate: Grafica Navi , Prenota un Altro Viaggio.

This commit is contained in:
Paolo Arena
2020-05-13 01:32:27 +02:00
parent db12375935
commit 0565339bab
8 changed files with 142 additions and 72 deletions

View File

@@ -9,23 +9,19 @@ X - Aggiornare il testo sulla Placca (Data Inizio e Data Fine Doni)
// ++Todo: SISTEMARE:
X - Devo comparire come mio invitato se aggiungo un nuovo Viaggio.
X - Fare la lista delle Navi (in alto alla Lavagna) con il loro tragitto.
X- Nel campo note, metterci il Sogno
X - Se nave Temporanea, mettere Info.
X- Mettere flag se si vuole spostare l'Utente oppure Aggiungerlo...
- Mettere Sfondo immagine su ogni nave
- Mettere il tragitto anche sul BOT.
// ++Todo: TOGLIERE!
x- AGGIONARE AMBIENTE DI TEST
- ESEGUIRE LA CONVERSIONE 1 E 2 !
- CHECK getProssimiInLista
X - CONTROLLARE arrIdTelegramUsers
- TESTARE SOSTITUISCI UTENTE DA NAVE
- TESTARE AGGIUNGI VIAGGIO
x- Accorpare tutti i sotto account, in 1 unico !
x - Nel campo note, metterci l'username vecchio.
x - Sistemare le navi con num_tess === 4 : indorder=0 e 46 :
Prendere quelli del num_tess === 3 e SOSTITUISCI ind_order del num_Tess = 4 con ind_order di num_tess = 3
@@ -41,7 +37,6 @@ x - Sistemare le navi con num_tess === 4 : indorder=0 e 46 :
SOSTITUISCI:
- Mettere flag se si vuole spostare l'Utente oppure Aggiungerlo...
- Sistemare che in Edit Pagina, se è troppo grande, va oltre l'altezza della finestra.
@@ -55,7 +50,5 @@ SOSTITUISCI:
TRADURRE:
'Giorno in cui Inviare il DONO': 'Hai 4 giorni di tempo per inviare il tuo dono. Giorno di Chiusura:',
- Mettere le bandierine nella lista Zoom (su AYNI BOT).

View File

@@ -171,6 +171,12 @@ ListaIngressoSchema.statics.deleteUserInListaIngresso = async function (idapp, u
};
ListaIngressoSchema.statics.getNumDaImbarcare = async function (idapp) {
const ListaIngresso = this;
return await ListaIngresso.count({ idapp, added: false, deleted: false })
};
ListaIngressoSchema.statics.addUserInListaIngresso = async function (idapp, username, invitante_username, lang, addednowreal, nuovo, dateins, note, added, opt) {
const ListaIngresso = this;
@@ -212,8 +218,19 @@ ListaIngressoSchema.statics.addUserInListaIngresso = async function (idapp, user
if (addednowreal) {
if (!!ris) {
const nome = await User.getNameSurnameByUsername(idapp, username);
msgtext = '🔵 ' + nome + ' (' + username + ') ' + tools.gettranslate('ADDED_TOLISTAINGRESSO', lang);
await telegrambot.sendMsgTelegram(idapp, username, msgtext, true); // Anche a STAFF
const numimbarcare = await ListaIngresso.getNumDaImbarcare(idapp);
let msgtext = '🛳 ';
msgtext += nome + ' (' + username + ') ' + tools.gettranslate('ADDED_TOLISTAINGRESSO', lang);
await telegrambot.sendMsgTelegram(idapp, username, msgtext, false);
msgtext = '🛳 ';
if (nuovo) {
msgtext += '🌠 ';
}
const msgadd = msgtext + ' [' + numimbarcare + '] Imbarcare ' + nome + ' (' + username + ') ';
await telegrambot.sendMsgTelegramToTheManagers(idapp, msgadd, false); // Anche a STAFF
if (!!opt) {
if (!!opt.sendmsgtoinvitante) {
@@ -458,6 +475,22 @@ ListaIngressoSchema.statics.getProssimiInLista = async function (idapp, solonuov
return arrrec;
};
ListaIngressoSchema.statics.eliminaListeIngressoNascoste = async function (idapp) {
const ListaIngresso = this;
const { User } = require('./user');
const arrIngr = await ListaIngresso.find({ idapp, deleted: true });
for (const ingr of arrIngr) {
const user = await User.findOne({ idapp, old_order: ingr.ind_order });
if (!user) {
await ListaIngresso.deleteOne({ _id: ingr._id })
}
}
};
ListaIngressoSchema.statics.creaTessituraeConv = async function (idapp) {
const ListaIngresso = this;
@@ -501,6 +534,7 @@ ListaIngressoSchema.statics.creaTessituraeConv = async function (idapp) {
.then((mynave) => {
if (!!mynave) {
ingr.date_added = mynave.created;
ingr.deleted = false;
ingr.added = true;
}
return !!mynave;
@@ -580,7 +614,7 @@ ListaIngressoSchema.statics.creaTessituraeConv = async function (idapp) {
for (const myuser of arrIdTelegramUsers) {
// Crea 1 record listaingresso per ogni record aggiuntivo ! escludendo il primo!
if (teleg_id !== myuser.profile.teleg_id) {
if (teleg_id !== myuser.profile.teleg_id && myuser.old_order > 0) {
index = 0;
teleg_id = myuser.profile.teleg_id;
username = myuser.username;
@@ -605,7 +639,7 @@ ListaIngressoSchema.statics.creaTessituraeConv = async function (idapp) {
}
}, { new: false });
await Nave.updateMany({idapp, ind_order}, {
await Nave.updateMany({ idapp, ind_order }, {
$set: {
note: findlistaingresso.username,
}
@@ -666,17 +700,21 @@ ListaIngressoSchema.statics.getarray = async function (idapp, filtri, myobjField
};
ListaIngressoSchema.statics.getInvitati = async function (idapp, username, myobjField) {
ListaIngressoSchema.statics.getInvitati = async function (idapp, username, includemyself, myobjField) {
const ListaIngresso = this;
return ListaIngresso.getarray(idapp,
{
idapp,
deleted: false,
invitante_username: username,
username: { $ne: username },
},
myobjField);
let myq = {
idapp,
deleted: false,
invitante_username: username,
};
if (!includemyself) {
myq = { ...myq, username: { $ne: username } }
}
return ListaIngresso.getarray(idapp, myq, myobjField);
};
@@ -708,7 +746,7 @@ ListaIngressoSchema.statics.getnumInvitati = async function (idapp, username) {
idapp,
invitante_username: username,
deleted: false,
username: { $ne: username },
// username: { $ne: username },
}, { username: 1 });
const { User } = require('./user');
@@ -720,10 +758,10 @@ ListaIngressoSchema.statics.getnumInvitati = async function (idapp, username) {
$or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }]
});
for (const inv of arrinv) {
/*for (const inv of arrinv) {
if (!arrlistainv.find((rec) => rec.username === inv.username))
arrlistainv.push(inv);
}
}*/
if (!!arrlistainv)
return arrlistainv.length;
@@ -745,7 +783,7 @@ ListaIngressoSchema.statics.getnumInvitatiAttivi = async function (idapp, userna
let myquery = getQueryProj({
idapp,
invitante_username: username,
username: { $ne: username },
// username: { $ne: username },
deleted: false,
},
{ username: 1, ind_order: 1 },
@@ -764,10 +802,11 @@ ListaIngressoSchema.statics.getnumInvitatiAttivi = async function (idapp, userna
$and: User.getQueryQualified()
});
/*
for (const inv of arrinv) {
if (!arrlistainv.find((rec) => rec.username === inv.username))
arrlistainv.push(inv);
}
}*/
if (!!arrlistainv)
return arrlistainv.length;

View File

@@ -160,7 +160,7 @@ NaveSchema.statics.findById = function (idapp, id) {
} else {
return null;
}
}catch (e) {
} catch (e) {
console.error(e.message);
}
});
@@ -453,13 +453,13 @@ function getQueryProj(myfilter) {
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: [ { $arrayElemAt: [ "$mylista", 0 ] }, "$$ROOT" ] } }
$replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$mylista", 0] }, "$$ROOT"] } }
},
{
$lookup: {
from: "users",
as: "user",
let: {username: '$username' },
let: { username: '$username' },
pipeline: [
{
$match: {
@@ -723,13 +723,22 @@ NaveSchema.statics.getNavePos = async function (idapp, riga, col, solorecord, in
let recnavepersistente = await NavePersistente.findByRigaCol(idapp, riga, col, 0);
mystr = '🌈' + tools.get__('SOGNATORE', lang) + ': ';
for (let indsogn = 0; indsogn < recsognatori.length; indsogn++) {
mystr += 'A' + (3 - indsogn) + await getusertextbyrec(recsognatori[indsogn], '', '', riga, col, '') + tools.ACAPO;
mystr = '7⃣° 🌈 <strong>' + tools.get__('SOGNATORE', lang) + ': ';
mystr += '' + await getusertextbyrec(recsognatori[0], '', '', riga, col, '') + '</strong>' + tools.ACAPO;
for (let indsogn = 1; indsogn < recsognatori.length; indsogn++) {
if (indsogn === 1)
mystr += '6⃣°';
else
mystr += '5⃣°';
mystr += ' ' + tools.get__('INTERMEDIO', lang) + ': ';
mystr += await getusertextbyrec(recsognatori[indsogn], '', '', riga, col, '') + tools.ACAPO;
}
mystr += tools.ACAPO + '🌀 ' + tools.get__('MEDIATORE', lang) + ':' + await getusertextbyrec(recmediatore, '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
mystr += tools.ACAPO + '4⃣° 🌀 ' + tools.get__('MEDIATORE', lang) + ':' + await getusertextbyrec(recmediatore, '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
mystr += '3⃣° ' + tools.get__('INTERMEDIO', lang) +':' + tools.ACAPO;
for (let indterra = 1; indterra <= 2; indterra++) {
miacol = calcval(riga, col, 2) + (indterra);
miariga = riga + 1;
@@ -739,6 +748,7 @@ NaveSchema.statics.getNavePos = async function (idapp, riga, col, solorecord, in
mystr += tools.ACAPO;
mystr += '2⃣° ' + tools.get__('INTERMEDIO', lang) + ':' + tools.ACAPO;
for (let indaria = 1; indaria <= 4; indaria++) {
miacol = calcval(riga, col, 4) + (indaria);
miariga = riga + 2;
@@ -750,7 +760,7 @@ NaveSchema.statics.getNavePos = async function (idapp, riga, col, solorecord, in
let primofuoco = null;
mystr += '🎁 ' + tools.get__('DONATORI', lang) + ':' + tools.ACAPO;
mystr += '1⃣° 🎁 ' + tools.get__('DONATORI', lang) + ':' + tools.ACAPO;
let donitotali = 0;
let donifatti = 0;
@@ -794,7 +804,7 @@ NaveSchema.statics.getNavePos = async function (idapp, riga, col, solorecord, in
if (!!recnavepersistente.tutor_namesurname)
data += '👤 ' + tools.get__('Tutor che affianchèra il Mediatore', lang) + ': "' + recnavepersistente.tutor_namesurname + '"' + tools.ACAPO;
data += '💬 ' + printf(tools.get__('APERTURA_CHIUSURA_GIFT_CHAT', lang), tools.getstrDateLong(recnavepersistente.date_gift_chat_open, lang), tools.getstrDateLong(recnavepersistente.date_start, lang)) + tools.ACAPO;
data += '💬 ' + printf(tools.get__('APERTURA_CHIUSURA_GIFT_CHAT', lang), tools.getstrDateLong(recnavepersistente.date_gift_chat_open, lang), tools.getstrDateLong(recnavepersistente.date_start, lang)) + tools.ACAPO;
// data += '💬 ' + tools.get__('Giorno di Apertura GIFT CHAT', lang) + ': ' + tools.getstrDateLong(recnavepersistente.date_gift_chat_open, lang) + tools.ACAPO;
@@ -1398,7 +1408,7 @@ NaveSchema.statics.getnumNaviByUsername = async function (idapp, username) {
// Get array di ind_order
const arrind_order = await ListaIngresso.find({ idapp, username }).distinct('ind_order');
const arrrec = await Nave.find({ idapp, ind_order: arrind_order, num_tess: { $mod: [ 2 , 1] } }, {
const arrrec = await Nave.find({ idapp, ind_order: arrind_order, num_tess: { $mod: [2, 1] } }, {
riga: 1,
col: 1,
ind_order: 1
@@ -1409,7 +1419,7 @@ NaveSchema.statics.getnumNaviByUsername = async function (idapp, username) {
else
return 0;
}catch (e) {
} catch (e) {
console.error(e.message);
}
};
@@ -1435,7 +1445,6 @@ NaveSchema.statics.getSognatoreByRigaColMediatore = async function (idapp, navem
};
const Nave = mongoose.model('Nave', NaveSchema);
module.exports = { Nave };

View File

@@ -445,12 +445,12 @@ UserSchema.statics.getUserShortDataByUsername = async function (idapp, username)
return myrec
};
UserSchema.statics.getDownlineByUsername = async function (idapp, username) {
UserSchema.statics.getDownlineByUsername = async function (idapp, username, includemyself) {
if (username === undefined)
return null;
const arrrec = await ListaIngresso.getInvitati(idapp, username,
const arrrec = await ListaIngresso.getInvitati(idapp, username, includemyself,
{
index: 1,
lang: 1,
@@ -474,12 +474,18 @@ UserSchema.statics.getDownlineByUsername = async function (idapp, username) {
}
);
// Ottieni gli invitati che ancora non hanno un'imbarco
const arrinv = await User.find({
let myq = {
idapp,
aportador_solidario: username,
$or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }]
});
};
if (!includemyself) {
myq = { ...myq, username: {$ne: username} }
}
// Ottieni gli invitati che ancora non hanno un'imbarco
const arrinv = await User.find(myq);
for (const inv of arrinv) {
if (!arrrec.find((rec) => rec.username === inv.username))
@@ -1153,16 +1159,16 @@ UserSchema.statics.getDashboard = async function (idapp, aportador_solidario, us
if (!!arrap)
dashboard.numpeople_aportador = arrap.length;
dashboard.downline = await User.getDownlineByUsername(idapp, username);
dashboard.downline = await User.getDownlineByUsername(idapp, username, true);
// dashboard.downnotreg = await ExtraList.getDownlineNotRegisteredByNameSurname(idapp, dashboard.myself.name + ' ' + dashboard.myself.surname);
dashboard.downbyuser = {};
for (const down of dashboard.downline) {
dashboard.downbyuser[down.username] = await User.getDownlineByUsername(idapp, down.username);
dashboard.downbyuser[down.username] = await User.getDownlineByUsername(idapp, down.username, false);
for (const down2 of dashboard.downbyuser[down.username]) {
dashboard.downbyuser[down2.username] = await User.getDownlineByUsername(idapp, down2.username);
dashboard.downbyuser[down2.username] = await User.getDownlineByUsername(idapp, down2.username, false);
}
}

View File

@@ -543,6 +543,8 @@ router.patch('/callfunz', authenticate, async (req, res) => {
username_da_sostituire = mydata.data.username_da_sostituire;
let myuservecchio = await User.findOne({ idapp, username: username_da_sostituire });
mianavedasost = await Nave.findOne({ idapp, riga: mydata.data.riga, col: mydata.data.col });
if (!!mianavedasost) {
@@ -574,8 +576,9 @@ router.patch('/callfunz', authenticate, async (req, res) => {
}
}
if (!!myuser) {
if (!!myusernuovo) {
if (!!mianavedasost && mianavedasost.ind_order >= 0) {
// Metti campo 'delete': true su ListaIngresso
olduseringresso = await ListaIngresso.findOne({ idapp, ind_order: mianavedasost.ind_order });
if (!!olduseringresso) {
@@ -587,14 +590,14 @@ router.patch('/callfunz', authenticate, async (req, res) => {
}
}
if (!!myuser) {
if (!!myuservecchio) {
if (mydata.data.deleteUser && !!mianavedasost && mianavedasost.ind_order > 0) {
// Metti Deleted allo User
fieldsvalue = {
deleted: true
};
await User.findByIdAndUpdate(myuser.id, { $set: fieldsvalue });
await telegrambot.sendMsgTelegramToTheManagers(idapp, `L\'utente ${myuser.name} ${myuser.surname} (${myuser.username}) è stato cancellato (nascosto) perchè sostituito (da ${req.user.name} ${req.user.surname} )`);
await User.findByIdAndUpdate(myuservecchio.id, { $set: fieldsvalue });
await telegrambot.sendMsgTelegramToTheManagers(idapp, `L\'utente ${myuservecchio.name} ${myuservecchio.surname} (${myuservecchio.username}) è stato cancellato (nascosto) perchè sostituito (da ${req.user.name} ${req.user.surname} )`);
}
}
@@ -632,27 +635,31 @@ router.patch('/callfunz', authenticate, async (req, res) => {
if (!rec) {
return res.status(404).send();
} else {
// Send Notification to the BOT
let messaggio = tools.get__('SPOSTATO', req.user.lang);
if (!!navepersistente.date_start) {
messaggio += tools.ACAPO + tools.get__('DATA_PART_NAVE', req.user.lang) + tools.getstrDateLong(navepersistente.date_gift_chat_open) + tools.ACAPO;
}
if (!!navepersistente.link_chat) {
messaggio += tools.ACAPO + '👉🏻👉🏻 <strong><a href="' + navepersistente.link_chat + '">' + tools.get__('ENTRA_GIFT_CHAT', req.user.lang) + '</a></strong> ' + tools.ACAPO;
}
const myplacca = await Nave.getNavePos(idapp, navepersistente.riga, navepersistente.col);
messaggio += tools.ACAPO + myplacca;
const mymsg = mydata.notifBot.txt + ' ' + myusernuovo.name + ' ' + myusernuovo.surname + ' [da ' + dachi + ']' + tools.ACAPO + 'Inviato messaggio: ' + messaggio;
if (mydata.data.notifBot && !!navepersistente.link_chat) {
// Send Notification to the BOT
let messaggio = tools.get__('SPOSTATO', req.user.lang);
if (!!navepersistente.date_start) {
messaggio += tools.ACAPO + tools.get__('DATA_PART_NAVE', req.user.lang) + tools.getstrDateLong(navepersistente.date_gift_chat_open) + tools.ACAPO;
}
if (!!navepersistente.link_chat) {
messaggio += tools.ACAPO + '👉🏻👉🏻 <strong><a href="' + navepersistente.link_chat + '">' + tools.get__('ENTRA_GIFT_CHAT', req.user.lang) + '</a></strong> ' + tools.ACAPO;
}
const myplacca = await Nave.getNavePos(idapp, navepersistente.riga, navepersistente.col);
messaggio += tools.ACAPO + myplacca;
await telegrambot.sendMsgTelegram(idapp, myusernuovo.username, messaggio);
await telegrambot.sendMsgTelegramToTheManagers(idapp, mydata.notifBot.txt + ' ' + myusernuovo.name + ' ' + myusernuovo.surname + ' [da ' + dachi + ']' + tools.ACAPO + 'Inviato messaggio: ' + messaggio);
await telegrambot.sendMsgTelegramToTheManagers(idapp, mymsg);
await telegrambot.sendMsgTelegram(idapp, req.user.username, mydata.notifBot.txt);
await telegrambot.sendMsgTelegram(idapp, req.user.username, myplacca);
}
tools.writeManagersLog(mymsg);
// const nomecognomeprima = myuser.name + ' ' + myuser.surname + '(' + myuser.username + ')';
// const nomecognomenuovo = await User.getNameSurnameByUsername(idapp,);

View File

@@ -474,6 +474,9 @@ router.post('/dbop', authenticate, async (req, res) => {
} else if (mydata.dbop === 'creaTessituraeConv') {
ris = await ListaIngresso.creaTessituraeConv(idapp);
ris = { mystr };
} else if (mydata.dbop === 'eliminaListeIngressoNascoste') {
ris = await ListaIngresso.eliminaListeIngressoNascoste(idapp);
ris = { mystr };
} else if (mydata.dbop === 'convNaviTessinListaIngressoRec') {
let num = 0;

View File

@@ -500,7 +500,7 @@ module.exports = {
const usersmanagers = await User.getusersManagers(idapp);
if (usersmanagers) {
for (const rec of usersmanagers) {
await this.sendMsgTelegramByIdTelegram(idapp, rec.profile.teleg_id, emo.ROBOT_FACE + '[BOT-STAFF]' + emo.ADMIN + ': ' + text, undefined, undefined, true);
await this.sendMsgTelegramByIdTelegram(idapp, rec.profile.teleg_id, emo.ROBOT_FACE + ': ' + text, undefined, undefined, true);
await tools.snooze(200)
}
}
@@ -732,7 +732,7 @@ async function local_sendMsgTelegramToTheManagers(idapp, text, msg, username_bo)
if (username_bo)
username = username_bo;
text = emo.ROBOT_FACE + '[BOT-STAFF]' + emo.ADMIN + ': Da ' + msg.chat.first_name + ' ' + msg.chat.last_name + ' (' + username + '): \n' + text;
text = emo.ROBOT_FACE + ': Da ' + msg.chat.first_name + ' ' + msg.chat.last_name + ' (' + username + '): \n' + text;
tools.writeEventsLog(text);
if (usersmanagers) {
@@ -2145,7 +2145,14 @@ class Telegram {
async sendMsg(id, text, menu, form, msg_id, chat_id, ripr_menuPrec) {
return await this._inviaMsg(id, text, form, menu, msg_id, chat_id, ripr_menuPrec);
if (text.length > 4096) {
let text1 = text.slice(0, 4096);
let text2 = text.slice(4096, text.length);
await this._inviaMsg(id, text1, form, menu, msg_id, chat_id, ripr_menuPrec);
return await this._inviaMsg(id, text2, form, menu, msg_id, chat_id, ripr_menuPrec);
}else {
return await this._inviaMsg(id, text, form, menu, msg_id, chat_id, ripr_menuPrec);
}
}

View File

@@ -99,6 +99,7 @@ textlang = {
'ENTRA_GIFT_CHAT': 'Entra nella Gift Chat',
'DATA_PART_NAVE': 'data di Partenza della Nave:',
'SOGNATORE': 'SOGNATORE',
'INTERMEDIO': 'Intermedio',
'MEDIATORE': 'MEDIATORE',
'DONATORI': 'DONATORI',
'RITESSITURA': 'RITESSITURA',
@@ -167,6 +168,7 @@ textlang = {
'ENTRA_GIFT_CHAT': 'Vstopi v Darilni Klepet',
'DATA_PART_NAVE': 'Datum odhoda ladje:',
'SOGNATORE': 'Sanjača',
'INTERMEDIO': 'POTNIK',
'MEDIATORE': 'MEDIATOR',
'DONATORI': 'DONATOR',
'RITESSITURA': 'Avtomatičen Vpis',
@@ -231,6 +233,7 @@ textlang = {
'ENTRA_GIFT_CHAT': 'Entre en el Chat de Regalos',
'DATA_PART_NAVE': 'fecha de salida de la nave:',
'SOGNATORE': 'SOÑADOR',
'INTERMEDIO': 'Intermedio',
'MEDIATORE': 'MEDIATOR',
'DONATORI': 'DONANTES',
'RITESSITURA': 'RETEJIDO',
@@ -292,6 +295,7 @@ textlang = {
'ENTRA_GIFT_CHAT': 'Enter the ship\'s Gift Chat',
'DATA_PART_NAVE': 'date of departure of the ship:',
'SOGNATORE': 'DREAMER',
'INTERMEDIO': 'Intermediate',
'MEDIATORE': 'MEDIATOR',
'DONATORI': 'DONOR',
'RITESSITURA': 'RE-ENTER',
@@ -357,6 +361,7 @@ textlang = {
'ENTRA_GIFT_CHAT': 'Entrez dans le chat des cadeaux',
'DATA_PART_NAVE': 'la date de départ du navire:',
'SOGNATORE': 'Rêveur',
'INTERMEDIO': 'Intermediaire',
'MEDIATORE': 'Médiateur',
'DONATORI': 'DONATEUR',
'RITESSITURA': 'RETESSITURA',
@@ -422,6 +427,7 @@ textlang = {
'ENTRA_GIFT_CHAT': 'Entre no Gift Chat do navio',
'DATA_PART_NAVE': 'data de partida do navio:',
'SOGNATORE': 'SONHEIROS',
'INTERMEDIO': 'Intermediar',
'MEDIATORE': 'MEDIATOR',
'DONATORI': 'DONATORES',
'RITESSITURA': 'ENTRE EM',