- Nella Lavagna, cliccando sul nome dell'invitato, compaiono le sue informazioni sugli step rimasti, in dettaglio.

- Ogni utente puo' cosi scegliere di regalare un proprio invitato, cliccando sull'invitato, scrivendo l'username del destinatario e premendo il bottone 'Regala Invitato'.
Al destinatario gli arriverà un messaggio sul Bot Telegram che indica che gli è stato regalato un'invitato.
This commit is contained in:
Paolo Arena
2020-02-02 04:06:32 +01:00
parent 512a8c14e2
commit e386d2550b
9 changed files with 150 additions and 32 deletions

View File

@@ -12,8 +12,6 @@ span Cellulare: 
strong #{user.profile.intcode_cell} #{user.profile.cell}<br>
span Nazionalità:&nbsp;
strong #{user.profile.nationality}<br>
span Username di chi lo ha Invitato:&nbsp;
strong #{user.aportador_solidario}<br>
p <br>Saluti
style(type="text/css").

View File

@@ -78,6 +78,9 @@ var ExtraListSchema = new mongoose.Schema({
note: {
type: String,
},
contacted: {
type: Boolean,
},
col_b: {
type: Number,
},
@@ -87,17 +90,17 @@ var ExtraListSchema = new mongoose.Schema({
registered: {
type: Boolean,
default: false
}
},
});
ExtraListSchema.methods.toJSON = function () {
const extralist = this;
const userObject = extralist.toObject();
return _.pick(userObject, ['_id', ...shared_consts.fieldsUserToChange()]);
};
// ExtraListSchema.methods.toJSON = function () {
// const extralist = this;
// const userObject = extralist.toObject();
//
// return _.pick(userObject, ['_id', ...shared_consts.fieldsUserToChange()]);
// };
//
ExtraListSchema.statics.findByUsername = function (idapp, username) {
const ExtraList = this;
@@ -174,16 +177,30 @@ ExtraListSchema.statics.getDownlineNotRegisteredByNameSurname = function (idapp,
'aportador_solidario_name_surname': nameandsurname,
registered: false,
}, {
username: 1,
ind_order: 1,
name: 1,
surname: 1,
verified_email: 1,
'profile.teleg_id': 1,
'profile.saw_zoom_presentation': 1,
made_gift: 1,
email: 1,
date_reg: 1,
img: 1
cell_complete: 1,
num_invitati: 1,
nationality: 1,
}, (err, arrrec) => {
return arrrec
});
};
ExtraListSchema.statics.getUserNotRegisteredByNameSurname = function (idapp, nameandsurname) {
const ExtraList = this;
return ExtraList.findOne({
name_complete: nameandsurname,
registered: false,
}, {
ind_order: 1,
name: 1,
surname: 1,
cell_complete: 1,
num_invitati: 1,
nationality: 1,
}, (err, arrrec) => {
return arrrec
});

View File

@@ -7,6 +7,7 @@ const _ = require('lodash');
const tools = require('../tools/general');
const { Settings } = require('../models/settings');
const { ExtraList } = require('../models/extralist');
const shared_consts = require('../tools/shared_nodejs');
const queryclass = require('../classes/queryclass');
@@ -328,6 +329,7 @@ UserSchema.statics.getUserShortDataByUsername = function (idapp, username) {
'idapp': idapp,
'username': username,
}, {
ind_order: 1,
username: 1,
name: 1,
surname: 1,
@@ -355,6 +357,8 @@ UserSchema.statics.getDownlineByUsername = function (idapp, username) {
'idapp': idapp,
'aportador_solidario': username,
}, {
aportador_solidario: 1,
ind_order: 1,
username: 1,
name: 1,
surname: 1,
@@ -700,7 +704,7 @@ UserSchema.statics.DuplicateAllRecords = async function (idapporig, idappdest) {
};
UserSchema.statics.getDashboard = async function (idapp, aportador_solidario, username) {
UserSchema.statics.getDashboard = async function (idapp, aportador_solidario, username, aportador_solidario_nome_completo) {
try {
// DATA: username, name, surname, email, intcode_cell, cell
@@ -709,14 +713,21 @@ UserSchema.statics.getDashboard = async function (idapp, aportador_solidario, us
downline: []
};
dashboard.myself = await User.getUserShortDataByUsername(idapp, username);
// Data of my Aportador
dashboard.aportador = await User.getUserShortDataByUsername(idapp, aportador_solidario);
if (dashboard.aportador === undefined ) {
dashboard.aportador = await ExtraList.getUserNotRegisteredByNameSurname(idapp, aportador_solidario_nome_completo);
}
// Data of my Downline
const arrap = await User.getDownlineByUsername(idapp, aportador_solidario);
dashboard.numpeople_aportador = arrap.length;
dashboard.downline = await User.getDownlineByUsername(idapp, username);
dashboard.downnotreg = await ExtraList.getDownlineNotRegisteredByNameSurname(idapp, dashboard.myself.name + ' ' + dashboard.myself.surname);
dashboard.downbyuser = {};
for (const down of dashboard.downline) {

View File

@@ -25,14 +25,23 @@ router.post('/', authenticate, async (req, res) => {
return res.status(404).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
}
let aportador_solidario = req.user.aportador_solidario;
let aportador_solidario_nome_completo = req.user.aportador_solidario_nome_completo;
// if (User.isAdmin(req.user.perm) || User.isManager(req.user.perm)) {
// const recuser = await User.findByUsername(idapp, username);
// if (recuser) {
// aportador_solidario_nome_completo = recuser.name + ' ' + recuser.surname;
// }
// }
if (username) {
aportador_solidario = await User.getAportadorSolidarioByUsername(idapp, username)
aportador_solidario = await User.getAportadorSolidarioByUsername(idapp, username);
aportador_solidario_nome_completo = await User.getNameSurnameByUsername(idapp, username);
} else {
username = req.user.username;
}
const dashboard = await User.getDashboard(idapp, aportador_solidario, username);
const dashboard = await User.getDashboard(idapp, aportador_solidario, username, aportador_solidario_nome_completo);
if (dashboard)
res.send({ dashboard });
else

View File

@@ -258,6 +258,7 @@ router.post('/gettable', authenticate, (req, res) => {
router.patch('/chval', authenticate, (req, res) => {
// const idapp = req.body.idapp;
const id = req.body.data.id;
const idapp = req.body.idapp;
const mydata = req.body.data;
const mytable = getTableByTableName(mydata.table);
@@ -276,7 +277,12 @@ router.patch('/chval', authenticate, (req, res) => {
if (!rec) {
return res.status(404).send();
} else {
if (mydata.notifBot) {
// Send Notification to the BOT
telegrambot.sendMsgTelegram(idapp, mydata.notifBot.un, mydata.notifBot.txt)
}
res.send({ code: server_constants.RIS_CODE_OK, msg: '' });
}
}).catch((e) => {
@@ -625,7 +631,8 @@ router.post('/upload/:dir', authenticate, (req, res) => {
// Move in the folder application !
tools.move(file.path, newname, (err) => {
console.log('err:', err);
if (err)
console.log('err:', err);
res.end();
});

View File

@@ -285,7 +285,7 @@ router.post('/login', (req, res) => {
await tools.snooze(3000);
const msg = "Tentativo di Login ERRATO [" + body.username + ' , ' + body.password + ']\n' + '[IP: ' + tools.getiPAddressUser(req) + ']';
tools.mylogshow(msg);
telegrambot.sendMsgTelegramToTheManagers(body.idapp, msg);
// telegrambot.sendMsgTelegramToTheManagers(body.idapp, msg);
res.status(404).send({ code: server_constants.RIS_CODE_LOGIN_ERR });
}
return user

View File

@@ -306,7 +306,7 @@ class Telegram {
let mystr = '';
if (rec.user) {
const dashboard = await User.getDashboard(this.idapp, rec.user.aportador_solidario, rec.user.username);
const dashboard = await User.getDashboard(this.idapp, rec.user.aportador_solidario, rec.user.username, rec.user.aportador_solidario_name_surname);
let numpersone = (dashboard.downline) ? dashboard.downline.length : 0;
mystr = "";
@@ -336,12 +336,24 @@ class Telegram {
if (numpersone > 0) {
let index = 1;
dashboard.downline.forEach((user) => {
mystr += emoji.get('star-struck') + ` ${index}°: ${user.username} (${user.name} ${user.surname})\n`;
mystr += emoji.get('star-struck') + ` ${index}°: ${user.name} ${user.surname} (${user.username})\n`;
index++;
});
}
if (dashboard.downnotreg) {
if (dashboard.downnotreg.length > 0) {
mystr += '\n' + emo.QUESTION_MARK + ' ' + tools.get__('NONREG', msg) + ':' + emo.QUESTION_MARK + '\n';
let index = 1;
dashboard.downnotreg.forEach((user) => {
mystr += ` - ${index}°: ${user.name} ${user.surname} (tel: ${user.cell_complete})\n`;
index++;
});
}
}
}
if (!!mystr)
await this.sendMsg(msg.chat.id, mystr);

View File

@@ -12,6 +12,8 @@ const Url = require('url-parse');
const { ObjectID } = require('mongodb');
const shared_consts = require('../tools/shared_nodejs');
const mongoose = require('mongoose');
const Subscription = mongoose.model('subscribers');
@@ -43,7 +45,7 @@ textlang = {
"Nuova Registrazione": "Nuova Registrazione",
"Effettuata una Nuova Registrazione": "Effettuata una Nuova Registrazione",
"partecipanti": "partecipanti",
'TESTO_ASSISTENZA': "Per entrare nel Sito AYNI:\nhttps://ayni.gifteconomy.app\n\nHai dimenticato la Password per accedere al sito?\nhttps://ayni.gifteconomy.app/requestresetpwd\n\nChat AYNI BOT (questa):\nhttps://t.me/notevoleaynibot\n\nChat AYNI-BiblioBacheca: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI Help & Support'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\nPotrete rientrare tutte le volte che ce ne sia necessità." ,
'TESTO_ASSISTENZA': "Per entrare nel Sito AYNI:\nhttps://ayni.gifteconomy.app\n\nHai dimenticato la Password per accedere al sito?\nhttps://ayni.gifteconomy.app/requestresetpwd\n\nChat AYNI BOT (questa):\nhttps://t.me/notevoleaynibot\n\nChat AYNI-BiblioBacheca: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI Help & Support'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\nPotrete rientrare tutte le volte che ce ne sia necessità.",
'BENVENUTO': "Benvenuto",
'EMAIL_VERIF': "Email Verificata",
'EMAIL_NON_VERIF': "Email Non Verificata\nleggi la tua casella email e trova **\"Confermare la Registrazione a Ayni\"**<br>e clicca sul bottone **\"Verifica Registrazione\"**",
@@ -52,6 +54,7 @@ textlang = {
'ZOOM_PARTECIPATO': 'Partecipazione ad almeno 1 Conferenza (Zoom)',
'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno',
'INVITATI': 'persone registrate che hai invitato',
'NONREG': 'Invitati non Registrati',
},
es: {
"L'Email è già stata Verificata": "L'Email è già stata Verificata",
@@ -59,7 +62,7 @@ textlang = {
"Effettuata una Nuova Registrazione": "Se ha realizado un nuevo registro",
"partecipanti": "participantes",
'TESTO_ASSISTENZA': "Per entrare nel Sito AYNI:\nhttps://ayni.gifteconomy.app\n\nHai dimenticato la Password per accedere al sito?\nhttps://ayni.gifteconomy.app/requestresetpwd\n\nChat AYNI BOT (questa):\nhttps://t.me/notevoleaynibot\n\nChat AYNI-BiblioBacheca: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI Help & Support'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\nPotrete rientrare tutte le volte che ce ne sia necessità." ,
'TESTO_ASSISTENZA': "Per entrare nel Sito AYNI:\nhttps://ayni.gifteconomy.app\n\nHai dimenticato la Password per accedere al sito?\nhttps://ayni.gifteconomy.app/requestresetpwd\n\nChat AYNI BOT (questa):\nhttps://t.me/notevoleaynibot\n\nChat AYNI-BiblioBacheca: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI Help & Support'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\nPotrete rientrare tutte le volte che ce ne sia necessità.",
'BENVENUTO': "Benvenuto",
'EMAIL_VERIF': "Email Verificata",
'EMAIL_NON_VERIF': "Email Non Verificata\nleggi la tua casella email e trova **\"Confermare la Registrazione a Ayni\"**<br>e clicca sul bottone **\"Verifica Registrazione\"**",
@@ -68,10 +71,11 @@ textlang = {
'ZOOM_PARTECIPATO': 'Partecipazione ad almeno 1 Conferenza (Zoom)',
'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno',
'INVITATI': 'persone registrate che hai invitato',
'NONREG': 'Invitati non Registrati',
},
us: {
"partecipanti": "participants",
'TESTO_ASSISTENZA': "Per entrare nel Sito AYNI:\nhttps://ayni.gifteconomy.app\n\nHai dimenticato la Password per accedere al sito?\nhttps://ayni.gifteconomy.app/requestresetpwd\n\nChat AYNI BOT (questa):\nhttps://t.me/notevoleaynibot\n\nChat AYNI-BiblioBacheca: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI Help & Support'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\nPotrete rientrare tutte le volte che ce ne sia necessità." ,
'TESTO_ASSISTENZA': "Per entrare nel Sito AYNI:\nhttps://ayni.gifteconomy.app\n\nHai dimenticato la Password per accedere al sito?\nhttps://ayni.gifteconomy.app/requestresetpwd\n\nChat AYNI BOT (questa):\nhttps://t.me/notevoleaynibot\n\nChat AYNI-BiblioBacheca: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI Help & Support'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Poni il tuo quesito, chiedi assistenza.\n2 - Terminata l\'assistenza, uscirete da quella Chat.\nPotrete rientrare tutte le volte che ce ne sia necessità.",
'BENVENUTO': "Benvenuto",
'EMAIL_VERIF': "Email Verificata",
'EMAIL_NON_VERIF': "Email Non Verificata\nleggi la tua casella email e trova **\"Confermare la Registrazione a Ayni\"**<br>e clicca sul bottone **\"Verifica Registrazione\"**",
@@ -80,6 +84,7 @@ textlang = {
'ZOOM_PARTECIPATO': 'Partecipazione ad almeno 1 Conferenza (Zoom)',
'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno',
'INVITATI': 'persone registrate che hai invitato',
'NONREG': 'Invitati non Registrati',
}
};
@@ -517,7 +522,7 @@ module.exports = {
let query = [];
if (params.filter && params.fieldsearch) {
let myregexp = {};
myregexp = new RegExp(params.filter.replace(' ', '|'), "ig");
myregexp = new RegExp(params.filter.trim().replace(' ', '|'), "ig");
const myfilters = [];
params.fieldsearch.forEach((field) => {
@@ -530,6 +535,54 @@ module.exports = {
{ $match: { $or: myfilters } },
]
}
let filtriadded = [];
// if (params.table === 'extralist') {
// if (params.filterand.includes(shared_consts.FILTER_EXTRALIST_DELETED))
// filtriadded.push({ deleted: true });
// else
// filtriadded.push({ deleted: { $exists: false } });
// }
if (params.filterand) {
if (params.filterand.includes(shared_consts.FILTER_EXTRALIST_NOT_REGISTERED))
filtriadded.push({ registered: false });
if (params.filterand.includes(shared_consts.FILTER_EXTRALIST_NOT_CONTACTED)) {
filtriadded.push({ contacted: { $exists: false } });
}
if (params.filterand.includes(shared_consts.FILTER_EXTRALIST_WITH_NOTE))
filtriadded.push({
'note': { $exists: true },
"$expr": { "$gt": [{ "$strLenCP": "$note" }, 1] }
});
if (params.filterand.includes(shared_consts.FILTER_USER_NO_ZOOM))
filtriadded.push({ 'profile.saw_zoom_presentation': false });
if (params.filterand.includes(shared_consts.FILTER_USER_NO_INVITANTE))
filtriadded.push({
aportador_solidario: { $exists: false }
});
if (params.filterand.includes(shared_consts.FILTER_USER_NO_TELEGRAM_ID))
filtriadded.push({ 'profile.teleg_id': { $lt: 1 } });
if (params.filterand.includes(shared_consts.FILTER_USER_CODICE_AUTH_TELEGRAM))
filtriadded.push({ 'profile.teleg_checkcode': { $gt: 1 } });
if (params.filterand.includes(shared_consts.FILTER_USER_NO_EMAIL_VERIFICATA))
filtriadded.push({ verified_email: false });
if (params.filterand.includes(shared_consts.FILTER_USER_NO_DREAM))
filtriadded.push({
'profile.my_dream': {
$exists: false
}
});
}
if (filtriadded.length > 0)
query.push({ $match: { $and: filtriadded } });
if (idapp > 0) {
query.push({ $match: { idapp } });
}
@@ -837,10 +890,10 @@ module.exports = {
return namesurname
},
getiPAddressUser (req) {
getiPAddressUser(req) {
try {
const striniziale = '::ffff:';
if (req.ip.indexOf(striniziale) >= 0){
if (req.ip.indexOf(striniziale) >= 0) {
return req.ip.substring(striniziale.length)
} else {
return req.ip; // Express

View File

@@ -1,5 +1,16 @@
module.exports = {
FILTER_EXTRALIST_NOT_REGISTERED: 1,
FILTER_EXTRALIST_NOT_CONTACTED: 2,
FILTER_EXTRALIST_WITH_NOTE: 4,
FILTER_USER_NO_ZOOM: 8,
FILTER_USER_NO_INVITANTE: 16,
FILTER_USER_NO_TELEGRAM_ID: 32,
FILTER_USER_CODICE_AUTH_TELEGRAM: 64,
FILTER_USER_NO_EMAIL_VERIFICATA: 128,
FILTER_USER_NO_DREAM: 256,
FILTER_EXTRALIST_DELETED: 512,
Permissions: {
Admin: 1,
Manager: 2,
@@ -12,7 +23,7 @@ module.exports = {
},
fieldsUserToChange() {
return ['_id', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'date_temp_reg', 'verified_email', 'ipaddr', 'lasttimeonline', 'profile', 'calcstat', 'news_on', 'aportador_solidario', 'made_gift']
return ['_id', 'username', 'email', 'name', 'surname', 'perm', 'date_reg', 'date_temp_reg', 'verified_email', 'ipaddr', 'lasttimeonline', 'profile', 'calcstat', 'news_on', 'aportador_solidario', 'made_gift', 'ind_order']
}
};