Versione 1.0.17

- Fix saldo pendente
- aggiunto bottone markup Telegram
- aggionta opzione per registrarsi direttamente su Telegram, senza doversi registrare ad un sito
This commit is contained in:
Surya Paolo
2023-10-21 15:27:53 +02:00
parent 536fbd1752
commit c1a9a9a555
17 changed files with 559 additions and 76 deletions

View File

@@ -47,3 +47,49 @@ Ven 23/06 ORE 14:08: USER [paoloar77]: link da condividere
Sab 30/09 ORE 00:21: USER [SuryaArena]: vai al sito
Sab 30/09 ORE 00:32: USER [SuryaArena]: vai al sito
Gio 12/10 ORE 11:11: USER [paoloar77]: prova
Gio 12/10 ORE 11:48: USER [paoloar77]: prova
Gio 12/10 ORE 12:07: USER [SuryaArena]: prova
Gio 12/10 ORE 12:07: USER [SuryaArena]: prova
Gio 12/10 ORE 12:09: USER [SuryaArena]: prova
Gio 12/10 ORE 12:10: USER [SuryaArena]: prova
Gio 12/10 ORE 12:10: USER [SuryaArena]: prova
Gio 12/10 ORE 12:13: USER [SuryaArena]: prova
Gio 12/10 ORE 12:14: USER [SuryaArena]: prova
Gio 12/10 ORE 12:16: USER [SuryaArena]: prova
Gio 12/10 ORE 12:21: USER [SuryaArena]: prova
Gio 12/10 ORE 12:33: USER [paoloar77]: prova
Gio 12/10 ORE 12:33: USER [SuryaArena]: ciao
Gio 12/10 ORE 12:33: USER [SuryaArena]: prova
Gio 12/10 ORE 12:45: USER [SuryaArena]: bottone
Gio 12/10 ORE 14:49: USER [paoloar77]: bottone
Gio 12/10 ORE 14:49: USER [paoloar77]: bottone
Gio 12/10 ORE 14:49: USER [paoloar77]: bottone
Gio 12/10 ORE 14:52: USER [paoloar77]: bottone
Gio 12/10 ORE 14:57: USER [paoloar77]: bottone
Gio 12/10 ORE 15:06: USER [paoloar77]: bottone
Ven 13/10 ORE 11:05: USER [SuryaArena]: bottone
Ven 13/10 ORE 11:40: USER [SuryaArena]: bottone

View File

@@ -24,4 +24,76 @@ paogruppo2: 320 RIS]
Sab 30/09 ORE 13:32: [<b>Circuito RIS Bologna</b>]: Inviate Monete da SuryaArena a paoloar77 1 RIS [causale: aaa]
Saldi:
SuryaArena: -1 RIS]
paoloar77: 11 RIS]
paoloar77: 11 RIS]
Lun 09/10 ORE 09:04: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -2 RIS]
SuryaArena2: 1 RIS]
Lun 09/10 ORE 09:21: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -3 RIS]
SuryaArena2: 2 RIS]
Lun 09/10 ORE 10:25: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -4 RIS]
SuryaArena2: 3 RIS]
Lun 09/10 ORE 10:26: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -5 RIS]
SuryaArena2: 4 RIS]
Lun 09/10 ORE 23:26: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -2 RIS]
SuryaArena2: 1 RIS]
Lun 09/10 ORE 23:36: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -3 RIS]
SuryaArena2: 2 RIS]
Lun 09/10 ORE 23:36: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -4 RIS]
SuryaArena2: 3 RIS]
Mar 10/10 ORE 00:04: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -5 RIS]
SuryaArena2: 4 RIS]
Mar 10/10 ORE 00:21: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -6 RIS]
SuryaArena2: 5 RIS]
Mar 10/10 ORE 00:34: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -7 RIS]
SuryaArena2: 6 RIS]
Mar 10/10 ORE 22:47: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a PaoTEST1 1 RIS [causale: ]
Saldi:
paoloar77: -8 RIS]
PaoTEST1: 1 RIS]
Mar 10/10 ORE 22:49: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a PaoTEST1 1 RIS [causale: ]
Saldi:
paoloar77: -9 RIS]
PaoTEST1: 2 RIS]
Mar 10/10 ORE 23:08: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a PaoTEST1 2 RIS [causale: ]
Saldi:
paoloar77: -11 RIS]
PaoTEST1: 4 RIS]
Mar 10/10 ORE 23:13: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a PaoTEST1 3 RIS [causale: ]
Saldi:
paoloar77: -14 RIS]
PaoTEST1: 7 RIS]
Mar 10/10 ORE 23:22: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a PaoTEST1 1 RIS [causale: ]
Saldi:
paoloar77: -15 RIS]
PaoTEST1: 8 RIS]
Mer 11/10 ORE 22:33: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a PaoTEST1 1 RIS [causale: ]
Saldi:
paoloar77: -16 RIS]
PaoTEST1: 9 RIS]
Gio 12/10 ORE 08:05: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a PaoTEST1 1 RIS [causale: ]
Saldi:
paoloar77: -17 RIS]
PaoTEST1: 10 RIS]
Gio 12/10 ORE 08:06: [<b>Circuito RIS Rimini</b>]: Inviate Monete da paoloar77 a SuryaArena2 1 RIS [causale: ]
Saldi:
paoloar77: -18 RIS]
SuryaArena2: 7 RIS]

View File

@@ -58,9 +58,9 @@
"RICHIESTA_BLOCCO_CIRCUIT": "Richiesta di bloccare il %s da parte di %s",
"CIRCUIT_ELIMINATO": "Il %s è stato eliminato da parte di %s",
"FIDO_IMPOSTATO_ADMINS_CIRCUIT": "✅ l'utente %s è stato abilitato al Fido (%s RIS) sul '%s' (da parte di %s)",
"FIDO_IMPOSTATO_ADMINS_CIRCUIT_MYGROUP": "✅ il Conto Collettivo %s è stato abilitato al Fido fino a -%s sul '%s' (da parte di %s)",
"FIDO_IMPOSTATO_ADMINS_CIRCUIT_MYGROUP": "✅ il Conto di Gruppo %s è stato abilitato al Fido fino a -%s sul '%s' (da parte di %s)",
"ACCETTATO_NOTIFICA_ADMINS_CIRCUIT": "✅ l'utente %s è stato accettato a far parte del '%s' (da parte di %s)",
"ACCETTATO_NOTIFICA_ADMINS_CIRCUIT_MYGROUP": "✅ il Conto Collettivo %s è stato accettato a far parte del '%s' (da parte di %s)",
"ACCETTATO_NOTIFICA_ADMINS_CIRCUIT_MYGROUP": "✅ il Conto di Gruppo %s è stato accettato a far parte del '%s' (da parte di %s)",
"CIRCUIT_ACCEPTED": "✅ Sei stato accettato da %s a far parte del %s.\nApri la APP e clicca in alto a destra sull'icona delle monete, oppure clicca qui: %s",
"FIDO_IMPOSTATO": "✅ Ti è stata attivata la possibilità di utilizzare il fido (Fiducia Concessa) fino a %s RIS da %s sul '%s'.",
"CIRCUIT_ACCEPTED_YOU": "✅ Hai accettato %s a far parte del '%s'",

View File

@@ -66,6 +66,14 @@ const AccountSchema = new Schema({
type: Number,
default: 0,
},
saldo_pend: {
type: Number,
default: 0,
},
totTransato_pend: {
type: Number,
default: 0,
},
regulation_ok: {
type: Boolean,
},
@@ -150,23 +158,69 @@ AccountSchema.statics.calcTotCircolante = async function (idapp, circuitId) {
}
};
AccountSchema.methods.addtoSaldoSave = async function (amount) {
const account = this;
AccountSchema.methods.calcPending = async function (mittente) {
try {
const account = this;
if (account) {
account.saldo = account.saldo + amount;
if (!account.totTransato) {
account.totTransato = 0;
const { SendNotif } = require('../models/sendnotif');
const { Circuit } = require('../models/circuit');
// *** Calc Pending Transactions ***
const circuit = await Circuit.getCircuitById(account.circuitId);
if (circuit) {
let prec_saldo_pend = account.saldo_pend;
let prec_totTransato_pend = account.totTransato_pend;
let transatopending = 0;
if (mittente) {
let pendingtransactionsMittente = await SendNotif.getSumPendingTransactionsMittente(account.idapp, account.username, circuit.name, account.groupname);
let saldopendingMitt = pendingtransactionsMittente.reduce((sum, rec) => sum + rec.extrarec.qty, 0);
transatopending = pendingtransactionsMittente.reduce((sum, rec) => sum + Math.abs(rec.extrarec.qty), 0);
account.saldo_pend = account.saldo - saldopendingMitt;
} else {
// let pendingtransactionsDest = await SendNotif.getSumPendingTransactionsMittente(account.idapp, account.username, circuit.name, account.groupname);
// let saldopendingDest = pendingtransactionsDest.reduce((sum, rec) => sum + rec.extrarec.qty, 0);
// transatopending = pendingtransactionsDest.reduce((sum, rec) => sum + Math.abs(rec.extrarec.qty), 0);
// account.saldo_pend = account.saldo + saldopendingDest;
account.saldo_pend = account.saldo;
}
account.totTransato_pend = account.totTransato + transatopending;
if (prec_saldo_pend !== account.saldo_pend || prec_totTransato_pend !== account.totTransato_pend) {
const myaccountupdate = {
saldo_pend: account.saldo_pend,
totTransato_pend: account.totTransato_pend,
};
// Update Record
return await Account.findByIdAndUpdate(account.id,
{
$set: myaccountupdate
}).then((ris) => {
console.log('calcPending', ris);
}).catch((err) => {
console.error('calcPending', err);
});
}
}
account.totTransato += Math.abs(amount);
account.date_updated = new Date();
return await account.save();
// -----
} catch (e) {
console.error(e);
}
return null;
};
}
AccountSchema.statics.addtoSaldo = async function (myaccount, amount) {
AccountSchema.statics.addtoSaldo = async function (myaccount, amount, mitt) {
const Account = this;
try {
@@ -184,10 +238,16 @@ AccountSchema.statics.addtoSaldo = async function (myaccount, amount) {
myaccountupdate.totTransato = myaccount.totTransato;
myaccountupdate.date_updated = myaccount.date_updated;
return await Account.updateOne({ _id: myaccount.id },
const ris = await Account.updateOne({ _id: myaccount.id },
{
$set: myaccountupdate
});
await myaccount.calcPending(mitt);
return ris;
}
} catch (e) {
console.error('error', e);
@@ -244,8 +304,11 @@ AccountSchema.statics.getAccountByUsernameAndCircuitId = async function (idapp,
deperibile: false,
importo_iniziale: 0,
saldo: 0,
saldo_pend: 0,
fidoConcesso: 0,
qta_maxConcessa: 0,
totTransato: 0,
totTransato_pend: 0,
});
if (contocom) {
@@ -372,11 +435,11 @@ AccountSchema.statics.getUserAccounts = async function (idapp, username) {
$match: {
$expr: {
$and: [
{ $eq: ['$idapp', '$$idapp'] },
{ $eq: ['$typedir', '$$typedir'] },
{ $eq: ['$typeid', '$$typeid'] },
{ $eq: ['$status', 0] },
{ $eq: ['$sender', '$$username'] },
{ $eq: ['$idapp', '$$idapp'] },
{ $eq: ['$extrarec.circuitname', '$$circuitname'] },
],
},
@@ -397,7 +460,7 @@ AccountSchema.statics.getUserAccounts = async function (idapp, username) {
// console.log('1 - INIZIA getUserAccounts ')
// console.log(aggr1);
if (ris) {
/* if (ris) {
for (const account of ris) {
try {
//++OTTIMIZZARE QUESTA PARTE ! (CON UNA QUERY...)
@@ -416,9 +479,8 @@ AccountSchema.statics.getUserAccounts = async function (idapp, username) {
}
}
}
} */
// console.log(' 2 - FINE getUserAccounts LEN=', ris.length)
return ris;
} catch (e) {
console.error('getUserAccounts', e);
@@ -482,20 +544,6 @@ AccountSchema.statics.getGroupAccounts = async function (idapp, groupname) {
const ris = await this.aggregate(aggr1);
const { SendNotif } = require('../models/sendnotif');
if (ris) {
// tools.startTimeLog('Query Pending')
for (const account of ris) {
const pendingtransactions = await SendNotif.getSumPendingTransactions(idapp, '', account.circuit.name, groupname);
const saldopending = pendingtransactions.reduce((sum, rec) => sum + rec.result.extrarec.qty, 0);
if (saldopending) {
account.saldo -= saldopending;
}
}
// tools.endTimeLog('Query Pending')
}
return ris;
} catch (e) {
console.error('e', e);
@@ -559,12 +607,16 @@ AccountSchema.statics.SetMinMaxPersonali = async function (idapp, valmin, valmax
};
AccountSchema.statics.updateFido = async function (idapp, username, circuitId, fido) {
AccountSchema.statics.updateFido = async function (idapp, username, groupname, circuitId, fido) {
let paramstoupdate = {
fidoConcesso: fido,
};
const risult = await Account.updateOne({ idapp, username, circuitId }, { $set: paramstoupdate });
let risult = null;
if (groupname)
risult = await Account.updateOne({ idapp, circuitId, groupname }, { $set: paramstoupdate });
else
risult = await Account.updateOne({ idapp, username, circuitId }, { $set: paramstoupdate });
return risult;
};
@@ -606,6 +658,15 @@ AccountSchema.statics.removeAdminOfAccount = async function (idapp, username, ci
{ $pull: { people: { username: { $in: [person_username] } } } });
};
AccountSchema.statics.updateSaldoAndTransato_AllAccounts = async function (idapp) {
const recaccounts = await Account.find({ idapp });
for (const account of recaccounts) {
await account.calcPending();
}
};
const Account = mongoose.model('Account', AccountSchema);

View File

@@ -1101,7 +1101,7 @@ CircuitSchema.statics.setFido = async function (idapp, username, circuitName, gr
else
fido = mycircuit.fido_scoperto_default;
return await Account.updateFido(idapp, username, circuitId, fido);
return await Account.updateFido(idapp, username, groupname, circuitId, fido);
}
}
return false;

View File

@@ -113,9 +113,9 @@ MovementSchema.statics.addMov = async function (idapp, accountFromIdTable, accou
if (mymov) {
// Update saldo dell'Account
await Account.addtoSaldo(accountToIdTable, amount);
await Account.addtoSaldo(accountToIdTable, amount, true);
await Account.addtoSaldo(accountFromIdTable, -amount);
await Account.addtoSaldo(accountFromIdTable, -amount, false);
return mymov;
}
@@ -681,7 +681,6 @@ MovementSchema.statics.checkIfCoinsAlreadySent = async function (notifId) {
try {
const rec = await MyMovement.findOne({ notifId }, { _id: 1 });
return !!rec;
} catch (e) {

View File

@@ -143,6 +143,7 @@ const MyElemSchema = new Schema({
anim: animation,
active: {
type: Boolean,
default: false,
},
class: {
type: String,

View File

@@ -22,18 +22,22 @@ mongoose.plugin(schema => {
const sendNotifSchema = new Schema({
idapp: {
type: String,
index: true,
},
typedir: {
type: Number,
default: 0,
index: true,
},
typeid: {
type: Number,
default: 0,
index: true,
},
sender: { // mittente
type: String,
default: '',
index: true,
},
dest: {
type: String,
@@ -66,6 +70,7 @@ const sendNotifSchema = new Schema({
status: {
type: Number,
default: 0,
index: true,
},
typesend: {
type: Number,
@@ -107,6 +112,14 @@ const sendNotifSchema = new Schema({
}
});
sendNotifSchema.index({ idapp: 1 });
sendNotifSchema.index({ typedir: 1 });
sendNotifSchema.index({ typeid: 1 });
sendNotifSchema.index({ sender: 1 });
sendNotifSchema.index({ idapp: 1, typedir: 1, typeid: 1, status: 1, sender: 1 });
sendNotifSchema.statics.setNotifAsRead = function (idapp, username, idnotif) {
const SendNotif = this;
@@ -368,7 +381,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function (recnotif, us
} else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SETFIDO) {
if (recnotif.paramsObj.isAdmin) {
if (recnotif.extrarec.groupname) {
newdescr = i18n.__('FIDO_IMPOSTATO_ADMINS_CIRCUIT_MYGROUP', -recnotif.paramsObj.extrarec.fido_scoperto_default_grp, recnotif.extrarec.groupname, recnotif.paramsObj.circuitnameDest,
newdescr = i18n.__('FIDO_IMPOSTATO_ADMINS_CIRCUIT_MYGROUP', recnotif.extrarec.groupname, -recnotif.paramsObj.extrarec.fido_scoperto_default_grp, recnotif.paramsObj.circuitnameDest,
username_action);
} else {
newdescr = i18n.__('FIDO_IMPOSTATO_ADMINS_CIRCUIT', sender, -recnotif.paramsObj.extrarec.fido_scoperto_default, recnotif.paramsObj.circuitnameDest,
@@ -622,6 +635,8 @@ sendNotifSchema.statics.saveAndSendNotif = async function (myrecnotif, req, res,
// console.log('myrecout._id', myrecout._id.toString());
let risnotif = null;
if (save) {
let res = null;
try {
@@ -633,7 +648,7 @@ sendNotifSchema.statics.saveAndSendNotif = async function (myrecnotif, req, res,
// console.log('myrecread._id', myrecread._id.toString());
if (myrecread)
return await globalTables.sendNotif(myrecread.typedir, myrecread.typeid, res, idapp, user ? user : req.user, myrecread);
risnotif = await globalTables.sendNotif(myrecread.typedir, myrecread.typeid, res, idapp, user ? user : req.user, myrecread);
else
return false;
}
@@ -644,9 +659,12 @@ sendNotifSchema.statics.saveAndSendNotif = async function (myrecnotif, req, res,
}
} else {
return await globalTables.sendNotif(myrecout.typedir, myrecout.typeid, res, idapp, user ? user : req.user, myrecout);
risnotif = await globalTables.sendNotif(myrecout.typedir, myrecout.typeid, res, idapp, user ? user : req.user, myrecout);
}
return risnotif;
};
sendNotifSchema.statics.updateStatusAndDescr = async function (myrecnotif, onlysave, userorig) {
@@ -1031,9 +1049,14 @@ sendNotifSchema.statics.sendToTheDestinations = async function (myrecnotifpass,
send = true;
}
}
} else if (myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_BACHECA || myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_EVENTS) {
if (shared_consts.TABLES_ADV_NOTIFICATION.includes(myrecnotifpass.tablerec) ||
shared_consts.TABLES_EVENTS_NOTIFICATION.includes(myrecnotifpass.tablerec)) {
} else if (myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_BACHECA
|| myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_EVENTS
|| myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS
) {
if (shared_consts.TABLES_ADV_NOTIFICATION.includes(myrecnotifpass.tablerec)
|| shared_consts.TABLES_EVENTS_NOTIFICATION.includes(myrecnotifpass.tablerec)
|| shared_consts.TABLES_GROUPS_NOTIFICATION.includes(myrecnotifpass.tablerec)
) {
// Estrai la Città, la Provincia e la regione.
if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.UsersNotif.NEW_ADV_YOUR_PROVINCE) &&
@@ -1067,7 +1090,7 @@ sendNotifSchema.statics.sendToTheDestinations = async function (myrecnotifpass,
}
}
} else if (myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) {
/*} else if (myrecnotifpass.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) {
if (shared_consts.TABLES_GROUPS_NOTIFICATION.includes(myrecnotifpass.tablerec)) {
if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.GroupsNotifs.STATUS_GROUPS_NEW)) {
send = true;
@@ -1078,7 +1101,7 @@ sendNotifSchema.statics.sendToTheDestinations = async function (myrecnotifpass,
if (usernotifprofile && tools.isBitActive(usernotifprofile.value, shared_consts.CircuitsNotif.STATUS_NEW)) {
send = true;
}
}
}*/
}
if (send) {
@@ -1118,7 +1141,8 @@ sendNotifSchema.statics.sendToSingleUserDest = async function (myrecnotif, req,
};
sendNotifSchema.statics.getSumPendingTransactions = async function (idapp, username, circuitname, groupname) {
sendNotifSchema.statics.getSumPendingTransactionsMittente = async function (idapp, username, circuitname, groupname) {
const SendNotif = this;
try {
@@ -1140,9 +1164,60 @@ sendNotifSchema.statics.getSumPendingTransactions = async function (idapp, usern
};
sendNotifSchema.statics.getSumPendingTransactionsDest = async function (idapp, username, circuitname, groupname) {
const SendNotif = this;
try {
const query = {
idapp,
sender: username,
sendergroup: groupname,
typedir: shared_consts.TypeNotifs.TYPEDIR_CIRCUITS,
typeid: shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ,
status: 0,
'extrarec.circuitname': circuitname,
'extrarec.dest': username,
'extrarec.groupdest': groupname,
};
return await SendNotif.find(query).lean();
} catch (e) {
console.error('e', e);
}
};
sendNotifSchema.statics.updatePendingTransactions = async function (recnotif) {
const { Circuit } = require('../models/circuit');
const { Account } = require('../models/account');
try {
if (recnotif && recnotif.extrarec && recnotif.extrarec.circuitname) {
const circuit = await Circuit.getCircuitByName(recnotif.idapp, recnotif.extrarec.circuitname);
const accountdestTable = await Account.getAccountByUsernameAndCircuitId(recnotif.idapp, recnotif.extrarec.dest, circuit._id, true, false, recnotif.extrarec.groupdest, recnotif.extrarec.contoComDest);
const accountorigTable = await Account.getAccountByUsernameAndCircuitId(recnotif.idapp, recnotif.sender, circuit._id, true, true, recnotif.extrarec.grouporig, recnotif.extrarec.contoComOrig);
if (accountdestTable)
await accountdestTable.calcPending(false);
if (accountorigTable)
await accountorigTable.calcPending(true);
}
} catch (e) {
console.error(e);
}
};
sendNotifSchema.statics.checkIfAlreadyExist = async function (idapp, tag, idpost, numtab) {
};
const SendNotif = mongoose.model('SendNotif', sendNotifSchema);
module.exports = { SendNotif: SendNotif };

View File

@@ -62,6 +62,12 @@ const SiteSchema = new Schema({
telegram_key_test: {
type: String,
},
teleg_cfg: {
type: String,
},
teleg_cfg_test: {
type: String,
},
telegram_bot_name_test: {
type: String,
},
@@ -226,6 +232,7 @@ module.exports.findAllIdApp = async function (idapp) {
rec.email_pwd = '';
rec.telegram_key = '';
rec.telegram_key_test = '';
rec.confsite = {};
return rec;
}

View File

@@ -44,7 +44,7 @@ const UserSchema = new mongoose.Schema({
},
email: {
type: String,
required: true,
// required: true,
trim: true,
minlength: 1,
unique: false,
@@ -2791,7 +2791,7 @@ UserSchema.statics.setCircuitCmd = async function (idapp, usernameOrig, circuitn
ris = true;
} else if ((cmd === shared_consts.CIRCUITCMD.SENDCOINS_ACCEPT) || (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REFUSE)) {
// Before to accept, I see if it's already set !
outres = {
cansend: false,
errormsg: '',
@@ -4826,6 +4826,7 @@ UserSchema.statics.getExtraInfoByUsername = async function (idapp, username) {
UserSchema.statics.addExtraInfo = async function (idapp, recUser, recUserSave, version) {
try {
tools.startTimeLog('addExtraInfo')
if (version) {
let versattualeuser = 0;
@@ -4924,6 +4925,8 @@ UserSchema.statics.addExtraInfo = async function (idapp, recUser, recUserSave, v
recUser.profile.calc = await User.calcOtherByUser(idapp, recUser._id);
tools.endTimeLog('addExtraInfo')
return recUser;
} catch (e) {
@@ -5190,6 +5193,7 @@ UserSchema.statics.createNewSubRecord = async function (idapp, req) {
return rec;
};
const User = mongoose.model('User', UserSchema);
class Hero {
@@ -5204,6 +5208,45 @@ class Hero {
}
}
module.exports = { User, Hero };
const FuncUsers = {
createRegistration_withTelegram(userdata) {
const telegrambot = require('../telegram/telegrambot');
try {
// Cerca se esiste già
const user = new User(userdata);
user.verified_email = false;
user.lasttimeonline = new Date();
user.date_reg = new Date();
return user.save().then(async () => {
return User.findByUsername(user.idapp, user.username, false).
then(async (usertrovato) => {
const numutenti = await User.getNumUsers(user.idapp);
let msg = '++ Nuovo Entrato: [' + numutenti + '] ' + user.username + ' ' + user.name + ' ' + user.surname;
await telegrambot.sendMsgTelegramToTheManagers(user.idapp, msg);
return telegrambot.askConfirmationUser(user.idapp, shared_consts.CallFunz.REGISTRATION, user, '', '', '', '');
});
}).catch((e) => {
console.error(e.message);
});
} catch (e) {
console.error(e.message);
}
}
};
module.exports = {
User, Hero, FuncUsers
};

View File

@@ -89298,5 +89298,16 @@ module.exports = {
abitanti: '',
country: 'ONL',
},
{
_id: 8120,
istat: '',
comune: 'Italia',
prov: 'ITA',
reg: 'ITA',
pref: '',
cap: '',
abitanti: '',
country: 'ITA',
},
],
};

View File

@@ -120,5 +120,6 @@ module.exports = {
{_id: 118, reg: 'LAZ', prov: 'RM', descr: 'Roma Sud e Litorale', link_grp: 'https://t.me/c/1614195634/67?thread=43', link_telegram: ''},
{_id: 119, reg: 'PUG', prov: 'VAL', descr: 'Valle D\'Itria', link_grp: 'https://t.me/progettoriso/7016?thread=7015', link_telegram: ''},
{_id: 120, reg: 'SAR', prov: 'SUS', descr: 'Sud Sardegna', link_grp: 'https://t.me/c/1614195634/552?thread=545', link_telegram: ''},
{_id: 121, reg: 'ITA', prov: 'ITA', descr: 'Italia', link_grp: '', link_telegram: ''},
],
};

View File

@@ -270,6 +270,7 @@ router.get('/test1', authenticate_noerror, async (req, res) => {
router.post('/settable', authenticate, async (req, res) => {
const params = req.body;
const mytable = globalTables.getTableByTableName(params.table);
let mydata = req.body.data;
let extrarec = {};
if (mydata && mydata.hasOwnProperty('extrarec')) {
@@ -277,6 +278,11 @@ router.post('/settable', authenticate, async (req, res) => {
delete mydata['extrarec'];
}
if (mydata === undefined) {
console.error('MYDATA VUOTO !');
return res.status(400).send('Mydata VUOTO');
}
const fieldsvalue = { 'ALL': 1 };
mydata.idapp = req.user.idapp;
@@ -483,12 +489,12 @@ router.post('/settable', authenticate, async (req, res) => {
groupnameDest = myrec ? myrec.groupname : '';
setnotif = true;
}
if (shared_consts.TABLES_CIRCUITS_NOTIFICATION.includes(params.table)) {
/*if (shared_consts.TABLES_CIRCUITS_NOTIFICATION.includes(params.table)) {
typedir = shared_consts.TypeNotifs.TYPEDIR_CIRCUITS;
typeid = shared_consts.TypeNotifs.ID_CIRCUIT_NEW_REC;
circuitnameDest = myrec ? myrec.name : '';
setnotif = (myrec.visibility === 0); // Not send a notification to others if the Circuit is HIDDEN or PRIVATE
}
}*/
}
if (setnotif) {

View File

@@ -718,6 +718,9 @@ router.post('/updatesaldo', authenticate, async (req, res) => {
const username = req.user.username;
idapp = req.body.idapp;
locale = req.body.locale;
circuitId = req.body.circuitId;
groupname = req.body.groupname;
const lastdr = req.body['lastdr'] ? req.body['lastdr'] : '';
try {
const userprofile = await User.getExtraInfoByUsername(idapp, username);
@@ -725,6 +728,10 @@ router.post('/updatesaldo', authenticate, async (req, res) => {
userprofile
}
const arrrecnotif = await SendNotif.findAllNotifByUsernameIdAndIdApp(username, lastdr, idapp, shared_consts.LIMIT_NOTIF_FOR_USER);
ris.arrrecnotif = arrrecnotif;
return res.send({ ris });
} catch (e) {
@@ -1372,6 +1379,10 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) {
await Circuit.setstrProvByIdCityCircuits(idapp);
} else if (mydata.dbop === 'updateSaldoAndTransato_AllAccounts') {
await Account.updateSaldoAndTransato_AllAccounts(idapp);
/*} else if (mydata.dbop === 'visuNave') {
mystr = await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col));
@@ -1597,4 +1608,5 @@ router.post('/mgt', authenticate, async (req, res) => {
});
module.exports = router;

View File

@@ -3,14 +3,15 @@ const tools = require('../tools/general');
const appTelegram = [tools.FREEPLANET, tools.RISO];
const appTelegram_TEST = [tools.FREEPLANET, tools.RISO];
const appTelegram_DEVELOP = [tools.RISO];
// const appTelegram_DEVELOP = [tools.RISO];
const appTelegram_DEVELOP = [tools.FIOREDELLAVITA];
const appTelegramFinti = ['2', tools.CNM];
const appTelegramDest = [tools.FREEPLANET, tools.FREEPLANET];
const printf = require('util').format;
const { User } = require('../models/user');
const { User, FuncUsers } = require('../models/user');
const { MyGroup } = require('../models/mygroup');
const { Circuit } = require('../models/circuit');
const { CalZoom } = require('../models/calzoom');
@@ -1474,7 +1475,7 @@ class Telegram {
if (!riscreate) {
let rec = this.getRecInMem(msg);
if (!rec)
rec = this.addUser(msg);
rec = await this.addUser(msg);
if (rec.user)
rec.status = Status.VERIFIED;
@@ -1601,9 +1602,14 @@ class Telegram {
}
}
let parse_mode = 'HTML';
let arr_bott_inline = []
if (risp === '') {
if (menusite) {
risp = await this.getValueMenu(this.idapp, rec, msg, testo, lang);
parse_mode = await this.getParseModeByMenu(this.idapp, rec, msg, testo, lang);
arr_bott_inline = await this.getArrBottInlineByMenu(this.idapp, rec, msg, testo, lang);
noanswer = true;
} else if (MsgBot.CIAO.includes(testo.replace('!', ''))) {
risp = 'Ciao ';
@@ -1762,7 +1768,7 @@ class Telegram {
if (contastiera) {
keyboard = {
'parse_mode': 'HTML',
'parse_mode': parse_mode,
'reply_markup': {
'resize_keyboard': true,
'keyboard': await this.getKeyboard(id, undefined, this.getlang(msg)),
@@ -1771,6 +1777,12 @@ class Telegram {
}
let keyboard_inline = undefined;
if (arr_bott_inline.length > 0) {
keyboard_inline = cl.getInlineKeyboard(myuser.lang, arr_bott_inline);
}
if (rec.numdomande > 3 && rec.msgcodeprec === '') {
// if (rec.user) {
// const dashboard = await User.getDashboard(this.idapp, rec.user.aportador_solidario, rec.user.username, rec.user.aportador_solidario_name_surname);
@@ -1796,7 +1808,7 @@ class Telegram {
await tools.snooze(300);
risp = '[BOT' + emo.ROBOT_FACE + ' scrive]:\n' + risp;
}
this._inviaMsg(id, risp, keyboard);
this._inviaMsg(id, risp, keyboard, undefined, undefined, undefined, undefined, { parse_mode, keyboard_inline });
let strlog = 'USER [' + myname + ']: ' + testo + '\n';
@@ -2780,6 +2792,52 @@ class Telegram {
}
}
async addUserInDB_enteringInTelegramBot(msg) {
try {
// cerca se esiste già l'utente in Memoria
const rec = this.getRecInMem(msg);
if (!rec.user) {
// cerca se esiste già l'utente con il suo ID Telegram
const user = await User.UserByIdTelegram(this.idapp, msg.from.id);
if (!user) {
// Se non esiste già, creo la registrazione dell'Utente, senza password:
const myuserdata = {
idapp: this.idapp,
username: msg.from.username || msg.from.id,
name: msg.from.first_name || '',
lang: msg.from.language_code || 'it',
surname: msg.from.last_name || '',
profile: {
teleg_id: msg.from.id,
}
}
const recuser = await FuncUsers.createRegistration_withTelegram(myuserdata);
if (recuser) {
rec.user = recuser;
console.log(recuser.username, ' SI E\' VERIFICATO CON TELEGRAM !');
// let username = recuser.name;
/*if (!!msg.from.username) {
await MyTelegramBot.askConfirmationUser(this.idapp, shared_consts.CallFunz.REGISTRATION, recuser);
} else {
console.log(' ... MA GLI MANCA L\'USERNAME TELEGRAM !! ');
} */
}
}
}
return { ris: !!rec.user, recuser: rec.user };
} catch (e) {
console.error('Error addUserInDB_enteringInTelegramBot', e);
}
return { ris: false, recuser: null };
}
async sistemaRecDest(rec, msg) {
let recdest = this.getRecByUsername(rec.msgall_username_specifico);
if (!recdest) {
@@ -3267,7 +3325,7 @@ class Telegram {
let user = await User.UserByIdTelegram(this.idapp, id);
let rec = this.getRecInMem(msg);
if (user && !rec) {
rec = this.addUser(msg);
rec = await this.addUser(msg);
}
if (rec) {
rec.user = user;
@@ -3289,7 +3347,7 @@ class Telegram {
}
}
addUser(msg) {
async addUser(msg) {
const lang = this.getlang(msg);
const code = 100000 + Math.round(Math.random() * 899999);
@@ -3321,20 +3379,37 @@ class Telegram {
pageChange: false,
menuSaved: {},
pagenow: 1,
parse_mode: 'HTML',
menuDb: null,
aportador_solidario: '',
};
rec.status = Status.NONE;
if (!msg.from.username) {
rec.status = Status.WAITFOR_USERNAME_TELEGRAM;
if (tools.getConfSiteOptionEnabledByIdApp(this.idapp, shared_consts.ConfSite.AskUsernameSulBot)) {
rec.status = Status.WAITFOR_USERNAME_TELEGRAM;
}
} else {
rec.status = Status.WAITFOR_USERNAME_INVITANTE;
if (tools.getConfSiteOptionEnabledByIdApp(this.idapp, shared_consts.ConfSite.AskInvitantesulBot)) {
rec.status = Status.WAITFOR_USERNAME_INVITANTE;
}
}
this.arrUsers.push(rec);
// Aportador
this.setInvitante(msg, this.getInvitanteByMsg(msg), false);
if (tools.getConfSiteOptionEnabledByIdApp(this.idapp, shared_consts.ConfSite.AskInvitantesulBot)) {
// Aportador
this.setInvitante(msg, this.getInvitanteByMsg(msg), false);
}
if (tools.getConfSiteOptionEnabledByIdApp(this.idapp, shared_consts.ConfSite.registerUserWithBot)) {
const ris = await this.addUserInDB_enteringInTelegramBot(msg);
if (ris && ris.recuser) {
rec.recuser = ris.recuser;
rec.status = Status.VERIFIED;
}
}
return rec;
@@ -3388,13 +3463,13 @@ class Telegram {
for (const rec of recuser.menuDb) {
rec.active_mem = false;
const visibilita = (tools.isBitAttivoESelez(rec.visibility, shared_consts.VISIB_ONLY_ADMIN, isAdmin)
&& tools.isBitAttivoESelez(rec.visibility, shared_consts.VISIB_ONLY_MANAGER, isManager)
&& tools.isBitAttivoESelez(rec.visibility, shared_consts.VISIB_ONLYIF_VERIFIED, isVerified))
|| rec.visibility === 0;
if (rec.active && rec.page === recuser.pagenow
&& (tools.isBitAttivoESelez(rec.visibility,
shared_consts.VISIB_ONLY_ADMIN, isAdmin) &&
tools.isBitAttivoESelez(rec.visibility,
shared_consts.VISIB_ONLY_MANAGER, isManager) &&
tools.isBitAttivoESelez(rec.visibility,
shared_consts.VISIB_ONLYIF_VERIFIED, isVerified))
&& visibilita
) {
rec.active_mem = true;
if (true) {
@@ -3480,6 +3555,8 @@ class Telegram {
this.isMenu(recuser, msg, recdb.value, true);
return shared_consts.RIS_OK;
}
} else if (recdb.type === shared_consts.BOTTYPE_MARKDOWN) {
return recdb.value;
}
}
@@ -3493,6 +3570,59 @@ class Telegram {
}
async getParseModeByMenu(idapp, recuser, msg, testo, lang) {
try {
let parse_mode = 'HTML';
if (recuser) {
for (const recdb of recuser.menuDb) {
if (recdb.active_mem) {
if (recdb.idapp === idapp && recdb.lang === lang &&
recdb.label.toLowerCase() === testo) {
if (recdb.type === shared_consts.BOTTYPE_MARKDOWN) {
return 'Markdown'
} else {
return parse_mode;
}
}
}
}
}
return '';
} catch (e) {
return '';
}
}
async getArrBottInlineByMenu(idapp, recuser, msg, testo, lang) {
try {
let arr_bott_inline = [];
if (recuser) {
for (const recdb of recuser.menuDb) {
if (recdb.active_mem) {
if (recdb.idapp === idapp && recdb.lang === lang &&
recdb.label.toLowerCase() === testo) {
if (recdb.type === shared_consts.BOTTYPE_BOTTONI_INLINE) {
const jsonString = '[{"text": "primo", "callback_data": "1"}, {"text": "sec", "callback_data": "2"}]';
const jsonObject = JSON.parse(jsonString);
let myobj = JSON.parse(recdb.value);
arr_bott_inline.push(myobj);
}
}
}
}
}
return arr_bott_inline;
} catch (e) {
console.error(e);
return [];
}
}
async getKeyboard(id, menu, lang) {
let keyb = null;
@@ -3588,11 +3718,12 @@ class Telegram {
if (!form) {
form = {
'parse_mode': 'HTML',
'parse_mode': opt && opt.parse_mode ? opt.parse_mode : 'HTML',
'message_id': msg_id,
'reply_markup': {
'resize_keyboard': true,
'keyboard': await this.getKeyboard(id, menu, mylang),
'keyboard_inline': (opt && opt.keyboard_inline) ? opt.keyboard_inline : undefined,
},
};
}

View File

@@ -417,7 +417,7 @@ module.exports = {
AYNI: '7',
CNM: '10',
RISO: '13',
ARCADEI: '15',
FIOREDELLAVITA: '15',
HELP_CHAT: '',
TYPECONF_ZOOM: 'zoom',
@@ -1284,13 +1284,13 @@ module.exports = {
let ris = false;
let inviato = false;
let arrris = [];
if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REQ || cmd === shared_consts.CIRCUITCMD.SENDCOINS_ACCEPT || cmd ===
shared_consts.CIRCUITCMD.SENDCOINS_REFUSE) {
groupOrig = extrarec.grouporig
let arrris = [];
let recnotif = null;
if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REQ) {
@@ -1370,6 +1370,19 @@ module.exports = {
}
}
if (inviato) {
if (arrris && arrris.length > 0) {
for (const notif of arrris) {
await SendNotif.updatePendingTransactions(notif);
}
} else {
if (ris) {
await SendNotif.updatePendingTransactions(ris.recnotif);
}
}
}
return { ris: ris.recnotif, inviato };
} catch (e) {
@@ -4206,7 +4219,7 @@ module.exports = {
getAhref(username, link) {
return `<a href='${link}'>${username}</a>`;
},
firstchars(value, numchars) {
if (!value) {
@@ -4282,7 +4295,7 @@ module.exports = {
newdescrtelegram += i18n.__('CONTRIB', contributo);
}
newdescrtelegram += i18n.__('ADDED_FROM', userorig);
return { newdescr, newdescrtelegram }
} catch (e) {
console.error('Error', e);

View File

@@ -259,6 +259,8 @@ module.exports = {
BOTTYPE_LINK: 2,
BOTTYPE_TEXT: 3,
BOTTYPE_MENU: 4,
BOTTYPE_MARKDOWN: 5,
BOTTYPE_BOTTONI_INLINE: 6,
RIS_OK: '👍🏻 OK',
@@ -357,6 +359,9 @@ module.exports = {
Notif_Reg_Bot_ToManagers: 1,
Notif_Reg_Push_Admin: 2,
Need_Aportador_On_DataReg_To_Verify_Reg: 4,
AskInvitantesulBot: 8,
AskUsernameSulBot: 16,
registerUserWithBot: 32,
},
MsgTeleg: {