@things-factory/operato-wms 4.3.767 → 4.3.770

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 (46) hide show
  1. package/client/pages/bulk-operation/validate-gan-popup.js +2 -2
  2. package/client/pages/components/list-view/product-list-view.js +28 -3
  3. package/client/pages/components/mobile-condition-of-goods-listing.js +342 -0
  4. package/client/pages/components/unloading-worksheet-information-popup.js +299 -0
  5. package/client/pages/constants/order.js +7 -0
  6. package/client/pages/inbound/condition-of-goods-popup.js +646 -0
  7. package/client/pages/inbound/putaway/putaway-product.js +35 -6
  8. package/client/pages/inbound/unload-product-landing-page.js +282 -0
  9. package/client/pages/inbound/unload-product.js +707 -175
  10. package/client/pages/inbound/unloaded-inventories-popup.js +3 -0
  11. package/client/pages/inventory/inventory-adjustment-approval.js +28 -1
  12. package/client/pages/inventory/inventory-adjustment.js +77 -44
  13. package/client/pages/inventory/inventory-by-product-detail.js +15 -0
  14. package/client/pages/inventory/inventory-history.js +18 -0
  15. package/client/pages/inventory/onhand-inventory.js +14 -0
  16. package/client/pages/order/arrival-notice/create-arrival-notice.js +209 -206
  17. package/client/pages/order/arrival-notice/duplicate-arrival-notice.js +132 -129
  18. package/client/pages/order/arrival-notice/edit-product-popup.js +97 -92
  19. package/client/pages/order/release-order/b2b/b2b-order-list.js +99 -0
  20. package/client/pages/order/release-order/packing-label-history-popup.js +378 -0
  21. package/client/pages/order/release-order/preview-print-packing-list.js +533 -0
  22. package/client/pages/order/release-order/print-quantity-popup.js +118 -0
  23. package/client/pages/outbound/loading-v2/loading-execution-base.js +29 -0
  24. package/client/pages/outbound/loading-v2/loading-execution.js +579 -2
  25. package/client/pages/outbound/loading-v2/loading-package-info-popup.js +182 -0
  26. package/client/pages/outbound/loading-v2/loading.js +18 -0
  27. package/client/pages/report/inbound-order-details-report.js +26 -1
  28. package/client/route.js +17 -0
  29. package/dist-server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.js +9 -1
  30. package/dist-server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.js.map +1 -1
  31. package/dist-server/graphql/resolvers/outbound/loading-worksheet-v2.js +11 -5
  32. package/dist-server/graphql/resolvers/outbound/loading-worksheet-v2.js.map +1 -1
  33. package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js +2 -1
  34. package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js.map +1 -1
  35. package/dist-server/graphql/types/reports/inbound-order-details-report.js +1 -0
  36. package/dist-server/graphql/types/reports/inbound-order-details-report.js.map +1 -1
  37. package/package.json +15 -15
  38. package/server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.ts +9 -1
  39. package/server/graphql/resolvers/outbound/loading-worksheet-v2.ts +13 -1
  40. package/server/graphql/resolvers/reports/inbound-order-details-report.ts +2 -1
  41. package/server/graphql/types/reports/inbound-order-details-report.ts +1 -0
  42. package/things-factory.config.js +8 -0
  43. package/translations/en.json +45 -1
  44. package/translations/ko.json +40 -0
  45. package/translations/ms.json +40 -0
  46. package/translations/zh.json +40 -0
@@ -29,6 +29,8 @@ class UnloadedInventoriesPopup extends connect(store)(localize(i18next)(LitEleme
29
29
  flex-direction: column;
30
30
  flex: 1;
31
31
  overflow-y: auto;
32
+ --grid-record-odd-background-color: var(--theme-white-color);
33
+ --data-list-background-color: var(--theme-white-color);
32
34
  }
33
35
  :host {
34
36
  padding: 10px;
@@ -36,6 +38,7 @@ class UnloadedInventoriesPopup extends connect(store)(localize(i18next)(LitEleme
36
38
  flex-direction: column;
37
39
  overflow-x: overlay;
38
40
  background-color: var(--main-section-background-color);
41
+ --data-list-label-text-transform: capitalize;
39
42
  }
40
43
  `
41
44
  ]
@@ -8,6 +8,7 @@ import { connect } from 'pwa-helpers/connect-mixin'
8
8
 
9
9
  import { getCodeByName } from '@things-factory/code-base'
10
10
  import { i18next, localize } from '@things-factory/i18n-base'
11
+ import { CONDITION_OF_GOODS } from '../constants'
11
12
  import { client, PageView, store, gqlContext } from '@things-factory/shell'
12
13
  import { CommonButtonStyles, ScrollbarStyles } from '@things-factory/styles'
13
14
  import { isMobileDevice } from '@things-factory/utils'
@@ -147,6 +148,7 @@ class InventoryAdjustmentApproval extends connect(store)(localize(i18next)(PageV
147
148
  { column: 'qty', name: 'Quantity' },
148
149
  { column: 'uom', name: 'Uom' },
149
150
  { column: 'uomValue', name: 'UomValue' },
151
+ { column: 'conditionOfGoods', name: 'Inventory Quality' },
150
152
  { column: 'expirationDate', name: 'Exp. Date' },
151
153
  { column: 'manufactureDate', name: 'Mfg. Date' },
152
154
  { column: 'unitCost', name: 'Unit Cost' },
@@ -198,10 +200,18 @@ class InventoryAdjustmentApproval extends connect(store)(localize(i18next)(PageV
198
200
  if (compareData == null) {
199
201
  this._compareColumn.map(item => {
200
202
  if (record[item.column]) {
203
+ let updateVal =
204
+ typeof record[item.column] === 'object' ? record[item.column].name : record[item.column]
205
+
206
+ // Translate conditionOfGoods value
207
+ if (item.column === 'conditionOfGoods' && updateVal) {
208
+ updateVal = this._getConditionOfGoodsLabel(updateVal)
209
+ }
210
+
201
211
  recordDiff.push({
202
212
  column: item.name,
203
213
  current: '[N/A]',
204
- update: typeof record[item.column] === 'object' ? record[item.column].name : record[item.column]
214
+ update: updateVal
205
215
  })
206
216
  }
207
217
  })
@@ -220,6 +230,16 @@ class InventoryAdjustmentApproval extends connect(store)(localize(i18next)(PageV
220
230
  updatedVal = record[item.column]?.name || record[item.column] || '[N/A]'
221
231
  }
222
232
 
233
+ // Translate conditionOfGoods values
234
+ if (item.column === 'conditionOfGoods') {
235
+ if (currentVal && currentVal !== '[N/A]') {
236
+ currentVal = this._getConditionOfGoodsLabel(currentVal)
237
+ }
238
+ if (updatedVal && updatedVal !== '[N/A]') {
239
+ updatedVal = this._getConditionOfGoodsLabel(updatedVal)
240
+ }
241
+ }
242
+
223
243
  recordDiff.push({
224
244
  column: item.name,
225
245
  current: currentVal || '[N/A]',
@@ -446,6 +466,7 @@ class InventoryAdjustmentApproval extends connect(store)(localize(i18next)(PageV
446
466
  unitCost
447
467
  adjustmentCode
448
468
  adjustmentNote
469
+ conditionOfGoods
449
470
  sku
450
471
  bizplace {
451
472
  id
@@ -496,6 +517,7 @@ class InventoryAdjustmentApproval extends connect(store)(localize(i18next)(PageV
496
517
  unitCost
497
518
  adjustmentCode
498
519
  adjustmentNote
520
+ conditionOfGoods
499
521
  }
500
522
  lastInventoryHistory {
501
523
  batchId
@@ -762,6 +784,11 @@ class InventoryAdjustmentApproval extends connect(store)(localize(i18next)(PageV
762
784
  _getDateString(date) {
763
785
  return `${date.getDate()} ${date.toLocaleString('default', { month: 'short' })} ${date.getFullYear()}`
764
786
  }
787
+
788
+ _getConditionOfGoodsLabel(value) {
789
+ const condition = Object.values(CONDITION_OF_GOODS).find(c => c.value === value)
790
+ return condition ? i18next.t(`label.${condition.name}`) : value || ''
791
+ }
765
792
  }
766
793
 
767
794
  window.customElements.define('inventory-adjustment-approval', InventoryAdjustmentApproval)
@@ -22,6 +22,7 @@ import { fetchPageSettings } from '../../util/index'
22
22
  import {
23
23
  ADJUSTMENT_CODE,
24
24
  CARTON_LABEL_SETTING_KEY,
25
+ CONDITION_OF_GOODS,
25
26
  INVENTORY_ITEM_CHANGE_TYPE,
26
27
  PALLET_LABEL_SETTING_KEY
27
28
  } from '../constants'
@@ -85,7 +86,8 @@ const INVENTORY_PATCH_KEYS = new Set([
85
86
  'cuFlag',
86
87
  'transferQty',
87
88
  'transferUomValue',
88
- 'obsolete'
89
+ 'obsolete',
90
+ 'conditionOfGoods'
89
91
  ])
90
92
 
91
93
  const toCamelKey = key =>
@@ -649,6 +651,32 @@ class InventoryAdjustment extends connect(store)(localize(i18next)(PageView)) {
649
651
  sortable: true,
650
652
  width: 120
651
653
  },
654
+ {
655
+ type: 'select',
656
+ name: 'conditionOfGoods',
657
+ header: i18next.t('field.inventory_quality'),
658
+ record: {
659
+ editable: true,
660
+ options: [
661
+ { display: '', value: '' },
662
+ ...Object.values(CONDITION_OF_GOODS).map(c => ({
663
+ display: i18next.t(`label.${c.name}`),
664
+ value: c.value
665
+ }))
666
+ ]
667
+ },
668
+ imex: {
669
+ header: i18next.t('field.inventory_quality'),
670
+ key: 'conditionOfGoods',
671
+ width: 20,
672
+ type: 'array',
673
+ arrData: Object.values(CONDITION_OF_GOODS).map(c => {
674
+ return { name: c.value }
675
+ })
676
+ },
677
+ sortable: true,
678
+ width: 120
679
+ },
652
680
  {
653
681
  type: 'boolean',
654
682
  name: 'obsolete',
@@ -849,6 +877,7 @@ class InventoryAdjustment extends connect(store)(localize(i18next)(PageView)) {
849
877
  arrivalNoticeNo
850
878
  adjustmentCode
851
879
  adjustmentNote
880
+ conditionOfGoods
852
881
  }
853
882
  total
854
883
  }
@@ -881,6 +910,7 @@ class InventoryAdjustment extends connect(store)(localize(i18next)(PageView)) {
881
910
  adjustmentNote
882
911
  serialNumbers
883
912
  obsolete
913
+ conditionOfGoods
884
914
  refOrderId
885
915
  arrivalNoticeRefNo
886
916
  partnerDomain {
@@ -1220,6 +1250,9 @@ class InventoryAdjustment extends connect(store)(localize(i18next)(PageView)) {
1220
1250
  row.transferQty = toFloatOrUndefined(row.transferQty)
1221
1251
  row.transferUomValue = toFloatOrUndefined(row.transferUomValue)
1222
1252
 
1253
+ if (row?.batchId) row.batchId = row.batchId.trim()
1254
+ if (row?.batchIdRef) row.batchIdRef = row.batchIdRef.trim()
1255
+
1223
1256
  if (row?.inventoryItemChanges) {
1224
1257
  row.inventoryItemChangesJson = row.inventoryItemChanges
1225
1258
  delete row.inventoryItemChanges
@@ -1423,9 +1456,9 @@ class InventoryAdjustment extends connect(store)(localize(i18next)(PageView)) {
1423
1456
  <import-pop-up
1424
1457
  .records=${records}
1425
1458
  .config=${{
1426
- rows: this.config.rows,
1427
- columns: columns
1428
- }}
1459
+ rows: this.config.rows,
1460
+ columns: columns
1461
+ }}
1429
1462
  .importHandler="${this.importHandler.bind(this)}"
1430
1463
  @field-change="${this.fieldChange.bind(this)}"
1431
1464
  ></import-pop-up>
@@ -1604,15 +1637,15 @@ class InventoryAdjustment extends connect(store)(localize(i18next)(PageView)) {
1604
1637
  .title="${i18next.t('title.inventory_remark')}"
1605
1638
  .value="${record.remark}"
1606
1639
  @submit="${async e => {
1607
- await this.updateRemark(record.id, e.detail.value)
1640
+ await this.updateRemark(record.id, e.detail.value)
1608
1641
 
1609
- this.dataGrist._data = {
1610
- records: this.dataGrist._data.records.map(updateRecord => {
1611
- if (updateRecord.id === record.id) updateRecord.remark = e.detail.value
1612
- return updateRecord
1613
- })
1614
- }
1615
- }}"
1642
+ this.dataGrist._data = {
1643
+ records: this.dataGrist._data.records.map(updateRecord => {
1644
+ if (updateRecord.id === record.id) updateRecord.remark = e.detail.value
1645
+ return updateRecord
1646
+ })
1647
+ }
1648
+ }}"
1616
1649
  ></popup-note>
1617
1650
  `,
1618
1651
  {
@@ -1626,13 +1659,13 @@ class InventoryAdjustment extends connect(store)(localize(i18next)(PageView)) {
1626
1659
  openSerialNumberPopup(inventory, rowIndex, records) {
1627
1660
  const removable =
1628
1661
  inventory?.product?.isRequireSerialNumberScanningOutbound &&
1629
- inventory?.product?.isRequireSerialNumberScanningInbound
1662
+ inventory?.product?.isRequireSerialNumberScanningInbound
1630
1663
  ? true
1631
1664
  : false
1632
1665
 
1633
1666
  const updatable =
1634
1667
  inventory?.product?.isRequireSerialNumberScanningOutbound &&
1635
- inventory?.product?.isRequireSerialNumberScanningInbound
1668
+ inventory?.product?.isRequireSerialNumberScanningInbound
1636
1669
  ? true
1637
1670
  : false
1638
1671
 
@@ -1645,43 +1678,43 @@ class InventoryAdjustment extends connect(store)(localize(i18next)(PageView)) {
1645
1678
  .enableRemove=${removable}
1646
1679
  .enableUpdateBtn=${updatable}
1647
1680
  @confirm-serial-number-list="${e => {
1648
- let totalSerialNumber = 0
1649
- let newRecords = []
1650
- for (let i = 0; i < e.detail.inventoryItemChanges.length; i++) {
1651
- let inventoryItemChange = e.detail.inventoryItemChanges[i]
1652
- newRecords.push(inventoryItemChange)
1681
+ let totalSerialNumber = 0
1682
+ let newRecords = []
1683
+ for (let i = 0; i < e.detail.inventoryItemChanges.length; i++) {
1684
+ let inventoryItemChange = e.detail.inventoryItemChanges[i]
1685
+ newRecords.push(inventoryItemChange)
1653
1686
 
1654
- if (inventoryItemChange.type == INVENTORY_ITEM_CHANGE_TYPE.NEW.value) totalSerialNumber++
1687
+ if (inventoryItemChange.type == INVENTORY_ITEM_CHANGE_TYPE.NEW.value) totalSerialNumber++
1655
1688
 
1656
- if (inventoryItemChange.type == INVENTORY_ITEM_CHANGE_TYPE.REMOVED.value) totalSerialNumber--
1657
- }
1689
+ if (inventoryItemChange.type == INVENTORY_ITEM_CHANGE_TYPE.REMOVED.value) totalSerialNumber--
1690
+ }
1658
1691
 
1659
- let inventoryItemChangesJson = JSON.stringify(newRecords)
1660
- let currentInventoryItemCount = records[rowIndex]?.inventoryItemCount || 0
1692
+ let inventoryItemChangesJson = JSON.stringify(newRecords)
1693
+ let currentInventoryItemCount = records[rowIndex]?.inventoryItemCount || 0
1661
1694
 
1662
- this.dataGrist.dirtyData.records[rowIndex].inventoryItemChanges = inventoryItemChangesJson
1663
- this.dataGrist.dirtyData.records[rowIndex].inventoryItemCount =
1664
- currentInventoryItemCount + totalSerialNumber
1665
- if (!this.dataGrist?.dirtyData?.records[rowIndex]?.__dirtyfields__) {
1666
- this.dataGrist.dirtyData.records[rowIndex].__dirtyfields__ = {
1667
- inventoryItemChanges: { before: '', after: inventoryItemChangesJson }
1668
- }
1669
- } else {
1670
- this.dataGrist.dirtyData.records[rowIndex].__dirtyfields__ = {
1671
- ...this.dataGrist.dirtyData.records[rowIndex].__dirtyfields__,
1672
- inventoryItemChanges: {
1673
- before: '',
1674
- after: inventoryItemChangesJson
1675
- }
1695
+ this.dataGrist.dirtyData.records[rowIndex].inventoryItemChanges = inventoryItemChangesJson
1696
+ this.dataGrist.dirtyData.records[rowIndex].inventoryItemCount =
1697
+ currentInventoryItemCount + totalSerialNumber
1698
+ if (!this.dataGrist?.dirtyData?.records[rowIndex]?.__dirtyfields__) {
1699
+ this.dataGrist.dirtyData.records[rowIndex].__dirtyfields__ = {
1700
+ inventoryItemChanges: { before: '', after: inventoryItemChangesJson }
1701
+ }
1702
+ } else {
1703
+ this.dataGrist.dirtyData.records[rowIndex].__dirtyfields__ = {
1704
+ ...this.dataGrist.dirtyData.records[rowIndex].__dirtyfields__,
1705
+ inventoryItemChanges: {
1706
+ before: '',
1707
+ after: inventoryItemChangesJson
1676
1708
  }
1677
1709
  }
1678
- this.dataGrist.dirtyData.records[rowIndex].__dirty__ = 'M'
1710
+ }
1711
+ this.dataGrist.dirtyData.records[rowIndex].__dirty__ = 'M'
1679
1712
 
1680
- if (records[rowIndex]) {
1681
- records[rowIndex].inventoryItemChanges = inventoryItemChangesJson
1682
- records[rowIndex].inventoryItemCount = currentInventoryItemCount + totalSerialNumber
1683
- }
1684
- }}"
1713
+ if (records[rowIndex]) {
1714
+ records[rowIndex].inventoryItemChanges = inventoryItemChangesJson
1715
+ records[rowIndex].inventoryItemCount = currentInventoryItemCount + totalSerialNumber
1716
+ }
1717
+ }}"
1685
1718
  ></serial-number-list-popup>
1686
1719
  `,
1687
1720
  {
@@ -5,6 +5,7 @@ import './inventory-history-by-pallet'
5
5
  import gql from 'graphql-tag'
6
6
  import { css, html, LitElement } from 'lit-element'
7
7
 
8
+ import { CONDITION_OF_GOODS } from '../constants'
8
9
  import { i18next, localize } from '@things-factory/i18n-base'
9
10
  import { openPopup } from '@things-factory/layout-base'
10
11
  import { client } from '@things-factory/shell'
@@ -148,6 +149,19 @@ class InventoryByProductDetail extends localize(i18next)(LitElement) {
148
149
  sortable: true,
149
150
  width: 200
150
151
  },
152
+ {
153
+ type: 'string',
154
+ name: 'conditionOfGoods',
155
+ header: i18next.t('field.inventory_quality'),
156
+ sortable: true,
157
+ width: 120,
158
+ record: {
159
+ renderer: (value, column, record, rowIndex, field) => {
160
+ const condition = Object.values(CONDITION_OF_GOODS).find(c => c.value === value)
161
+ return condition ? i18next.t(`label.${condition.name}`) : value || ''
162
+ }
163
+ }
164
+ },
151
165
  {
152
166
  type: 'number',
153
167
  name: 'lockedQty',
@@ -229,6 +243,7 @@ class InventoryByProductDetail extends localize(i18next)(LitElement) {
229
243
  name
230
244
  description
231
245
  }
246
+ conditionOfGoods
232
247
  uom
233
248
  lockedQty
234
249
  qty
@@ -9,6 +9,8 @@ import { client, PageView } from '@things-factory/shell'
9
9
  import { ScrollbarStyles } from '@things-factory/styles'
10
10
  import { isMobileDevice } from '@things-factory/utils'
11
11
 
12
+ import { CONDITION_OF_GOODS } from '../constants/order'
13
+
12
14
  class InventoryHistory extends localize(i18next)(PageView) {
13
15
  static get styles() {
14
16
  return [
@@ -311,6 +313,19 @@ class InventoryHistory extends localize(i18next)(PageView) {
311
313
  sortable: true,
312
314
  width: 150
313
315
  },
316
+ {
317
+ type: 'string',
318
+ name: 'conditionOfGoods',
319
+ header: i18next.t('field.inventory_quality'),
320
+ sortable: true,
321
+ width: 150,
322
+ record: {
323
+ renderer: (value, column, record, rowIndex, field) => {
324
+ const condition = Object.values(CONDITION_OF_GOODS).find(c => c.value === value)
325
+ return condition ? i18next.t(`label.${condition.name}`) : value || ''
326
+ }
327
+ }
328
+ },
314
329
  {
315
330
  type: 'string',
316
331
  name: 'batchIdRef',
@@ -497,6 +512,7 @@ class InventoryHistory extends localize(i18next)(PageView) {
497
512
  name
498
513
  description
499
514
  }
515
+ conditionOfGoods
500
516
  status
501
517
  transactionType
502
518
  createdAt
@@ -591,6 +607,7 @@ class InventoryHistory extends localize(i18next)(PageView) {
591
607
  zone
592
608
  orderNo
593
609
  refNo
610
+ conditionOfGoods
594
611
  status
595
612
  transactionType
596
613
  bizplace
@@ -678,6 +695,7 @@ class InventoryHistory extends localize(i18next)(PageView) {
678
695
  { header: i18next.t('field.uom_value'), key: 'uomValue', width: 75, type: 'number' },
679
696
  { header: i18next.t('field.uom'), key: 'uom', width: 75, type: 'string' },
680
697
  { header: i18next.t('field.location'), key: 'location', width: 75, type: 'string' },
698
+ { header: i18next.t('field.inventory_quality'), key: 'conditionOfGoods', width: 75, type: 'string' },
681
699
  { header: i18next.t('field.batch_id'), key: 'batchId', width: 75, type: 'string' },
682
700
  { header: i18next.t('field.batch_no_ref'), key: 'batchIdRef', width: 75, type: 'string' },
683
701
  { header: i18next.t('field.order_no'), key: 'orderNo', width: 75, type: 'string' },
@@ -6,6 +6,7 @@ import { css, html } from 'lit-element'
6
6
  import { connect } from 'pwa-helpers/connect-mixin'
7
7
 
8
8
  import { getCodeByName } from '@things-factory/code-base'
9
+ import { CONDITION_OF_GOODS } from '../constants'
9
10
  import { i18next, localize } from '@things-factory/i18n-base'
10
11
  import { client, PageView, store } from '@things-factory/shell'
11
12
  import { ScrollbarStyles } from '@things-factory/styles'
@@ -264,6 +265,18 @@ class OnhandInventory extends connect(store)(localize(i18next)(PageView)) {
264
265
  sortable: true,
265
266
  width: 80
266
267
  },
268
+ {
269
+ type: 'string',
270
+ name: 'conditionOfGoods',
271
+ header: i18next.t('field.inventory_quality'),
272
+ width: 120,
273
+ record: {
274
+ renderer: (value, column, record, rowIndex, field) => {
275
+ const condition = Object.values(CONDITION_OF_GOODS).find(c => c.value === value)
276
+ return condition ? i18next.t(`label.${condition.name}`) : value || ''
277
+ }
278
+ }
279
+ },
267
280
  {
268
281
  type: 'string',
269
282
  name: 'condition',
@@ -531,6 +544,7 @@ class OnhandInventory extends connect(store)(localize(i18next)(PageView)) {
531
544
  manufactureDate
532
545
  remark
533
546
  unitCost
547
+ conditionOfGoods
534
548
  adjustmentNote
535
549
  condition
536
550
  }