- 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:
Surya Paolo
2025-04-18 13:23:52 +02:00
parent 14375d6b15
commit 6d0efaadb9
16 changed files with 452 additions and 73 deletions

View File

@@ -0,0 +1,36 @@
.results-container {
border: 2px solid #4CAF50;
/* Colore del bordo */
border-radius: 10px;
/* Angoli arrotondati */
padding: 20px;
/* Spaziatura interna */
background-color: #f9f9f9;
/* Colore di sfondo */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
/* Ombra */
margin: 20px 0;
/* Margine sopra e sotto */
}
.results-title {
color: #333;
/* Colore del testo */
font-family: Arial, sans-serif;
/* Tipo di font */
margin-bottom: 15px;
/* Spaziatura sotto il titolo */
font-size: 24px;
/* Dimensione del font */
}
.results-content {
color: #555;
/* Colore del testo dei risultati */
font-family: Arial, sans-serif;
/* Tipo di font */
font-size: 18px;
/* Dimensione del font */
white-space: pre-wrap;
/* Mantiene gli spazi e le interruzioni di riga */
}

View File

@@ -0,0 +1,131 @@
import { defineComponent, ref } from 'vue'
import { CTitleBanner } from '../../../components/CTitleBanner'
import { CDateTime } from '../../../components/CDateTime'
import { CMyFieldDb } from '../../../components/CMyFieldDb'
import { useQuasar } from 'quasar'
import { useI18n } from 'vue-i18n'
import { useUserStore } from '@store/UserStore'
import { useGlobalStore } from '@store/globalStore'
import { useCircuitStore } from '@store/CircuitStore'
import { tools } from '@tools'
import { costanti } from '@costanti'
import { shared_consts } from '@src/common/shared_vuejs'
import type { IOptQueryGM } from '@src/model'
export default defineComponent({
name: 'dbopmacro',
components: { CTitleBanner, CDateTime, CMyFieldDb },
props: {},
setup() {
const $q = useQuasar()
const { t } = useI18n()
const circuitStore = useCircuitStore()
const ris = ref('')
const riga = ref(0)
const numpersone = ref(7)
const date_start = ref(new Date())
const col = ref(0)
const placca = ref('')
const valmin = ref(200)
const circuitId = ref('')
const valmax = ref(400)
const defmin = ref(shared_consts.CIRCUIT_PARAMS.SCOPERTO_MIN_GRP)
const defmax = ref(shared_consts.CIRCUIT_PARAMS.SCOPERTO_MAX_GRP)
const defpersmin = ref(100)
const defpersmax = ref(200)
const search_username = ref('')
const search = ref('')
const replace_username = ref('')
const risultato = ref('')
const risultatoHTML = ref('')
const incaricamento = ref(false)
const globalStore = useGlobalStore()
function EseguiFunz(miafunz: string, options?: any, search_username?: string, replace_username?: string, valmin?: number, valmax?: number, circuitId?: string) {
const userStore = useUserStore()
$q.dialog({
message: t('dialog.continue') + ' ' + miafunz + ' ?',
ok: {
label: t('dialog.yes'),
push: true,
},
cancel: {
label: t('dialog.cancel'),
},
title: 'Funzione:',
}).onOk(async () => {
const mydata = {
dbop: miafunz,
riga: riga,
col: col,
date_start: date_start,
numpersone: numpersone,
search_username,
replace_username,
search: search.value,
valmin: tools.convstrToNum(valmin),
valmax: tools.convstrToNum(valmax),
circuitId,
options,
}
incaricamento.value = true
$q.loading.show({ message: t('otherpages.update') })
const risfunz = await userStore.execDbOp({ mydata })
$q.loading.hide()
await globalStore.loadSite()
incaricamento.value = false
console.log('risfunz', risfunz)
ris.value = ''
risultato.value = ''
if (risfunz.data && risfunz.data.mystr) {
risultato.value = risfunz.data.mystr
}
})
}
async function getListaArg() {
risultatoHTML.value = ''
risultatoHTML.value = await globalStore.getGM_Lista_Argomenti(true)
}
async function getTabellaDaGM(options: IOptQueryGM) {
risultatoHTML.value = ''
risultatoHTML.value = await globalStore.getGM_Tabella(options)
}
return {
EseguiFunz,
tools,
costanti,
search_username,
replace_username,
valmin,
valmax,
defmin,
defmax,
defpersmin,
defpersmax,
circuitId,
circuitStore,
incaricamento,
ris,
risultato,
search,
globalStore,
risultatoHTML,
getListaArg,
getTabellaDaGM,
}
},
})

View File

@@ -0,0 +1,80 @@
<template>
<div>
<CTitleBanner title="Operazioni su DB MACRO:"></CTitleBanner>
<div
class="row justify-center q-gutter-sm q-list--bordered center_img"
style="max-width: 600px"
>
<q-btn
label="Migrazione del DB MSSQL su MongoDB (TUTTE)"
color="positive"
@click="EseguiFunz('MigrateMSSQLToMongoDb', {tutte: true})"
></q-btn>
<q-btn
label="Migrazione del DB MSSQL su MongoDB (ALCUNE)"
color="positive"
@click="EseguiFunz('MigrateMSSQLToMongoDb')"
></q-btn>
<q-btn
label="Aggiorna Statistiche Fatturato"
color="positive"
@click="EseguiFunz('UpdateStatFatturato')"
></q-btn>
<br><br>
<q-btn
label="Riaggiorna TUTTI gli ARTICOLI da GM SERVER"
color="accent"
@click="EseguiFunz('updateAllBook', {usaDBGMLocale: false, caricatutti: true})"
></q-btn>
<q-btn
label="Riaggiorna TUTTI gli ARTICOLI dal DB Locale Importato"
color="accent"
@click="EseguiFunz('updateAllBook', {usaDBGMLocale: true, caricatutti: true})"
></q-btn>
<!--
<q-btn
label="getGM_Lista_Argomenti"
color="positive"
@click="getListaArg()"
></q-btn>
<q-btn
label="getGM_Tabella Collane"
color="positive"
@click="
getTabellaDaGM({
nameTable: 'T_Web_Collane',
numrec: 500,
outhtml: true,
})
"
></q-btn>
--></div>
<div class="results-container">
<h2 class="results-title">Risultati:</h2>
<div class="results-content">
{{ risultato }}
</div>
<h2
v-if="!!risultatoHTML"
class="results-title"
>
Risultati HTML:
</h2>
<div
v-if="!!risultatoHTML"
v-html="risultatoHTML"
></div>
</div>
<br />
<br />
<br />
</div>
</template>
<script lang="ts" src="./dbopmacro.ts"></script>
<style lang="scss" scoped>
@import './dbopmacro.scss';
</style>

View File

@@ -0,0 +1 @@
export {default as dbopmacro} from './dbopmacro.vue'

View File

@@ -678,13 +678,8 @@ export default defineComponent({
// Crea una copia dell'array per non modificare l'originale
const sortedArr = [...arrprod].sort((a: IProduct, b: IProduct) => {
const valA = a.productInfo?.[sort_field];
const valB = b.productInfo?.[sort_field];
// Gestisce il caso in cui il campo non esiste
if (valA === undefined || valB === undefined) {
return 0;
}
const valA = a.productInfo?.[sort_field] ?? (typeof a.productInfo?.[sort_field] === 'number' ? 0 : '');
const valB = b.productInfo?.[sort_field] ?? (typeof b.productInfo?.[sort_field] === 'number' ? 0 : '');
// Ordinamento per data
if (valA instanceof Date && valB instanceof Date) {
@@ -704,7 +699,7 @@ export default defineComponent({
: compB.localeCompare(compA);
});
// logga i primi 3 elementi, mostrando il nome del prodotto (productInfo.name e la data di pibblicazione : productinfo.date_pub
// logga i primi N elementi, mostrando il nome del prodotto (productInfo.name e la data di pibblicazione : productinfo.date_pub
if (sortedArr.length > 0) {
console.log('Primi 15 elementi ordinati: ***** ');
sortedArr.slice(0, 15).forEach((product, index) => {
@@ -717,10 +712,7 @@ export default defineComponent({
}
// Aggiunge l'indice di ranking ai prodotti
return sortedArr.map((product, index) => ({
...product,
}))
return sortedArr
}
return arrprod;
@@ -728,35 +720,24 @@ export default defineComponent({
function addNextProductToTheView(arrproductfiltrati: IProduct[], indprod: number) {
try {
let rectrovato = null;
while (true) {
if (indprod >= arrproductfiltrati.length) {
return { end: true }
}
rectrovato = arrProdToView.value.find(
while (indprod < arrproductfiltrati.length) {
const rectrovato = arrProdToView.value.find(
(prodview: IProdView) => prodview.id === arrproductfiltrati[indprod]._id
);
if (rectrovato) {
indprod++
continue; // Era stato già aggiunto, quindi prova col prossimo
} else {
// Non è stato ancora aggiunto, quindi prendo questo e lo aggiungo alla lista !
const myrec = arrproductfiltrati[indprod]
arrProdToView.value.push({ id: myrec._id, showed: false });
return { myrec, added: true, indprod }
if (!rectrovato) {
const myrec = arrproductfiltrati[indprod];
arrProdToView.value.push({ id: myrec._id });
return { myrec, added: true, indprod: indprod + 1 };
}
indprod++;
}
return { end: true };
} catch (e) {
console.error(e);
return { rec: null, indprod }; // Assicurati di gestire correttamente l'errore
return { rec: null, indprod };
}
}
@@ -822,8 +803,9 @@ export default defineComponent({
let indadded = 0
recscheda.arrProdToShow = []
for (let pagina = 0; pagina < 60; pagina++) {
for (let pagina = 0; pagina < 600; pagina++) {
indadded = 0
let lastresultend = false
if (!recscheda.arrProdToShow[pagina]) {
recscheda.arrProdToShow[pagina] = [];
}
@@ -832,6 +814,7 @@ export default defineComponent({
// Aggiunge il prossimo prodotto che non è stato ancora inserito
const result = addNextProductToTheView(arrProdFiltrati, indprod);
if (result.end) {
lastresultend = true
break; // Esci dal ciclo se non ci sono più prodotti disponibili
} else {
if (result.indprod)
@@ -856,14 +839,17 @@ export default defineComponent({
if (indtotale > optcatalogo.value.maxnumlibri!)
return
} else {
if (indtotale > 200)
return
//} else {
// if (indtotale > 5000)
// return
}
}
}
}
if (lastresultend)
break; // Esci dal ciclo se non ci sono più prodotti disponibili
if (recscheda.numPagineMax! > 0) {
@@ -916,18 +902,6 @@ export default defineComponent({
}
}
function getNextProd() {
const nextRecord = arrProdToView.value.find((rec: any) => !rec.showed)
// Se un tale record esiste, impostalo su mostrato
if (nextRecord) {
nextRecord.showed = true
return arrProducts.value.find((recprod: IProduct) => recprod._id === nextRecord.id)
}
return null
}
/*function getProducts() {
let arrprod = productStore.getProducts(cosa.value)
@@ -1328,7 +1302,6 @@ export default defineComponent({
pdfContent,
tabcatalogo,
groupedPages,
getNextProd,
getProdBySchedaRigaCol,
generateStylePageScheda,
generateStyleCatalogo,