Files
myprojplanet_vite/src/store/Products.ts
2025-04-11 18:49:42 +02:00

1760 lines
55 KiB
TypeScript
Executable File

import type { IBaseOrder, ICart, IOrder, IOrderCart, IProduct, IProductsState, IProductInfo, ICatProd, IUserShort, IGasordine, IAuthor, ISubCatProd, IText, IOptCatalogo, ICatalog, ICatPrTotali, ISingleProductOrdered, ISchedaSingola, IMyScheda, IElementiScheda } from 'model'
import { Api } from '@api'
import { serv_constants } from '@src/store/Modules/serv_constants'
import * as Types from '@src/store/Api/ApiTypes'
import { static_data } from '@src/db/static_data'
import { shared_consts } from '@src/common/shared_vuejs'
import { tools } from '@store/Modules/tools'
import { defineStore } from 'pinia'
import { useUserStore } from '@store/UserStore'
import { toolsext } from '@store/Modules/toolsext'
import { useGlobalStore } from './globalStore'
import { ref } from 'vue'
import objectId from '@src/js/objectId'
import { costanti } from '@costanti'
import translate from '@src/globalroutines/util'
import { useCatalogStore } from './CatalogStore'
function getRecordOrdersCartEmpty(): IOrderCart {
return {
numorder: 0,
numord_pers: 0,
userId: '',
user: null,
totalQty: 0,
totalPrice: 0,
totalPriceCalc: 0,
status: 0,
confermato: false,
consegnato: false,
pagato: false,
spedito: false,
ricevuto: false,
note: '',
note_per_gestore: '',
note_per_admin: '',
note_ordine_gas: '',
}
}
function getRecordProductInfoEmpty(): IProductInfo {
return {
code: '',
name: '',
description: '',
department: '',
catprods: [],
subcatprods: [],
color: '',
size: '',
weight: 0,
unit: 0,
stars: 0,
date: tools.getDateNow(),
icon: '',
imagefile: '',
}
}
function getRecordProductEmpty(): IProduct {
const tomorrow = tools.getDateNow()
tomorrow.setDate(tomorrow.getDate() + 1)
return {
productInfo: getRecordProductInfoEmpty(),
// _id: tools.getDateNow().toISOString(), // Create NEW
active: false,
idProducer: '',
idStorehouses: [],
idGasordine: '',
idScontisticas: [],
scontisticas: [],
idProvider: '',
producer: {},
gasordine: null,
storehouses: [],
provider: {},
price: 0.0,
quantityAvailable: 0,
bookableAvailableQty: 0,
minBuyQty: 1,
minStepQty: 1,
maxBookableSinglePersQty: 0,
stockQty: 0,
stockBloccatiQty: 0,
bookedQtyOrdered: 0,
bookedQtyConfirmed: 0,
qtyToReachForGas: 0,
maxbookableGASQty: 0,
bookedGASQtyOrdered: 0,
bookedGASQtyConfirmed: 0,
bookableGASBloccatiQty: 0,
canBeShipped: false,
QuantitaOrdinateInAttesa: 0,
QuantitaPrenotateInAttesa: 0,
canBeBuyOnline: false,
}
}
export const useProducts = defineStore('Products', {
state: (): IProductsState => ({
products: [],
cart: { items: [], totalPrice: 0, totalQty: 0, userId: '' },
orders: [],
catprods: [],
catprods_gas: [],
authors: [],
publishers: [],
subcatprods: [],
productInfos: [],
userActive: { username: '', name: '', surname: '', _id: '' },
}),
getters: {
getCatProds: (state: IProductsState) => (cosa: number): ICatProd[] => {
if (cosa === shared_consts.PROD.GAS)
return state.catprods_gas
else if (cosa === shared_consts.PROD.BOTTEGA)
return state.catprods
else
return [...state.catprods, ...state.catprods_gas]
},
getArrayidArgomentoByArridCatProds: (state: IProductsState) => (arridCatProds: string[]): string[] => {
const myarr: string[] = []
for (const idCatProd of arridCatProds) {
const catprod = state.catprods.find((rec: ICatProd) => rec._id === idCatProd)
if (catprod && catprod.idArgomento && !myarr.includes(catprod.idArgomento.toString())) {
myarr.push(catprod.idArgomento.toString())
}
}
return myarr
},
getCatProdsByGas: (state: IProductsState) => (idGasOrdine: string): ICatProd[] => {
let arrcat = state.catprods_gas
// Ottieni le categorie solo per i "products" che hanno come idGasOrdine il valore passato
if (idGasOrdine) {
arrcat = state.catprods_gas.filter((rec: ICatProd) => {
const arrprod = state.products.filter((prod: IProduct) => {
if (prod.idGasordine === idGasOrdine && prod.productInfo.idCatProds?.includes(rec._id)) {
return true
}
})
return arrprod.length > 0 ? true : false
})
} else {
return []
}
return arrcat
},
getCatProdsStrByCatProds: (state: IProductsState) => (catProds: ICatProd[]): string => {
let mystr = ''
for (const catprod of catProds) {
let myarrcat = null
if (tools.isObject(catprod)) {
myarrcat = catprod
} else {
myarrcat = state.catprods.find((rec: ICatProd) => rec._id === catprod)
}
if (myarrcat) {
if (mystr)
mystr += ' - '
mystr += myarrcat.name
}
}
return mystr
},
getSubCatProdsStrBySubCatProds: (state: IProductsState) => (idSubCatProds: string[]): string => {
let mystr = '';
if (Array.isArray(idSubCatProds) && idSubCatProds.length > 0) {
const names = idSubCatProds.map(id => {
const subCatProd = state.subcatprods.find((rec: ISubCatProd) => rec._id === id);
return subCatProd ? subCatProd.name : '';
}).filter(name => name !== '');
mystr = names.join(' - ');
}
return mystr;
},
getTotaleOrdineByOrdId: (state: IProductsState) => (idOrdine: string, idGasordine: string, mostra_solo_ordini_produttore: boolean): number => {
const arrprod = state.orders.filter((rec: IOrderCart) => {
if (idGasordine && !rec.items?.some(item => item.order && item.order.idGasordine === idGasordine) || (rec._id !== idOrdine)) {
return false; // Skip records not matching gasordine condition
}
return true;
});
let subtotalPrice = 0
arrprod.forEach((rec: IOrderCart) => {
rec.items?.forEach(item => {
if (item.order && ((mostra_solo_ordini_produttore && (item.order.idGasordine === idGasordine)) || !mostra_solo_ordini_produttore)) {
const qtyparz = item.order.quantity + item.order.quantitypreordered
subtotalPrice += item.order.price * qtyparz
}
});
});
return subtotalPrice;
},
getCatProdDescrStrByIdCatProd: (state: IProductsState) => (idCatProd: string): string => {
const myfirstcat = state.catprods.find((rec: ICatProd) => rec._id === idCatProd)
if (myfirstcat) {
return myfirstcat.descr_estesa!
}
return ''
},
getTotaliProdottiByIdCatProd: (state: IProductsState) => (idCatProd: string): number => {
const myfirstcat = state.catprtotali!.find((rec: ICatPrTotali) => rec._id === idCatProd)
if (myfirstcat) {
return myfirstcat.quanti!
}
return 0
},
getSubCatProdsByGas: (state: IProductsState) => (idGasOrdine: string, idCatProd: string): ISubCatProd[] => {
let arrcat = state.subcatprods
// Ottieni le categorie solo per i "products" che hanno come idGasOrdine il valore passato
if (idGasOrdine) {
arrcat = state.subcatprods.filter((rec: ISubCatProd) => {
const arrprod = state.products.filter((prod: IProduct) => {
if (prod.idGasordine === idGasOrdine
&& prod.productInfo.idSubCatProds?.includes(rec._id)
&& prod.productInfo.idCatProds?.includes(idCatProd)
) {
return true
}
})
return arrprod.length > 0 ? true : false
})
} else {
return []
}
return arrcat
},
getAuthors: (state: IProductsState) => (): any[] => {
// Get the list of authors, for the q-select component using state.authors array
// [{name: xxx, value: _id }]
// add default value for q-select
const options = [
{
label: '[Tutti]',
value: '',
},
...state.authors.map((rec: IAuthor) => {
return { label: rec.name + (rec.surname ? ' ' + rec.surname : ''), value: rec._id }
}),
]
return options
},
getNumProdTot: (state: IProductsState) => (): number => {
return state.products.length
},
getProducts: (state: IProductsState) => (cosa?: number): IProduct[] => {
if (!!cosa) {
return state.products.filter((rec: IProduct) => {
const hasGasOrdines = rec.idGasordine
if ((cosa === shared_consts.PROD.GAS && hasGasOrdines) ||
(cosa === shared_consts.PROD.BOTTEGA && (!hasGasOrdines))) {
return true;
}
return false;
});
} else {
return state.products;
}
},
updateDataProduct: (state: IProductsState) => (res: any) => {
if (res && res.data.product) {
// Update product from server
const indelem = state.products.findIndex((prod: IProduct) => prod._id === res.data.product._id)
if (indelem >= 0) {
state.products[indelem] = { ...res.data.product }
/*if (!res.data.orders) {
// aggiorna anche tutti i product negli ordini !
let ordcart: IOrderCart
for (ordcart of state.orders) {
for (const item of ordcart.items!) {
if (item.order.idProduct === res.data.product.idProduct)
item.order.product = res.data.product
}
}
}*/
}
}
if (res && res.data.orders) {
state.orders = res.data.orders
}
if (res && res.data.cart) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
state.cart = res.data.cart
}
},
getProductByCode: (state: IProductsState) => (code: string): IProduct => {
if (!code) {
return getRecordProductEmpty()
}
const prod = state.products.find((prod: IProduct) => {
if (prod.productInfo.code === code)
return prod
else
return null
})
return prod ? prod : getRecordProductEmpty()
},
getCart: (state: IProductsState) => (): ICart => {
return state.cart
},
getOrdersAllCart: (state: IProductsState) => (idGasordine: string): IOrderCart[] => {
return state.orders.filter((rec: IOrderCart) => {
if ((idGasordine && !rec.items?.some(item => item.order && item.order.idGasordine === idGasordine))) {
return false; // Skip records not matching gasordine condition
}
return true
})
},
getNumOrders: (state: IProductsState) => (): number => {
return state.orders.length
},
getOrdersCart: (state: IProductsState) => (tipoord: number, hasGasordine: any, idGasordine: string): IOrderCart[] | undefined => {
return state.orders.filter((rec: IOrderCart) => {
if (idGasordine && !rec.items?.some(item => item.order && item.order.idGasordine === idGasordine)) {
return false; // Skip records not matching gasordine condition
}
if (hasGasordine && !rec.items?.some(item => item.order && item.order.idGasordine)) {
return false; // Skip records not matching gasordine condition
}
switch (tipoord) {
case shared_consts.OrderStat.IN_CORSO.value:
return !rec.status || rec.status <= shared_consts.OrderStatus.CHECKOUT_SENT;
case shared_consts.OrderStat.PREPARED.value:
return rec.status === shared_consts.OrderStatus.PREPARED;
case shared_consts.OrderStat.CONFERMATI.value:
return rec.status === shared_consts.OrderStatus.ORDER_CONFIRMED;
case shared_consts.OrderStat.PAGATI.value:
return rec.status === shared_consts.OrderStatus.PAYED;
case shared_consts.OrderStat.DELIVERED.value:
return rec.status === shared_consts.OrderStatus.DELIVERED;
case shared_consts.OrderStat.SHIPPED.value:
return rec.status === shared_consts.OrderStatus.SHIPPED;
case shared_consts.OrderStat.RECEIVED.value:
return rec.status === shared_consts.OrderStatus.RECEIVED;
case shared_consts.OrderStat.COMPLETATI.value:
return rec.status === shared_consts.OrderStatus.COMPLETED;
case shared_consts.OrderStat.CANCELLATI.value:
return rec.status === shared_consts.OrderStatus.CANCELED;
default:
return false; // Invalid tipoord
}
});
},
existProductInCart: (state: IProductsState) => (idproduct: string): boolean => {
// console.log('.cart.items', this.cart.items)
if (state.cart.items) {
const ris = state.cart.items.filter((item: IBaseOrder) => item.order.idProduct === idproduct).reduce((sum, rec) => sum + 1, 0)
return ris > 0
}
return false
},
getOrderProductInCart: (state: IProductsState) => (idproduct: string): IOrder | null => {
// console.log('.cart.items', this.cart.items)
if (state.cart.items) {
const ris = state.cart.items.find((item: IBaseOrder) => item.order ? (item.order.idProduct === idproduct) : false)
return ris ? ris.order : null
}
return null
},
getOrderProductInOrdersCart: (state: IProductsState) => (idordercart: string, idproduct: string): IOrder | null => {
// console.log('.cart.items', this.cart.items)
if (state.orders) {
const orderscart = state.orders.find((rec: IOrderCart) => rec._id === idordercart)
if (orderscart) {
const ris = orderscart.items!.find((item: IBaseOrder) => item.order.idProduct === idproduct)
return ris ? ris.order : null
}
}
return null
},
getOrdersCartById: (state: IProductsState) => (idordercart: string): IOrderCart => {
if (state.orders) {
const orderscart = state.orders.find((rec: IOrderCart) => rec._id === idordercart)
return orderscart ?? getRecordOrdersCartEmpty()
}
return getRecordOrdersCartEmpty()
},
getSumQtyPreOrderInOrdersCart: (state: IProductsState) => (idproduct: string): number => {
let totalQuantity = 0;
if (state.orders) {
const orderscart = state.orders
if (orderscart) {
for (const myord of orderscart) {
if (myord.items) {
for (const item of myord.items) {
if (item.order) {
if ((item.order.idProduct === idproduct) && (item.order.status! < shared_consts.OrderStatus.CHECKOUT_SENT)) {
totalQuantity += (item.order.quantitypreordered) || 0;
}
}
}
}
}
}
}
return totalQuantity
},
getSumQtyOrderProductInOrdersCart: (state: IProductsState) => (idproduct: string): number => {
let totalQuantity = 0;
if (state.orders) {
const orderscart = state.orders
if (orderscart) {
for (const myord of orderscart) {
if (myord.items) {
for (const item of myord.items) {
if (item.order) {
if ((item.order.idProduct === idproduct) && (item.order.status! < shared_consts.OrderStatus.CHECKOUT_SENT)) {
totalQuantity += (item.order.quantity) || 0;
}
}
}
}
}
}
}
return totalQuantity
},
getOrdersCartByIdProduct: (state: IProductsState) => (idproduct: string): IOrderCart[] | [] => {
try {
if (state.orders) {
const ris = state.orders.filter((orderscart: IOrderCart) => {
return orderscart.items!.some(item => {
if (item.order)
return (item.order.idProduct === idproduct)
&& (item.order.status! < shared_consts.OrderStatus.CHECKOUT_SENT)
})
})
// console.log('Ordini ', ris)
return ris ? ris : []
}
} catch (e) {
console.error('Err', e)
}
return []
},
getOrdersCartInAttesaByIdProduct: (state: IProductsState) => (idproduct: string): IOrderCart[] | [] => {
try {
if (state.orders) {
const ris = state.orders.filter((orderscart: IOrderCart) => {
return orderscart.items!.some(item => {
if (item.order)
return (item.order.idProduct === idproduct)
&& (item.order.status! <= shared_consts.OrderStatus.CHECKOUT_SENT)
})
})
// console.log('Ordini ', ris)
return ris ? ris : []
}
} catch (e) {
console.error('Err', e)
}
return []
},
getRecordEmpty: (state: IProductsState) => (): IProduct => {
return getRecordProductEmpty()
},
},
actions: {
createOrderByProduct(product: IProduct, order: IOrder): IOrder {
const userStore = useUserStore()
const myorder: IOrder = {
userId: this.userActive._id,
idapp: import.meta.env.VITE_APP_ID,
status: shared_consts.OrderStatus.IN_CART,
TotalPriceProduct: 0,
TotalPriceProductCalc: 0,
idProduct: product._id,
product, // Copia tutto l'oggetto Product !
// Ordine:
price: product.price,
after_price: product.after_price,
quantity: order.quantity,
quantitypreordered: order.quantitypreordered,
idStorehouse: order.idStorehouse,
idGasordine: order.idGasordine,
//++Add Fields
}
return myorder
},
initcat() {
// rec.userId = this.userActive._id
return this.getRecordEmpty()
},
/*resetProducts() {
const arrprod = [...this.products]
this.products = []
this.products = [...arrprod]
},*/
async getProductById(id: string, forza?: boolean): Promise<IProduct> {
let prod = null
try {
if (!id) {
return null
}
if (!this.products || forza) {
// Se non lo carico all'avvio, allora fai la chiamata al server
prod = await this.loadProductById(id)
} else {
prod = this.products.find((prod: IProduct) => prod._id === id)
}
} catch (e) {
console.error('Err', e)
}
return prod ? prod : getRecordProductEmpty()
},
async loadProducts() {
const userStore = useUserStore()
const globalStore = useGlobalStore()
//console.log('loadProducts')
// if (!globalStore.site.confpages.enableEcommerce)
// return null
// console.log('getProducts', 'userid=', this.userActive._id)
// if (this.userActive._id === '') {
// return new Types.AxiosError(0, null, 0, '')
// }
let ris = null
let myIdActiveSelected = userStore.my._id
if (tools.isSeller())
myIdActiveSelected = tools.getCookie(tools.COOK_SELCART, userStore.my._id, false)
const trovato = userStore.usersList.find((user: IUserShort) => user._id === myIdActiveSelected)
if (trovato)
this.userActive = trovato
else
this.userActive = userStore.my
console.log('userActive', this.userActive)
ris = await Api.SendReq('/products', 'POST', { userId: this.userActive._id })
.then((res) => {
if (res.data.products) {
// console.log('aggiorna prodotti')
this.products = []
this.products = res.data.products
} else {
this.products = []
}
if (res.data.orders) {
this.orders = []
this.orders = res.data.orders
} else {
this.orders = []
}
return res
})
.catch((error) => {
console.log('error getProducts', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
// ApiTables.aftercalling(ris, checkPending, 'categories')
return ris
},
async updateOrderByOrder(idOrdersCart: string, idOrder: string, paramstoupdate: any) {
const userStore = useUserStore()
const globalStore = useGlobalStore()
// console.log('loadProducts')
if (!globalStore.site.confpages.enableEcommerce)
return null
console.log('updateOrderByOrder', 'userid=', this.userActive._id)
let ris = null
ris = await Api.SendReq('/orders/updateord', 'POST', { idOrdersCart, idOrder, paramstoupdate })
.then((res) => {
let myorderscart = res.data.orderscart
if (res) {
myorderscart = res.data && res.data.orderscart ? res.data.orderscart : null
if (myorderscart) {
const idord = this.orders.findIndex((ord: IOrderCart) => ord._id === myorderscart._id)
if (idord >= 0) {
console.log('aggiorna ordine')
this.orders[idord] = { ...myorderscart }
}
}
}
return myorderscart
})
.catch((error) => {
console.log('error updateOrderByOrder', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
// ApiTables.aftercalling(ris, checkPending, 'categories')
return ris
},
async updateOrdersCartById(idOrdersCart: string, paramstoupdate: any) {
const userStore = useUserStore()
const globalStore = useGlobalStore()
// console.log('loadProducts')
if (!globalStore.site.confpages.enableEcommerce)
return null
console.log('updateOrdersCartById', 'userid=', this.userActive._id)
let ris = null
ris = await Api.SendReq('/orders/update', 'POST', { idOrdersCart, paramstoupdate })
.then((res) => {
let myorderscart = res.data.orderscart
if (res) {
if (myorderscart) {
const idord = this.orders.findIndex((ord: IOrderCart) => ord._id === myorderscart._id)
if (idord >= 0) {
console.log('aggiorna orderscart')
this.orders[idord] = myorderscart
}
}
}
return myorderscart
})
.catch((error) => {
console.log('error updateOrderByOrder', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
// ApiTables.aftercalling(ris, checkPending, 'categories')
return ris
},
async loadProductById(id: string) {
const userStore = useUserStore()
const globalStore = useGlobalStore()
//if (!globalStore.site.confpages.enableEcommerce)
// return null
// if (this.userActive._id === '') {
// return new Types.AxiosError(0, null, 0, '')
// }
let ris = null
ris = await Api.SendReq('/products/id/' + id, 'GET', null)
.then((res) => {
console.log('product', res.data.product)
if (res.data.product) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
this.updateDataProduct(res)
return res.data.product
} else {
return null
}
})
.catch((error) => {
console.log('error getProduct', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
return ris
},
async loadOrders() {
// console.log('loadOrders')
const userStore = useUserStore()
const globalStore = useGlobalStore()
if (!globalStore.site.confpages.enableEcommerce)
return null
if (!this.userActive._id)
return null
// if (this.userActive._id === '') {
// return new Types.AxiosError(0, null, 0, '')
// }
let ris = null
ris = await Api.SendReq('/cart/' + this.userActive._id, 'GET', null)
.then((res) => {
if (res.data && res.data.cart) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
this.cart = res.data.cart
} else {
this.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' }
}
this.updateDataProduct(res)
return res
})
.catch((error) => {
console.log('error loadOrders', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
// ApiTables.aftercalling(ris, checkPending, 'categories')
return ris
},
async removeFromCart({ order }: { order: IOrder }) {
const userStore = useUserStore()
return Api.SendReq('/cart/' + this.userActive._id, 'DELETE', { orderId: order._id })
.then((res) => {
this.updateDataProduct(res)
return res
})
},
async getGestoreOrdini({ idGasordine }: { idGasordine: string }) {
const userStore = useUserStore()
let useractive = this.userActive._id
if (!useractive)
useractive = userStore.my._id;
return Api.SendReq('/cart/' + useractive + '/gestord', 'POST', { idGasordine })
.then((res) => {
if (res)
return res.data.arrout
else
return []
})
},
async addToCart({ product, order, addqty }: { product: IProduct, order: IOrder, addqty: boolean }) {
const userStore = useUserStore()
const globalStore = useGlobalStore()
if (!globalStore.site.confpages.enableEcommerce)
return null
let neworder = null;
// Controlla se esiste già nel carrello, allora semplicemente aggiungerò la quantità:
if (this.existProductInCart(product._id)) {
const ordcart = this.getOrderProductInCart(product._id)
if (ordcart) {
if (!addqty && ((ordcart.quantity + ordcart.quantitypreordered) === 1)) {
// sto per rimuovere l'ultimo pezzo, quindi cancello direttamente
const risrem = await this.removeFromCart({ order: ordcart })
if (risrem) {
order.quantity = 0
order.quantitypreordered = 0
return true
} else {
return false
}
}
return await this.addSubQtyToItem({
addqty,
subqty: !addqty,
order: ordcart,
}).then((res: any) => {
if (res && res.msgerr) {
return res;
} else if (res && res.risult) {
order.quantity = res.myord.quantity
order.quantitypreordered = res.myord.quantitypreordered
}
return res;
})
}
} else {
if (this.isQtyAvailableByProduct(product)) {
order.quantity = product.minBuyQty || 1
order.quantitypreordered = 0
} else {
if (this.isInPreorderByProduct(product)) {
order.quantitypreordered = product.minBuyQty || 1
order.quantity = 0
}
}
if (!order.idStorehouse) {
if (product.storehouses.length === 1) {
order.idStorehouse = product.storehouses[0]._id
} else {
try {
order.idStorehouse = globalStore.storehouses?.length ? globalStore.storehouses[0]._id : ''
} catch (e) {
}
}
}
if (!order.idGasordine && order.quantitypreordered > 0) {
if (product.gasordine && product.gasordine._id) {
order.idGasordine = product.gasordine._id
} else {
order.idGasordine = globalStore.gasordines?.length ? globalStore.gasordines[0]._id : ''
}
}
if (order.idStorehouse) {
neworder = this.createOrderByProduct(product, order)
}
}
// if (neworder && !neworder.idStorehouse)
// return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, 'Nessuno Store')
console.log('addToCart', 'userid=', this.userActive._id, neworder)
let ris = null
ris = await Api.SendReq('/cart/' + this.userActive._id, 'POST', { order: neworder })
.then((res) => {
if (res.data.cart) { // console.log('RISULTANTE CATEGORIES DAL SERVER = ', res.data.categories)
this.cart = res.data.cart
} else {
this.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' }
}
this.updateDataProduct(res)
return { risult: !!res, myord: res.data.myord, msgerr: res.data.msgerr }
})
.catch((error) => {
console.log('error addToCart', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
// ApiTables.aftercalling(ris, checkPending, 'categories')
return ris
},
async addSubQtyToItem({ addqty, subqty, order }: { addqty: boolean, subqty: boolean, order: IOrder }) {
const userStore = useUserStore()
const globalStore = useGlobalStore()
if (!globalStore.site.confpages.enableEcommerce)
return null
// console.log('addSubQtyToItem', 'userid=', this.userActive._id, order)
let ris = null
ris = await Api.SendReq('/cart/' + this.userActive._id, 'POST', { addqty, subqty, order })
.then((res: any) => {
this.updateDataProduct(res)
return { risult: !!res, myord: res.data.myord, msgerr: res.msgerr }
})
.catch((error) => {
console.log('error addSubQtyToItem', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
// ApiTables.aftercalling(ris, checkPending, 'categories')
return ris
},
getOptions(sendmail: boolean) {
return {
sendmail
}
},
async CreateOrdersCart({ cart_id, status, note }: { cart_id: string, status: number, note: string }) {
const userStore = useUserStore()
const globalStore = useGlobalStore()
if (!globalStore.site.confpages.enableEcommerce)
return null
if (!this.userActive._id)
return null
let ris = null
ris = await Api.SendReq('/cart/' + this.userActive._id + '/createorderscart', 'POST', { cart_id, status, note, options: this.getOptions(true) })
.then((res) => {
if (res.data.status === shared_consts.OrderStatus.CHECKOUT_SENT) {
// Cancella il Carrello, ho creato l'ordine !
this.cart = {}
}
this.updateDataProduct(res)
return res.data.recOrderCart
})
.catch((error) => {
console.log('error UpdateStatusCart', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
return ris
},
/*async UpdateStatusCart({ ordercart_id, status }: { ordercart_id: string, status: number }) {
const userStore = useUserStore()
const globalStore = useGlobalStore()
if (!globalStore.site.confpages.enableEcommerce)
return null
let ris = null
ris = await Api.SendReq('/cart/updatestatuscart', 'POST', { ordercart_id, status, options: this.getOptions() })
.then((res) => {
if (res.data.status === shared_consts.OrderStatus.CHECKOUT_SENT) {
this.cart = {}
}
this.updateDataProduct(res)
return res.data.status
})
.catch((error) => {
console.log('error UpdateStatusCart', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
return ris
},*/
async UpdateOrderCartStatus({ order_id, status, sendmail }: { order_id: string, status: number, sendmail: boolean }) {
const userStore = useUserStore()
const globalStore = useGlobalStore()
if (!globalStore.site.confpages.enableEcommerce)
return null
let ris = null
ris = await Api.SendReq('/cart/' + this.userActive._id + '/ordercartstatus', 'POST', { order_id, status, options: this.getOptions(sendmail) })
.then((res) => {
this.updateDataProduct(res)
return res.data.status
})
.catch((error) => {
console.log('error UpdateOrderCartStatus', error)
userStore.setErrorCatch(error)
return new Types.AxiosError(serv_constants.RIS_CODE_ERR, null, toolsext.ERR_GENERICO, error)
})
return ris
},
async addtoCartBase({ $q, t, id, order, addqty }: { $q: any, t: any, id: string, order: IOrder, addqty: boolean }) {
let product = await this.getProductById(id)
return await this.addToCart({ product, order, addqty })
.then((ris) => {
if (ris && ris.msgerr) {
tools.showNegativeNotif($q, ris.msgerr)
} else {
let strprod = t('ecomm.prodotto')
let msg = ''
console.log('ris', ris)
if (ris && ris.myord == null) {
msg = t('ecomm.prodotto_tolto')
tools.showNotif($q, msg)
return
}
if (ris === null || ris.myord == null) {
msg = t('ecomm.error_cart')
tools.showNegativeNotif($q, msg)
return
} else {
let qta = ris.myord.quantity + ris.myord.quantitypreordered
if (qta > 1 || qta === 0)
strprod = t('ecomm.prodotti')
if (qta >= 0) {
let totalPrice = this.cart.totalPrice ? this.cart.totalPrice.toFixed(2) : 0
let tot = totalPrice + ' €'
msg = t('ecomm.prod_sul_carrello', { strprod, qty: qta, tot })
}
}
if (ris === null || ris.myord.quantity === 0)
tools.showNotif($q, msg)
else
tools.showPositiveNotif($q, msg, undefined, 'prodotto')
}
//updateproduct()
return ris
})
},
getQuantityByOrder($t: any, order: IOrder): string {
let mystr = '';
if (order.quantity > 0) {
mystr += order.quantity
}
if ((order.quantitypreordered > 0) && (order.quantity > 0)) {
mystr += ' ' + $t('ecomm.available')
mystr += ' + '
}
if (order.quantitypreordered > 0) {
mystr += ' ' + order.quantitypreordered + ' ';
}
return mystr
},
isQtyAvailableByProduct(product: IProduct): boolean {
if (product) {
return (product.quantityAvailable! > 0)
}
return false;
},
isInPreorderByProduct(product: IProduct): boolean {
if (product) {
return (product.bookableAvailableQty! > 0)
}
return false;
},
isQtyAvailableByOrder(order: IOrder): boolean {
if (order && order.product) {
return this.isQtyAvailableByProduct(order.product)
}
return false;
},
isInPreorderByOrder(order: IOrder): boolean {
if (order && order.product) {
return this.isInPreorderByProduct(order.product)
}
return false;
},
getSingleGasordine(order: IOrder, short: boolean): string {
try {
const mygas = order.gasordine
if (mygas) {
if (short)
return mygas.name!
else
return mygas.name + ' (' + mygas.city + ') ' + translate('gas.dataora_chiusura_ordini') + ': ' + tools.getstrDateShort(mygas.dataora_chiusura_ordini)
+ ' ' + translate('gas.data_arrivo_merce') + ': ' + tools.getstrDateShort(mygas.data_arrivo_merce)
+ ' ' + translate('gas.dataora_ritiro') + ': ' + tools.getstrDateShort(mygas.dataora_ritiro)
} else
return ''
} catch (e) {
return ''
}
},
getQtyAvailable(myproduct: IProduct): number {
let qty = myproduct.quantityAvailable!
return qty
},
getQtyBookableAvailable(myproduct: IProduct): number {
let qty = myproduct.bookableAvailableQty!
return qty
},
getQtyBloccataAvailable(myproduct: IProduct): number {
let qty = myproduct.stockBloccatiQty
return qty
},
getQtyBloccataBookableAvailable(myproduct: IProduct): number {
let qty = myproduct.bookableGASBloccatiQty
return qty
},
enableSubQty(myorder: IOrder): boolean {
let qty = myorder.quantity + myorder.quantitypreordered
return qty ? qty > 0 : false
},
CanDeleteIfSub(myorder: IOrder): boolean {
let qty = myorder.quantity + myorder.quantitypreordered
qty = qty - this.qtaNextSub(myorder, myorder.product!)
return qty === 0
},
enableAddQty(myorder: IOrder, myproduct: IProduct): boolean {
const globalStore = useGlobalStore()
if (globalStore.site.ecomm && globalStore.site.ecomm.enablePreOrders) {
return ((this.getQtyBookableAvailable(myproduct) > 0)
&& (myproduct.maxBookableSinglePersQty === 0
|| (myorder.quantitypreordered + 1 < myproduct.maxBookableSinglePersQty))
)
|| (this.getQtyAvailable(myproduct) > 0)
&& (myproduct.maxBookableSinglePersQty === 0
|| (myorder.quantity + 1 < myproduct.maxBookableSinglePersQty))
} else {
return (this.getQtyAvailable(myproduct) > 0)
&& (myproduct.maxBookableSinglePersQty === 0
|| (myorder.quantity + 1 < myproduct.maxBookableSinglePersQty))
}
},
qtaNextAdd(myorder: IOrder, myproduct: IProduct): number {
let step = myproduct.minStepQty
if (this.getQtyAvailable(myproduct) > 0) {
if (myorder.quantity === 0)
step = myproduct.minBuyQty
} else {
if (myorder.quantitypreordered === 0)
step = myproduct.minBuyQty
}
if (step === 0) {
step = 1
}
return step
},
qtaNextSub(myorder: IOrder, myproduct: IProduct) {
let step = myproduct.minStepQty
let minqta = myproduct.minBuyQty
if (this.getQtyAvailable(myproduct) > 0) {
if (myorder.quantity === minqta)
step = minqta
} else {
if (myorder.quantitypreordered === minqta)
step = minqta
}
return step
},
getNumQtaGas() {
const arrprod = this.getProducts(shared_consts.PROD.GAS)
return arrprod.length
},
getNumQtaTutti() {
const arrprod = this.getProducts(shared_consts.PROD.TUTTI)
return arrprod.length
},
getNumQtaBottega() {
const arrprod = this.getProducts(shared_consts.PROD.BOTTEGA)
return arrprod.length
},
changeuserActive(valuerec: any) {
if (valuerec) {
console.log('valuerec', valuerec)
tools.setCookie(tools.COOK_SELCART, valuerec._id)
this.products = []
this.orders = []
this.cart = { items: [], totalPrice: 0, totalQty: 0, userId: '' }
this.loadOrders()
this.loadProducts()
}
},
async sendMailToTheBuyer(idOrdersCart: string, templemail_id: string, test: boolean) {
return await Api.SendReq('/orders/sendmail', 'POST', { templemail_id, idOrdersCart, previewonly: tools.isDebug(), test })
.then((res) => {
console.log('res', res)
if (res)
return res.data
else
return null
})
},
getStrInfoOrder(t: any, order: IOrder) {
let mystr = ''
let qtyrisult: any
if (order.product) {
let qtystr = ''
let qtynum = 0
if (order.quantity > 0)
qtynum += order.quantity;
if (order.quantitypreordered > 0)
qtynum += order.quantitypreordered;
if (order.product.productInfo.sfuso && order.product.productInfo.weight)
qtyrisult = qtynum * order.product.productInfo.weight;
else
qtyrisult = qtynum + ' x ' + order.product.productInfo.weight;
qtystr += qtyrisult + ' ' + tools.getUnitsMeasure(order.product.productInfo.unit, true, order.product.productInfo.weight);
if (order.quantitypreordered > 0)
qtystr += ' Pre-Ordinati';
mystr += '✅ [' + qtystr + '] ' + order.product.productInfo.name + ' a ' + order.price + '€ ' + (order.after_price ? order.after_price : '') + '<br>Totale = ' + order.TotalPriceProduct + '€';
}
return mystr
},
getGasordineNameById(idGasordine: string) {
const globalStore = useGlobalStore()
const rec = globalStore.gasordines.find((gasordine: IGasordine) => gasordine._id === idGasordine)
return rec ? rec.name : ''
},
getGasordines() {
const globalStore = useGlobalStore()
const myarr: any = [{
id: 0,
label: 'Tutti',
value: ''
}]
let ind = 1
if (globalStore.gasordines) {
globalStore.gasordines.forEach((gasordine: IGasordine) => {
if (gasordine) {
myarr.push(
{
id: ind,
label: gasordine.name
+ (gasordine.dataora_chiusura_ordini ? (' - chiusura: ' + tools.getstrDateShort(gasordine.dataora_chiusura_ordini)) : '')
+ (gasordine.dataora_ritiro ? (' - consegna ' + tools.getstrDateShort(gasordine.dataora_ritiro)) : '')
,
value: gasordine._id
})
ind++
}
})
}
return myarr
},
getGasordinesActives() {
const globalStore = useGlobalStore()
return globalStore.gasordines.filter((rec) => rec.active)
},
getAutoriByArrayAuthors(authors?: IAuthor[]) {
// Gestione degli autori
let authorString = '';
if (authors && Array.isArray(authors)) {
// Crea un array di nomi completi
const fullNames = authors.map(author =>
`${author.name} ${author.surname}`.trim()
);
// Formattazione degli autori
if (fullNames.length === 1) {
authorString = fullNames[0];
} else if (fullNames.length === 2) {
authorString = `${fullNames[0]} e ${fullNames[1]}`;
} else if (fullNames.length > 2) {
const lastAuthor = fullNames.pop();
authorString = `${fullNames.join(', ')} e ${lastAuthor}`;
}
}
return authorString
},
getkeyValStr(chiave: string, valore: any) {
try {
return ` ${chiave} = ${valore} `
} catch (e) {
return ` ${chiave}`
}
},
replaceKeyWordsByProduct(optcatalogo: IOptCatalogo, myproduct: IProduct, testo: IText, idPage?: string) {
if (!myproduct || !testo.contenuto) {
return testo.contenuto;
}
const autori = this.getAutoriByArrayAuthors(myproduct.productInfo.authors)
const collana = myproduct.productInfo.collana
const maxDescriptionLength = testo.maxlength ?? 100;
const description = myproduct.productInfo.short_descr || '';
const long_descr = myproduct.productInfo.description || '';
const date_pub = tools.getstrDateShort(myproduct.productInfo.date_pub) || '';
const fatLast3M = myproduct.productInfo.fatLast3M! || 0;
const fatLast6M = myproduct.productInfo.fatLast6M! || 0;
const vLast3M = myproduct.productInfo.vLast3M! || 0;
const vLast6M = myproduct.productInfo.vLast6M! || 0;
const ranking_globale = myproduct.productInfo.rank3M! || 0;
const venduti = myproduct.productInfo.totVen! || 0;
const fatturati = myproduct.productInfo.totFat! || 0;
const linkvenduti = '<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-ordini-by-idarticolo/' + myproduct.productInfo.sku + '" target="_blank">' + venduti + '</a>'
const linkfatturati = '<a href="http://vps-88271abb.vps.ovh.net/apimacro/public/view-fatturati-by-idarticolo/' + myproduct.productInfo.sku + '" target="_blank">' + fatturati + '</a>'
const debugstr = this.getkeyValStr('Pubblicato il', date_pub) +
this.getkeyValStr('Rank3M', myproduct.productInfo.rank3M) +
this.getkeyValStr('Venduti', linkvenduti) +
this.getkeyValStr('vLast3M', vLast3M) +
this.getkeyValStr('vLast6M', vLast6M) +
this.getkeyValStr('Fatturati', linkfatturati) +
this.getkeyValStr('fatLast3M', fatLast3M) +
this.getkeyValStr('fatLast6M', fatLast6M)
const truncatedDescription = description.length > maxDescriptionLength
? description.substring(0, description.lastIndexOf(' ', maxDescriptionLength)) + '...'
: description;
const truncatedlongDescription = long_descr.length > maxDescriptionLength
? long_descr.substring(0, long_descr.lastIndexOf(' ', maxDescriptionLength)) + '...'
: long_descr;
let addtesto = false
const long_descr_macro = myproduct.productInfo.descrizione_completa_macro || '';
if (long_descr_macro.length > maxDescriptionLength) {
addtesto = true
}
const addstrcontinua = '<span class="book-link">👉🏻 <a href="{link_macro}" target="_blank">continua a leggere</a></span>'
let descrizione_completa_macro = addtesto
? long_descr_macro.substring(0, long_descr_macro.lastIndexOf(' ', maxDescriptionLength)) + '...'
: long_descr_macro;
if (addtesto) {
descrizione_completa_macro += addstrcontinua
}
const descr_trafiletto_catalogo = myproduct.productInfo.descr_trafiletto_catalogo || '';
const short_descr = myproduct.productInfo.descrizione_breve_macro || '';
const descrizione_breve_macro = short_descr.length > maxDescriptionLength
? short_descr.substring(0, short_descr.lastIndexOf(' ', maxDescriptionLength)) + '...'
: short_descr;
const sottotitolo = myproduct.productInfo.sottotitolo || '';
const link_macro = myproduct.productInfo.link_macro || '';
const prezzo = tools.arrotonda2Dec(myproduct.arrvariazioni![0].price) || ''
const prezzo_scontato = tools.arrotonda2Dec(myproduct.arrvariazioni![0].sale_price) || ''
const categoria = this.getCatProdsStrByCatProds(myproduct.productInfo.catprods!)
const sottocategoria = myproduct.productInfo.subcatprods && myproduct.productInfo.subcatprods.length > 0 ? myproduct.productInfo.subcatprods[0].name! : ''
const descr_categoria = myproduct.productInfo.catprods && myproduct.productInfo.catprods.length > 0 ? this.getCatProdDescrStrByIdCatProd(myproduct.productInfo.catprods![0].name) : ''
const misure = myproduct.arrvariazioni![0].misure || ''
const formato = myproduct.arrvariazioni![0].formato || ''
const pagine = myproduct.arrvariazioni![0].pagine || ''
const qta = myproduct.arrvariazioni![0].quantita || ''
const isbn = myproduct.productInfo.code || ''
const image_link = myproduct.productInfo.image_link || ''
const imagefile = myproduct.productInfo.imagefile || ''
const scale = optcatalogo.printable ? optcatalogo.areadistampa?.scale : 1
// Crea una mappa di sostituzioni
const replacements = {
'{autore}': autori || '',
'{titolo}': myproduct.productInfo.name || '',
'{sottotitolo}': (sottotitolo) || '',
'{descrizione_da_fdv}': truncatedDescription || '',
'{descrizione_estesa_fdv}': truncatedlongDescription || '',
'{descrizione_estesa}': descrizione_completa_macro || '',
'{debug}': (debugstr) || '',
'{categoria}': (categoria) || '',
'{sottocategoria}': (sottocategoria) || '',
'{descr_categoria}': (descr_categoria) || '',
'{pagine}': (pagine) || '',
'{isbn}': (isbn) || '',
'{misure}': misure || '',
'{argomento}': categoria || '',
'{date_pub}': date_pub || '',
'{ranking_globale}': ranking_globale || '',
'{venduti}': venduti || '',
'{formato}': formato || '',
'{collana_title}': collana ? collana.title || '' : '',
'{prezzo}': prezzo || '',
'{scale}': scale || '',
'{prezzo_scontato}': prezzo_scontato || '',
'{descrizione_completa_macro}': descrizione_completa_macro || '',
'{descrizione_breve_macro}': descrizione_breve_macro || '',
'{descr_trafiletto_catalogo}': descr_trafiletto_catalogo || '',
'{link_macro}': link_macro || '',
'{qta}': qta || '',
'{image_link}': image_link || '',
'{imagefile}': imagefile || '',
};
// Esegue le sostituzioni
let result = testo.contenuto;
for (const [key, value] of Object.entries(replacements)) {
result = result.replace(new RegExp(key, 'g'), value);
}
return result.trim()
},
getSubCatStrByProduct(myproductInfo: IProductInfo): string {
return this.getSubCatProdsStrBySubCatProds(myproductInfo.idSubCatProds || [])
},
getListProductBySumQuantity(idGasordine: string): ISingleProductOrdered[] {
const arrprod = this.orders.filter((rec: IOrderCart) => {
if (idGasordine && !rec.items?.some(item => item.order && item.order.idGasordine === idGasordine)) {
return false; // Skip records not matching gasordine condition
}
return true;
});
const productMap = new Map<string, ISingleProductOrdered>();
arrprod.forEach((rec: IOrderCart) => {
rec.items?.forEach(item => {
if (item.order && item.order.idGasordine === idGasordine) {
const productId: string = item.order.idProduct!;
const qtyparz = item.order.quantity + item.order.quantitypreordered
if (productMap.has(productId)) {
const existingProduct: ISingleProductOrdered = productMap.get(productId)!
existingProduct.qty += qtyparz
existingProduct.subtotalPrice += item.order.price * qtyparz
existingProduct.subtotalPrice = Number((existingProduct.subtotalPrice).toFixed(2))
} else {
const sottocategoria = item.order.product?.productInfo?.subcatprods && item.order.product?.productInfo?.subcatprods.length > 0 ? item.order.product?.productInfo?.subcatprods[0].name : ''
productMap.set(productId, {
subCat: sottocategoria,
strSubCatProds: this.getSubCatProdsStrBySubCatProds(item.order.product?.productInfo?.idSubCatProds),
index: productMap.size + 1,
idProduct: productId,
code: item.order.product?.productInfo.code,
codice_interno: item.order.product?.productInfo?.codice ?? '',
qty: qtyparz,
singlePrice: item.order.price,
subtotalPrice: Number((item.order.price * qtyparz).toFixed(2)),
productName: item.order.product?.productInfo?.name ?? '',
});
}
}
});
});
return Array.from(productMap.values());
},
getSchedeOpt(arrschede: ISchedaSingola[], tag?: string): any[] {
let arr: any = []
arr.push({ label: '[Nessuna]', value: '' })
if (arrschede) {
arrschede.forEach((recscheda: ISchedaSingola) => {
let pagename = ''
if (recscheda.scheda) {
if (recscheda.idPageOrig) {
const page = this.mypage?.find((page) => (`${page._id}`) === recscheda.idPageOrig)
pagename = page ? page.title! : ''
}
if (pagename)
pagename = '[Pag: ' + pagename + '] '
const mylabel = pagename + (recscheda.scheda ? recscheda.scheda!.name : '')
if (!tag || mylabel.startsWith(tag)) {
arr.push({ label: mylabel, value: recscheda.scheda!._id })
}
}
});
}
return arr
},
addNewScheda(catalogo: IOptCatalogo) {
let maxorder = 0
catalogo!.arrSchede?.forEach(scheda => {
if (scheda?.order > maxorder) {
maxorder = scheda.order
}
})
let testodef: IText = {}
testodef = tools.resetIText(testodef)
const defaultDimensioniPag = tools.resetRecIDimensioni(null)
defaultDimensioniPag.size = {
width: '800px',
height: '600px',
}
defaultDimensioniPag.margini = {
top: '12px',
bottom: '0px',
left: '0px',
right: '0px',
}
defaultDimensioniPag.padding = {
top: '0px',
bottom: '0px',
left: '0px',
right: '0px',
}
const defaultDimensioniRiga = tools.resetRecIDimensioni(null)
defaultDimensioniRiga.size = {
width: '800px',
height: '300px',
}
defaultDimensioniRiga.margini = {
top: '40px',
bottom: '0px',
left: '0px',
right: '0px',
}
defaultDimensioniRiga.padding = {
top: '0px',
bottom: '0px',
left: '0px',
right: '0px',
}
const defaultSchedaProdotto = tools.resetRecIDimensioni(null)
defaultSchedaProdotto.size = {
width: '360px',
height: '230px',
}
defaultSchedaProdotto.margini = {
top: '0px',
bottom: '0px',
left: '0px',
right: '0px',
}
defaultSchedaProdotto.padding = {
top: '0px',
bottom: '0px',
left: '0px',
right: '0px',
}
const dimensioni: IElementiScheda = {
pagina: { dimensioni: defaultDimensioniPag, testo_down: testodef, testo_up: testodef, testo_title: testodef },
riga: defaultDimensioniRiga,
scheda_prodotto: defaultSchedaProdotto,
immagine_prodotto: {
size: {
width: '150px',
height: '235px',
},
margini: {
top: '0px',
bottom: '0px',
left: '0px',
right: '0px',
},
padding: {
top: '0px',
bottom: '0px',
left: '0px',
right: '0px',
},
},
}
const newscheda: IMyScheda = {
_id: objectId(),
idapp: tools.appid()!,
isTemplate: false,
isPagIntro: false,
show_separatore: true,
name: 'Scheda Nuova',
dimensioni,
numschede_perRiga: 2,
numschede_perCol: 2,
testo_right_attaccato: {
contenuto: '',
maxlength: 0,
font: {
posiz_text: costanti.POSIZ_TESTO.A_DESTRA,
},
},
testo_right: {
contenuto: '',
maxlength: 0,
font: {
posiz_text: costanti.POSIZ_TESTO.A_DESTRA,
},
},
testo_bottom: {
contenuto: '',
maxlength: 0,
font: {
posiz_text: costanti.POSIZ_TESTO.IN_BASSO,
}
},
barcode: {
show: false,
format: '',
size: {
width: '2',
height: '100',
},
font: {
name: 'monospace',
size: '16px',
}
},
productTypes: [],
excludeproductTypes: [],
editore: [],
argomenti: [],
author: '',
sort_field: '',
sort_dir: 0,
arrProdottiSpeciali: [],
etichette: {
novita: {
show: false,
months: 6,
},
bestseller: {
show: false,
primiNInClassifica: 20
}
}
}
if (!catalogo!.arrSchede)
catalogo!.arrSchede = []
catalogo!.arrSchede.push(
{
_id: objectId(),
scheda: newscheda,
order: maxorder + 10,
numPagineMax: 0,
}
)
}
},
})