From 03e5d2ed81fda774dc23de1ade7b50eea91cc4b1 Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Wed, 2 Oct 2024 03:46:33 +0200 Subject: [PATCH] =?UTF-8?q?-=20Fare=20LISTA=20MOVIMENTI=20pi=C3=B9=20compr?= =?UTF-8?q?ensibile=20=20-=20Grafica=20Circuiti?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/apache2/contatti.htm | 36 ++++++++++ emails/risricevuti/it/html.pug | 11 +-- logtrans.txt | 42 +++++++++++- src/server/models/attivita.js | 2 +- src/server/models/circuit.js | 10 ++- src/server/models/movement.js | 108 +++++++++++++++++++----------- src/server/models/mybacheca.js | 2 +- src/server/models/mygood.js | 2 +- src/server/models/mygroup.js | 22 ++---- src/server/models/myhosp.js | 2 +- src/server/models/myskill.js | 2 +- src/server/models/stat.js | 12 ++-- src/server/models/user.js | 2 +- src/server/router/users_router.js | 3 +- src/server/sendemail.js | 1 + src/server/tools/general.js | 41 +++++++++--- src/server/tools/shared_nodejs.js | 4 +- 17 files changed, 218 insertions(+), 84 deletions(-) create mode 100644 docs/apache2/contatti.htm diff --git a/docs/apache2/contatti.htm b/docs/apache2/contatti.htm new file mode 100644 index 0000000..6e1cd7e --- /dev/null +++ b/docs/apache2/contatti.htm @@ -0,0 +1,36 @@ + + + +

Contattaci

+

Hai domande, consigli o suggerimenti da proporci?
Inviaci un messaggio attraverso il form qui + sotto!

+
+
+

Dove siamo

+

Macro Società Cooperativa srl
Via Giardino, 30 – 47522 – Cesena (FC)

+

Fai click sulla mappa (OpenStreetMap) per trovare il percorso dal tuo indirizzo.

+ + mappa-macro \ No newline at end of file diff --git a/emails/risricevuti/it/html.pug b/emails/risricevuti/it/html.pug index cde6195..a96684f 100755 --- a/emails/risricevuti/it/html.pug +++ b/emails/risricevuti/it/html.pug @@ -1,8 +1,11 @@ p Ciao #{name}, -p Hai ricevuto - strong #{qty} #{symbol} - | da parte di #{mittente} in data #{transactionDate} sul - strong #{nomecircuito} ! +p Hai ricevuto + strong #{qty} #{symbol} + if groupDestoContoCom + | sul conto + strong #{groupDestoContoCom} + span da parte di #{mittente} in data #{transactionDate} sul + strong #{nomecircuito} ! if causale p
p Commento: #{causale} diff --git a/logtrans.txt b/logtrans.txt index eb74adb..77131b2 100644 --- a/logtrans.txt +++ b/logtrans.txt @@ -329,4 +329,44 @@ ElenaEspx: 29.40 RIS] Lun 30/09 ORE 22:58: [Circuito RIS Bologna]: Inviate Monete da paoloar77 a ElenaEspx 0.01 RIS [causale: Prova del commento. Ciaooo come stai . Tutto benekfaòjd ask dakisj dlaks jdlkas jdlakdklasj dlkas jdlasd] Saldi: paoloar77: 20.99 RIS] -ElenaEspx: 29.41 RIS] \ No newline at end of file +ElenaEspx: 29.41 RIS] +Mer 02/10 ORE 00:26: [Circuito RIS Italia]: Inviate Monete da paoloar77 a PiuCheBuono(GaseBottega) 2 RIS [causale: ] +Saldi: +paoloar77: 101.50 RIS] +PiuCheBuono(GaseBottega): -64.50 RIS] +Mer 02/10 ORE 00:51: [Circuito RIS Italia]: Inviate Monete da paoloar77 a TestTransazPao 1 RIS [causale: ] +Saldi: +paoloar77: 100.50 RIS] +TestTransazPao: 1.00 RIS] +Mer 02/10 ORE 02:07: [Circuito RIS Italia]: Inviate Monete da paoloar77 a TestTransazPao 2 RIS [causale: dsadasdada] +Saldi: +paoloar77: 95.50 RIS] +TestTransazPao: 6.00 RIS] +Mer 02/10 ORE 02:10: [Circuito RIS Italia]: Inviate Monete da paoloar77 a TestTransazPao 2 RIS [causale: DSDA Ciaoooooooo] +Saldi: +paoloar77: 88.50 RIS] +TestTransazPao: 13.00 RIS] +Mer 02/10 ORE 02:16: [Circuito RIS Italia]: Inviate Monete da paoloar77 a TestTransazPao 0.5 RIS [causale: Miaooooooooo] +Saldi: +paoloar77: 88.00 RIS] +TestTransazPao: 13.50 RIS] +Mer 02/10 ORE 02:19: [Circuito RIS Italia]: Inviate Monete da paoloar77 a TestTransazPao 2 RIS [causale: AAAAA] +Saldi: +paoloar77: 86.00 RIS] +TestTransazPao: 15.50 RIS] +Mer 02/10 ORE 02:21: [Circuito RIS Italia]: Inviate Monete da paoloar77 a TestTransazPao 1 RIS [causale: ] +Saldi: +paoloar77: 85.00 RIS] +TestTransazPao: 16.50 RIS] +Mer 02/10 ORE 02:24: [Circuito RIS Italia]: Inviate Monete da paoloar77 a TestTransazPao 2 RIS [causale: ] +Saldi: +paoloar77: 83.00 RIS] +TestTransazPao: 18.50 RIS] +Mer 02/10 ORE 02:25: [Circuito RIS Bologna]: Inviate Monete da paoloar77 a ElenaEspx 1 RIS [causale: ] +Saldi: +paoloar77: 19.99 RIS] +ElenaEspx: 30.41 RIS] +Mer 02/10 ORE 03:31: [Circuito RIS Bologna]: Inviate Monete da paoloar77 a ElenaEspx 3 RIS [causale: ] +Saldi: +paoloar77: 16.99 RIS] +ElenaEspx: 33.41 RIS] \ No newline at end of file diff --git a/src/server/models/attivita.js b/src/server/models/attivita.js index b3e5ebb..fb49c15 100755 --- a/src/server/models/attivita.js +++ b/src/server/models/attivita.js @@ -129,7 +129,7 @@ const AttivitaSchema = new Schema( //**ADDFIELD_ATTIVITA }, ...Reaction.getFieldsForReactions(), - ...MyGroup.getFieldsForAnnunci() + ...tools.getFieldsForAnnunci() }, { strict: false }); AttivitaSchema.index({ 'idapp': 1 }); diff --git a/src/server/models/circuit.js b/src/server/models/circuit.js index 223c18c..31fee04 100755 --- a/src/server/models/circuit.js +++ b/src/server/models/circuit.js @@ -394,7 +394,7 @@ CircuitSchema.statics.getWhatToShow_Unknown = function (idapp, username) { }; }; -CircuitSchema.statics.getCircuitsByUsername = async function (idapp, username, user) { +CircuitSchema.statics.getCircuitsByUsername = async function (idapp, username, user, nummovTodownload) { try { const { User } = require('../models/user'); @@ -442,12 +442,15 @@ CircuitSchema.statics.getCircuitsByUsername = async function (idapp, username, u { deleted: { $exists: true, $eq: false } }], }, whatToShow_Unknown).sort({ status: -1 }).lean(); + const last_my_transactions = await Movement.getLastN_Transactions(idapp, nummovTodownload, username, ''); + return { listcircuits, asked_circuits, refused_circuits, manage_mycircuits, mycircuits: user.profile.mycircuits, + last_my_transactions, }; } catch (e) { @@ -664,6 +667,8 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig const { User } = require('../models/user'); + const { MyGroup } = require('./mygroup'); + const sendemail = require('../sendemail'); let ris = { @@ -785,10 +790,13 @@ CircuitSchema.statics.sendCoins = async function (onlycheck, idapp, usernameOrig await sendemail.sendEmail_RisRicevuti(myuserDest.lang, myuserDest, myuserDest.email, idapp, paramsrec); } else if (extrarec.groupdest || extrarec.contoComDest) { + const groupDestoContoCom = extrarec.groupdest ? extrarec.groupdest : (extrarec && extrarec.contoComDest ? extrarec.contoComDest : ''); let arrusers = await MyGroup.getListAdminsByGroupName(idapp, groupDestoContoCom); if (arrusers.length <= 0) arrusers = await Circuit.getListAdminsByCircuitPath(idapp, groupDestoContoCom); + paramsrec.groupDestoContoCom = groupDestoContoCom; + for (let i = 0; i < arrusers.length; i++) { let myuserDest = await User.getUserByUsername(idapp, arrusers[i].username); diff --git a/src/server/models/movement.js b/src/server/models/movement.js index a12bb6e..3b5bfda 100755 --- a/src/server/models/movement.js +++ b/src/server/models/movement.js @@ -137,6 +137,8 @@ MovementSchema.statics.getQueryMovsByCircuitId = async function (idapp, username } const myaccount = await Account.getAccountByUsernameAndCircuitId(idapp, username, circuitId, false, true, groupname, contocom); + + if (myaccount) { let aggr1 = [ @@ -741,24 +743,48 @@ MovementSchema.statics.checkIfCoinsAlreadySent = async function (notifId) { }; -MovementSchema.statics.getLastN_Transactions = async function (idapp, numtransaz = 10) { +MovementSchema.statics.getLastN_Transactions = async function (idapp, numtransaz = 10, username = '', groupname = '', contocom = '') { const MyMovement = this; // get last "numtransaz" transactions + let abilitaquerypersingolo = (username || groupname || contocom); + + let querym2 = null; + + if (abilitaquerypersingolo) { + let v1 = []; + + if (username) { + v1.push({ 'userfrom.username': username }, + { 'userto.username': username }); + } + + if (groupname) { + v1.push({ 'groupfrom.groupname': groupname }, + { 'groupto.groupname': groupname }); + } + if (contocom) { + v1.push({ 'contocomfrom.name': contocom }, + { 'contocomto.name': contocom }); + } + + querym2 = { + $match: + { $or: v1 } + }; + }; + let aggr1 = [ { - $match: { - idapp, - }, + $match: { idapp }, }, { $sort: { transactionDate: -1, } }, - { $limit: numtransaz }, { $lookup: { from: 'accounts', @@ -968,40 +994,46 @@ MovementSchema.statics.getLastN_Transactions = async function (idapp, numtransaz preserveNullAndEmptyArrays: true, }, }, - { - $project: - { - transactionDate: 1, - amount: 1, - causal: 1, - notifId: 1, - 'circuitfrom.symbol': 1, - 'circuitfrom.name': 1, - 'circuitto.symbol': 1, - 'circuitto.name': 1, - 'userfrom.verified_by_aportador': 1, - 'userfrom.username': 1, - 'userfrom.profile.img': 1, - 'userto.username': 1, - 'userto.profile.img': 1, - 'userto.verified_by_aportador': 1, - 'groupfrom.groupname': 1, - 'groupfrom.verified_by_aportador': 1, - 'groupfrom.title': 1, - 'groupfrom.photos': 1, - 'groupto.groupname': 1, - 'groupto.title': 1, - 'groupto.photos': 1, - 'groupto.verified_by_aportador': 1, - 'contocomfrom.path': 1, - 'contocomfrom.name': 1, - 'contocomto.path': 1, - 'contocomto.name': 1, - }, - }, - ]; + if (querym2) + aggr1.push(querym2); + + if (numtransaz) + aggr1.push({ $limit: numtransaz }); + + aggr1.push({ + $project: + { + transactionDate: 1, + amount: 1, + causal: 1, + notifId: 1, + 'circuitfrom.symbol': 1, + 'circuitfrom.name': 1, + 'circuitto.symbol': 1, + 'circuitto.name': 1, + 'userfrom.verified_by_aportador': 1, + 'userfrom.username': 1, + 'userfrom.profile.img': 1, + 'userto.username': 1, + 'userto.profile.img': 1, + 'userto.verified_by_aportador': 1, + 'groupfrom.groupname': 1, + 'groupfrom.verified_by_aportador': 1, + 'groupfrom.title': 1, + 'groupfrom.photos': 1, + 'groupto.groupname': 1, + 'groupto.title': 1, + 'groupto.photos': 1, + 'groupto.verified_by_aportador': 1, + 'contocomfrom.path': 1, + 'contocomfrom.name': 1, + 'contocomto.path': 1, + 'contocomto.name': 1, + }, + }); + const lastNtransac = await MyMovement.aggregate(aggr1); /* @@ -1013,7 +1045,7 @@ MovementSchema.statics.getLastN_Transactions = async function (idapp, numtransaz circuito: string amount: number causale: string - + */ diff --git a/src/server/models/mybacheca.js b/src/server/models/mybacheca.js index afa7dd0..ed46190 100755 --- a/src/server/models/mybacheca.js +++ b/src/server/models/mybacheca.js @@ -120,7 +120,7 @@ const MyBachecaSchema = new Schema({ }, }, ...Reaction.getFieldsForReactions(), - ...MyGroup.getFieldsForAnnunci() + ...tools.getFieldsForAnnunci() }); MyBachecaSchema.pre('save', async function (next) { diff --git a/src/server/models/mygood.js b/src/server/models/mygood.js index 0b9717d..c01d9d4 100755 --- a/src/server/models/mygood.js +++ b/src/server/models/mygood.js @@ -92,7 +92,7 @@ const MyGoodSchema = new Schema({ }, }, ...Reaction.getFieldsForReactions(), - ...MyGroup.getFieldsForAnnunci() + ...tools.getFieldsForAnnunci() }); MyGoodSchema.pre('save', async function (next) { diff --git a/src/server/models/mygroup.js b/src/server/models/mygroup.js index 1097066..feaeb20 100755 --- a/src/server/models/mygroup.js +++ b/src/server/models/mygroup.js @@ -66,7 +66,6 @@ const MyGroupSchema = new Schema({ type: String, default: '', }, - //**ADDFIELD_MYGROUPS visibility: [ { type: Number, @@ -125,11 +124,9 @@ const MyGroupSchema = new Schema({ lastdate_reqRisGroup: { type: Date, }, + //**ADDFIELD_MYGROUPS - idMyGroup: { - type: String, - }, - // **ADDFIELD_MYGROUPS + ...tools.getFieldsForAnnunci(), }); @@ -252,7 +249,6 @@ MyGroupSchema.statics.getWhatToShow = function (idapp, username) { photos: 1, idCity: 1, website: 1, - //**ADDFIELD_MYGROUPS link_telegram: 1, note: 1, admins: 1, @@ -264,6 +260,7 @@ MyGroupSchema.statics.getWhatToShow = function (idapp, username) { date_updated: 1, mycircuits: 1, lastdate_reqRisGroup: 1, + //**ADDFIELD_MYGROUPS }; whatToShow = { ...whatToShow, ...shared_consts.ANNUNCI_FIELDS }; @@ -647,7 +644,7 @@ MyGroupSchema.statics.getReceiveRISGroups = async function (idapp) { MyGroupSchema.statics.renameCircuitName = async function (idapp, oldcircuitname, newcircuitname) { - + return await this.updateMany({ idapp, 'mycircuits.circuitname': oldcircuitname }, { $set: { 'profile.mycircuits.$.circuitname': newcircuitname } }); }; @@ -663,17 +660,6 @@ MyGroupSchema.statics.setReceiveRisGroup = async function (idapp, groupname) { }; -MyGroupSchema.statics.getFieldsForAnnunci = function () { - let annunciFields = { - idMyGroup: { - type: String, - }, - // **ADDFIELD_MYGROUPS - }; - - return annunciFields; -}; - const MyGroup = mongoose.model('MyGroup', MyGroupSchema); MyGroup.createIndexes((err) => { diff --git a/src/server/models/myhosp.js b/src/server/models/myhosp.js index dc699a4..57b6d52 100755 --- a/src/server/models/myhosp.js +++ b/src/server/models/myhosp.js @@ -99,7 +99,7 @@ const MyHospSchema = new Schema({ }, }, ...Reaction.getFieldsForReactions(), - ...MyGroup.getFieldsForAnnunci() + ...tools.getFieldsForAnnunci() }); MyHospSchema.pre('save', async function (next) { diff --git a/src/server/models/myskill.js b/src/server/models/myskill.js index 4ef1622..9cdc3bc 100755 --- a/src/server/models/myskill.js +++ b/src/server/models/myskill.js @@ -99,7 +99,7 @@ const MySkillSchema = new Schema( }, }, ...Reaction.getFieldsForReactions(), - ...MyGroup.getFieldsForAnnunci() + ...tools.getFieldsForAnnunci() }, { strict: false }); MySkillSchema.index({ 'idapp': 1 }); diff --git a/src/server/models/stat.js b/src/server/models/stat.js index 08a82e4..5d32c91 100755 --- a/src/server/models/stat.js +++ b/src/server/models/stat.js @@ -15,6 +15,9 @@ const { Settings } = require('../models/settings'); const shared_consts = require('../tools/shared_nodejs'); const { ObjectID } = require('mongodb'); +var ObjectId = mongoose.Types.ObjectId; + + // Resolving error Unknown modifier: $pushAll mongoose.plugin(schema => { schema.options.usePushEach = true; @@ -68,8 +71,8 @@ StatSchema.statics.updateStats = async function (datastat) { datastat.last_transactions.forEach(function (mov) { let ris = tools.getStringaConto(mov) - mov.myfrom = ris.myfrom - mov.myto = ris.myto + mov.userfrom = ris.userfrom + mov.userto = ris.userto mov.tipocontofrom = ris.tipocontofrom mov.tipocontoto = ris.tipocontoto }); @@ -113,11 +116,12 @@ StatSchema.statics.calculateStats = async function (idapp) { }; // Trova il record di oggi: - const trova_se_oggi = await Stat.findOne({ idapp, date_created: { $gte: new Date(new Date().setHours(0, 0, 0, 0)) } }); + const trova_se_oggi = await Stat.findOne({ idapp, date_created: { $gte: new Date(new Date().setHours(0, 0, 0, 0)) } }).lean(); if (trova_se_oggi) { // Aggiorna il record di oggi: - await Stat.updateOne({ _id: trova_se_oggi._id }, { $set: datastat }); + const ris = await Stat.findOneAndUpdate({ _id: trova_se_oggi._id }, { $set: datastat }, { new: true }); + console.log('ris', ris); } else { // Aggiungi un nuovo record: await Stat.insertMany([datastat]); diff --git a/src/server/models/user.js b/src/server/models/user.js index 544af00..cfa962e 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -5614,7 +5614,7 @@ UserSchema.statics.addExtraInfo = async function (idapp, recUser, recUserSave, v // Circuit> - const circuitobj = await Circuit.getCircuitsByUsername(idapp, recUser.username, recUser); + const circuitobj = await Circuit.getCircuitsByUsername(idapp, recUser.username, recUser, 5); const useraccounts = await Account.getUserAccounts(idapp, recUser.username); diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index 17be2c4..78438d3 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -890,8 +890,9 @@ router.post('/circuits', authenticate, (req, res) => { const username = req.user.username; idapp = req.body.idapp; locale = req.body.locale; + nummovTodownload = req.body.nummovTodownload; - return Circuit.getCircuitsByUsername(idapp, username, req.user).then((ris) => { + return Circuit.getCircuitsByUsername(idapp, username, req.user, nummovTodownload).then((ris) => { res.send(ris); }).catch((e) => { tools.mylog('ERRORE IN circuits: ' + e.message); diff --git a/src/server/sendemail.js b/src/server/sendemail.js index 14a2d0a..9415749 100755 --- a/src/server/sendemail.js +++ b/src/server/sendemail.js @@ -319,6 +319,7 @@ module.exports = { transactionDate: tools.getstrDate_DD_MM_YYYY(myrec.transactionDate), symbol: myrec.symbol, causale: myrec.causale, + groupDestoContoCom: myrec.groupDestoContoCom, }; mylocalsconf = this.setParamsForTemplate(userDest, mylocalsconf); diff --git a/src/server/tools/general.js b/src/server/tools/general.js index 1828a78..7850830 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -5609,39 +5609,44 @@ module.exports = { getStringaConto(mov) { let mystr = '' - let myfrom = '' - let myto = '' + let userfrom = '' + let userto = '' + + let profilefrom = null + let profileto = null let tipocontofrom = shared_consts.AccountType.USER let tipocontoto = shared_consts.AccountType.USER if (mov.contocomfrom && mov.contocomfrom.name) { - myfrom += mov.contocomfrom.name + ' ' + userfrom += mov.contocomfrom.name tipocontofrom = shared_consts.AccountType.COMMUNITY_ACCOUNT } if (mov.groupfrom) { - myfrom += mov.groupfrom.groupname + ' ' + userfrom += mov.groupfrom.groupname tipocontofrom = shared_consts.AccountType.COLLECTIVE_ACCOUNT } if (mov.userfrom) { - myfrom += mov.userfrom.username + ' ' + userfrom += mov.userfrom.username + profilefrom = mov.userfrom.profile } if (mov.contocomto && mov.contocomto.name) { - myto += mov.contocomto.name + ' ' + userto += mov.contocomto.name tipocontoto = shared_consts.AccountType.COMMUNITY_ACCOUNT } if (mov.groupto) { - myto += mov.groupto.groupname + ' ' + userto += mov.groupto.groupname tipocontoto = shared_consts.AccountType.COLLECTIVE_ACCOUNT } if (mov.userto) { - myto += mov.userto.username + ' ' + userto += mov.userto.username + profileto = mov.userto.profile } - // mystr = t('movement.from') + myfrom + ' ' + t('movement.to') + myto + // mystr = t('movement.from') + userfrom + ' ' + t('movement.to') + userto - return { myfrom, myto, tipocontofrom, tipocontoto } + return { userfrom: {profile: profilefrom, username: userfrom}, userto: {profile: profileto, username: userto}, tipocontofrom, tipocontoto } }, ImageDownloader, @@ -5685,5 +5690,21 @@ module.exports = { return 'it'; }, + getFieldsForAnnunci() { + let annunciFields = { + idMyGroup: { + type: String, + }, + expiryDateAdv: { + type: Date, + }, + enableExpiringAdv: { + type: Boolean, + }, + // **ADDFIELD_ANNUNCI + }; + + return annunciFields; + }, }; diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 2ffb70b..ae8a13c 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -177,7 +177,9 @@ module.exports = { ANNUNCI_FIELDS: { idMyGroup: 1, - // **ADDFIELD_MYGROUPS + expiryDateAdvert: 1, + + // **ADDFIELD_ANNUNCI }, // Condivise