import { defineComponent, onMounted, ref, computed } from 'vue' import { tools } from '@store/Modules/tools' import { useUserStore } from '@store/UserStore' import { useRouter } from 'vue-router' import { useGlobalStore } from '@store/globalStore' import { useProducts } from '@store/Products' import { useI18n } from '@/boot/i18n' import { toolsext } from '@store/Modules/toolsext' import { useQuasar } from 'quasar' import { costanti } from '@costanti' import { ICart, IOrder, IOrderCart, IProduct, IShareWithUs } from '@src/model/Products' import { shared_consts } from '@src/common/shared_vuejs' import { CSingleCart } from '../CSingleCart' import { CTitleBanner } from '@components' export default defineComponent({ name: 'CCart', props: { iscash: { type: Boolean, required: false, default: false, }, idOrdersCart: { type: String, required: false, default: null, }, }, components: { CSingleCart, CTitleBanner }, setup(props) { const userStore = useUserStore() const globalStore = useGlobalStore() const productStore = useProducts() const $router = useRouter() const $q = useQuasar() const { t } = useI18n(); const mycart = ref({}) const myrec = ref([]) const oldrec = ref([]) const note = ref('') const endload = ref(false) const recOrderCart = ref({}) const search = ref('') const statusnow = computed(() => (): number => { if (recOrderCart.value) { return recOrderCart.value.status } return 0 }) function mounted() { // Inizializza load() } function getOrdersCart() { if (props.iscash) { return productStore.getOrdersCartById(props.idOrdersCart) } else { return productStore.getCart() } } function getItemsCart() { const cart = getOrdersCart() return cart.items || null } function getNumItems(): number { const cart = getOrdersCart() if (!!cart.items) return cart.items.length || 0 else return 0 } function getCart(): ICart { return getOrdersCart() } function getNote() { const cart = getOrdersCart() return cart.note } function change_field(fieldname: string) { if (myrec.value[fieldname] !== oldrec.value[fieldname]) { myrec.value[fieldname] = oldrec.value[fieldname] const mydata = { [fieldname]: myrec.value[fieldname] } const aggiorna = fieldname !== 'status' tools.saveFieldToServer($q, 'carts', mycart.value._id, mydata, aggiorna) oldrec.value[fieldname] = myrec.value[fieldname] } } function myTotalPrice(): string { if (productStore.cart && productStore.cart.totalPrice) { return productStore.cart.totalPrice.toFixed(2) } else { return '0' } } function myTotalQty(): number { if (productStore.cart) { return productStore.cart.totalQty! } else { return 0 } } async function load() { mycart.value = getCart() myrec.value = Object.keys(mycart) oldrec.value = myrec.value note.value = mycart.value.note! let options = {}; if (mycart.value) { recOrderCart.value = await productStore.CreateOrdersCart({ cart_id: mycart.value._id, status: 0, note: note.value }) } console.log('myrec', myrec.value) endload.value = true } function CanBeShipped() { return productStore.cart.items ? productStore.cart.items.filter((rec: any) => rec.order.product.canBeShipped).length : false } function CanBeBuyOnline() { return productStore.cart.items ? productStore.cart.items.filter((rec: any) => rec.order.product.canBeBuyOnline).length : false } function getnumsteps() { let numsteps = 1 if (CanBeShipped()) numsteps++ if (CanBeBuyOnline()) numsteps++ return numsteps } function docheckout() { // Può essere spedito? if (CanBeShipped()) { // mostra form di spedizione } if (CanBeBuyOnline()) { // mostra form di acquisto Online } } function completeOrder() { $q.dialog({ message: t('ecomm.conferma_acq', { qty: myTotalQty() }), ok: { label: t('dialog.yes'), push: true }, cancel: { label: t('dialog.cancel') }, title: t('ecomm.order') }).onOk(async () => { const status = shared_consts.OrderStatus.CHECKOUT_SENT recOrderCart.value = await productStore.CreateOrdersCart({ cart_id: mycart.value._id, status, note: note.value }) // statusnow.value = myordercart ? myordercart.status : 0 if (recOrderCart.value.status === status) { tools.showPositiveNotif($q, t('ecomm.ord_confirmed')) setTimeout(() => { $router.push('/orderinfo') }, 2000) } else { tools.showNegativeNotif($q, t('ecomm.ord_not_confirmed')) } // change_field('status') // change_field('status') }) } function getActualIdStorehouse(myprod: IProduct) { // Ottieni il negozio attualmente selezionato: // Se ce n'è solo 1 allora prendi quello ! if (myprod.storehouses.length === 1) { return myprod.storehouses[0]._id } else { // Ottieni il negozio attualmente scelto ! return '' } } function getActualGasordine(myprod: IProduct) { // Ottieni il negozio attualmente selezionato: // Se ce n'è solo 1 allora prendi quello ! if (myprod.gasordines.length === 1) { return myprod.gasordines[0]._id } else { // Ottieni il gasordine attualmente scelto ! return '' } } async function insertArticolo() { let lowerSearchText = search.value.trim(); const myprod = productStore.getProductByCode(lowerSearchText); if (myprod && myprod.active) { let myorder: IOrder = { quantity: 1, quantitypreordered: 0, TotalPriceProduct: 0, price: 0, idStorehouse: getActualIdStorehouse(myprod), idGasordine: getActualGasordine(myprod), } await productStore.addtoCartBase({ $q, t, id: myprod._id, order: myorder, addqty: true }) search.value = '' load() } } onMounted(mounted) return { userStore, costanti, tools, toolsext, completeOrder, getNumItems, myTotalPrice, getItemsCart, getNote, change_field, note, statusnow, shared_consts, myTotalQty, recOrderCart, mycart, endload, search, insertArticolo, } } })