- aggiornamento cataloghi.
possibilità di estrapolare i dati da GM direttamente - migrazione delle tabelle di GM in locale - corretto l'ordinamento del Catalogo
This commit is contained in:
@@ -6,9 +6,15 @@ const tools = require('../tools/general');
|
||||
|
||||
const axios = require('axios');
|
||||
|
||||
const T_Web_Articoli = require('../models/t_web_articoli');
|
||||
const T_Web_StatiProdotto = require('../models/t_web_statiprodotto');
|
||||
const T_Web_TipiFormato = require('../models/t_web_tipiformato');
|
||||
|
||||
const SERVER_A_URL = process.env.SERVER_A_URL || "http://IP_DI_SERVER_A:3000";
|
||||
const API_KEY = process.env.API_KEY_MSSQL;
|
||||
|
||||
const mongoose = require('mongoose').set('debug', false);
|
||||
|
||||
// Funzione per ottenere i dati
|
||||
const getArticlesSales = async () => {
|
||||
try {
|
||||
@@ -74,7 +80,7 @@ exports.exportArticlesSalesByJSON = async (req, res) => {
|
||||
exports.getTableContent = async (options) => {
|
||||
try {
|
||||
// Chiama getTableContent, se ritorna errore hangup, allora attendi 2 secondi e poi richiamala.
|
||||
const tableContent = await getTableContentBase(options);
|
||||
const tableContent = await this.getTableContentBase(options);
|
||||
return tableContent;
|
||||
} catch (error) {
|
||||
console.error('Error: ', error);
|
||||
@@ -89,7 +95,7 @@ exports.getTableContent = async (options) => {
|
||||
};
|
||||
|
||||
|
||||
const formatDate = (dateValue) => {
|
||||
exports.formatDate = (dateValue) => {
|
||||
const date = new Date(dateValue);
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
@@ -97,7 +103,20 @@ const formatDate = (dateValue) => {
|
||||
return `${day}/${month}/${year}`;
|
||||
};
|
||||
|
||||
const getTableContentBase = async (options) => {
|
||||
exports.getModelByNameTable = (nameTable) => {
|
||||
switch (nameTable) {
|
||||
case 'T_Web_Articoli':
|
||||
return T_Web_Articoli;
|
||||
case 'T_Web_StatiProdotto':
|
||||
return T_Web_StatiProdotto;
|
||||
case 'T_Web_TipiFormato':
|
||||
return T_Web_TipiFormato;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
exports.getTableContentBase = async (options) => {
|
||||
try {
|
||||
// Verifica se la tabella esiste
|
||||
const checkTableQuery = `SELECT COUNT(*) as tableExists FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '${options.nameTable}'`;
|
||||
@@ -129,14 +148,58 @@ const getTableContentBase = async (options) => {
|
||||
// Costruisce la query per recuperare i record
|
||||
let dataQuery = "";
|
||||
|
||||
let columnsToShow = 'T.*';
|
||||
if (options.fieldGM) {
|
||||
columnsToShow = 'T.' + options.fieldGM;
|
||||
}
|
||||
let records = [];
|
||||
|
||||
if (options.nameTable.toLowerCase() === 't_web_articoli') {
|
||||
if (true) {
|
||||
dataQuery = `
|
||||
if (options?.usaDBGMLocale) {
|
||||
|
||||
// Cerca il modello corrispondente alla tabella se esiste
|
||||
let mymodel = this.getModelByNameTable(options.nameTable);
|
||||
if (!mymodel) {
|
||||
// fai una query sul db locale mongodb dela tabella chiamata "options.nameTable"
|
||||
mymodel = mongoose.model(options.nameTable, new mongoose.Schema({}, { strict: false }));
|
||||
if (!mymodel)
|
||||
return `Il modello per la tabella '${options.nameTable}' non esiste.`;
|
||||
}
|
||||
|
||||
if (options.aggregation) {
|
||||
records = await mymodel.aggregate(options.aggregation);
|
||||
} else {
|
||||
const pipeline = [];
|
||||
|
||||
// Filtro base se specificato
|
||||
if (options.where) {
|
||||
const whereConditions = options.where;
|
||||
pipeline.push({ $match: whereConditions });
|
||||
}
|
||||
|
||||
if (options.sort) {
|
||||
pipeline.push({ $sort: options.sort });
|
||||
}
|
||||
|
||||
if (options.limit) {
|
||||
pipeline.push({ $limit: options.limit });
|
||||
}
|
||||
|
||||
// Selezione dei campi
|
||||
if (options.fieldGM) {
|
||||
pipeline.push({ $project: { [options.fieldGM]: 1 } });
|
||||
}
|
||||
|
||||
records = await mymodel.aggregate(pipeline);
|
||||
}
|
||||
|
||||
console.log('results', records[0]);
|
||||
|
||||
} else {
|
||||
|
||||
let columnsToShow = 'T.*';
|
||||
if (options.fieldGM) {
|
||||
columnsToShow = 'T.' + options.fieldGM;
|
||||
}
|
||||
|
||||
if (options.nameTable.toLowerCase() === 't_web_articoli') {
|
||||
if (true) {
|
||||
dataQuery = `
|
||||
SELECT TOP ${options.numrec || 10000}
|
||||
${columnsToShow}
|
||||
` + (options.campispeciali ? `
|
||||
@@ -147,14 +210,14 @@ const getTableContentBase = async (options) => {
|
||||
,z.AutoriCompleti
|
||||
,i2.DescrArgomento
|
||||
,z3.CasaEditrice` : ``) + (options.showQtaDisponibile ? ` ,q.QtaDisponibile ` : ``) +
|
||||
` FROM T_WEB_Articoli T
|
||||
` FROM T_WEB_Articoli T
|
||||
JOIN(
|
||||
SELECT IdArticolo, MAX(DataOra) AS data
|
||||
FROM T_WEB_Articoli
|
||||
GROUP BY IdArticolo
|
||||
) b ON T.IdArticolo = b.IdArticolo AND T.DataOra = b.data `
|
||||
+ (options.campispeciali ?
|
||||
` LEFT JOIN(
|
||||
+ (options.campispeciali ?
|
||||
` LEFT JOIN(
|
||||
SELECT e.IdStatoProdotto, e.Descrizione as DescrizioneStatoProdotto
|
||||
FROM T_WEB_StatiProdotto e
|
||||
JOIN(
|
||||
@@ -234,9 +297,9 @@ const getTableContentBase = async (options) => {
|
||||
GROUP BY IdMarchioEditoriale
|
||||
) aa3 ON a3.IdMarchioEditoriale = aa3.IdMarchioEditoriale AND a3.DataOra = aa3.maxData
|
||||
) z3 ON T.IdMarchioEditoriale = z3.IdMarchioEditoriale `
|
||||
: ``)
|
||||
+ (options.showQtaDisponibile ?
|
||||
` LEFT JOIN(
|
||||
: ``)
|
||||
+ (options.showQtaDisponibile ?
|
||||
` LEFT JOIN(
|
||||
SELECT o.Codice, o.QtaDisponibile
|
||||
FROM T_WEB_Disponibile o
|
||||
JOIN(
|
||||
@@ -245,8 +308,8 @@ const getTableContentBase = async (options) => {
|
||||
GROUP BY Codice
|
||||
) p ON o.Codice = p.Codice AND o.DataOra = p.data1
|
||||
) q ON T.IdArticolo = q.Codice` : ``)
|
||||
} else {
|
||||
dataQuery += `
|
||||
} else {
|
||||
dataQuery += `
|
||||
SELECT TOP ${options.numrec}
|
||||
T.*
|
||||
FROM T_WEB_Articoli T
|
||||
@@ -256,24 +319,27 @@ const getTableContentBase = async (options) => {
|
||||
GROUP BY IdArticolo
|
||||
) b ON T.IdArticolo = b.IdArticolo AND T.DataOra = b.data
|
||||
`;
|
||||
}
|
||||
} else {
|
||||
dataQuery = `SELECT TOP ${options.numrec || 10000} * FROM ${options.nameTable} `;
|
||||
}
|
||||
} else {
|
||||
dataQuery = `SELECT TOP ${options.numrec || 10000} * FROM ${options.nameTable} `;
|
||||
}
|
||||
if (options.where && options.where.trim() !== "") {
|
||||
dataQuery += ` WHERE ${options.where} `;
|
||||
if (options.where && options.where.trim() !== "") {
|
||||
dataQuery += ` WHERE ${options.where} `;
|
||||
}
|
||||
|
||||
console.log('dataQuery', dataQuery);
|
||||
|
||||
// Esegue la query per recuperare i dati
|
||||
// console.log('dataQuery', dataQuery);
|
||||
const dataResponse = await axios.post(SERVER_A_URL + '/query', { query: dataQuery }, {
|
||||
headers: { 'x-api-key': API_KEY }
|
||||
});
|
||||
|
||||
records = dataResponse?.data;
|
||||
}
|
||||
|
||||
console.log('dataQuery', dataQuery);
|
||||
|
||||
// Esegue la query per recuperare i dati
|
||||
// console.log('dataQuery', dataQuery);
|
||||
const dataResponse = await axios.post(SERVER_A_URL + '/query', { query: dataQuery }, {
|
||||
headers: { 'x-api-key': API_KEY }
|
||||
});
|
||||
const records = dataResponse?.data;
|
||||
if (!records || records.length === 0) {
|
||||
return `Nessun record trovato nella tabella '${options.nameTable}'.`;
|
||||
return [];
|
||||
}
|
||||
|
||||
// Determina quali colonne visualizzare.
|
||||
@@ -296,13 +362,13 @@ const getTableContentBase = async (options) => {
|
||||
.map(item => {
|
||||
const trimmed = item.trim();
|
||||
const parsed = Date.parse(trimmed);
|
||||
return !isNaN(parsed) ? formatDate(trimmed) : trimmed;
|
||||
return !isNaN(parsed) ? this.formatDate(trimmed) : trimmed;
|
||||
})
|
||||
.join(', ');
|
||||
} else {
|
||||
const parsed = Date.parse(value);
|
||||
if (!isNaN(parsed)) {
|
||||
value = formatDate(value);
|
||||
value = this.formatDate(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -382,7 +448,7 @@ const getTableContentBase = async (options) => {
|
||||
} else if (type === 'boolean') {
|
||||
myrec[column] = value;
|
||||
} else if (value instanceof Date) {
|
||||
myrec[column] = formatDate(value);
|
||||
myrec[column] = this.formatDate(value);
|
||||
} else {
|
||||
myrec[column] = `${getDisplayValue(record, column)}`.trim();
|
||||
}
|
||||
@@ -808,20 +874,59 @@ exports.saveTable = async (req, res) => {
|
||||
}
|
||||
};
|
||||
|
||||
exports.updateAllBook = async (req, res) => {
|
||||
exports.mssqlmigrateTables = async (req) => {
|
||||
const MssqlMigrator = require('../modules/MssqlMigrator'); // Importa la classe Macro
|
||||
|
||||
try {
|
||||
const options = req.body.options;
|
||||
let listaTabelle = [];
|
||||
|
||||
if (options?.tutte) {
|
||||
// const listaTabelle = ['T_WEB_StatiProdotto'];
|
||||
listaTabelle = ['T_WEB_TitoliOriginali', 'T_WEB_TestateOrdini', 'T_WEB_Ordini', 'T_WEB_Disponibile', 'T_WOO_TestateOrdini', 'T_WOO_Ordini', 'T_WEB_Articoli',
|
||||
'T_WEB_Argomenti', 'T_WEB_Autori', 'T_WEB_Collane', 'T_WEB_MarchiEditoriali', 'T_WEB_StatiProdotto', 'T_WEB_TipiFormato', 'T_WEB_Tipologie', 'T_WEB_ArticoliFatturati', 'T_WEB_IdInternetFatturati',
|
||||
'T_WEB_Edizioni', 'T_WEB_Contratti'];
|
||||
} else {
|
||||
listaTabelle = ['T_WEB_Articoli', 'T_WEB_ArticoliFatturati'];
|
||||
}
|
||||
|
||||
const migrator = new MssqlMigrator();
|
||||
return await migrator.migrateTables(listaTabelle);
|
||||
|
||||
} catch (e) {
|
||||
console.error(e.message);
|
||||
return 'Errore: ' + e.message
|
||||
}
|
||||
|
||||
};
|
||||
exports.updateAllBook = async (idapp, options) => {
|
||||
|
||||
const Macro = require('../modules/Macro'); // Importa la classe Macro
|
||||
|
||||
try {
|
||||
const idapp = req.body.idapp;
|
||||
const options = req.body.options;
|
||||
const macro = new Macro(idapp); // Crea un'istanza della classe Macro
|
||||
|
||||
const result = await macro.updateLocalDbFromGM_T_Web_Articoli(options);
|
||||
return await macro.updateLocalDbFromGM_T_Web_Articoli(options);
|
||||
|
||||
return res.status(200).send({ data: result });
|
||||
} catch (e) {
|
||||
console.error(e.message);
|
||||
return res.status(400).send(e);
|
||||
throw e;
|
||||
}
|
||||
};
|
||||
|
||||
exports.updateAllBookRoute = async (req, res) => {
|
||||
|
||||
try {
|
||||
const idapp = req.body.idapp;
|
||||
const options = req.body.options;
|
||||
const result = this.updateAllBook(idapp, options);
|
||||
|
||||
return res.status(200).send({ data: result });
|
||||
|
||||
} catch (e) {
|
||||
console.error(e.message);
|
||||
if (res) {
|
||||
return res.status(400).send(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user