- 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:
36
src/views/admin/dbopmacro/dbopmacro.scss
Executable file
36
src/views/admin/dbopmacro/dbopmacro.scss
Executable 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 */
|
||||
}
|
||||
131
src/views/admin/dbopmacro/dbopmacro.ts
Executable file
131
src/views/admin/dbopmacro/dbopmacro.ts
Executable 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,
|
||||
}
|
||||
},
|
||||
})
|
||||
80
src/views/admin/dbopmacro/dbopmacro.vue
Executable file
80
src/views/admin/dbopmacro/dbopmacro.vue
Executable 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>
|
||||
1
src/views/admin/dbopmacro/index.ts
Executable file
1
src/views/admin/dbopmacro/index.ts
Executable file
@@ -0,0 +1 @@
|
||||
export {default as dbopmacro} from './dbopmacro.vue'
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user