- fix scelta provincia (il bottone Avanti non veniva disabilitato).

- Se non scelgo la provincia, non deve farmi vedere la App...
This commit is contained in:
Surya Paolo
2024-03-28 20:25:48 +01:00
parent de13c42f8b
commit 970428a359
10 changed files with 3592560 additions and 17 deletions

View File

@@ -1,11 +1,11 @@
DATABASE=test_PiuCheBuono
DATABASE=test_FreePlanet
UDB=paofreeplanet
PDB=mypassword@1A
SEND_EMAIL=0
SEND_EMAIL_ORDERS=1
PORT=3000
appTelegram_TEST=["1","17"]
appTelegram=["1","17"]
appTelegram_TEST=["1","13"]
appTelegram=["1","13"]
DOMAIN=mongodb://localhost:27017/
AUTH_MONGODB=true
MONGODB_USER=admin

3592316
comuni_italia.geojson Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -28,4 +28,6 @@ Sab 04/11 ORE 15:17: 🤖: Da Sùrya (Paolo) undefined (paoloar77):
Sab 02/12 ORE 14:15: 🤖: Da Sùrya (Paolo) undefined (paoloar77):
✅ SuryaArena è stato Abilitato correttamente (da paoloar77)!
Dom 21/01 ORE 19:00: 🤖: Da Sùrya (Paolo) undefined (paoloar77):
👉🏻 indietro
👉🏻 indietro
Gio 28/03 ORE 18:10: 🤖: Da Sùrya (Paolo) undefined (paoloar77):
✅ prova123 è stato Abilitato correttamente (da paoloar77)!

View File

@@ -10,6 +10,8 @@ const tools = require('../tools/general');
const { ObjectID } = require('mongodb');
const fs = require('fs-extra');
const shared_consts = require('../tools/shared_nodejs');
// Resolving error Unknown modifier: $pushAll
@@ -49,6 +51,9 @@ const CitySchema = new Schema({
type: String,
maxlength: 3,
},
geojson: {
type: Object, // Tipo che può contenere le features GeoJSON
},
});
CitySchema.pre('save', async function (next) {
@@ -198,6 +203,73 @@ CitySchema.statics.findAllIdApp = async function (idapp) {
return await City.find(myfind);
};
CitySchema.statics.getGeoJsonByProvince = async function (prov) {
let ris = null;
if (prov)
ris = await City.find({ prov }).lean();
else
ris = await City.find({}).lean();
try {
if (ris) {
const arrjson = ris
.filter(record => record.geojson && typeof record.geojson === 'object' && record.geojson.geometry) // Prima filtra per mantenere solo gli oggetti con "geometry"
.map((record, index) => {
// Crea un nuovo oggetto con gli attributi desiderati da ogni record
const newRecord = {
...record.geojson, // Spread dell'oggetto geojson per prendere tutte le sue proprietà
id: (index + 1).toString(), // Aggiunge un valore "id" incrementale in base all'indice
};
// Aggiungi o aggiorna la proprietà "prov" in "properties" dentro l'oggetto geojson
if (newRecord.properties) {
newRecord.properties.prov = record.prov; // Se "properties" esiste già
} else {
newRecord.properties = { prov: record.prov }; // Crea "properties" se non esiste
}
return newRecord;
});
return arrjson;
}
return [];
} catch (e) {
console.error('Err', e);
}
return null
};
CitySchema.statics.insertGeojsonToMongoDB = async function (nomefilejson) {
try {
// Lettura del file GeoJSON
const geojson = await fs.readJson(nomefilejson); // Sostituisci con il percorso del tuo file GeoJSON
let inseriti = 0;
const numcomuni = geojson.features.length;
for (const citta of geojson.features) {
// Identifica il documento esistente in cui vuoi aggiungere le features
const reccity = await City.findOne({ istat: String(citta.properties.ISTAT).padStart(6, '0') });
if (reccity) {
const ris = await City.updateOne({ _id: reccity._id }, { $set: { geojson: citta } });
if (ris.ok === 1) {
inseriti++;
}
}
}
console.log(`${inseriti} su ${numcomuni} comuni inseriti.`);
} catch (e) {
console.error('Err', e);
}
};
const City = mongoose.model('City', CitySchema);

127
src/server/router/city_router.js Executable file
View File

@@ -0,0 +1,127 @@
const shared_consts = require('../tools/shared_nodejs');
const express = require('express');
const router = express.Router();
const tools = require('../tools/general');
var server_constants = require('../tools/server_constants');
var { Project } = require('../models/project');
var { authenticate, auth_default } = require('../middleware/authenticate');
var mongoose = require('mongoose').set('debug', false)
const Subscription = require('../models/subscribers');
const _ = require('lodash');
const { ObjectID } = require('mongodb');
const { City } = require('../models/city');
//POST
router.post('/geojson', authenticate, function (req, res, next) {
let prov = req.body.prov;
// let idapp = req.body.idapp;
return City.getGeoJsonByProvince(prov)
.then((ris) => {
if (ris)
return res.send({ code: server_constants.RIS_CODE_OK, ris });
}).catch(err => {
console.log('ERR:', err);
res.status(400).send();
});
});
router.post('/updateord', authenticate, async (req, res) => {
const idOrdersCart = req.body.idOrdersCart;
const idOrder = req.body.idOrder;
const paramstoupdate = req.body.paramstoupdate;
try {
// Aggiorno l'Ordine Singolo
await Order.updateOrderByParams(idOrder, paramstoupdate);
// Aggiorno il Totale degli Ordini (OrdersCart)
await OrdersCart.updateOrdersCartTotals(idOrdersCart, true)
.then((orderscart) => {
return res.send({ code: server_constants.RIS_CODE_OK, orderscart });
}).catch(err => {
console.log('ERR:', err);
res.status(400).send();
});
} catch (e) {
console.error('Err', e);
}
});
router.post('/update', authenticate, async (req, res) => {
let orderscart = null;
const idOrdersCart = req.body.idOrdersCart;
const paramstoupdate = req.body.paramstoupdate;
try {
// Aggiorno Orderscart con i parametri passati
orderscart = await OrdersCart.updateOrdersCartByParams(idOrdersCart, paramstoupdate);
let updatetotals = true;
if (paramstoupdate && paramstoupdate.hasOwnProperty('totalPrice')) {
updatetotals = false;
}
if (updatetotals) {
// Aggiorno il Totale degli Ordini (OrdersCart)
await OrdersCart.updateOrdersCartTotals(idOrdersCart, true)
.then((orderscart) => {
return res.send({ code: server_constants.RIS_CODE_OK, orderscart });
}).catch(err => {
console.log('ERR:', err);
res.status(400).send();
});
} else {
return res.send({ code: server_constants.RIS_CODE_OK, orderscart });
}
} catch (e) {
console.error('Err', e);
}
});
router.post('/sendmail', authenticate, async function (req, res, next) {
const idOrdersCart = req.body.idOrdersCart;
const idapp = req.body.idapp;
const test = req.body.test;
const previewonly = req.body.previewonly;
const templemail_id = req.body.templemail_id;
try {
// Invia Email
let myOrderCart = await OrdersCart.getOrdersCartById(idOrdersCart);
if (myOrderCart) {
const userto = myOrderCart.user;
let emailto = userto.email;
if (userto && emailto) {
const emailsend = await sendemail.sendEmail_byTemplate(idapp, userto, previewonly, emailto, templemail_id, test);
return res.send({ code: server_constants.RIS_CODE_OK, emailsend });
}
}
return res.send({ code: server_constants.RIS_CODE_OK, emailsend: false });
} catch (e) {
console.error('err:', e);
res.status(400).send(e);
}
});
module.exports = router;

View File

@@ -186,7 +186,7 @@ router.post(process.env.LINK_REQUEST_NEWPASSWORD, async (req, res) => {
// Check if too many requests
if (await User.tooManyReqPassword(idapp, email, true)) {
let text = 'Troppe richieste di Password: ' + email;
telegrambot.sendMsgTelegramToTheManagers(idapp, text, true);
telegrambot.sendMsgTelegramToTheManagers(idapp, text);
console.log(process.env.LINK_REQUEST_NEWPASSWORD, text, email);
res.status(400).send({ code: server_constants.RIS_CODE_ERR, msg: text });
return false;
@@ -854,12 +854,12 @@ router.patch('/chval', authenticate, async (req, res) => {
// If I change my record...
if ((
(!User.isAdmin(req.user.perm)
&& !User.isManager(req.user.perm)
&& !User.isEditor(req.user.perm)
&& !User.isFacilitatore(req.user.perm))
&& !User.isManager(req.user.perm)
&& !User.isEditor(req.user.perm)
&& !User.isFacilitatore(req.user.perm))
&& (!tools.ModificheConsentite(req, mydata.table, fieldsvalue, id)))
&& !((mydata.table === 'accounts')
&& await Account.canEditAccountAdmins(req.user.username, mydata.id))
&& !((mydata.table === 'accounts')
&& await Account.canEditAccountAdmins(req.user.username, mydata.id))
) {
// If without permissions, exit
return res.status(404).
@@ -1232,7 +1232,7 @@ router.delete('/delrec/:table/:id', authenticate, async (req, res) => {
// let notifBot = false;
// const idapp = req.body.idapp;
console.log('id', id, 'table', tablename);
console.log('delete RECORD: id', id, 'table', tablename);
const mytable = globalTables.getTableByTableName(tablename);
@@ -1251,17 +1251,30 @@ router.delete('/delrec/:table/:id', authenticate, async (req, res) => {
//++Tools: Notify...
tools.NotifyIfDelRecord(tablename);
if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) {
// if (!User.isAdmin(req.user.perm) && !User.isManager(req.user.perm)) {
if (true) {
if (tablename === 'users') {
let fieldsvalue = {
deleted: true,
date_deleted: new Date(),
};
const utente = await mytable.findById(id);
await mytable.findByIdAndUpdate(id, { $set: fieldsvalue });
if (utente) {
idapp = utente.idapp;
await mytable.findByIdAndUpdate(id, { $set: fieldsvalue });
// ...
let text = `L\'utente ${utente.username} (${utente.name} ${utente.surname}) si è cancellato dal sito ` + tools.getNomeAppByIdApp(utente.idapp) + ` Deleted = true`;
telegrambot.sendMsgTelegramToTheManagers(idapp, text);
}
cancellato = true;
return res.send({ code: server_constants.RIS_CODE_OK, msg: '' });
}
}
@@ -1478,7 +1491,6 @@ function load(req, res, version) {
let site = Site.findAllIdApp(idapp);
let mygroups = MyGroup.findAllGroups(idapp);
let listcircuits = Circuit.findAllIdApp(idapp);
// let cities = City.findAllIdApp(idapp);
let provinces = Province.findAllIdApp(idapp);
let cart = null;
let orderscart = null;
@@ -1535,7 +1547,6 @@ function load(req, res, version) {
myuserextra, // 26
sectors, // 27
statusSkills, //28
// cities,
provinces,
catgrps,
adtypes,

View File

@@ -47,6 +47,7 @@ const TypedError = require('../modules/ErrorHandler');
const { MyGroup } = require('../models/mygroup');
const { Circuit } = require('../models/circuit');
const { Province } = require('../models/province');
const { City } = require('../models/city');
const { Account } = require('../models/account');
const mongoose = require('mongoose').set('debug', false);
@@ -1306,6 +1307,8 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) {
await Circuit.CheckTransazioniCircuiti(true);
} else if (mydata.dbop === 'UpdateCoordProv') {
await Province.setCoordinatesOnDB();
} else if (mydata.dbop === 'insertGeojsonToMongoDB') {
await City.insertGeojsonToMongoDB('comuni_italia.geojson');
} else if (mydata.dbop === 'AbilitaNewsletterALL') {
await User.updateMany({
$or: [

View File

@@ -126,6 +126,7 @@ myLoad().then(ris => {
const products_router = require('./router/products_router');
const cart_router = require('./router/cart_router');
const orders_router = require('./router/orders_router');
const city_router = require('./router/city_router');
const myskills_router = require('./router/myskills_router');
const mygoods_router = require('./router/mygoods_router');
const mygen_router = require('./router/mygen_router');
@@ -194,6 +195,7 @@ myLoad().then(ris => {
app.use('/products', products_router);
app.use('/cart', cart_router);
app.use('/orders', orders_router);
app.use('/city', city_router);
app.use('/myskills', myskills_router);
app.use('/mygoods', mygoods_router);
app.use('/mygen', mygen_router);

View File

@@ -1437,8 +1437,7 @@ async function local_sendMsgTelegramToTheManagers(
if (username_bo)
username = username_bo;
text = emo.ROBOT_FACE + ': Da ' + msg.chat.first_name + ' ' +
msg.chat.last_name + ' (' + username + '): \n' + text;
text = emo.ROBOT_FACE + ': Da ' + tools.getNomeCognomeTelegram(msg) + ' (' + username + '): \n' + text;
tools.writeEventsLog(text);
if (usersmanagers) {

View File

@@ -3750,6 +3750,16 @@ module.exports = {
}
},
getNomeCognomeTelegram(msg) {
if (msg && msg.chat) {
let nomecognome = msg.chat.first_name ? msg.chat.first_name : '';
nomecognome += msg.chat.last_name ? ' ' + msg.chat.last_name : '';
return nomecognome;
}
return '';
},
extractNameAndSurnameByComplete(name_complete) {
const suffissoCognome = ['Del', 'La', 'De', 'Lo'];
@@ -4966,4 +4976,5 @@ module.exports = {
}
},
// Scriviere qui SOPRA le funzioni
};