import { defineComponent, computed, ref, defineAsyncComponent } from 'vue'; import { AddStockOrderDocument, AddStockOrderMutation, AddStockOrderMutationVariables } from '@/graphql/operations/inventory.mutations'; import useApiUtil from '@/composables/api_util'; import { useInventoryStore } from '@/stores/inventory'; import { useStorageStore } from '@/stores/storage'; import { useSetupStore } from '@/stores/setup'; import { useUserStore } from '@/stores/user'; const Drawer = defineAsyncComponent( () => import('@/components/ui/FelDrawer.vue') ) const PageHeading = defineAsyncComponent( () => import('@/components/common/FelPageHeading.vue') ) const InventoryAdjustments = defineAsyncComponent( () => import('./InvAdjustments') ) const InventoryListing = defineAsyncComponent( () => import('./InvListing') ) const InventoryOrders = defineAsyncComponent( () => import('./InvOrders') ) const InventoryHome = defineComponent({ name: 'inventory-home', setup() { const { withClientMutation } = useApiUtil(); // Prefetch data const inventoryStore = useInventoryStore(); const setupStore = useSetupStore(); const storageStore = useStorageStore(); const userStore = useUserStore(); inventoryStore.fetchItems({ first: 10000, after: '', text: '', sortBy: ['-uid'], }); userStore.fetchUsers({}); setupStore.fetchSuppliers(); setupStore.fetchDepartments({}); inventoryStore.fetchCategories(); inventoryStore.fetchHazards(); storageStore.fetchStoreRooms(); inventoryStore.fetchUnits(); const currentTab = ref('orders'); const inventoryTabs = ref(['orders', 'products', 'ledger']); const currentTabComponent = computed(() => 'tab-' + currentTab.value); const viewBasket = ref(false); return { currentTab, inventoryTabs, currentTabComponent, basket: computed(() => inventoryStore.getBasket), viewBasket, inventoryStore, createOrder: () => { const basket = inventoryStore.getBasket; withClientMutation(AddStockOrderDocument, { payload: { orderProducts: basket.map(order => ({ productUid: order.product.uid, stockLotUid: order.stockLotUid, quantity: order.quantity, remarks: '', })), departmentUid: undefined, }, }, 'createStockOrder' ).then(result => { inventoryStore.addStockOrder(result?.stockOrder); inventoryStore.clearBasket(); viewBasket.value = false; }); }, }; }, render() { return ( <>
{this.currentTab === 'orders' && } {this.currentTab === 'products' && } {this.currentTab === 'ledger' && }
(this.viewBasket = false)}> {{ header: () => 'Your Order Basket', body: () => ( <>
{this.basket.map(item => ( ))}
Product Name Lot Number Quantity

{item.product.name}

{item.stockLot?.lotNumber}


), footer: () => [], }}
); }, }); export { InventoryHome }; export default InventoryHome