diff --git a/package-lock.json b/package-lock.json index f2a96165..7333c7fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "receiving", - "version": "2.27.5", + "version": "2.28.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "receiving", - "version": "2.27.5", + "version": "2.28.1", "dependencies": { "@capacitor/android": "^2.4.7", "@capacitor/core": "^2.4.7", diff --git a/package.json b/package.json index f62d7d9b..c6bdf39e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "receiving", - "version": "2.27.5", + "version": "2.28.1", "private": true, "description": "HotWax Commerce Receiving App", "scripts": { diff --git a/src/components/ClosePurchaseOrderModal.vue b/src/components/ClosePurchaseOrderModal.vue index 5424a71a..25cc125f 100644 --- a/src/components/ClosePurchaseOrderModal.vue +++ b/src/components/ClosePurchaseOrderModal.vue @@ -67,6 +67,7 @@ import { mapGetters, useStore } from 'vuex' import { OrderService } from "@/services/OrderService"; import { DxpShopifyImg, translate, getProductIdentificationValue, useProductIdentificationStore } from '@hotwax/dxp-components'; import { useRouter } from 'vue-router'; +import { hasError } from '@/utils'; export default defineComponent({ name: "ClosePurchaseOrderModal", @@ -130,20 +131,58 @@ export default defineComponent({ } const eligibleItems = this.order.items.filter((item: any) => item.isChecked && this.isPOItemStatusPending(item)) - const responses = await Promise.allSettled(eligibleItems.map(async (item: any) => { - await OrderService.updatePOItemStatus({ - orderId: item.orderId, - orderItemSeqId: item.orderItemSeqId, + let hasFailedItems = false; + let completedItems = [] as any; + let lastItem = {} as any; + + if(eligibleItems.length > 1) { + const itemsToBatchUpdate = eligibleItems.slice(0, -1); + lastItem = eligibleItems[eligibleItems.length - 1]; + + const batchSize = 10; + while(itemsToBatchUpdate.length) { + const itemsToUpdate = itemsToBatchUpdate.splice(0, batchSize) + + const responses = await Promise.allSettled(itemsToUpdate.map(async(item: any) => { + await OrderService.updatePOItemStatus({ + orderId: item.orderId, + orderItemSeqId: item.orderItemSeqId, + statusId: "ITEM_COMPLETED" + }) + return item.orderItemSeqId + })) + + responses.map((response: any) => { + if(response.status === "fulfilled") { + completedItems.push(response.value) + } else { + hasFailedItems = true + } + }) + } + } else { + lastItem = eligibleItems[0] + } + + try{ + const resp = await OrderService.updatePOItemStatus({ + orderId: lastItem.orderId, + orderItemSeqId: lastItem.orderItemSeqId, statusId: "ITEM_COMPLETED" }) - return item.orderItemSeqId - })) - const failedItemsCount = responses.filter((response) => response.status === 'rejected').length - if(failedItemsCount){ - console.error('Failed to update the status of purchase order items.') + + if(!hasError(resp)) { + completedItems.push(lastItem.orderItemSeqId) + } else { + throw resp.data; + } + } catch(error: any) { + hasFailedItems = true; } - const completedItems = responses.filter((response) => response.status === 'fulfilled')?.map((response: any) => response.value) + if(hasFailedItems){ + console.error('Failed to update the status of purchase order items.') + } if(!completedItems.length) return; diff --git a/src/locales/en.json b/src/locales/en.json index 912f8733..06344236 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -63,10 +63,12 @@ "No shipments have been received against this purchase order yet": "No shipments have been received against {lineBreak} this purchase order yet", "OMS": "OMS", "OMS instance": "OMS instance", + "on hand": "{ qoh } on hand", "Only allow received quantity to be incremented by scanning the barcode of products. If the identifier is not found, the scan will default to using the internal name.": "Only allow received quantity to be incremented by scanning the barcode of products. {space} If the identifier is not found, the scan will default to using the internal name.", "Open": "Open", "ordered": "ordered", "Orders not found": "Orders not found", + "/ received": "{receivedCount} / {orderedCount} received", "Password": "Password", "Pending: item": "Pending: {itemsCount} item", "Pending: items": "Pending: {itemsCount} items", @@ -106,7 +108,7 @@ "Scanned item is not present within the shipment:": "Scanned item is not present within the shipment: {itemName}", "Scanned successfully.": "Scanned {itemName} successfully.", "Search items": "Search items", - "Searched item is not present within the shipment:": "Scanned item is not present within the shipment: {itemName}", + "Searched item is not present within the shipment:": "Searched item is not present within the shipment: {itemName}", "secondary identifier": "secondary identifier", "Search": "Search", "Search purchase orders": "Search purchase orders", diff --git a/src/services/ProductService.ts b/src/services/ProductService.ts index 0e7ba0c3..160f6616 100644 --- a/src/services/ProductService.ts +++ b/src/services/ProductService.ts @@ -1,4 +1,5 @@ -import { api } from '@/adapter'; +import { api, hasError } from '@/adapter'; +import store from '@/store'; const fetchProducts = async (query: any): Promise => { return api({ @@ -9,6 +10,31 @@ const fetchProducts = async (query: any): Promise => { }) } +const getInventoryAvailableByFacility = async (productId: any): Promise => { + let productQoh = '' + const payload = { + productId: productId, + facilityId: store.getters['user/getCurrentFacility']?.facilityId + } + + try { + const resp: any = await api({ + url: "service/getInventoryAvailableByFacility", + method: "post", + data: payload + }) + if (!hasError(resp)) { + productQoh = resp?.data.quantityOnHandTotal; + } else { + throw resp.data; + } + } catch (err) { + console.error(err) + } + return productQoh; +} + export const ProductService = { - fetchProducts + fetchProducts, + getInventoryAvailableByFacility } \ No newline at end of file diff --git a/src/views/PurchaseOrderDetail.vue b/src/views/PurchaseOrderDetail.vue index 1a87cde9..eeb0c403 100644 --- a/src/views/PurchaseOrderDetail.vue +++ b/src/views/PurchaseOrderDetail.vue @@ -49,7 +49,7 @@