import { ref, onMounted, onBeforeMount, PropType, reactive, watch } from 'vue'; import { CCardState } from '../CCardState'; import { computed, defineComponent } from 'vue'; import { useGlobalStore } from '@store/globalStore'; import { useProducts } from '@store/Products'; import { CCopyBtn } from '@src/components/CCopyBtn'; import { CSingleCart } from '@src/components/CSingleCart'; import { CTitleBanner } from '@src/components/CTitleBanner'; import { tools } from '@store/Modules/tools'; import { useI18n } from 'vue-i18n'; import MixinUsers from '../../mixins/mixin-users'; import { useQuasar } from 'quasar'; import { ICart, IOrderCart } from 'app/src/model'; export default defineComponent({ name: 'CMyCart', props: {}, components: { CTitleBanner, CCardState, CCopyBtn, CSingleCart }, setup() { const globalStore = useGlobalStore(); const productStore = useProducts(); const { t } = useI18n(); const $q = useQuasar(); const { getnumItemsCart } = MixinUsers(); const codice_sconto = ref('') const descr_sconto = ref('') const caricamentodati = ref(false) const recOrderCart = ref({}); const myCart = computed(() => productStore.cart); const myTotalPrice = computed(() => { if (productStore.cart) { return productStore.cart.totalPrice.toFixed(2); } else { return 0; } }); const totalPriceIntero = computed((): string => { if (productStore.cart && productStore.cart.totalPriceIntero) { return productStore.cart.totalPriceIntero.toFixed(2); } else { return '0'; } }); const ordersCart = computed(() => { if (!!productStore.cart) { return productStore.cart.items; } else { return null; } }); const idOrdersCart = computed(() => { if (!!productStore.cart) { return productStore.cart._id; } else { return ''; } }); const numOrders = computed(() => { if (!!productStore.cart && productStore.cart.items) { return productStore.cart.items.length; } else { return 0; } }); function closecart() { globalStore.rightCartOpen = false; } async function mounted() { await productStore.loadOrders(); aggiornaCarrello(); } function existsOrders() { return productStore.getNumOrders() > 0; } async function applicaSconto(codice: string) { try { caricamentodati.value = true; const rissconto = await productStore.ApplicaSconto({ cart_id: myCart.value._id, codice_sconto: codice, }); if (rissconto) { if (rissconto.msg) { tools.showNeutralNotif($q, `${rissconto.msg}`); } else if (rissconto.valido && rissconto.mycart) { tools.showPositiveNotif($q, 'Sconto Applicato!'); } else { tools.showNegativeNotif($q, `${rissconto.errmsg}`); } codice_sconto.value = ''; descr_sconto.value = ''; if (rissconto.mycart) { productStore.cart = rissconto.mycart }; } } catch (error: any) { console.log('error ApplicaSconto', error); tools.showNegativeNotif($q, `Sconto Non Applicato! ${error?.message || ''}`); codice_sconto.value = ''; descr_sconto.value = ''; } finally { caricamentodati.value = false; } } async function confermaCodiceSconto() { await applicaSconto(codice_sconto.value); } async function aggiornaCarrello() { if (myCart.value) { recOrderCart.value = await productStore.CreateOrdersCart({ cart_id: myCart.value._id, status: 0, note: undefined, codice_sconto: '', }); } } onMounted(mounted); return { myCart, myTotalPrice, totalPriceIntero, ordersCart, numOrders, closecart, getnumItemsCart, existsOrders, globalStore, t, codice_sconto, confermaCodiceSconto, caricamentodati, descr_sconto, idOrdersCart, recOrderCart, }; }, });