From daf872fe559042bdbe135afcb147f4239956af59 Mon Sep 17 00:00:00 2001 From: paoloar77 Date: Thu, 3 Feb 2022 00:33:15 +0100 Subject: [PATCH] - Gruppi --- src/server/models/flotta.js | 362 ------ src/server/models/graduatoria.js | 7 +- src/server/models/listaingresso.js | 1219 ----------------- src/server/models/mygroup.js | 253 ++++ src/server/models/nave.js | 1737 ------------------------- src/server/models/navepersistente.js | 511 -------- src/server/models/user.js | 665 +++------- src/server/populate/levels.js | 10 + src/server/populate/populate.js | 10 +- src/server/populate/statusskills.js | 6 + src/server/router/api/actions.js | 29 +- src/server/router/dashboard_router.js | 151 --- src/server/router/index_router.js | 332 +---- src/server/router/mygroups_router.js | 39 + src/server/router/site_router.js | 12 +- src/server/router/users_router.js | 44 +- src/server/server.js | 2 + src/server/telegram/telegrambot.js | 28 +- src/server/tools/general.js | 49 +- src/server/tools/shared_nodejs.js | 16 +- 20 files changed, 651 insertions(+), 4831 deletions(-) delete mode 100755 src/server/models/flotta.js delete mode 100755 src/server/models/listaingresso.js create mode 100755 src/server/models/mygroup.js delete mode 100755 src/server/models/nave.js delete mode 100755 src/server/models/navepersistente.js create mode 100644 src/server/populate/levels.js create mode 100644 src/server/populate/statusskills.js create mode 100755 src/server/router/mygroups_router.js diff --git a/src/server/models/flotta.js b/src/server/models/flotta.js deleted file mode 100755 index 62c186b..0000000 --- a/src/server/models/flotta.js +++ /dev/null @@ -1,362 +0,0 @@ -const mongoose = require('mongoose').set('debug', false) -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 FlottaSchema = new mongoose.Schema({ - idapp: { - type: String, - required: true, - }, - index: { - type: Number - }, - riga: { - type: Number, - }, - col_prima: { - type: Number, - }, - col_ultima: { - type: Number, - }, - date_start: { - type: Date - }, - date_close: { - type: Date - }, - provvisoria: { - type: Boolean, - }, - DoniAttesaDiConferma: { - type: Number, - }, - DoniMancanti: { - type: Number, - }, - DoniConfermati: { - type: Number, - }, - DoniTotali: { - type: Number, - }, - note_interne: { - type: String - }, - sognatore: { - type: String - }, - sognatore_nomecognome: { - type: String - }, - link_superchat: { - type: String, - }, - link_payment: { - type: String, - }, - email_paypal: { - type: String, - }, - revolut: { - type: String, - }, - payeer_id: { - type: String, - }, - advcash_id: { - type: String, - }, - note_payment: { - type: String, - }, - tutor1: { - type: String, - }, - tutor2: { - type: String, - }, - tutor3: { - type: String, - }, - tutorslo: { - type: String, - }, - msg_inviato: { - type: Boolean, - }, - -}); - -function getQueryProj(myfilter) { - - myobjField = { - _id: 1, - idapp: 1, - lang: 1, - ind_order: 1, - name: 1, - surname: 1, - username: 1, - 'profile.paymenttypes': 1, - 'profile.email_paypal': 1, - 'profile.payeer_id': 1, - 'profile.advcash_id': 1, - 'profile.revolut': 1, - 'profile.cell': 1, - made_gift: 1, - commento_al_sognatore: 1, - sent_msg_howto_make_gift: 1, - date_made_gift: 1, - note: 1, - received_gift: 1, - date_received_gift: 1, - num_tess: 1, - parent_id: 1, - riga: 1, - col: 1, - created: 1, - // date_start: 1, - // date_gift_chat_open: 1, - // link_chat: 1, - // provvisoria: 1, - // note_bot: 1, - // note_interne: 1, - // tutor: 1, - // tutor_namesurname: 1, - }; - - const query = [ - { $match: myfilter }, - { - $lookup: { - from: "listaingressos", - localField: "ind_order", - foreignField: "ind_order", // field in the user collection - as: "mylista" - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [ { $arrayElemAt: [ "$mylista", 0 ] }, "$$ROOT" ] } } - }, - { - $lookup: { - from: "users", - as: "user", - let: {username: '$username' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$username', '$$username'] }, - { $eq: ['$idapp', myfilter.idapp] }, - ] - } - } - } - ] - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } } - // $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] },] } } - }, - { $project: myobjField } - ]; - - return query; -} - - -FlottaSchema.statics.findById = function (idapp, id) { - const Flotta = this; - - const myquery = getQueryProj({ idapp, '_id': ObjectID(id) }); - - return Flotta.aggregate(myquery); - -}; - -FlottaSchema.statics.getFieldsForSearch = function () { - return [{ field: 'ind_order', type: tools.FieldType.number }, - { field: 'col', type: tools.FieldType.number }] -}; - -FlottaSchema.statics.executeQueryTable = function (idapp, params) { - params.fieldsearch = this.getFieldsForSearch(); - return tools.executeQueryTable(this, idapp, params); -}; - -FlottaSchema.statics.findAllIdApp = async function (idapp) { - const Flotta = this; - - const myfind = { idapp }; - - return Flotta.find(myfind).sort({ riga: 1, col: 1 }); -}; - -FlottaSchema.statics.getListaFlotta = function (idapp) { - const Flotta = this; - - const myfind = { idapp }; - - return Flotta.find(myfind).sort({ riga: 1, col_prima: 1 }); -}; - -FlottaSchema.statics.getLastFlotta = function (idapp) { - const Flotta = this; - - const myfind = { idapp, date_start: { $lte: tools.IncDateNow(0) }, provvisoria: false }; - - return Flotta.findOne(myfind).sort({ riga: -1, col_prima: -1 }).limit(1); -}; - -FlottaSchema.statics.findByRigaColByDonatore = function (idapp, riga, col, offset) { - const Flotta = this; - - mypos = { - riga, - col, - numup: 3 + offset, - }; - tools.getRigaColByPosUp(mypos); - - return Flotta.findOne({ idapp, riga: mypos.riga, col_prima: mypos.col }); - -}; - -FlottaSchema.statics.findByRigaCol = function (idapp, riga, col) { - const Flotta = this; - - return Flotta.findOne({ idapp, riga, col }); - -}; - - -FlottaSchema.statics.getLastRigaCol = async function (idapp) { - return Flotta.findOne({ idapp }).sort({ riga: -1, col_prima: -1 }); -}; - -FlottaSchema.statics.getLastRigaColDefinitiva = async function (idapp) { - return Flotta.findOne({ idapp, provvisoria: false }).sort({ riga: -1, col_prima: -1 }); -}; - -FlottaSchema.pre('save', async function (next) { - if (this.isNew) { - const myrec = await Flotta.findOne().limit(1).sort({ _id: -1 }); - if (!!myrec) { - this.index = myrec._doc.index + 1; - } else { - this.index = 1; - } - } - - next(); -}); - - -FlottaSchema.statics.addRecordFlottaByParams = async function (params) { - - // Check if Exist: - const giapresente = await Flotta.findOne({ - idapp: params.idapp, - riga: params.riga, - col: params.col - }); - - if (!giapresente) { - // Prende la nave prima: - const lastnave = await Flotta.findOne({idapp}).sort({riga: -1, col: -1}); - - let nextgiftchat = null; - - if (((params.col - 1) % 8 === 0)) { - nextgiftchat = getNextDayNave(lastnave.date_gift_chat_open); - } else { - nextgiftchat = lastnave.date_gift_chat_open; - } - - const next_date_start = tools.AddDate(nextgiftchat, 7); - - let myFlotta = new Flotta({ - idapp: params.idapp, - riga: params.riga, - col: params.col, - riga1don: params.riga1don, - col1don: params.col1don, - date_gift_chat_open: nextgiftchat, - date_start: next_date_start, - provvisoria: true, - }); - return await myFlotta.save(); - } - - return false; -}; - -FlottaSchema.statics.getFlottaByNavePersistente = async function (idapp, navepers) { - const Flotta = this; - - // const indcolflottaprima = tools.getPrimaColFlotta(navepers.col1don + 7); - - const myflotta = await Flotta.findOne({ idapp, riga: navepers.riga, - $and: [ - { col_prima: { $lte: navepers.col1don } }, - { col_ultima: { $gte: navepers.col1don } } ] - }); - - return myflotta; -}; - -FlottaSchema.statics.getStrFlotta = function (flotta) { - return `Flotta ${flotta.riga}.${Math.ceil(flotta.col_prima / 8)} - ${flotta.riga}.${Math.ceil(flotta.col_ultima / 8)}: Sognatore: ${flotta.sognatore_nomecognome}`; -}; - - -FlottaSchema.statics.getFlottaByRigaColDonatore = async function (idapp, riga, col) { - const Flotta = this; - - let mypos = { - idapp, - riga, - col, - numup: 3 - }; - tools.getRigaColByPosUp(mypos); - - const myflotta = await Flotta.findOne({ idapp, riga: mypos.riga, - $and: [ - { col_prima: { $lte: col } }, - { col_ultima: { $gte: col } } ] - }); - - return myflotta; -}; - - -const Flotta = mongoose.model('Flotta', FlottaSchema); - -module.exports = { Flotta }; - - diff --git a/src/server/models/graduatoria.js b/src/server/models/graduatoria.js index 069b2e0..faef56c 100755 --- a/src/server/models/graduatoria.js +++ b/src/server/models/graduatoria.js @@ -8,7 +8,6 @@ const tools = require('../tools/general'); const { ObjectID } = require('mongodb'); -const { Nave } = require('./nave'); const { Settings } = require('./settings'); const shared_consts = require('../tools/shared_nodejs'); @@ -192,7 +191,7 @@ GraduatoriaSchema.statics.getFirstUserGradFree = async function (idapp) { }; - +/* GraduatoriaSchema.statics.addSingoloInGraduatoria_InFondo = async function (idapp, recingr) { const Graduatoria = this; @@ -200,8 +199,6 @@ GraduatoriaSchema.statics.addSingoloInGraduatoria_InFondo = async function (idap const arrindex = []; - const { ListaIngresso } = require('../models/listaingresso'); - if (!!lastimbarco) { arrindex[recingr.username] = lastimbarco.indimbarco; } else { @@ -223,6 +220,8 @@ GraduatoriaSchema.statics.addSingoloInGraduatoria_InFondo = async function (idap }; + */ + function addRecGraduatoria(idapp, ingr, index) { try { diff --git a/src/server/models/listaingresso.js b/src/server/models/listaingresso.js deleted file mode 100755 index d481637..0000000 --- a/src/server/models/listaingresso.js +++ /dev/null @@ -1,1219 +0,0 @@ -const bcrypt = require('bcryptjs'); -const mongoose = require('mongoose').set('debug', false) -const validator = require('validator'); -const jwt = require('jsonwebtoken'); -const _ = require('lodash'); - -const tools = require('../tools/general'); - -const { ObjectID } = require('mongodb'); - -const { Nave } = require('./nave'); -const { Graduatoria } = require('./graduatoria'); - -const actions = require('../router/api/actions'); - -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 ListaIngressoSchema = new mongoose.Schema({ - idapp: { - type: String, - required: true, - }, - username: { - type: String, - }, - ind_order: { - type: Number, - }, - index: { - type: Number, - }, - invitante_username: { - type: String, - }, - date_added: { - type: Date, - }, - date_deleted: { - type: Date, - }, - added: { // Added into Programmation (Nave) - type: Boolean, - default: false, - }, - num_tess: { - type: Number, - }, - navestr: { - type: String, - }, - note: { - type: String, - }, - deleted: { - type: Boolean, - default: false, - } - -}); - -ListaIngressoSchema.pre('save', async function (next) { - if (this.isNew) { - try { - if (!this.ind_order) { - const myrec = await ListaIngresso.findOne({ idapp: this.idapp }).limit(1).sort({ ind_order: -1 }); - - if (!!myrec) { - this.ind_order = myrec._doc.ind_order + 1; - } else { - this.ind_order = 1; - } - } - } catch (e) { - this.ind_order = 2; - } - } - - next(); -}); - - -// ListaIngressoSchema.methods.toJSON = function () { -// const ListaIngresso = this; -// const userObject = ListaIngresso.toObject(); -// -// return _.pick(userObject, ['_id', ...shared_consts.fieldsUserToChange()]); -// }; -// -ListaIngressoSchema.statics.findByUsername = function (idapp, username) { - const ListaIngresso = this; - - return ListaIngresso.findOne({ - 'idapp': idapp, - 'username': username, - }); -}; - -ListaIngressoSchema.statics.getTotInLista = async function (idapp) { - const ListaIngresso = this; - - const myfind = { idapp, added: false, deleted: false }; - - return await ListaIngresso.count(myfind); -}; - -ListaIngressoSchema.statics.getImbarcatiDaily = function (idapp, nrec) { - - const query = [ - { - $match: { - idapp, deleted: false, date_added: { $gte: tools.IncDateNow(-(1000 * 60 * 60 * 24 * nrec)) }, - } - }, - { - $group: { _id: { $dateToString: { format: "%Y-%m-%d", date: "$date_added" } }, count: { $sum: 1 } } - }, - { - $sort: { _id: 1 } - } - ]; - return query -}; - - -ListaIngressoSchema.statics.getImbarcatiWeekly = function (idapp, nrec) { - - const query = [ - { - $match: { - idapp, deleted: false, date_added: { $gte: tools.IncDateNow(-(1000 * 60 * 60 * 24 * nrec)) }, - } - }, - { - $group: { _id: { $dateToString: { format: "%Y-%U", date: "$date_added" } }, count: { $sum: 1 } } - }, - { - $sort: { _id: 1 } - } - ]; - return query -}; - - -ListaIngressoSchema.statics.ImbarcatiWeekly = async function (idapp) { - const ListaIngresso = this; - - return ListaIngresso.aggregate(ListaIngresso.getImbarcatiWeekly(idapp, 20 * 7)) - .then(ris => { - return JSON.stringify(ris.slice(0, -1)); - }); -}; - -ListaIngressoSchema.statics.ImbarcatiDaily = async function (idapp) { - const ListaIngresso = this; - - return ListaIngresso.aggregate(ListaIngresso.getImbarcatiDaily(idapp, 30)) - .then(ris => { - return JSON.stringify(ris.slice(0, -1)); - }); -}; - - -ListaIngressoSchema.statics.findByIndOrder = function (idapp, ind_order) { - const ListaIngresso = this; - - try { - return ListaIngresso.findOne({ - 'idapp': idapp, - 'ind_order': ind_order, - }); - } catch (e) { - - } -}; - -ListaIngressoSchema.statics.findByAllRecByUsername = function (idapp, username) { - const ListaIngresso = this; - - try { - return ListaIngresso.find({ - idapp, - username, - deleted: false - }); - } catch (e) { - - } -}; - -ListaIngressoSchema.statics.findByUsernameETess = async function (idapp, username, num_tess) { - const ListaIngresso = this; - - try { - return await ListaIngresso.findOne({ - idapp, - username, - num_tess, - }); - } catch (e) { - - } -}; - -ListaIngressoSchema.statics.findAllByUsername = function (idapp, username) { - const ListaIngresso = this; - - try { - return ListaIngresso.find({ - 'idapp': idapp, - username, - added: false, // NON QUELLI GIA INSERITI ! - $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], - }); - } catch (e) { - console.error(e.message); - } -}; - -ListaIngressoSchema.statics.deleteUserInListaIngresso = async function (idapp, username) { - const ListaIngresso = this; - - return ListaIngresso.updateMany({ - idapp, - username, - }, { $set: { deleted: true } }, { new: false }) - -}; - -ListaIngressoSchema.statics.getNumDaImbarcare = async function (idapp) { - const ListaIngresso = this; - - return await ListaIngresso.count({ idapp, added: false, deleted: false }) - -}; -ListaIngressoSchema.statics.addUserInListaIngresso = async function (idapp, username, invitante_username, lang, addednowreal, nuovo, dateins, note, added, opt) { - const ListaIngresso = this; - - const { User } = require('./user'); - const telegrambot = require('../telegram/telegrambot'); - - try { - let listaingresso = null; - if (!nuovo) { - listaingresso = await ListaIngresso.findByUsernameETess(idapp, username, 1); - } - // listaingresso = null; // TOGLIEREE - if (!listaingresso) { - listaingresso = new ListaIngresso({ - _id: new ObjectID(), - idapp, - username, - num_tess: 1, - date_added: new Date(), - invitante_username, - }); - - if (!!note) { - listaingresso.note = note; - } - if (!!added) { - listaingresso.added = added; - } - - if (!!dateins) { - try { - listaingresso.date_added = dateins; - } catch (e) { - listaingresso.date_added = new Date(); - } - } - - if (listaingresso) { - const ris = await listaingresso.save(); - if (addednowreal) { - if (!!ris) { - - if (addednowreal) { - // Aggiungilo anche nella Graduatoria ! - await Graduatoria.addSingoloInGraduatoria_InFondo(idapp, listaingresso); - } - - const nome = await User.getNameSurnameByUsername(idapp, username); - const numimbarcare = await ListaIngresso.getNumDaImbarcare(idapp); - let msgtext = '🛳 '; - msgtext += nome + ' (' + username + ') ' + tools.gettranslate('ADDED_TOLISTAINGRESSO', lang); - await telegrambot.sendMsgTelegram(idapp, username, msgtext, false); - - msgtext = '🛳 '; - if (nuovo) { - msgtext += '🌠 '; - } - - const msgadd = msgtext + ' [' + numimbarcare + '] Imbarcare ' + nome + ' (' + username + ') '; - - await telegrambot.sendMsgTelegramToTheManagers(idapp, msgadd, false); // Anche a STAFF - - if (!!opt) { - if (!!opt.sendmsgtoinvitante) { - if (opt.sendmsgtoinvitante) { - // const nome = await User.getNameSurnameByUsername(idapp, invitante_username); - // msgtext = '🔵 ' + nome + ' (' + username + ') ' + tools.gettranslate('ADDED_TOLISTAINGRESSO', lang); - // await telegrambot.sendMsgTelegram(idapp, username, msgtext, true); // Anche a STAFF - } - } - } - } - } - return ris; - } - } - - const giapresente = await - Nave.findOne({ idapp, ind_order, num_tess: 1 }); - if (!!giapresente) { - // Era stato già aggiunto! - let fields_to_update = { added: true }; - await - ListaIngresso.findOneAndUpdate({ _id: listaingresso._id }, { $set: fields_to_update }, { new: false }); - - return false; - } - - return null; - - } catch (e) { - console.error(e.message); - } - return null; -} -; - - -function getQueryNumInvitati(myfilter, myobjField, myfilter2, mygroup) { - const query = [ - { $match: myfilter }, - { - $lookup: { - from: "users", - as: "user", - let: { username: '$username' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$username', '$$username'] }, - { $eq: ['$idapp', myfilter.idapp] }, - ] - } - } - } - ] - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } } - }, - { $match: myfilter2 }, - ]; - - if (!!mygroup) { - query.push( - { $group: mygroup } - ); - } - - if (!!myobjField) { - query.push( - { $project: myobjField } - ); - } - - return query; -} - -function getQueryProj(myfilter, myobjField, myfilter2, mygroup) { - const query = [ - { $match: myfilter }, - { - $lookup: { - from: "users", - as: "user", - let: { username: '$username' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$username', '$$username'] }, - { $eq: ['$idapp', myfilter.idapp] }, - ] - } - } - } - ] - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } } - }, - { $match: myfilter2 }, - ]; - - if (!!mygroup) { - query.push( - { $group: mygroup } - ); - } - - if (!!myobjField) { - query.push( - { $project: myobjField } - ); - } - - return query; -} - -function getQueryIndOrder(myfilter, myobjField, myfilter2, mygroup) { - const query = [ - { $match: myfilter }, - { - $lookup: { - from: "users", - as: "user", - let: { ind_order: '$ind_order' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$ind_order', '$$ind_order'] }, - { $eq: ['$idapp', myfilter.idapp] }, - ] - } - } - } - ] - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } } - }, - { $match: myfilter2 }, - ]; - - if (!!mygroup) { - query.push( - { $group: mygroup } - ); - } - - if (!!myobjField) { - query.push( - { $project: myobjField } - ); - } - - return query; -} - - -/* -ListaIngressoSchema.statics.getPosizioneInLista = async function (idapp, arrrec, ind_order, num_tess) { - - - let posiz = 0; - let totposiz = arrrec.length; - let numNaviEntrato = 0; - - for (let ind = 0; ind < arrrec.length; ind++) { - if (arrrec[ind].ind_order === ind_order && arrrec[ind].num_tess === num_tess) { - posiz = ind; - numNaviEntrato = arrrec[ind].numNaviEntrato; - break; - } - } - - return { posiz: posiz + 1, totposiz, num_tess, numNaviEntrato } - -}; -*/ - -ListaIngressoSchema.statics.showListaOrd = async function (idapp, solonuovi) { - const ListaIngresso = this; - - arrrec = await ListaIngresso.getProssimiInLista(idapp, solonuovi); - - let mystr = ''; - let conta = 1; - for (const rec of arrrec) { - mystr += conta + '- ' + ' [' + rec.numinvitatiattivi + '-' + rec.numinvitati + '] (' + rec.index + ') '; - mystr += ' {' + rec.numinvitatiattivireali + ',' + rec.numinvitatireali + '} '; - mystr += ' [' + tools.getstrDateShort(rec.date_added, 'it') + '] '; - mystr += rec.username + ' ' + rec.name + ' ' + rec.surname; - mystr += ' inv = ' + rec.invitante_username; - mystr += ' tess = ' + rec.num_tess; - if (rec.added) - mystr += ' (ADDED ++)'; - - mystr += '\n'; - conta++; - } - - return mystr; -}; - - -ListaIngressoSchema.statics.getFieldsForSearch = function () { - return [ - { field: 'ind_order', type: tools.FieldType.number }, - { field: 'username', type: tools.FieldType.string }, - { field: 'invitante_username', type: tools.FieldType.string }, - ] -}; - -ListaIngressoSchema.statics.executeQueryTable = function (idapp, params) { - params.fieldsearch = this.getFieldsForSearch(); - return tools.executeQueryTable(this, idapp, params); -}; - -ListaIngressoSchema.statics.findAllIdApp = async function (idapp) { - const ListaIngresso = this; - - const myfind = { idapp }; - - return ListaIngresso.find(myfind, (err, arrrec) => { - return arrrec - }); -}; - -function sortRec(rec) { - return rec.sort(function (reca, recb) { - // return Math.round((recb.numinvitatiattivi + recb.numinvitati) / recb.num_tess) - Math.round((reca.numinvitatiattivi + reca.numinvitati) / reca.num_tess); - // return Math.round((recb.numinvitatiattivi + recb.numinvitati) / recb.indimbarco * 2) - Math.round((reca.numinvitatiattivi + reca.numinvitati) / reca.indimbarco * 2); - // return Math.round((recb.numinvitatiattiviTot + recb.numinvitatiTot) / (recb.indimbarco + recb.numNaviEntrato * 2)) - Math.round((reca.numinvitatiattiviTot + reca.numinvitatiTot) / (reca.indimbarco + reca.numNaviEntrato * 2)); - - // return ((recb.numinvitatiattiviTot - recb.numNaviEntrato * 2) - (recb.indimbarco - 1) * 2) + ((recb.numinvitatiTot - recb.numNaviEntrato * 2) - (recb.indimbarco - 1) * 2) / - // (((reca.numinvitatiattiviTot - reca.numNaviEntrato * 2) - (reca.indimbarco - 1) * 2)) + ((reca.numinvitatiTot - reca.numNaviEntrato * 2) - (reca.indimbarco - 1) * 2); -// - //return Math.round(((recb.numinvitatiattiviTot * 2) + recb.numinvitatiTot) / (recb.indimbarco + recb.numNaviEntrato * 2)) - Math.round(((reca.numinvitatiattiviTot * 2) + reca.numinvitatiTot) / (reca.indimbarco + reca.numNaviEntrato * 2)); - - }); -} - -ListaIngressoSchema.statics.getProssimiInLista = function (idapp, solonuovi) { - return Graduatoria.findAllIdApp(idapp).sort({ index: 1 }); -}; - - -ListaIngressoSchema.statics.aggiornaRecListaIngr = async function (idapp, rec, arrindex) { - - rec.numNaviEntrato = await Nave.getnumNaviByUsername(idapp, rec.username); - - rec.numinvitati = await ListaIngresso.getnumInvitati(idapp, rec.username); - rec.numinvitatiattivi = await ListaIngresso.getnumInvitatiAttivi(idapp, rec.username); - - const arrListaIngrUser = arrindex[rec.username]; - if (!arrListaIngrUser) { - // arrindex[rec.username] = 1 + rec.numNaviEntrato; - arrindex[rec.username] = 1; - } else { - arrindex[rec.username] += 1; // incrementa - } - - rec.indimbarco = arrindex[rec.username]; - rec.numinvitatiTot = rec.numinvitati; - rec.numinvitatiattiviTot = rec.numinvitatiattivi; - - // rec.punteggio = (((rec.numinvitatiattiviTot * 1.5) - (rec.numNaviEntrato * 2)) - (rec.indimbarco - 1) * 2) + ((rec.numinvitatiTot - (rec.numNaviEntrato * 2)) - (rec.indimbarco - 1) * 2); - - let val1 = (((rec.numinvitatiattiviTot * 1.5) - (rec.numNaviEntrato * 2)) - (rec.indimbarco - 1) * 2); - let val2 = ((rec.numinvitatiTot - (rec.numNaviEntrato * 2)) - (rec.indimbarco - 1) * 2); - - if (val1 < 0) - val1 = 0; - if (val2 < 0) - val2 = 0; - if (val1 > 2) - val1 = 2; - if (val2 > 2) - val2 = 2; - - rec.punteggio = val1 + val2; - - // if (rec.num_tess > 2) { - rec.numinvitati = rec.numinvitati - (arrindex[rec.username] - 1) * 2; - rec.numinvitatiattivi = rec.numinvitatiattivi - (arrindex[rec.username] - 1) * 2; - // } - if (rec.numinvitati < 0) { - rec.numinvitati = 0; - } - if (rec.numinvitati > 2) { - rec.numinvitati = 2; - } - if (rec.numinvitatiattivi < 0) { - rec.numinvitatiattivi = 0; - } - - if (rec.numinvitatiattivi > 2) - rec.numinvitatiattivi = 2; - - return rec; -}; - -ListaIngressoSchema.statics.GeneraGraduatoria = async function (idapp, solonuovi) { - const ListaIngresso = this; - - let myquery = ''; - - //++Todo: DA TOGLIERE IL COMMENTO !!! - if (await Graduatoria.isWorking(idapp)) - return; - - await Graduatoria.setWorking(idapp, true); - - let myobjField = { - idapp: 1, - index: 1, - ind_order: 1, - name: 1, - surname: 1, - username: 1, - invitante_username: 1, - navestr: 1, - email: 1, - lang: 1, - num_tess: 1, - date_added: 1, - added: 1, - deleted: 1, - sospeso: 1, - }; - - try { - let myfilter2 = { - - $or: [{ surname: { $exists: true } }, { deleted: { $exists: false } }, { - deleted: { - $exists: true, - $eq: false - } - }], - }; - - if (solonuovi) { - myquery = getQueryProj({ - 'idapp': idapp, - ind_order: { $gte: 0 }, - added: false, - deleted: false, - }, myobjField, myfilter2); - } else { - myquery = getQueryProj({ - 'idapp': idapp, - ind_order: { $gte: 0 }, - deleted: false, - }, myobjField, myfilter2); - } - - // await ListaIngresso.aggiornaIndex(); - - arrrec = await ListaIngresso.aggregate(myquery) - .then(async (arrlista) => { - - const { User } = require('../models/user'); - - let arrindex = {}; - - for (const rec of arrlista) { - - await ListaIngresso.aggiornaRecListaIngr(idapp, rec, arrindex) - - } - - /*if (arrlista) { - arrlista = sortRec(arrlista); - // arrlista.reverse(); - }*/ - - const salvasudb = true; - if (salvasudb) { - numrec = await Graduatoria.addArrayInGraduatoria(idapp, arrlista); - } - - await Graduatoria.AggiornaIndiceGraduatoria(idapp); - - await Graduatoria.setWorking(idapp, false); - - return numrec; - }).catch((e) => { - Graduatoria.setWorking(idapp, false); - - console.error(e.message); - return null - }); - - } catch (e) { - await Graduatoria.setWorking(idapp, false); - } - - return arrrec; -}; - -ListaIngressoSchema.statics.eliminaListeIngressoNascoste = async function (idapp) { - const ListaIngresso = this; - - const { User } = require('./user'); - - const arrIngr = await ListaIngresso.find({ idapp, deleted: true }); - - for (const ingr of arrIngr) { - const user = await User.findOne({ idapp, old_order: ingr.ind_order }); - if (!user) { - await ListaIngresso.deleteOne({ _id: ingr._id }) - } - } - -}; - -ListaIngressoSchema.statics.RendiVisibileIrecordNascosti = async function (idapp) { - const ListaIngresso = this; - - const num = await ListaIngresso.updateMany({ idapp, deleted: true }, { $set: { deleted: false } }); - -}; - - -ListaIngressoSchema.statics.creaTessituraeConv = async function (idapp) { - const ListaIngresso = this; - - const { User } = require('./user'); - - try { - if (true) { - // Elimina TUTTI i Cancellati (ma non Sospesi) - await User.deleteMany({ - idapp, - $and: [ - { deleted: { $exists: true, $eq: true } }, // cancellati - { $or: [{ sospeso: { $exists: false } }, { sospeso: { $exists: true, $eq: false } }] }, // ma non sospeso - ] - }); - - - // Comprende anche i sospesi - const arrusers = await User.find({ - idapp, - }); - - - // Ricrea i record ListaIngresso (num_tess = 1), per ogni User - for (const user of arrusers) { - if (user.ind_order >= 0) { - let ingr = new ListaIngresso(); - ingr._id = new ObjectID(); - ingr.idapp = idapp; - ingr.ind_order = user.ind_order; - ingr.username = user.username; - ingr.invitante_username = user.aportador_solidario; - ingr.num_tess = 1; - // ingr.date_added = user.date_reg; - ingr.added = false; - const listaingr = await ListaIngresso.find({ idapp, ind_order: ingr.ind_order, num_tess: 1 }); - - const trovatanave = await Nave.findOne({ idapp, ind_order: ingr.ind_order, num_tess: 1 }) - .then((mynave) => { - if (!!mynave) { - ingr.date_added = mynave.created; - ingr.deleted = false; - ingr.added = true; - } - return !!mynave; - }); - - if (listaingr.length === 0) { - if (trovatanave) - await ingr.save(); - else { - // non ha ancora i 7 requisiti - } - - } else { - - const listaingr2 = await ListaIngresso.find({ idapp, ind_order: ingr.ind_order }); - - for (const ingr2 of listaingr2) { - - const ris = await ListaIngresso.findByIdAndUpdate(ingr2._id, { - $set: { - username: ingr.username, - invitante_username: ingr.invitante_username - } - }, { new: false }); - } - - } - - // cancella in user i campi che non uso più - await User.findByIdAndUpdate(user.id, { - $set: { - old_order: user.ind_order, - ind_order: -1, - // aportador_solidario: '' - } - }) - } - } - } - - // Comprende anche i sospesi - const arrIdTelegramUsers = await User.find({ idapp, 'profile.teleg_id': { $gt: 1 } }, - { _id: 1, username: 1, aportador_solidario: 1, old_order: 1, lang: 1, date_reg: 1, 'profile.teleg_id': 1 }) - .sort({ - 'profile.teleg_id': 1, - old_order: 1 - }); - - - // Crea altri ListaIngresso per gli utenti con i sottoaccount: - /* - const arrIdTelegramUsers = []; - const arrusersAlreadyExist = []; - for (const user of arrusers) { - if (!!user.profile.teleg_id) { - const trovati = arrusersAlreadyExist.find((rec) => rec.teleg_id === user.profile.teleg_id); - if (trovati) { - // era già presente, quindi lo aggiungo ! - const trovatoidteleg = arrIdTelegramUsers.find((rec) => rec.teleg_id === user.profile.teleg_id); - if (!trovatoidteleg) - arrIdTelegramUsers.push({ teleg_id: user.profile.teleg_id, username: user.username }); - } else { - arrusersAlreadyExist.push({ teleg_id: user.profile.teleg_id, username: user.username }); - } - } - } - */ - - let index = 0; - - let teleg_id = 0; - let username = ''; - let invitante_username = ''; - let invitante_degli_invitati = ''; - - // Questi sono Utenti che hanno associato Telegram a più Account ! - for (const myuser of arrIdTelegramUsers) { - - // Crea 1 record listaingresso per ogni record aggiuntivo ! escludendo il primo! - if (teleg_id !== myuser.profile.teleg_id && myuser.old_order > 0) { - index = 0; - teleg_id = myuser.profile.teleg_id; - username = myuser.username; - invitante_username = myuser.aportador_solidario; - invitante_degli_invitati = myuser.username; - } - - if (index > 0) { - // Ind_order to find ! - const ind_order = myuser.old_order; - //const findnave = await Nave.find({ idapp, ind_order: myuser.old_order, num_tess: 1 }); - - if (ind_order >= 0) { - const findlistaingresso = await ListaIngresso.findOne({ idapp, ind_order, num_tess: 1 }); - - if (!!findlistaingresso) { - await ListaIngresso.findByIdAndUpdate(findlistaingresso._id, { - $set: { - username, - // invitante_username, - note: findlistaingresso.username, - } - }, { new: false }); - - await Nave.updateMany({ idapp, ind_order }, { - $set: { - note: findlistaingresso.username, - } - }, { new: false }); - - // Assegna l'Invitante agli Invitati ! trova tutti gli invitati che hanno questo username - const arrinvitati = await User.find({ idapp, aportador_solidario: myuser.username }, { username: 1 }); - for (const invitato of arrinvitati) { - await User.changeInvitante(idapp, invitato.username, invitante_degli_invitati, ind_order) - } - - // poi imposta come cancellato questo record - await User.findByIdAndUpdate(myuser._id, { $set: { deleted: true, date_deleted: new Date() } }); - } - } - - } - index++; - } - - // RIMUOVI IL CAMPO IND_ORDER SULLA USER! - await User.update({}, { $unset: { ind_order: 1 } }, { multi: true }); - - // Ricalcola il Campo Index - await User.ricalcolaIndex(idapp); - - - return index; - - } catch (e) { - console.error(e.message); - } - -}; - -ListaIngressoSchema.statics.getListaTessByUsername = function (idapp, username) { - const ListaIngresso = this; - - return ListaIngresso.find({ - idapp, - username, - // added: true, - deleted: false, - }); - - -}; - - -ListaIngressoSchema.statics.eliminaListaIngresso = async function (idapp, ind_order, req, num_tess) { - const ListaIngresso = this; - - const telegrambot = require('../telegram/telegrambot'); - - const myrec = await ListaIngresso.getIngrEUserByFilter(idapp, { - idapp, - ind_order - }); - - let filtro = { idapp, ind_order }; - - // if (!!num_tess) { - // filtro.num_tess = num_tess; - // } - - // Controlla se ci sono piu navi - const arrnavi = await Nave.find(filtro); - - const eliminaveramente = false; - - let nasc = ''; - let receliminato = false; - - let risdel = false; - if (arrnavi.length === 1) { - if (!arrnavi[0].made_gift) { - // SE NON E' STATO CONFERMATO CHE HA FATTO IL DONO! - // Solo 1 nave da cancellare, quindi cancello anche l'ingresso - let filtrocanc = { idapp, ind_order }; - if (!!num_tess) - filtrocanc.num_tess = num_tess; - - let recdel = null; - if (eliminaveramente) { - recdel = await ListaIngresso.deleteOne(filtrocanc); - } else { - nasc = '(nascosto)'; - let fieldsvalue = { - date_deleted: new Date(), - deleted: true - }; - recdel = await ListaIngresso.findOneAndUpdate(filtrocanc, { $set: fieldsvalue }, { new: false }); - } - - risdel = !!recdel; - receliminato = !!recdel; - } - } else { - // non cancellare la listaingresso (perchè con lo stesso ind_order ho piu navi ! - risdel = true; - receliminato = false; - } - - let msg = ''; - if (risdel) { - if (receliminato) { - msg = 'Eliminato RECORD in Lista Imbarco ' + nasc + ' di ' + myrec.name + ' ' + myrec.surname + ' (ind_order=' + myrec.ind_order + ', num_tess=' + myrec.num_tess + ') [Num = ' + myrec.index + `] (da ${req.user.name} ${req.user.surname} )`; - } - await actions.doOtherThingsAfterDeleted('listaingressos', myrec, false, req) - } else { - msg = 'ATTENZIONE: il RECORD non è stato Eliminato perchè gia c\'era in altra NAVE -> di ' + myrec.name + ' ' + myrec.surname + ' (ind_order=' + myrec.ind_order + ', num_tess=' + myrec.num_tess + ') [Num = ' + myrec.index + `] (da ${req.user.name} ${req.user.surname} )`; - } - - if (!!msg) { - await telegrambot.sendMsgTelegramToTheManagers(myrec.idapp, msg); - tools.writeSostituzioniLog(msg); - } - - return risdel; -}; - -ListaIngressoSchema.statics.getarray = async function (idapp, filtri, myobjField) { - const ListaIngresso = this; - - const { User } = require('./user'); - - if (!await User.NuovoSistema(idapp)) { - return await ListaIngresso.getarrayIndOrder(idapp, filtri, myobjField); - } - - - let myfilter2 = { - - $or: [{ surname: { $exists: true } }, { 'user.deleted': { $exists: false } }, { - 'user.deleted': { - $exists: true, - $eq: false - } - }], - }; - - let myquery = getQueryProj( - filtri, - myobjField, - myfilter2 - ); - - return await ListaIngresso.aggregate(myquery); - -}; - -ListaIngressoSchema.statics.getarrayIndOrder = async function (idapp, filtri, myobjField) { - const ListaIngresso = this; - - let myfilter2 = { - - $or: [{ surname: { $exists: true } }, { deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], - }; - - let myquery = getQueryIndOrder( - filtri, - myobjField, - myfilter2 - ); - - return await ListaIngresso.aggregate(myquery); - -}; - -ListaIngressoSchema.statics.getIngrEUserByFilter = async function (idapp, myfilter) { - const ListaIngresso = this; - - const arr = await ListaIngresso.getarray(idapp, myfilter, { - _id: 1, - idapp: 1, - username: 1, - ind_order: 1, - name: 1, - surname: 1, - index: 1, - num_tess: 1 - }); - - if (!!arr) { - return arr.length > 0 ? arr[0] : null; - } - return null; - -}; - - -ListaIngressoSchema.statics.getInvitati = async function (idapp, username, includemyself, myobjField) { - const ListaIngresso = this; - - let myq = { - idapp, - $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], - invitante_username: username, - }; - - if (!includemyself) { - myq = { ...myq, username: { $ne: username } } - } - - return ListaIngresso.getarray(idapp, myq, myobjField); - - -}; - -/* -ListaIngressoSchema.statics.getUserByInvitante_Username = async function (idapp, invitante_username) { - const ListaIngresso = this; - - const arr = ListaIngresso.getarray(idapp, - { - idapp, - deleted: false, - invitante_username: invitante_username, - username: { $ne: {invitante_username} }, - }, - null); - - if (!!arr) - return arr[0]; - else - return null; -}; - -*/ - -ListaIngressoSchema.statics.getnumInvitatiBase = async function (idapp, username, attivi) { - const ListaIngresso = this; - - const { User } = require('./user'); - - let myfilter2 = { - surname: { $exists: true }, - }; - - if (attivi) { - myfilter2 = { - ...myfilter2, - $and: User.getQueryQualified(), - } - } - - let myquery = getQueryProj({ - idapp, - invitante_username: username, - // username: { $ne: username }, - $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], - }, - { username: 1, ind_order: 1 }, - myfilter2, - ); - - // { _id: null, count: { $sum: 1 } - - arrlistainv = await ListaIngresso.aggregate(myquery); - - // Ottieni gli invitati che ancora non hanno un'imbarco - let myqueryuser = { - idapp, - aportador_solidario: username, - //$or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], - $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], - }; - - if (attivi) { - myqueryuser = { - ...myqueryuser, - $and: User.getQueryQualified() - } - } - - const arrinv = await User.find(myqueryuser); - - for (const inv of arrinv) { - if (!arrlistainv.find((rec) => rec.username === inv.username)) - arrlistainv.push(inv); - } - - if (!!arrlistainv) - return arrlistainv.length; - else - return 0; -}; - - -ListaIngressoSchema.statics.getnumInvitati = async function (idapp, username) { - const ListaIngresso = this; - - return ListaIngresso.getnumInvitatiBase(idapp, username, false); - - /* - const arrlistainv = await ListaIngresso.find({ - idapp, - invitante_username: username, - deleted: false, - // username: { $ne: username }, - }, { username: 1 }); - - const { User } = require('./user'); - - // Ottieni gli invitati che ancora non hanno un'imbarco - const arrinv = await User.find({ - idapp, - aportador_solidario: username, - $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }] - }); - - - - for (const inv of arrinv) { - if (!arrlistainv.find((rec) => rec.username === inv.username)) - arrlistainv.push(inv); - } */ - - -}; - -ListaIngressoSchema.statics.getnumInvitatiAttivi = function (idapp, username) { - const ListaIngresso = this; - - return ListaIngresso.getnumInvitatiBase(idapp, username, true); -}; - - -const ListaIngresso = mongoose.model('ListaIngresso', ListaIngressoSchema); - - -module.exports = { ListaIngresso }; - - diff --git a/src/server/models/mygroup.js b/src/server/models/mygroup.js new file mode 100755 index 0000000..ed49260 --- /dev/null +++ b/src/server/models/mygroup.js @@ -0,0 +1,253 @@ +const mongoose = require('mongoose').set('debug', false); +const Schema = mongoose.Schema; + +const tools = require('../tools/general'); + +mongoose.Promise = global.Promise; +mongoose.level = 'F'; + +// Resolving error Unknown modifier: $pushAll +mongoose.plugin(schema => { + schema.options.usePushEach = true; +}); + +const MyGroupSchema = new Schema({ + idapp: { + type: String, + }, + groupname: { + type: String, + }, + title: { + type: String, + }, + descr: { + type: String, + }, + idSector: { + type: Number, + }, + userId: { + type: String, + }, + photos: [ + { + imagefile: { + type: String, + }, + alt: { + type: String, + }, + description: { + type: String, + }, + }], + idCity: [ + { + type: Number, + }], + website: { + type: String, + }, + link_telegram: { + type: String, + }, + visibility: { + type: Number, + }, + admins: [ + { + _id: false, + username: {type: String}, + date: {type: Date}, + }, + ], + blocked: { + type: Boolean, + }, + username_who_block: { + type: String, + }, + date_created: { + type: Date, + default: Date.now, + }, + date_blocked: { + type: Date, + }, + req_users: [ + { + _id: false, + username: {type: String}, + date: {type: Date}, + }], // username + deleted: { + type: Boolean, + default: false, + }, +}); + +MyGroupSchema.statics.getFieldsForSearch = function() { + return [{field: 'descr', type: tools.FieldType.string}]; +}; + +MyGroupSchema.statics.executeQueryTable = function(idapp, params) { + params.fieldsearch = this.getFieldsForSearch(); + return tools.executeQueryTable(this, idapp, params); +}; + +MyGroupSchema.statics.findAllIdApp = async function(idapp) { + const myfind = {idapp}; + + return await MyGroup.find(myfind); +}; + +// Rimuovo la Richiesta del Gruppo +MyGroupSchema.statics.removeReqGroup = async function( + idapp, username, groupnameDest) { + const {User} = require('../models/user'); + + return User.updateOne({idapp, username: username}, + {$pull: {'profile.req_groups': {groupname: {$in: [groupnameDest]}}}}); +}; + +function getWhatToShow(idapp, username) { + // ++Todo: MyGroup what to show + return { + groupname: 1, + title: 1, + descr: 1, + visibility: 1, + idSector: 1, + userId: 1, + photos: 1, + idCity: 1, + website: 1, + link_telegram: 1, + admins: 1, + blocked: 1, + }; + +} + +function getWhatToShow_Unknown(idapp, username) { + return { + groupname: 1, + title: 1, + descr: 1, + photos: 1, + visibility: 1, + idSector: 1, + idCity: 1, + }; +} + +MyGroupSchema.statics.getArrUsernameFromFieldByGroupname = async function( + idapp, groupname, field) { + + const {User} = require('../models/user'); + + const myobj = {}; + myobj[field + '.' + subfield] = 1; + + let arrrec = await User.findOne({ + idapp, + groupname, + $or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}], + }, myobj).then((ris) => ris ? ris._doc[field] : []); + + if (arrrec.length > 0) { + return arrrec.map(m => m.username); + } + return []; + +}; + +MyGroupSchema.statics.getUsernameReqGroupsByGroupname = async function( + idapp, groupname) { + + return this.getArrUsernameFromFieldByGroupname(idapp, groupname, 'req_users'); + +}; + +MyGroupSchema.statics.getInfoGroupByGroupname = async function( + idapp, groupname) { + + const whatToShow = getWhatToShow(idapp, groupname); + + return MyGroup.findOne({ + idapp, + groupname, + }, whatToShow).then((rec) => !!rec ? rec._doc : null); + +}; + +MyGroupSchema.statics.getGroupsByUsername = async function(idapp, username) { + + try { + const {User} = require('../models/user'); + + const whatToShow = getWhatToShow(idapp, username); + const whatToShow_Unknown = getWhatToShow_Unknown(idapp, username); + const arrUsernameGroups = await User.getUsernameGroupsByUsername(idapp, + username); + // const arrUsernameReqGroups = await MyGroup.getUsernameReqGroupsByGroupname(idapp, username); + + let listUsersGroup = await User.find({ + idapp, + username: {$in: arrUsernameGroups}, + $or: [ + {deleted: {$exists: false}}, + {deleted: {$exists: true, $eq: false}}], + }, whatToShow); + + let listgroups = await MyGroup.find({ + idapp, + $or: [ + {deleted: {$exists: false}}, + {deleted: {$exists: true, $eq: false}}], + }, whatToShow_Unknown); + + /*let listRequestUsersGroup = await User.find({ + idapp, + username: {$in: arrUsernameReqGroups}, + $or: [ + {deleted: {$exists: false}}, + {deleted: {$exists: true, $eq: false}}], + }, whatToShow_Unknown); + + */ + + let listSentRequestGroups = await MyGroup.find({ + idapp, + 'req_users': { + $elemMatch: {username: {$eq: username}}, + }, + $or: [ + {deleted: {$exists: false}}, + {deleted: {$exists: true, $eq: false}}], + }, whatToShow_Unknown); + + return { + listUsersGroup, + listgroups, + //listRequestUsersGroup, + listSentRequestGroups, + }; + + } catch (e) { + console.log('Error', e); + } + + return { + listUsersGroup: [], + listRequestUsersGroup: [], + listTrusted: [], + listSentRequestGroups: [], + + }; +}; + +const MyGroup = mongoose.model('MyGroup', MyGroupSchema); + +module.exports = {MyGroup}; diff --git a/src/server/models/nave.js b/src/server/models/nave.js deleted file mode 100755 index 51bc3e9..0000000 --- a/src/server/models/nave.js +++ /dev/null @@ -1,1737 +0,0 @@ -const mongoose = require('mongoose').set('debug', false) -const _ = require('lodash'); - -const tools = require('../tools/general'); - -const { ListaIngresso } = require('./listaingresso'); -const { NavePersistente } = require('./navepersistente'); -const { Settings } = require('./settings'); -const { User } = require('./user'); -const { Flotta } = require('../models/flotta'); - -const { ObjectID } = require('mongodb'); - -const printf = require('util').format; - -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, - }, - idListaIngresso: { - type: String, - }, - ind_order: { - type: Number, - }, - parent_id: { - type: mongoose.Schema.Types.ObjectId, - }, - 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, - }, - offerta_al_fondo: { - type: Number, - }, - date_received_gift: { - type: Date, - }, - created: { - type: Date, - }, - num_tess: { // numero di tessitura - type: Number, - default: 1 - }, - commento_al_sognatore: { - type: String - }, - note: { - type: String - }, -}); - -NaveSchema.statics.getTotInLista = async function (idapp) { - const Nave = this; - - const myfind = { idapp, ind_order: { $gte: 0 } }; - - 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.checkIfNaveExist = async function (idapp, username) { - const Nave = this; - - try { - - const arrlista = await ListaIngresso.find({ - idapp, - username, - // added: true, - deleted: false, - }); - - for (const rec of arrlista) { - const mynave = await Nave.find({ idapp, ind_order: rec.ind_order }); - if (!!mynave) - return true; - } - - return false; - - } catch (e) { - - } -}; - -NaveSchema.statics.findByIndOrderAndNumTess = function (idapp, ind_order, num_tess) { - const Nave = this; - - try { - return Nave.findOne({ - idapp, - ind_order, - num_tess, - }); - } catch (e) { - - } -}; - -NaveSchema.statics.findById = function (idapp, id) { - const Nave = this; - - const { User } = require('./user'); - - const myquery = getQueryProj({ idapp, '_id': id }); - - return Nave.aggregate(myquery) - .then(async (rec) => { - try { - if (!!rec) { - if (rec.length > 0) { - const ris = await User.findByIndOrder(idapp, rec[0].ind_order); - if (!!ris) { - if (!!ris._doc) - rec[0] = { ...rec[0], ...ris._doc }; - else - rec[0] = { ...rec[0], ...ris }; - return rec[0]; - } - return rec[0]; - } else { - return null; - } - } else { - return null; - } - } catch (e) { - console.error(e.message); - } - }); - -}; - - -NaveSchema.statics.getFieldsForSearch = function () { - return [{ field: 'ind_order', type: tools.FieldType.number }, - { field: 'riga', type: tools.FieldType.number }, - { field: 'col', type: tools.FieldType.number }, - { field: '_id', type: tools.FieldType.exact }] -}; - -NaveSchema.statics.executeQueryTable = function (idapp, params) { - params.fieldsearch = this.getFieldsForSearch(); - return tools.executeQueryTable(this, idapp, params); -}; - -NaveSchema.statics.findAllIdApp = async 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) { - console.error(e.message); - } -}; - -function getIndColonneByNave(navemediatore) { - let riga = navemediatore.riga; - let col = navemediatore.col; - - let col_ini = calcval(riga, col, 8) + 1; - let col_fine = col_ini + 7; - - return { riga: riga + 3, col_ini, col_fine } -} - -NaveSchema.statics.getusersByNave = function (idapp, navemediatore) { - - if ((!navemediatore.riga) || (!navemediatore.col)) - return []; - - 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.getusersByFlotta = function (idapp, riga, col_prima, col_ultima) { - - const miaquery = { - idapp, - riga: riga + 3, - $and: [ - { col: { $gte: col_prima } }, - { col: { $lte: col_ultima } } - ], - }; - - 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) { - lastrec = recfind; - myrigacol.riga = lastrec.riga; - myrigacol.col = lastrec.col; - } else { - lastrec = await Nave.findGeneric({ idapp, riga: 0, col: 0 }); - break; - } - } - parentup++; - } - - if (!lastrec) { - return await Nave.findGeneric({ idapp, riga: 0, col: 0 }); - } - - return lastrec; - -}; - - -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, ...rec[0] }; - else - myarr = { ...newrec, ...rec[0]._doc }; - return myarr; - } else { - let myarr = rec[0]; - if (!!newrec) { - if (rec[0]._doc === undefined) - myarr = { ...newrec, ...rec[0] }; - else - myarr = { ...newrec, ...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.message); - }); - -} -; - - -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, - idapp: 1, - lang: 1, - idListaIngresso: 1, - ind_order: 1, - name: 1, - surname: 1, - username: 1, - invitante_username: 1, - deleted: 1, - sospeso: 1, - 'profile.paymenttypes': 1, - 'profile.teleg_id': 1, - 'profile.nationality': 1, - 'profile.email_paypal': 1, - 'profile.payeer_id': 1, - 'profile.advcash_id': 1, - 'profile.revolut': 1, - 'profile.link_payment': 1, - 'profile.note_payment': 1, - 'profile.cell': 1, - commento_al_sognatore: 1, - made_gift: 1, - sent_msg_howto_make_gift: 1, - date_made_gift: 1, - note: 1, - received_gift: 1, - date_received_gift: 1, - num_tess: 1, - parent_id: 1, - riga: 1, - col: 1, - created: 1, - // date_start: 1, - // date_gift_chat_open: 1, - // link_chat: 1, - // provvisoria: 1, - // note_bot: 1, - // note_interne: 1, - // tutor: 1, - // tutor_namesurname: 1, - }; - - const query = [ - { $match: myfilter }, - { - $lookup: { - from: "listaingressos", - localField: "ind_order", - foreignField: "ind_order", // field in the user collection - as: "mylista" - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$mylista", 0] }, "$$ROOT"] } } - }, - { - $lookup: { - from: "users", - as: "user", - let: { username: '$username' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$username', '$$username'] }, - { $eq: ['$idapp', myfilter.idapp] }, - ] - } - } - } - ] - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } } - // $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] },] } } - }, - { $match: { $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }] } }, - { $project: myobjField } - ]; - - return query; -} - -function getQueryInvitante(myfilter) { - - myobjField = { - idListaIngresso: 1, - ind_order: 1, - name: 1, - surname: 1, - username: 1, - invitante_username: 1, - made_gift: 1, - commento_al_sognatore: 1, - sent_msg_howto_make_gift: 1, - date_made_gift: 1, - note: 1, - received_gift: 1, - date_received_gift: 1, - num_tess: 1, - parent_id: 1, - riga: 1, - col: 1, - created: 1, - }; - - const query = [ - { $match: myfilter }, - { - $lookup: { - from: "listaingressos", - localField: "ind_order", - foreignField: "ind_order", // field in the user collection - as: "mylista" - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$mylista", 0] }, "$$ROOT"] } } - }, - { - $lookup: { - from: "users", - as: "user", - let: { username: '$username' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$username', '$$username'] }, - { $eq: ['$idapp', myfilter.idapp] }, - ] - } - } - } - ] - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } } - // $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] },] } } - }, - { $match: { $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }] } }, - { $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); -}; - - -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 + '[' + riga + ',' + col + ']' + ' ' + myrec.name + ' ' + myrec.surname + ''; - else - return lettera + ind + ' - ' + symbol; - } -} - -function checkifNullThenEmpty(rec, riga, col) { - if (rec === null) { - return { - idListaIngresso: -1, - name: '', - surname: '', - username: '', - riga, - col, - } - } else { - return rec; - } -} - -NaveSchema.statics.getPlaccaGenerica = async function (idapp, riga, col, offset, solorecord) { - const Nave = this; - - const { Flotta } = require('../models/flotta'); - - - try { - let recsognatori = await Nave.findSognatoriByFuoco(idapp, riga, col, offset); - let recmediatore = await Nave.findMediatoreByFuoco(idapp, riga, col, offset); - let navepersistente = await NavePersistente.findByRigaColByDonatore(idapp, riga, col, offset); - let flotta = null; - if (!!navepersistente) - flotta = await Flotta.getFlottaByNavePersistente(idapp, navepersistente); - - if (!solorecord) { - 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 numcol = Math.pow(2, indriga - 1); - let primofuoco = tools.getPrimoFuocoByIndCol(col * Math.pow(2, offset)); - - 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); - if (offset === 0) - indc = indcol; - else - indc = indcol; - // miacol = calcval(riga, col, 8) + (indfuoco); - - - let recfuoco = await Nave.findByRigaCol(idapp, indr, indc, true); - recfuoco = checkifNullThenEmpty(recfuoco, indr, indc); - arrdonatori.push({ index: ind, ...recfuoco }); - - if (!solorecord) { - mystr += await getusertextbyrec(recfuoco, symb.icona, symb.car, indr, indc, ind) + tools.ACAPO; - } - ind++; - } - - if (solorecord) { - res = { - recsognatori, - recmediatore, - navepersistente, - flotta, - arrdonatori - }; - - return res; - } else { - return mystr; - } - - } catch (e) { - console.error(e.message); - } - -}; - -NaveSchema.statics.getPlaccaPerDonatore = async function (idapp, riga, col, solorecord, rec) { - const Nave = this; - - if (solorecord) { - - rec.donatore = await Nave.getPlaccaGenerica(idapp, riga, col, tools.Placca.SONOFUOCO, solorecord); - newcol = Math.ceil(col / (Math.pow(2, 3))); - rec.donatore.arrterra = await Nave.getArrTerra(idapp, riga - 3, newcol); - rec.donatore.arraria = await Nave.getArrAria(idapp, riga - 3, newcol); - - return rec; - } else { - return await Nave.getPlaccaGenerica(idapp, riga, col, tools.Placca.SONOFUOCO, solorecord); - } - - -}; - -NaveSchema.statics.getPlaccaPerMediatore = async function (idapp, riga, col, solorecord, rec) { - const Nave = this; - rec.mediatore = await Nave.getPlaccaGenerica(idapp, riga, col, tools.Placca.SONOACQUA, solorecord); - rec.mediatore.navepersistente = await NavePersistente.findByRigaColByDonatore(idapp, riga, col, -tools.Placca.SONOACQUA); - - rec.mediatore.arrterra = await Nave.getArrTerra(idapp, riga, col); - rec.mediatore.arraria = await Nave.getArrAria(idapp, riga, col); - - return rec; -}; - -NaveSchema.statics.getArrTerra = async function (idapp, riga, col) { - const Nave = this; - - let arrterra = []; - for (let indterra = 1; indterra <= 2; indterra++) { - miacol = calcval(riga, col, 2) + (indterra); - miariga = riga + 1; - let rec = await Nave.findByRigaCol(idapp, miariga, miacol, true); - rec = checkifNullThenEmpty(rec, miariga, miacol); - arrterra.push(rec); - } - - return arrterra; -}; - -NaveSchema.statics.getArrAria = async function (idapp, riga, col) { - const Nave = this; - - let arraria = []; - for (let indaria = 1; indaria <= 4; indaria++) { - miacol = calcval(riga, col, 4) + (indaria); - miariga = riga + 2; - let rec = await Nave.findByRigaCol(idapp, miariga, miacol, true); - rec = checkifNullThenEmpty(rec, miariga, miacol); - arraria.push(rec); - } - - return arraria; - -}; - -function calcval(riga, col, quanti) { - return (quanti * (col - 1)); -} - -NaveSchema.statics.getNavePos = async function (idapp, riga, col, solorecord, ind_order) { - const Nave = this; - - if (riga <= 0) - riga = 1; - if (col <= 0) - col = 1; - - let lang = 'it'; - - if (!!ind_order) { - const { User } = require('./user'); - lang = await User.getLangByIndOrder(idapp, ind_order); - } - - 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); - let recnavepersistente = await NavePersistente.findByRigaCol(idapp, riga, col, 0); - - - mystr = '7️⃣° 🌈 ' + tools.get__('SOGNATORE', lang) + ': '; - mystr += '' + await getusertextbyrec(recsognatori[0], '', '', riga, col, '') + '' + tools.ACAPO; - for (let indsogn = 1; indsogn < recsognatori.length; indsogn++) { - if (indsogn === 1) - mystr += '6️⃣°'; - else - mystr += '5️⃣°'; - - mystr += ' ' + tools.get__('INTERMEDIO', lang) + ': '; - - mystr += await getusertextbyrec(recsognatori[indsogn], '', '', riga, col, '') + tools.ACAPO; - } - - mystr += tools.ACAPO + '4️⃣° 🌀 ' + tools.get__('MEDIATORE', lang) + ':' + await getusertextbyrec(recmediatore, '', '', riga, col, '') + tools.ACAPO + tools.ACAPO; - - mystr += '3️⃣° ' + tools.get__('INTERMEDIO', lang) + ':' + 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; - - mystr += '2️⃣° ' + tools.get__('INTERMEDIO', lang) + ':' + 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 += '1️⃣° 🎁 ' + tools.get__('DONATORI', lang) + ':' + tools.ACAPO; - let donitotali = 0; - let donifatti = 0; - - 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; - - if (!!recfuoco) { - let symbol = ''; - if (recfuoco.made_gift) { - symbol = '🎁'; - donifatti++; - } - if (!!recfuoco && recmediatore) { - if (recfuoco.ind_order === recmediatore.ind_order && recfuoco.num_tess === 2) { - mystr += await getusertextbyrec(recfuoco, '', tools.get__('RITESSITURA', lang), miariga, miacol, '') + tools.ACAPO; - } else { - mystr += await getusertextbyrec(recfuoco, symbol, 'D', miariga, miacol, indfuoco) + tools.ACAPO; - donitotali++; - } - } - } - } - - if (donitotali > 0 && donifatti >= donitotali) { - mystr += tools.ACAPO + '💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫' + tools.ACAPO + - '✨✨✨ ' + tools.get__('NAVE COMPLETATA', lang) + ' ' + ' (' + tools.get__('Doni Effettuati', lang) + ') ! ✨✨✨' + tools.ACAPO + - '💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫💫' + tools.ACAPO; - } - - let data = ""; - let mystrtemp = ''; - if (primofuoco) { - - // tools.gettranslate('PLACCA_TUTOR', lang) - - if (!!recnavepersistente.tutor_namesurname) - data += '👤 ' + tools.get__('Tutor che affianchèra il Mediatore', lang) + ': "' + recnavepersistente.tutor_namesurname + '"' + tools.ACAPO; - - data += '💬 ' + printf(tools.get__('APERTURA_CHIUSURA_GIFT_CHAT', lang), tools.getstrDateLong(recnavepersistente.date_gift_chat_open, lang), tools.getstrDateLong(recnavepersistente.date_start, lang)) + tools.ACAPO; - - - // data += '💬 ' + tools.get__('Giorno di Apertura GIFT CHAT', lang) + ': ' + tools.getstrDateLong(recnavepersistente.date_gift_chat_open, lang) + tools.ACAPO; - - // data += '🎁 ' + tools.get__('Giorno in cui Inviare il DONO', lang) + ' : ' + tools.getstrDateLong(recnavepersistente.date_start, lang) + tools.ACAPO; - if (!!recnavepersistente.note_bot) - data += tools.get__('Note', lang) + ": " + recnavepersistente.note_bot + tools.ACAPO; - - if (recnavepersistente.provvisoria) - mystrtemp = '' + tools.get__('TEMPORANEA', lang) + ' '; - } else - data = ""; - - - mystr = tools.ACAPO + '⛵️ ' + tools.get__('NAVE', lang) + ' ' + '[' + riga + '.' + col + '] ' + mystrtemp + tools.ACAPO + data + tools.ACAPO + mystr; - - return mystr; - } catch (e) { - console.error(e.message); - return ''; - } - -}; - -NaveSchema.statics.getArrPosizioniByIndOrder = async function (idapp, ind_order) { - const Nave = this; - - - arrposizioni = await Nave.find({ idapp, ind_order }).sort({ riga: 1, col: 1 }); - - return arrposizioni; -}; - -NaveSchema.statics.getArrPosizioniByUsername = async function (idapp, username) { - const Nave = this; - - const { ListaIngresso } = require('./listaingresso'); - - try { - const arrrec_indorder = await ListaIngresso.findByAllRecByUsername(idapp, username).distinct("ind_order"); - - let arrposizioni = []; - - for (const ind_order of arrrec_indorder) { - const myquery = getQueryInvitante({ idapp, ind_order }); - - const arr = await Nave.aggregate(myquery).sort({ riga: 1, col: 1 }); - if (!!arr) - arrposizioni = [...arrposizioni, ...arr]; - } - - - /* - for (const ind_order of arrrec_indorder) { - const arr = await Nave.find({ 'idapp': idapp, ind_order }).sort({ riga: 1, col: 1 }); - if (!!arr) - arrposizioni = [...arrposizioni, ...arr]; - } - */ - - return arrposizioni; - } catch (e) { - console.error(e.message); - } - -}; - -NaveSchema.statics.getArrProfiliByIndOrder = async function (idapp, ind_order) { - const Nave = this; - - arrposizioni = await Nave.find({ 'idapp': idapp, ind_order }).sort({ riga: 1, col: 1 }); - - arrprofili = []; - - // Ind_Order - // Ind_order_base - - - return arrprofili; -}; - -NaveSchema.statics.getPrimaNaveByRiga = async function (idapp, riga) { - const Nave = this; - - nave = await Nave.findOne({ '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) { - let recnavepersistente = await NavePersistente.findByRigaColByDonatore(idapp, rec.riga, rec.col, 0); - if (!!recnavepersistente) { - mystr += '[' + conta + '] [' + rec.riga + '.' + rec.col + '] ' + rec.ind_order + ' ' + rec.name + ' ' + rec.surname + ' (' + tools.getstrDateShort(recnavepersistente.date_gift_chat_open) + ')'; - mystr += ' num_tess = ' + rec.num_tess; - mystr += '\n'; - } - conta++; - } - - - return mystr; -}; - -NaveSchema.statics.getLastRigaCol = async function (idapp) { - return Nave.findOne({ idapp }).sort({ riga: -1, col: -1 }); -}; - -async function addRecordNaveByParams(params, siRitesse) { - const { ListaIngresso } = require('./listaingresso'); - - let paramspers = { ...params }; - - let mypos = { - idapp: params.idapp, - riga: params.riga, - col: params.col, - numup: 3 - }; - tools.getRigaColByPosUp(mypos); - - paramspers.riga1don = params.riga; - paramspers.col1don = params.col; - paramspers.riga = mypos.riga; - paramspers.col = mypos.col; - - await NavePersistente.addRecordNavePersistenteByParams(paramspers); - - 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) { - if (params.persistenti) { - 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, - idListaIngresso: params.id, - ind_order: params.ind_order, - riga: params.riga, - col: params.col, - num_tess: params.num_tess, - }); - myNave.created = new Date(); - - if (!!params.note) { - myNave.note = params.note; - } - - // console.log('[' + params.riga + ',' + params.col + ']'); - // console.log('parent = [' + params.rigaparent + ',' + params.colparent + ']'); - - const recfindparent = await Nave.findByRigaCol(params.idapp, params.rigaparent, params.colparent, false); - - // console.log('recfindparent = [' + recfindparent + ']'); - // console.table(recfindparent); - 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) { - - if (params.persistenti) { - let fields_to_update = { added: true, navestr: mypos.riga + '.' + mypos.col }; - await ListaIngresso.findOneAndUpdate({ _id: params.id.toString() }, { $set: fields_to_update }, { new: false }); - } else { - let fields_to_update = { navestr: mypos.riga + '.' + mypos.col }; - await ListaIngresso.findOneAndUpdate({ _id: params.id.toString() }, { $set: fields_to_update }, { new: false }); - } - - params.conta++; - - // Check if the Ship has Completed - if (params.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 = tools.getmaxcol(params.riga); - } else { - params.col++; - } - - if (params.riga === 2) - params.colparent = 1; - else - params.colparent = Math.ceil(params.col / 2); - - await Nave.setRiga(params.idapp, params.riga); - await Nave.setCol(params.idapp, params.col); - - return true; - } - - return false; - - }).catch((e) => { - console.error(e.message); - }); -} - -NaveSchema.statics.checkifDeveRitessersi = async function (recuser) { - const Nave = this; - - let deveritessersi = true; - - arrrec = await Nave.find({ idapp: recuser.idapp, ind_order: recuser.ind_order, num_tess: recuser.num_tess }); - - if (!!arrrec) { - if ((arrrec.length % 2) === 0) { - // 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'); - - try { - - 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 = tools.getmaxcol(params.riga); - params.colparent = Math.ceil(params.col / 2); - params.rigaparent = params.riga - 1; - - if (params.rigaparent === 0) - params.colparent = 0; - - myriga = params.riga; - mycol = params.col; - - const inserito = await addRecordNaveByParams(params, false); - if (inserito) { - if (idapp === tools.AYNI) { - let recmediatore = await Nave.findMediatoreByFuoco(idapp, myriga, mycol, 0); - let sognatore = await Nave.getSognatoreByRigaColMediatore(idapp, recmediatore); - if ((((params.col) % 8) === 0) && ((params.col % 64 !== 0) || (sognatore.username !== recmediatore.username))) { - if (!!recmediatore) { - const ris = await Nave.checkifDeveRitessersi(recmediatore); - // console.log('Si deve ritessere: [riga=', params.riga, 'col', params.col, ']'); - if (ris.deveritessersi) { - params.ind_order = recmediatore.ind_order; - params.id = recmediatore._id; - params.num_tess = recmediatore.num_tess + 1; - params.idListaIngresso = -1; - - 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.findByIndex(idapp, 0); - 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) { - - } - } catch (e) { - console.error(e.message); - } - -}; - -NaveSchema.statics.generaNave = async function (idapp, mydata, persistenti) { - 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, - date_gift_chat_open: tools.AddDate(mydata.date_start, -7), - numpersone: mydata.numpersone, - }; - - if (!persistenti) { - params.numpersone = 2000; // Mettili tutti - } - - //++Todo: date_gift_chat_open e date_start : Ricalcolarle in Automatico... - - 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, ind_order: 0, riga: 0, col: 0 }); - myNave.created = new Date(); - myNave.parent_id = ObjectID("5e592aecbfd0b75f3021d9c9"); - await myNave.save(); - - await NavePersistente.addRecordNavePersistenteByParams({ idapp, riga: 0, col: 0, riga1don: 0, col1don: 0 }); - - const userFondo = await User.findByIndex(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.ind_order = reclista.ind_order; - params.id = reclista.idListaIngresso; - params.num_tess = reclista.num_tess; - params.note = reclista.note; - params.persistenti = persistenti; - - 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.ind_order = rec.ind_order; - params.id = rec.idListaIngresso; - params.num_tess = rec.num_tess; - params.persistenti = false; - - //CONTROLLARE SE SERVE ANCORA !!!!!!!!!!!!!!!!!!!!!! - 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, true); - - for (const rec of arrlista) { - await addUserToNave(idapp, rec); - } - -}; - -NaveSchema.statics.pulisciNonPresenzeInNave = async function (idapp) { - const Nave = this; - - let numrec = 0; - - const { ListaIngresso } = require('./listaingresso'); - - const myquery = getQueryProj({ - idapp, - ind_order: { $gt: 0 }, - added: true, - deleted: false, - }); - - arrrec = await ListaIngresso.aggregate(myquery) - .then(async (arrlista) => { - for (const rec of arrlista) { - const trovato = await Nave.findByIndOrderAndNumTess(idapp, rec.ind_order, rec.num_tess); - if (!trovato) { - let fields_to_update = { added: false }; - await ListaIngresso.findOneAndUpdate({ _id: rec._id }, { $set: fields_to_update }, { new: false }); - numrec++; - } - } - - }); - - return numrec; - -}; - -NaveSchema.statics.visuNaviUtentiEliminati = async function (idapp) { - const Nave = this; - - const { ListaIngresso } = require('./listaingresso'); - const { User } = require('./user'); - - arrnavi = await Nave.find({ idapp }).sort({ riga: 1, col: 1 }); - - let mystr = 'ELIMINATI: \n'; - let conta = 0; - for (const nave of arrnavi) { - const recingr = await ListaIngresso.findOne({ - idapp, - ind_order: nave.ind_order, - $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }] - }); - - let rec = null; - - if (!!recingr) { - rec = await User.findOne({ idapp, username: recingr.username }); - } - - if (!rec || !rec.username || rec.deleted) { - let navepersistente = await NavePersistente.findByRigaColByDonatore(idapp, nave.riga, nave.col, 0); - if (!!navepersistente) { - mystr += '[' + conta + '] [NAVI ' + navepersistente.riga + '.' + navepersistente.col + '] [' + nave.riga + '.' + nave.col + '] ' + ' ord= ' + nave.ind_order; - mystr += ' num_tess = ' + nave.num_tess + ' '; - if (!!rec) { - if (!!rec.username) { - mystr += ' [' + rec.username + '] '; - } - if (!!rec.name) { - mystr += ' (' + rec.name + ' ' + rec.surname + ') '; - } - if (rec.deleted) { - mystr += ' (CANCELLATO)'; - } - } - mystr += '\n'; - conta++; - } - } - } - - - return { mystr, num: conta }; -}; - - -NaveSchema.statics.getNaveByUser = async function (idapp, username, lang, fuoco) { - const Nave = this; - - let mystr = ''; - let rec = {}; - try { - const arrposiz = await Nave.getArrPosizioniByUsername(idapp, username); - if (!!arrposiz) { - for (const pos of arrposiz) { - let mypos = { - riga: pos.riga, - col: pos.col, - numup: 3, - }; - tools.getRigaColByPosUp(mypos); - - let persistente = await NavePersistente.findByRigaColByDonatore(idapp, pos.riga, pos.col, 0); - if (!!persistente) { - if (persistente.provvisoria) { - mystr += tools.ACAPO + tools.get__('NAVE', lang) + ' ' + '[' + mypos.riga + '.' + mypos.col + '] - ' + tools.get__('TEMPORANEA', lang) + tools.ACAPO + tools.ACAPO; - } else { - mystr += await Nave.getNavePos(idapp, mypos.riga, mypos.col, false, pos.ind_order); - } - } - // mystr += await Nave.getPlaccaPerDonatore(idapp, pos.riga, pos.col, false, rec); - // mystr += await Nave.getPlaccaPerMediatore(idapp, pos.riga, pos.col, false, rec); - } - } - } catch (e) { - console.error(e.message); - } - - return mystr; -}; - -NaveSchema.statics.getNaveByRigaCol = async function (idapp, rigapos, colpos) { - const Nave = this; - - rec = {}; - rec = await Nave.getPlaccaPerMediatore(idapp, rigapos, colpos, true, rec); - - if (rigapos < 4) { - rigapos = 4; - colpos = 1; - } - rec = await Nave.getPlaccaPerDonatore(idapp, rigapos, colpos, true, rec); - - return rec; -}; - -NaveSchema.statics.getDonatoridelSognatore = async function (idapp, riganave, colnave) { - const Nave = this; - - coldonatoreIni = ((colnave - 1) * 64) + (1); - coldonatoreFine = coldonatoreIni + (63); - - const myquery = getQueryProj({ - idapp, - riga: riganave + 6, - col: { $gte: coldonatoreIni, $lte: coldonatoreFine } - }); - - const arrnaviout = []; - - const arrnavi = await Nave.aggregate(myquery); - - for (const nave of arrnavi) { - // Se è il mediatore, allora non includerlo nei Donatori! - mypos = { - riga: nave.riga, - col: nave.col, - numup: 3, - }; - - tools.getRigaColByPosUp(mypos); - - const navemediatore = await Nave.findByRigaCol(idapp, mypos.riga, mypos.col, true); - if (!!navemediatore) { - if (navemediatore.ind_order !== nave.ind_order) { - arrnaviout.push(nave); - } - } else { - arrnaviout.push(nave); - } - } - - return arrnaviout; - -}; - -NaveSchema.statics.getFlotta = async function (idapp, riga, col_prima, col_ultima) { - const Nave = this; - - const myquery = getQueryProj({ - idapp, - riga: riga + 3, - col: { $gte: col_prima, $lte: col_ultima } - }); - - const { Flotta } = require('../models/flotta'); - - const flotta = await Flotta.findOne({ idapp, riga, col_prima }); - - const { User } = require('./user'); - - const usersognatore = await User.findOne({idapp, username: flotta.sognatore }); - if (!!usersognatore) { - flotta.link_payment = usersognatore.profile.link_payment; - flotta.email_paypal = usersognatore.profile.email_paypal; - flotta.payeer_id = usersognatore.profile.payeer_id; - flotta.advcash_id = usersognatore.profile.advcash_id; - flotta.revolut = usersognatore.profile.revolut; - flotta.note_payment = usersognatore.profile.note_payment; - } - - const arrnaviout = []; - - const arrnavi = await Nave.aggregate(myquery); - - const arrmediatori = []; - - for (const nave of arrnavi) { - // Se è il mediatore, allora non includerlo nei Donatori! - mypos = { - riga: nave.riga, - col: nave.col, - numup: 3, - }; - - tools.getRigaColByPosUp(mypos); - - const navemediatore = await Nave.findByRigaCol(idapp, mypos.riga, mypos.col, true); - if (!!navemediatore) { - if (navemediatore.ind_order !== nave.ind_order) { - arrnaviout.push(nave); - } else { - arrmediatori.push(nave); - } - } else { - arrnaviout.push(nave); - } - } - - flotta._doc.log_attivita = tools.readFlottaLog(idapp, flotta.riga, flotta.col_prima); - - return { arrdonatori: arrnaviout, flotta, arrmediatori }; - -}; - -NaveSchema.statics.isDefinitiva = async function (idapp, mynave) { - const nave = await NavePersistente.findByRigaColByDonatore(idapp, mynave.riga, mynave.col, 0); - return (!!nave) ? !nave.provvisoria : false; - -}; - -NaveSchema.statics.ricalcolaNave = async function (idapp, nave, riga1don, col1don, ricalcola, index) { - const Nave = this; - - try { - if (nave === null) { - nave = await NavePersistente.findByRigaColByDonatore(idapp, riga1don, col1don, 0); - } - nave.rec = await Nave.getNaveByRigaCol(idapp, nave.riga1don, nave.col1don); - - if (nave.provvisoria || (ricalcola && (nave.DoniConfermati === nave.DoniTotali) && (nave.DoniTotali >= 7) && nave.DoniMancanti === 0 && nave.DoniAttesaDiConferma === 0)) { - // gia fatto - - } else { - nave.index = index; - - nave.DoniTotali = 0; - nave.DoniAttesaDiConferma = 0; - nave.DoniMancanti = 0; - nave.DoniConfermati = 0; - - const { User } = require('./user'); - - if (!!nave.tutor) - nave.tutor_namesurname = await User.getNameSurnameByUsername(idapp, nave.tutor); - - if (!!nave.rec) { - if (!!nave.rec.donatore) { - nave.DoniTotali = nave.rec.donatore.arrdonatori.filter((rec) => (!(rec.ind_order === nave.rec.donatore.recmediatore.ind_order && (rec.num_tess % 2) === 0))).reduce((sum, item) => sum + 1, 0); - nave.DoniAttesaDiConferma = nave.rec.donatore.arrdonatori.filter((rec) => (!!rec.date_made_gift && !rec.made_gift && !(rec.ind_order === nave.rec.donatore.recmediatore.ind_order && (rec.num_tess % 2) === 0))).reduce((sum, item) => sum + 1, 0); - nave.DoniMancanti = nave.rec.donatore.arrdonatori.filter((rec) => (!rec.made_gift && !(rec.ind_order === nave.rec.donatore.recmediatore.ind_order && (rec.num_tess % 2) === 0))).reduce((sum, item) => sum + 1, 0); - nave.DoniConfermati = nave.rec.donatore.arrdonatori.filter((rec) => rec.made_gift && !(rec.ind_order === nave.rec.donatore.recmediatore.ind_order && (rec.num_tess % 2) === 0)).reduce((sum, item) => sum + 1, 0); - } - } - - const fieldsvalue = { - DoniAttesaDiConferma: nave.DoniAttesaDiConferma, - DoniTotali: nave.DoniTotali, - DoniMancanti: nave.DoniMancanti, - DoniConfermati: nave.DoniConfermati, - tutor_namesurname: nave.tutor_namesurname, - }; - - const risu = await NavePersistente.findOneAndUpdate({ _id: nave._id }, { $set: fieldsvalue }, { new: false }); - - nave._doc.rec = nave.rec; - } - } catch (e) { - console.error(e.message); - } - - return nave; - -}; - -NaveSchema.statics.getNextNumTess = async function (idapp, ind_order) { - const Nave = this; - - const rec = await Nave.findOne({ idapp, ind_order }, { num_tess: 1 }).sort({ num_tess: -1 }); - if (!!rec) { - - if (rec.num_tess % 2 === 0) { - rec.num_tess++; - } else { - rec.num_tess += 2; - } - - return rec.num_tess - } else { - return 1; - } - -}; - -NaveSchema.statics.getnumNaviByUsername = async function (idapp, username) { - const Nave = this; - - try { - - const { ListaIngresso } = require('./listaingresso'); - - // Get array di ind_order - const arrind_order = await ListaIngresso.find({ idapp, username }).distinct('ind_order'); - - const arrrec = await Nave.find({ idapp, ind_order: arrind_order, num_tess: { $mod: [2, 1] } }, { - riga: 1, - col: 1, - ind_order: 1 - }); - - // SOLO QUELLE PERMANENTI ! - let ind = 0; - for (const mynave of arrrec) { - const trovato = await NavePersistente.findByRigaColByDonatore(idapp, mynave.riga, mynave.col, 0); - if (!!trovato) { - ind++; - } - } - - return ind; - - } catch (e) { - console.error(e.message); - } -}; - -NaveSchema.statics.checkIfMadeGift = async function (idapp, username) { - const Nave = this; - - const { ListaIngresso } = require('./listaingresso'); - - const arrlistaingr = await ListaIngresso.find({ idapp, username }); - for (const ingr of arrlistaingr) { - - let mynave = await Nave.findOne({ idapp, ind_order: ingr.ind_order, made_gift: true }); - if (!!mynave) { - return true; - } - } - - return false; - - -}; - -NaveSchema.statics.delNaviProvvisorie = async function (idapp) { - const Nave = this; - - let num = 0; - - const arrnavi = await Nave.find({ idapp }); - - for (const nave of arrnavi) { - let persistente = await NavePersistente.findByRigaColByDonatore(idapp, nave.riga, nave.col, 0); - if (!!persistente) { - if (persistente.provvisoria) { - let ris = await Nave.deleteOne({ _id: nave._id }); - if (!!ris) { - num++; - } - } - } - } - - // Pulisci gli added se era stato cancellato dalla nave - await Nave.pulisciNonPresenzeInNave(idapp); - - const data = await Nave.getLastRigaCol(idapp); - await Nave.setRiga(idapp, data.riga); - await Nave.setCol(idapp, data.col + 1); - - const maxcol = tools.getmaxcol(data.riga); - if (data.col === maxcol) { - await Nave.setRiga(idapp, data.riga + 1); - await Nave.setCol(idapp, 1); - } - - return { num }; - -}; - - -NaveSchema.statics.getSognatoreByRigaColMediatore = async function (idapp, navemediatore) { - const Nave = this; - - const ris = tools.getRigaColSognatoreByMediatore(idapp, navemediatore.riga, navemediatore.col); - - const myquery = getQueryProj({ - idapp, - riga: ris.riga, - col: ris.col, - }); - - arrrec = await Nave.aggregate(myquery); - - if (!!arrrec) { - if (arrrec.length > 0) - return arrrec[0]; - } - - return null; -}; - -const Nave = mongoose.model('Nave', NaveSchema); - -module.exports = { Nave }; - - diff --git a/src/server/models/navepersistente.js b/src/server/models/navepersistente.js deleted file mode 100755 index 0851341..0000000 --- a/src/server/models/navepersistente.js +++ /dev/null @@ -1,511 +0,0 @@ -const mongoose = require('mongoose').set('debug', false) -const _ = require('lodash'); - -const tools = require('../tools/general'); - -const { ListaIngresso } = require('./listaingresso'); -const { Settings } = require('./settings'); -const { User } = require('./user'); - -const { Flotta } = require('./flotta'); - -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 NavePersistenteSchema = new mongoose.Schema({ - idapp: { - type: String, - required: true, - }, - index: { - type: Number - }, - riga: { - type: Number, - }, - col: { - type: Number, - }, - riga1don: { - type: Number, - }, - col1don: { - type: Number, - }, - date_start: { - type: Date - }, - date_gift_chat_open: { - type: Date - }, - link_chat: { - type: String, - }, - provvisoria: { - type: Boolean, - }, - DoniAttesaDiConferma: { - type: Number, - }, - DoniMancanti: { - type: Number, - }, - DoniConfermati: { - type: Number, - }, - DoniTotali: { - type: Number, - }, - note_bot: { - type: String - }, - note_interne: { - type: String - }, - tutor: { - type: String - }, - tutor_namesurname: { - type: String - } -}); - -function getQueryProj(myfilter) { - - myobjField = { - _id: 1, - idapp: 1, - lang: 1, - ind_order: 1, - name: 1, - surname: 1, - username: 1, - 'profile.paymenttypes': 1, - 'profile.email_paypal': 1, - 'profile.revolut': 1, - 'profile.link_payment': 1, - 'profile.note_payment': 1, - 'profile.cell': 1, - made_gift: 1, - sent_msg_howto_make_gift: 1, - date_made_gift: 1, - note: 1, - received_gift: 1, - date_received_gift: 1, - num_tess: 1, - parent_id: 1, - riga: 1, - col: 1, - created: 1, - // date_start: 1, - // date_gift_chat_open: 1, - // link_chat: 1, - // provvisoria: 1, - // note_bot: 1, - // note_interne: 1, - // tutor: 1, - // tutor_namesurname: 1, - }; - - const query = [ - { $match: myfilter }, - { - $lookup: { - from: "listaingressos", - localField: "ind_order", - foreignField: "ind_order", // field in the user collection - as: "mylista" - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$mylista", 0] }, "$$ROOT"] } } - }, - { - $lookup: { - from: "users", - as: "user", - let: { username: '$username' }, - pipeline: [ - { - $match: { - $expr: { - $and: [ - { $eq: ['$username', '$$username'] }, - { $eq: ['$idapp', myfilter.idapp] }, - ] - } - } - } - ] - } - }, - { - $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] }, "$$ROOT"] } } - // $replaceRoot: { newRoot: { $mergeObjects: [{ $arrayElemAt: ["$user", 0] },] } } - }, - { $project: myobjField } - ]; - - return query; -} - - -NavePersistenteSchema.statics.findById = function (idapp, id) { - const NavePersistente = this; - - const myquery = getQueryProj({ idapp, '_id': ObjectID(id) }); - - return NavePersistente.aggregate(myquery); - -}; - -NavePersistenteSchema.statics.getFieldsForSearch = function () { - return [{ field: 'ind_order', type: tools.FieldType.number }, - { field: 'col', type: tools.FieldType.number }] -}; - -NavePersistenteSchema.statics.executeQueryTable = function (idapp, params) { - params.fieldsearch = this.getFieldsForSearch(); - return tools.executeQueryTable(this, idapp, params); -}; - -NavePersistenteSchema.statics.findAllIdApp = async function (idapp) { - const NavePersistente = this; - - const myfind = { idapp }; - - return NavePersistente.find(myfind).sort({ riga: 1, col: 1 }); -}; - -NavePersistenteSchema.statics.getListaNavi = function (idapp) { - const NavePersistente = this; - - const myfind = { idapp }; - - return NavePersistente.find(myfind, - { - index: 1, - riga: 1, - col: 1, - riga1don: 1, - col1don: 1, - date_gift_chat_open: 1, - date_start: 1, - provvisoria: 1, - DoniConfermati: 1, - DoniTotali: 1, - DoniMancanti: 1, - } - ).sort({ riga: 1, col: 1 }); -}; - -NavePersistenteSchema.statics.getLastNave = function (idapp) { - const NavePersistente = this; - - const myfind = { idapp, date_start: { $lte: tools.IncDateNow(0) }, provvisoria: false }; - - return NavePersistente.findOne(myfind, - { - index: 1, - riga: 1, - col: 1, - riga1don: 1, - col1don: 1, - date_start: 1, - provvisoria: 1, - DoniConfermati: 1, - DoniTotali: 1, - DoniMancanti: 1, - } - ).sort({ riga: -1, col: -1 }).limit(1); -}; - -NavePersistenteSchema.statics.findByRigaColByDonatore = function (idapp, riga, col, offset) { - const NavePersistente = this; - - mypos = { - riga, - col, - numup: 3 + offset, - }; - tools.getRigaColByPosUp(mypos); - - return NavePersistente.findOne({ idapp, riga: mypos.riga, col: mypos.col }); - -}; - -NavePersistenteSchema.statics.findByRigaCol = function (idapp, riga, col) { - const NavePersistente = this; - - return NavePersistente.findOne({ idapp, riga, col }); - -}; - - -NavePersistenteSchema.statics.getLastRigaCol = async function (idapp) { - const NavePersistente = this; - return NavePersistente.findOne({ idapp }).sort({ riga: -1, col: -1 }); -}; - -NavePersistenteSchema.statics.getLastRigaColDefinitiva = async function (idapp) { - const NavePersistente = this; - - return NavePersistente.findOne({ idapp, provvisoria: false }).sort({ riga: -1, col: -1 }); -}; - -NavePersistenteSchema.pre('save', async function (next) { - if (this.isNew) { - const myrec = await NavePersistente.findOne().limit(1).sort({ _id: -1 }); - if (!!myrec) { - this.index = myrec._doc.index + 1; - } else { - this.index = 1; - } - } - - next(); -}); - -function getNextDayNave(miadata) { - - // const dayofweek = [1, 2, 4, 5]; // LUNEDI, MARTEDI', GIOVEDI, VENERDI - const dayofweek = [1, 4]; // LUNEDI, GIOVEDI - - let mydate = tools.AddDate(miadata, 1); - - while (!dayofweek.includes(mydate.getDay())) { - mydate = tools.AddDate(mydate, 1); - } - - return mydate - -} - -NavePersistenteSchema.statics.addRecordNavePersistenteByParams = async function (params) { - const NavePersistente = this; - - // Check if Exist: - const giapresente = await NavePersistente.findOne({ - idapp: params.idapp, - riga: params.riga, - col: params.col - }); - - if (!giapresente) { - // Prende la nave prima: - const lastnave = await NavePersistente.findOne({ idapp: params.idapp }).sort({ riga: -1, col: -1 }); - - let nextgiftchat = null; - - if (((params.col - 1) % 8 === 0)) { - nextgiftchat = getNextDayNave(lastnave.date_gift_chat_open); - } else { - nextgiftchat = lastnave.date_gift_chat_open; - } - - const next_date_start = tools.AddDate(nextgiftchat, 7); - - let myNavePersistente = new NavePersistente({ - idapp: params.idapp, - riga: params.riga, - col: params.col, - riga1don: params.riga1don, - col1don: params.col1don, - date_gift_chat_open: nextgiftchat, - date_start: next_date_start, - provvisoria: true, - }); - return await myNavePersistente.save(); - } - - return false; -}; - -NavePersistenteSchema.statics.generaFlotte = async function (idapp) { - const NavePersistente = this; - - // await Flotta.deleteMany({ idapp }); - - const arrnavi = await NavePersistente.find({ idapp, col: { $mod: [8, 1] } }).sort({ riga: 1, col: 1 }); - - let num = 0; - - for (const navepers of arrnavi) { - - const ris = await NavePersistente.aggiornaFlottaByNavePersistente(idapp, navepers); - if (ris) - num++; - } - - return { num } - -}; - -NavePersistenteSchema.statics.changeField = async function (idapp, flotta, fieldvalue) { - - let myval = {}; - - if ('date_close' in fieldvalue) { - myval['date_start'] = fieldvalue['date_close']; - } else if ('date_start' in fieldvalue) { - myval['date_gift_chat_open'] = fieldvalue['date_start']; - } else { - myval = fieldvalue; - } - - const ris = await NavePersistente.updateMany({ - idapp, - riga: flotta.riga, - $and: [ - { col1don: { $gte: flotta.col_prima } }, - { col1don: { $lte: flotta.col_ultima } }, - ] - }, { $set: myval }); - - return ris; -}; - -NavePersistenteSchema.statics.aggiornaFlottaByNavePersistente = async function (idapp, naveinput) { - - const { Nave } = require('../models/nave'); - const { User } = require('./user'); - const { Flotta } = require('./flotta'); - - - let num = 0; - - try { - let nuovo = false; - // let primacol = false; - - indcolflottaprima = tools.getPrimaColFlotta(naveinput.col1don + 7); - - console.log(num, ' -> [', naveinput.riga, '.', naveinput.col1don, '] indcolflottaprima=', indcolflottaprima); - - let ini = Math.ceil(indcolflottaprima / 8); - let fine = ini + 7; - - const arrnavi = await NavePersistente.find({ - idapp, - riga: naveinput.riga, - $and: [{ col: { $gte: ini } }, { col: { $lte: fine } }] - }).sort({ riga: 1, col: 1 }); - - let primogiro = true; - - let myflotta = await Flotta.findOne({ idapp, riga: naveinput.riga, col_prima: indcolflottaprima }); - - if (!myflotta) { - myflotta = new Flotta({ - _id: new ObjectID(), - idapp, - }); - nuovo = true; - } - - for (const navepers of arrnavi) { - - if (primogiro) { - myflotta.DoniAttesaDiConferma = 0; - myflotta.DoniMancanti = 0; - myflotta.DoniConfermati = 0; - myflotta.DoniTotali = 0; - primogiro = false; - } - - if (nuovo) { - myflotta.riga = navepers.riga; - myflotta.col_prima = indcolflottaprima; - myflotta.col_ultima = indcolflottaprima + 63; - - myflotta.sognatore = ''; - myflotta.sognatore_nomecognome = ''; - myflotta.link_superchat = ''; - myflotta.msg_inviato = false; - } - - myflotta.date_start = navepers.date_gift_chat_open; - myflotta.date_close = navepers.date_start; - - let sognatore = await Nave.getSognatoreByRigaColMediatore(idapp, { riga: navepers.riga, col: navepers.col }); - if (myflotta.sognatore_nomecognome === '') { - myflotta.sognatore = sognatore.username; - if (!!sognatore.username) - myflotta.sognatore_nomecognome = await User.getNameSurnameByUsername(idapp, sognatore.username); - } - - if (nuovo) { - myflotta.email_paypal = ''; - myflotta.payeer_id = ''; - myflotta.advcash_id = ''; - myflotta.revolut = ''; - myflotta.link_payment = ''; - myflotta.note_payment = ''; - if (!!sognatore) { - myflotta.email_paypal = sognatore.profile.email_paypal; - myflotta.payeer_id = sognatore.profile.payeer_id; - myflotta.advcash_id = sognatore.profile.advcash_id; - myflotta.revolut = sognatore.profile.revolut; - myflotta.link_payment = sognatore.profile.link_payment; - myflotta.note_payment = sognatore.profile.note_payment; - } - } - - if (!!sognatore) { - if (!myflotta.email_paypal) - myflotta.email_paypal = sognatore.profile.email_paypal; - if (!myflotta.payeer_id) - myflotta.payeer_id = sognatore.profile.payeer_id; - if (!myflotta.advcash_id) - myflotta.advcash_id = sognatore.profile.advcash_id; - if (!myflotta.revolut) - myflotta.revolut = sognatore.profile.revolut; - if (!myflotta.link_payment) - myflotta.link_payment = sognatore.profile.link_payment; - if (!myflotta.note_payment) - myflotta.note_payment = sognatore.profile.note_payment; - } - - myflotta.provvisoria = navepers.provvisoria; - - if (!!navepers.DoniAttesaDiConferma && !isNaN(navepers.DoniAttesaDiConferma)) - myflotta.DoniAttesaDiConferma += navepers.DoniAttesaDiConferma; - if (!!navepers.DoniMancanti && !isNaN(navepers.DoniMancanti)) - myflotta.DoniMancanti += navepers.DoniMancanti; - if (!!navepers.DoniConfermati && !isNaN(navepers.DoniConfermati)) - myflotta.DoniConfermati += navepers.DoniConfermati; - if (!!navepers.DoniTotali && !isNaN(navepers.DoniTotali)) - myflotta.DoniTotali += navepers.DoniTotali; - - - } - - await myflotta.save(); - - return true; - - } catch (e) { - console.log(e.message); - return false; - } - -}; - - -const NavePersistente = mongoose.model('NavePersistente', NavePersistenteSchema); - -module.exports = { NavePersistente }; - - diff --git a/src/server/models/user.js b/src/server/models/user.js index 8455303..63183b7 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -6,14 +6,15 @@ const _ = require('lodash'); const tools = require('../tools/general'); -const {Flotta} = require('../models/flotta'); const {Settings} = require('../models/settings'); -const {ListaIngresso} = require('../models/listaingresso'); +// const {ListaIngresso} = require('../models/listaingresso'); const {Graduatoria} = require('../models/graduatoria'); -const {Nave} = require('../models/nave'); -const {NavePersistente} = require('../models/navepersistente'); +// const {Nave} = require('../models/nave'); +// const {NavePersistente} = require('../models/navepersistente'); // const { ExtraList } = require('../models/extralist'); +const {MyGroup} = require('../models/mygroup'); + const {ObjectID} = require('mongodb'); const shared_consts = require('../tools/shared_nodejs'); @@ -341,6 +342,12 @@ const UserSchema = new mongoose.Schema({ username: {type: String}, date: {type: Date}, }], // username + groups: [ + { + _id: false, + groupname: {type: String}, + date: {type: Date}, + }], // username }, }) ; @@ -657,12 +664,9 @@ UserSchema.statics.getUserShortDataByUsername = async function( if (myrec) { myrec.qualified = await User.isUserQualified7(idapp, myrec.username); - myrec.numNaviEntrato = await Nave.getnumNaviByUsername(idapp, - myrec.username); - myrec.numinvitati = await ListaIngresso.getnumInvitati(idapp, - myrec.username); - myrec.numinvitatiattivi = await ListaIngresso.getnumInvitatiAttivi(idapp, - myrec.username); + myrec.numNaviEntrato = 0; + // myrec.numinvitati = await ListaIngresso.getnumInvitati(idapp, myrec.username); + // myrec.numinvitatiattivi = await ListaIngresso.getnumInvitatiAttivi(idapp, myrec.username); } return myrec; @@ -674,37 +678,7 @@ UserSchema.statics.getDownlineByUsername = async function( if (username === undefined) return null; - let arrrec = await ListaIngresso.getInvitati(idapp, username, includemyself, - { - index: 1, - lang: 1, - invitante_username: 1, - ind_order: 1, - username: 1, - name: 1, - surname: 1, - verified_email: 1, - 'profile.teleg_id': 1, - // 'profile.saw_zoom_presentation': 1, - 'profile.ask_zoom_partecipato': 1, - 'profile.qualified': 1, - 'profile.qualified_2invitati': 1, - 'profile.saw_and_accepted': 1, - 'profile.email_paypal': 1, - 'profile.payeer_id': 1, - 'profile.advcash_id': 1, - 'profile.revolut': 1, - 'profile.link_payment': 1, - 'profile.note_payment': 1, - // 'profile.my_dream': 1, - 'profile.paymenttypes': 1, - 'profile.cell': 1, - made_gift: 1, - email: 1, - date_reg: 1, - img: 1, - }, - ); + let arrrec = []; let myq = { idapp, @@ -716,44 +690,6 @@ UserSchema.statics.getDownlineByUsername = async function( myq = {...myq, username: {$ne: username}}; } - // Ottieni gli invitati che ancora non hanno un'imbarco - const arrinv = await User.find(myq); - - for (const inv of arrinv) { - if (!arrrec.find((rec) => rec.username === inv.username)) - arrrec.push(inv._doc); - } - - const arrusername = []; - - for (const inv of arrrec) { - - const rectrovato = arrusername.find((rec) => inv.username === rec.username); - if (!!rectrovato) { - rectrovato.quanti++; - } else { - const myrec = {...inv}; - myrec.quanti = 1; - arrusername.push(myrec); - } - - } - - arrrec = arrusername; - - if (!onlynumber) { - if (!!arrrec) { - for (const rec of arrrec) { - rec.qualified = await User.isUserQualified7(idapp, rec.username); - rec.numNaviEntrato = await Nave.getnumNaviByUsername(idapp, - rec.username); - rec.numinvitati = await ListaIngresso.getnumInvitati(idapp, - rec.username); - rec.numinvitatiattivi = await ListaIngresso.getnumInvitatiAttivi(idapp, - rec.username); - } - } - } return arrrec; }; @@ -961,6 +897,7 @@ UserSchema.statics.setUserQualified_2Invitati = async function( return !!myrec; }; +/* UserSchema.statics.isUserQualified9 = async function(idapp, username) { const User = this; @@ -968,11 +905,12 @@ UserSchema.statics.isUserQualified9 = async function(idapp, username) { return false; qualified = await User.isUserQualified7(idapp, username); - numinvitatiattivi = await ListaIngresso.getnumInvitatiAttivi(idapp, username); + // numinvitatiattivi = await ListaIngresso.getnumInvitatiAttivi(idapp, username); return qualified && (numinvitatiattivi >= 2); }; + */ /* UserSchema.statics.getnumPaymentOk = function (idapp) { @@ -1201,6 +1139,16 @@ UserSchema.statics.getUserById = function(idapp, id) { }); }; +UserSchema.statics.getUserByUsername = function(idapp, username) { + const User = this; + + return User.findOne({ + idapp, + username, + $or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}], + }); +}; + UserSchema.statics.isMyFriend = async function(idapp, username, myusername) { const myfriends = await User.getUsernameFriendsByUsername(idapp, myusername); @@ -1337,11 +1285,11 @@ UserSchema.statics.getArrUsernameFromFieldByUsername = async function( UserSchema.statics.getUsernameReqFriendsByUsername = async function( idapp, username) { - return this.getArrUsernameFromFieldByUsername(idapp, username, 'profile', - 'req_friends'); + return this.getArrUsernameFromFieldByUsername(idapp, username, 'profile', 'req_friends'); }; + UserSchema.statics.getUsernameFriendsByUsername = async function( idapp, username) { @@ -1350,12 +1298,25 @@ UserSchema.statics.getUsernameFriendsByUsername = async function( }; +UserSchema.statics.getUsernameGroupsByUsername = async function( + idapp, username) { + + return this.getArrUsernameFromFieldByUsername(idapp, username, 'profile', 'groups'); + +}; + // Rimuovo l'Amicizia UserSchema.statics.removeFriend = async function(idapp, username, usernameDest) { return User.updateOne({idapp, username}, {$pull: {'profile.friends': {username: {$in: [usernameDest]}}}}); }; +// Rimuovo il Gruppo +UserSchema.statics.removeFromMyGroups = async function(idapp, username, groupnameDest) { + return User.updateOne({idapp, username}, + {$pull: {'profile.groups': {groupname: {$in: [groupnameDest]}}}}); +}; + // Rimuovo la Richiesta di Amicizia UserSchema.statics.removeReqFriend = async function(idapp, username, usernameDest) { return User.updateOne({idapp, username: username}, @@ -1496,8 +1457,106 @@ UserSchema.statics.setFriendsCmd = async function( return ris; }; +UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameDest, cmd, value) { + + let ris = null; + let update = {}; + try { + if (cmd === shared_consts.GROUPSCMD.SETGROUP) { + // Aggiungo l'Amicizia a me + const foundIfAlreadyGroup = await User.findOne({ + idapp, + username: usernameOrig, + 'profile.groups': { + $elemMatch: {groupname: {$eq: groupnameDest}}, + }, + }); + + if (!foundIfAlreadyGroup) { + update = { + $push: { + 'profile.groups': { + groupname: groupnameDest, + date: new Date(), + }, + }, + }; + ris = await User.updateOne({idapp, username: usernameOrig}, update); + + update = {$pull: {'profile.req_groups': {groupname: {$in: [groupnameDest]}}}}; + ris = await User.updateOne({idapp, username: usernameOrig}, update); + } + + if (ris) { + ris = await MyGroup.getInfoGroupByGroupname(idapp, groupnameDest); + } + } else if (cmd === shared_consts.GROUPSCMD.REQGROUP) { + // Aggiungo la richiesta di Amicizia a me + const foundIfAlreadyAskGroup = await MyGroup.findOne({ + idapp, + groupname: groupnameDest, + 'req_groups': { + $elemMatch: { username: {$eq: usernameOrig}}, + }, + }); + + if (value) { + if (!foundIfAlreadyAskGroup) { + update = { + $push: { + 'profile.req_groups': { + username: usernameOrig, + date: new Date(), + }, + }, + }; + ris = await User.updateOne({idapp, username: groupnameDest}, update); + } + if (ris) { + // Invia una notifica alla persona + tools.sendNotificationByGroupName(idapp, groupnameDest, cmd, true); + } + } else { + if (foundIfAlreadyAskGroup) { + ris = await this.removeFromMyGroups(idapp, groupnameDest, usernameOrig); // Rimuovo l'Amicizia da me + } + } + + if (ris) { + ris = await User.getInfoAskGroupByUsername(idapp, groupnameDest); + } + + } else if (cmd === shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUPS) { + + ris = await this.removeFromMyGroups(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me + + } else if (cmd === shared_consts.GROUPSCMD.CANCEL_REQ_GROUP) { + + ris = await MyGroup.removeReqGroup(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me + + } else if (cmd === shared_consts.GROUPSCMD.BLOCK_GROUP) { + + await this.removeFromMyGroups(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me + + // Blocco il Gruppo + ris = await MyGroup.updateOne({idapp, username: groupnameDest}, { + $set: { + blocked: true, + username_who_block: usernameOrig, + date_blocked: new Date(), + }, + }); + //++Todo: Send Notification to Admin and Group's manager + + } + } catch (e) { + console.error('Error: ', e); + } + + return ris; +}; + function getWhatToShow(idapp, username) { - //++Todo: check which data to show return { username: 1, aportador_solidario: 1, @@ -1841,6 +1900,8 @@ UserSchema.statics.getNameSurnameById = async function(idapp, userId) { UserSchema.statics.getSmallRecByIndOrder = async function(idapp, ind_order) { try { + const rec = {}; + /* const rec = await ListaIngresso.getarray(idapp, { idapp, @@ -1864,6 +1925,8 @@ UserSchema.statics.getSmallRecByIndOrder = async function(idapp, ind_order) { if (!!rec) return rec[0]; + */ + return null; } catch (e) { @@ -1889,7 +1952,7 @@ UserSchema.statics.getRecByIndOrder = async function(idapp, ind_order) { const User = this; try { - + /* let filters = { idapp: 1, index: 1, @@ -1920,6 +1983,8 @@ UserSchema.statics.getRecByIndOrder = async function(idapp, ind_order) { if (!!rec) return rec[0]; + + */ return null; } catch (e) { @@ -2147,99 +2212,6 @@ UserSchema.statics.getDashboard = async function( if (!!arrap) dashboard.numpeople_aportador = arrap.length; - dashboard.arrimbarchi = await ListaIngresso.findAllByUsername(idapp, - username); - - // dashboard.arrprofili = await Nave.getArrProfiliByIndOrder(idapp, dashboard.myself.ind_order); - - dashboard.arrposizioni = await Nave.getArrPosizioniByUsername(idapp, - username); - - /* let arrrec = []; - if (dashboard.arrimbarchi.length > 0) { - arrrec = await ListaIngresso.getProssimiInLista(idapp, true); - }*/ - - for (let myimbarco of dashboard.arrimbarchi) { - if (!!myimbarco.invitante_username) - dashboard.arrusers[myimbarco.invitante_username] = await User.getUserShortDataByUsername( - idapp, myimbarco.invitante_username); - myimbarco._doc.posiz = await Graduatoria.getPosizioneInGraduatoria(idapp, - myimbarco.ind_order, myimbarco.username, myimbarco.num_tess); - } - dashboard.navi_partenza = await NavePersistente.getListaNavi(idapp); - - dashboard.lastnave = await NavePersistente.getLastNave(idapp); - - for (let mypos of dashboard.arrposizioni) { - mypos.rec = await Nave.getNaveByRigaCol(idapp, mypos.riga, mypos.col); - mypos.nave_partenza = await NavePersistente.findByRigaColByDonatore(idapp, - mypos.riga, mypos.col, 0); - if (!!mypos.nave_partenza) - mypos.flotta = await Flotta.getFlottaByNavePersistente(idapp, - mypos.nave_partenza); - } - - //for (let indriga = 0; indriga < 10; indriga++) { - // dashboard.navi_partenza.push(await Nave.getPrimaNaveByRiga(idapp, indriga)); - //} - - const arrnew = []; - - try { - for (let mypos of dashboard.arrposizioni) { - // Controlla se è presente la Nave con il num_tess pari - - let trovato = false; - - if (mypos.num_tess % 2 !== 0) { - for (let myrec of dashboard.arrposizioni) { - if (myrec.num_tess === mypos.num_tess + 1 && - (myrec.ind_order === mypos.ind_order)) { - // La Nave di Ritorno (numtess = 2) esiste nella lista ! - trovato = true; - break; - } - } - } else { - trovato = true; - } - if (!trovato) { - let myr = null; - if (!!mypos._doc) - myr = mypos._doc; - else - myr = mypos; - - if (!!myr && !!myr.rec.mediatore) { - const mymediatore = myr.rec.mediatore.arrdonatori[7]; - if (!!mymediatore) { - const myrec = { - riga: mymediatore.riga, - col: mymediatore.col, - name: myr.rec.mediatore.recmediatore.name, - surname: myr.rec.mediatore.recmediatore.surname, - username: myr.rec.mediatore.recmediatore.username, - num_tess: myr.rec.mediatore.recmediatore.num_tess + 1, - rec: await Nave.getNaveByRigaCol(idapp, mymediatore.riga, - mymediatore.col), - nave_partenza: {}, - }; - - myrec.nave_partenza = await NavePersistente.findByRigaColByDonatore( - idapp, myrec.riga, myrec.col, 0); - - arrnew.push(myrec); - } - } - } - } - } catch (e) { - console.error(e.message); - } - - dashboard.arrposizioni = [...dashboard.arrposizioni, ...arrnew]; - // console.table(dashboard.arrnavi); return dashboard; @@ -2377,131 +2349,6 @@ UserSchema.statics.getUsersQualified = async function (idapp, numinvitati) { }; */ -UserSchema.statics.visuUtentiNonInNavi = async function(idapp) { - const User = this; - - const arrusers = await User.find({ - idapp, - $and: User.getQueryQualified(), - }, { - name: 1, - surname: 1, - username: 1, - ind_order: 1, - deleted: 1, - sospeso: 1, - }); - - let num = 0; - let innave = 0; - let noninnave = 0; - let mystr = 'visuUtentiNonInNavi: ' + tools.ACAPO; - let reg = 0; - let num0inv = 0; - let num1inv = 0; - let num2inv = 0; - let numnoinlista = 0; - let numeliminati = 0; - let numsospesi = 0; - let strnavidoppie = ''; - let esiste = false; - - for (const user of arrusers) { - esiste = true; - if (!!user.deleted) { - if (user.deleted) { - numeliminati++; - esiste = false; - } - } - if (esiste) { - - let visualizza = false; - - // Controlla se ho un doppione nelle Navi ! - let mienavi = await Nave.find({idapp, ind_order: user.ind_order}, - {num_tess: 1}); - - let strnavidoppie = []; - if (!!mienavi) { - strnavidoppie = mienavi.reduce((acc, currentValue, index, array) => { - if (array.indexOf(currentValue.num_tess) > -1 && - !acc.includes(currentValue.num_tess)) - acc.push(currentValue.num_tess); - return acc; - }, []); - } - - if (strnavidoppie.length > 1) { - visualizza = true; - } - - user.numinvitati = await ListaIngresso.getnumInvitati(idapp, - user.username); - reg++; - let mianave = await Nave.findOne({idapp, ind_order: user.ind_order}); - let mialistaingresso = await ListaIngresso.findOne( - {idapp, ind_order: user.ind_order}); - let trovato = false; - - if (!mianave) - visualizza = true; - - if (visualizza) { - mystr += user.username + ' ' + user.name + ' ' + user.surname + ' [' + - user.index + '] [inv=' + user.numinvitati + ']'; - trovato = true; - } - - if (strnavidoppie.length > 1) { - mystr += ' NAVI DUPLICATE! ' + strnavidoppie.join(','); - } - if (!mianave) - noninnave++; - else - innave++; - - if (user.sospeso) { - numsospesi++; - } - - if (!mialistaingresso) { - mystr += ' NO IN LISTA INGRESSO!'; - trovato = true; - numnoinlista++; - } - - if (trovato) - mystr += tools.ACAPO; - - if (user.numinvitati === 0) { - num0inv++; - } - if (user.numinvitati === 1) { - num1inv++; - } - if (user.numinvitati >= 2) { - num2inv++; - } - } - } - - mystrstart = 'Registrati: ' + reg + tools.ACAPO; - mystrstart += '0 Invitati: ' + num0inv + tools.ACAPO; - mystrstart += '1 Invitato: ' + num1inv + tools.ACAPO; - mystrstart += '2 o più Invitati: ' + num2inv + tools.ACAPO; - mystrstart += 'Presente in Nave: ' + innave + tools.ACAPO; - mystrstart += 'Non in Nave: ' + noninnave + tools.ACAPO; - mystrstart += 'Non in Lista Imbarco: ' + numnoinlista + tools.ACAPO; - mystrstart += 'Usciti (Nascosti): ' + numeliminati + tools.ACAPO; - mystrstart += 'Sospesi: ' + numsospesi + tools.ACAPO; - - mystrstart += tools.ACAPO; - - mystr = mystrstart + mystr; - - return {num, mystr}; -}; // UserSchema.statics.getNumUsersQualified = async function (idapp, numinvitati) { // @@ -2639,12 +2486,15 @@ UserSchema.statics.checkUser = async function(idapp, username) { UserSchema.statics.calculateStat = async function(idapp, username) { const User = this; + /* return calcstat = { numinvitati: await ListaIngresso.getnumInvitati(idapp, username), numinvitati_attivi: await ListaIngresso.getnumInvitatiAttivi(idapp, username), }; + */ + }; UserSchema.statics.getDistinctNationalityQuery = function(idapp) { @@ -2804,44 +2654,6 @@ if (tools.INITDB_FIRSTIME) { // UserSchema.index({ surname: 1 }); } -async function addUtentiInLista(idapp, mode, arrusers) { - - let num = 0; - for (const rec of arrusers) { - let ok = false; - let qualified = await User.isUserQualified7(idapp, rec.username); - let numinvitatiattivi = await ListaIngresso.getnumInvitatiAttivi(idapp, - rec.username); - let numinvitati = await ListaIngresso.getnumInvitati(idapp, rec.username); - - if (rec.profile.special_req) { - numinvitatiattivi = 2; - } - - if (mode === 1) { - // 9 punti qualificati - ok = qualified && (numinvitatiattivi >= 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) { - ok = qualified; - } - - if (ok) { - ris = await ListaIngresso.addUserInListaIngresso(idapp, rec.username, - rec.aportador_solidario, rec.lang, false, true); - if (!!ris) - num++; - } - } - return num; - -} UserSchema.statics.getUsernameByIndOrder = async function(idapp, ind_order) { @@ -2886,85 +2698,11 @@ UserSchema.statics.ricalcolaIndex = async function(idapp) { }; -UserSchema.statics.changeInvitante = async function( - idapp, username, invitante_username, ind_order_ingr) { - const User = this; - - const rec_ind_order_prima = await ListaIngresso.findOne({idapp, username}); - - let modif_aportador = false; - // cambia aportador_solidario solo se è la prima nave! - - // Oppure se ancora non sono in Lista! - if (!rec_ind_order_prima) { - modif_aportador = true; - } else { - if (rec_ind_order_prima.ind_order === ind_order_ingr) { - modif_aportador = true; - } - } - - if (modif_aportador) { - await User.findOneAndUpdate({idapp, username}, - {$set: {aportador_solidario: invitante_username}}); - } - - // ** - // ** Cambia invitante_username e ind_order di LISTAINGRESSO - // ** - const rec_ingr = await ListaIngresso.findOne({idapp, username: username}); - if (!!rec_ingr) { - // await ListaIngresso.findByIdAndUpdate(rec_ingr._id, { $set: { invitante_username, ind_order: ind_order_ingr } }); - await ListaIngresso.findByIdAndUpdate(rec_ingr._id, - {$set: {invitante_username}}); - } - -}; - -UserSchema.statics.NessunaNavePresenteByUsername = async function( - idapp, username) { - const User = this; - - const rec = await User.findOne({idapp, username}, - {username: 1, ind_order: 1}); - if (!!rec) { - // Controlla se è qualificato! - const qualified = await User.isUserQualified7(idapp, rec.username); - if (qualified) { - - // Ha un'imbarco almeno? - const arrimbarchi = await ListaIngresso.findOne({ - idapp, username: rec.username, - $or: [ - {deleted: {$exists: false}}, - {deleted: {$exists: true, $eq: false}}], - }); - - const arrnavi = await Nave.findOne({ - idapp, ind_order: rec.old_order, - }); - - if (!arrimbarchi && !arrnavi) { - // NEANCHE 1 ! - const recout = await User.findOneAndUpdate({ - idapp, - username, - }, {$set: {navinonpresenti: true}}, {new: false}); - - return (!!recout); - } - } - } - - return false; - -}; - UserSchema.statics.getInfoUser = async function(idapp, username) { return { username, is7req: await User.isUserQualified7(idapp, username), - is9req: await User.isUserQualified9(idapp, username), + // is9req: await User.isUserQualified9(idapp, username), }; }; @@ -2978,37 +2716,15 @@ UserSchema.statics.checkIfSbloccatiRequisiti = async function( if (!allData.myuser) return false; - if (await Nave.checkIfNaveExist(idapp, allData.myuser.username)) { - // Se già sei dentro la Nave, allora sei OK - return true; //TOGLEREE - } + //if (await Nave.checkIfNaveExist(idapp, allData.myuser.username)) { + // // Se già sei dentro la Nave, allora sei OK + // return true; //TOGLEREE + //} // 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.getListaTessByUsername(idapp, - allData.myuser.username); - //if (userlista.length > 0) { //TOGLIERE - if (userlista.length === 0) { - // Se non sono ancora dentro alla lista, allora controllo - - if (!!allData.precDataUser) { - if ((!allData.precDataUser.is7req && is7req) && - !await User.isUserAlreadyQualified(idapp, allData.myuser.username)) { - - await User.setUserQualified(idapp, allData.myuser.username); - // 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 - - // Aggiungilo alla ListaIngresso - risingr = await ListaIngresso.addUserInListaIngresso(idapp, - allData.myuser.username, allData.myuser.aportador_iniziale, - allData.myuser.lang, true, false); - } - } - } + const is9req = false; + // const is9req = await User.isUserQualified9(idapp, allData.myuser.username); if (!!allData.precDataUser) { if ((!allData.precDataUser.is9req && is9req) && @@ -3107,57 +2823,6 @@ UserSchema.statics.mettiSognoePaypal = async function(idapp, modifica) { }; -UserSchema.statics.flagUtentiNaviNonPresenti = async function(idapp) { - const User = this; - - let num = 0; - - await User.updateMany({idapp}, {$set: {navinonpresenti: false}}); - - arrusers = await User.find({ - 'idapp': idapp, - $or: [ - {deleted: {$exists: false}}, - {deleted: {$exists: true, $eq: false}}, - {subaccount: {$exists: false}}, - {subaccount: {$exists: true, $eq: false}}], - }); - - for (const rec of arrusers) { - - const nessunanave = await User.NessunaNavePresenteByUsername(idapp, - rec.username); - if (nessunanave) - num++; - } - - return {num}; -}; - -UserSchema.statics.addNavePerUtentiNaviNonPresenti = async function(idapp) { - const User = this; - - let num = 0; - - arrusers = await User.find({ - 'idapp': idapp, - navinonpresenti: true, - }); - - for (const user of arrusers) { - // Controlla se è qualificato! - mydata = tools.AddDate(user.date_reg, 7); - - const newrecingr = await ListaIngresso.addUserInListaIngresso(idapp, - user.username, user.aportador_solidario, user.lang, true, true, mydata); - await tools.snooze(1000); - - num++; - } - - return {num}; -}; - UserSchema.statics.convSubAccount = async function(idapp) { const User = this; @@ -3269,6 +2934,18 @@ UserSchema.statics.addExtraInfo = async function(idapp, recUser) { }, {username: 1}); recUser._doc.profile.asked_friends = listSentMyRequestFriends ? listSentMyRequestFriends : []; + + const listSentMyRequestGroups = await User.find({ + idapp, + 'profile.req_groups': { + $elemMatch: {username: {$eq: recUser.username}}, + }, + $or: [ + {deleted: {$exists: false}}, + {deleted: {$exists: true, $eq: false}}], + }, {username: 1}); + + recUser._doc.profile.asked_groups = listSentMyRequestGroups ? listSentMyRequestGroups : []; }catch (e){ console.error('Err', e); } diff --git a/src/server/populate/levels.js b/src/server/populate/levels.js new file mode 100644 index 0000000..a65e8b2 --- /dev/null +++ b/src/server/populate/levels.js @@ -0,0 +1,10 @@ +module.exports = { + list: [ + {_id: 0, descr: '[Nessuno]', years_of_exp: 0}, + {_id: 1, descr: 'Principiante', years_of_exp: 1}, + {_id: 2, descr: 'Intermedio', years_of_exp: 3}, + {_id: 3, descr: 'Avanzato', years_of_exp: 5}, + {_id: 4, descr: 'Esperto', years_of_exp: 10}, + {_id: 5, descr: 'Veterano', years_of_exp: 20}, + ], +}; diff --git a/src/server/populate/populate.js b/src/server/populate/populate.js index 6a4255a..5d76f7c 100644 --- a/src/server/populate/populate.js +++ b/src/server/populate/populate.js @@ -25,7 +25,7 @@ module.exports = { }, popolaTabelleNuove() { - const abilita = true; + const abilita = false; const scrivi_citta = false; let ris = null; @@ -42,6 +42,14 @@ module.exports = { const { SubSkill } = require('../models/subskill'); this.insertIntoDb('subskills', SubSkill) + // Levels + const { Level } = require('../models/level'); + this.insertIntoDb('levels', Level) + + // Status + const { StatusSkill } = require('../models/statusSkill'); + this.insertIntoDb('statusskills', StatusSkill) + if (scrivi_citta) { // Cities const {City} = require('../models/city'); diff --git a/src/server/populate/statusskills.js b/src/server/populate/statusskills.js new file mode 100644 index 0000000..09939cc --- /dev/null +++ b/src/server/populate/statusskills.js @@ -0,0 +1,6 @@ +module.exports = { + list: [ + {_id: 1, descr: 'Di Persona'}, + {_id: 2, descr: 'On Line'}, + ], +}; diff --git a/src/server/router/api/actions.js b/src/server/router/api/actions.js index 04e61fb..5009b3a 100755 --- a/src/server/router/api/actions.js +++ b/src/server/router/api/actions.js @@ -1,10 +1,9 @@ const mongoose = require('mongoose').set('debug', false) const Subscription = mongoose.model('subscribers'); -const { ListaIngresso } = require('../../models/listaingresso'); +//const { ListaIngresso } = require('../../models/listaingresso'); const { Graduatoria } = require('../../models/graduatoria'); const { User } = require('../../models/user'); -const { Nave } = require('../../models/nave'); const { ObjectID } = require('mongodb'); @@ -20,11 +19,11 @@ module.exports = { let ris = null; - const { ListaIngresso } = require('../../models/listaingresso'); + // const { ListaIngresso } = require('../../models/listaingresso'); if (tablename === 'users') { - await ListaIngresso.deleteUserInListaIngresso(rec.idapp, rec.username); + // await ListaIngresso.deleteUserInListaIngresso(rec.idapp, rec.username); // Controlla se aveva invitati, li regala a quello sopra const arrap = await User.getDownlineByUsername(rec.idapp, rec.username); @@ -43,28 +42,6 @@ module.exports = { ris = Subscription.deleteOne({ userId: rec._id }) } - if (tablename === 'listaingressos') { - // Rimuovi anche nella Tabella Graduatoria - ris = await Graduatoria.deleteOne({ idListaIngresso: ObjectID(rec._id) }); - if (!!ris) { - - let msg = 'Eliminato dalla Graduatoria di ' + rec.name + ' ' + rec.surname + ' (ind_order=' + rec.ind_order + ', num_tess=' + rec.num_tess + ') [Num = ' + rec.index + `] (da ${req.user.name} ${req.user.surname} )` ; - await telegrambot.sendMsgTelegramToTheManagers(rec.idapp, msg); - tools.writeSostituzioniLog(msg); - } - - // Elimina anche la Nave se è temporanea! - const arrnave = await Nave.find({ idapp: rec.idapp, ind_order: rec.ind_order, num_tess: rec.num_tess }); - for (const mynave of arrnave) { - if (!!mynave) { - if (!await Nave.isDefinitiva(rec.idapp, mynave)) { - await Nave.findByIdAndUpdate(mynave.id, { $set: { ind_order: -1 } }); - break; - } - } - } - } - if (!!ris) { if (notifBot) { diff --git a/src/server/router/dashboard_router.js b/src/server/router/dashboard_router.js index 609c3cc..22ddad5 100755 --- a/src/server/router/dashboard_router.js +++ b/src/server/router/dashboard_router.js @@ -9,9 +9,6 @@ const { authenticate } = require('../middleware/authenticate'); const { User } = require('../models/user'); -const { Nave } = require('../models/nave'); -const { Flotta } = require('../models/flotta'); -const { NavePersistente } = require('../models/navepersistente'); const { MsgTemplate } = require('../models/msg_template'); const mongoose = require('mongoose').set('debug', false) @@ -137,76 +134,6 @@ router.post('/msgflotta', authenticate, async (req, res) => { }); -router.post('/getnave', authenticate, async (req, res) => { - const idapp = req.body.idapp; - const riga = req.body.riga; - const col = req.body.col; - const riga1don = req.body.riga1don; - const col1don = req.body.col1don; - const ind_order = req.body.ind_order; - - const nave = await NavePersistente.findByRigaCol(idapp, riga, col); - if (!!nave) { - nave._doc.rec = await Nave.getNaveByRigaCol(idapp, riga1don, col1don); - if (ind_order >= 0) - nave._doc.ind_order = ind_order; - - nave._doc.listadonatoridelsognatore = await Nave.getDonatoridelSognatore(idapp, riga1don, col1don); - } - - const navi_partenza = await NavePersistente.findAllIdApp(idapp); - - ris = { nave, navi_partenza }; - - if (ris) - res.send({ code: server_constants.RIS_CODE_OK, ris }); - else - res.status(400).send(e); - -}); - -router.post('/getnavi', authenticate, async (req, res) => { - const idapp = req.body.idapp; - - const { Flotta } = require('../models/flotta'); - - - let arrnavi = await NavePersistente.findAllIdApp(idapp); - - // let arrnavi = await NavePersistente.find({idapp, date_gift_chat_open: { $gte: tools.IncDateNow(-1000 * 3600 * 24 * 7 ) } }).sort({ riga: 1, col: 1 }); - - for (nave of arrnavi) { - //nave.rec = await Nave.getNaveByRigaCol(idapp, nave.riga, nave.col); - nave._doc.rec = { - donatore: {}, - mediatore: null - }; - - let riganave = nave.riga; - let colnave = nave.col; - // if (riganave < 4) { - // riganave = 4; - // colnave = 1; - // } - // nave._doc.rec.donatore.navepersistente = await NavePersistente.findByRigaColByDonatore(idapp, riganave, colnave, 0); - nave._doc.rec.donatore.navepersistente = await NavePersistente.findOne({ idapp, riga: riganave, col: colnave }); - if (!!nave._doc.rec) { - if (!!nave._doc.rec.donatore.navepersistente) - nave._doc.rec.donatore.flotta = await Flotta.getFlottaByNavePersistente(idapp, nave._doc.rec.donatore.navepersistente); - } - } - - const navi_partenza = await NavePersistente.findAllIdApp(idapp); - - ris = { arrnavi, navi_partenza }; - - if (ris) - res.send({ code: server_constants.RIS_CODE_OK, ris }); - else - res.status(400).send(e); - -}); - router.post('/getmsg_templates', authenticate, async (req, res) => { const idapp = req.body.idapp; @@ -232,84 +159,6 @@ router.post('/getflotte', authenticate, async (req, res) => { }); -router.post('/getflotta', authenticate, async (req, res) => { - const idapp = req.body.idapp; - const riga = req.body.riga; - const col_prima = req.body.col_prima; - const col_ultima = req.body.col_ultima; - - // const ris2 = await NavePersistente.aggiornaFlottaByNavePersistente(idapp, {riga, col1don: col_prima }); - - let ris = await Nave.getFlotta(idapp, riga, col_prima, col_ultima); - - ris.flotta._doc.log_attivita = tools.readFlottaLog(idapp, ris.flotta.riga, ris.flotta.col_prima); - - if (!!ris) - res.send({ code: server_constants.RIS_CODE_OK, flotta: ris.flotta, arrdonatori: ris.arrdonatori, arrmediatori: ris.arrmediatori }); - else - res.status(400).send(e); - -}); - -router.post('/getdoninavi', authenticate, async (req, res) => { - const idapp = req.body.idapp; - const ricalcola = req.body.ricalcola; - const showall = req.body.showall; - - let arrnavi = null; - if (showall) - arrnavi = await NavePersistente.findAllIdApp(idapp); - else - arrnavi = await NavePersistente.find({idapp, date_gift_chat_open: { $gte: tools.IncDateNow(-1000 * 3600 * 24 * 10 ) } }).sort({ riga: 1, col: 1 }); - - let test = false; - - //arrnavi.push({ riga: indriga, col: indcol, rigadon: indriga + 3, coldon: (indcol * 8) - 7 }); - - try { - if (ricalcola) { - let index = 1; - - for (nave of arrnavi) { - nave = await Nave.ricalcolaNave(idapp, nave, 0, 0, ricalcola, index); - index++; - } - } else { - // arrnavi = await NavePersistente.findAllIdApp(idapp); - let index = 1; - for (nave of arrnavi) { - if (nave.provvisoria || nave.DoniTotali !== nave.DoniConfermati) { - nave._doc.rec = await Nave.getNaveByRigaCol(idapp, nave.riga1don, nave.col1don); - } else { - let rigapos = nave.riga1don; - let colpos = nave.col1don; - if (rigapos < 4) { - rigapos = 4; - colpos = 1; - } - nave._doc.rec = {}; - nave._doc.rec.donatore = {}; - nave._doc.rec.donatore.navepersistente = await NavePersistente.findByRigaColByDonatore(idapp, rigapos, colpos, tools.Placca.SONOFUOCO); - index++; - } - if (index > 8 * 6 ) { - break; - } - } - - } - - ris = { arrnavi }; - - if (ris) - res.send({ code: server_constants.RIS_CODE_OK, ris }); - else - res.status(400).send(e); - } catch (e) { - console.log(e.message) - } - -}); router.post('/getdata', authenticate, async (req, res) => { const idapp = req.body.idapp; diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index ba57c9b..9248ce2 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -15,7 +15,7 @@ const {authenticate, authenticate_noerror} = require( '../middleware/authenticate'); const {ObjectID} = require('mongodb'); -const {ListaIngresso} = require('../models/listaingresso'); +// const {ListaIngresso} = require('../models/listaingresso'); const {Graduatoria} = require('../models/graduatoria'); const mongoose = require('mongoose').set('debug', false); @@ -34,9 +34,7 @@ if (!fs.existsSync(folder)) { const _ = require('lodash'); const {User} = require('../models/user'); -const {Nave} = require('../models/nave'); -const {Flotta} = require('../models/flotta'); -const {NavePersistente} = require('../models/navepersistente'); +const {MyGroup} = require('../models/mygroup'); // const { ExtraList } = require('../models/extralist'); const {Booking} = require('../models/booking'); const {Operator} = require('../models/operator'); @@ -103,7 +101,6 @@ const UserCost = { 'profile.paymenttypes'], }; - router.post(process.env.LINKVERIF_REG, (req, res) => { const body = _.pick(req.body, ['idapp', 'idlink']); const idapp = body.idapp; @@ -222,6 +219,8 @@ function getTableByTableName(tablename) { let mytable = ''; if (tablename === 'users') mytable = User; + else if (tablename === 'mygroups') + mytable = MyGroup; else if (tablename === 'tessitura') mytable = Tessitura; // else if (tablename === 'extralist') @@ -294,16 +293,12 @@ function getTableByTableName(tablename) { mytable = Permission; else if (tablename === 'mailinglist') mytable = MailingList; - else if (tablename === 'navi') - mytable = Nave; - else if (tablename === 'flotte') - mytable = Flotta; else if (tablename === 'msg_templates') mytable = MsgTemplate; else if (tablename === 'navepersistente') mytable = NavePersistente; - else if (tablename === 'listaingressos') - mytable = ListaIngresso; + // else if (tablename === 'listaingressos') + // mytable = ListaIngresso; else if (tablename === 'graduatorias') mytable = Graduatoria; else if (tablename === 'skills') @@ -365,6 +360,23 @@ router.post('/settable', authenticate, (req, res) => { } } + if (shared_consts.TABLES_USER_INCLUDE_MY.includes(params.table)) { + if (!mydata.admins) { + mydata.admins = []; + } else { + const arrnew = []; + for (const username of mydata.admins) { + arrnew.push({username}); + } + mydata.admins = arrnew; + } + const indfind = mydata.admins.findIndex((rec) => (rec.username === req.user.username)); + + if (indfind < 0) { + mydata.admins.push({_id: new ObjectID(), username: req.user.username}); + } + } + delete mydata['__v']; delete mydata['__proto__']; @@ -411,7 +423,7 @@ router.post('/settable', authenticate, (req, res) => { } }); - }catch (e) { + } catch (e) { return res.status(400).send(e); } @@ -627,7 +639,8 @@ router.patch('/chval', authenticate, async (req, res) => { if (mydata.table === shared_consts.TAB_SITES) { if (shared_consts.SITES_KEY_TO_CRYPTED in fieldsvalue) { - fieldsvalue[shared_consts.SITES_KEY_TO_CRYPTED] = tools.cryptdata(fieldsvalue[shared_consts.SITES_KEY_TO_CRYPTED]); + fieldsvalue[shared_consts.SITES_KEY_TO_CRYPTED] = tools.cryptdata( + fieldsvalue[shared_consts.SITES_KEY_TO_CRYPTED]); } } @@ -810,272 +823,7 @@ router.patch('/callfunz', authenticate, async (req, res) => { let fieldsvalue = {}; - if (mydata.myfunc === shared_consts.CallFunz.SOSTITUISCI) { // SOSTITUISCI - - let username_da_sostituire = mydata.data.username_da_sostituire; - - let myuservecchio = await User.findOne( - {idapp, username: username_da_sostituire}); - - let mianavedasost = await Nave.findOne( - {idapp, riga: mydata.data.riga, col: mydata.data.col}); - if (!!mianavedasost) { - - // Sostituisci l'Utente - let myusernuovo = await User.getUserShortDataByUsername(idapp, - mydata.data.username); - let navepersistente = await NavePersistente.findByRigaColByDonatore( - idapp, mydata.data.riga, mydata.data.col, 0); - - if (myusernuovo) { - - if (!mydata.data.AddImbarco && mianavedasost.ind_order > 0) { - - // Controlla prima se è in una Nave Temporanea, allora lo elimina dall'ultima Nave Temporanea - - let miaarrnavi = await Nave.getArrPosizioniByUsername(idapp, - username); - if (miaarrnavi) { - miaarrnavi = miaarrnavi.reverse(); // parto dall'ultima - for (const mianave of miaarrnavi) { - let persistente = await NavePersistente.findByRigaColByDonatore( - idapp, mianave.riga, mianave.col, 0); - if (persistente.provvisoria) { - fieldsvalue = { - ind_order: -1, - }; - - let ris = await Nave.findByIdAndUpdate(mianave._id, - {$set: fieldsvalue}); - if (!!ris) { - // rimosso++; - break; // Rimuovilo solo 1 ! - } - } - } - } - } - - if (mianavedasost.ind_order >= 0) { - - // ELIMINO LA LISTAINGRESSO CHE STO SOSTITUENDO (SOLO SE NON VIENE USATA DA ALTRA NAVE!) - let eliminatoingr = await ListaIngresso.eliminaListaIngresso(idapp, - mianavedasost.ind_order, req, mianavedasost.num_tess); - - if (!eliminatoingr) { - return res.send({ - code: server_constants.RIS_CODE_ERR, - msg: 'La Sostituzione non può avvenire ! Contattare Paolo. (ind_order=' + - mianavedasost.ind_order + ')', - }); - } - } - - if (!!myuservecchio) { - if (mydata.data.notifBot) { - - const mydatamsg = { - tipomsg: tools.TipoMsg.SEND_MSG_A_UTENTE_SOSTITUITO, - navemediatore: { - riga: navepersistente.riga, - col: navepersistente.col, - }, - }; - - mydatamsg.flotta = await Flotta.getFlottaByNavePersistente(idapp, - navepersistente); - - const rismsg = await telegrambot.getMsgByTipoMsg(mydatamsg, - myuservecchio.lang, myuservecchio, false); - - if (!!rismsg) { - let messaggio = rismsg.body; - // let mytitle = rismsg.title; - if (!!messaggio) { - await telegrambot.sendMsgTelegram(idapp, myusernuovo.username, - messaggio); - } - } - } - - // Se ha gia delle altre navi, non cancellarlo! - if (!await Nave.checkIfMadeGift(idapp, myuservecchio.username)) { - - if (mydata.data.deleteUser && mianavedasost.ind_order > 0) { - // Metti Deleted allo User - fieldsvalue = { - deleted: true, - date_deleted: new Date(), - }; - - await User.findByIdAndUpdate(myuservecchio.id, - {$set: fieldsvalue}); - await telegrambot.sendMsgTelegramToTheManagers(idapp, - `L\'utente ${myuservecchio.name} ${myuservecchio.surname} (${myuservecchio.username}) è stato cancellato (nascosto) perchè sostituito (da ${req.user.name} ${req.user.surname} )`); - } - } - - } - - let ind_order = -1; - let myingr = null; - // Estrai un ind_order dalla Lista, se era ancora in attesa - if (!mydata.data.AddImbarco) - myingr = await ListaIngresso.findOne( - {idapp, added: false, username: myusernuovo.username}); - - if (!!myingr) { - ind_order = myingr.ind_order; - - myingr.added = true; - await myingr.save(); - } else { - // Crea un nuovo Ingresso - myingr = await ListaIngresso.addUserInListaIngresso(idapp, - myuser.username, myuser.username, myuser.lang, false, true, - null, null, true); - ind_order = myingr.ind_order; - - await myingr.save(); - - } - - // Togliolo dalla Graduatoria! - await Graduatoria.findOneAndUpdate({ - idapp, - idListaIngresso: myingr._id, - }, {$set: {ind_order: -1}}, {new: false}); - - // Aggiorna la Nave con il Nuovo - fieldsvalue = { - ind_order, - }; - - const dachi = req.user.name + ' ' + req.user.surname; - - return await Nave.findByIdAndUpdate(mianavedasost.id, - {$set: fieldsvalue}).then(async (nave) => { - // tools.mylogshow(' REC TO MODIFY: ', rec); - if (!nave) { - return res.status(404).send(); - } else { - - const mydatamsg = { - tipomsg: tools.TipoMsg.SEND_MSG_EFFETTUA_IL_DONO, - navemediatore: { - riga: navepersistente.riga, - col: navepersistente.col, - }, - }; - - mydatamsg.flotta = await Flotta.getFlottaByNavePersistente(idapp, - navepersistente); - - const rismsg = await telegrambot.getMsgByTipoMsg(mydatamsg, - myusernuovo.lang, myusernuovo, false); - - let messaggio = rismsg.body; - let mytitle = rismsg.title; - - // const myplacca = await Nave.getNavePos(idapp, navepersistente.riga, navepersistente.col); - // messaggio += tools.ACAPO + myplacca; - - let testostaff = ''; - if (mydata.notifBot) - testostaff = mydata.notifBot.txt; - - const mymsg = testostaff + ' ' + myusernuovo.name + ' ' + - myusernuovo.surname + ' [da ' + dachi + ']' + tools.ACAPO + - 'Inviato messaggio: ' + messaggio; - - if (mydata.data.notifBot) { - - await telegrambot.sendMsgTelegram(idapp, myusernuovo.username, - messaggio); - - if (mydata.data.inviaemail) { - await sendemail.sendEmail_ByText(myusernuovo.lang, - myusernuovo.email, myusernuovo, idapp, { - emailbody: messaggio, - emailtitle: mytitle, - }); - } - - await telegrambot.sendMsgTelegramToTheManagers(idapp, - testostaff); - await telegrambot.sendMsgTelegram(idapp, req.user.username, - testostaff); - // await telegrambot.sendMsgTelegram(idapp, req.user.username, myplacca); - } else { - tools.writeManagersLog(mymsg); - } - - const msgsost = '[NAVE ' + navepersistente.riga + '.' + - navepersistente.col + '] Sostituito ' + - myuservecchio.username + ' (' + myuservecchio.name + ' ' + - myuservecchio.surname + ') ' + ' con -> ' + - myusernuovo.username + ' (' + myusernuovo.name + ' ' + - myusernuovo.surname + '' + - ') [Posiz. ' + nave.riga + '.' + nave.col + ' ind_order=' + - nave.ind_order + '] ' + ' [da ' + dachi + ']'; - tools.writeSostituzioniLog(msgsost); - tools.writeFlottaLog(idapp, msgsost, mydatamsg.flotta.riga, - mydatamsg.flotta.col_prima); - await telegrambot.sendMsgTelegramToTheManagers(idapp, msgsost, - false); - - // const nomecognomeprima = myuser.name + ' ' + myuser.surname + '(' + myuser.username + ')'; - // const nomecognomenuovo = await User.getNameSurnameByUsername(idapp,); - - res.send({code: server_constants.RIS_CODE_OK, msg: ''}); - } - - }).catch((e) => { - tools.mylogserr('Error patch USER: ', e.message); - res.status(400).send(); - }); - } - } - } else if (mydata.myfunc === - shared_consts.CallFunz.AGGIUNGI_NUOVO_IMBARCO) { - // Ottieni il prossimo Numero di Tessitura - //let num_tess = await Nave.getNextNumTess(idapp, ind_order); - // const num_tess = 1; - - /* - let listaingr = await ListaIngresso.find({ idapp, ind_order }).sort({ num_tess: 1 }); - const trovato = listaingr.find((rec) => rec.num_tess === num_tess); - if (trovato) { - num_tess = listaingr.slice(-1)[0].num_tess + 2; - } - */ - - // metti l'invitante inizialmente a Te stesso ! - const invitante_username = req.body.data.invitante_username; - - await ListaIngresso.addUserInListaIngresso(idapp, username, - invitante_username, myuser.lang, true, true); - - let arrimbarchi = await ListaIngresso.findAllByUsername(idapp, username); - return res.send({code: server_constants.RIS_CODE_OK, arrimbarchi}); - - } else if (mydata.myfunc === shared_consts.CallFunz.CANCELLA_IMBARCO) { - - const myrec = await ListaIngresso.getIngrEUserByFilter(idapp, - {idapp, _id: ObjectID(mydata.data.id)}); - - if (!!myrec) { - await ListaIngresso.find({_id: mydata.data.id}); - - const risdel = await ListaIngresso.eliminaListaIngresso(idapp, - mydata.ind_order, req, mydata.data.num_tess); - - if (risdel) { - return res.send({code: server_constants.RIS_CODE_OK, msg: ''}); - } - } - - } else if (mydata.myfunc === shared_consts.CallFunz.ZOOM_GIA_PARTECIPATO) { + if (mydata.myfunc === shared_consts.CallFunz.ZOOM_GIA_PARTECIPATO) { if (!!myuser.username) { let FormDaMostrare = telegrambot.getFormDaMostrare(idapp, mydata.myfunc, @@ -1152,7 +900,8 @@ router.delete('/delrec/:table/:id', authenticate, async (req, res) => { let cancellato = false; - // tools.NotifyIfDelRecord(tablename); + //++Tools: Notify... + tools.NotifyIfDelRecord(tablename); if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) { if (tablename === 'users') { @@ -1276,7 +1025,8 @@ function load(req, res, version) { let gestoredelSito = '0'; if (!!req.user) { - gestoredelSito = (User.isAdmin(req.user.perm) || User.isManager(req.user.perm) || + gestoredelSito = (User.isAdmin(req.user.perm) || + User.isManager(req.user.perm) || User.isEditor(req.user.perm)) ? '1' : '0'; } @@ -1284,7 +1034,6 @@ function load(req, res, version) { // tools.mylog('loadsite : ', req.params); - let bookedevent = []; // let msgs = []; @@ -1295,7 +1044,8 @@ function load(req, res, version) { if (userId !== '0') { // LOGGED WITH USERID - bookedevent = Booking.findAllByUserIdAndIdApp(userId, idapp, gestoredelSito); + bookedevent = Booking.findAllByUserIdAndIdApp(userId, idapp, + gestoredelSito); } // Extract all the todos of the userId only @@ -1357,7 +1107,7 @@ function load(req, res, version) { orderscart = OrdersCart.getOrdersCartByUserId(req.user.id, idapp, 0); } } - let askedfriends = [] + let askedfriends = []; let myuserextra = null; if (req.user) { // askedfriends = User.getAskedFriendsByUsername(idapp, req.user.username); @@ -1506,7 +1256,6 @@ router.get(process.env.LINK_CHECK_UPDATES, authenticate, async (req, res) => { if (User.isAdmin(req.user.perm) || User.isEditor(req.user.perm) || User.isManager(req.user.perm)) { - // Send UsersList usersList = User.getUsersList(req.user.idapp); // usersList = null; @@ -1621,7 +1370,8 @@ function uploadFile(req, res, version) { form.on('file', async function(name, file) { try { console.log('Uploaded ' + file.name); - const mydir = tools.getdirByIdApp(idapp) + dirmain + server_constants.DIR_UPLOAD + '/' + dir; + const mydir = tools.getdirByIdApp(idapp) + dirmain + + server_constants.DIR_UPLOAD + '/' + dir; // Create Dir if doesn't exist: tools.mkdirpath(mydir); @@ -1634,7 +1384,7 @@ function uploadFile(req, res, version) { // filename = uuidv4() + ext; //} - file.name = filename + file.name = filename; let newname = mydir + '/' + file.name; let resized_img = mydir + '/' + server_constants.PREFIX_IMG + filename; @@ -1643,7 +1393,7 @@ function uploadFile(req, res, version) { // For local: ... resolve this... sending through the static folder... // res.sendFile(path.resolve(filename)); - oldpath = file.path + oldpath = file.path; file.path = newname; // Move in the folder application ! @@ -1675,13 +1425,13 @@ function uploadFile(req, res, version) { const ris = await resizer(newname, setup_image_compress); if (ris) { - tools.delete(newname, false, () => {}) + tools.delete(newname, false, () => {}); tools.move(resized_img, newname, (err) => { - }) + }); } - }catch (e) { + } catch (e) { console.error('newname', e); } diff --git a/src/server/router/mygroups_router.js b/src/server/router/mygroups_router.js new file mode 100755 index 0000000..3dd0a4b --- /dev/null +++ b/src/server/router/mygroups_router.js @@ -0,0 +1,39 @@ +const express = require('express'); +const router = express.Router(); + +const tools = require('../tools/general'); + +const server_constants = require('../tools/server_constants'); + +const { authenticate } = require('../middleware/authenticate'); + +const mongoose = require('mongoose').set('debug', false) + +const { User } = require('../models/user'); +const { MyGroup } = require('../models/mygroup'); + +const _ = require('lodash'); + +const { ObjectID } = require('mongodb'); + + +router.post('/load', authenticate, async (req, res) => { + const idapp = req.body.idapp; + const groupname = req.body.groupname; + + try{ + data = await MyGroup.findOne({idapp, groupname}).lean(); + + res.send(data); + + }catch (e) { + console.error('Error in MyGroups'); + return res.status(400).send(e); + } + + const ris = null + + +}); + +module.exports = router; diff --git a/src/server/router/site_router.js b/src/server/router/site_router.js index 2efdb73..7bd5707 100755 --- a/src/server/router/site_router.js +++ b/src/server/router/site_router.js @@ -10,8 +10,8 @@ const { authenticate } = require('../middleware/authenticate'); const mongoose = require('mongoose').set('debug', false) const { User } = require('../models/user'); -const { Nave } = require('../models/nave'); -const { ListaIngresso } = require('../models/listaingresso'); +// const { Nave } = require('../models/nave'); +// const { ListaIngresso } = require('../models/listaingresso'); const _ = require('lodash'); @@ -26,8 +26,8 @@ router.post('/load', async (req, res) => { let datastat = { num_reg: await User.getUsersRegistered(idapp), - num_passeggeri: await Nave.getTotInLista(idapp), - num_imbarcati: await ListaIngresso.getTotInLista(idapp), + num_passeggeri: await 0, + num_imbarcati: 0, email_non_verif: await User.getEmailNotVerified(idapp), num_teleg_attivo: await User.getUsersTelegramAttivo(idapp), num_teleg_pending: await User.getUsersTelegramPending(idapp), @@ -39,8 +39,8 @@ router.post('/load', async (req, res) => { arr_nations: await User.findAllDistinctNationality(idapp), numreg_untilday: await User.calcnumRegUntilDay(idapp), reg_daily: await User.calcRegDaily(idapp), - imbarcati_daily: await ListaIngresso.ImbarcatiDaily(idapp), - imbarcati_weekly: await ListaIngresso.ImbarcatiWeekly(idapp), + imbarcati_daily: 0, + imbarcati_weekly: 0, reg_weekly: await User.calcRegWeekly(idapp), lastsreg: await User.getLastUsers(idapp), checkuser: await User.checkUser(idapp, username), diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index 66db61f..70cea18 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -33,6 +33,8 @@ const Product = require('../models/product'); const Variant = require('../models/variant'); const TypedError = require('../modules/ErrorHandler'); +const { MyGroup } = require('../models/mygroup'); + const mongoose = require('mongoose').set('debug', false); const Subscription = mongoose.model('subscribers'); @@ -491,6 +493,21 @@ router.post('/friends', authenticate, (req, res) => { }); +router.post('/groups', authenticate, (req, res) => { + const username = req.user.username; + idapp = req.body.idapp; + locale = req.body.locale; + + + return MyGroup.getGroupsByUsername(idapp, username).then((ris) => { + res.send(ris); + }).catch((e) => { + tools.mylog('ERRORE IN groups: ' + e.message); + res.status(400).send(); + }); + +}); + router.post('/friends/cmd', authenticate, (req, res) => { const usernameLogged = req.user.username; const idapp = req.body.idapp; @@ -516,6 +533,31 @@ router.post('/friends/cmd', authenticate, (req, res) => { }); +router.post('/groups/cmd', authenticate, (req, res) => { + const usernameLogged = req.user.username; + const idapp = req.body.idapp; + const locale = req.body.locale; + const usernameOrig = req.body.usernameOrig; + const groupnameDest = req.body.groupnameDest; + const cmd = req.body.cmd; + const value = req.body.value; + + if (!User.isAdmin(req.user.perm) || !User.isManager(req.user.perm)) { + // If without permissions, exit + if (usernameOrig !== usernameLogged) { + return res.status(404).send({code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: ''}); + } + } + + return MyGroup.setGroupsCmd(idapp, usernameOrig, groupnameDest, cmd, value).then((ris) => { + res.send(ris); + }).catch((e) => { + tools.mylog('ERRORE IN groups/cmd: ' + e.message); + res.status(400).send(); + }); + +}); + async function eseguiDbOp(idapp, mydata, locale) { let ris = await User.DbOp(idapp, mydata); @@ -529,7 +571,7 @@ async function eseguiDbOp(idapp, mydata, locale) { // } else if (mydata.dbop === 'rigeneraTutto') { // await ListaIngresso.Esegui_CronTab(idapp, mydata); } else if (mydata.dbop === 'visuStat') { - ris = await User.visuUtentiNonInNavi(idapp); + // ris = await User.visuUtentiNonInNavi(idapp); //} else if (mydata.dbop === 'creaNavi') { // const num = await Nave.generaNave(idapp, mydata, false); // ris = { num }; diff --git a/src/server/server.js b/src/server/server.js index 0a5d187..5a9218a 100755 --- a/src/server/server.js +++ b/src/server/server.js @@ -96,6 +96,7 @@ myLoad().then(ris => { const projects_router = require('./router/projects_router'); const report_router = require('./router/report_router'); const users_router = require('./router/users_router'); + const mygroups_router = require('./router/mygroups_router'); const iscrittiConacreis_router = require('./router/iscrittiConacreis_router'); const site_router = require('./router/site_router'); const admin_router = require('./router/admin_router'); @@ -148,6 +149,7 @@ myLoad().then(ris => { app.use('/test', test_router); app.use('/projects', projects_router); app.use('/users', users_router); + app.use('/mygroup', mygroups_router); app.use('/iscritti_conacreis', iscrittiConacreis_router); app.use('/report', report_router); app.use('/site', site_router); diff --git a/src/server/telegram/telegrambot.js b/src/server/telegram/telegrambot.js index 903a93c..d855402 100755 --- a/src/server/telegram/telegrambot.js +++ b/src/server/telegram/telegrambot.js @@ -12,17 +12,14 @@ const printf = require('util').format; const {User} = require('../models/user'); const {CalZoom} = require('../models/calzoom'); -const {Nave} = require('../models/nave'); const {MyBot} = require('../models/bot'); const shared_consts = require('../tools/shared_nodejs'); -const {ListaIngresso} = require('../models/listaingresso'); +// const {ListaIngresso} = require('../models/listaingresso'); const {MsgTemplate} = require('../models/msg_template'); const emoji = require('node-emoji'); -const {Flotta} = require('../models/flotta'); - const i18n = require('i18n'); let url = process.env.URL || 'https://'; @@ -2498,21 +2495,8 @@ class Telegram { } 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.NESSUN_IMBARCO_7REQ) { - invia = await User.NessunaNavePresenteByUsername(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 ListaIngresso.getnumInvitati( - this.idapp, utente.username); - const numinvitatiattivi = await ListaIngresso.getnumInvitatiAttivi( - this.idapp, utente.username); - invia = (numinvitati >= 2) && (numinvitatiattivi < 2); + // invia = !await Nave.findDonatoreByNave(this.idapp, rec.extraparam); } // TEST invia = true; @@ -3371,13 +3355,7 @@ if (true) { // Controlla se è qualificato! const mydata = tools.AddDate(user.date_reg, 7); - const newrecingr = await ListaIngresso.addUserInListaIngresso( - user.idapp, user.username, user.aportador_solidario, - user.lang, true, true, mydata); - - bot.editMessageText( - tools.gettranslate('ADDED_TOLISTAINGRESSO', user.lang), - opts); + // bot.editMessageText(tools.gettranslate('ADDED_TOLISTAINGRESSO', user.lang), opts); } else if (data.action === InlineCmd.NON_VOGLIO_IMBARCARMI) { await User.NonVoglioImbarcarmi(user.idapp, user.username); diff --git a/src/server/tools/general.js b/src/server/tools/general.js index b3f76f0..0009c54 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -838,6 +838,53 @@ module.exports = { }, + sendNotificationByGroupname: async function(idapp, groupname, cmd, telegram) { + + var {User} = require('../models/user'); + var {MyGroup} = require('../models/mygroup'); + + const group = await MyGroup.findOne({idapp, groupname}, {_id: 1, admins: 1}); + if (!group) + return; + + // Send msg to Admins + + const arrusernameAdmins = group.admins; + + for (const username of arrusernameAdmins) { + const user = await User.get + let userId = user._id; + let lang = user.lang; + + let title = this.getNomeAppByIdApp(idapp); + let descr = ''; + let openUrl = '/'; + let tag = ''; + let actions = []; + if (cmd) { + if (cmd === shared_consts.FRIENDSCMD.REQFRIEND) { + descr = printf(this.get__('RICHIESTA_AMICIZIA', lang), username); + openUrl = '/my/' + username; + tag = 'reqfriends'; + } + } + + if (userId) { + this.sendNotificationToUser(userId, title, descr, openUrl, '', tag, + actions); + } + + if (telegram) { + const telegrambot = require('../telegram/telegrambot'); + + const idtelegram = await User.TelegIdByUsername(idapp, username); + + await telegrambot.sendMsgTelegramByIdTelegram(idapp, idtelegram, descr); + } + } + + }, + // ********************** // SORT WITH PREV_ID // ********************** @@ -2099,7 +2146,7 @@ module.exports = { NotifyIfDelRecord(table) { if ((table === 'users') || (table === 'extralist') || - (table === 'listaingressos') || (table === 'graduatorias')) { + (table === 'groups') || (table === 'graduatorias')) { return true; } diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index d0ed632..9f9efe9 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -45,6 +45,17 @@ module.exports = { FIND_PEOPLE: 166, }, + GROUPSCMD: { + SETTRUST: 1121, + REQGROUP: 1125, + SETGROUP: 1132, + REMOVE_FROM_MYGROUP: 1144, + REFUSE_REQ_GROUP: 1145, + CANCEL_REQ_GROUP: 1146, + BLOCK_GROUP: 1155, + FIND_GROUP: 1166, + }, + REPORT_FILT_RESP: 1, REPORT_FILT_ATTIVITA: 2, @@ -69,8 +80,9 @@ module.exports = { PARAM_SHOW_PROVINCE: 1, TABLES_ID_NUMBER: ['permissions', 'levels', 'statusSkills', 'sectors', 'skills', 'subskills', 'cities', 'myskills'], - TABLES_USER_ID: ['myskills'], - TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybots'], + TABLES_USER_ID: ['myskills', 'mygroups'], + TABLES_USER_INCLUDE_MY: ['mygroups'], + TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybots', 'mygroups'], TABLES_PERM_CHANGE_FOR_USERS: ['myskills'], TABLES_PERM_NEWREC: ['skills', 'subskills'],