diff --git a/src/server/locales/en.json b/src/server/locales/en.json index 22f99fb..a744694 100755 --- a/src/server/locales/en.json +++ b/src/server/locales/en.json @@ -51,6 +51,7 @@ "CIRCUIT_REMOVED_TO_ME": "❌ Sei stato rimosso dal Circuito %s (da parte di %s)", "CIRCUIT_SENDCOINSREQ": "%s ti sta inviando %s %s.", "ID_CIRCUIT_COINS_ACCEPTED": "%s %s accettati da %s.", + "SALDO_UPDATE": "[Saldo %s %s]", "ID_CIRCUIT_COINS_ACCEPTED_TO_ME": "%s %s accettati da %s.", "ID_CIRCUIT_COINS_REFUSED": "%s %s rifiutati da %s.", "ID_CIRCUIT_COINS_REFUSED_TO_ME": "%s %s rifiutati da %s.", diff --git a/src/server/locales/it.json b/src/server/locales/it.json index 00a8e13..8efa8f0 100644 --- a/src/server/locales/it.json +++ b/src/server/locales/it.json @@ -5,7 +5,7 @@ "Service: %s": "Servizio: %s", "%s new Good: %s": "%s nuovo Bene: %s", "%s new Service: %s": "%s nuovo Servizio: %s", - "OPEN PAGE": "APRI PAGINA", + "OPEN PAGE": "APRI la APP RISO oppure visita riso.app", "%s asked you for Friendship": "%s ti ha chiesto l'Amicizia", "%s accepted your Friendship": "%s ha accettato l'Amicizia", "%s refused your Friendship": "%s ha rifiutato l'Amicizia", @@ -51,10 +51,11 @@ "CIRCUIT_EXIT_USER": "❌ l'utente %s è uscito dal Circuito %s", "CIRCUIT_EXIT_USER_TO_ME": "❌ Sei uscito dal Circuito %s", "CIRCUIT_REMOVED_TO_ME": "❌ Sei stato rimosso dal Circuito %s (da parte di %s)", - "CIRCUIT_SENDCOINSREQ": "%s ti sta inviando %s %s.", - "CIRCUIT_SENDCOINSREQ_TO_ME": "Stai inviando %s %s a %s.", - "ID_CIRCUIT_COINS_ACCEPTED": "%s %s accettati da %s.", - "ID_CIRCUIT_COINS_ACCEPTED_TO_ME": "%s %s sono stati accettati da %s.", + "CIRCUIT_SENDCOINSREQ": "%s ti sta inviando %s %s.", + "CIRCUIT_SENDCOINSREQ_TO_ME": "Stai inviando %s %s a %s. \nIl destinatario deve acettare la transazione.", + "ID_CIRCUIT_COINS_ACCEPTED": "%s %s accettati da %s.", + "SALDO_UPDATE": "[Saldo %s %s]", + "ID_CIRCUIT_COINS_ACCEPTED_TO_ME": "%s %s sono stati accettati da %s.", "ID_CIRCUIT_COINS_REFUSED": "%s %s rifiutati da %s.", "ID_CIRCUIT_COINS_REFUSED_TO_ME": "%s %s rifiutati da %s.", "CIRCUIT_AMOUNT_EXCEED_FIDO": "L'importo supera la quantità massima concessa per %s", diff --git a/src/server/models/account.js b/src/server/models/account.js index a1bc487..6dee0e5 100755 --- a/src/server/models/account.js +++ b/src/server/models/account.js @@ -53,6 +53,9 @@ const AccountSchema = new Schema({ saldo: { type: Number, }, + totTransato: { + type: Number, + }, deleted: { type: Boolean, default: false, @@ -116,6 +119,10 @@ AccountSchema.methods.addtoSaldo = async function(amount) { if (account) { account.saldo = account.saldo + amount; + if (!account.totTransato) { + account.totTransato = 0; + } + account.totTransato += Math.abs(amount); account.date_updated = new Date(); return await account.save(); } diff --git a/src/server/models/circuit.js b/src/server/models/circuit.js index 1f72171..3499f61 100755 --- a/src/server/models/circuit.js +++ b/src/server/models/circuit.js @@ -40,6 +40,13 @@ const CircuitSchema = new Schema({ subname: { type: String, }, + idCity: [ + { + type: Number, + }], + pub_to_share: { + type: Number, // PUB_TO_SHARE_ALL, PUB_TO_SHARE_ONLY_GROUPS_FOLLOW + }, longdescr: { type: String, }, @@ -220,6 +227,8 @@ CircuitSchema.statics.getWhatToShow = function(idapp, username) { fido_scoperto_default: 1, qta_max_default: 1, symbol: 1, + idCity: 1, + pub_to_share: 1, color: 1, abbrev: 1, data_costituz: 1, @@ -227,6 +236,7 @@ CircuitSchema.statics.getWhatToShow = function(idapp, username) { admins: 1, req_users: 1, refused_users: 1, + 'mycities': 1, }; }; @@ -255,6 +265,8 @@ CircuitSchema.statics.getWhatToShow_Unknown = function(idapp, username) { qta_max_default: 1, symbol: 1, color: 1, + idCity: 1, + pub_to_share: 1, abbrev: 1, data_costituz: 1, photos: 1, @@ -264,6 +276,7 @@ CircuitSchema.statics.getWhatToShow_Unknown = function(idapp, username) { date_updated: 1, req_users: 1, refused_users: 1, + 'mycities': 1, }; }; @@ -396,7 +409,11 @@ CircuitSchema.statics.getUserCircuits = async function(idapp, username) { try { let aggr1 = [ { - $match: {idapp, username}, + $match: {idapp, username, + $or: [ + {deleted: {$exists: false}}, + {deleted: {$exists: true, $eq: false}}], + }, }, { $lookup: { @@ -510,6 +527,9 @@ CircuitSchema.statics.sendCoins = async function(onlycheck, idapp, usernameOrig, ris.useraccounts = await Account.getUserAccounts(idapp, usernameOrig); + extrarec.saldoOrig = accountorigTable.saldo; + extrarec.saldoDest = accountdestTable.saldo; + } else { console.log('NON Inviate Monete da', usernameOrig, extrarec.dest, myqty, extrarec.causal); } diff --git a/src/server/models/movement.js b/src/server/models/movement.js index 6a0c6a3..de0443f 100755 --- a/src/server/models/movement.js +++ b/src/server/models/movement.js @@ -88,6 +88,9 @@ MovementSchema.statics.executeQueryTable = function(idapp, params) { MovementSchema.statics.addMov = async function(idapp, accountFromIdTable, accountToIdTable, amount, causal) { try { + // Only positive values + amount = Math.abs(amount); + let mymov = Movement( { _id: new ObjectID().toString(), diff --git a/src/server/models/myhosp.js b/src/server/models/myhosp.js index 3ef7d29..0702225 100755 --- a/src/server/models/myhosp.js +++ b/src/server/models/myhosp.js @@ -171,6 +171,7 @@ MyHospSchema.statics.executeQueryTable = function(idapp, params, user) { "profile.mygroups": 1, "profile.mycircuits": 1, 'profile.qualifica': 1, + 'mycities': 1, reported: 1, }, }, diff --git a/src/server/models/sendnotif.js b/src/server/models/sendnotif.js index d1e6c72..772a42f 100755 --- a/src/server/models/sendnotif.js +++ b/src/server/models/sendnotif.js @@ -51,6 +51,10 @@ const sendNotifSchema = new Schema({ datenotif: { type: Date, }, + date_created: { + type: Date, + default: Date.now, + }, status: { type: Number, default: 0, @@ -144,7 +148,7 @@ sendNotifSchema.statics.findAllNotifByUsernameIdAndIdApp = function(username, la }; -sendNotifSchema.statics.getDescrAndLinkByRecNotif = function(recnotif) { +sendNotifSchema.statics.getDescrAndLinkByRecNotif = async function(recnotif) { const numchars = 80; let newdescr = ''; @@ -321,7 +325,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = function(recnotif) { } tag = 'removeadmincircuit'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ) { - newdescr = i18n.__('CIRCUIT_SENDCOINSREQ', recnotif.paramsObj.username_action, recnotif.paramsObj.extrarec.qty.toString(), + newdescr = i18n.__('CIRCUIT_SENDCOINSREQ', tools.getAhref(recnotif.paramsObj.username_action, await tools.getLinkUserTelegram(recnotif.idapp, recnotif.paramsObj.username_action)), recnotif.paramsObj.extrarec.qty.toString(), recnotif.paramsObj.extrarec.symbol); tag = 'sendcoin'; recnotif.openUrl = '/circuit/' + recnotif.paramsObj.path; //++Todo: dove lo mando ? @@ -332,12 +336,15 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = function(recnotif) { recnotif.openUrl = '/circuit/' + recnotif.paramsObj.path; //++Todo: dove lo mando ? } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_COINS_ACCEPTED) { newdescr = i18n.__('ID_CIRCUIT_COINS_ACCEPTED', recnotif.paramsObj.extrarec.qty.toString(), recnotif.paramsObj.extrarec.symbol, - recnotif.paramsObj.username_action); + recnotif.paramsObj.username_action) + `\n` + i18n.__('SALDO_UPDATE', recnotif.paramsObj.extrarec.saldoDest, + recnotif.paramsObj.extrarec.symbol + ); tag = 'sendcoin'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_COINS_ACCEPTED_SENT) { newdescr = i18n.__('ID_CIRCUIT_COINS_ACCEPTED_TO_ME', recnotif.paramsObj.extrarec.qty.toString(), recnotif.paramsObj.extrarec.symbol, - recnotif.paramsObj.extrarec.dest); + recnotif.paramsObj.extrarec.dest) + `\n` + i18n.__('SALDO_UPDATE', recnotif.paramsObj.extrarec.saldoOrig, + recnotif.paramsObj.extrarec.symbol); tag = 'sendcoin'; } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_COINS_REFUSED) { newdescr = i18n.__('ID_CIRCUIT_COINS_REFUSED', recnotif.paramsObj.extrarec.qty.toString(), recnotif.paramsObj.extrarec.symbol, @@ -346,7 +353,7 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = function(recnotif) { } else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_COINS_REFUSED_SENT) { newdescr = i18n.__('ID_CIRCUIT_COINS_REFUSED_TO_ME', recnotif.paramsObj.extrarec.qty.toString(), recnotif.paramsObj.extrarec.symbol, recnotif.paramsObj.extrarec.dest); - tag = 'sendcoin'; + tag = 'sendcoin';ac } } @@ -451,7 +458,7 @@ sendNotifSchema.statics.updateStatusAndDescr = async function(myrecnotif, onlysa try { if (!myrecnotif.openUrl) { // If not exist, then I set openUrl and description - myrecnotif = this.getDescrAndLinkByRecNotif(myrecnotif); + myrecnotif = await this.getDescrAndLinkByRecNotif(myrecnotif); } let newstatus = 0; @@ -523,8 +530,9 @@ sendNotifSchema.statics.updateStatusAndDescr = async function(myrecnotif, onlysa if (newstatus) { const fields_to_update = { status: newstatus, - read: true, + read: false, descr: myrecnotif.descr, + datenotif: new Date(), }; let query = { @@ -753,7 +761,7 @@ sendNotifSchema.statics.sendToTheDestinations = async function(myrecnotifpass, r myrecnotifpass.myrectableorig = myrectableorig; } - myrecnotifpass = this.getDescrAndLinkByRecNotif(myrecnotifpass); + myrecnotifpass = await this.getDescrAndLinkByRecNotif(myrecnotifpass); delete myrecnotifpass._doc['_id']; for (const user of userlist) { diff --git a/src/server/models/user.js b/src/server/models/user.js index 20aef81..2aadc41 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -2642,6 +2642,16 @@ UserSchema.statics.SetTelegramIdSuccess = async function(idapp, id, teleg_id) { }; +UserSchema.statics.getUsernameTelegram = async function(idapp, username) { + const User = this; + return await User.findOne({idapp, username}, {'profile.username_telegram': 1}).lean().then((ris) => { + if (ris) + return ris.profile.username_telegram + else + return ''; + }); +}; + UserSchema.statics.setUsernameTelegram = async function( idapp, id, username_telegram, firstname_telegram, lastname_telegram) { const User = this; diff --git a/src/server/populate/contribtypes.js b/src/server/populate/contribtypes.js index 2f629a1..8c3a987 100644 --- a/src/server/populate/contribtypes.js +++ b/src/server/populate/contribtypes.js @@ -161,6 +161,12 @@ module.exports = { "label" : "Monete Alternative", "__v" : 0 }, + { + "_id" : ObjectID("51bc482667de9a1f64b254ac"), + "idapp" : "13", + "label" : "RIS", + "__v" : 0 + }, { "_id" : ObjectID("51bc482667de9a1f64b254fb"), "idapp" : "13", diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 1e3a32a..8bc7a17 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -370,7 +370,7 @@ router.post('/settable', authenticate, async (req, res) => { mytablerec.date_updated = new Date(); } - console.log('mydata',mydata); + // console.log('mydata',mydata); return await mytablerec.save(). then(async (rec) => { diff --git a/src/server/router/sendnotif_router.js b/src/server/router/sendnotif_router.js index 0d5a132..5b31d29 100755 --- a/src/server/router/sendnotif_router.js +++ b/src/server/router/sendnotif_router.js @@ -1,4 +1,3 @@ - const express = require('express'); const router = express.Router(); @@ -62,6 +61,28 @@ router.get('/setall/:username/:qualinotif/:idapp', authenticate, async (req, res }); +router.get('/set/:_id/:idapp', authenticate, async (req, res) => { + + const _id = req.params._id; + const username_call = req.user.username; + + try { + let query = {_id, dest: username_call, read: false}; + + const rec = await SendNotif.findOne(query); + if (rec) { + rec.read = true; + await rec.save(); + return res.send(true); + } + res.send(false); + + } catch (e) { + res.status(400).send(e); + } + +}); + router.get('/del/:username/:id/:idapp', authenticate, async (req, res) => { const idapp = req.params.idapp; @@ -123,14 +144,14 @@ router.get('/:username/:lastdataread/:idapp', authenticate, (req, res) => { return res.status(404).send({code: server_constants.RIS_CODE_NOT_MY_USERNAME}); } - return SendNotif.findAllNotifByUsernameIdAndIdApp(username, lastdataread, idapp).then( async (arrnotif) => { + return SendNotif.findAllNotifByUsernameIdAndIdApp(username, lastdataread, idapp).then(async (arrnotif) => { // const wait = new Promise((resolve, reject) => { // setTimeout(() => { //++Todo: Ottimizzare ! Non occorre inviare tutti questi dati !!! Solo per il Circuito ?! const userprofile = await User.getExtraInfoByUsername(idapp, req.user.username); - return res.send({arrnotif, userprofile } ); + return res.send({arrnotif, userprofile}); }).catch((e) => { console.log(e.message); diff --git a/src/server/tools/general.js b/src/server/tools/general.js index af093ed..251c6ab 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -578,6 +578,7 @@ module.exports = { 'title', 'openUrl', 'datenotif', + 'date_updated', 'read', 'deleted', 'idapp', @@ -750,6 +751,8 @@ module.exports = { content = this.convertHTMLtoText(content); + content = this.ConvertHTMLToPlainText(content); + let payload = { actions, title: title, @@ -1313,6 +1316,10 @@ module.exports = { }, + ConvertHTMLToPlainText(strHTML) { + return strHTML.replace(/<[^>]+>/g, ''); + }, + convertHTMLtoText(myhtml) { let msg = myhtml; msg = msg.replace('"', '"'); @@ -1383,6 +1390,23 @@ module.exports = { return this.getHostByIdApp(idapp) + '/my/' + username; }, + getLinkUserTelegram: async function(idapp, username, myuser) { + var {User} = require('../models/user'); + + let u_tg = ''; + if (myuser) + u_tg = myuser.profile && myuser.profile.hasOwnProperty('username_telegram') ? myuser.profile.username_telegram : usernametelegram; + + if (!u_tg) { + u_tg = await User.getUsernameTelegram(idapp, username); + } + + if (u_tg) + return `https://t.me/${u_tg}`; + else + return ''; + }, + getLinkEditUserProfile: function(idapp) { return this.getHostByIdApp(idapp) + '/editprofile'; }, @@ -3296,11 +3320,17 @@ module.exports = { let myhost = this.getHostByIdApp(params.idapp); - if (params.openUrl) + /*if (params.openUrl) content = content + '\n' + '' + i18n.__('OPEN PAGE') + ''; + + */ } return content; }, + getAhref(username, link) { + return `${username}`; + } + };