diff --git a/logtrans.txt b/logtrans.txt index f1535e3..1b1dc3c 100644 --- a/logtrans.txt +++ b/logtrans.txt @@ -196,4 +196,12 @@ Giovannifruttadisicilia: 222.50 RIS] Mar 28/05 ORE 16:51: [Circuito RIS Italia]: Inviate Monete da ElenaEspx a Giovannifruttadisicilia 28 RIS [causale: Acquisto arance 30genn24 RisoBologna 1] Saldi: ElenaEspx: -60.10 RIS] -Giovannifruttadisicilia: 250.50 RIS] \ No newline at end of file +Giovannifruttadisicilia: 250.50 RIS] +Ven 31/05 ORE 11:12: [Circuito RIS Rimini]: Inviate Monete da paoloar77 a dsadas1 1 RIS [causale: aaa] +Saldi: +paoloar77: -2.00 RIS] +dsadas1: 1.00 RIS] +Ven 31/05 ORE 11:59: [Circuito RIS Rimini]: Inviate Monete da paoloar77 a dsadas1 2 RIS [causale: ] +Saldi: +paoloar77: -4.00 RIS] +dsadas1: 3.00 RIS] \ No newline at end of file diff --git a/src/server/models/attivita.js b/src/server/models/attivita.js new file mode 100755 index 0000000..6da5f15 --- /dev/null +++ b/src/server/models/attivita.js @@ -0,0 +1,380 @@ +const mongoose = require('mongoose').set('debug', false); +const Schema = mongoose.Schema; + +mongoose.Promise = global.Promise; +mongoose.level = 'F'; + +const tools = require('../tools/general'); + +const { Reaction } = require('./reaction'); + +const shared_consts = require('../tools/shared_nodejs'); + +const { ObjectID } = require('mongodb'); + +// Resolving error Unknown modifier: $pushAll +mongoose.plugin(schema => { + schema.options.usePushEach = true; +}); + +const AttivitaSchema = new Schema( + { + ...{ + _id: { + type: String, + default: function () { + return new ObjectID().toString(); + }, + }, + idapp: { + type: String, + required: true, + }, + // userId: { type: Schema.Types.ObjectId, ref: 'User' }, + idSector: { + type: Number, + }, + idSkill: { + type: Number, + default: 0, + }, + idCity: [ + { + type: Number, + }], + logo: + { + imagefile: { + type: String, + }, + alt: { + type: String, + }, + description: { + type: String, + }, + }, + photos: [ + { + imagefile: { + type: String, + }, + alt: { + type: String, + }, + description: { + type: String, + }, + }], + note: { + type: String, + default: '', + }, + website: { + type: String, + }, + date_created: { + type: Date, + }, + date_updated: { + type: Date, + }, + + tipodiAttivita: { + type: Number, + }, + + nome_attivita: { + type: String, + }, + descr: { + type: String, + }, + + coordinate_gps: { + type: String, + }, + + email: { + type: String, + }, + telegram_username: { + type: String, + }, + cell_phone: { + type: String, + }, + whatsapp: { + type: String, + }, + createdBy: { // Username del creatore (proponente) + type: String, + }, + + //**ADDFIELD_ATTIVITA + }, + ...Reaction.getFieldsForReactions() + }, { strict: false }); + +AttivitaSchema.index({ 'idapp': 1 }); + + +AttivitaSchema.pre('save', async function (next) { + if (this.isNew) { + if (!this.date_created) + this.date_created = new Date(); + } + + next(); +}); + +AttivitaSchema.statics.findAllIdApp = async function (idapp) { + const Attivita = this; + + const query = [ + { $match: { idapp } }, + { $sort: { descr: 1 } }, + ]; + + return await Attivita.aggregate(query).then((arrrec) => { + return arrrec; + }); + +}; + +AttivitaSchema.statics.getFieldsForSearch = function () { + return []; +}; + +AttivitaSchema.statics.getFieldsLastForSearch = function () { + return [ + { field: 'note', type: tools.FieldType.string }, + { field: 'descr', type: tools.FieldType.string }, + { field: 'recSkill.descr', type: tools.FieldType.string }, + { field: 'attivita.descr', type: tools.FieldType.string }, + ]; +}; + +AttivitaSchema.statics.executeQueryTable = function (idapp, params, user) { + params.fieldsearch = this.getFieldsForSearch(); + params.fieldsearch_last = this.getFieldsLastForSearch(); + + const otherparams = { + lookup1: { + lk_tab: 'users', + lk_LF: 'userId', + lk_FF: '_id', + lk_as: 'user', + af_objId_tab: 'myId', + lk_proj: this.getProject(), + }, + }; + + params = { ...params, ...otherparams }; + + return tools.executeQueryTable(this, idapp, params, user); +}; + +AttivitaSchema.statics.getMyRecById = function (idapp, idSkill) { + const Attivita = this; + + let query = [ + { + '$match': { + '_id': idSkill, idapp + }, + }, + { + '$sort': { + 'desc': 1, + }, + }, + { + '$addFields': { + 'myId1': { + '$toObjectId': '$userId', + }, + }, + }, + { + '$lookup': { + 'from': 'users', + 'localField': 'myId1', + 'foreignField': '_id', + 'as': 'user', + }, + }, + { + '$replaceRoot': { + 'newRoot': { + '$mergeObjects': [ + { + '$arrayElemAt': [ + '$user', + 0, + ], + }, + '$$ROOT', + ], + }, + }, + }, + { + $project: this.getProject(), + }, + { + '$lookup': { + 'from': 'skills', + 'localField': 'idSkill', + 'foreignField': '_id', + 'as': 'recSkill', + }, + }, + { + '$replaceRoot': { + 'newRoot': { + '$mergeObjects': [ + { + '$arrayElemAt': [ + '$recSkill', + 0, + ], + }, + '$$ROOT', + ], + }, + }, + }, + { + $project: this.getProject(), + }, + { + '$lookup': { + 'from': 'sectors', + 'localField': 'idSector', + 'foreignField': '_id', + 'as': 'sector', + }, + }, + { + '$replaceRoot': { + 'newRoot': { + '$mergeObjects': [ + { + '$arrayElemAt': [ + '$sector', + 0, + ], + }, + '$$ROOT', + ], + }, + }, + }, + { + $project: this.getProject(), + }, + { + '$replaceRoot': { + 'newRoot': { + '$mergeObjects': [ + { + '$arrayElemAt': [ + '$attivita', + 0, + ], + }, + '$$ROOT', + ], + }, + }, + }, + { + $project: this.getProject(), + }, + { + '$lookup': { + 'from': 'cities', + 'localField': 'idCity', + 'foreignField': '_id', + 'as': 'mycities', + }, + }, + { + '$replaceRoot': { + 'newRoot': { + '$mergeObjects': [ + { + '$arrayElemAt': [ + '$mycities', + 0, + ], + }, + '$$ROOT', + ], + }, + }, + }, + ]; + + let numtab = tools.getNumTabByTable(shared_consts.TABLES_ATTIVITAS); + + const objadd = tools.addNumFavoriteAndBookmarkToQuery(idapp, numtab); + query = [...query, ...objadd.query]; + + const toadd = { + $project: this.getProject(objadd.proj), + }; + + query = [...query, { ...toadd }]; + + return Attivita.aggregate(query).then((rec) => { + return rec ? rec[0] : null; + }); +}; + +AttivitaSchema.statics.getProject = function (proj_add2) { + let proj = { + recSkill: 1, + sector: 1, + idSector: 1, + idSkill: 1, + idCity: 1, + logo: 1, + photos: 1, + note: 1, + descr: 1, + website: 1, + date_created: 1, + date_updated: 1, + tipodiAttivita: 1, + nome_attivita: 1, + coordinate_gps: 1, + email: 1, + telegram_username: 1, + cell_phone: 1, + whatsapp: 1, + createdBy: 1, + //**ADDFIELD_ATTIVITA + }; + + const proj_add = shared_consts.getProjectForAll(proj_add2) + + return Object.assign({}, proj, proj_add); + +} + +AttivitaSchema.statics.getCompleteRecord = function (idapp, id) { + const Attivita = this; + + return Attivita.getMyRecById(idapp, id); + +}; + +const Attivita = mongoose.model('Attivita', AttivitaSchema); + +Attivita.createIndexes((err) => { + if (err) throw err; +}); + +module.exports = { Attivita }; diff --git a/src/server/router/admin_router.js b/src/server/router/admin_router.js index dd9efc5..30cf61f 100755 --- a/src/server/router/admin_router.js +++ b/src/server/router/admin_router.js @@ -95,7 +95,11 @@ async function completaSettaggioProduct_AndProductInfo(arrcampi_productInfo, arr productInfo.img = 'upload/products/' + product.code + '.jpg'; } else { if (rec.hasOwnProperty('img')) { - productInfo.img = 'upload/products/' + rec['img']; + if (rec['img']) { + productInfo.img = 'upload/products/' + rec['img']; + } else { + productInfo.img = ''; + } } } diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index 94d4de6..3679238 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -674,7 +674,7 @@ function checkBlocked(req, res, next) { if (failedLoginAttempts[username] && failedLoginAttempts[username] > now) { text = 'Utente bloccato. Riprova più tardi. (username=' + username + ')'; - console.log(text); + console.log(text); return res.status(403).json({ message: 'Utente bloccato. Riprova più tardi.' }); } @@ -1623,6 +1623,14 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) { await Circuit.createCircuitIfNotExist(req, idapp, recprov.prov); } + } else if (mydata.dbop === 'correggiCircuitiANull') { + + + await User.updateMany( + {}, + { $pull: { "profile.mycircuits": { "circuitname": null } } } + ); + } else if (mydata.dbop === 'ImpostaMinMaxPersonali') { await Account.SetMinMaxPersonali(idapp, mydata.valmin, mydata.valmax, ''); diff --git a/src/server/tools/general.js b/src/server/tools/general.js index dde1476..675a159 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -4960,7 +4960,7 @@ module.exports = { const result = []; text = text.replace(",", "."); - const regex = /^(\d+\.?\d*)\s*(ml|gr|l|kg|uova)\s*$/; // Aggiunto un punto dopo \d+ per accettare anche i numeri con la virgola + const regex = /^(\d+\.?\d*)\s*(ml|gr|g|l|kg|uova)\s*$/; // Aggiunto un punto dopo \d+ per accettare anche i numeri con la virgola const match = regex.exec(text); if (match) { diff --git a/src/server/tools/globalTables.js b/src/server/tools/globalTables.js index 74fd6a8..2f57392 100755 --- a/src/server/tools/globalTables.js +++ b/src/server/tools/globalTables.js @@ -24,6 +24,7 @@ const { Skill } = require('../models/skill'); const { Good } = require('../models/good'); const { SubSkill } = require('../models/subskill'); const { MySkill } = require('../models/myskill'); +const { Attivita } = require('../models/attivita'); const { MyGood } = require('../models/mygood'); const { MyBacheca } = require('../models/mybacheca'); const { MyHosp } = require('../models/myhosp'); @@ -212,6 +213,8 @@ module.exports = { mytable = SubSkill; else if (tablename === shared_consts.TABLES_MYSKILLS) mytable = MySkill; + else if (tablename === shared_consts.TABLES_ATTIVITAS) + mytable = Attivita; else if (tablename === shared_consts.TABLES_MYBACHECAS) mytable = MyBacheca; else if (tablename === shared_consts.TABLES_MYHOSPS) diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 44c9b34..bbaf604 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -149,13 +149,15 @@ module.exports = { TABLES_MYEVENTS: 'myevents', TABLES_CIRCUITS: 'circuits', TABLES_MYGROUPS: 'mygroups', + TABLES_ATTIVITAS: 'attivitas', MYTABS: [{ id: 0, table: 'none' }, { id: 1, table: 'myskills' }, { id: 2, table: 'mybachecas' }, { id: 3, table: 'myhosps' }, { id: 4, table: 'mygoods' }, - { id: 5, table: 'myevents' }], + { id: 5, table: 'myevents' }, + { id: 6, table: 'attivitas' }], CMD_REACTION: { SET_FAVORITE: 1, @@ -172,17 +174,20 @@ module.exports = { numattend: 1, }, - TABLES_ENABLE_GETREC_BYID: ['mybachecas', 'myhosps', 'myskills', 'mygoods'], - TABLES_REACTIONS: ['mybachecas', 'myhosps', 'myskills', 'mygoods'], + // Condivise + TABLES_FAVORITE_BOOKMARK: ['myskills', 'mygoods', 'mybachecas', 'myhosps', 'attivitas'], + // Solo per NODEJS + + TABLES_ENABLE_GETREC_BYID: ['mybachecas', 'myhosps', 'myskills', 'mygoods', 'attivitas'], TABLES_USER_INCLUDE_MY: ['mygroups', 'circuits'], - TABLES_GETCOMPLETEREC: ['myskills', 'mybachecas', 'myhosps', 'mygoods'], - TABLES_INSERT_ALMOST_ONE_TO_ENABLE_CIRCUIT: ['myskills', 'myhosps', 'mygoods'], + TABLES_GETCOMPLETEREC: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'attivitas'], + //++Todo: per abilitare gli utenti ad inserire un Circuito aggiungere 'circuits' alla lista TABLES_PERM_NEWREC TABLES_PERM_NEWREC: ['skills', 'goods', 'subskills', 'mygroups', 'myhosps'], - TABLES_REC_ID: ['skills', 'goods', 'subskills'], - TABLES_FAVORITE_BOOKMARK: ['myskills', 'mygoods', 'mybachecas', 'myhosps'], - + + TABLES_REACTIONS: ['mybachecas', 'myhosps', 'myskills', 'mygoods', 'attivitas'], + TABLES_VISU_STAT_IN_HOME: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'mygroups', 'circuits'], TABLES_ADV_NOTIFICATION: ['myskills', 'myhosps', 'mygoods'], @@ -221,8 +226,8 @@ module.exports = { // 'mygroups' ], TABLES_USER_ID: ['mygroups', 'myskills', 'mybachecas', 'myhosps', 'mygoods'], - TABLES_CREATEDBY: ['mygroups', 'circuits'], - TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots', 'mygroups', 'circuits'], + TABLES_CREATEDBY: ['mygroups', 'circuits', 'attivitas'], + TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots', 'mygroups', 'circuits', 'attivitas'], TABLES_FIELDS_DESCR_AND_CITY_AND_USER: ['myskills', 'mybachecas', 'myhosps', 'mygoods'], @@ -855,6 +860,31 @@ module.exports = { link_maplocation: 1, } + } else if (table === this.TABLES_ATTIVITAS) { + proj = { + recSkill: 1, + sector: 1, + idSector: 1, + idSkill: 1, + idCity: 1, + logo: 1, + photos: 1, + note: 1, + descr: 1, + website: 1, + date_created: 1, + date_updated: 1, + tipodiAttivita: 1, + name: 1, + coordinate_gps: 1, + email: 1, + telegram_username: 1, + cell_phone: 1, + whatsapp: 1, + createdBy: 1, + //**ADDFIELD_ATTIVITA + }; + } else if (table === this.TABLES_MYBACHECAS) { proj = { recSkill: 1,