- Requirements
- Send Msg to Passeggeri
This commit is contained in:
Paolo Arena
2020-03-10 21:44:14 +01:00
parent 26715cda44
commit fbc85ce06a
37 changed files with 2392 additions and 673 deletions

View File

@@ -6,7 +6,7 @@ span Forgot your Password? : 
strong <a href=#{forgetpwd} target="_blank">Find it here</a><br> strong <a href=#{forgetpwd} target="_blank">Find it here</a><br>
span Email:&nbsp; span Email:&nbsp;
strong #{emailto}<br> strong #{emailto}<br>
p To confirm the registration click on the button: p To confirm the registration click on the button, or click here #{strlinkreg}:
div.divbtn <a href=#{strlinkreg} target="_blank"> div.divbtn <a href=#{strlinkreg} target="_blank">
button.btn.btn-lg Verify Registration</a> button.btn.btn-lg Verify Registration</a>

View File

@@ -6,7 +6,7 @@ span hai dimenticato la Password? :&nbsp;
strong <a href=#{forgetpwd} target="_blank">Trovala qui</a><br> strong <a href=#{forgetpwd} target="_blank">Trovala qui</a><br>
span Email:&nbsp; span Email:&nbsp;
strong #{emailto}<br> strong #{emailto}<br>
p Per confermare la registrazione clicca sul bottone: p Per confermare la registrazione clicca sul bottone, oppure qui: #{strlinkreg}:
div.divbtn <a href=#{strlinkreg} target="_blank"> div.divbtn <a href=#{strlinkreg} target="_blank">
button.btn.btn-lg Verifica Registrazione</a> button.btn.btn-lg Verifica Registrazione</a>

View File

@@ -6,7 +6,7 @@ span ¿Olvidaste tu contraseña? :&nbsp;
strong <a href=#{forgetpwd} target="_blank">Encuéntrelo aquí</a><br> strong <a href=#{forgetpwd} target="_blank">Encuéntrelo aquí</a><br>
span Email:&nbsp; span Email:&nbsp;
strong #{emailto}<br> strong #{emailto}<br>
p Para confirmar el registro haz clic en el botón: p Para confirmar el registro haz clic en el botón, o aquì #{strlinkreg}:
div.divbtn <a href=#{strlinkreg} target="_blank"> div.divbtn <a href=#{strlinkreg} target="_blank">
button.btn.btn-lg Verificar registro</a> button.btn.btn-lg Verificar registro</a>

View File

@@ -6,7 +6,7 @@ span avez-vous oublié votre mot de passe ? :&nbsp;
strong <a href=#{forgetpwd} target="_blank">Essayez ici</a><br> strong <a href=#{forgetpwd} target="_blank">Essayez ici</a><br>
span Email:&nbsp; span Email:&nbsp;
strong #{emailto}<br> strong #{emailto}<br>
p Cliquez sur le bouton pour confirmer votre inscription : p Cliquez sur le bouton pour confirmer votre inscription ou cliquez ici #{strlinkreg}:
div.divbtn <a href=#{strlinkreg} target="_blank"> div.divbtn <a href=#{strlinkreg} target="_blank">
button.btn.btn-lg Vérifier l'enregistrement</a> button.btn.btn-lg Vérifier l'enregistrement</a>

View File

@@ -6,7 +6,7 @@ span hai dimenticato la Password? :&nbsp;
strong <a href=#{forgetpwd} target="_blank">Trovala qui</a><br> strong <a href=#{forgetpwd} target="_blank">Trovala qui</a><br>
span Email:&nbsp; span Email:&nbsp;
strong #{emailto}<br> strong #{emailto}<br>
p Per confermare la registrazione clicca sul bottone: p Per confermare la registrazione clicca sul bottone oppure clicca qui #{strlinkreg}:
div.divbtn <a href=#{strlinkreg} target="_blank"> div.divbtn <a href=#{strlinkreg} target="_blank">
button.btn.btn-lg Verifica Registrazione</a> button.btn.btn-lg Verifica Registrazione</a>

View File

@@ -6,7 +6,7 @@ span você esqueceu sua senha? :&nbsp;
strong <a href=##{forgetpwd} target="_blank">Encontre-o aqui</a>>br> strong <a href=##{forgetpwd} target="_blank">Encontre-o aqui</a>>br>
span Email:&nbsp; span Email:&nbsp;
strong #{{emailto}<br> strong #{{emailto}<br>
p Clique no botão para confirmar o seu registo: p Clique no botão para confirmar o seu registo ou clique aqui #{strlinkreg}:
div.divbtn <a href=#{strlinkreg} target="_blank"> div.divbtn <a href=#{strlinkreg} target="_blank">
button.btn.btn-lg Verificação de registro</a> button.btn.btn-lg Verificação de registro</a>

View File

@@ -6,7 +6,7 @@ span ste pozabili geslo? :&nbsp;
strong <a href=#{forgetpwd} target="_blank">Poiščite tukaj</a><br> strong <a href=#{forgetpwd} target="_blank">Poiščite tukaj</a><br>
span Email:&nbsp; span Email:&nbsp;
strong #{emailto}<br> strong #{emailto}<br>
p Za potrditev registracije kliknite na gumb: p Za potrditev registracije kliknite na gumb ali kliknite tukaj: #{strlinkreg}
div.divbtn <a href=#{strlinkreg} target="_blank"> div.divbtn <a href=#{strlinkreg} target="_blank">
button.btn.btn-lg Preveri registracijo</a> button.btn.btn-lg Preveri registracijo</a>

View File

@@ -33,7 +33,7 @@
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"lodash": "^4.17.15", "lodash": "^4.17.15",
"mongodb": "^3.4.1", "mongodb": "^3.4.1",
"mongoose": "^5.8.4", "mongoose": "^5.9.3",
"mysql": "^2.17.1", "mysql": "^2.17.1",
"node-cron": "^2.0.3", "node-cron": "^2.0.3",
"node-emoji": "^1.10.0", "node-emoji": "^1.10.0",

View File

@@ -34,6 +34,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '2', idapp: '2',
@@ -49,6 +50,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '3', idapp: '3',
@@ -64,6 +66,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '4', idapp: '4',
@@ -79,6 +82,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '6', idapp: '6',
@@ -94,6 +98,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '7', idapp: '7',
@@ -109,6 +114,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'1037577457:AAGQbdIuYoB838v61ewJ0Hearx9UPpTBhMI', telegram_key:'1037577457:AAGQbdIuYoB838v61ewJ0Hearx9UPpTBhMI',
telegram_bot_name: 'notevoleaynibot', telegram_bot_name: 'notevoleaynibot',
pathreg_add:'_ayni', pathreg_add:'_ayni',
abilitanave: false,
}, },
{ {
idapp: '8', idapp: '8',
@@ -124,6 +130,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
]; ];
} else if (process.env.NODE_ENV === 'test') { } else if (process.env.NODE_ENV === 'test') {
@@ -143,6 +150,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '2', idapp: '2',
@@ -158,6 +166,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '3', idapp: '3',
@@ -172,6 +181,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '4', idapp: '4',
@@ -186,6 +196,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '6', idapp: '6',
@@ -200,6 +211,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '7', idapp: '7',
@@ -214,6 +226,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'1011893908:AAEThZB3fVPw8P5gTCFgTEsDmY21DdbV1Cw', telegram_key:'1011893908:AAEThZB3fVPw8P5gTCFgTEsDmY21DdbV1Cw',
telegram_bot_name: 'testnotevoleaynibot', telegram_bot_name: 'testnotevoleaynibot',
pathreg_add:'_ayni', pathreg_add:'_ayni',
abilitanave: true,
}, },
{ {
idapp: '8', idapp: '8',
@@ -229,6 +242,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
]; ];
} else { } else {
@@ -248,6 +262,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '2', idapp: '2',
@@ -263,6 +278,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '3', idapp: '3',
@@ -275,6 +291,7 @@ if (process.env.NODE_ENV === 'production') {
email_from: 'info.pianetalibero@gmail.com', email_from: 'info.pianetalibero@gmail.com',
email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==', email_pwd: '66ffeb915e71fada64ad5c26947dd087c262be3b343734a0447c6dee534b888aZcfbjXEuMBWKxvbh60cniw==',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '4', idapp: '4',
@@ -289,6 +306,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '6', idapp: '6',
@@ -303,6 +321,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
{ {
idapp: '7', idapp: '7',
@@ -317,6 +336,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_bot_name: 'paotestlocalebot', telegram_bot_name: 'paotestlocalebot',
telegram_key:'353996190:AAEcEbfrm_zTK6mBKf8ye9j-PXt958SDxew', telegram_key:'353996190:AAEcEbfrm_zTK6mBKf8ye9j-PXt958SDxew',
pathreg_add:'_ayni', pathreg_add:'_ayni',
abilitanave: true,
}, },
{ {
idapp: '8', idapp: '8',
@@ -332,6 +352,7 @@ if (process.env.NODE_ENV === 'production') {
telegram_key:'', telegram_key:'',
telegram_bot_name: '', telegram_bot_name: '',
pathreg_add:'', pathreg_add:'',
abilitanave: false,
}, },
]; ];

View File

@@ -0,0 +1,4 @@
{
"Email Verificata!": "Email Verified! Close this window and return to the other.",
"partecipanti": "participants",
}

View File

@@ -0,0 +1,8 @@
{
"L'Email è già stata Verificata": "El email ya ha sido verificado",
"Email Verificata!": "Email Verificada! Cierre esta ventana y regrese a la otra.",
"a": "a",
"Nuova Registrazione": "Nuevo Registro",
"Effettuata una Nuova Registrazione": "Se ha realizado un nuevo registro",
"partecipanti": "participantes",
}

View File

@@ -0,0 +1,8 @@
{
"L'Email è già stata Verificata": "L'Email è già stata Verificata",
"Email Verificata!": "Email Verificata! Chiudere questa finestra e ritornare sull'altra.",
"a": "a",
"Nuova Registrazione": "Nuova Registrazione",
"Effettuata una Nuova Registrazione": "Effettuata una Nuova Registrazione",
"partecipanti": "partecipanti",
}

View File

@@ -1,412 +0,0 @@
const mongoose = require('mongoose');
const _ = require('lodash');
const tools = require('../tools/general');
const { ListaIngresso } = require('./listaingresso');
const { Settings } = require('./settings');
const { User } = require('./user');
const { ObjectID } = require('mongodb');
const telegrambot = require('../telegram/telegrambot');
const shared_consts = require('../tools/shared_nodejs');
mongoose.Promise = global.Promise;
mongoose.level = "F";
// Resolving error Unknown modifier: $pushAll
mongoose.plugin(schema => {
schema.options.usePushEach = true
});
mongoose.set('debug', process.env.DEBUG);
const BilletteraSchema = new mongoose.Schema({
idapp: {
type: String,
required: true,
},
riga: {
type: Number,
},
col: {
type: Number,
},
indprimario: {
type: Number,
},
parent_indprimario: {
type: Number,
},
date_start: {
type: Date
},
made_gift: {
type: Boolean,
default: false,
},
received_gift: {
type: Boolean,
default: false,
},
created: {
type: Date,
},
num_tess: { // numero di tessitura
type: Boolean,
default: 1
}
});
BilletteraSchema.statics.getTotInLista = async function (idapp) {
const Billettera = this;
const myfind = { idapp };
return await Billettera.count(myfind);
};
BilletteraSchema.statics.findByIndOrder = function (idapp, ind_order) {
const User = this;
try {
return User.findOne({
'idapp': idapp,
'ind_order': ind_order,
});
} catch (e) {
}
};
BilletteraSchema.statics.getFieldsForSearch = function () {
return ['username', 'name', 'surname', 'ind_order']
};
BilletteraSchema.statics.executeQueryTable = function (idapp, params) {
params.fieldsearch = this.getFieldsForSearch();
return tools.executeQueryTable(this, idapp, params);
};
BilletteraSchema.statics.findAllIdApp = function (idapp) {
const Billettera = this;
const myfind = { idapp };
return Billettera.find(myfind, (err, arrrec) => {
return arrrec
});
};
BilletteraSchema.statics.findByRigaCol = function (idapp, riga, col) {
const Billettera = this;
const myfind = { idapp, riga, col };
return Billettera.findOne(myfind, (err, arrrec) => {
return arrrec
});
};
BilletteraSchema.statics.findRecByRigaColParent = async function (idapp, riga, col, numparentUp) {
const Billettera = this;
const myfind = { idapp, riga, col };
let parentup = 0;
let myrec = null;
while (parentup < numparentUp) {
myrec = await Billettera.findOne(myfind);
if (myrec.parent_indprimario === 0)
break;
}
return myrec;
};
function getlimiti(mypos) {
if (mypos.col < 0) {
mypos.col = 0;
}
if (mypos.riga < 0) {
mypos.riga = 0;
mypos.col = 0;
}
return mypos;
}
function getRigaColByPosUp(mypos) {
riga = riga - mypos.numup;
col = Math.ceil(col / (Math.pow(2, mypos.numup)));
if ((col % 2) !== 0)
col++;
}
function getRigaColGenerica(idapp, riga, col, numup) {
mypos = {
riga,
col,
numup
};
if (idapp === tools.AYNI) {
this.getRigaColByPosUp(mypos);
ris = this.getlimiti(mypos);
riga = ris.riga;
col = ris.col;
}
return { riga, col };
}
function getRigaColSognatoreByFuoco(idapp, riga, col) {
return this.getRigaColGenerica(idapp, riga, col, 6);
}
function getRigaColMediatoreByFuoco(idapp, riga, col) {
return this.getRigaColGenerica(idapp, riga, col, 3);
}
BilletteraSchema.statics.findMediatoreByFuoco = function (idapp, riga, col) {
const Billettera = this;
const myrigacol = getRigaColMediatoreByFuoco(idapp, riga, col);
const myfind = { idapp, riga: myrigacol.riga, col: myrigacol.col };
return Billettera.findOne(myfind, (err, arrrec) => {
return arrrec
});
};
function getQueryProj(myfilter) {
const query = [
{ $match: myfilter },
{
$lookup: {
from: "users",
localField: "ind_order",
foreignField: "ind_order", // field in the user collection
as: "user"
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } }
},
];
return query;
}
BilletteraSchema.statics.findSognatoreByFuoco = function (idapp, riga, col) {
const Billettera = this;
const myrigacol = getRigaColSognatoreByFuoco(idapp, riga, col);
const myquery = this.getQueryProj({ idapp, riga: myrigacol.riga, col: myrigacol.col });
return Billettera.find(myquery, (err, arrrec) => {
return arrrec
});
};
BilletteraSchema.statics.setRiga = async function (idapp, riga) {
const newrec = new Settings({ key: 'riga' });
newrec._id = new ObjectID();
newrec.idapp = idapp;
newrec.type = tools.FieldType.number;
newrec.value_num = riga;
await newrec.save();
};
BilletteraSchema.statics.getRiga = async function (idapp) {
const ret = await Settings.findOne({ key: 'riga', idapp });
if (!!ret) {
return ret.value_num;
} else {
return 1;
}
};
BilletteraSchema.statics.setCol = async function (idapp, col) {
const newrec = new Settings({ key: 'col' });
newrec._id = new ObjectID();
newrec.idapp = idapp;
newrec.type = tools.FieldType.number;
newrec.value_num = col;
await newrec.save();
};
BilletteraSchema.statics.getCol = async function (idapp) {
const ret = await Settings.findOne({ key: 'col', idapp });
if (!!ret) {
return ret.value_num;
} else {
return 1;
}
};
function getmaxcol(riga) {
let maxcol = 1;
if (riga === 1) {
maxcol = 1;
} else if (riga === 2) {
maxcol = 2;
} else {
maxcol = Math.pow(riga - 1, 2);
}
return maxcol;
}
function getPrimoFuocoByIndCol(col) {
return Math.ceil(col / 8) + (col % 8);
}
function getusertextbyrec(myrec, symbol) {
return symbol + ' ' + recfuoco.ind_order + ' (' + recfuoco.name + ' ' + recfuoco.surname + ')';
}
BilletteraSchema.statics.getPlaccaByFuoco = async function (idapp, riga, col) {
const Billettera = this;
try {
let recsognatore = await Billettera.findSognatoreByFuoco(idapp, riga, col);
let recmediatore = await Billettera.findMediatoreByFuoco(idapp, riga, col);
let primofuoco = this.getPrimoFuocoByIndCol(col);
mystr = '🌈 Dreamer ' + this.getusertextbyrec(recsognatore, '🔥') + tools.ACAPO;
mystr = '🌈 Mediator ' + this.getusertextbyrec(recmediatore, '🔥') + tools.ACAPO;
mystr = '🔥🌏💦💨🔥🌏💦💨' + tools.ACAPO;
for (let indcol = primofuoco; indcol < primofuoco + 8; indcol++) {
let recfuoco = await Billettera.findByRigaCol(idapp, riga, indcol);
mystr += this.getusertextbyrec(recfuoco, '🔥') + tools.ACAPO;
}
} catch (e) {
console.error(e);
}
}
function Fuochi8Completati(idapp, riga, col) {
// Inviare un msg al Mediatore che può aprire la Chat con gli 8 fuochi
// Inviare un msg a questi 8 Fuochi, che la loro placca è Pronta !
txt = '';
// Inviare la placca a Managers
telegrambot.sendMsgTelegramToTheManagers(idapp, txt);
}
BilletteraSchema.statics.generaBillettera = async function (idapp) {
const Billettera = this;
let riga = await Billettera.getRiga(idapp);
let col = await Billettera.getCol(idapp);
let primavolta = (riga === 1) && (col === 1);
primavolta = false;
const recfindFondo = await Billettera.findByRigaCol(idapp, 0, 0);
if (!recfindFondo) {
billettera = new Billettera({ idapp, indprimario: 0, riga: 0, col: 0 });
billettera.created = new Date();
await billettera.save();
const UserFondo = await User.findByIndOrder(idapp, 0);
if (!UserFondo) {
telegrambot.sendMsgTelegramToTheAdmin(idapp, 'Devi creare l\'utente FONDO , con ind_order = 0 ! ');
}
}
let maxcol = getmaxcol(riga);
// Identifica il prossimo d'aggiungere
arrlistaingresso = await ListaIngresso.find({ 'idapp': idapp, added: false }).sort({ indprimario: 1 });
let conta = 0;
let colparent = Math.ceil(col / 2);
let rigaparent = riga - 1;
for (const reclista of arrlistaingresso) {
billettera = new Billettera({ idapp, indprimario: reclista.indprimario, riga, col });
billettera.created = new Date();
const recfind = await Billettera.findByRigaCol(idapp, rigaparent, colparent);
if (!!recfind) {
billettera.parent_indprimario = recfind.indprimario;
} else {
billettera.parent_indprimario = 0;
}
await billettera.save()
.then(async (result) => {
let fields_to_update = { added: true };
const ris = await ListaIngresso.findOneAndUpdate({ _id: reclista._id.toString() }, { $set: fields_to_update }, { new: false });
await Billettera.setRiga(idapp, riga);
await Billettera.getCol(idapp, col);
conta++;
// Check if Billetera has Completed
if (idapp === tools.AYNI) {
if ((col % 8) === 0) {
// Completed 8 people
let text = 'Completata Billettera [riga=' + riga + ',col=' + col + ']';
tools.writeBilletteraLog(text);
if (!primavolta) {
telegrambot.sendMsgTelegramToTheManagers(idapp, text);
this.Fuochi8Completati(idapp, riga, col);
}
}
}
// Next
if (col === maxcol) {
riga++;
rigaparent = riga - 1;
col = 1;
maxcol = getmaxcol(riga);
} else {
col++;
}
if ((col % 2) !== 0)
colparent++;
});
}
};
const Billettera = mongoose.model('Billettera', BilletteraSchema);
module.exports = { Billettera };

View File

@@ -6,6 +6,10 @@ const _ = require('lodash');
const tools = require('../tools/general'); const tools = require('../tools/general');
const { ObjectID } = require('mongodb');
const { Nave } = require('./nave');
const shared_consts = require('../tools/shared_nodejs'); const shared_consts = require('../tools/shared_nodejs');
const queryclass = require('../classes/queryclass'); const queryclass = require('../classes/queryclass');
@@ -30,16 +34,17 @@ const ListaIngressoSchema = new mongoose.Schema({
ind_order: { ind_order: {
type: Number, type: Number,
}, },
username: { date_added: {
type: String, type: Date,
}, },
name: { added: { // Added into Programmation (Nave)
type: String, type: Boolean,
default: false,
}, },
surname: { num_tess: {
type: String, type: Number,
}, },
added: { // Added into Programmation (Billettera) deleted: {
type: Boolean, type: Boolean,
default: false, default: false,
} }
@@ -108,9 +113,123 @@ ListaIngressoSchema.statics.findByIndOrder = function (idapp, ind_order) {
} }
}; };
ListaIngressoSchema.statics.findByIndOrderETess = function (idapp, ind_order, num_tess) {
const ListaIngresso = this;
try {
return ListaIngresso.findOne({
'idapp': idapp,
'ind_order': ind_order,
num_tess,
});
} catch (e) {
}
};
ListaIngressoSchema.statics.deleteUserInListaIngresso = async function (idapp, ind_order) {
const ListaIngresso = this;
return ListaIngresso.findOneAndUpdate({
idapp,
ind_order,
}, { $set: { deleted: true } }, { new: false })
};
ListaIngressoSchema.statics.addUserInListaIngresso = async function (idapp, ind_order, lang, addednowreal, num_tess) {
const ListaIngresso = this;
const { User } = require('./user');
const telegrambot = require('../telegram/telegrambot');
try {
let listaingresso = null;
if (!await ListaIngresso.findByIndOrderETess(idapp, ind_order, num_tess)) {
listaingresso = new ListaIngresso({
ind_order: ind_order,
idapp,
num_tess,
date_added: new Date(),
_id: new ObjectID()
});
if (listaingresso) {
return await listaingresso.save().then(async (ris) => {
if (addednowreal) {
if (!!ris) {
msgtext = tools.gettranslate('ADDED_TOLISTAINGRESSO', lang);
const username = await User.getUsernameByIndOrder(idapp, ind_order);
await telegrambot.sendMsgTelegram(idapp, username, msgtext, true); // Anche a STAFF
}
}
return ris;
});
}
}
const giapresente = await Nave.findOne({ idapp, ind_order: num_tess });
if (!!giapresente) {
// Era stato già aggiunto!
let fields_to_update = { added: true };
await ListaIngresso.findOneAndUpdate({ _id: params.id.toString() }, { $set: fields_to_update }, { new: false });
return false;
}
return null;
} catch (e) {
console.error(e);
}
return null;
};
function getQueryProj(myfilter) {
const query = [
{ $match: myfilter },
{
$lookup: {
from: "users",
localField: "ind_order",
foreignField: "ind_order", // field in the user collection
as: "user"
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } }
},
];
return query;
}
ListaIngressoSchema.statics.showListaOrd = async function (idapp) {
const ListaIngresso = this;
const myquery = getQueryProj({ idapp });
arrrec = await ListaIngresso.aggregate(myquery).sort({ indprimario: 1 });
let mystr = '';
let conta = 1;
for (const rec of arrrec) {
mystr += '[' + conta + '] ' + rec.ind_order + ' (' + rec.ind_order + ') ' + rec.name + ' ' + rec.surname;
if (rec.added)
mystr += ' (ADDED ++)';
mystr += '\n';
conta++;
}
return mystr;
};
ListaIngressoSchema.statics.getFieldsForSearch = function () { ListaIngressoSchema.statics.getFieldsForSearch = function () {
return ['username', 'name', 'surname', 'ind_order'] return ['ind_order']
}; };
ListaIngressoSchema.statics.executeQueryTable = function (idapp, params) { ListaIngressoSchema.statics.executeQueryTable = function (idapp, params) {
@@ -128,6 +247,45 @@ ListaIngressoSchema.statics.findAllIdApp = function (idapp) {
}); });
}; };
function sortRec(rec) {
return rec.sort(function (reca, recb) {
return recb.numinvitatiattivi - reca.numinvitatiattivi
});
}
ListaIngressoSchema.statics.getProssimiInLista = async function (idapp, tutti) {
const ListaIngresso = this;
const myquery = getQueryProj({
'idapp': idapp,
ind_order: { $gt: 0 },
added: false,
deleted: false,
});
arrrec = await ListaIngresso.aggregate(myquery).sort({ indprimario: 1 })
.then(async (arrlista) => {
const { User } = require('../models/user');
for (const rec of arrlista) {
rec.numinvitatiattivi = await User.getnumInvitatiAttivi(idapp, rec.username);
if (rec.numinvitatiattivi > 2)
rec.numinvitatiattivi = 2;
}
if (arrlista) {
arrlista = sortRec(arrlista);
// arrlista.reverse();
}
return arrlista;
}).catch((e) => {
console.error(e);
return null
});
return arrrec;
};
const ListaIngresso = mongoose.model('ListaIngresso', ListaIngressoSchema); const ListaIngresso = mongoose.model('ListaIngresso', ListaIngressoSchema);

991
src/server/models/nave.js Normal file
View File

@@ -0,0 +1,991 @@
const mongoose = require('mongoose');
const _ = require('lodash');
const tools = require('../tools/general');
const { ListaIngresso } = require('./listaingresso');
const { Settings } = require('./settings');
const { User } = require('./user');
const { ObjectID } = require('mongodb');
const shared_consts = require('../tools/shared_nodejs');
mongoose.Promise = global.Promise;
mongoose.level = "F";
// Resolving error Unknown modifier: $pushAll
mongoose.plugin(schema => {
schema.options.usePushEach = true
});
mongoose.set('debug', process.env.DEBUG);
const NaveSchema = new mongoose.Schema({
idapp: {
type: String,
required: true,
},
riga: {
type: Number,
},
col: {
type: Number,
},
indprimario: {
type: Number,
},
ind_order: {
type: Number,
},
parent_id: {
type: mongoose.Schema.Types.ObjectId,
},
date_start: {
type: Date
},
link_chat: {
type: String,
},
sent_msg_howto_make_gift: {
type: Boolean,
default: false,
},
made_gift: {
type: Boolean,
default: false,
},
date_made_gift: {
type: Date,
},
received_gift: {
type: Boolean,
default: false,
},
date_received_gift: {
type: Date,
},
created: {
type: Date,
},
num_tess: { // numero di tessitura
type: Number,
default: 1
}
});
NaveSchema.statics.getTotInLista = async function (idapp) {
const Nave = this;
const myfind = { idapp };
return await Nave.count(myfind);
};
NaveSchema.statics.findByIndOrder = function (idapp, ind_order) {
const Nave = this;
try {
return Nave.findOne({
'idapp': idapp,
'ind_order': ind_order,
});
} catch (e) {
}
};
NaveSchema.statics.findById = function (idapp, id) {
const Nave = this;
const myquery = getQueryProj({ idapp, '_id': ObjectID(id) });
return Nave.aggregate(myquery);
};
NaveSchema.statics.findByIndPrimario = function (idapp, indprimario) {
const Nave = this;
try {
return Nave.findOne({
idapp,
indprimario,
});
} catch (e) {
}
};
NaveSchema.statics.getFieldsForSearch = function () {
return ['username', 'name', 'surname', 'ind_order']
};
NaveSchema.statics.executeQueryTable = function (idapp, params) {
params.fieldsearch = this.getFieldsForSearch();
return tools.executeQueryTable(this, idapp, params);
};
NaveSchema.statics.findAllIdApp = function (idapp) {
const Nave = this;
const myfind = { idapp };
return Nave.find(myfind, (err, arrrec) => {
return arrrec
});
};
NaveSchema.statics.findByRigaCol = function (idapp, riga, col, nullifnotexist) {
const Nave = this;
myrigacol = {
idapp,
riga,
col,
nullifnotexist
};
return Nave.findGeneric(myrigacol);
};
NaveSchema.statics.findDonatoreByNave = function (idapp, nave) {
try {
const arrrigacol = nave.split(".");
if (arrrigacol.length <= 0)
return;
let riganave = parseInt(arrrigacol[0]);
let colnave = parseInt(arrrigacol[1]);
let rigadonatore = riganave + 3;
if (rigadonatore < 1)
rigadonatore = 1;
coldonatoreIni = calcval(riganave, colnave, 8) + (1);
coldonatoreFine = calcval(riganave, colnave, 8) + (8);
const miaquery = {
idapp,
riga: rigadonatore,
$and: [{ col: { $gte: { coldonatoreIni } } }, { col: { $lte: { coldonatoreFine } } }]
};
return Nave.findOne(miaquery);
} catch (e) {
}
};
function getIndColonneByNave(navemediatore) {
let riga = navemediatore.riga;
let col = navemediatore.col;
let col_ini = calcval(riga, col, 8) + 1;
let col_fine = col_ini + 8;
return { riga: riga + 3, col_ini, col_fine }
}
NaveSchema.statics.getusersByNave = function (idapp, navemediatore) {
const obj = getIndColonneByNave(navemediatore);
const miacol_ini = obj.col_ini;
const miacol_fine = obj.col_fine;
const miaquery = {
idapp,
riga: obj.riga,
$and: [
{ col: { $gte: miacol_ini } },
{ col: { $lte: miacol_fine } }
],
};
return Nave.find(miaquery);
};
NaveSchema.statics.findRecByRigaColParent = async function (idapp, riga, col, numparentUp) {
const Nave = this;
const { User } = require('./user');
const myrigacol = {
idapp,
riga,
col
};
if (numparentUp === 0) {
return await Nave.findGeneric(myrigacol);
}
let parentup = 0;
let myrec = null;
let lastrec = null;
while (parentup < numparentUp) {
myrec = await Nave.findGeneric(myrigacol);
if (!!myrec) {
if (myrec.parent_id === "0") {
break;
}
recfind = await Nave.findById(idapp, myrec.parent_id);
if (!!recfind) {
if (recfind.length > 0) {
recfind = recfind[0];
lastrec = recfind;
myrigacol.riga = lastrec.riga;
myrigacol.col = lastrec.col;
} else {
lastrec = await User.findByIndOrder(idapp, 0);
break;
}
}
}
parentup++;
}
if (!lastrec) {
return await User.findByIndOrder(idapp, 0);
}
return lastrec;
};
function getlimiti(mypos) {
if (mypos.col < 0) {
mypos.col = 0;
}
if (mypos.riga < 0) {
mypos.riga = 0;
mypos.col = 0;
}
return mypos;
}
function getRigaColByPosUp(mypos) {
mypos.riga = mypos.riga - mypos.numup;
mypos.col = Math.floor(mypos.col / (Math.pow(2, mypos.numup)));
// if ((mypos.col % 2) !== 0)
// mypos.col++;
}
function getRigaColGenerica(idapp, riga, col, numup) {
mypos = {
idapp,
riga,
col,
numup
};
if (idapp === tools.AYNI) {
getRigaColByPosUp(mypos);
ris = getlimiti(mypos);
}
return ris;
}
function getRigaColSognatoreByFuoco(idapp, riga, col) {
return getRigaColGenerica(idapp, riga, col, 6);
}
function getRigaColMediatoreByFuoco(idapp, riga, col) {
return getRigaColGenerica(idapp, riga, col, 3);
}
NaveSchema.statics.findGeneric = function (myrigacol) {
const { ListaIngresso } = require('./listaingresso');
const myquery = getQueryProj({ idapp: myrigacol.idapp, riga: myrigacol.riga, col: myrigacol.col });
return Nave.aggregate(myquery)
.then(async (rec) => {
if (!rec || rec.length === 0) {
if (myrigacol.nullifnotexist)
return null;
const ris = await ListaIngresso.findByIndOrder(myrigacol.idapp, 0);
const arr = [];
arr.push(ris);
return arr;
}
else {
return rec;
}
}
).then(async (rec) => {
const { User } = require('./user');
if (!!rec) {
if (rec.length > 0) {
// console.log('rec', rec);
// console.table('myrigacol', myrigacol);
if (!!rec[0]) {
const newrec = await User.getSmallRecByIndOrder(myrigacol.idapp, rec[0].ind_order);
if (!!newrec) {
let myarr = {};
if (rec[0]._doc === undefined)
myarr = { ...newrec._doc, ...rec[0] };
else
myarr = { ...newrec._doc, ...rec[0]._doc };
return myarr;
} else {
let myarr = null;
if (rec[0]._doc === undefined)
myarr = { ...newrec._doc, ...rec[0] };
else
myarr = { ...newrec._doc, ...rec[0]._doc };
return myarr;
}
} else {
const ris = await ListaIngresso.findByIndOrder(myrigacol.idapp, 0);
if (!!ris)
return ris[0]
}
}
}
return null;
}).catch((e) => {
console.error(e);
});
}
;
NaveSchema.statics.findSognatoriByFuoco = async function (idapp, riga, col, offset) {
const Nave = this;
// const myrigacol = getRigaColSognatoreByFuoco(idapp, riga, col);
// return Nave.findGeneric(myrigacol);
return [await Nave.findRecByRigaColParent(idapp, riga, col, 6 - offset),
await Nave.findRecByRigaColParent(idapp, riga, col, 5 - offset),
await Nave.findRecByRigaColParent(idapp, riga, col, 4 - offset)
]
};
NaveSchema.statics.findMediatoreByFuoco = async function (idapp, riga, col, offset) {
const Nave = this;
// const myrigacol = getRigaColMediatoreByFuoco(idapp, riga, col);
// return Nave.findGeneric(myrigacol);
return await Nave.findRecByRigaColParent(idapp, riga, col, 3 - offset);
};
function getQueryProj(myfilter) {
myobjField = {
_id: 1,
lang: 1,
ind_order: 1,
name: 1,
surname: 1,
username: 1,
date_start: 1,
made_gift: 1,
link_chat: 1,
date_made_gift: 1,
received_gift: 1,
date_received_gift: 1,
num_tess: 1,
indprimario: 1,
parent_id: 1,
riga: 1,
col: 1,
created: 1,
};
const query = [
{ $match: myfilter },
{
$lookup: {
from: "users",
localField: "ind_order",
foreignField: "ind_order", // field in the user collection
as: "user"
}
},
{
$replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } }
// $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] },] } }
},
{ $project: myobjField }
];
return query;
}
NaveSchema.statics.setRiga = function (idapp, riga) {
return Settings.setKeyNum(idapp, 'riga', riga);
};
NaveSchema.statics.getRiga = function (idapp) {
return Settings.getKeyNum(idapp, 'riga', 1);
};
NaveSchema.statics.setCol = function (idapp, col) {
return Settings.setKeyNum(idapp, 'col', col);
};
NaveSchema.statics.getCol = function (idapp) {
return Settings.getKeyNum(idapp, 'col', 1);
};
function getmaxcol(riga) {
return Math.pow(2, riga - 1);
}
function getPrimoFuocoByIndCol(col) {
return Math.floor(col - (col % 8)) + 1;
}
async function getusertextbyrec(myrec, symbol, lettera, riga, col, ind) {
let visu_test = false;
if (!!myrec)
visu_test = await Settings.getValDbSettings(myrec.idapp, 'VISU_TEST');
if (!visu_test) {
if (myrec)
return lettera + ind + ' - ' + symbol + ' ' + myrec.name + ' ' + tools.getFirst2Car(myrec.surname) + ' (' + myrec.username + ')';
else
return lettera + ind + ' - ' + symbol;
} else {
if (myrec)
return lettera + ind + ' - ' + symbol + '[' + miariga + ',' + miacol + ']' + ' ' + myrec.name + ' ' + myrec.surname + '';
else
return lettera + ind + ' - ' + symbol;
}
}
NaveSchema.statics.getPlaccaGenerica = async function (idapp, riga, col, offset, solorecord) {
const Nave = this;
try {
let recsognatori = await Nave.findSognatoriByFuoco(idapp, riga, col, offset);
let recmediatore = await Nave.findMediatoreByFuoco(idapp, riga, col, offset);
let primofuoco = getPrimoFuocoByIndCol(col);
mystr = tools.ACAPO;
mystr += 'GIFTING CHAT (' + riga + '.' + col + ') ' + tools.ACAPO + tools.ACAPO;
if (offset === tools.Placca.SONOFUOCO) {
mystr += tools.Placca.SOGNATORE + tools.Placca.STR_SOGNATORE + ': ' + await getusertextbyrec(recsognatori[0], '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
mystr += tools.Placca.MEDIATORE + tools.Placca.STR_MEDIATORE + ': ' + await getusertextbyrec(recmediatore, '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
}
if (offset === tools.Placca.SONOACQUA) {
mystr += tools.Placca.SOGNATORE + tools.Placca.STR_SOGNATORE + ': ' + await getusertextbyrec(recmediatore, '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
}
let symb = {
car: 'D',
icona: '🔥'
};
if (offset === tools.Placca.SONOFUOCO) {
mystr += tools.Placca.STR_DONATORI + ':' + tools.ACAPO;
} else if (offset === tools.Placca.SONOACQUA) {
mystr += tools.Placca.STR_MEDIATORI + ':' + tools.ACAPO;
symb = {
car: 'A',
icona: '💦'
};
}
// mystr += '🔥🌏💦💨🔥🌏💦💨' + tools.ACAPO;
let arrdonatori = [];
let ind = 1;
for (let indcol = primofuoco; indcol < primofuoco + 8; indcol++) {
let indr = riga + offset;
let indc = indcol + (offset * indr);
indr = riga + offset;
indc = calcval(riga, col, 8) + (indcol - primofuoco + 1);
// miacol = calcval(riga, col, 8) + (indfuoco);
let recfuoco = await Nave.findByRigaCol(idapp, indr, indc, true);
arrdonatori.push(recfuoco);
mystr += await getusertextbyrec(recfuoco, symb.icona, symb.car, indr, indc, ind) + tools.ACAPO;
ind++;
}
if (solorecord) {
res = {
recsognatori,
recmediatore,
arrdonatori
};
return res;
} else {
return mystr;
}
} catch (e) {
console.error(e);
}
};
NaveSchema.statics.getPlaccaPerDonatore = async function (idapp, riga, col, solorecord) {
const Nave = this;
return Nave.getPlaccaGenerica(idapp, riga, col, tools.Placca.SONOFUOCO, solorecord);
};
NaveSchema.statics.getPlaccaPerMediatore = async function (idapp, riga, col, solorecord) {
const Nave = this;
return Nave.getPlaccaGenerica(idapp, riga, col, tools.Placca.SONOACQUA, solorecord);
};
function calcval(riga, col, quanti) {
return (quanti * (col - 1));
}
NaveSchema.statics.getNavePos = async function (idapp, riga, col, solorecord) {
const Nave = this;
try {
let recsognatori = [await Nave.findRecByRigaColParent(idapp, riga, col, 3),
await Nave.findRecByRigaColParent(idapp, riga, col, 2),
await Nave.findRecByRigaColParent(idapp, riga, col, 1)];
let recmediatore = await Nave.findByRigaCol(idapp, riga, col, true);
mystr = '🌈SOGNATORE: ';
for (let indsogn = 0; indsogn < recsognatori.length; indsogn++) {
mystr += 'A' + (3 - indsogn) + await getusertextbyrec(recsognatori[indsogn], '', '', riga, col, '') + tools.ACAPO;
}
mystr += tools.ACAPO + '🌀 MEDIATORE:' + await getusertextbyrec(recmediatore, '', '', riga, col, '') + tools.ACAPO + tools.ACAPO;
for (let indterra = 1; indterra <= 2; indterra++) {
miacol = calcval(riga, col, 2) + (indterra);
miariga = riga + 1;
let recterra = await Nave.findByRigaCol(idapp, miariga, miacol, true);
mystr += await getusertextbyrec(recterra, '', 'B', miariga, miacol, indterra) + tools.ACAPO;
}
mystr += tools.ACAPO;
for (let indaria = 1; indaria <= 4; indaria++) {
miacol = calcval(riga, col, 4) + (indaria);
miariga = riga + 2;
let recaria = await Nave.findByRigaCol(idapp, miariga, miacol, true);
mystr += await getusertextbyrec(recaria, '', 'C', miariga, miacol, indaria) + tools.ACAPO;
}
mystr += tools.ACAPO;
let primofuoco = null;
mystr += '🎁 DONATORI:' + tools.ACAPO;
for (let indfuoco = 1; indfuoco <= 8; indfuoco++) {
miacol = calcval(riga, col, 8) + (indfuoco);
miariga = riga + 3;
// miariga = riga + 2;
let recfuoco = await Nave.findByRigaCol(idapp, miariga, miacol, true);
if (indfuoco === 1)
primofuoco = recfuoco;
mystr += await getusertextbyrec(recfuoco, '', 'D', miariga, miacol, indfuoco) + tools.ACAPO;
}
let data = "";
if (primofuoco)
data = "Partenza il " + tools.getstrDateLong(primofuoco.date_start) + tools.ACAPO;
else
data = "";
mystr = tools.ACAPO + 'NAVE (' + riga + '.' + col + ') ' + tools.ACAPO + data + tools.ACAPO + mystr;
return mystr;
} catch (e) {
console.error(e);
}
};
async function Fuochi8Completati(idapp, params) {
// Inviare un msg al Mediatore che può aprire la Chat con gli 8 fuochi
const telegrambot = require('../telegram/telegrambot');
let text = '\nCompletata NAVE [riga=' + params.riga + ',col=' + params.col + ', ind_order=' + params.ind_order + ']';
console.log(text);
tools.writeNaveLog(text);
const { User } = require('./user');
const rec = await User.findByIndOrder(idapp, params.ind_order);
text = await Nave.getNaveByUser(idapp, params.ind_order, rec.lang, true);
// Inviare un msg a questi 8 Fuochi, che la loro placca è Pronta !
if (tools.isAbilitaNave(idapp)) {
// .............
}
if (false) {
await telegrambot.sendMsgTelegram(idapp, rec.username, text, true);
} else {
await telegrambot.sendMsgTelegramToTheAdmin(idapp, text);
}
// Inviare la placca a Managers
// await telegrambot.sendMsgTelegramToTheManagers(idapp, txt);
}
NaveSchema.statics.getArrPosizioniByIndOrder = async function (idapp, ind_order) {
const Nave = this;
arrposizioni = await Nave.find({ 'idapp': idapp, ind_order }).sort({ riga: 1, col: 1 });
return arrposizioni;
};
NaveSchema.statics.getPrimaNaveByRiga = async function (idapp, riga) {
const Nave = this;
nave = await Nave.find({ 'idapp': idapp, riga: (riga + 3), col: 1 });
return nave;
};
NaveSchema.statics.showListaOrd = async function (idapp) {
const Nave = this;
const myquery = getQueryProj({ idapp });
arrrec = await Nave.aggregate(myquery).sort({ riga: 1, col: 1 });
let mystr = '';
let conta = 1;
for (const rec of arrrec) {
mystr += '[' + conta + '] [' + rec.riga + '.' + rec.col + '] ' + rec.ind_order + ' ' + rec.name + ' ' + rec.surname + ' (' + tools.getstrDateShort(rec.date_start) + ')\n';
conta++;
}
return mystr;
};
async function addRecordNaveByParams(params, siRitesse) {
const { ListaIngresso } = require('./listaingresso');
if (!siRitesse) {
// Check if Exist:
const giapresente = await Nave.findOne({ idapp: params.idapp, ind_order: params.ind_order, num_tess: params.num_tess });
if (!!giapresente) {
let fields_to_update = { added: true };
await ListaIngresso.findOneAndUpdate({ _id: params.id.toString() }, { $set: fields_to_update }, { new: false });
return false;
}
}
let myNave = new Nave({
idapp: params.idapp,
indprimario: params.indprimario,
ind_order: params.ind_order,
riga: params.riga,
col: params.col,
date_start: params.date_start,
num_tess: params.num_tess,
});
myNave.created = new Date();
console.log('[' + params.riga + ',' + params.col + ']');
const recfindparent = await Nave.findByRigaCol(idapp, params.rigaparent, params.colparent, false);
if (!!recfindparent) {
myNave.parent_id = recfindparent._id;
} else {
myNave.parent_id = "0";
}
console.log('addRecordNaveByParams (' + myNave.parent_id + ')');
return await myNave.save()
.then(async (result) => {
if (!!result) {
let fields_to_update = { added: true };
await ListaIngresso.findOneAndUpdate({ _id: params.id.toString() }, { $set: fields_to_update }, { new: false });
params.conta++;
// Check if the Ship has Completed
if (idapp === tools.AYNI) {
if ((params.col % 8) === 0) {
// Completed 8 people
if (!params.primavolta) {
await Fuochi8Completati(idapp, params);
}
}
}
// Next
if (params.col === params.maxcol) {
params.riga++;
params.rigaparent = params.riga - 1;
params.col = 1;
params.maxcol = getmaxcol(params.riga);
} else {
params.col++;
}
if (params.riga === 2)
params.colparent = 1;
else
params.colparent = Math.ceil(params.col / 2);
await Nave.setRiga(idapp, params.riga);
await Nave.setCol(idapp, params.col);
return true;
}
return false;
}).catch((e) => {
console.error(e);
});
}
NaveSchema.statics.checkifDeveRitessersi = async function (recuser) {
const Nave = this;
let deveritessersi = true;
arrrec = await Nave.find({ idapp: recuser.idapp, ind_order: recuser.ind_order });
if (!!arrrec) {
if (arrrec.length > 2) {
// deveritessersi = await User.deveRitessersi(recuser.idapp, recuser.ind_order)
deveritessersi = false;
}
}
return { deveritessersi, num_tess: arrrec.length };
};
NaveSchema.statics.addUserFromListaIngresso_IntoNave = async function (init, idapp, params, addednowreal) {
const Nave = this;
const { User } = require('./user');
if (init) {
params.idapp = idapp;
params.conta = 0;
}
params.primavolta = (params.riga === 1) && (params.col === 1);
params.riga = await Nave.getRiga(idapp);
params.col = await Nave.getCol(idapp);
params.maxcol = getmaxcol(params.riga);
params.colparent = Math.ceil(params.col / 2);
params.rigaparent = params.riga - 1;
myriga = params.riga;
mycol = params.col;
const inserito = await addRecordNaveByParams(params, false);
if (inserito) {
if (idapp === tools.AYNI) {
if (((params.col) % 8) === 0) {
// Trova se la persona di 3 livelli sopra, si deve ritessere
let recmediatore = await Nave.findMediatoreByFuoco(idapp, myriga, mycol, 0);
if (!!recmediatore) {
const ris = await Nave.checkifDeveRitessersi(recmediatore);
if (ris.num_tess > 2) {
console.log('E\' arrivato alla TERZA RITESSITURA, PERTANTO LO METTIAMO IN CODA... [riga=', params.riga, 'col', params.col, '] indorder=' + recmediatore.ind_order);
// E' arrivato alla TERZA RITESSITURA, PERTANTO LO METTIAMO IN CODA...
const risultato = await ListaIngresso.addUserInListaIngresso(idapp, recmediatore.ind_order, rec.lang, false, ris.num_tess);
} else {
console.log('Si deve ritessere: [riga=', params.riga, 'col', params.col, ']');
if (ris.deveritessersi) {
params.indprimario = recmediatore.indprimario;
params.ind_order = recmediatore.ind_order;
params.id = recmediatore._id;
params.num_tess = ris.num_tess;
await addRecordNaveByParams(params, true);
}
}
}
}
if ((params.riga === 4 + 3) && (params.col === (8 * 2) + 3)) {
// Si ritesse il Fondo AYNI nella Nave 3.3
const userFondo = await User.findByIndOrder(idapp, 0);
params.indprimario = userFondo.indprimario;
params.ind_order = userFondo.ind_order;
params.id = userFondo._id;
params.num_tess = userFondo.num_tess;
await addRecordNaveByParams(params, true);
}
}
}
// Se ho completato 8 persone, allora
if (addednowreal) {
}
};
NaveSchema.statics.generaNave = async function (idapp, mydata) {
const Nave = this;
const { User } = require('./user');
const { ListaIngresso } = require('./listaingresso');
let params = {
idapp,
riga: await Nave.getRiga(idapp),
col: await Nave.getCol(idapp),
date_start: mydata.date_start,
numpersone: mydata.numpersone,
};
params.primavolta = (params.riga === 1) && (params.col === 1);
// params.primavolta = false;
const recfindFondo = await Nave.findByRigaCol(params.idapp, 0, 0, true);
if (!recfindFondo) {
let myNave = new Nave({ idapp, indprimario: 0, ind_order: 0, riga: 0, col: 0 });
myNave.created = new Date();
myNave.parent_id = ObjectID("5e592aecbfd0b75f3021d9c9");
myNave.date_start = params.date_start;
await myNave.save();
const userFondo = await User.findByIndOrder(idapp, 0);
if (!userFondo || userFondo === undefined) {
await telegrambot.sendMsgTelegramToTheAdmin(idapp, 'Devi creare l\'utente FONDO , con ind_order = 0 ! ');
}
}
const arrlistaingresso = await ListaIngresso.getProssimiInLista(idapp, true);
let index = 0;
for (const reclista of arrlistaingresso) {
params.indprimario = reclista.indprimario;
params.ind_order = reclista.ind_order;
params.id = reclista._id;
params.num_tess = reclista.num_tess;
await Nave.addUserFromListaIngresso_IntoNave(index === 0, idapp, params, false);
index++;
if (index >= params.numpersone)
break;
}
return params.conta;
};
async function addUserToNave(idapp, rec) {
let params = {};
params.indprimario = rec.indprimario;
params.ind_order = rec.ind_order;
params.id = rec._id;
params.num_tess = rec.num_tess;
return await Nave.addUserFromListaIngresso_IntoNave(true, idapp, params, true);
}
NaveSchema.statics.checkIfDevoAggiungereInNave = async function (idapp) {
const { ListaIngresso } = require('./listaingresso');
// Ottieni la lista Ordinata in base al numero d'invitati
arrlista = await ListaIngresso.getProssimiInLista(idapp, false);
for (const rec of arrlista) {
if (rec.numinvitatiattivi >= 2) {
await addUserToNave(idapp, rec);
}
}
};
NaveSchema.statics.getNaveByUser = async function (idapp, ind_order, lang, fuoco) {
const Nave = this;
let mystr = '';
const arrposiz = await Nave.getArrPosizioniByIndOrder(idapp, ind_order);
if (!!arrposiz) {
for (const pos of arrposiz) {
mystr += await Nave.getNavePos(idapp, pos.riga - 3, Math.floor(pos.col / (2 * 4)), false);
mystr += await Nave.getPlaccaPerDonatore(idapp, pos.riga, pos.col, false);
mystr += await Nave.getPlaccaPerMediatore(idapp, pos.riga, pos.col, false);
}
}
if (mystr === '') {
mystr = tools.gettranslate('NO_PROG', lang);
}
return mystr;
};
NaveSchema.statics.getNaveByRigaCol = async function (idapp, riga, col) {
const Nave = this;
rec = {};
rec.donatore = await Nave.getPlaccaPerDonatore(idapp, riga, col, true);
rec.mediatore = await Nave.getPlaccaPerMediatore(idapp, riga, col, true);
return rec;
};
const Nave = mongoose.model('Nave', NaveSchema);
module.exports = { Nave };

View File

@@ -95,6 +95,36 @@ SettingsSchema.statics.findAllIdApp = function (idapp, serv) {
}); });
}; };
SettingsSchema.statics.setKeyNum = async function (idapp, key, value) {
const Settings = this;
let myrec = await Settings.findOne({ idapp, key });
if (!myrec) {
myrec = new Settings({ key });
myrec._id = new ObjectID();
myrec.idapp = idapp;
myrec.type = tools.FieldType.number;
myrec.value_num = value;
return await myrec.save();
} else {
myrec = await Settings.findOneAndUpdate({ idapp, key }, { $set: { value_num: value } }, { new: false});
}
};
SettingsSchema.statics.getKeyNum = async function (idapp, key, mydefault) {
const Settings = this;
const ret = await Settings.findOne({ idapp, key});
if (!!ret) {
return ret.value_num;
} else {
return mydefault;
}
};
const Settings = mongoose.model('Settings', SettingsSchema); const Settings = mongoose.model('Settings', SettingsSchema);

View File

@@ -8,7 +8,7 @@ const tools = require('../tools/general');
const { Settings } = require('../models/settings'); const { Settings } = require('../models/settings');
const { ListaIngresso } = require('../models/listaingresso'); const { ListaIngresso } = require('../models/listaingresso');
const { Billettera } = require('./billettera'); const { Nave } = require('../models/nave');
const { ExtraList } = require('../models/extralist'); const { ExtraList } = require('../models/extralist');
const { ObjectID } = require('mongodb'); const { ObjectID } = require('mongodb');
@@ -126,6 +126,9 @@ const UserSchema = new mongoose.Schema({
aportador_solidario: { aportador_solidario: {
type: String, type: String,
}, },
aportador_iniziale: {
type: String,
},
aportador_solidario_nome_completo: { aportador_solidario_nome_completo: {
type: String, type: String,
}, },
@@ -188,6 +191,9 @@ const UserSchema = new mongoose.Schema({
special_req: { special_req: {
type: Boolean type: Boolean
}, },
vuole_ritessersi: {
type: Boolean
},
sex: { sex: {
type: Number, type: Number,
}, },
@@ -338,7 +344,7 @@ UserSchema.statics.findByUsername = async function (idapp, username, alsoemail)
if ((!ris) && (alsoemail)) { if ((!ris) && (alsoemail)) {
regexemail = new RegExp(["^", username.toLowerCase(), "$"].join(""), "i"); regexemail = new RegExp(["^", username.toLowerCase(), "$"].join(""), "i");
return await User.findOne({ return User.findOne({
'idapp': idapp, 'idapp': idapp,
'email': regexemail, 'email': regexemail,
}); });
@@ -365,6 +371,7 @@ UserSchema.statics.getUserShortDataByUsername = async function (idapp, username)
'profile.email_paypal': 1, 'profile.email_paypal': 1,
'profile.my_dream': 1, 'profile.my_dream': 1,
'profile.paymenttypes': 1, 'profile.paymenttypes': 1,
'profile.cell': 1,
made_gift: 1, made_gift: 1,
email: 1, email: 1,
date_reg: 1, date_reg: 1,
@@ -389,6 +396,9 @@ UserSchema.statics.getUserShortDataByUsername = async function (idapp, username)
}; };
UserSchema.statics.getDownlineByUsername = async function (idapp, username) { UserSchema.statics.getDownlineByUsername = async function (idapp, username) {
if (username === undefined)
return null;
const User = this; const User = this;
const arrrec = await User.find({ const arrrec = await User.find({
'idapp': idapp, 'idapp': idapp,
@@ -406,6 +416,7 @@ UserSchema.statics.getDownlineByUsername = async function (idapp, username) {
'profile.email_paypal': 1, 'profile.email_paypal': 1,
'profile.my_dream': 1, 'profile.my_dream': 1,
'profile.paymenttypes': 1, 'profile.paymenttypes': 1,
'profile.cell': 1,
made_gift: 1, made_gift: 1,
email: 1, email: 1,
date_reg: 1, date_reg: 1,
@@ -430,32 +441,45 @@ UserSchema.statics.getDownlineByUsername = async function (idapp, username) {
UserSchema.statics.getnumInvitatiAttivi = function (idapp, username) { UserSchema.statics.getnumInvitatiAttivi = function (idapp, username) {
const User = this; const User = this;
return User.count({ if (username === undefined)
return 0;
// return User.count({
return User.countDocuments({
idapp, idapp,
aportador_solidario: username, aportador_solidario: username,
$or: [
{
'profile.special_req': true
},
{
verified_email: true, verified_email: true,
'profile.teleg_id': { $gt: 1 }, 'profile.teleg_id': { $gt: 1 },
'profile.saw_and_accepted': shared_consts.ALL_SAW_AND_ACCEPTED, 'profile.saw_and_accepted': shared_consts.ALL_SAW_AND_ACCEPTED,
'profile.saw_zoom_presentation': true, 'profile.saw_zoom_presentation': true,
'profile.my_dream': { $exists: true }, 'profile.my_dream': { $exists: true },
'profile.paymenttypes': { "$in": ['paypal'] },
$and: [ $and: [
{ "$expr": { "$gt": [{ "$strLenCP": "$profile.my_dream" }, 10] } }, { "$expr": { "$gt": [{ "$strLenCP": "$profile.my_dream" }, 10] } },
{ "$expr": { "$gt": [{ "$strLenCP": "$profile.email_paypal" }, 6] } } { "$expr": { "$gt": [{ "$strLenCP": "$profile.email_paypal" }, 6] } }
], ],
$where: "this.profile.paymenttypes.length >= 1", }]
'profile.email_paypal': { $exists: true },
}); });
}; };
UserSchema.statics.isUserQualified7 = async function (idapp, username) { UserSchema.statics.isUserQualified7 = async function (idapp, username) {
const User = this; const User = this;
const myrec = await User.findOne({ if (username === undefined)
return false;
const myquery = {
'idapp': idapp, 'idapp': idapp,
'username': username, 'username': username,
$or: [ $or: [
{ {
special_req: true 'profile.special_req': true
}, },
{ {
verified_email: true, verified_email: true,
@@ -464,22 +488,39 @@ UserSchema.statics.isUserQualified7 = async function (idapp, username) {
'profile.saw_zoom_presentation': true, 'profile.saw_zoom_presentation': true,
'profile.my_dream': { $exists: true }, 'profile.my_dream': { $exists: true },
'profile.email_paypal': { $exists: true }, 'profile.email_paypal': { $exists: true },
'profile.paymenttypes': { "$in": ['paypal'] },
$and: [ $and: [
{ "$expr": { "$gt": [{ "$strLenCP": "$profile.my_dream" }, 10] } }, { "$expr": { "$gt": [{ "$strLenCP": "$profile.my_dream" }, 10] } },
{ "$expr": { "$gt": [{ "$strLenCP": "$profile.email_paypal" }, 6] } } { "$expr": { "$gt": [{ "$strLenCP": "$profile.email_paypal" }, 6] } }
], ],
$where: "this.profile.paymenttypes.length >= 1", $where: "this.profile.paymenttypes.length >= 1",
}] }]
}); };
const myrec = await User.findOne(myquery);
return !!myrec; return !!myrec;
}; };
UserSchema.statics.isUserQualified9 = async function (idapp, username) {
const User = this;
if (username === undefined)
return false;
qualified = await User.isUserQualified7(idapp, username);
numinvitatiattivi = await User.getnumInvitatiAttivi(idapp, username);
return qualified && (numinvitatiattivi >= 2);
};
UserSchema.statics.getnumPaymentOk = function (idapp) { UserSchema.statics.getnumPaymentOk = function (idapp) {
const User = this; const User = this;
return User.count({ return User.count({
idapp, idapp,
'profile.paymenttypes': { "$in": ['paypal'] },
$where: "this.profile.paymenttypes.length >= 1", $where: "this.profile.paymenttypes.length >= 1",
'profile.email_paypal': { $exists: true }, 'profile.email_paypal': { $exists: true },
}); });
@@ -529,6 +570,21 @@ UserSchema.statics.findByLinkreg = function (idapp, linkreg) {
}); });
}; };
UserSchema.statics.AportadorOrig = function (idapp, id) {
const User = this;
return User.findOne({
'_id': id,
'idapp': idapp,
}).then((rec) => {
if (rec)
return rec.aportador_iniziale;
else
return '';
});
};
UserSchema.statics.findByLinkTokenforgot = function (idapp, email, tokenforgot) { UserSchema.statics.findByLinkTokenforgot = function (idapp, email, tokenforgot) {
const User = this; const User = this;
@@ -560,17 +616,17 @@ UserSchema.statics.findByIndOrder = function (idapp, ind_order) {
const User = this; const User = this;
try { try {
// ++Todo: non mettere tutti i campi !!
return User.findOne({ return User.findOne({
'idapp': idapp, idapp,
'ind_order': ind_order, ind_order,
}); });
} catch (e) { } catch (e) {
console.error(e);
} }
}; };
UserSchema.pre('save', function (next) { UserSchema.pre('save', function (next) {
const user = this; const user = this;
@@ -611,6 +667,29 @@ UserSchema.statics.getEmailByUsername = async function (idapp, username) {
}); });
}; };
UserSchema.statics.getUsernameById = async function (idapp, id) {
const User = this;
return await User.findOne({ idapp, _id: id }, { username: 1 })
.then((myuser) => {
return ((myuser) ? myuser.username : '');
}).catch((e) => {
});
};
UserSchema.statics.getUserById = function (idapp, id) {
const User = this;
return User.findOne({ idapp, _id: id })
};
UserSchema.statics.getUserByAportador = function (idapp, aportador_solidario) {
const User = this;
return User.findOne({ idapp, aportador_solidario })
};
UserSchema.statics.getAportadorSolidarioByUsername = async function (idapp, username) { UserSchema.statics.getAportadorSolidarioByUsername = async function (idapp, username) {
const User = this; const User = this;
@@ -633,6 +712,17 @@ UserSchema.statics.UserByIdTelegram = async function (idapp, teleg_id) {
}); });
}; };
UserSchema.statics.UsersByIdTelegram = async function (idapp, teleg_id) {
const User = this;
return await User.find({ idapp, 'profile.teleg_id': teleg_id })
.then((rec) => {
return (!!rec) ? rec._doc : null;
}).catch((e) => {
console.error('UserExistByIdTelegram', e);
});
};
UserSchema.statics.TelegIdByUsername = async function (idapp, username) { UserSchema.statics.TelegIdByUsername = async function (idapp, username) {
const User = this; const User = this;
@@ -705,6 +795,24 @@ UserSchema.statics.getNameSurnameByUsername = async function (idapp, username) {
}); });
}; };
UserSchema.statics.getSmallRecByIndOrder = async function (idapp, ind_order) {
const User = this;
return await User.findOne({ idapp, ind_order },
{
ind_order: 1,
username: 1,
name: 1,
surname: 1
}
)
.then((rec) => {
return rec;
}).catch((e) => {
console.error('getSmallRecByIndOrder', e);
});
};
UserSchema.statics.getusersManagers = async function (idapp) { UserSchema.statics.getusersManagers = async function (idapp) {
const User = this; const User = this;
@@ -717,15 +825,25 @@ UserSchema.statics.getusersManagers = async function (idapp) {
}); });
}; };
UserSchema.statics.getUsersTelegALL = async function (idapp) { UserSchema.statics.getUsersTelegALL = async function (idapp, username) {
const User = this; const User = this;
if (!!username) {
return await User.find({ idapp, username, 'profile.teleg_id': { $gt: 0 } })
.then((arrrec) => {
return (!!arrrec) ? arrrec : null;
}).catch((e) => {
console.error('getUsersTelegALL', e);
});
} else {
return await User.find({ idapp, 'profile.teleg_id': { $gt: 0 } }) return await User.find({ idapp, 'profile.teleg_id': { $gt: 0 } })
.then((arrrec) => { .then((arrrec) => {
return (!!arrrec) ? arrrec : null; return (!!arrrec) ? arrrec : null;
}).catch((e) => { }).catch((e) => {
console.error('getUsersTelegALL', e); console.error('getUsersTelegALL', e);
}); });
}
}; };
UserSchema.statics.isManagerByIdTeleg = async function (idapp, idtelegram) { UserSchema.statics.isManagerByIdTeleg = async function (idapp, idtelegram) {
@@ -851,13 +969,15 @@ UserSchema.statics.getDashboard = async function (idapp, aportador_solidario, us
dashboard.aportador = await ExtraList.getUserNotRegisteredByNameSurname(idapp, aportador_solidario_nome_completo); dashboard.aportador = await ExtraList.getUserNotRegisteredByNameSurname(idapp, aportador_solidario_nome_completo);
} }
dashboard.downline = [];
// Data of my Downline // Data of my Downline
const arrap = await User.getDownlineByUsername(idapp, aportador_solidario); const arrap = await User.getDownlineByUsername(idapp, aportador_solidario);
if (!!arrap)
dashboard.numpeople_aportador = arrap.length; dashboard.numpeople_aportador = arrap.length;
dashboard.downline = await User.getDownlineByUsername(idapp, username); dashboard.downline = await User.getDownlineByUsername(idapp, username);
dashboard.downnotreg = await ExtraList.getDownlineNotRegisteredByNameSurname(idapp, dashboard.myself.name + ' ' + dashboard.myself.surname); // dashboard.downnotreg = await ExtraList.getDownlineNotRegisteredByNameSurname(idapp, dashboard.myself.name + ' ' + dashboard.myself.surname);
dashboard.downbyuser = {}; dashboard.downbyuser = {};
@@ -868,6 +988,18 @@ UserSchema.statics.getDashboard = async function (idapp, aportador_solidario, us
dashboard.downbyuser[down2.username] = await User.getDownlineByUsername(idapp, down2.username); dashboard.downbyuser[down2.username] = await User.getDownlineByUsername(idapp, down2.username);
} }
} }
dashboard.arrnavi = await Nave.getArrPosizioniByIndOrder(idapp, dashboard.myself.ind_order);
dashboard.navi_partenza = [];
for (let indriga = 0; indriga < 10; indriga++) {
dashboard.navi_partenza.push(await Nave.getPrimaNaveByRiga(idapp, indriga));
}
for (let mynave of dashboard.arrnavi) {
mynave._doc.rec = await Nave.getNaveByRigaCol(idapp, mynave.riga, mynave.col);
}
return dashboard; return dashboard;
} catch (e) { } catch (e) {
console.error(e); console.error(e);
@@ -920,12 +1052,12 @@ UserSchema.statics.getUsersQualified = async function (idapp, numinvitati) {
idapp, idapp,
$or: [ $or: [
{ {
special_req: true 'profile.special_req': true
}, },
{ {
verified_email: true, verified_email: true,
'profile.teleg_id': { $gt: 0 }, 'profile.teleg_id': { $gt: 0 },
$where: "this.profile.paymenttypes.length >= 1", 'profile.paymenttypes': { "$in": ['paypal'] },
'profile.saw_and_accepted': shared_consts.ALL_SAW_AND_ACCEPTED, 'profile.saw_and_accepted': shared_consts.ALL_SAW_AND_ACCEPTED,
'profile.saw_zoom_presentation': true, 'profile.saw_zoom_presentation': true,
'profile.my_dream': { $exists: true }, 'profile.my_dream': { $exists: true },
@@ -1022,7 +1154,15 @@ UserSchema.statics.getLastUsers = async function (idapp) {
const lastn = await Settings.getValDbSettings(idapp, 'SHOW_LAST_N_USERS', 5); const lastn = await Settings.getValDbSettings(idapp, 'SHOW_LAST_N_USERS', 5);
return await User.find({ idapp }).sort({ date_temp_reg: -1 }).limit(lastn).then((arr) => { return await User.find({ idapp }, {
username: 1,
name: 1,
surname: 1,
date_temp_reg: 1,
date_reg: 1,
ind_order: 1,
'profile.nationality': 1,
}).sort({ date_temp_reg: -1 }).limit(lastn).then((arr) => {
//return JSON.stringify(arr) //return JSON.stringify(arr)
return arr return arr
}); });
@@ -1079,23 +1219,47 @@ UserSchema.statics.findAllDistinctNationality = async function (idapp) {
}; };
UserSchema.statics.getUsersRegDaily = function (idapp, nrec) { UserSchema.statics.getUsersRegDaily = function (idapp, nrec) {
const query = [ const query = [
{ {
$match: { idapp } $match: { idapp, date_temp_reg: { $gte: tools.IncDateNow(-(1000 * 60 * 60 * 24 * nrec)) } }
}, },
{ {
$group: { _id: { $dateToString: { format: "%Y-%m-%d", date: "$date_temp_reg" } }, count: { $sum: 1 } } $group: { _id: { $dateToString: { format: "%Y-%m-%d", date: "$date_temp_reg" } }, count: { $sum: 1 } }
}, },
{ {
$sort: { _id: 1 } $sort: { _id: 1 }
},
{
$limit: nrec
} }
]; ];
return query return query
}; };
UserSchema.statics.getnumRegNDays = function (idapp, nrec) {
const query = [
{
$match: { idapp, date_temp_reg: { $lt: tools.IncDateNow(-(1000 * 60 * 60 * 24 * nrec)) } }
},
{
$group: { _id: { $dateToString: { format: "%Y-%m-%d", date: "$date_temp_reg" } }, count: { $sum: 1 } }
},
{
$sort: { _id: 1 }
}
];
return query
};
UserSchema.statics.calcnumRegUntilDay = async function (idapp) {
const User = this;
return await User.aggregate(User.getnumRegNDays(idapp, 30))
.then((arr) => {
return arr.reduce((sum, rec) => sum + rec.count, 0);
});
};
UserSchema.statics.calcRegDaily = async function (idapp) { UserSchema.statics.calcRegDaily = async function (idapp) {
const User = this; const User = this;
@@ -1116,22 +1280,31 @@ if (tools.INITDB_FIRSTIME) {
// UserSchema.index({ surname: 1 }); // UserSchema.index({ surname: 1 });
} }
async function addUtentiInLista(idapp, mode) { async function addUtentiInLista(idapp, mode, arrusers) {
let num = 0; let num = 0;
for (const rec of arrusers) { for (const rec of arrusers) {
let ok = false; let ok = false;
let qualified = await User.isUserQualified7(idapp, rec.username); let qualified = await User.isUserQualified7(idapp, rec.username);
let numinvitatiattivi = await User.getnumInvitatiAttivi(idapp, rec.username); let numinvitatiattivi = await User.getnumInvitatiAttivi(idapp, rec.username);
let numinvitati = await User.getnumInvitati(idapp, rec.username);
if (rec.profile.special_req) {
numinvitatiattivi = 2;
}
if (mode === 1) { if (mode === 1) {
// 9 punti qualificati // 9 punti qualificati
ok = qualified && (numinvitatiattivi >= 2); ok = qualified && (numinvitatiattivi >= 2);
} else if (mode === 2) { } else if (mode === 2) {
// 8 punti qualificati ( 1 Invitato)
ok = qualified && (numinvitati === 2);
} else if (mode === 3) {
ok = qualified && (numinvitatiattivi === 1);
} else if (mode === 4) {
ok = qualified && (numinvitati === 1);
} else if (mode === 5) {
// 7 punti qualificati // 7 punti qualificati
ok = qualified; ok = qualified;
} else {
ok = true;
// // almeno telegram ID // // almeno telegram ID
// ok = user.profile.teleg_id > 0; // ok = user.profile.teleg_id > 0;
// } else { // } else {
@@ -1139,24 +1312,37 @@ async function addUtentiInLista(idapp, mode) {
} }
if (ok) { if (ok) {
if (!await ListaIngresso.findByUsername(idapp, rec.username)) { ris = await ListaIngresso.addUserInListaIngresso(idapp, rec.ind_order, rec.lang, false, 1);
let listaingresso = new ListaIngresso({ if (!!ris)
username: rec.username,
ind_order: rec.ind_order,
name: rec.name,
surname: rec.surname,
idapp,
_id: new ObjectID()
});
await listaingresso.save();
num++; num++;
} }
} }
}
return num; return num;
} }
UserSchema.statics.deveRitessersi = async function (idapp, ind_order) {
const myrec = await User.findOne({
'idapp': idapp,
'ind_order': ind_order,
"profile.vuole_ritessersi": true
});
return (!!myrec)
};
UserSchema.statics.getUsernameByIndOrder = async function (idapp, ind_order) {
const myrec = await User.findOne({
'idapp': idapp,
'ind_order': ind_order,
}, { username: 1 });
return (!!myrec) ? myrec.username : ''
};
UserSchema.statics.DbOp = async function (idapp, mydata) { UserSchema.statics.DbOp = async function (idapp, mydata) {
const User = this; const User = this;
try { try {
@@ -1190,26 +1376,21 @@ UserSchema.statics.DbOp = async function (idapp, mydata) {
} else if (mydata.dbop === 'creaLista') { } else if (mydata.dbop === 'creaLista') {
await ListaIngresso.remove({ idapp }); await ListaIngresso.deleteMany({ idapp, added: false });
arrusers = await User.find({ 'idapp': idapp }).sort({ ind_order: 1 }); arrusers = await User.find({ 'idapp': idapp }).sort({ ind_order: 1 });
let num = 0; let num = 0;
num += await addUtentiInLista(idapp, 1); num += await addUtentiInLista(idapp, 1, arrusers);
num += await addUtentiInLista(idapp, 2); num += await addUtentiInLista(idapp, 2, arrusers);
num += await addUtentiInLista(idapp, 3, arrusers);
num += await addUtentiInLista(idapp, 4, arrusers);
num += await addUtentiInLista(idapp, 5, arrusers);
// num += await addUtentiInLista(idapp, 3); // num += await addUtentiInLista(idapp, 3);
// num += await addUtentiInLista(idapp, 4); // num += await addUtentiInLista(idapp, 4);
return { num }; return { num };
} else if (mydata.dbop === 'creaBillettera') {
const num = await Billettera.generaBillettera(idapp);
return { num };
} else if (mydata.dbop === 'visuPlacca') {
const placca = await Billettera.getPlaccaByFuoco(idapp, riga, col);
return { placca };
} }
} catch (e) { } catch (e) {
console.error(e); console.error(e);

View File

@@ -1,14 +1,36 @@
var mongoose = require('mongoose'); var mongoose = require('mongoose');
const Subscription = mongoose.model('subscribers'); const Subscription = mongoose.model('subscribers');
const { ListaIngresso } = require('../../models/listaingresso');
const { User } = require('../../models/user');
const telegrambot = require('../../telegram/telegrambot');
module.exports = { module.exports = {
doOtherThingsAfterDeleted: async function (tablename, rec) { doOtherThingsAfterDeleted: async function (tablename, rec) {
try { try {
if (tablename === 'users') { if (tablename === 'users') {
await ListaIngresso.deleteUserInListaIngresso(rec.idapp, rec.ind_order);
// Controlla se aveva invitati, li regala a quello sopra
const arrap = await User.getDownlineByUsername(rec.idapp, rec.username);
for (let user of arrap) {
await User.findOneAndUpdate({
idapp: rec.idapp,
username: user.username
}, { $set: { aportador_solidario: rec.aportador_solidario } }, { new: false });
let msg = 'Spostato ' + user.name + ' ' + user.surname + ' sotto di ' + rec.aportador_solidario;
telegrambot.sendMsgTelegramToTheManagers(idapp, msg);
}
// Delete also all the subscribers record of this User // Delete also all the subscribers record of this User
return Subscription.deleteOne({ userId: rec._id }) return Subscription.deleteOne({ userId: rec._id })
} }
} catch (e) { } catch (e) {
console.error(e);
return false return false
} }
return true; return true;

View File

@@ -12,6 +12,8 @@ const { User } = require('../models/user');
const mongoose = require('mongoose'); const mongoose = require('mongoose');
const Subscription = mongoose.model('subscribers'); const Subscription = mongoose.model('subscribers');
const telegrambot = require('../telegram/telegrambot');
const _ = require('lodash'); const _ = require('lodash');
const { ObjectID } = require('mongodb'); const { ObjectID } = require('mongodb');
@@ -49,4 +51,14 @@ router.post('/', authenticate, async (req, res) => {
}); });
router.post('/msgnave', authenticate, async (req, res) => {
const idapp = req.body.idapp;
let mydata = req.body;
const ris = await telegrambot.sendMsgTelegramToNave(idapp, mydata);
res.send({ code: server_constants.RIS_CODE_OK, ris });
});
module.exports = router; module.exports = router;

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -12,6 +12,7 @@ const sendemail = require('../sendemail');
const { authenticate, authenticate_noerror } = require('../middleware/authenticate'); const { authenticate, authenticate_noerror } = require('../middleware/authenticate');
const { ObjectID } = require('mongodb'); const { ObjectID } = require('mongodb');
const { ListaIngresso } = require('../models/listaingresso');
const mongoose = require('mongoose'); const mongoose = require('mongoose');
const cfgserver = mongoose.model('cfgserver'); const cfgserver = mongoose.model('cfgserver');
@@ -27,6 +28,7 @@ if (!fs.existsSync(folder)) {
const _ = require('lodash'); const _ = require('lodash');
const { User } = require('../models/user'); const { User } = require('../models/user');
const { Nave } = require('../models/nave');
const { ExtraList } = require('../models/extralist'); const { ExtraList } = require('../models/extralist');
const { Booking } = require('../models/booking'); const { Booking } = require('../models/booking');
const { Operator } = require('../models/operator'); const { Operator } = require('../models/operator');
@@ -52,6 +54,15 @@ const tools = require('../tools/general');
const server_constants = require('../tools/server_constants'); const server_constants = require('../tools/server_constants');
const actions = require('./api/actions'); const actions = require('./api/actions');
UserCost = {
FIELDS_REQUISITI: ['verified_email',
'profile.teleg_id',
'profile.saw_zoom_presentation',
'profile.saw_and_accepted',
'profile.email_paypal',
'profile.my_dream',
'profile.paymenttypes']
};
router.post(process.env.LINKVERIF_REG, (req, res) => { router.post(process.env.LINKVERIF_REG, (req, res) => {
const body = _.pick(req.body, ['idapp', 'idlink']); const body = _.pick(req.body, ['idapp', 'idlink']);
@@ -77,7 +88,10 @@ router.post(process.env.LINKVERIF_REG, (req, res) => {
user.lasttimeonline = new Date(); user.lasttimeonline = new Date();
user.save().then(() => { user.save().then(() => {
//console.log("TROVATOOOOOO!"); //console.log("TROVATOOOOOO!");
res.send({ code: server_constants.RIS_CODE_EMAIL_VERIFIED, msg: tools.getres__('EMAIL', res) + ' ' + tools.getres__('VERIF', res) }); res.send({
code: server_constants.RIS_CODE_EMAIL_VERIFIED,
msg: tools.getres__('EMAIL', res) + ' ' + tools.getres__('VERIF', res)
});
}); });
} }
} }
@@ -93,7 +107,7 @@ router.post(process.env.LINKVERIF_REG, (req, res) => {
router.post(process.env.LINK_REQUEST_NEWPASSWORD, (req, res) => { router.post(process.env.LINK_REQUEST_NEWPASSWORD, (req, res) => {
const body = _.pick(req.body, ['idapp', 'email']); const body = _.pick(req.body, ['idapp', 'email']);
const idapp = body.idapp; const idapp = body.idapp;
const email = body.email; const email = body.email.toLowerCase().trim();
console.log("POST " + process.env.LINK_REQUEST_NEWPASSWORD + " idapp= " + idapp + " email = " + email); console.log("POST " + process.env.LINK_REQUEST_NEWPASSWORD + " idapp= " + idapp + " email = " + email);
User.findByEmail(idapp, email).then(async (user) => { User.findByEmail(idapp, email).then(async (user) => {
@@ -124,7 +138,7 @@ router.post(process.env.LINK_REQUEST_NEWPASSWORD, (req, res) => {
router.post(process.env.LINK_UPDATE_PWD, (req, res) => { router.post(process.env.LINK_UPDATE_PWD, (req, res) => {
const body = _.pick(req.body, ['idapp', 'email', 'tokenforgot', 'password']); const body = _.pick(req.body, ['idapp', 'email', 'tokenforgot', 'password']);
const idapp = body.idapp; const idapp = body.idapp;
const email = body.email; const email = body.email.toLowerCase().trim();
const tokenforgot = body.tokenforgot; const tokenforgot = body.tokenforgot;
const password = body.password; const password = body.password;
const msg = "Richiesta Nuova Password: idapp= " + idapp + " email = " + email; const msg = "Richiesta Nuova Password: idapp= " + idapp + " email = " + email;
@@ -198,6 +212,10 @@ function getTableByTableName(tablename) {
mytable = Permission; mytable = Permission;
else if (tablename === 'mailinglist') else if (tablename === 'mailinglist')
mytable = MailingList; mytable = MailingList;
else if (tablename === 'navi')
mytable = Nave;
else if (tablename === 'listaingressos')
mytable = ListaIngresso;
return mytable return mytable
} }
@@ -255,8 +273,63 @@ router.post('/gettable', authenticate, (req, res) => {
}); });
async function checkIfSbloccatiRequisiti(idapp, allData, id) {
router.patch('/chval', authenticate, (req, res) => { if (await Nave.findByIndOrder(idapp, allData.myuser.ind_order)) {
// Se già sei dentro la Nave, allora sei OK
return true;
}
// Controlla se Sblocca i 7 requisiti
const is7req = await User.isUserQualified7(idapp, allData.myuser.username);
const is9req = await User.isUserQualified9(idapp, allData.myuser.username);
const userlista = await ListaIngresso.findByIndOrder(idapp, allData.myuser.ind_order);
if (!userlista) {
// Se non sono ancora dentro alla lista, allora controllo
if (!allData.precDataUser.is7req && is7req) {
// ORA HAI I 7 REQUISITI !
const msgtext = telegrambot.getCiao(idapp, allData.myuser.username, allData.myuser.lang) + tools.gettranslate('HAI_I_7_REQUISITI', allData.myuser.lang);
telegrambot.sendMsgTelegram(idapp, allData.myuser.username, msgtext, true); // Anche a STAFF
if (tools.isAbilitaNave(idapp)) {
// Aggiungilo alla ListaIngresso
ris = await ListaIngresso.addUserInListaIngresso(idapp, allData.myuser.ind_order, allData.myuser.lang, true, 1);
}
}
}
if (!allData.precDataUser.is9req && is9req) {
// ORA HAI I 9 REQUISITI !
const msgtext = telegrambot.getCiao(idapp, allData.myuser.username, allData.myuser.lang) + tools.gettranslate('HAI_I_9_REQUISITI', allData.myuser.lang);
telegrambot.sendMsgTelegram(idapp, allData.myuser.username, msgtext, true); // Anche a STAFF
}
// CHECK APORTADOR SOLIDARIO:
if (!!allData.useraportador) {
const is9reqAportador = await User.isUserQualified9(idapp, allData.myuser.aportador_solidario);
if (!allData.precDataAportador.is9req && is9reqAportador) {
// ORA HAI I 9 REQUISITI !
const msgtext = telegrambot.getCiao(idapp, allData.myuser.aportador_solidario, allData.useraportador.lang) + tools.gettranslate('HAI_I_9_REQUISITI', allData.useraportador.lang);
telegrambot.sendMsgTelegram(idapp, allData.useraportador.username, msgtext, true); // Anche a STAFF
}
}
}
async function getInfoUser(idapp, username) {
return {
username,
is7req: await User.isUserQualified7(idapp, username),
is9req: await User.isUserQualified9(idapp, username),
}
}
router.patch('/chval', authenticate, async (req, res) => {
// const idapp = req.body.idapp; // const idapp = req.body.idapp;
const id = req.body.data.id; const id = req.body.data.id;
const idapp = req.body.idapp; const idapp = req.body.idapp;
@@ -265,7 +338,7 @@ router.patch('/chval', authenticate, (req, res) => {
const mytable = getTableByTableName(mydata.table); const mytable = getTableByTableName(mydata.table);
const fieldsvalue = mydata.fieldsvalue; const fieldsvalue = mydata.fieldsvalue;
tools.mylogshow('PATCH CHVAL: ', id, fieldsvalue); // tools.mylogshow('PATCH CHVAL: ', id, fieldsvalue);
// If I change my record... // If I change my record...
if ((!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) && !(req.user._id.toString() === id) && !tools.ModificheConsentite(mydata.table, fieldsvalue)) { if ((!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) && !(req.user._id.toString() === id) && !tools.ModificheConsentite(mydata.table, fieldsvalue)) {
@@ -273,7 +346,20 @@ router.patch('/chval', authenticate, (req, res) => {
return res.status(404).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' }); return res.status(404).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
} }
mytable.findByIdAndUpdate(id, { $set: fieldsvalue }).then(async (rec) => { const camporequisiti = UserCost.FIELDS_REQUISITI.includes(Object.keys(fieldsvalue)[0]);
let allData = {};
if (mydata.table === 'users') {
if (camporequisiti) {
allData = {};
allData.myuser = await User.getUserById(idapp, id);
allData.precDataUser = await getInfoUser(idapp, allData.myuser.username);
allData.useraportador = await User.getUserByAportador(idapp, allData.myuser.aportador_solidario);
allData.precDataAportador = await getInfoUser(idapp, allData.myuser.aportador_solidario);
}
}
await mytable.findByIdAndUpdate(id, { $set: fieldsvalue }).then(async (rec) => {
// tools.mylogshow(' REC TO MODIFY: ', rec); // tools.mylogshow(' REC TO MODIFY: ', rec);
if (!rec) { if (!rec) {
return res.status(404).send(); return res.status(404).send();
@@ -285,6 +371,12 @@ router.patch('/chval', authenticate, (req, res) => {
telegrambot.sendMsgTelegramToTheManagers(idapp, addtext); telegrambot.sendMsgTelegramToTheManagers(idapp, addtext);
} }
if (mydata.table === 'users') {
if (camporequisiti) {
await checkIfSbloccatiRequisiti(idapp, allData, id);
}
}
if (tools.ModificheConsentite(mydata.table, fieldsvalue)) { if (tools.ModificheConsentite(mydata.table, fieldsvalue)) {
let msg = ''; let msg = '';
if (mydata.table === 'users') { if (mydata.table === 'users') {
@@ -294,9 +386,15 @@ router.patch('/chval', authenticate, (req, res) => {
msg = `Variato l'invitante di ` + rec.name + ' ' + rec.surname + '\nmodificato da ' + req.user.name + ' ' + req.user.surname + ' \n' + msg = `Variato l'invitante di ` + rec.name + ' ' + rec.surname + '\nmodificato da ' + req.user.name + ' ' + req.user.surname + ' \n' +
'Prima: ' + nomecognomeas + ' (' + rec.aportador_solidario + ')\n' + 'Prima: ' + nomecognomeas + ' (' + rec.aportador_solidario + ')\n' +
'Dopo: ' + nomecognomenuovo + ' (' + fieldsvalue.aportador_solidario + ') ]'; 'Dopo: ' + nomecognomenuovo + ' (' + fieldsvalue.aportador_solidario + ') ]';
// Metti l'iniziale
if (!await User.AportadorOrig(id)) {
await mytable.findByIdAndUpdate(id, { $set: { aportador_iniziale: fieldsvalue.aportador_solidario } }, { new: false });
} }
} }
}
if (msg !== '') if (msg !== '')
telegrambot.sendMsgTelegramToTheManagers(idapp, msg); telegrambot.sendMsgTelegramToTheManagers(idapp, msg);
} }
@@ -351,7 +449,9 @@ router.delete('/delrec/:table/:id', authenticate, (req, res) => {
const mytable = getTableByTableName(tablename); const mytable = getTableByTableName(tablename);
if ((!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) && (tablename !== 'extralist')) { const fields = { 'ALL': 1 };
if ((!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) && (tablename !== 'extralist') && !tools.ModificheConsentite(tablename, fields, id, req.user)) {
// If without permissions, exit // If without permissions, exit
return res.status(404).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' }); return res.status(404).send({ code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: '' });
} }
@@ -366,7 +466,7 @@ router.delete('/delrec/:table/:id', authenticate, (req, res) => {
tools.mylog('DELETED ', rec._id); tools.mylog('DELETED ', rec._id);
// Do extra things after deleted // Do extra things after deleted
return actions.doOtherThingsAfterDeleted(tablename, rec).then((ris) => { return actions.doOtherThingsAfterDeleted(tablename, rec).then(async (ris) => {
if (ris) { if (ris) {
if (notifBot) { if (notifBot) {
@@ -378,7 +478,7 @@ router.delete('/delrec/:table/:id', authenticate, (req, res) => {
addtext = 'Eliminato il Record "' + nomerecord + '" dalla tabella ' + tablename + '\n' + addtext = 'Eliminato il Record "' + nomerecord + '" dalla tabella ' + tablename + '\n' +
'Eseguito da ' + req.user.name + ' ' + req.user.surname + ' \n'; 'Eseguito da ' + req.user.name + ' ' + req.user.surname + ' \n';
telegrambot.sendMsgTelegramToTheManagers(idapp, addtext); await telegrambot.sendMsgTelegramToTheManagers(idapp, addtext);
} }
tools.mylog('DELETED Others things ...'); tools.mylog('DELETED Others things ...');
@@ -549,7 +649,8 @@ router.get(process.env.LINK_CHECK_UPDATES, authenticate, (req, res) => {
// If User is Admin, then send user Lists // If User is Admin, then send user Lists
if (User.isAdmin(req.user.perm)) { if (User.isAdmin(req.user.perm)) {
// Send UsersList // Send UsersList
usersList = User.getUsersList(req.user.idapp) // usersList = User.getUsersList(req.user.idapp)
usersList = null;
} }
} }

View File

@@ -29,13 +29,14 @@ router.post('/load', async (req, res) => {
email_non_verif: await User.getEmailNotVerified(idapp), email_non_verif: await User.getEmailNotVerified(idapp),
num_teleg_attivo: await User.getUsersTelegramAttivo(idapp), num_teleg_attivo: await User.getUsersTelegramAttivo(idapp),
num_teleg_pending: await User.getUsersTelegramPending(idapp), num_teleg_pending: await User.getUsersTelegramPending(idapp),
num_qualificati: await User.getNumUsersQualified(idapp, 2), // num_qualificati: await User.getNumUsersQualified(idapp, 2),
num_requisiti: await User.getNumUsersQualified(idapp, 0), num_requisiti: await User.getNumUsersQualified(idapp, 0),
num_modalita_pagamento: await User.getnumPaymentOk(idapp), num_modalita_pagamento: await User.getnumPaymentOk(idapp),
num_part_zoom: await User.getUsersZoom(idapp), num_part_zoom: await User.getUsersZoom(idapp),
num_part_accepted: await User.getSaw_and_Accepted(idapp), num_part_accepted: await User.getSaw_and_Accepted(idapp),
num_users_dream: await User.getUsersDreams(idapp), num_users_dream: await User.getUsersDreams(idapp),
arr_nations: await User.findAllDistinctNationality(idapp), arr_nations: await User.findAllDistinctNationality(idapp),
numreg_untilday: await User.calcnumRegUntilDay(idapp),
reg_daily: await User.calcRegDaily(idapp), reg_daily: await User.calcRegDaily(idapp),
lastsreg: await User.getLastUsers(idapp), lastsreg: await User.getLastUsers(idapp),
checkuser: await User.checkUser(idapp, username), checkuser: await User.checkUser(idapp, username),

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 561 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -2,10 +2,15 @@ const express = require('express');
const router = express.Router(); const router = express.Router();
const { User } = require('../models/user'); const { User } = require('../models/user');
const { Nave } = require('../models/nave');
const { ListaIngresso } = require('../models/listaingresso');
const { ExtraList } = require('../models/extralist'); const { ExtraList } = require('../models/extralist');
const { ObjectID } = require('mongodb');
const sendemail = require('../sendemail'); const sendemail = require('../sendemail');
const { Settings } = require('../models/settings');
const tools = require('../tools/general'); const tools = require('../tools/general');
const shared_consts = require('../tools/shared_nodejs'); const shared_consts = require('../tools/shared_nodejs');
@@ -47,10 +52,10 @@ function getMobileComplete(user) {
router.post('/', async (req, res) => { router.post('/', async (req, res) => {
tools.mylog("POST /users"); tools.mylog("POST /users");
const body = _.pick(req.body, ['email', 'password', 'username', 'name', 'surname', 'idapp', 'keyappid', 'lang', 'profile', 'aportador_solidario']); const body = _.pick(req.body, ['email', 'password', 'username', 'name', 'surname', 'idapp', 'keyappid', 'lang', 'profile', 'aportador_solidario']);
const user = new User(body);
body.email = body.email.toLowerCase(); body.email = body.email.toLowerCase();
const user = new User(body);
// tools.mylog("LANG PASSATO = " + user.lang, "IDAPP", user.idapp); // tools.mylog("LANG PASSATO = " + user.lang, "IDAPP", user.idapp);
user.linkreg = reg.getlinkregByEmail(body.idapp, body.email, body.username); user.linkreg = reg.getlinkregByEmail(body.idapp, body.email, body.username);
@@ -59,6 +64,10 @@ router.post('/', async (req, res) => {
user.lasttimeonline = new Date(); user.lasttimeonline = new Date();
user.date_reg = new Date(); user.date_reg = new Date();
user.date_temp_reg = new Date(); user.date_temp_reg = new Date();
user.aportador_iniziale = user.aportador_solidario;
if (user.idapp === tools.AYNI) {
user.profile.paymenttypes = ['paypal'];
}
// user.perm = 3; // user.perm = 3;
if (tools.testing()) { if (tools.testing()) {
user.verified_email = true; user.verified_email = true;
@@ -147,7 +156,7 @@ router.post('/', async (req, res) => {
msgseconda += 'QUARTA'; msgseconda += 'QUARTA';
msgseconda += ' UTENZA di ' + recorig.name + ' ' + recorig.surname + ' (' + recorig.username + ') : ' + user.name + ' ' + user.surname + ' (' + user.username + ') '; msgseconda += ' UTENZA di ' + recorig.name + ' ' + recorig.surname + ' (' + recorig.username + ') : ' + user.name + ' ' + user.surname + ' (' + user.username + ') ';
telegrambot.sendMsgTelegramToTheManagers(user.idapp, msgseconda); await telegrambot.sendMsgTelegramToTheManagers(user.idapp, msgseconda);
} }
} }
@@ -158,7 +167,7 @@ router.post('/', async (req, res) => {
let msg = 'L\'utente ' + user.name + ' ' + user.surname + ' si sta registrando con il link di ' + user.aportador_solidario + ' (' + namesurname_aportador_reg + ') ' + let msg = 'L\'utente ' + user.name + ' ' + user.surname + ' si sta registrando con il link di ' + user.aportador_solidario + ' (' + namesurname_aportador_reg + ') ' +
'invece è assegnato a ' + nomeaportador_corretto; 'invece è assegnato a ' + nomeaportador_corretto;
telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg); await telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg);
res.status(400).send({ code: server_constants.RIS_CODE_USER_NOT_THIS_APORTADOR, msg: '' }); res.status(400).send({ code: server_constants.RIS_CODE_USER_NOT_THIS_APORTADOR, msg: '' });
return 1; return 1;
} }
@@ -173,8 +182,11 @@ router.post('/', async (req, res) => {
if (!recextra) { if (!recextra) {
const msg = 'Utente non trovato: ' + user.name + ' ' + user.surname + ' ' + user.profile.nationality + ' ' + user.profile.cell + ' email: ' + user.email + ' username: ' + user.username; const msg = 'Utente non trovato: ' + user.name + ' ' + user.surname + ' ' + user.profile.nationality + ' ' + user.profile.cell + ' email: ' + user.email + ' username: ' + user.username;
console.log('Utente non trovato; ', msg); console.log('Utente non trovato; ', msg);
telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg); await telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg);
res.status(400).send({ code: server_constants.RIS_CODE_USER_EXTRALIST_NOTFOUND, msg: 'Controlla se il numero ' + user.profile.cell + ' è corretto.' }); res.status(400).send({
code: server_constants.RIS_CODE_USER_EXTRALIST_NOTFOUND,
msg: 'Controlla se il numero ' + user.profile.cell + ' è corretto.'
});
return 1; return 1;
} else { } else {
user.ind_order = recextra.ind_order; user.ind_order = recextra.ind_order;
@@ -244,11 +256,11 @@ router.post('/', async (req, res) => {
}) })
}); });
router.get('/:idapp/:username', (req, res) => { router.get('/:idapp/:username', async (req, res) => {
var username = req.params.username; var username = req.params.username;
const idapp = req.params.idapp; const idapp = req.params.idapp;
User.findByUsername(idapp, username, false).then((user) => { await User.findByUsername(idapp, username, false).then((user) => {
if (!user) { if (!user) {
return res.status(404).send(); return res.status(404).send();
} }
@@ -397,17 +409,130 @@ router.post('/import_extralist', async (req, res) => {
res.send(ris); res.send(ris);
}); });
router.post('/dbop', async (req, res) => { router.post('/dbop', authenticate, async (req, res) => {
const mydata = req.body.mydata; const mydata = req.body.mydata;
idapp = req.body.idapp; idapp = req.body.idapp;
locale = req.body.locale; locale = req.body.locale;
const ris = await User.DbOp(idapp, mydata); let ris = await User.DbOp(idapp, mydata);
console.log('ris', ris);
if (mydata.dbop === 'creaNave') {
const num = await Nave.generaNave(idapp, mydata);
ris = { num };
} else if (mydata.dbop === 'delNavi') {
await Nave.setRiga(idapp, 1);
await Nave.setCol(idapp, 1);
const num = await Nave.remove({ idapp });
ris = { num };
} else if (mydata.dbop === 'delNaviNoStarted') {
await Nave.setRiga(idapp, 1);
await Nave.setCol(idapp, 1);
const num = await Nave.remove({ idapp, date_start : { $gte: tools.IncDateNow(-1000 * 60 * 60 * 24 * 3) } });
ris = { num };
} else if (mydata.dbop === 'visuListaNave') {
const mystr = await Nave.showListaOrd(idapp);
ris = { mystr };
} else if (mydata.dbop === 'checkInserimentiUtentiInNave') {
const mystr = await Nave.checkIfDevoAggiungereInNave(idapp);
ris = { mystr };
} else if (mydata.dbop === 'visuListaIngresso') {
const mystr = await ListaIngresso.showListaOrd(idapp);
ris = { mystr };
} else if (mydata.dbop === 'initListaIngresso') {
const num = await ListaIngresso.updateMany({ idapp }, { $set: { added: false } });
ris = { num };
} else if (mydata.dbop === 'ImpostaATuttiPaypal') {
const listautenti = await User.find({ idapp });
let num = 0;
for (let rec of listautenti) {
if (!rec._doc.profile.paymenttypes.includes('paypal')) {
rec._doc.profile.paymenttypes = [...rec._doc.profile.paymenttypes, 'paypal'];
const user = await User.findOneAndUpdate({ _id: rec._id }, { $set: { 'profile.paymenttypes': rec._doc.profile.paymenttypes } });
// await rec.save();
num++;
}
// const num = await User.f({ idapp }, { $set: { 'profile: false } });
}
ris = { num };
} else if (mydata.dbop === 'numtessUno') {
const listanavi = await ListaIngresso.find({ idapp });
let num = 0;
for (let rec of listanavi) {
if (!rec._doc.num_tess) {
rec._doc.num_tess = 1;
const risu = await ListaIngresso.findOneAndUpdate({ _id: rec._id }, { $set: { num_tess: rec._doc.num_tess } }, { new: false });
// await rec.save();
if (!!risu)
num++;
}
// const num = await User.f({ idapp }, { $set: { 'profile: false } });
}
ris = { num };
} else if (mydata.dbop === 'creaUtentiTest') {
let num = 0;
lastrec = await User.find({ idapp }).sort({ _id: -1 }).limit(1);
for (let ind = 0; ind < 1; ind++) {
let myuser = new User();
myuser._id = new ObjectID();
myuser.ind_order = lastrec[0].ind_order + ind + 1;
myuser.idapp = idapp;
myuser.password = "$2a$12$DEaX1h5saTUVC43f7kubyOAlah1xHDgqQTfSIux0.RFDT9WGbyCaG";
myuser.lang = 'it';
myuser.email = "miaemail@email.it";
myuser.name = 'U' + myuser.ind_order;
myuser.verified_email = true;
if (myuser.ind_order < 2)
myuser.perm = "3";
myuser.username = "Userna_" + myuser.name;
myuser.profile.special_req = true;
await myuser.save();
num++;
}
ris = { num };
} else if (mydata.dbop === 'visuPlacca') {
const placca = await Nave.getPlaccaPerDonatore(idapp, parseInt(mydata.riga), parseInt(mydata.col));
telegrambot.sendMsgTelegramToTheAdmin(idapp, placca);
ris = { placca };
} else if (mydata.dbop === 'visuNave') {
const mystr = await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col));
const visu_nave_Bot = await Settings.getValDbSettings(idapp, 'VISU_NAVE_BOT');
if (visu_nave_Bot)
telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr);
ris = { mystr };
} else if (mydata.dbop === 'getnavibyuser') {
let arrnavi = null;
const user = await User.getUserShortDataByUsername(idapp, mydata.username);
if (user) {
arrnavi = await Nave.getArrPosizioniByIndOrder(idapp, user.ind_order);
for (let mynave of arrnavi) {
mynave._doc.rec = await Nave.getNaveByRigaCol(idapp, mynave.riga, mynave.col);
}
}
ris = { data: arrnavi };
}
// console.log('ris', ris);
res.send(ris); res.send(ris);
}); }
);
module.exports = router; module.exports = router;

View File

@@ -496,7 +496,7 @@ module.exports = {
const msginizio = 'INIZIO - sendEmail_Newsletter_Events: ' + tools.getNomeAppByIdApp(idapp); const msginizio = 'INIZIO - sendEmail_Newsletter_Events: ' + tools.getNomeAppByIdApp(idapp);
console.log(msginizio); console.log(msginizio);
telegrambot.sendMsgTelegramToTheManagers(idapp, msginizio); await telegrambot.sendMsgTelegramToTheManagers(idapp, msginizio);
//++Todo Extract List Email to send //++Todo Extract List Email to send
const userstosend = await MailingList.findAllIdAppSubscribed(idapp); const userstosend = await MailingList.findAllIdAppSubscribed(idapp);
@@ -539,7 +539,7 @@ module.exports = {
if (!activate) { if (!activate) {
// Invio Newsletter Abortito! // Invio Newsletter Abortito!
mynewsrec.error_job = 'Invio Newsletter abortito alle ore ' + new Date().toDateString() + new Date().toTimeString(); mynewsrec.error_job = 'Invio Newsletter abortito alle ore ' + new Date().toDateString() + new Date().toTimeString();
telegrambot.sendMsgTelegramToTheManagers(idapp, mynewsrec.error_job); await telegrambot.sendMsgTelegramToTheManagers(idapp, mynewsrec.error_job);
await mynewsrec.save(); await mynewsrec.save();
await Newstosent.processingJob(id_newstosent, false); await Newstosent.processingJob(id_newstosent, false);
console.log('*** L\'Invio della Newsletter è stato fermato ! '); console.log('*** L\'Invio della Newsletter è stato fermato ! ');
@@ -567,7 +567,7 @@ module.exports = {
if ((mynewsrec.numemail_sent % 50) === 0) { if ((mynewsrec.numemail_sent % 50) === 0) {
const msgproc = 'In Corso ' + mynewsrec.numemail_sent + ' / ' + mynewsrec.numemail_tot + ' Email inviate...'; const msgproc = 'In Corso ' + mynewsrec.numemail_sent + ' / ' + mynewsrec.numemail_tot + ' Email inviate...';
telegrambot.sendMsgTelegramToTheManagers(idapp, msgproc); await telegrambot.sendMsgTelegramToTheManagers(idapp, msgproc);
} }
//Put the result in the database, to check if is sent or not. //Put the result in the database, to check if is sent or not.
@@ -591,7 +591,7 @@ module.exports = {
} catch (e) { } catch (e) {
const msgerr = 'Error LOOP sendEmail_Newsletter_Events: ' + e; const msgerr = 'Error LOOP sendEmail_Newsletter_Events: ' + e;
console.error(msgerr); console.error(msgerr);
telegrambot.sendMsgTelegramToTheManagers(idapp, msgerr); await telegrambot.sendMsgTelegramToTheManagers(idapp, msgerr);
} }
} }
@@ -601,7 +601,7 @@ module.exports = {
msgfine += mynewsrec.numemail_sent + ' Email inviate'; msgfine += mynewsrec.numemail_sent + ' Email inviate';
console.log(msgfine); console.log(msgfine);
telegrambot.sendMsgTelegramToTheManagers(idapp, msgfine); await telegrambot.sendMsgTelegramToTheManagers(idapp, msgfine);
} catch (e) { } catch (e) {
@@ -610,7 +610,7 @@ module.exports = {
if (!activate) { if (!activate) {
// Invio Newsletter Abortito! // Invio Newsletter Abortito!
mynewsrec.error_job = 'Invio Newsletter abortito alle ore ' + new Date().toDateString() + new Date().toTimeString(); mynewsrec.error_job = 'Invio Newsletter abortito alle ore ' + new Date().toDateString() + new Date().toTimeString();
telegrambot.sendMsgTelegramToTheManagers(idapp, mynewsrec.error_job); await telegrambot.sendMsgTelegramToTheManagers(idapp, mynewsrec.error_job);
await mynewsrec.save(); await mynewsrec.save();
await Newstosent.processingJob(id_newstosent, false); await Newstosent.processingJob(id_newstosent, false);
console.log('*** L\'Invio della Newsletter è stato fermato ! '); console.log('*** L\'Invio della Newsletter è stato fermato ! ');

View File

@@ -9,6 +9,7 @@ const printf = require('util').format;
const { User } = require('../models/user'); const { User } = require('../models/user');
const { CalZoom } = require('../models/calzoom'); const { CalZoom } = require('../models/calzoom');
const { Nave } = require('../models/nave');
const shared_consts = require('../tools/shared_nodejs'); const shared_consts = require('../tools/shared_nodejs');
const emoji = require('node-emoji'); const emoji = require('node-emoji');
@@ -48,6 +49,7 @@ const emo = {
YELLOW_HEART: emoji.get('yellow_heart'), YELLOW_HEART: emoji.get('yellow_heart'),
PURPLE_HEART: emoji.get('purple_heart'), PURPLE_HEART: emoji.get('purple_heart'),
GIFT_HEART: emoji.get('gift_heart'), GIFT_HEART: emoji.get('gift_heart'),
GIFT: emoji.get('gift'),
ROBOT_FACE: emoji.get('robot_face'), ROBOT_FACE: emoji.get('robot_face'),
ADMIN: emoji.get('information_desk_person'), ADMIN: emoji.get('information_desk_person'),
MALE: emoji.get('man-tipping-hand'), MALE: emoji.get('man-tipping-hand'),
@@ -59,7 +61,9 @@ const emo = {
MsgBot = { MsgBot = {
CIAO: ['ciao', 'ciaoo', 'hola', 'holaa', 'hey', 'salve', 'buongiorno', 'buondi'], MIANAVE: ['Nave'],
CIAO: ['ciao', 'ciaoo', 'hola', 'holaa', 'hey', 'salve', 'buongiorno', 'buondi', 'ciao ❤️'],
CI_SEI: ['ci sei', 'c\'è qualcuno', 'c\'è nessuno'], CI_SEI: ['ci sei', 'c\'è qualcuno', 'c\'è nessuno'],
CHI_SONO_IO: ['chi sono io', 'chi sono'], CHI_SONO_IO: ['chi sono io', 'chi sono'],
COME_STAI: ['tutto bene', 'come stai', 'come stai', 'come va', 'come butta', 'come va oggi'], COME_STAI: ['tutto bene', 'come stai', 'come stai', 'come va', 'come butta', 'come va oggi'],
@@ -81,7 +85,7 @@ MsgBot = {
NON_TROO_INVITATI: ['non trovo invitati', 'non riesco a trovare invitati'], NON_TROO_INVITATI: ['non trovo invitati', 'non riesco a trovare invitati'],
PAROLACCE: ['stronz', 'fanculo'], PAROLACCE: ['stronz', 'fanculo'],
COME_SI_CHIAMA: ['come si chiama'], COME_SI_CHIAMA: ['come si chiama'],
PROSSIMO_ZOOM: ['prossimo zoom', 'fare lo zoom', 'gli zoom', 'conferenz'], PROSSIMO_ZOOM: ['prossimo zoom', 'fare lo zoom', 'gli zoom', 'conferenz', 'zoom'],
LAVAGNA: ['lavagna', 'Lavagna', 'LAVAGNA'], LAVAGNA: ['lavagna', 'Lavagna', 'LAVAGNA'],
SEI_LIBERO: ['sei liber', 'sei sposat', 'sei fidanzat', 'sei single'], SEI_LIBERO: ['sei liber', 'sei sposat', 'sei fidanzat', 'sei single'],
AIUTO: ['ayni help', 'help', 'aiuto', 'ho bisogno di', 'ho problemi', 'non riesco', 'mi puoi aiutare', 'mi aiuti', 'aiutami', 'posso chiederti', 'puoi aiutarmi'], AIUTO: ['ayni help', 'help', 'aiuto', 'ho bisogno di', 'ho problemi', 'non riesco', 'mi puoi aiutare', 'mi aiuti', 'aiutami', 'posso chiederti', 'puoi aiutarmi'],
@@ -123,9 +127,13 @@ function getemojibynumber(number) {
return emoji.get('height') return emoji.get('height')
} else if (number === 9) { } else if (number === 9) {
return emoji.get('nine') return emoji.get('nine')
} else {
return number;
} }
} }
strNave = "Nave";
const Menu = { const Menu = {
ACCEDI: emo.PERSON + ' Accedi', ACCEDI: emo.PERSON + ' Accedi',
@@ -138,22 +146,36 @@ const Menu = {
ADMIN: emoji.get('information_desk_person') + ' Admin', ADMIN: emoji.get('information_desk_person') + ' Admin',
ALTRO: emoji.get('newspaper') + ' Altro', ALTRO: emoji.get('newspaper') + ' Altro',
MSGATUTTI: emoji.get('incoming_envelope') + ' Invia a TUTTI', MSGATUTTI: emoji.get('incoming_envelope') + ' Invia a TUTTI',
MSG_TO_NAVE: emoji.get('incoming_envelope') + 'Msg_to_Navi',
MSG_NO_7_REQ: emoji.get('incoming_envelope') + 'No 7 Req.',
MSG_NO_9_REQ: emoji.get('incoming_envelope') + 'No 9 Req',
MSG_TO_USER: 'sendmsgto',
MSG_SI_INVITATI_NO_7REQ_INVITATI: emoji.get('incoming_envelope') + 'Inv e NO 7 Req',
MSGSTAFF: emoji.get('incoming_envelope') + ' Invia a STAFF', MSGSTAFF: emoji.get('incoming_envelope') + ' Invia a STAFF',
INDIETRO: emoji.get('back') + ' Indietro', INDIETRO: emoji.get('back') + ' Indietro',
SI: emoji.get('thumbsup') + ' SI', SI: emoji.get('thumbsup') + ' SI',
NO: emoji.get('thumbsdown') + ' NO', NO: emoji.get('thumbsdown') + ' NO',
CHAT_PERSONALE: emoji.get('female-office-worker') + emoji.get('computer'),
ESCI_DA_CHAT: emoji.get('incoming_envelope') + ' Esci dalla Conversazione',
EXIT_TELEGRAM: 'exittotelegram', EXIT_TELEGRAM: 'exittotelegram',
MIANAVE: emo.GIFT + ' ' + strNave,
}; };
const CONTA_SOLO = 'contasolo';
const RICEVI_EMAIL = 'riceviemail';
const SendMsgCmd = [CONTA_SOLO, RICEVI_EMAIL];
const MenuNoLogin = [[Menu.ACCEDI], [Menu.ASSISTENZA]]; const MenuNoLogin = [[Menu.ACCEDI], [Menu.ASSISTENZA]];
const MenuStandard = [[Menu.LAVAGNA, Menu.LINK_CONDIVIDERE], [Menu.ZOOM, Menu.ASSISTENZA]]; const MenuStandard = [[Menu.LAVAGNA, Menu.LINK_CONDIVIDERE], [Menu.ZOOM, Menu.ASSISTENZA]];
const MenuPerAdmin = [[Menu.LAVAGNA, Menu.LINK_CONDIVIDERE], [Menu.ZOOM, Menu.ASSISTENZA], [Menu.ADMIN, Menu.ALTRO]]; const MenuPerAdmin = [[Menu.LAVAGNA, Menu.LINK_CONDIVIDERE], [Menu.ZOOM, Menu.ASSISTENZA], [Menu.MIANAVE, Menu.ADMIN, Menu.ALTRO]];
const MenuYesNo = [[Menu.SI, Menu.NO]]; const MenuYesNo = [[Menu.SI, Menu.NO]];
const MenuAdmin = [[Menu.LAVAGNA, Menu.ZOOM], [Menu.MSGSTAFF, Menu.MSGATUTTI, Menu.INDIETRO], ['', '']]; const MenuAdmin = [[Menu.MSGSTAFF, Menu.MSGATUTTI, Menu.INDIETRO], [Menu.MSG_NO_7_REQ, Menu.MSG_NO_9_REQ], [Menu.MSG_TO_NAVE, Menu.MSG_SI_INVITATI_NO_7REQ_INVITATI]];
const MenuSend = [[CONTA_SOLO, RICEVI_EMAIL], [Menu.INDIETRO]];
const MenuYes = [[Menu.MSGSTAFF, Menu.INDIETRO], ['', '']]; const MenuYes = [[Menu.MSGSTAFF, Menu.INDIETRO], ['', '']];
const MenuChat = [[Menu.ESCI_DA_CHAT, Menu.INDIETRO]];
const Sex = { const Sex = {
MALE: 1, MALE: 1,
@@ -168,6 +190,16 @@ const Status = {
WAITFOR_RISPOSTA: 110, WAITFOR_RISPOSTA: 110,
}; };
const Destin = {
STAFF: 1,
TUTTI: 2,
NO_7_REQ: 3,
NO_9_REQ: 4,
SI_INVITATI_NO_7REQ_INVITATI: 5,
A_UTENTE: 6,
MSG_TO_NAVE: 7,
};
const StatusMSGALL = { const StatusMSGALL = {
NONE: 0, NONE: 0,
ASK: 1, ASK: 1,
@@ -178,7 +210,7 @@ const txt = {
MSG_SCEGLI_MENU: emoji.get('dizzy') + ' Scegli una voce di menu:' + emoji.get('dizzy'), MSG_SCEGLI_MENU: emoji.get('dizzy') + ' Scegli una voce di menu:' + emoji.get('dizzy'),
MSG_ASK_USERNAME_BO: 'Scrivi nel messaggio lo username o la email con cui ti sei registrato sul sito di %s:', MSG_ASK_USERNAME_BO: 'Scrivi nel messaggio lo username o la email con cui ti sei registrato sul sito di %s:',
MSG_ERRORE_USERNAME: 'Attenzione! Devi inserire solo lo username (40 caratteri massimo)', MSG_ERRORE_USERNAME: 'Attenzione! Devi inserire solo lo username (40 caratteri massimo)',
MSG_ERRORE_USERNAME_NOT_FOUND: 'Per Completare la Verifica Telegram BOT, devi ora scrivere qui sotto nel messaggio l\'Username o la email con cui ti sei registrato sul sito di AYNI:', MSG_ERRORE_USERNAME_NOT_FOUND: 'Per Completare la Verifica Telegram BOT, devi ora scrivere qui sotto nel messaggio l\'Username OPPURE la email con cui ti sei registrato sul sito di AYNI:',
MSG_ERRORE_USERNAME_ANNULLA: 'Inserimento Annullato. Riprovare', MSG_ERRORE_USERNAME_ANNULLA: 'Inserimento Annullato. Riprovare',
MSG_OPERAZ_ANNULLATA: 'Operazione Annullata', MSG_OPERAZ_ANNULLATA: 'Operazione Annullata',
MSG_ERRORE_VERIFY_CODE_MAXLEN: 'Attenzione! Devi inserire solo il codice a 6 cifre', MSG_ERRORE_VERIFY_CODE_MAXLEN: 'Attenzione! Devi inserire solo il codice a 6 cifre',
@@ -191,6 +223,7 @@ const txt = {
MSG_EXIT_TELEGRAM: 'L\'account è stato ora scollegato da questo Telegram BOT.', MSG_EXIT_TELEGRAM: 'L\'account è stato ora scollegato da questo Telegram BOT.',
MSG_APORTADOR_USER_REGISTERED: emo.FIRE + ' Si è appena Registrato "%s (n. %s)"\n(Invitato da %s)', MSG_APORTADOR_USER_REGISTERED: emo.FIRE + ' Si è appena Registrato "%s (n. %s)"\n(Invitato da %s)',
MSG_MSG_SENT: emoji.get('envelope') + ' Messaggi Inviati !', MSG_MSG_SENT: emoji.get('envelope') + ' Messaggi Inviati !',
MSG_MSG_TOSENT: emoji.get('envelope') + ' Messaggi da Inviare',
MSG_MSG_INCORSO: emoji.get('envelope') + ' messaggi in corso... Inviati attualmente', MSG_MSG_INCORSO: emoji.get('envelope') + ' messaggi in corso... Inviati attualmente',
}; };
@@ -206,6 +239,10 @@ module.exports = {
REGISTRATION: 1 REGISTRATION: 1
}, },
getCiao: function (idapp, username, lang) {
return tools.gettranslate('CIAO', lang) + ' ' + username + '!\n';
},
notifyToTelegram: async function (phase, mylocalsconf) { notifyToTelegram: async function (phase, mylocalsconf) {
let userdest = mylocalsconf.user.aportador_solidario; let userdest = mylocalsconf.user.aportador_solidario;
let NameFrom = `${mylocalsconf.user.name} ${mylocalsconf.user.surname}`; let NameFrom = `${mylocalsconf.user.name} ${mylocalsconf.user.surname}`;
@@ -243,9 +280,11 @@ module.exports = {
const usersmanagers = await User.getusersManagers(idapp); const usersmanagers = await User.getusersManagers(idapp);
// console.log('usersmanagers', usersmanagers); // console.log('usersmanagers', usersmanagers);
tools.writeManagersLog(text);
if (usersmanagers) { if (usersmanagers) {
for (const rec of usersmanagers) { for (const rec of usersmanagers) {
this.sendMsgTelegramByIdTelegram(idapp, rec.profile.teleg_id, emo.ROBOT_FACE + '[BOT-STAFF]' + emo.ADMIN + ': ' + text) await this.sendMsgTelegramByIdTelegram(idapp, rec.profile.teleg_id, emo.ROBOT_FACE + '[BOT-STAFF]' + emo.ADMIN + ': ' + text, undefined, undefined, true);
await tools.snooze(300) await tools.snooze(300)
} }
} }
@@ -253,13 +292,74 @@ module.exports = {
}, },
getMsgByTipoMsg: function (mydata, lang, user) {
if (!!mydata.msgextra) {
return mydata.msgextra;
}
if (mydata.tipomsg === tools.TipoMsg.SEND_LINK_CHAT_DONATORI) {
return printf(tools.gettranslate('SEND_LINK_CHAT_DONATORI', lang), user.name, mydata.msgpar1);
}
},
sendMsgTelegramToNave: async function (idapp, mydata) {
let nummsgsent = 0;
let strout = '';
try {
const arrnavi = await Nave.getusersByNave(idapp, mydata.navemediatore);
// console.log('usersmanagers', usersmanagers);
tools.writeManagersLog('sendMsgTelegramToNave');
if (arrnavi) {
for (const nave of arrnavi) {
const user = await User.findByIndOrder(idapp, nave.ind_order);
if (!!user) {
const lang = user.lang;
const idteleg = user.profile.teleg_id;
const mymsg = this.getMsgByTipoMsg(mydata, lang, user);
if (!!idteleg) {
strout += '\n' + user.name + ' ' + user.surname + ':';
if (mydata.inviareale) {
await this.sendMsgTelegramByIdTelegram(idapp, idteleg, mymsg, undefined, undefined, true);
await tools.snooze(300);
strout += ' -> MSG INVIATO';
} else {
strout += ' (Pronto da Inviare)';
}
nummsgsent++;
}
}
}
if (nummsgsent > 0) {
if (mydata.tipomsg === tools.TipoMsg.SEND_LINK_CHAT_DONATORI) {
const fields_to_update = {
sent_msg_howto_make_gift: true
};
await Nave.findOneAndUpdate({ _id: mydata.navemediatore.id }, { $set: fields_to_update }, { new: false });
}
}
}
return { nummsgsent, strout };
} catch (e) {
console.error(e);
return { nummsgsent , strout };
}
},
sendMsgTelegramToTheAdmin: async function (idapp, text) { sendMsgTelegramToTheAdmin: async function (idapp, text) {
const usersmanagers = await User.getusersManagers(idapp); const usersmanagers = await User.getusersManagers(idapp);
if (usersmanagers) { if (usersmanagers) {
for (const rec of usersmanagers) { for (const rec of usersmanagers) {
if (User.isAdmin(rec.perm)) { if (User.isAdmin(rec.perm)) {
this.sendMsgTelegramByIdTelegram(idapp, rec.profile.teleg_id, emo.ROBOT_FACE + '[BOT-STAFF]' + emo.ADMIN + ': ' + text) this.sendMsgTelegramByIdTelegram(idapp, rec.profile.teleg_id, emo.ROBOT_FACE + '[BOT-ADMIN]' + emo.ADMIN + ': ' + text, undefined, undefined, true);
await tools.snooze(300) await tools.snooze(300)
} }
} }
@@ -280,16 +380,19 @@ module.exports = {
}, },
sendMsgTelegram: async function (idapp, username, text) { sendMsgTelegram: async function (idapp, username, text, alsotomanagers) {
const teleg_id = await User.TelegIdByUsername(idapp, username); const teleg_id = await User.TelegIdByUsername(idapp, username);
const cl = getclTelegByidapp(idapp); const cl = getclTelegByidapp(idapp);
if (cl && teleg_id) { if (cl && teleg_id) {
await cl.sendMsg(teleg_id, text) await cl.sendMsg(teleg_id, text)
} }
if (alsotomanagers) {
await this.sendMsgTelegramToTheManagers(idapp, text)
}
}, },
sendMsgTelegramByIdTelegram: async function (idapp, idtelegram, text, message_id, chat_id) { sendMsgTelegramByIdTelegram: async function (idapp, idtelegram, text, message_id, chat_id, ripr_menuPrec) {
if (!idtelegram) if (!idtelegram)
return; return;
@@ -297,7 +400,7 @@ module.exports = {
if (cl && idtelegram) { if (cl && idtelegram) {
let myform = null; let myform = null;
return await cl.sendMsg(idtelegram, text, null, null, message_id, chat_id) return await cl.sendMsg(idtelegram, text, null, null, message_id, chat_id, ripr_menuPrec)
} }
} }
@@ -307,9 +410,16 @@ module.exports = {
async function sendMsgTelegramToTheAdmin(idapp, text, msg) { async function sendMsgTelegramToTheAdmin(idapp, text, msg) {
const usersmanagers = await User.getusersManagers(idapp); const usersmanagers = await User.getusersManagers(idapp);
const username = msg.chat.username; const clorig = getclTelegByidapp(idapp);
const rec = clorig.getRecInMem(msg);
let username = '';
if (!!rec) {
username = rec.username_bo;
} else {
username = msg.chat.username;
}
text = emo.ROBOT_FACE + '[BOT-ADMIN]' + emo.ADMIN + ': Da ' + msg.chat.first_name + ' ' + msg.chat.last_name + ' (' + username + '): \n' + text; text = emo.ROBOT_FACE + '[BOT-ADMIN]' + emo.ADMIN + ': Da ' + msg.chat.first_name + ' ' + msg.chat.last_name + ' [' + username + ']: \n' + text;
tools.writeEventsLog(text); tools.writeEventsLog(text);
if (usersmanagers) { if (usersmanagers) {
@@ -328,10 +438,25 @@ async function sendMsgTelegramToTheAdmin(idapp, text, msg) {
} }
async function local_sendMsgTelegramToTheManagers(idapp, text, msg) { function getusernameByUser(idapp, msg) {
let username = '';
let rec = this.getRecInMem(msg);
if (!!rec)
username = rec.username_bo;
if (username === '') {
username = msg.chat.username;
}
return username;
}
async function local_sendMsgTelegramToTheManagers(idapp, text, msg, username_bo) {
const usersmanagers = await User.getusersManagers(idapp); const usersmanagers = await User.getusersManagers(idapp);
const username = msg.chat.username; let username = msg.chat.username;
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 + '[BOT-STAFF]' + emo.ADMIN + ': Da ' + msg.chat.first_name + ' ' + msg.chat.last_name + ' (' + username + '): \n' + text;
tools.writeEventsLog(text); tools.writeEventsLog(text);
@@ -341,7 +466,7 @@ async function local_sendMsgTelegramToTheManagers(idapp, text, msg) {
const idtelegram = rec.profile.teleg_id; const idtelegram = rec.profile.teleg_id;
const cl = getclTelegByidapp(idapp); const cl = getclTelegByidapp(idapp);
if (cl && idtelegram) { if (cl && idtelegram) {
await cl.sendMsg(idtelegram, text) await cl.sendMsg(idtelegram, text, undefined, undefined, undefined, undefined, true)
} }
await tools.snooze(300) await tools.snooze(300)
} }
@@ -489,10 +614,10 @@ class Telegram {
contastiera = true; contastiera = true;
} else if (MsgBot.UGUALE.includes(testo)) { } else if (MsgBot.UGUALE.includes(testo)) {
risp = testo; risp = testo;
} else if (MsgBot.CHI_E_VISTAR.includes(testo)) { // } else if (MsgBot.CHI_E_VISTAR.includes(testo)) {
risp = 'Vistar è un nomade che vive in Perù tra i selvaggi, filosofeggiando e cazzeggiando qua e la... Per questo è un Fico ed è adulato dalle ragazze di tutto il Globo ' + emo.JOY + emo.JOY + emo.JOY; // risp = 'Vistar è un nomade che vive in Perù tra i selvaggi, filosofeggiando e cazzeggiando qua e la... Per questo è un Fico ed è adulato dalle ragazze di tutto il Globo ' + emo.JOY + emo.JOY + emo.JOY;
} else if (MsgBot.CHI_E_PAOLO.includes(testo)) { // } else if (MsgBot.CHI_E_PAOLO.includes(testo)) {
risp = 'Paolo è il Programmatore Sborone di AYNI. Anche lui Fico quanto Vistar (ma chi è Vistar) ' + emo.JOY + ' che anzichè creare la Billettera cazzeggia su AYNI BOT, trovando risposte alle domande più assurde.' + emo.JOY2 + emo.JOY2; // risp = 'Paolo è il Programmatore Sborone di AYNI. Anche lui Fico quanto Vistar (ma chi è Vistar) ' + emo.JOY + ' che anzichè creare la Nave cazzeggia su AYNI BOT, trovando risposte alle domande più assurde.' + emo.JOY2 + emo.JOY2;
} else if (MsgBot.COME_SI_CHIAMA.includes(testo)) { } else if (MsgBot.COME_SI_CHIAMA.includes(testo)) {
risp = 'Eh non te lo posso dire! ' + emo.JOY; risp = 'Eh non te lo posso dire! ' + emo.JOY;
} else if (MsgBot.GRAZIE.includes(testo.replace('!', ''))) { } else if (MsgBot.GRAZIE.includes(testo.replace('!', ''))) {
@@ -530,11 +655,11 @@ class Telegram {
risp = 'Da te non me l\'aspettavo proprio !! ' + emo.INNOCENT + emo.CROSS_ROSSA; risp = 'Da te non me l\'aspettavo proprio !! ' + emo.INNOCENT + emo.CROSS_ROSSA;
} else if (MsgBot.HAHA.find((rec) => testo.indexOf(rec) > -1) && testo.length < 8) { } else if (MsgBot.HAHA.find((rec) => testo.indexOf(rec) > -1) && testo.length < 8) {
risp = emo.JOY + emo.JOY + emo.JOY; risp = emo.JOY + emo.JOY + emo.JOY;
} else { } else if (testo.length > 1) {
noanswer = true; noanswer = true;
risp = 'Non ti capisco... d\'altronde sono solo un Robot ' + emo.ROBOT_FACE + emo.JOY2 + '\n\n(Per AIUTO, contatta la Chat AYNI - HELP)'; risp = 'Non ti capisco... d\'altronde sono solo un Robot ' + emo.ROBOT_FACE + emo.JOY2 + '\n\n(Per AIUTO, contatta la Chat AYNI - HELP)';
// risp += '\nClicca qui per entrare nella Chat AYNI - HELP di Supporto\n' + 'https://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w' + '\n\nI miei colleghi umani ti aiuteranno a risolvere !'; // risp += '\nClicca qui per entrare nella Chat AYNI - HELP di Supporto\n' + 'https://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w' + '\n\nI miei colleghi umani ti aiuteranno a risolvere !';
await sendMsgTelegramToTheAdmin(this.idapp, testo, msg); await local_sendMsgTelegramToTheManagers(this.idapp, testo, msg, rec.username_bo);
} }
} }
@@ -551,22 +676,22 @@ class Telegram {
} }
if (rec.numdomande > 3 && rec.msgcodeprec === '') { if (rec.numdomande > 3 && rec.msgcodeprec === '') {
if (rec.user) { // if (rec.user) {
const dashboard = await User.getDashboard(this.idapp, rec.user.aportador_solidario, rec.user.username, rec.user.aportador_solidario_name_surname); // const dashboard = await User.getDashboard(this.idapp, rec.user.aportador_solidario, rec.user.username, rec.user.aportador_solidario_name_surname);
//
risp += '\n\nNel frattempo ti ricordo che '; // risp += '\n\nNel frattempo ti ricordo che ';
if (dashboard.myself.numinvitati === 1) // if (dashboard.myself.numinvitati === 1)
risp += 'hai solo ' + dashboard.myself.numinvitati + ' invitato!'; // risp += 'hai solo ' + dashboard.myself.numinvitati + ' invitato!';
else if (dashboard.myself.numinvitati === 0) // else if (dashboard.myself.numinvitati === 0)
risp += 'ancora non hai portato nessun Invitato! ' + emo.LEFT_FACING_FIST; // risp += 'ancora non hai portato nessun Invitato! ' + emo.LEFT_FACING_FIST;
else if (dashboard.myself.numinvitati > 2) // else if (dashboard.myself.numinvitati > 2)
risp += 'hai ' + dashboard.myself.numinvitati + ' invitati !' + emo.STARS; // risp += 'hai ' + dashboard.myself.numinvitati + ' invitati !' + emo.STARS;
//
risp += '\n\nSei già entrato nella Chat di EMPOWER?'; // risp += '\n\nSei già entrato nella Chat di EMPOWER?';
rec.msgcodeprec = MsgBot.CHAT_EMPOWER; // rec.msgcodeprec = MsgBot.CHAT_EMPOWER;
rec.statusmsg = Status.WAITFOR_RISPOSTA; // rec.statusmsg = Status.WAITFOR_RISPOSTA;
rec.numdomande = 0; // rec.numdomande = 0;
} // }
} }
if (risp !== '') { if (risp !== '') {
@@ -607,8 +732,27 @@ class Telegram {
if (msg.text === undefined) if (msg.text === undefined)
return; return;
const arrtext = msg.text.split(" ");
let cmd2 = "";
let cmd1 = arrtext[0];
if (arrtext.length > 1)
cmd2 = arrtext[1];
let oldusername = rec.msgall_username_specifico;
if ((msg.text === Menu.ESCI_DA_CHAT) || (msg.text === Menu.INDIETRO)) {
rec.msgall_username_specifico = '';
} else {
if (rec.msgall_username_specifico !== '') {
await this.SendMsgToUser(msg, rec, rec.msgall_username_specifico, msg.text);
return true;
}
}
if (msg.text === Menu.LAVAGNA || MsgBot.LAVAGNA.find((rec) => msg.text.indexOf(rec) > -1)) { if (msg.text === Menu.LAVAGNA || MsgBot.LAVAGNA.find((rec) => msg.text.indexOf(rec) > -1)) {
await this.menuLavagna(msg) await this.menuLavagna(msg);
} else if (msg.text === Menu.MIANAVE || (cmd2 === strNave) || MsgBot.MIANAVE.find((rec) => msg.text.indexOf(rec) > -1)) {
await this.menuNave(msg)
} else if (msg.text === Menu.ACCEDI) { } else if (msg.text === Menu.ACCEDI) {
await this.menuAccedi(msg) await this.menuAccedi(msg)
} else if (msg.text === Menu.LINK_CONDIVIDERE) { } else if (msg.text === Menu.LINK_CONDIVIDERE) {
@@ -621,8 +765,21 @@ class Telegram {
await this.menumsgAll(msg) await this.menumsgAll(msg)
} else if (msg.text === Menu.MSGSTAFF) { } else if (msg.text === Menu.MSGSTAFF) {
await this.menumsgStaff(msg) await this.menumsgStaff(msg)
} else if (msg.text === Menu.MSG_NO_7_REQ) {
await this.menumsg_No_7_Req(msg)
} else if (msg.text === Menu.MSG_NO_9_REQ) {
await this.menumsg_No_9_Req(msg)
} else if (cmd1 === Menu.MSG_TO_NAVE) {
await this.menumsg_to_Nave(msg, cmd2)
} else if (msg.text === Menu.MSG_SI_INVITATI_NO_7REQ_INVITATI) {
await this.menumsg_Si_Invitati_No_7Req(msg)
} else if (cmd1.toLowerCase() === Menu.MSG_TO_USER) {
await this.menumsg_A_Utente(msg)
} else if (msg.text === Menu.INDIETRO) { } else if (msg.text === Menu.INDIETRO) {
await this.msgScegliMenu(msg); await this.msgScegliMenu(msg);
} else if (msg.text === Menu.ESCI_DA_CHAT) {
await this.sendMsg(msg.chat.id, 'Uscito dalla Chat con ' + oldusername);
rec.msgall_username_specifico = '';
} else { } else {
await this.isMenuNotVerified(rec, msg); await this.isMenuNotVerified(rec, msg);
} }
@@ -747,16 +904,16 @@ class Telegram {
} }
if (dashboard.downnotreg) { // if (dashboard.downnotreg) {
if (dashboard.downnotreg.length > 0) { // if (dashboard.downnotreg.length > 0) {
mystr += '\n' + emo.QUESTION_MARK + ' ' + tools.get__('NONREG', msg) + ':' + emo.QUESTION_MARK + '\n'; // mystr += '\n' + emo.QUESTION_MARK + ' ' + tools.get__('NONREG', msg) + ':' + emo.QUESTION_MARK + '\n';
let index = 1; // let index = 1;
dashboard.downnotreg.forEach((user) => { // dashboard.downnotreg.forEach((user) => {
mystr += ` - ${index}°: ${user.name} ${user.surname} (tel: ${user.cell_complete})\n`; // mystr += ` - ${index}°: ${user.name} ${user.surname} (tel: ${user.cell_complete})\n`;
index++; // index++;
}); // });
} // }
} // }
if (tuttie9) if (tuttie9)
mystr += '\n' + printf(tools.get__('INFO_LAVAGNA_SITO', msg)); mystr += '\n' + printf(tools.get__('INFO_LAVAGNA_SITO', msg));
@@ -768,7 +925,6 @@ class Telegram {
async menuLavagna(msg) { async menuLavagna(msg) {
const rec = this.getRecInMem(msg); const rec = this.getRecInMem(msg);
// console.log('rec', rec);
let mystr = ''; let mystr = '';
if (rec.user) { if (rec.user) {
mystr = await this.getLavagnaByUser(rec.user, msg) mystr = await this.getLavagnaByUser(rec.user, msg)
@@ -778,6 +934,30 @@ class Telegram {
await this.sendMsg(msg.chat.id, mystr); await this.sendMsg(msg.chat.id, mystr);
} }
async menuNave(msg) {
const rec = this.getRecInMem(msg);
let mystr = '';
if (!rec.user)
return "";
let ind_order_to_check = rec.user.ind_order;
let arrstringa = msg.text.split(" ");
if (!!arrstringa) {
if (arrstringa.length > 1) {
let last = arrstringa.slice(-1)[0];
if (!isNaN(last)) {
ind_order_to_check = last;
}
}
}
mystr = await Nave.getNaveByUser(this.idapp, ind_order_to_check, rec.user.lang, true);
if (!!mystr)
await this.sendMsg(msg.chat.id, mystr);
}
async menuLinkCondividere(msg) { async menuLinkCondividere(msg) {
const rec = this.getRecInMem(msg); const rec = this.getRecInMem(msg);
@@ -859,23 +1039,71 @@ class Telegram {
this.sendMsg(msg.chat.id, mystr, MenuAdmin); this.sendMsg(msg.chat.id, mystr, MenuAdmin);
} }
async menumsgAll(msg) { getDestinStr(msg, destin, rec) {
if (destin === Destin.TUTTI)
return 'TUTTI';
else if (destin === Destin.STAFF)
return 'STAFF';
else if (destin === Destin.NO_7_REQ)
return 'No 7 Requisiti';
else if (destin === Destin.NO_9_REQ)
return 'No 9 Requisiti';
else if (destin === Destin.SI_INVITATI_NO_7REQ_INVITATI)
return '2 Invitati ma NO Requisiti';
else if (destin === Destin.MSG_TO_NAVE)
return 'Nave ' + rec.extraparam;
else if (destin === Destin.A_UTENTE) {
const rec = this.getRecInMem(msg); const rec = this.getRecInMem(msg);
if (rec.user) { return rec.msgall_username_specifico
const mystr = 'Scrivi qui un Messaggio da inviare a TUTTI:';
rec.msgall_status = StatusMSGALL.ASK;
rec.msgall_staff = false;
await this.sendMsg(msg.chat.id, mystr, MenuAdmin);
} }
}
async menumsgAll(msg) {
await this.menumsgGenerico(msg, Destin.TUTTI);
} }
async menumsgStaff(msg) { async menumsgStaff(msg) {
await this.menumsgGenerico(msg, Destin.STAFF);
}
async menumsg_No_7_Req(msg) {
await this.menumsgGenerico(msg, Destin.NO_7_REQ);
}
async menumsg_No_9_Req(msg) {
await this.menumsgGenerico(msg, Destin.NO_9_REQ);
}
async menumsg_to_Nave(msg, nave) {
await this.menumsgGenerico(msg, Destin.MSG_TO_NAVE, undefined, nave);
}
async menumsg_Si_Invitati_No_7Req(msg) {
await this.menumsgGenerico(msg, Destin.SI_INVITATI_NO_7REQ_INVITATI);
}
async menumsg_A_Utente(msg) {
const arr = msg.text.split(' ');
if (!!arr && arr.length > 1) {
const username = arr[1];
const rec = this.getRecInMem(msg);
rec.msg_wait = true;
await this.SendMsgToUser(msg, rec, username, msg.text);
}
}
async menumsgGenerico(msg, dest, username, extraparam) {
const rec = this.getRecInMem(msg); const rec = this.getRecInMem(msg);
if (rec.user) { if (rec.user) {
const mystr = 'Scrivi qui un Messaggio da inviare allo STAFF:';
rec.msgall_status = StatusMSGALL.ASK; rec.msgall_status = StatusMSGALL.ASK;
rec.msgall_staff = true; rec.msgall_achi = dest;
await this.sendMsg(msg.chat.id, mystr, MenuAdmin); rec.extraparam = extraparam;
if (!!username) {
rec.msgall_username_specifico = username;
}
const mystr = 'Scrivi qui un Messaggio da inviare a' + ' [' + this.getDestinStr(msg, dest, rec) + ']:';
await this.sendMsg(msg.chat.id, mystr, MenuSend);
} }
} }
@@ -918,6 +1146,14 @@ class Telegram {
return this.arrUsers.find((rec) => rec.id === id); return this.arrUsers.find((rec) => rec.id === id);
} }
getRecByUsername(username) {
return this.arrUsers.find((rec) => rec.username_bo === username);
}
getRecInMemById(id) {
return this.arrUsers.find((rec) => rec.id === id);
}
deleteRecInMem(msg) { deleteRecInMem(msg) {
this.arrUsers = this.arrUsers.filter((rec) => rec.id !== msg.from.id); this.arrUsers = this.arrUsers.filter((rec) => rec.id !== msg.from.id);
} }
@@ -925,7 +1161,8 @@ class Telegram {
async getUser(msg, rec, conmsg) { async getUser(msg, rec, conmsg) {
let myid = 0; let myid = 0;
let ok = false; let ok = false;
const user = await User.findByUsername(this.idapp, msg.text.trim(), true); let mystruser = tools.getFirstWord(msg.text.trim());
const user = await User.findByUsername(this.idapp, mystruser, true);
if (!user) { if (!user) {
if (conmsg) { if (conmsg) {
await this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_NOT_FOUND, MenuNoLogin); await this.sendMsg(msg.from.id, txt.MSG_ERRORE_USERNAME_NOT_FOUND, MenuNoLogin);
@@ -1029,53 +1266,142 @@ class Telegram {
} }
} }
async sendMsgToAll(rec, msg, texttosend, solostaff) { async sistemaRecDest(rec, msg) {
if (texttosend.length < 3) { let recdest = this.getRecByUsername(rec.msgall_username_specifico);
if (!recdest) {
const userdest = await User.findByUsername(this.idapp, rec.msgall_username_specifico);
if (!!userdest) {
let msgdest = msg;
msgdest.from.id = userdest.profile.teleg_id;
await this.createIfNotExist(msgdest);
recdest = this.getRecByUsername(rec.msgall_username_specifico);
}
}
if (!!recdest) {
recdest.msgall_username_specifico = rec.username_bo;
} else { } else {
const usersall = await User.getUsersTelegALL(rec.user.idapp); rec.msgall_username_specifico = '';
}
return recdest
}
async sendMsgToAll(rec, msg, texttosend, destin) {
try {
if ((texttosend.length < 3) && (destin !== Destin.A_UTENTE)) {
} else {
let usersall = null;
if (destin === Destin.A_UTENTE)
usersall = await User.getUsersTelegALL(rec.user.idapp, rec.msgall_username_specifico);
else
usersall = await User.getUsersTelegALL(rec.user.idapp);
let nummsgsent = 0; let nummsgsent = 0;
let textdainviare = ""; let textdainviare = "";
let preparatesto = '';
let myid = '';
if (texttosend === Menu.ZOOM) { if (texttosend === Menu.ZOOM) {
texttosend = await this.getNextZoom() texttosend = await this.getNextZoom()
} }
const cmd = texttosend.toLowerCase();
if (usersall) { if (usersall) {
if (solostaff) if (cmd === Menu.INDIETRO) {
tools.writeEventsLog('[MSG_A_STAFF]: ' + texttosend); rec.msgall_status = StatusMSGALL.NONE;
else return
tools.writeEventsLog('[MSG_A_TUTTI]: ' + texttosend); }
tools.writeEventsLog(this.getDestinStr(msg, destin, rec) + ':\n' + texttosend);
for (const utente of usersall) { for (const utente of usersall) {
if (texttosend === Menu.LAVAGNA) { if (texttosend === Menu.LAVAGNA) {
textdainviare = await this.getLavagnaByUser(utente, msg); textdainviare = await this.getLavagnaByUser(utente, msg);
} else if (destin === Destin.A_UTENTE) {
textdainviare = texttosend;
} else { } else {
textdainviare = texttosend; textdainviare = texttosend;
} }
let invia = true;
if (solostaff) { let invia = false;
invia = User.isManager(utente.perm) if (destin === Destin.STAFF) {
invia = User.isManager(utente.perm);
} else if (destin === Destin.TUTTI) {
invia = true;
} else if (destin === Destin.A_UTENTE) {
invia = utente.username === rec.msgall_username_specifico;
} else if (destin === Destin.NO_7_REQ) {
invia = !await User.isUserQualified7(this.idapp, utente.username);
} else if (destin === Destin.NO_9_REQ) {
invia = !await User.isUserQualified9(this.idapp, utente.username);
} else if (destin === Destin.MSG_TO_NAVE) {
invia = !await Nave.findDonatoreByNave(this.idapp, rec.extraparam);
} else if (destin === Destin.SI_INVITATI_NO_7REQ_INVITATI) {
const numinvitati = await User.getnumInvitati(this.idapp, utente.username);
const numinvitatiattivi = await User.getnumInvitatiAttivi(this.idapp, utente.username);
invia = (numinvitati >= 2) && (numinvitatiattivi < 2);
} }
if (invia) { if (invia) {
if (cmd === RICEVI_EMAIL) {
preparatesto += utente.email + ', ';
} else if (cmd === CONTA_SOLO) {
// Niente
} else {
if (destin === Destin.A_UTENTE) {
await this.sistemaRecDest(rec, msg);
await this.sendMsg(utente.profile.teleg_id, '[' + rec.username_bo + ' ti scrive]:\n' + textdainviare, MenuChat);
} else {
await this.sendMsg(utente.profile.teleg_id, textdainviare); await this.sendMsg(utente.profile.teleg_id, textdainviare);
nummsgsent++; }
await tools.snooze(300) await tools.snooze(300)
} }
nummsgsent++;
if ((nummsgsent % 100) === 0) if (!SendMsgCmd.includes(cmd)) {
if ((nummsgsent % 50) === 0) {
myid = await this.sendMsg(msg.chat.id, nummsgsent + ' ' + getstr(msg.from.language_code, txt.MSG_MSG_INCORSO), null, { message_id: myid }); myid = await this.sendMsg(msg.chat.id, nummsgsent + ' ' + getstr(msg.from.language_code, txt.MSG_MSG_INCORSO), null, { message_id: myid });
await tools.snooze(300)
// ++Todo: SLEEP ??? sleep(0.03) }
}
}
} }
} }
await this.sendMsg(msg.chat.id, nummsgsent + ' ' + getstr(msg.from.language_code, txt.MSG_MSG_SENT)); let msgris = "";
if (cmd === CONTA_SOLO) {
msgris = nummsgsent + ' ' + getstr(msg.from.language_code, txt.MSG_MSG_TOSENT);
} else if (cmd === RICEVI_EMAIL) {
msgris = nummsgsent + ' ' + 'Email';
await this.sendMsg(msg.chat.id, msgris);
msgris = preparatesto;
} else {
msgris = nummsgsent + ' ' + getstr(msg.from.language_code, txt.MSG_MSG_SENT);
}
if (destin === Destin.A_UTENTE) {
const recdest = await this.sistemaRecDest(rec);
if (!!recdest) {
await this.sendMsg(msg.chat.id, 'Conversazione Iniziata con ' + rec.msgall_username_specifico + ' !', MenuChat);
} else {
await this.sendMsg(msg.chat.id, 'Utente ' + rec.msgall_username_specifico + ' non presente sul BOT !');
}
} else {
tools.writeEventsLog(msgris);
await this.sendMsg(msg.chat.id, msgris);
}
} }
rec.start_write_msgall = false; rec.start_write_msgall = false;
} catch (e) {
console.error(e);
} }
}
selectMenuHelp(msg) { selectMenuHelp(msg) {
return ((msg.text === Menu.INFO) || (msg.text === Menu.ASSISTENZA)) return ((msg.text === Menu.INFO) || (msg.text === Menu.ASSISTENZA))
@@ -1106,8 +1432,7 @@ class Telegram {
if (rec.msgall_status === StatusMSGALL.CONFIRM) { if (rec.msgall_status === StatusMSGALL.CONFIRM) {
if (msg.text === Menu.SI) { if (msg.text === Menu.SI) {
// Take msg to send to ALL // Take msg to send to ALL
await await this.sendMsgToAll(rec, msg, rec.msgtosent, rec.msgall_achi)
this.sendMsgToAll(rec, msg, rec.msgtosent, rec.msgall_staff)
} else { } else {
this.sendMsg(msg.chat.id, txt.MSG_OPERAZ_ANNULLATA); this.sendMsg(msg.chat.id, txt.MSG_OPERAZ_ANNULLATA);
} }
@@ -1117,10 +1442,20 @@ class Telegram {
if (msg.text !== Menu.INDIETRO) { if (msg.text !== Menu.INDIETRO) {
rec.msgtosent = msg.text; rec.msgtosent = msg.text;
rec.msgall_status = StatusMSGALL.CONFIRM; rec.msgall_status = StatusMSGALL.CONFIRM;
let achi = "TUTTI"; const cmd = rec.msgtosent.toLowerCase();
if (rec.msgall_staff) let achi = this.getDestinStr(msg, rec.msgall_achi, rec);
achi = "STAFF"; let domanda = '';
const domanda = 'Confermi d\'Inviare questo messaggio a ' + achi + ' ?\n' + rec.msgtosent; if (cmd === CONTA_SOLO)
domanda = 'Confermi di vedere a quante persone arriverebbe questo messaggio, a ' + achi + ' ?\n' + rec.msgtosent;
else if (cmd === RICEVI_EMAIL)
domanda = 'Confermi di vedere la lista delle email di ' + achi + '?';
else {
if (rec.msgall_achi === Destin.A_UTENTE)
domanda = 'Confermi d\'Iniziare una Chat messaggi con ' + achi + ' ?\n' + rec.msgtosent;
else
domanda = 'Confermi d\'Inviare questo messaggio a ' + achi + ' ?\n' + rec.msgtosent;
}
this.ChiediSINO(msg, domanda); this.ChiediSINO(msg, domanda);
} else { } else {
rec.msgall_status = StatusMSGALL.NONE; rec.msgall_status = StatusMSGALL.NONE;
@@ -1157,8 +1492,7 @@ class Telegram {
async setUser(msg) { async setUser(msg) {
const id = msg.from.id; const id = msg.from.id;
const user = await const user = await User.UserByIdTelegram(this.idapp, id);
User.UserByIdTelegram(this.idapp, id);
let rec = this.arrUsers.find((rec) => rec.id === msg.from.id); let rec = this.arrUsers.find((rec) => rec.id === msg.from.id);
if (user && rec) { if (user && rec) {
rec.user = user; rec.user = user;
@@ -1166,6 +1500,15 @@ class Telegram {
} }
async setUserbyUsername(username) {
const user = await User.findByUsername(this.idapp, username);
let rec = this.arrUsers.find((rec) => rec.username_bo === username);
if (user && rec) {
rec.user = user;
}
}
async alreadyExist(msg) { async alreadyExist(msg) {
const id = msg.from.id; const id = msg.from.id;
let rec = null; let rec = null;
@@ -1204,7 +1547,12 @@ class Telegram {
retry: 0, retry: 0,
username_bo: '', username_bo: '',
msgall_status: StatusMSGALL.NONE, msgall_status: StatusMSGALL.NONE,
msgall_achi: 0,
msgall_username_specifico: '',
extraparam: '',
msgtosent: '', msgtosent: '',
msg_wait: false,
lastmenu: null,
}; };
this.arrUsers.push(rec); this.arrUsers.push(rec);
@@ -1222,9 +1570,8 @@ class Telegram {
async getKeyboard(id, menu) { async getKeyboard(id, menu) {
let keyb = MenuStandard; let keyb = MenuStandard;
// Check if you are Admin // Check if you are Admin
const ismanager = await const ismanager = await User.isAdminByIdTeleg(this.idapp, id);
User.isAdminByIdTeleg(this.idapp, id); if (ismanager && menu !== MenuChat)
if (ismanager)
keyb = MenuPerAdmin; keyb = MenuPerAdmin;
if (menu) { if (menu) {
keyb = menu keyb = menu
@@ -1247,7 +1594,7 @@ class Telegram {
} }
async _inviaMsg(id, text, form, menu, msg_id, chat_id) { async _inviaMsg(id, text, form, menu, msg_id, chat_id, ripr_menuPrec) {
if (!text) if (!text)
return 0; return 0;
@@ -1255,6 +1602,26 @@ class Telegram {
return this.modificaMsg(chat_id, msg_id, text); return this.modificaMsg(chat_id, msg_id, text);
} }
const recmem = this.getRecInMemById(id);
if (!menu) {
if (recmem) {
if (recmem.msgall_username_specifico !== '') {
menu = MenuChat
}
}
}
if (recmem) {
recmem.lastmenu = menu
}
if (ripr_menuPrec) {
if (recmem && !!recmem.lastmenu) {
menu = recmem.lastmenu
}
}
try { try {
if (!form) { if (!form) {
form = { form = {
@@ -1286,9 +1653,27 @@ class Telegram {
} }
} }
async sendMsg(id, text, menu, form, msg_id, chat_id) { async SendMsgToUser(msg, rec, username, text) {
if (rec.msg_wait) {
await this.menumsgGenerico(msg, Destin.A_UTENTE, username);
rec.msg_wait = false;
} else {
const telegid = await User.TelegIdByUsername(this.idapp, username);
if (telegid > 0) {
await this.sistemaRecDest(rec, msg);
// await this.sendMsg(msg.chat.id, '[Msg inviato a ' + username + ']: ');
await this.sendMsg(telegid, Menu.CHAT_PERSONALE + '[' + rec.username_bo + ' ti scrive]:\n' + text, MenuChat);
} else {
await this.sendMsg(msg.chat.id, 'Username non valido');
rec.msgall_username_specifico = ''
}
}
}
return this._inviaMsg(id, text, form, menu, msg_id, chat_id);
async sendMsg(id, text, menu, form, msg_id, chat_id, ripr_menuPrec) {
return this._inviaMsg(id, text, form, menu, msg_id, chat_id, ripr_menuPrec);
} }

View File

@@ -24,11 +24,13 @@ const webpush = require('web-push');
const FILELOG = 'filelog.txt'; const FILELOG = 'filelog.txt';
const FILEEVENTS = 'logevents.txt'; const FILEEVENTS = 'logevents.txt';
const FILEBILLETTERA = 'logBillettera.txt'; const FILEMANAGERS = 'logmanagers.txt';
const FILENAVE = 'logNave.txt';
const subject = process.env.URLBASE_APP1; const subject = process.env.URLBASE_APP1;
const publicVapidKey = process.env.PUBLIC_VAPI_KEY; const publicVapidKey = process.env.PUBLIC_VAPI_KEY;
const privateVapidKey = process.env.PRIVATE_VAPI_KEY; const privateVapidKey = process.env.PRIVATE_VAPI_KEY;
// Code goes here // Code goes here
const keySize = 256; const keySize = 256;
const ivSize = 128; const ivSize = 128;
@@ -50,11 +52,11 @@ textlang = {
"partecipanti": "partecipanti", "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 - EMPOWER: Entra ⛩ nella nostra Community chat:\n https://t.me/joinchat/C741mkx5QYXu-kyYCYvA8g\n\nChat AYNI-BIBLIO: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI - HELP'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Fai la tua domanda e chiedi assistenza.\n2 - Dopo aver ricevuto aiuto esci dalla chat.\nPotrai rientrare ogni qualvolta ne avrai la 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 - EMPOWER: Entra ⛩ nella nostra Community chat:\n https://t.me/joinchat/C741mkx5QYXu-kyYCYvA8g\n\nChat AYNI-BIBLIO: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI - HELP'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Fai la tua domanda e chiedi assistenza.\n2 - Dopo aver ricevuto aiuto esci dalla chat.\nPotrai rientrare ogni qualvolta ne avrai la necessità.",
'BENVENUTO': "Benvenuto", 'BENVENUTO': "Benvenuto",
'HAI_I_7_REQUISITI': 'PRIMI PASSI OK!\nHai i Primi 7 Requisiti per Entrare in programmazione!', 'HAI_I_7_REQUISITI': 'PRIMI PASSI OK!\nHai i Primi 7 Requisiti per Entrare nella Lista d\'Imbarco!',
'NON_HAI_I_7_REQUISITI': 'Attenzione!\nAncora non hai i 7 Requisiti per Entrare in programmazione!', 'NON_HAI_I_7_REQUISITI': 'Attenzione!\nAncora non hai i 7 Requisiti per Entrare nella Lista d\'Imbarco!',
'HAI_I_9_REQUISITI': 'COMPLIMENTI!\nHai TUTTI i 9 Requisiti per poter effettuare e poi ricevere il tuo Dono!', 'HAI_I_9_REQUISITI': 'COMPLIMENTI!\nHai Completato TUTTI i 9 Passi della Guida! Grazie per Aiutare AYNI ad Espandersi!',
'NON_HAI_I_9_REQUISITI': 'Attenzione!\nAncora non hai Tutti i 9 Requisiti per poter effettuare e poi ricevere il tuo Dono!', 'NON_HAI_I_9_REQUISITI': 'Ricorda che puoi Aiutare a far Crescere ed Espandere il Movimento, Condividendo con chiunque questo nostro viaggio!',
'INFO_LA_MIA_LAVAGNA': '✨ Lista dei Requisiti: ✨ \n', 'INFO_LA_MIA_LAVAGNA': '✨ Lista dei Passi: ✨ \n',
'INFO_LAVAGNA_SITO_COMPLETARE': 'Per completare tutti i requisiti vai sul sito:\n%s\nPer vedere lo stato dei tuoi invitati, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n', 'INFO_LAVAGNA_SITO_COMPLETARE': 'Per completare tutti i requisiti vai sul sito:\n%s\nPer vedere lo stato dei tuoi invitati, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n',
'INFO_LAVAGNA_SITO': 'Per vedere lo stato dei tuoi invitati, sul sito AYNI, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n', 'INFO_LAVAGNA_SITO': 'Per vedere lo stato dei tuoi invitati, sul sito AYNI, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n',
'INFO_LINK_DA_CONDIVIDERE': 'Link da condividere ai tuoi invitati per farli registrare al sito di Ayni:\n%s\n\nLink da condividere per partecipare allo Zoom (Conferenza OnLine):\n%s', 'INFO_LINK_DA_CONDIVIDERE': 'Link da condividere ai tuoi invitati per farli registrare al sito di Ayni:\n%s\n\nLink da condividere per partecipare allo Zoom (Conferenza OnLine):\n%s',
@@ -70,7 +72,7 @@ textlang = {
'LINEE_GUIDA': 'Accettato le Linee Guida', 'LINEE_GUIDA': 'Accettato le Linee Guida',
'VIDEO_INTRO': 'Visto il Video di AYNI', 'VIDEO_INTRO': 'Visto il Video di AYNI',
'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno', 'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno',
'PAYMENTS': 'Modalità di Pagamento', 'PAYMENTS': 'Modalità di Pagamento (Obbligatorio Paypal)',
'INVITATI': 'persone registrate che hai invitato', 'INVITATI': 'persone registrate che hai invitato',
'INVITATI_ATTIVI': 'Invitati con i 7 Requisiti', 'INVITATI_ATTIVI': 'Invitati con i 7 Requisiti',
'NONREG': 'Invitati non Registrati', 'NONREG': 'Invitati non Registrati',
@@ -79,6 +81,10 @@ textlang = {
'ZOOM_INIZIATO': 'QUESTA CONFERENZA E\' INIZIATA!', 'ZOOM_INIZIATO': 'QUESTA CONFERENZA E\' INIZIATA!',
'SCEGLI_VOCE': 'scegli una voce:', 'SCEGLI_VOCE': 'scegli una voce:',
'INVITATI_LISTA': 'I Tuoi Invitati (in verde con almeno i primi 7 Requisiti)', 'INVITATI_LISTA': 'I Tuoi Invitati (in verde con almeno i primi 7 Requisiti)',
'CIAO': 'Ciao',
'ADDED_TOLISTAINGRESSO': 'Sei stato aggiunto alla Lista delle persone che entreranno nella Lista D\'Imbarco !',
'NO_PROG': 'Attualmente non sei ancora dentro alla Lista d\'Imbarco!',
'SEND_LINK_CHAT_DONATORI': 'Ciao %s!\nLa tua NAVE sta finalmente Salpando!\nEntra nella Gift Chat cliccando qui: %s'
}, },
es: { es: {
"L'Email è già stata Verificata": "L'Email è già stata Verificata", "L'Email è già stata Verificata": "L'Email è già stata Verificata",
@@ -87,11 +93,11 @@ textlang = {
"partecipanti": "participantes", "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 - EMPOWER: Entra ⛩ nella nostra Community chat:\n https://t.me/joinchat/C741mkx5QYXu-kyYCYvA8g\n\nChat AYNI-BIBLIO: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI - HELP'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Fai la tua domanda e chiedi assistenza.\n2 - Dopo aver ricevuto aiuto esci dalla chat.\nPotrai rientrare ogni qualvolta ne avrai la 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 - EMPOWER: Entra ⛩ nella nostra Community chat:\n https://t.me/joinchat/C741mkx5QYXu-kyYCYvA8g\n\nChat AYNI-BIBLIO: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI - HELP'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Fai la tua domanda e chiedi assistenza.\n2 - Dopo aver ricevuto aiuto esci dalla chat.\nPotrai rientrare ogni qualvolta ne avrai la necessità.",
'BENVENUTO': "Benvenuto", 'BENVENUTO': "Benvenuto",
'HAI_I_7_REQUISITI': 'PRIMI PASSI OK!\nHai i Primi 7 Requisiti per Entrare in programmazione!', 'HAI_I_7_REQUISITI': 'PRIMI PASSI OK!\nHai i Primi 7 Requisiti per Entrare nella Lista d\'Imbarco!',
'NON_HAI_I_7_REQUISITI': 'Attenzione!\nAncora non hai i 7 Requisiti per Entrare in programmazione!', 'NON_HAI_I_7_REQUISITI': 'Attenzione!\nAncora non hai i 7 Requisiti per Entrare nella Lista d\'Imbarco!',
'HAI_I_9_REQUISITI': 'COMPLIMENTI!\nHai TUTTI i 9 Requisiti per poter effettuare e poi ricevere il tuo Dono!', 'HAI_I_9_REQUISITI': 'COMPLIMENTI!\nHai Completato TUTTI i 9 Passi della Guida! Grazie per Aiutare AYNI ad Espandersi!',
'NON_HAI_I_9_REQUISITI': 'Attenzione!\nAncora non hai Tutti i 9 Requisiti per poter effettuare e poi ricevere il tuo Dono!', 'NON_HAI_I_9_REQUISITI': 'Ricorda che puoi Aiutare a far Crescere ed Espandere il Movimento, Condividendo con chiunque questo nostro viaggio!',
'INFO_LA_MIA_LAVAGNA': '✨ Lista dei Requisiti: ✨ \n', 'INFO_LA_MIA_LAVAGNA': '✨ Lista dei Passi: ✨ \n',
'INFO_LAVAGNA_SITO_COMPLETARE': 'Per completare tutti i requisiti vai sul sito:\n%s\nPer vedere lo stato dei tuoi invitati, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n', 'INFO_LAVAGNA_SITO_COMPLETARE': 'Per completare tutti i requisiti vai sul sito:\n%s\nPer vedere lo stato dei tuoi invitati, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n',
'INFO_LAVAGNA_SITO': 'Per vedere lo stato dei tuoi invitati, sul sito AYNI, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n', 'INFO_LAVAGNA_SITO': 'Per vedere lo stato dei tuoi invitati, sul sito AYNI, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n',
'INFO_LINK_DA_CONDIVIDERE': 'Link da condividere ai tuoi invitati per farli registrare al sito di Ayni:\n%s\n\nLink da condividere per partecipare allo Zoom (Conferenza OnLine):\n%s', 'INFO_LINK_DA_CONDIVIDERE': 'Link da condividere ai tuoi invitati per farli registrare al sito di Ayni:\n%s\n\nLink da condividere per partecipare allo Zoom (Conferenza OnLine):\n%s',
@@ -107,7 +113,7 @@ textlang = {
'LINEE_GUIDA': 'Accettato le Linee Guida', 'LINEE_GUIDA': 'Accettato le Linee Guida',
'VIDEO_INTRO': 'Visto il Video di AYNI', 'VIDEO_INTRO': 'Visto il Video di AYNI',
'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno', 'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno',
'PAYMENTS': 'Modalità di Pagamento', 'PAYMENTS': 'Modalità di Pagamento (Obbligatorio Paypal)',
'INVITATI': 'persone registrate che hai invitato', 'INVITATI': 'persone registrate che hai invitato',
'INVITATI_ATTIVI': 'Invitati con i 7 Requisiti', 'INVITATI_ATTIVI': 'Invitati con i 7 Requisiti',
'NONREG': 'Invitati non Registrati', 'NONREG': 'Invitati non Registrati',
@@ -116,16 +122,20 @@ textlang = {
'ZOOM_INIZIATO': 'QUESTA CONFERENZA E\' INIZIATA!', 'ZOOM_INIZIATO': 'QUESTA CONFERENZA E\' INIZIATA!',
'SCEGLI_VOCE': 'scegli una voce:', 'SCEGLI_VOCE': 'scegli una voce:',
'INVITATI_LISTA': 'I Tuoi Invitati (in verde con almeno i primi 7 Requisiti)', 'INVITATI_LISTA': 'I Tuoi Invitati (in verde con almeno i primi 7 Requisiti)',
'CIAO': 'Hola',
'ADDED_TOLISTAINGRESSO': 'Has sido añadido a la lista de personas que entrarán en Lista de embarque!',
'NO_PROG': 'Attualmente non sei ancora dentro alla Lista d\'Imbarco!',
'SEND_LINK_CHAT_DONATORI': 'Ciao %s!\nLa tua NAVE sta finalmente Salpando!\nEntra nella Gift Chat cliccando qui: %s'
}, },
us: { us: {
"partecipanti": "participants", "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 - EMPOWER: Entra ⛩ nella nostra Community chat:\n https://t.me/joinchat/C741mkx5QYXu-kyYCYvA8g\n\nChat AYNI-BIBLIO: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI - HELP'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Fai la tua domanda e chiedi assistenza.\n2 - Dopo aver ricevuto aiuto esci dalla chat.\nPotrai rientrare ogni qualvolta ne avrai la 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 - EMPOWER: Entra ⛩ nella nostra Community chat:\n https://t.me/joinchat/C741mkx5QYXu-kyYCYvA8g\n\nChat AYNI-BIBLIO: https://t.me/joinchat/AL2qKExZKvenLgpVhOyefQ \n\nChat di Aiuto e Supporto: 'AYNI - HELP'\nhttps://t.me/joinchat/C741mlVmB_RMcOUpNqWC8w\n1 - Fai la tua domanda e chiedi assistenza.\n2 - Dopo aver ricevuto aiuto esci dalla chat.\nPotrai rientrare ogni qualvolta ne avrai la necessità.",
'BENVENUTO': "Benvenuto", 'BENVENUTO': "Benvenuto",
'HAI_I_7_REQUISITI': 'PRIMI PASSI OK!\nHai i Primi 7 Requisiti per Entrare in programmazione!', 'HAI_I_7_REQUISITI': 'PRIMI PASSI OK!\nHai i Primi 7 Requisiti per Entrare nella Lista d\'Imbarco!',
'NON_HAI_I_7_REQUISITI': 'Attenzione!\nAncora non hai i 7 Requisiti per Entrare in programmazione!', 'NON_HAI_I_7_REQUISITI': 'Attenzione!\nAncora non hai i 7 Requisiti per Entrare nella Lista d\'Imbarco!',
'HAI_I_9_REQUISITI': 'COMPLIMENTI!\nHai TUTTI i 9 Requisiti per poter effettuare e poi ricevere il tuo Dono!', 'HAI_I_9_REQUISITI': 'COMPLIMENTI!\nHai Completato TUTTI i 9 Passi della Guida! Grazie per Aiutare AYNI ad Espandersi!',
'NON_HAI_I_9_REQUISITI': 'Attenzione!\nAncora non hai Tutti i 9 Requisiti per poter effettuare e poi ricevere il tuo Dono!', 'NON_HAI_I_9_REQUISITI': 'Ricorda che puoi Aiutare a far Crescere ed Espandere il Movimento, Condividendo con chiunque questo nostro viaggio!',
'INFO_LA_MIA_LAVAGNA': '✨ Lista dei Requisiti: ✨ \n', 'INFO_LA_MIA_LAVAGNA': '✨ Lista dei Passi: ✨ \n',
'INFO_LAVAGNA_SITO_COMPLETARE': 'Per completare tutti i requisiti vai sul sito:\n%s\nPer vedere lo stato dei tuoi invitati, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n', 'INFO_LAVAGNA_SITO_COMPLETARE': 'Per completare tutti i requisiti vai sul sito:\n%s\nPer vedere lo stato dei tuoi invitati, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n',
'INFO_LAVAGNA_SITO': 'Per vedere lo stato dei tuoi invitati, sul sito AYNI, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n', 'INFO_LAVAGNA_SITO': 'Per vedere lo stato dei tuoi invitati, sul sito AYNI, clicca sulle 3 linee in alto a sinistra ed accedi alla voce "Lavagna".\n',
'INFO_LINK_DA_CONDIVIDERE': 'Link da condividere ai tuoi invitati per farli registrare al sito di Ayni:\n%s\n\nLink da condividere per partecipare allo Zoom (Conferenza OnLine):\n%s', 'INFO_LINK_DA_CONDIVIDERE': 'Link da condividere ai tuoi invitati per farli registrare al sito di Ayni:\n%s\n\nLink da condividere per partecipare allo Zoom (Conferenza OnLine):\n%s',
@@ -141,7 +151,7 @@ textlang = {
'LINEE_GUIDA': 'Accettato le Linee Guida', 'LINEE_GUIDA': 'Accettato le Linee Guida',
'VIDEO_INTRO': 'Visto il Video di AYNI', 'VIDEO_INTRO': 'Visto il Video di AYNI',
'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno', 'SCRITTO_SOGNO': 'Hai scritto il tuo Sogno',
'PAYMENTS': 'Modalità di Pagamento', 'PAYMENTS': 'Modalità di Pagamento (Obbligatorio Paypal)',
'INVITATI': 'persone registrate che hai invitato', 'INVITATI': 'persone registrate che hai invitato',
'INVITATI_ATTIVI': 'Invitati con i 7 Requisiti', 'INVITATI_ATTIVI': 'Invitati con i 7 Requisiti',
'NONREG': 'Invitati non Registrati', 'NONREG': 'Invitati non Registrati',
@@ -150,6 +160,10 @@ textlang = {
'ZOOM_INIZIATO': 'QUESTA CONFERENZA E\' INIZIATA!', 'ZOOM_INIZIATO': 'QUESTA CONFERENZA E\' INIZIATA!',
'SCEGLI_VOCE': 'scegli una voce:', 'SCEGLI_VOCE': 'scegli una voce:',
'INVITATI_LISTA': 'I Tuoi Invitati (in verde con almeno i primi 7 Requisiti)', 'INVITATI_LISTA': 'I Tuoi Invitati (in verde con almeno i primi 7 Requisiti)',
'CIAO': 'Hi',
'ADDED_TOLISTAINGRESSO': 'You have been added to the List of people who will enter the Boarding List!',
'NO_PROG': 'Attualmente non sei ancora dentro alla Lista d\'Imbarco!',
'SEND_LINK_CHAT_DONATORI': 'Ciao %s!\nLa tua NAVE sta finalmente Salpando!\nEntra nella Gift Chat cliccando qui: %s'
} }
}; };
@@ -167,6 +181,24 @@ module.exports = {
TYPE_PROJECT: 1, TYPE_PROJECT: 1,
TYPE_TODO: 2, TYPE_TODO: 2,
TipoMsg: {
SEND_LINK_CHAT_DONATORI: 1,
},
Placca: {
DONATORI: 1,
TUTTI: 2,
STR_SOGNATORE: 'Sognatore',
STR_MEDIATORE: 'Mediatore',
STR_MEDIATORI: 'Mediatori',
STR_DONATORI: 'Donatori',
SOGNATORE: 'E1 🌈 ',
MEDIATORE: 'A1 💦 ',
SONOFUOCO: 0,
SONOACQUA: 3,
},
FieldType: { FieldType: {
boolean: 1, boolean: 1,
date: 2, date: 2,
@@ -518,6 +550,11 @@ module.exports = {
return ''; return '';
}, },
isAbilitaNave: function (idapp) {
const myapp = MYAPPS.find(item => item.idapp === idapp);
return myapp.abilitanave;
},
getdirByIdApp: function (idapp) { getdirByIdApp: function (idapp) {
const myapp = const myapp =
@@ -801,13 +838,35 @@ module.exports = {
}, },
getstrDateTimeShort(mydate) { getstrDateTimeShort(mydate) {
if (mydate) {
// console.log('getstrDate', mytimestamp) // console.log('getstrDate', mytimestamp)
return this.getWeekDay(mydate) + ' ' + this.appendLeadingZeroes(mydate.getDate()) + '/' + this.appendLeadingZeroes(mydate.getMonth() + 1) + ' ORE ' + this.appendLeadingZeroes(mydate.getHours()) + ':' + this.appendLeadingZeroes(mydate.getMinutes()); return this.getWeekDay(mydate) + ' ' + this.appendLeadingZeroes(mydate.getDate()) + '/' + this.appendLeadingZeroes(mydate.getMonth() + 1) + ' ORE ' + this.appendLeadingZeroes(mydate.getHours()) + ':' + this.appendLeadingZeroes(mydate.getMinutes());
} else {
return '';
}
},
getstrDateShort(mydate) {
if (mydate) {
// console.log('getstrDate', mytimestamp)
return this.getWeekDay(mydate).substring(0, 3) + ' ' + this.appendLeadingZeroes(mydate.getDate()) + '/' + this.appendLeadingZeroes(mydate.getMonth() + 1);
} else {
return '';
}
},
getstrDateLong(mydate) {
if (mydate) {
// console.log('getstrDate', mytimestamp)
return this.getWeekDay(mydate) + ' ' + this.appendLeadingZeroes(mydate.getDate()) + '/' + this.appendLeadingZeroes(mydate.getMonth() + 1) + '/' + mydate.getFullYear();
} else {
return '';
}
}, },
getlinkzoom(idconf) { getlinkzoom(idconf) {
if (idconf === '') if (idconf === '')
idconf = '8886662000'; idconf = '6668882000';
return 'https://zoom.us/j/' + idconf return 'https://zoom.us/j/' + idconf
}, },
@@ -889,8 +948,9 @@ module.exports = {
// console.log('Saved!'); // console.log('Saved!');
// }); // });
// mystr = this.getstrDateTimeShort(Date.now()) + ' ' + mystr;
const stream = fs.createWriteStream(filename, { flags: 'a' }); const stream = fs.createWriteStream(filename, { flags: 'a' });
stream.write(mystr); stream.write('\n' + mystr);
stream.end(); stream.end();
}, },
@@ -902,8 +962,12 @@ module.exports = {
this.writelogfile(mystr, FILEEVENTS); this.writelogfile(mystr, FILEEVENTS);
}, },
writeBilletteraLog(mystr) { writeManagersLog(mystr) {
this.writelogfile(mystr, FILEBILLETTERA); this.writelogfile(mystr, FILEMANAGERS);
},
writeNaveLog(mystr) {
this.writelogfile(mystr, FILENAVE);
}, },
move(oldPath, newPath, callback) { move(oldPath, newPath, callback) {
@@ -1011,11 +1075,15 @@ module.exports = {
return mystr.replace(/\s+/g, '') return mystr.replace(/\s+/g, '')
}, },
ModificheConsentite(table, fieldsvalue) { ModificheConsentite(table, fieldsvalue, idrec, user) {
if (table === 'users') { if (table === 'users') {
if ('aportador_solidario' in fieldsvalue) { if ('aportador_solidario' in fieldsvalue) {
return true; return true;
} }
if ('ALL' in fieldsvalue) {
//++Todo: Cancellalo solo se sono io il creatore dell'utente ... o se posso!
return true
}
} }
return false; return false;
@@ -1029,5 +1097,20 @@ module.exports = {
return false; return false;
}, },
getFirstWord(mystr) {
const myarr = mystr.split(" ");
if (myarr.length > 0)
return myarr[0];
else
return mystr
},
getFirst2Car(mystr) {
if (!!mystr)
return mystr.substring(0, 2) + '.';
else
return ''
},
}; };

View File

@@ -0,0 +1 @@
../../../../freeplanet/src/common/shared_vuejs.ts