@things-factory/operato-wms 4.3.758 → 4.3.759

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/client/pages/outbound/loading-v2/delivery-order-info.js +38 -3
  2. package/client/pages/outbound/loading-v2/loading-execution-base.js +132 -17
  3. package/dist-server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.js +15 -0
  4. package/dist-server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.js.map +1 -1
  5. package/dist-server/graphql/resolvers/outbound/find-loadable-release-good.js +9 -8
  6. package/dist-server/graphql/resolvers/outbound/find-loadable-release-good.js.map +1 -1
  7. package/dist-server/graphql/resolvers/outbound/load-by-qty.js +115 -45
  8. package/dist-server/graphql/resolvers/outbound/load-by-qty.js.map +1 -1
  9. package/dist-server/graphql/resolvers/outbound/loading-worksheet-v2.js +4 -0
  10. package/dist-server/graphql/resolvers/outbound/loading-worksheet-v2.js.map +1 -1
  11. package/dist-server/graphql/resolvers/outbound/undo-load.js +94 -42
  12. package/dist-server/graphql/resolvers/outbound/undo-load.js.map +1 -1
  13. package/dist-server/graphql/resolvers/route-label/route-label.js +8 -12
  14. package/dist-server/graphql/resolvers/route-label/route-label.js.map +1 -1
  15. package/dist-server/graphql/resolvers/zone-worksheet/zone-picking.js +31 -2
  16. package/dist-server/graphql/resolvers/zone-worksheet/zone-picking.js.map +1 -1
  17. package/package.json +4 -4
  18. package/server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.ts +15 -0
  19. package/server/graphql/resolvers/outbound/find-loadable-release-good.ts +9 -7
  20. package/server/graphql/resolvers/outbound/load-by-qty.ts +198 -81
  21. package/server/graphql/resolvers/outbound/loading-worksheet-v2.ts +4 -0
  22. package/server/graphql/resolvers/outbound/undo-load.ts +116 -44
  23. package/server/graphql/resolvers/route-label/route-label.ts +9 -12
  24. package/server/graphql/resolvers/zone-worksheet/zone-picking.ts +41 -2
@@ -151,7 +151,7 @@ class DeliveryOrderInfo extends localize(i18next)(LitElement) {
151
151
 
152
152
  <!-- Content Section -->
153
153
  <div class="content">
154
- <product-list-view .config=${this.deliveryInfoConfig} .data=${this.data?.orderInventories}></product-list-view>
154
+ <product-list-view .config=${this.deliveryInfoConfig} .data=${this._getGroupedOrderInventories()}></product-list-view>
155
155
  </div>
156
156
  <!-- Content Section End -->
157
157
 
@@ -184,9 +184,11 @@ class DeliveryOrderInfo extends localize(i18next)(LitElement) {
184
184
  variables: { doId: this.data.id }
185
185
  })
186
186
 
187
- if(!response.error) {
187
+ if (!response.errors) {
188
188
  this.dispatchEvent(new CustomEvent('undo', { detail: { doId: this.data.id } }))
189
189
  history.back()
190
+ } else {
191
+ throw new Error(response.errors[0]?.message || 'Failed to undo loading')
190
192
  }
191
193
  } catch (e) {
192
194
  showToast(e)
@@ -194,7 +196,40 @@ class DeliveryOrderInfo extends localize(i18next)(LitElement) {
194
196
  }
195
197
 
196
198
  _getTotalSku() {
197
- return this.data.orderInventories?.length || 0
199
+ if (!this.data?.orderInventories?.length) return 0
200
+ // Count unique products by SKU
201
+ const uniqueSkus = new Set(
202
+ this.data.orderInventories.map(oi => oi.product?.sku).filter(Boolean)
203
+ )
204
+ return uniqueSkus.size
205
+ }
206
+
207
+ /**
208
+ * Groups order inventories by SKU, batchId, expirationDate, packingType, and packingSize.
209
+ * Sums the pickedQty for items with the same grouping key.
210
+ * @returns {Array} Grouped order inventories with aggregated quantities
211
+ */
212
+ _getGroupedOrderInventories() {
213
+ if (!this.data?.orderInventories?.length) return []
214
+
215
+ const groupedMap = new Map()
216
+
217
+ this.data.orderInventories.forEach(oi => {
218
+ // Create a unique key based on product details
219
+ const key = `${oi.product?.sku || ''}_${oi.batchId || ''}_${oi.expirationDate || ''}_${oi.packingType || ''}_${oi.packingSize || ''}`
220
+
221
+ if (groupedMap.has(key)) {
222
+ const existing = groupedMap.get(key)
223
+ // Sum the quantities
224
+ existing.pickedQty = (existing.pickedQty || 0) + (oi.pickedQty || 0)
225
+ existing.releaseQty = (existing.releaseQty || 0) + (oi.releaseQty || 0)
226
+ } else {
227
+ // Create a new entry with a copy of the order inventory
228
+ groupedMap.set(key, { ...oi })
229
+ }
230
+ })
231
+
232
+ return Array.from(groupedMap.values())
198
233
  }
199
234
 
200
235
  closePopup() {
@@ -576,6 +576,22 @@ export class LoadingExecutionBase extends LitElement {
576
576
  } else if (tabName === TAB_TYPES.LOADING) {
577
577
  // Use bin-based query only if QC SKU mode AND it's not a release good scan
578
578
  if (this._useQcSku && this.worksheet?.binLocationName && !this.worksheet?.isReleaseGoodScan) {
579
+ // If there's already a selected release order, refresh data for it first
580
+ // This ensures that if user closes the popup without selection, current data is shown
581
+ // IMPORTANT: Use bin location name with useQcSku=true to filter by specific bin
582
+ if (this._currentReleaseGood?.releaseGood?.name) {
583
+ // Fetch data using bin location (not release order name) to get only items from this bin
584
+ let binData = await this.fetchData(this.worksheet.binLocationName, 'loading', true)
585
+ // Filter to only show items for the currently selected release order AND from this bin
586
+ // Note: FIND_LOADABLE_RELEASE_GOOD_BY_BIN returns OrderInventory status ('LOADED'),
587
+ // not WorksheetDetail status ('DONE'), so we filter by 'LOADED'
588
+ this.loadingData = (binData || []).filter(
589
+ data =>
590
+ data?.status !== 'LOADED' &&
591
+ data?.releaseGood?.name === this._currentReleaseGood.releaseGood.name
592
+ )
593
+ }
594
+
579
595
  const response = await client.query({
580
596
  query: FIND_LOADABLE_RELEASE_GOOD,
581
597
  variables: {
@@ -604,6 +620,10 @@ export class LoadingExecutionBase extends LitElement {
604
620
  }
605
621
  } else {
606
622
  this.loadingData = await this.fetchData(this.worksheet?.releaseGood?.name, 'loading', this._useQcSku)
623
+ // Filter out items that are already LOADED (safety check in case backend returns them)
624
+ this.loadingData = (this.loadingData || []).filter(
625
+ data => data?.status !== WORKSHEET_STATUS.DONE.value
626
+ )
607
627
  // Refresh tabCounts when switching to LOADING tab
608
628
  if (this._currentReleaseGood?.releaseGood?.name || this.worksheet?.releaseGood?.name) {
609
629
  const orderNo = this._currentReleaseGood?.releaseGood?.name || this.worksheet?.releaseGood?.name
@@ -751,7 +771,23 @@ export class LoadingExecutionBase extends LitElement {
751
771
  await this.updateComplete
752
772
 
753
773
  if (finalTabName === TAB_TYPES.LOADING) {
754
- this.loadingData = await this.fetchData(selectedRO.name, 'loading', false)
774
+ // In QC SKU mode with bin location, fetch by bin and filter by selected order
775
+ // to preserve the bin-scoped view
776
+ if (this._useQcSku && this.worksheet?.binLocationName && !this.worksheet?.isReleaseGoodScan) {
777
+ let binData = await this.fetchData(this.worksheet.binLocationName, 'loading', true)
778
+
779
+ // Filter to only show items for the selected release order from this bin
780
+ // Note: FIND_LOADABLE_RELEASE_GOOD_BY_BIN returns OrderInventory status ('LOADED')
781
+ this.loadingData = (binData || []).filter(
782
+ data => data?.status !== 'LOADED' && data?.releaseGood?.name === selectedRO.name
783
+ )
784
+ } else {
785
+ this.loadingData = await this.fetchData(selectedRO.name, 'loading', false)
786
+ // Filter out items that are already LOADED (safety check)
787
+ this.loadingData = (this.loadingData || []).filter(
788
+ data => data?.status !== WORKSHEET_STATUS.DONE.value
789
+ )
790
+ }
755
791
  } else if (finalTabName === TAB_TYPES.LOADED) {
756
792
  this.loadedData = await fetchDeliveryOrders(selectedRO.name)
757
793
  if (!this.worksheet?.worksheet?.id) {
@@ -759,13 +795,34 @@ export class LoadingExecutionBase extends LitElement {
759
795
  }
760
796
  } else if (finalTabName === TAB_TYPES.QC) {
761
797
  // Fetch both QC and LOADING data so banner can check if items are ready for loading
762
- const [qcData, loadingData] = await Promise.all([
763
- this.fetchData(selectedRO.name, 'qc', this._useQcSku),
764
- this.fetchData(selectedRO.name, 'loading', this._useQcSku)
765
- ])
766
- this.qcData = qcData.filter(data => data?.sortedQty < data?.pickedQty) || []
767
- this.loadingData =
768
- loadingData.filter(data => data?.sortedQty > 0 && data.status != WORKSHEET_STATUS.DONE.value) || []
798
+ // In QC SKU mode with bin location, fetch by bin and filter by selected order
799
+ if (this._useQcSku && this.worksheet?.binLocationName && !this.worksheet?.isReleaseGoodScan) {
800
+ let binData = await this.fetchData(this.worksheet.binLocationName, 'qc', true)
801
+ // Filter to only show items for the selected release order from this bin
802
+ // Note: FIND_LOADABLE_RELEASE_GOOD_BY_BIN returns OrderInventory status
803
+ this.qcData = (binData || []).filter(
804
+ data =>
805
+ data?.sortedQty < data?.pickedQty &&
806
+ data?.status !== 'LOADED' &&
807
+ data?.releaseGood?.name === selectedRO.name
808
+ )
809
+ // Also fetch loading data for banner
810
+ let binLoadingData = await this.fetchData(this.worksheet.binLocationName, 'loading', true)
811
+ this.loadingData = (binLoadingData || []).filter(
812
+ data =>
813
+ data?.sortedQty > 0 &&
814
+ data?.status !== 'LOADED' &&
815
+ data?.releaseGood?.name === selectedRO.name
816
+ )
817
+ } else {
818
+ const [qcData, loadingData] = await Promise.all([
819
+ this.fetchData(selectedRO.name, 'qc', this._useQcSku),
820
+ this.fetchData(selectedRO.name, 'loading', this._useQcSku)
821
+ ])
822
+ this.qcData = qcData.filter(data => data?.sortedQty < data?.pickedQty) || []
823
+ this.loadingData =
824
+ loadingData.filter(data => data?.sortedQty > 0 && data.status != WORKSHEET_STATUS.DONE.value) || []
825
+ }
769
826
  // fetchData updates _hasRefWorksheetId, so update buttons after data is fetched
770
827
  }
771
828
 
@@ -934,11 +991,35 @@ export class LoadingExecutionBase extends LitElement {
934
991
 
935
992
  // Always refresh loadingData (not just when on LOADING tab)
936
993
  // This ensures banner condition (which uses loadingData.length) is accurate after undo/load mutations
937
- // If a release good is selected (from popup), use release good query, not bin query
938
994
  if (orderNo) {
939
- const useQcSkuForReload =
940
- this._useQcSku && !this.worksheet?.isReleaseGoodScan && !this._currentReleaseGood?.releaseGood?.name
941
- this.loadingData = await this.fetchData(orderNo, 'loading', useQcSkuForReload)
995
+ // In bin scan mode (qcSku enabled with bin location), fetch by bin and filter by selected RO
996
+ // This ensures we only show items from the scanned bin, not all items for the RO
997
+ if (this._useQcSku && this.worksheet?.binLocationName && !this.worksheet?.isReleaseGoodScan) {
998
+ let binData = await this.fetchData(this.worksheet.binLocationName, 'loading', true)
999
+ // Filter to only show items for the selected release order from this bin
1000
+ // Note: FIND_LOADABLE_RELEASE_GOOD_BY_BIN returns OrderInventory status ('LOADED')
1001
+ this.loadingData = (binData || []).filter(
1002
+ data => data?.status !== 'LOADED' && data?.releaseGood?.name === orderNo
1003
+ )
1004
+ } else {
1005
+ // Standard mode: fetch by release order name
1006
+ this.loadingData = await this.fetchData(orderNo, 'loading', false)
1007
+ // Filter out items that are already LOADED (safety check)
1008
+ this.loadingData = (this.loadingData || []).filter(
1009
+ data => data?.status !== WORKSHEET_STATUS.DONE.value
1010
+ )
1011
+ }
1012
+ }
1013
+
1014
+ // Auto-switch to LOADED tab if LOADING tab is now empty but LOADED has items
1015
+ // This provides better UX after loading completes
1016
+ if (
1017
+ this.state?.activeTab === TAB_TYPES.LOADING &&
1018
+ (!this.loadingData || this.loadingData.length === 0) &&
1019
+ this.loadedData &&
1020
+ this.loadedData.length > 0
1021
+ ) {
1022
+ this.state = { ...this.state, activeTab: TAB_TYPES.LOADED }
942
1023
  }
943
1024
 
944
1025
  // Update button visibility
@@ -1422,6 +1503,10 @@ export class LoadingExecutionBase extends LitElement {
1422
1503
  @warehouse-return=${async e => {
1423
1504
  showToast({ type: 'success', message: 'Returning worksheet generated' })
1424
1505
  this.loadingData = await this.fetchData(this.worksheet?.releaseGood?.name, 'loading', this._useQcSku)
1506
+ // Filter out items that are already LOADED (safety check)
1507
+ this.loadingData = (this.loadingData || []).filter(
1508
+ data => data?.status !== WORKSHEET_STATUS.DONE.value
1509
+ )
1425
1510
  }}
1426
1511
  ></warehouse-return-popup>
1427
1512
  `,
@@ -1435,7 +1520,7 @@ export class LoadingExecutionBase extends LitElement {
1435
1520
 
1436
1521
  async fetchData(orderNo, tab, useQcSku) {
1437
1522
  try {
1438
- // Otherwise, use FIND_LOADABLE_RELEASE_GOOD_BY_BIN for both QC and LOADING tabs when useQcSku is true (bin scan)
1523
+ // Use FIND_LOADABLE_RELEASE_GOOD_BY_BIN for both QC and LOADING tabs when useQcSku is true (bin scan)
1439
1524
  if (useQcSku && !this.worksheet?.isReleaseGoodScan) {
1440
1525
  const response = await client.query({
1441
1526
  query: FIND_LOADABLE_RELEASE_GOOD_BY_BIN,
@@ -1444,11 +1529,15 @@ export class LoadingExecutionBase extends LitElement {
1444
1529
 
1445
1530
  if (!response.errors) {
1446
1531
  const data = response.data.findLoadableReleaseGoodByBin.worksheetDetailInfos
1532
+
1447
1533
  // Check if any order inventory has refWorksheetId
1448
1534
  this._hasRefWorksheetId = data.some(
1449
1535
  item => item?.relatedOrderInv?.refWorksheetId != null && item?.relatedOrderInv?.refWorksheetId !== ''
1450
1536
  )
1451
- return combineSameProducts(data)
1537
+ // Combine same products for better UX display, but preserve all order inventory references
1538
+ // so backend can distribute loadedQty across multiple order inventories
1539
+ const combined = combineSameProductsWithAllRefs(data)
1540
+ return combined
1452
1541
  }
1453
1542
  } else {
1454
1543
  const response = await client.query({
@@ -1500,19 +1589,45 @@ function resetContext(target) {
1500
1589
  target.configContext()
1501
1590
  }
1502
1591
 
1503
- function combineSameProducts(data) {
1592
+ /**
1593
+ * Combines same products for UI display while preserving ALL order inventory references.
1594
+ * This allows the backend to distribute loadedQty across multiple order inventories.
1595
+ *
1596
+ * @param {Array} data - Array of worksheet detail items
1597
+ * @returns {Array} Combined items with aggregated quantities and allRelatedOrderInvs array
1598
+ */
1599
+ function combineSameProductsWithAllRefs(data) {
1504
1600
  const combinedMap = new Map()
1505
1601
 
1506
1602
  data.forEach(item => {
1507
- const key = `${item.relatedOrderInv?.product?.sku}_${item.batchId}_${item.expirationDate}`
1603
+ // Include status in key to keep LOADING and LOADED items separate
1604
+ const key = `${item.relatedOrderInv?.product?.sku}_${item.batchId}_${item.expirationDate}_${item.status}`
1508
1605
 
1509
1606
  if (combinedMap.has(key)) {
1510
1607
  const existing = combinedMap.get(key)
1511
1608
  existing.releaseQty += item.releaseQty
1512
1609
  existing.pickedQty += item.pickedQty
1513
1610
  existing.sortedQty += item.sortedQty
1611
+ // Store all order inventory references for backend to process
1612
+ existing.allRelatedOrderInvs.push({
1613
+ id: item.relatedOrderInv?.id,
1614
+ pickedQty: item.pickedQty,
1615
+ sortedQty: item.sortedQty,
1616
+ releaseQty: item.releaseQty
1617
+ })
1514
1618
  } else {
1515
- combinedMap.set(key, { ...item })
1619
+ combinedMap.set(key, {
1620
+ ...item,
1621
+ // Initialize array with first order inventory reference
1622
+ allRelatedOrderInvs: [
1623
+ {
1624
+ id: item.relatedOrderInv?.id,
1625
+ pickedQty: item.pickedQty,
1626
+ sortedQty: item.sortedQty,
1627
+ releaseQty: item.releaseQty
1628
+ }
1629
+ ]
1630
+ })
1516
1631
  }
1517
1632
  })
1518
1633
 
@@ -115,6 +115,21 @@ const transformToWorksheetFormat = (orderInventories, releaseGood) => {
115
115
  binLocation: {
116
116
  name: (_b = oi.binLocation) === null || _b === void 0 ? void 0 : _b.name
117
117
  },
118
+ // Include releaseGood for each item to support filtering by release order in bin scan mode
119
+ releaseGood: oi.releaseGood
120
+ ? {
121
+ id: oi.releaseGood.id,
122
+ name: oi.releaseGood.name,
123
+ attentionCompany: oi.releaseGood.attentionCompany,
124
+ attentionTo: oi.releaseGood.attentionTo,
125
+ deliveryAddress1: oi.releaseGood.deliveryAddress1,
126
+ deliveryAddress2: oi.releaseGood.deliveryAddress2,
127
+ status: oi.releaseGood.status,
128
+ refNo: oi.releaseGood.refNo,
129
+ refNo2: oi.releaseGood.refNo2,
130
+ refNo3: oi.releaseGood.refNo3
131
+ }
132
+ : null,
118
133
  productName: (_d = (_c = oi.inventory) === null || _c === void 0 ? void 0 : _c.product) === null || _d === void 0 ? void 0 : _d.name,
119
134
  productSku: (_f = (_e = oi.inventory) === null || _e === void 0 ? void 0 : _e.product) === null || _f === void 0 ? void 0 : _f.sku,
120
135
  relatedOrderInv: {
@@ -1 +1 @@
1
- {"version":3,"file":"find-loadable-release-good-by-bin.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-loadable-release-good-by-bin.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.ts"],"names":[],"mappings":";;;AAEA,mEAAyD;AAEzD,2DAA8G;AAE9G;;;GAGG;AACH,MAAM,kBAAmB,SAAQ,KAAK;IACpC,YAAY,OAAe,EAAS,IAAY;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAA;QADoB,SAAI,GAAJ,IAAI,CAAQ;QAE9C,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,+BAA+B,GAAG,CAAC,EAAiB,EAAE,QAAgB,EAAE,OAAe,EAAE,EAAE;IAC/F,OAAO,EAAE;SACN,aAAa,CAAC,wBAAW,CAAC;SAC1B,kBAAkB,CAAC,aAAa,CAAC;SACjC,iBAAiB,CAAC,sBAAsB,EAAE,UAAU,CAAC;SACrD,KAAK,CAAC,mCAAmC,EAAE,EAAE,QAAQ,EAAE,CAAC;SACxD,QAAQ,CAAC,6BAA6B,EAAE,EAAE,OAAO,EAAE,CAAC;SACpD,QAAQ,CAAC,oCAAoC,EAAE;QAC9C,MAAM,EAAE,CAAC,yBAAY,CAAC,OAAO,EAAE,yBAAY,CAAC,UAAU,EAAE,yBAAY,CAAC,kBAAkB,EAAE,yBAAY,CAAC,IAAI,CAAC;KAC5G,CAAC,CAAA;AACN,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,wBAAwB,GAAG,CAC/B,EAAiB,EACjB,QAAgB,EAChB,OAAyD,EACzD,EAAE;IACF,MAAM,YAAY,GAAG,EAAE;SACpB,aAAa,CAAC,2BAAc,CAAC;SAC7B,kBAAkB,CAAC,gBAAgB,CAAC;SACpC,iBAAiB,CAAC,0BAA0B,EAAE,WAAW,CAAC;SAC1D,iBAAiB,CAAC,mBAAmB,EAAE,SAAS,CAAC;SACjD,iBAAiB,CAAC,yBAAyB,EAAE,eAAe,CAAC;SAC7D,iBAAiB,CAAC,4BAA4B,EAAE,aAAa,CAAC;SAC9D,kBAAkB,CAAC,4BAA4B,EAAE,aAAa,CAAC;SAC/D,KAAK,CAAC,sCAAsC,EAAE,EAAE,QAAQ,EAAE,CAAC;SAC3D,QAAQ,CAAC,qDAAqD,EAAE;QAC/D,oBAAoB,EAAE;YACpB,mCAAsB,CAAC,OAAO;YAC9B,mCAAsB,CAAC,OAAO;YAC9B,mCAAsB,CAAC,MAAM;SAC9B;KACF,CAAC,CAAA;IAEJ,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,EAAE;QACvB,YAAY,CAAC,QAAQ,CAAC,8CAA8C,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;KAC1G;IAED,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,EAAE;QAC1B,YAAY,CAAC,QAAQ,CAAC,iDAAiD,EAAE,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAA;KACnH;IAED,OAAO,YAAY,CAAC,OAAO,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAA;AAChE,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,0BAA0B,GAAG,CAAC,gBAAkC,EAAE,WAAyB,EAAE,EAAE;;IACnG,IAAI,CAAC,gBAAgB,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAEzC,oCAAoC;IACpC,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,WAAC,OAAA,MAAA,EAAE,CAAC,WAAW,0CAAE,IAAI,CAAA,EAAA,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAEzG,8DAA8D;IAC9D,MAAM,gBAAgB,GAAG,WAAW,KAAI,MAAA,gBAAgB,CAAC,CAAC,CAAC,0CAAE,WAAW,CAAA,CAAA;IAExE,OAAO;QACL,aAAa,EAAE;YACb,SAAS,EAAE;gBACT,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,IAAI;gBACV,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,IAAI;aACb;YACD,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,gBAAgB;gBAC3B,CAAC,CAAC;oBACE,EAAE,EAAE,gBAAgB,CAAC,EAAE;oBACvB,IAAI,EAAE,gBAAgB,CAAC,IAAI;oBAC3B,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB;oBACnD,WAAW,EAAE,gBAAgB,CAAC,WAAW;oBACzC,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB;oBACnD,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB;oBACnD,MAAM,EAAE,gBAAgB,CAAC,MAAM;oBAC/B,KAAK,EAAE,gBAAgB,CAAC,KAAK;oBAC7B,MAAM,EAAE,gBAAgB,CAAC,MAAM;oBAC/B,MAAM,EAAE,gBAAgB,CAAC,MAAM;iBAChC;gBACH,CAAC,CAAC,IAAI;YACR,eAAe,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,iBAAiB,EAAE,CAAC,CAAC,WAAW,CAAC,qEAAqE;SACvG;QACD,oBAAoB,EAAE,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;;YAAC,OAAA,CAAC;gBAChD,EAAE,EAAE,IAAI;gBACR,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,EAAE,CAAC,OAAO;gBACnB,UAAU,EAAE,EAAE,CAAC,UAAU;gBACzB,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,WAAW,EAAE,EAAE,CAAC,WAAW;gBAC3B,cAAc,EAAE,MAAA,EAAE,CAAC,SAAS,0CAAE,cAAc;gBAC5C,WAAW,EAAE;oBACX,IAAI,EAAE,MAAA,EAAE,CAAC,WAAW,0CAAE,IAAI;iBAC3B;gBACD,2FAA2F;gBAC3F,WAAW,EAAE,EAAE,CAAC,WAAW;oBACzB,CAAC,CAAC;wBACE,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE;wBACrB,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI;wBACzB,gBAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,gBAAgB;wBACjD,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,WAAW;wBACvC,gBAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,gBAAgB;wBACjD,gBAAgB,EAAE,EAAE,CAAC,WAAW,CAAC,gBAAgB;wBACjD,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM;wBAC7B,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK;wBAC3B,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM;wBAC7B,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM;qBAC9B;oBACH,CAAC,CAAC,IAAI;gBACR,WAAW,EAAE,MAAA,MAAA,EAAE,CAAC,SAAS,0CAAE,OAAO,0CAAE,IAAI;gBACxC,UAAU,EAAE,MAAA,MAAA,EAAE,CAAC,SAAS,0CAAE,OAAO,0CAAE,GAAG;gBACtC,eAAe,EAAE;oBACf,EAAE,EAAE,EAAE,CAAC,EAAE;oBACT,OAAO,EAAE,EAAE,CAAC,OAAO;oBACnB,WAAW,EAAE,EAAE,CAAC,WAAW;oBAC3B,cAAc,EAAE,EAAE,CAAC,cAAc;oBACjC,OAAO,EAAE,CAAA,MAAA,EAAE,CAAC,SAAS,0CAAE,OAAO;wBAC5B,CAAC,CAAC;4BACE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;4BAC3B,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG;4BAC7B,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI;yBAChC;wBACH,CAAC,CAAC,IAAI;oBACR,aAAa,EAAE,CAAA,MAAA,EAAE,CAAC,SAAS,0CAAE,aAAa;wBACxC,CAAC,CAAC;4BACE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;yBAClC;wBACH,CAAC,CAAC,IAAI;iBACT;aACF,CAAC,CAAA;SAAA,CAAC;KACJ,CAAA;AACH,CAAC,CAAA;AAED;;;;;;;GAOG;AACU,QAAA,4BAA4B,GAAG;IAC1C,KAAK,CAAC,4BAA4B,CAAC,CAAM,EAAE,EAAE,OAAO,EAAuB,EAAE,OAAY;QACvF,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAA0C,OAAO,CAAC,KAAK,CAAA;QAE3E,IAAI,mBAAmB,GAAqB,EAAE,CAAA;QAE9C,IAAI,gBAAgB,GAAgB,MAAM,+BAA+B,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CAAA;QAE1G,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,IAAI,yBAAY,CAAC,IAAI,EAAE;YACpE,MAAM,IAAI,kBAAkB,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAA;SACjE;aAAM,IAAI,gBAAgB,EAAE;YAC3B,+FAA+F;YAC/F,mBAAmB,GAAG,MAAM,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;gBAClE,aAAa,EAAE,gBAAgB,CAAC,EAAE;aACnC,CAAC,CAAC,OAAO,EAAE,CAAA;YAEZ,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClC,gEAAgE;gBAChE,OAAO,0BAA0B,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,CAAA;aACzE;iBAAM;gBACL,MAAM,IAAI,kBAAkB,CAAC,gCAAgC,EAAE,mBAAmB,CAAC,CAAA;aACpF;SACF;aAAM;YACL,8BAA8B;YAC9B,MAAM,WAAW,GAAa,MAAM,EAAE,CAAC,aAAa,CAAC,yBAAQ,CAAC,CAAC,OAAO,CAAC;gBACrE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;aACjC,CAAC,CAAA;YAEF,IAAI,WAAW,EAAE;gBACf,mBAAmB,GAAG,MAAM,wBAAwB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAA;aAC9G;YAED,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE;gBAClC,OAAO,0BAA0B,CAAC,mBAAmB,CAAC,CAAA;aACvD;iBAAM;gBACL,MAAM,IAAI,kBAAkB,CAAC,8BAA8B,EAAE,iBAAiB,CAAC,CAAA;aAChF;SACF;IACH,CAAC;CACF,CAAA"}
@@ -34,18 +34,19 @@ async function getInventoryCounts(tx, domainId, releaseGoodId, binLocationId) {
34
34
  }
35
35
  /**
36
36
  * Assigns itemCounts and tabCounts to a release good based on inventory counts
37
+ *
38
+ * Business logic for "completed" items:
39
+ * - QC tab: completed = items that passed QC (LOADING + LOADED status)
40
+ * - LOADING tab: completed = items that were loaded (LOADED status)
41
+ * - LOADED tab: completed = items that are loaded (LOADED status)
37
42
  */
38
43
  function assignCountsToReleaseGood(releaseGood, counts, tabName, isBinScan = false) {
39
44
  const { loadingTotal, loadingCompleted, loadedTotal, loadedCompleted, total } = counts;
40
45
  // Calculate completed count for current tab (backward compatibility)
41
- let currentCompleted;
42
- if (isBinScan) {
43
- currentCompleted = tabName === 'LOADING' ? loadingTotal : loadedTotal;
44
- }
45
- else {
46
- // ORDER scan: QC tab considers LOADING+LOADED as completed
47
- currentCompleted = tabName === 'QC' ? loadingTotal + loadedTotal : loadedTotal;
48
- }
46
+ // For QC tab: completed = items that passed QC (LOADING + LOADED)
47
+ // For LOADING/LOADED tabs: completed = items that are loaded (LOADED)
48
+ // This logic applies to both BIN scan and ORDER scan
49
+ const currentCompleted = tabName === 'QC' ? loadingTotal + loadedTotal : loadedTotal;
49
50
  // Backward compatibility: itemCounts for current tab
50
51
  releaseGood['itemCounts'] = {
51
52
  total,
@@ -1 +1 @@
1
- {"version":3,"file":"find-loadable-release-good.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/outbound/find-loadable-release-good.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-loadable-release-good.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/outbound/find-loadable-release-good.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ const worksheet_base_1 = require("@things-factory/worksheet-base");
8
8
  const warehouse_base_1 = require("@things-factory/warehouse-base");
9
9
  exports.loadByQty = {
10
10
  async loadByQty(_, { worksheetDetailPatch }, context) {
11
- var _a;
11
+ var _a, _b, _c;
12
12
  try {
13
13
  const { domain, user, tx } = context.state;
14
14
  console.time('load');
@@ -52,52 +52,122 @@ exports.loadByQty = {
52
52
  });
53
53
  const updatedOrderInventories = [];
54
54
  for (const wsd of updatedWorksheetDetails) {
55
- //find the respective wsd and oi to update
56
- const foundWorksheetDetail = worksheet.worksheetDetails.find(foundWsd => foundWsd.name === wsd.name);
57
- let orderInventory = orderInventories.find(oi => oi.id === foundWorksheetDetail.targetInventory.id);
58
- //validate oi status and do is not yet generated
59
- if (orderInventory.status === sales_base_1.ORDER_INVENTORY_STATUS.LOADED || orderInventory.deliveryOrderId !== null) {
60
- continue;
55
+ // Check if this is combined data with multiple order inventory references
56
+ // (from bin scan flow with combineSameProductsWithAllRefs)
57
+ if (wsd.allRelatedOrderInvs && wsd.allRelatedOrderInvs.length > 0) {
58
+ // Combined mode: distribute loadedQty across multiple order inventories (FIFO)
59
+ let remainingLoadQty = wsd.loadedQty;
60
+ for (const ref of wsd.allRelatedOrderInvs) {
61
+ if (remainingLoadQty <= 0)
62
+ break;
63
+ let orderInventory = orderInventories.find(oi => oi.id === ref.id);
64
+ if (!orderInventory)
65
+ continue;
66
+ const foundWorksheetDetail = worksheet.worksheetDetails.find(foundWsd => foundWsd.targetInventory.id === orderInventory.id);
67
+ if (!foundWorksheetDetail)
68
+ continue;
69
+ // Skip if already loaded or DO generated
70
+ if (orderInventory.status === sales_base_1.ORDER_INVENTORY_STATUS.LOADED || orderInventory.deliveryOrderId !== null) {
71
+ continue;
72
+ }
73
+ // Calculate how much to load from this order inventory
74
+ const availableQty = orderInventory.pickedQty;
75
+ const qtyToLoad = Math.min(remainingLoadQty, availableQty);
76
+ remainingLoadQty -= qtyToLoad;
77
+ if (qtyToLoad === orderInventory.releaseQty) {
78
+ // Full load - mark as LOADED
79
+ orderInventory = Object.assign(Object.assign({}, orderInventory), { status: sales_base_1.ORDER_INVENTORY_STATUS.LOADED, updater: user, updatedAt: new Date() });
80
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).update(foundWorksheetDetail.id, {
81
+ status: worksheet_base_1.WORKSHEET_STATUS.DONE,
82
+ updater: user,
83
+ updatedAt: new Date()
84
+ });
85
+ }
86
+ else if (qtyToLoad < orderInventory.releaseQty && qtyToLoad > 0) {
87
+ // Partial load - split order inventory
88
+ const remainingOiQty = orderInventory.releaseQty - qtyToLoad;
89
+ const newOrderInventory = tx.getRepository(sales_base_1.OrderInventory).create(Object.assign(Object.assign({}, orderInventory), { id: undefined, name: sales_base_1.OrderNoGenerator.orderInventory(), releaseQty: remainingOiQty, releaseUomValue: (orderInventory.releaseUomValue / orderInventory.releaseQty) * remainingOiQty, pickedQty: orderInventory.pickedQty - qtyToLoad, sortedQty: orderInventory.sortedQty === 0 ? 0 : orderInventory.sortedQty - qtyToLoad, status: orderInventory.status, updater: user, updatedAt: new Date() }));
90
+ await tx.getRepository(sales_base_1.OrderInventory).save(newOrderInventory);
91
+ const newWorksheetDetail = tx.getRepository(worksheet_base_1.WorksheetDetail).create(Object.assign(Object.assign({}, foundWorksheetDetail), { id: undefined, name: `LOAD-DETAIL-` + (0, uuid_1.v4)(), worksheet: worksheet, targetInventory: newOrderInventory, status: worksheet_base_1.WORKSHEET_STATUS.EXECUTING, updater: user, updatedAt: new Date() }));
92
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).save(newWorksheetDetail);
93
+ orderInventory = Object.assign(Object.assign({}, orderInventory), { status: sales_base_1.ORDER_INVENTORY_STATUS.LOADED, releaseUomValue: (orderInventory.releaseUomValue / orderInventory.releaseQty) * qtyToLoad, releaseQty: qtyToLoad, pickedQty: qtyToLoad, sortedQty: qtyToLoad, updater: user, updatedAt: new Date() });
94
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).update(foundWorksheetDetail.id, {
95
+ status: worksheet_base_1.WORKSHEET_STATUS.DONE,
96
+ updater: user,
97
+ updatedAt: new Date()
98
+ });
99
+ }
100
+ else {
101
+ // qtyToLoad is 0, skip this order inventory
102
+ continue;
103
+ }
104
+ const inventory = await tx.getRepository(warehouse_base_1.Inventory).findOne({
105
+ where: { id: orderInventory.inventoryId }
106
+ });
107
+ await (0, warehouse_base_1.generateInventoryHistory)(inventory, releaseGood, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.LOADING, 0, 0, user, tx);
108
+ updatedOrderInventories.push(orderInventory);
109
+ }
110
+ // Validate that all requested quantity was loaded
111
+ if (remainingLoadQty > 0) {
112
+ console.warn(`Could not fully distribute loadedQty for SKU ${wsd.productSku}. Remaining: ${remainingLoadQty}`);
113
+ }
61
114
  }
62
- // compare with sort qty
63
- if (wsd.loadedQty > orderInventory.pickedQty) {
64
- throw new Error('Load qty is more than picked qty for sku ' + wsd.productSku);
65
- }
66
- else if (wsd.loadedQty == orderInventory.releaseQty) {
67
- //compare load qty to release, if order is partially picked, has to split oi
68
- //update oi
69
- orderInventory = Object.assign(Object.assign({}, orderInventory), { status: sales_base_1.ORDER_INVENTORY_STATUS.LOADED, updater: user, updatedAt: new Date() });
70
- //update wsd
71
- await tx.getRepository(worksheet_base_1.WorksheetDetail).update(foundWorksheetDetail.id, {
72
- status: worksheet_base_1.WORKSHEET_STATUS.DONE,
73
- updater: user,
74
- updatedAt: new Date()
75
- });
76
- }
77
- else if (wsd.loadedQty < orderInventory.releaseQty) {
78
- //split oi
79
- //create new order inventory with remaining quantity
80
- const remainingQty = orderInventory.releaseQty - wsd.loadedQty;
81
- const newOrderInventory = tx.getRepository(sales_base_1.OrderInventory).create(Object.assign(Object.assign({}, orderInventory), { id: undefined, name: sales_base_1.OrderNoGenerator.orderInventory(), releaseQty: remainingQty, releaseUomValue: (orderInventory.releaseUomValue / orderInventory.releaseQty) * remainingQty, pickedQty: orderInventory.pickedQty - wsd.loadedQty, sortedQty: orderInventory.sortedQty === 0 ? 0 : orderInventory.sortedQty - wsd.loadedQty, status: orderInventory.status, updater: user, updatedAt: new Date() }));
82
- await tx.getRepository(sales_base_1.OrderInventory).save(newOrderInventory);
83
- //create new worksheet detail for the new order inventory
84
- const newWorksheetDetail = tx.getRepository(worksheet_base_1.WorksheetDetail).create(Object.assign(Object.assign({}, foundWorksheetDetail), { id: undefined, name: `LOAD-DETAIL-` + (0, uuid_1.v4)(), worksheet: worksheet, targetInventory: newOrderInventory, status: worksheet_base_1.WORKSHEET_STATUS.EXECUTING, updater: user, updatedAt: new Date() }));
85
- await tx.getRepository(worksheet_base_1.WorksheetDetail).save(newWorksheetDetail);
86
- //update current order inventory to loaded with loaded quantity
87
- orderInventory = Object.assign(Object.assign({}, orderInventory), { status: sales_base_1.ORDER_INVENTORY_STATUS.LOADED, releaseUomValue: (orderInventory.releaseUomValue / orderInventory.releaseQty) * wsd.loadedQty, releaseQty: wsd.loadedQty, pickedQty: wsd.loadedQty, sortedQty: wsd.loadedQty, updater: user, updatedAt: new Date() });
88
- //update current wsd
89
- await tx.getRepository(worksheet_base_1.WorksheetDetail).update(foundWorksheetDetail.id, {
90
- status: worksheet_base_1.WORKSHEET_STATUS.DONE,
91
- updater: user,
92
- updatedAt: new Date()
115
+ else {
116
+ // Standard mode: single order inventory reference
117
+ // Support both:
118
+ // 1. Match by worksheetDetail name (when using LOADING_WORKSHEET_V2 query)
119
+ // 2. Match by relatedOrderInv.id (when name is null)
120
+ let foundWorksheetDetail;
121
+ let orderInventory;
122
+ if (wsd.name) {
123
+ foundWorksheetDetail = worksheet.worksheetDetails.find(foundWsd => foundWsd.name === wsd.name);
124
+ if (foundWorksheetDetail) {
125
+ orderInventory = orderInventories.find(oi => oi.id === foundWorksheetDetail.targetInventory.id);
126
+ }
127
+ }
128
+ if (!foundWorksheetDetail && ((_a = wsd.relatedOrderInv) === null || _a === void 0 ? void 0 : _a.id)) {
129
+ orderInventory = orderInventories.find(oi => oi.id === wsd.relatedOrderInv.id);
130
+ if (orderInventory) {
131
+ foundWorksheetDetail = worksheet.worksheetDetails.find(foundWsd => foundWsd.targetInventory.id === orderInventory.id);
132
+ }
133
+ }
134
+ if (!foundWorksheetDetail || !orderInventory) {
135
+ console.warn(`Could not find worksheet detail or order inventory for item: ${JSON.stringify({ name: wsd.name, relatedOrderInvId: (_b = wsd.relatedOrderInv) === null || _b === void 0 ? void 0 : _b.id, productSku: wsd.productSku })}`);
136
+ continue;
137
+ }
138
+ if (orderInventory.status === sales_base_1.ORDER_INVENTORY_STATUS.LOADED || orderInventory.deliveryOrderId !== null) {
139
+ continue;
140
+ }
141
+ if (wsd.loadedQty > orderInventory.pickedQty) {
142
+ throw new Error('Load qty is more than picked qty for sku ' + wsd.productSku);
143
+ }
144
+ else if (wsd.loadedQty == orderInventory.releaseQty) {
145
+ orderInventory = Object.assign(Object.assign({}, orderInventory), { status: sales_base_1.ORDER_INVENTORY_STATUS.LOADED, updater: user, updatedAt: new Date() });
146
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).update(foundWorksheetDetail.id, {
147
+ status: worksheet_base_1.WORKSHEET_STATUS.DONE,
148
+ updater: user,
149
+ updatedAt: new Date()
150
+ });
151
+ }
152
+ else if (wsd.loadedQty < orderInventory.releaseQty) {
153
+ const remainingQty = orderInventory.releaseQty - wsd.loadedQty;
154
+ const newOrderInventory = tx.getRepository(sales_base_1.OrderInventory).create(Object.assign(Object.assign({}, orderInventory), { id: undefined, name: sales_base_1.OrderNoGenerator.orderInventory(), releaseQty: remainingQty, releaseUomValue: (orderInventory.releaseUomValue / orderInventory.releaseQty) * remainingQty, pickedQty: orderInventory.pickedQty - wsd.loadedQty, sortedQty: orderInventory.sortedQty === 0 ? 0 : orderInventory.sortedQty - wsd.loadedQty, status: orderInventory.status, updater: user, updatedAt: new Date() }));
155
+ await tx.getRepository(sales_base_1.OrderInventory).save(newOrderInventory);
156
+ const newWorksheetDetail = tx.getRepository(worksheet_base_1.WorksheetDetail).create(Object.assign(Object.assign({}, foundWorksheetDetail), { id: undefined, name: `LOAD-DETAIL-` + (0, uuid_1.v4)(), worksheet: worksheet, targetInventory: newOrderInventory, status: worksheet_base_1.WORKSHEET_STATUS.EXECUTING, updater: user, updatedAt: new Date() }));
157
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).save(newWorksheetDetail);
158
+ orderInventory = Object.assign(Object.assign({}, orderInventory), { status: sales_base_1.ORDER_INVENTORY_STATUS.LOADED, releaseUomValue: (orderInventory.releaseUomValue / orderInventory.releaseQty) * wsd.loadedQty, releaseQty: wsd.loadedQty, pickedQty: wsd.loadedQty, sortedQty: wsd.loadedQty, updater: user, updatedAt: new Date() });
159
+ await tx.getRepository(worksheet_base_1.WorksheetDetail).update(foundWorksheetDetail.id, {
160
+ status: worksheet_base_1.WORKSHEET_STATUS.DONE,
161
+ updater: user,
162
+ updatedAt: new Date()
163
+ });
164
+ }
165
+ const inventory = await tx.getRepository(warehouse_base_1.Inventory).findOne({
166
+ where: { id: orderInventory.inventoryId }
93
167
  });
168
+ await (0, warehouse_base_1.generateInventoryHistory)(inventory, releaseGood, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.LOADING, 0, 0, user, tx);
169
+ updatedOrderInventories.push(orderInventory);
94
170
  }
95
- const inventory = await tx.getRepository(warehouse_base_1.Inventory).findOne({
96
- where: { id: orderInventory.inventoryId }
97
- });
98
- // generate inventory history
99
- await (0, warehouse_base_1.generateInventoryHistory)(inventory, releaseGood, warehouse_base_1.INVENTORY_TRANSACTION_TYPE.LOADING, 0, 0, user, tx);
100
- updatedOrderInventories.push(orderInventory);
101
171
  }
102
172
  if (updatedOrderInventories.length < 1) {
103
173
  return false;
@@ -107,7 +177,7 @@ exports.loadByQty = {
107
177
  truckNo: worksheetDetailPatch === null || worksheetDetailPatch === void 0 ? void 0 : worksheetDetailPatch.vehicleNo,
108
178
  ownCollection: worksheetDetailPatch === null || worksheetDetailPatch === void 0 ? void 0 : worksheetDetailPatch.ownCollection,
109
179
  totalPalletQty: worksheetDetailPatch === null || worksheetDetailPatch === void 0 ? void 0 : worksheetDetailPatch.palletQty,
110
- contactPointRefId: ((_a = releaseGood.deliverTo) === null || _a === void 0 ? void 0 : _a.id) || null
180
+ contactPointRefId: ((_c = releaseGood.deliverTo) === null || _c === void 0 ? void 0 : _c.id) || null
111
181
  };
112
182
  const createdDo = await (0, sales_base_1.generateDeliveryOrder)(deliveryOrder, updatedOrderInventories, releaseGood.bizplace, releaseGood, domain, user, tx);
113
183
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"load-by-qty.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/outbound/load-by-qty.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"load-by-qty.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/outbound/load-by-qty.ts"],"names":[],"mappings":"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"}