import { computed, defineComponent, reactive, ref, h } from 'vue'; import DataTable from '../../components/datatable/DataTable.vue'; import Drawer from '../../components/Drawer.vue'; import { useInventoryStore } from '../../stores'; import { IStockOrder, IStockOrderProduct } from '../../models/inventory'; import { useApiUtil } from '../../composables'; import { GET_ALL_STOCK_ORDER_PRODUCTS } from '../../graphql/inventory.queries'; import { EDIT_STOCK_ORDER, ISSUE_STOCK_ORDER, SUBMIT_STOCK_ORDER } from '../../graphql/inventory.mutations'; const InventoryOrders = defineComponent({ name: 'stock-orders', setup(props, ctx) { const { withClientQuery, withClientMutation } = useApiUtil(); const inventoryStore = useInventoryStore(); const openDrawer = ref(false); const slectedStockOrder = reactive({ order: {} as IStockOrder, products: [] as IStockOrderProduct[], }); const getOrderProducts = async (stockOrderUid: number) => { await withClientQuery(GET_ALL_STOCK_ORDER_PRODUCTS, { stockOrderUid }, 'stockOrderProductAll').then( (products: IStockOrderProduct[]) => { slectedStockOrder.products = products?.map(op => ({ ...op, issue: op.quantity })); } ); }; const tableColumns = ref([ { name: 'UID', value: 'uid', sortable: true, sortBy: 'asc', defaultSort: true, showInToggler: false, hidden: true, }, { name: 'Order Number', value: 'orderNumber', sortable: false, sortBy: 'asc', hidden: false, customRender: function (order) { return h( 'span', { innerHTML: order?.orderNumber, onClick: () => { slectedStockOrder.order = order; getOrderProducts(order?.uid); openDrawer.value = true; }, }, [] ); }, }, { name: 'Department', value: 'department.name', sortable: false, sortBy: 'asc', hidden: false, }, { name: 'Orderer', value: 'orderBy.firstName', sortable: false, sortBy: 'asc', hidden: false, }, { name: 'Status', value: 'status', sortable: false, sortBy: 'asc', hidden: false, }, ]); let stockOrderParams = reactive({ first: 50, before: '', text: '', sortBy: ['-uid'], filterAction: false, status: 'preperation', }); return { tableColumns, inventoryStore, slectedStockOrder, openDrawer, stockOrderParams, filterOptions: [ { name: 'All', value: '' }, { name: 'Preperation', value: 'preperation' }, ], filterStockOrders: (opts: any) => { stockOrderParams.first = 50; stockOrderParams.before = ''; stockOrderParams.text = opts.filterText; stockOrderParams.filterAction = true; inventoryStore.fetchStockOrders(stockOrderParams); }, showMoreStockOrders: (opts: any) => { stockOrderParams.first = opts.fetchCount; stockOrderParams.before = inventoryStore.stockOrdersPaging?.pageInfo?.endCursor ?? ''; stockOrderParams.text = opts.filterText; stockOrderParams.filterAction = false; inventoryStore.fetchStockOrders(stockOrderParams); }, countNone: computed( () => inventoryStore.stockOrders?.length + ' of ' + inventoryStore.stockOrdersPaging.totalCount + ' orders' ), issueOrder: () => { const payload: any[] = []; for (const orderProduct of slectedStockOrder.products) { payload.push({ productUid: orderProduct.product.uid, quantity: orderProduct.issue, remarks: '', }); } withClientMutation( ISSUE_STOCK_ORDER, { uid: slectedStockOrder?.order?.uid, payload, }, 'issueStockOrder' ).then(result => { inventoryStore.issueStockOrder(result); openDrawer.value = false; }); }, removeOrderProduct: (productUid: string) => { slectedStockOrder.products = [...slectedStockOrder.products.filter(oi => oi.product.uid !== productUid)]; }, updateOrder: () => { const payload: any[] = []; for (const op of slectedStockOrder.products) { payload.push({ productUid: op.product.uid, quantity: op.quantity, remarks: '', }); } withClientMutation( EDIT_STOCK_ORDER, { uid: slectedStockOrder.order.uid, payload, }, 'updateStockOrder' ).then(result => { inventoryStore.updateStockOrder(result?.stockOrder); openDrawer.value = false; }); }, submitOrder: () => { withClientMutation( SUBMIT_STOCK_ORDER, { uid: slectedStockOrder.order.uid, }, 'submitStockOrder' ).then(result => { inventoryStore.updateStockOrder(result); openDrawer.value = false; }); }, }; }, render() { return (
this.filterStockOrders(x)} onOnPaginate={x => this.showMoreStockOrders(x)} > {/* Drawer */} (this.openDrawer = false)}> {{ header: () => `Order: ${this.slectedStockOrder?.order.orderNumber}`, body: () => ( <> {this.slectedStockOrder?.order?.status == 'preparation' && ( <>
Status: {this.slectedStockOrder?.order?.status}
{this.slectedStockOrder.products.map(item => ( ))}
Product Name Quantity

{item.product.name}


)} {['pending', 'submitted'].includes(this.slectedStockOrder?.order?.status ?? '') && ( <>
Status: {this.slectedStockOrder?.order?.status}

{this.slectedStockOrder.products.map(orderProduct => ( ))}
Product Name Available Requested Issue

{orderProduct.product.name}

{orderProduct.product.remaining}

{orderProduct.quantity}


)} {['processed'].includes(this.slectedStockOrder?.order?.status ?? '') && ( <>
Status: {this.slectedStockOrder?.order?.status}

Request Details


{this.slectedStockOrder.products.map(orderProduct => ( ))}
Product Name Available Requested

{orderProduct.product.name}

{orderProduct.product.remaining}

{orderProduct.quantity}


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