- newsletter: prende la lista utenti (flag news_on)

- Abilita a Tutti la Newsletter news_on
- isCommerciale
- JobsInProgress
- PCB: Corretto Totali che era a zero
This commit is contained in:
Surya Paolo
2025-05-06 18:19:09 +02:00
parent 6e8d1fcff1
commit b77a0579f1
30 changed files with 4669 additions and 727 deletions

View File

@@ -354,13 +354,14 @@ router.post('/settable', authenticate, async (req, res) => {
try {
if (User.isAdmin(req.user.perm) || User.isManager(req.user.perm) ||
User.isEditor(req.user.perm) || User.isFacilitatore(req.user.perm)) {
User.isEditor(req.user.perm) || User.isCommerciale(req.user.perm) || User.isFacilitatore(req.user.perm)) {
consentito = true;
}
if ((!User.isAdmin(req.user.perm)
&& !User.isManager(req.user.perm)
&& !User.isEditor(req.user.perm)
&& !User.isCommerciale(req.user.perm)
&& !User.isGrafico(req.user.perm)
&& !User.isFacilitatore(req.user.perm))
&&
@@ -1065,7 +1066,7 @@ async function importPage(req, idapp, jsonString) {
const table = globalTables.getTableByTableName(tableName);
if (tableName === 'mypages') {
if (User.isEditor(req.user.perm)) {
if (User.isEditor(req.user.perm) || User.isCommerciale(req.user.perm)) {
for (const page of myexp.mypages) {
const { ImportedRecords, newId } = await upsertRecord(table, page, idapp);
if (!newIdPage && newId) {
@@ -1095,7 +1096,7 @@ async function importPage(req, idapp, jsonString) {
const table = globalTables.getTableByTableName(tableName);
if (tableName === 'myelems') {
if (User.isEditor(req.user.perm)) {
if (User.isEditor(req.user.perm) || User.isCommerciale(req.user.perm)) {
for (const elem of myexp.myelems) {
const { ImportedRecords, newId } = await upsertRecord(table, elem, idapp, newIdPage);
ImportedRecordstemp += ImportedRecords ? 1 : 0;
@@ -1258,6 +1259,7 @@ router.patch('/chval', authenticate, async (req, res) => {
(!User.isAdmin(req.user.perm)
&& !User.isManager(req.user.perm)
&& !User.isEditor(req.user.perm)
&& !User.isCommerciale(req.user.perm)
&& !User.isFacilitatore(req.user.perm))
&& (await !tools.ModificheConsentite(req, mydata.table, fieldsvalue, id)))
&& !((mydata.table === 'accounts')
@@ -1620,7 +1622,7 @@ router.get('/copyfromapptoapp/:idapporig/:idappdest', async (req, res) => {
if (!idapporig || !idappdest || (idcode !== 'ASD3429Kjgà#@cvX'))
res.status(400).send();
const mytablesstr = ['settings', 'users', 'templemail'];
const mytablesstr = ['settings', 'users', 'templemail', 'destnewsletter'];
try {
let numrectot = 0;
@@ -1908,7 +1910,7 @@ async function measurePromises(promises) {
// Ordina le chiamate per tempo decrescente e prende le 10 più lente
const slowCalls = Object.entries(timings)
.sort(([, timeA], [, timeB]) => timeB - timeA)
.slice(0, 5)
.slice(0, 10)
.map(([key, time]) => ({ key, time }));
return { data, totalTime, slowCalls };
@@ -2007,10 +2009,12 @@ async function load(req, res, version = '0') {
providers: version >= 91 ? Provider.findAllIdApp(idapp) : Promise.resolve([]),
scontisticas: version >= 91 ? Scontistica.findAllIdApp(idapp) : Promise.resolve([]),
gasordines: version >= 91 ? Gasordine.findAllIdApp(idapp) : Promise.resolve([]),
products: version >= 91
/*products: version >= 91
? Product.findAllIdApp(idapp, undefined, undefined, req.user ? User.isManager(req.user.perm) : false)
: Promise.resolve([]),
productInfos: version >= 91 ? ProductInfo.findAllIdApp(idapp) : Promise.resolve([]),
: Promise.resolve([]),*/
products: Promise.resolve([]),
// productInfos: version >= 91 ? ProductInfo.findAllIdApp(idapp) : Promise.resolve([]),
productInfos: Promise.resolve([]),
catprods: version >= 91 ? Product.getArrCatProds(idapp, shared_consts.PROD.BOTTEGA) : Promise.resolve([]),
subcatprods: version >= 91 ? SubCatProd.findAllIdApp(idapp) : Promise.resolve([]),
catprods_gas: version >= 91 ? Product.getArrCatProds(idapp, shared_consts.PROD.GAS) : Promise.resolve([]),
@@ -2040,8 +2044,8 @@ async function load(req, res, version = '0') {
const { data, totalTime, slowCalls } = await measurePromises(promises);
// console.log('Risultati delle promise:', data);
// console.log('Tempo totale di esecuzione:', totalTime, 'secondi');
// console.log('Le 5 chiamate più lente:', slowCalls);
console.log('Tempo di esecuzione:', totalTime, 'secondi');
//console.log('Le 10 chiamate più lente:', slowCalls);
// Aggiornamento delle informazioni dell'utente, se presente
let myuser = req.user;

View File

@@ -10,6 +10,7 @@ const { User } = require('../models/user');
const { MailingList } = require('../models/mailinglist');
const { Newstosent } = require('../models/newstosent');
const { TemplEmail } = require('../models/templemail');
const { DestNewsletter } = require('../models/destnewsletter');
const { OpzEmail } = require('../models/opzemail');
const { Settings } = require('../models/settings');
@@ -254,12 +255,21 @@ router.post('/load', authenticate, async (req, res) => {
idapp = req.body.idapp;
locale = req.body.locale;
const ris = {
newsstate: await getDataNewsletter(locale, idapp),
serv_settings: await Settings.findAllIdApp(idapp, true, false),
templemail: await TemplEmail.findAllIdApp(idapp, true),
opzemail: await OpzEmail.findAllIdApp(idapp)
};
let ris;
try {
ris = {
newsstate: await getDataNewsletter(locale, idapp),
serv_settings: await Settings.findAllIdApp(idapp, true, false),
templemail: await TemplEmail.findAllIdApp(idapp, true),
destnewsletter: await DestNewsletter.findAllIdApp(idapp, true),
opzemail: await OpzEmail.findAllIdApp(idapp)
};
} catch (e) {
console.error('Errore load newsletter: ', e);
ris = { code: server_constants.RIS_CODE_ERR, msg: e.message };
}
return res.send(ris);
});
@@ -275,12 +285,19 @@ router.post('/setactivate', authenticate, async (req, res) => {
activate,
};
return await Newstosent.findOneAndUpdate({ _id: id }, { $set: rec }, { new: false }).then((item) => {
const ris = getDataNewsletter(locale, idapp);
try {
const item = await Newstosent.findOneAndUpdate({ _id: id }, { $set: rec }, { new: false });
return res.send(ris);
if (item) {
const ris = await getDataNewsletter(locale, idapp);
return res.send(ris);
} else {
return res.status(400).send({ code: server_constants.RIS_CODE_ERR, msg: 'Record not found' });
}
});
} catch (e) {
return res.status(400).send({ code: server_constants.RIS_CODE_ERR, msg: e.message });
}
});
@@ -296,7 +313,7 @@ router.post('/unsubscribe_user', async (req, res) => {
if (myuser) {
const hashcalc = tools.getHash(myuser.email + myuser.username);
if (hashcalc === hashemail) {
if (hashcalc === hashemail) {
await User.setNewsletter(idapp, myuser.username, false);
return res.send({
@@ -329,28 +346,37 @@ router.post('/unsubscribe', (req, res) => {
console.log('Remove_from_MailingList -> ', ris);
if (!!ris.myperson && mailchimpactive) {
const subscriber_md5_email = tools.getmd5(ris.myperson.email);
request
.put('https://' + newsletter[idapp].mailchimpInstance + '.api.mailchimp.com/3.0/lists/' + newsletter[idapp].listUniqueId + '/members/' + subscriber_md5_email)
.set('Content-Type', 'application/json;charset=utf-8')
.set('Authorization', 'Basic ' + new Buffer('any:' + newsletter[idapp].mailchimpApiKey).toString('base64'))
.send({
'email_address': ris.myperson.email,
'status': server_constants.RIS_UNSUBSCRIBED_STR
})
.end(function (err, response) {
console.log("STAT", response.status);
try {
const subscriber_md5_email = tools.getmd5(ris.myperson.email);
request
.put('https://' + newsletter[idapp].mailchimpInstance + '.api.mailchimp.com/3.0/lists/' + newsletter[idapp].listUniqueId + '/members/' + subscriber_md5_email)
.set('Content-Type', 'application/json;charset=utf-8')
.set('Authorization', 'Basic ' + new Buffer('any:' + newsletter[idapp].mailchimpApiKey).toString('base64'))
.send({
'email_address': ris.myperson.email,
'status': server_constants.RIS_UNSUBSCRIBED_STR
})
.end(function (err, response) {
console.log("STAT", response.status);
if (response.status < 300 || (response.status === 400 && response.body.title === "Member Exists")) {
res.send({
code: server_constants.RIS_UNSUBSCRIBED_OK
});
} else {
res.send({
code: server_constants.RIS_SUBSCRIBED_ERR
});
}
if (response.status < 300 || (response.status === 400 && response.body.title === "Member Exists")) {
res.send({
code: server_constants.RIS_UNSUBSCRIBED_OK
});
} else {
res.send({
code: server_constants.RIS_SUBSCRIBED_ERR
});
}
});
} catch (e) {
console.error('Errore unsubscribe -> ', e);
res.send({
code: server_constants.RIS_SUBSCRIBED_ERR,
msg: e.message
});
}
} else {
res.send({ code: ris.code, msg: ris.msg });

View File

@@ -54,6 +54,7 @@ const { Account } = require('../models/account');
const mongoose = require('mongoose').set('debug', false);
const Subscription = require('../models/subscribers');
const Macro = require('../modules/Macro');
async function existSubScribe(userId, access, browser) {
try {
@@ -1074,6 +1075,17 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) {
await CatProd.deleteMany({ idapp });
await SubCatProd.deleteMany({ idapp });
} else if (mydata.dbop === 'removeProductInfoWithoutDateUpdatedFromGM') {
mystr = await ProductInfo.removeProductInfoWithoutDateUpdatedFromGM(idapp);
ris = { mystr };
} else if (mydata.dbop === 'StatMacro') {
const macro = new Macro(idapp, {});
mystr = await macro.getStat();
ris = { mystr };
} else if (mydata.dbop === 'updateAllBook') {
// chiama updateAllBook
const { updateAllBook } = require("../controllers/articleController");
@@ -1203,6 +1215,7 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) {
'settings',
'users',
'templemail',
'destnewsletter',
'contribtypes',
'bots',
'cfgservers'];
@@ -1255,6 +1268,9 @@ async function eseguiDbOp(idapp, mydata, locale, req, res) {
} else if (mydata.dbop === 'listCollectionsBySize') {
mystr = await tools.listCollectionsBySize();
ris = { mystr };
} else if (mydata.dbop === 'EnableNewsOn_ToAll') {
mystr = await User.setNewsletterToAll(idapp);
} else if (mydata.dbop === 'MyElemSetIdPageInsteadThePah') {
mystr = await MyElem.SetIdPageInsteadThePah(idapp);
ris = { mystr };