import { PropType, computed, defineComponent, onMounted, ref, watch } from "vue"; import draggable from 'vuedraggable' import { tools } from '@tools' import { useGlobalStore } from '@src/store/globalStore' import { CTableCupleLabelValue } from '@src/components/CTableCupleLabelValue' import { costanti } from '@costanti' import type { IMyScheda, IProduct, IRecFields } from '@src/model'; import { shared_consts } from "app/src/common/shared_vuejs"; import { useProducts } from "app/src/store/Products"; import { useI18n } from "vue-i18n"; import { useQuasar } from "quasar"; export default defineComponent({ name: "CSchedaProdotto", emits: ['updateproductmodif'], components: { CTableCupleLabelValue }, props: { modelValue: { type: Object as PropType, required: true, }, scheda: { type: Object as PropType, required: false, default: () => ({ }), }, }, setup(props, { emit }) { // Copia locale della lista_prodotti per manipolazione interna const $q = useQuasar() const { t } = useI18n() const globalStore = useGlobalStore() const products = useProducts() const mytab = ref('scheda') const loading = ref(false) const updatetogm = ref(false) const field_updated_toGM = ref('') const myproduct = ref({ ...props.modelValue }) watch(() => props.modelValue, (newVal) => { myproduct.value = { ...newVal }; }, { deep: false }); async function mounted() { } /* // Aggiorna la copia locale quando il prop cambia watch( () => props.lista_prodotti, (newVal) => { internalProducts.value = [...newVal]; } ); */ function getArrListStat(): IRecFields[] { const arrlist: IRecFields[] = [ { editOn: false, label: "Fatturati", table: "productinfos", id: myproduct.value.productInfo._id, // ID dinamico, da sostituire con il valore reale rec: myproduct.value.productInfo, // Oggetto dinamico, da sostituire con il valore reale mykey: "totFat", debounce: "1000", type: costanti.FieldType.number, }, { editOn: false, label: "Fatturati ultimi 3 Mesi", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "fatLast3M", debounce: "1000", type: costanti.FieldType.number, }, { editOn: false, label: "Fatturati ultimi 6 Mesi", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "fatLast6M", debounce: "1000", type: costanti.FieldType.number, }, { editOn: false, label: "Venduti", table: "productinfos", id: myproduct.value.productInfo._id, // ID dinamico, da sostituire con il valore reale rec: myproduct.value.productInfo, // Oggetto dinamico, da sostituire con il valore reale mykey: "totVen", debounce: "1000", type: costanti.FieldType.number, }, { editOn: false, label: "Venduti Ultimi 3 Mesi", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "vLast3M", debounce: "1000", type: costanti.FieldType.number, }, { editOn: false, label: "Venduti Ultimi 6 Mesi", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "vLast6M", debounce: "1000", type: costanti.FieldType.number, }, { editOn: false, label: "Venduti Ultimo Anno", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "vLastY", debounce: "1000", type: costanti.FieldType.number, }, // SEZIONE RANKING (FATTURATI) { editOn: false, label: "Ranking 3 Mesi", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "rank3M", debounce: "1000", type: costanti.FieldType.number, }, { editOn: false, label: "Ranking 6 Mesi", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "rank6M", debounce: "1000", type: costanti.FieldType.number, }, { editOn: false, label: "Ranking 1 Anno", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "rank1Y", debounce: "1000", type: costanti.FieldType.number, }, ]; return arrlist } function getArrListDescrizioni(): IRecFields[] { const arrlist: IRecFields[] = [ { editOn: true, label: "Descrizione Trafiletto per Catalogo", table: "productinfos", id: myproduct.value.productInfo._id, // ID dinamico, da sostituire con il valore reale rec: myproduct.value.productInfo, // Oggetto dinamico, da sostituire con il valore reale mykey: "descr_trafiletto_catalogo", debounce: "1000", type: costanti.FieldType.string, dense: true, showall: true, }, { editOn: true, label: "Descrizione breve macro", table: "productinfos", id: myproduct.value.productInfo._id, // ID dinamico, da sostituire con il valore reale rec: myproduct.value.productInfo, // Oggetto dinamico, da sostituire con il valore reale mykey: "descrizione_breve_macro", debounce: "1000", type: costanti.FieldType.string, dense: true, showall: true, }, { editOn: true, label: "Descrizione Estesa", table: "productinfos", id: myproduct.value.productInfo._id, // ID dinamico, da sostituire con il valore reale rec: myproduct.value.productInfo, // Oggetto dinamico, da sostituire con il valore reale mykey: "descrizione_completa_macro", maxlength: props.scheda?.testo_bottom?.maxlength ? props.scheda?.testo_bottom?.maxlength : 10000, debounce: "1000", type: costanti.FieldType.string, dense: true, showall: true, }, { editOn: true, label: "Link a gruppomacro.com", table: "productinfos", id: myproduct.value.productInfo._id, // ID dinamico, da sostituire con il valore reale rec: myproduct.value.productInfo, // Oggetto dinamico, da sostituire con il valore reale mykey: "link_macro", debounce: "1000", type: costanti.FieldType.string, dense: true, showall: true, }, ] return arrlist } function getArrListScheda(): IRecFields[] { const arrlist: IRecFields[] = [ { editOn: true, label: "Titolo", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, // Oggetto dinamico, da sostituire con il valore reale mykey: "name", debounce: "1000", type: costanti.FieldType.string, dense: true, }, { editOn: true, label: "SottoTitolo", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "sottotitolo", debounce: "1000", type: costanti.FieldType.string, dense: true, }, { editOn: false, label: "Pubblicazione", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "date_pub", debounce: "1000", type: costanti.FieldType.onlydate, dense: true, }, { editOn: false, label: "Stato", table: "productinfos", id: myproduct.value.productInfo._id, rec: myproduct.value.productInfo, mykey: "idStatoProdotto", debounce: "1000", type: costanti.FieldType.select, jointable: 't_web_statiprodottos', dense: true, }, { editOn: true, label: "Argomento", table: "productinfos", id: myproduct.value.productInfo?._id, rec: myproduct.value.productInfo, mykey: "idCatProds", debounce: "1000", type: costanti.FieldType.multiselect, jointable: 'catprods', dense: true, }, { editOn: true, label: "Pagine", table: "arrvariazioni", id: myproduct.value._id, rec: myproduct.value, mykey: "pagine", debounce: "0", type: costanti.FieldType.number, dense: true, }, { editOn: true, label: "Misure", table: "arrvariazioni", id: myproduct.value._id, rec: myproduct.value, mykey: "misure", debounce: "1000", type: costanti.FieldType.string, dense: true, }, { editOn: false, label: "Tipologia", table: "arrvariazioni", id: myproduct.value._id, rec: myproduct.value, mykey: "idTipologia", debounce: "1000", type: costanti.FieldType.select, jointable: 't_web_tipologies', dense: true, }, { editOn: false, label: "Formato", table: "arrvariazioni", id: myproduct.value._id, rec: myproduct.value, mykey: "idTipoFormato", debounce: "1000", type: costanti.FieldType.select, jointable: 't_web_tipiformatos', dense: true, }, { editOn: true, label: "Formato", table: "arrvariazioni", id: myproduct.value._id, rec: myproduct.value, mykey: "formato", debounce: "1000", type: costanti.FieldType.string, dense: true, }, { editOn: true, label: "Prezzo", table: "arrvariazioni", id: myproduct.value._id, rec: myproduct.value, mykey: "price", debounce: "0", type: costanti.FieldType.number, dense: true, }, { editOn: true, label: "Prezzo Scontato", table: "arrvariazioni", id: myproduct.value._id, rec: myproduct.value, mykey: "sale_price", debounce: "0", type: costanti.FieldType.number, dense: true, }, { editOn: false, label: "Magazzino", table: "arrvariazioni", id: myproduct.value._id, rec: myproduct.value, mykey: "quantita", debounce: "0", type: costanti.FieldType.number, dense: true, }, ] return arrlist } function updateproductmodif(element: any) { console.log('CSCHEDAPRODOTTO updateproductmodif ', element) emit('updateproductmodif', element) } async function updateFieldsDataToGM(data: any) { if (myproduct.value) { try { loading.value = true; // Attiva lo stato di caricamento updatetogm.value = true; // Indica che l'aggiornamento è in corso // Ottieni lo SKU del prodotto corrente const sku = myproduct.value.productInfo.sku; if (!sku) { throw new Error("SKU non disponibile per il prodotto."); } // Aggiorna il campo nel database utilizzando setGM_FieldOf_T_Web_Articoli const result = await globalStore.setGM_FieldOf_T_Web_Articoli( sku, // SKU del prodotto data, // Nuovo valore per il campo shared_consts.CmdQueryMs.SET // Comando per l'aggiornamento ); console.log(`Record aggiornato con successo. Risultato:`, result); } catch (error) { console.error(`Errore durante l'aggiornamento del record:`, error.message); throw new Error(`Errore durante l'aggiornamento del record: ${error.message}`); } finally { loading.value = false; // Disattiva lo stato di caricamento updatetogm.value = false; // Indica che l'aggiornamento è terminato } } else { console.warn("Nessun prodotto selezionato per l'aggiornamento."); } } function updateRecordToGM() { console.log('myproduct.value.productInfo.catprods', myproduct.value.productInfo.catprods) let mydata = { ListaArgomenti: products.getArrayidArgomentoByArridCatProds(myproduct.value.productInfo.idCatProds) } console.log('devo salvare mydata', mydata) updateFieldsDataToGM(mydata) } async function updateproduct(load?: boolean) { myproduct.value = await products.getProductById(myproduct.value._id, load) } /*async function refreshDataFromGM() { if (myproduct.value) { loading.value = true const ris = await globalStore.updateLocalDbFromGM_T_Web_Articoli(myproduct.value.productInfo.sku!, myproduct.value.isbn) if (ris) { await updateproduct(false) tools.showPositiveNotif($q, t('dbgm.updateLocalDb_OK')) } loading.value = false } }*/ async function refreshSingleBookFromGM(options: any) { if (myproduct.value) { loading.value = true await globalStore.updateAllBookFromGM_T_Web_Articoli({ sku: myproduct.value.productInfo.sku!, isbn: myproduct.value.productInfo.code, ...options }) .then((ris) => { if (ris) { if (ris.error) { tools.showNegativeNotif($q, ris.error) } else { updateproduct(false) // console.log('product AGGIORNATO:', myproduct.value) tools.showPositiveNotif($q, t('dbgm.updateLocalDb_OK')) } loading.value = false } }) } } onMounted(mounted) return { tools, globalStore, costanti, shared_consts, t, products, getArrListScheda, getArrListDescrizioni, getArrListStat, mytab, myproduct, updateproductmodif, updatetogm, field_updated_toGM, loading, updateRecordToGM, refreshSingleBookFromGM, // refreshDataFromGM, } } })