@things-factory/operato-wms 5.0.13 → 6.0.0-alpha.1

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 (206) hide show
  1. package/client/pages/bulk-operation/bulk-operation.js +96 -8
  2. package/client/pages/bulk-operation/validate-gan-popup.js +37 -27
  3. package/client/pages/bulk-operation/validate-ro-popup.js +40 -0
  4. package/client/pages/components/select-inventory-popup.js +633 -0
  5. package/client/pages/constants/order.js +2 -1
  6. package/client/pages/inbound/pallet-label-popup.js +2 -0
  7. package/client/pages/inbound/select-product-batch.js +7 -1
  8. package/client/pages/inbound/undo-unload-popup.js +37 -21
  9. package/client/pages/inbound/unload-product.js +147 -59
  10. package/client/pages/inbound/worksheet-putaway.js +1 -1
  11. package/client/pages/inbound/worksheet-unloading.js +11 -7
  12. package/client/pages/inventory/inventory-adjustment.js +261 -238
  13. package/client/pages/inventory/inventory-by-product-detail.js +99 -92
  14. package/client/pages/inventory/inventory-by-product.js +170 -68
  15. package/client/pages/inventory/onhand-inventory.js +10 -12
  16. package/client/pages/inventory/serial-number-list-popup.js +36 -5
  17. package/client/pages/inventory-check/inspecting-product.js +1 -1
  18. package/client/pages/manifest/create-loading-manifest.js +47 -22
  19. package/client/pages/manifest/dispatcher-verification-popup.js +24 -13
  20. package/client/pages/manifest/loading-manifest-detail.js +311 -46
  21. package/client/pages/manifest/loading-manifest-list.js +86 -13
  22. package/client/pages/order/arrival-notice/arrival-notice-detail.js +305 -52
  23. package/client/pages/order/arrival-notice/arrival-notice-list.js +20 -1
  24. package/client/pages/order/arrival-notice/create-arrival-notice.js +2 -2
  25. package/client/pages/order/goods-received-note/received-note-detail.js +187 -15
  26. package/client/pages/order/release-order/b2b/b2b-order-list.js +76 -80
  27. package/client/pages/order/release-order/b2c/b2c-order-requests.js +148 -123
  28. package/client/pages/order/release-order/batch-picking-popup.js +11 -0
  29. package/client/pages/order/release-order/create-release-order.js +762 -250
  30. package/client/pages/order/release-order/release-extra-product-popup.js +10 -3
  31. package/client/pages/order/release-order/release-order-detail.js +897 -215
  32. package/client/pages/order/transport-order/delivery-note-popup.js +1050 -107
  33. package/client/pages/order/transport-order/print-delivery-note.js +214 -33
  34. package/client/pages/order/transport-order/upload-delivery-note.js +6 -4
  35. package/client/pages/order/transport-order/view-delivery-note.js +0 -1
  36. package/client/pages/outbound/generate-worksheet-popup.js +374 -0
  37. package/client/pages/outbound/inventory-reassign-popup.js +1097 -0
  38. package/client/pages/outbound/loading-product.js +88 -78
  39. package/client/pages/outbound/merged-outbound-worksheet.js +1 -1
  40. package/client/pages/outbound/packing-product.js +193 -82
  41. package/client/pages/outbound/packing-worksheet-list.js +10 -9
  42. package/client/pages/outbound/picking-product.js +979 -905
  43. package/client/pages/outbound/route-label-popup.js +283 -191
  44. package/client/pages/outbound/serial-number-popup.js +1 -0
  45. package/client/pages/outbound/sorting-product.js +12 -12
  46. package/client/pages/outbound/worksheet-batch-picking.js +39 -5
  47. package/client/pages/outbound/worksheet-packing.js +17 -4
  48. package/client/pages/outbound/worksheet-picking.js +45 -6
  49. package/client/pages/report/inbound-serial-number-report.js +86 -9
  50. package/client/pages/report/inventory-report.js +10 -0
  51. package/client/pages/report/inventory-summary-report.js +28 -19
  52. package/client/pages/report/outbound-order-details-report.js +204 -43
  53. package/client/pages/report/outbound-serial-number-report.js +87 -9
  54. package/client/pages/report/release-inventory-report.js +503 -0
  55. package/client/route.js +5 -0
  56. package/client/util/index.js +2 -0
  57. package/client/util/page-settings.js +43 -0
  58. package/client/util/toast.js +10 -0
  59. package/dist-server/graphql/resolvers/board-setting/board-settings.js +3 -3
  60. package/dist-server/graphql/resolvers/board-setting/board-settings.js.map +1 -1
  61. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js +2 -2
  62. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js.map +1 -1
  63. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js +1 -1
  64. package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js.map +1 -1
  65. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js +2 -2
  66. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js.map +1 -1
  67. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js +9 -10
  68. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js.map +1 -1
  69. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js +2 -2
  70. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js.map +1 -1
  71. package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js +6 -4
  72. package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js.map +1 -1
  73. package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js +6 -4
  74. package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js.map +1 -1
  75. package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js +21 -10
  76. package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js.map +1 -1
  77. package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js +1 -2
  78. package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js.map +1 -1
  79. package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js +1 -2
  80. package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js.map +1 -1
  81. package/dist-server/graphql/resolvers/dashboard/index.js +2 -1
  82. package/dist-server/graphql/resolvers/dashboard/index.js.map +1 -1
  83. package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js +17 -1
  84. package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js.map +1 -1
  85. package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js +113 -75
  86. package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js.map +1 -1
  87. package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js +21 -10
  88. package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js.map +1 -1
  89. package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js +56 -0
  90. package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js.map +1 -0
  91. package/dist-server/graphql/resolvers/index.js +5 -4
  92. package/dist-server/graphql/resolvers/index.js.map +1 -1
  93. package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js.map +1 -1
  94. package/dist-server/graphql/resolvers/opa-menu/opa-menus.js +8 -7
  95. package/dist-server/graphql/resolvers/opa-menu/opa-menus.js.map +1 -1
  96. package/dist-server/graphql/resolvers/{extra → other}/add-release-good-products.js +59 -8
  97. package/dist-server/graphql/resolvers/other/add-release-good-products.js.map +1 -0
  98. package/dist-server/graphql/resolvers/{extra → other}/index.js +3 -1
  99. package/dist-server/graphql/resolvers/other/index.js.map +1 -0
  100. package/dist-server/graphql/resolvers/other/page-settings.js +87 -0
  101. package/dist-server/graphql/resolvers/other/page-settings.js.map +1 -0
  102. package/dist-server/graphql/resolvers/reports/costing-report.js +4 -4
  103. package/dist-server/graphql/resolvers/reports/costing-report.js.map +1 -1
  104. package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js +3 -3
  105. package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js.map +1 -1
  106. package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js +36 -7
  107. package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js.map +1 -1
  108. package/dist-server/graphql/resolvers/reports/index.js +2 -1
  109. package/dist-server/graphql/resolvers/reports/index.js.map +1 -1
  110. package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js +69 -30
  111. package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js.map +1 -1
  112. package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js +36 -11
  113. package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js.map +1 -1
  114. package/dist-server/graphql/resolvers/reports/product-label-report.js +3 -3
  115. package/dist-server/graphql/resolvers/reports/product-label-report.js.map +1 -1
  116. package/dist-server/graphql/resolvers/reports/release-inventory-report.js +180 -0
  117. package/dist-server/graphql/resolvers/reports/release-inventory-report.js.map +1 -0
  118. package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js +2 -2
  119. package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js.map +1 -1
  120. package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js +1 -1
  121. package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js.map +1 -1
  122. package/dist-server/graphql/types/dashboard/index.js +1 -0
  123. package/dist-server/graphql/types/dashboard/index.js.map +1 -1
  124. package/dist-server/graphql/types/index.js +7 -2
  125. package/dist-server/graphql/types/index.js.map +1 -1
  126. package/dist-server/graphql/types/other/index.js +19 -0
  127. package/dist-server/graphql/types/other/index.js.map +1 -0
  128. package/dist-server/graphql/types/other/page-setting.js +34 -0
  129. package/dist-server/graphql/types/other/page-setting.js.map +1 -0
  130. package/dist-server/graphql/types/reports/index.js +6 -1
  131. package/dist-server/graphql/types/reports/index.js.map +1 -1
  132. package/dist-server/graphql/types/reports/outbound-order-details-report.js +17 -1
  133. package/dist-server/graphql/types/reports/outbound-order-details-report.js.map +1 -1
  134. package/dist-server/graphql/types/reports/release-inventory-report-list.js +12 -0
  135. package/dist-server/graphql/types/reports/release-inventory-report-list.js.map +1 -0
  136. package/dist-server/graphql/types/reports/release-inventory-report.js +27 -0
  137. package/dist-server/graphql/types/reports/release-inventory-report.js.map +1 -0
  138. package/dist-server/migrations/1568858861188-SeedSetting.js +5 -6
  139. package/dist-server/migrations/1568858861188-SeedSetting.js.map +1 -1
  140. package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js +1 -1
  141. package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js.map +1 -1
  142. package/dist-server/migrations/1623381200659-SeedStoringRule.js +1 -1
  143. package/dist-server/migrations/1623381200659-SeedStoringRule.js.map +1 -1
  144. package/dist-server/tsconfig.tsbuildinfo +1 -1
  145. package/dist-server/utils/report-query-util.js +5 -2
  146. package/dist-server/utils/report-query-util.js.map +1 -1
  147. package/helps/release-note.ko.md +8 -20
  148. package/helps/release-note.md +8 -20
  149. package/helps/release-note.ms.md +8 -20
  150. package/helps/release-note.zh.md +8 -20
  151. package/package.json +42 -42
  152. package/server/graphql/resolvers/board-setting/board-settings.ts +4 -6
  153. package/server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.ts +4 -5
  154. package/server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.ts +9 -10
  155. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.ts +4 -5
  156. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.ts +17 -19
  157. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts +10 -8
  158. package/server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.ts +9 -9
  159. package/server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.ts +9 -9
  160. package/server/graphql/resolvers/dashboard/arrival-notices-by-status.ts +23 -14
  161. package/server/graphql/resolvers/dashboard/collection-orders-by-status.ts +4 -5
  162. package/server/graphql/resolvers/dashboard/delivery-orders-by-status.ts +4 -5
  163. package/server/graphql/resolvers/dashboard/index.ts +3 -1
  164. package/server/graphql/resolvers/dashboard/inventory-expiry-monitor.ts +18 -6
  165. package/server/graphql/resolvers/dashboard/outbound-order-by-status.ts +114 -81
  166. package/server/graphql/resolvers/dashboard/release-goods-by-status.ts +23 -14
  167. package/server/graphql/resolvers/dashboard/unit-inbounded-outbounded.ts +61 -0
  168. package/server/graphql/resolvers/index.ts +5 -4
  169. package/server/graphql/resolvers/inventory-comparison/inventory-comparison-list.ts +11 -9
  170. package/server/graphql/resolvers/opa-menu/opa-menus.ts +7 -6
  171. package/server/graphql/resolvers/{extra → other}/add-release-good-products.ts +73 -12
  172. package/server/graphql/resolvers/other/index.ts +10 -0
  173. package/server/graphql/resolvers/other/page-settings.ts +105 -0
  174. package/server/graphql/resolvers/reports/costing-report.ts +8 -10
  175. package/server/graphql/resolvers/reports/inbound-order-details-report.ts +7 -9
  176. package/server/graphql/resolvers/reports/inbound-serial-number-report.ts +41 -13
  177. package/server/graphql/resolvers/reports/index.ts +3 -1
  178. package/server/graphql/resolvers/reports/outbound-order-details-report.ts +76 -38
  179. package/server/graphql/resolvers/reports/outbound-serial-number-report.ts +42 -18
  180. package/server/graphql/resolvers/reports/product-label-report.ts +4 -6
  181. package/server/graphql/resolvers/reports/release-inventory-report.ts +201 -0
  182. package/server/graphql/resolvers/shipping-provider/shipping-providers.ts +3 -5
  183. package/server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.ts +10 -10
  184. package/server/graphql/types/dashboard/index.ts +1 -0
  185. package/server/graphql/types/index.ts +8 -2
  186. package/server/graphql/types/other/index.ts +19 -0
  187. package/server/graphql/types/other/page-setting.ts +33 -0
  188. package/server/graphql/types/reports/index.ts +6 -1
  189. package/server/graphql/types/reports/outbound-order-details-report.ts +17 -1
  190. package/server/graphql/types/reports/release-inventory-report-list.ts +8 -0
  191. package/server/graphql/types/reports/release-inventory-report.ts +23 -0
  192. package/server/migrations/1568858861188-SeedSetting.ts +4 -4
  193. package/server/migrations/1623308919899-SeedLocationRecommendSetting.ts +3 -2
  194. package/server/migrations/1623381200659-SeedStoringRule.ts +3 -2
  195. package/server/utils/report-query-util.ts +5 -2
  196. package/things-factory.config.js +4 -0
  197. package/translations/en.json +148 -27
  198. package/translations/ko.json +185 -105
  199. package/translations/ms.json +183 -98
  200. package/translations/zh.json +197 -112
  201. package/dist-server/graphql/resolvers/extra/add-release-good-products.js.map +0 -1
  202. package/dist-server/graphql/resolvers/extra/index.js.map +0 -1
  203. package/dist-server/graphql/types/extra/index.js +0 -11
  204. package/dist-server/graphql/types/extra/index.js.map +0 -1
  205. package/server/graphql/resolvers/extra/index.ts +0 -5
  206. package/server/graphql/types/extra/index.ts +0 -7
@@ -1,19 +1,20 @@
1
1
  import '@things-factory/barcode-ui'
2
2
  import '@things-factory/grist-ui'
3
+ import '@material/mwc-icon'
3
4
 
4
5
  import gql from 'graphql-tag'
5
6
  import { css, html, LitElement } from 'lit-element'
7
+ import { connect } from 'pwa-helpers/connect-mixin'
6
8
 
9
+ import { DirectPrinter } from '@things-factory/barcode-base'
7
10
  import { MultiColumnFormStyles, SingleColumnFormStyles } from '@things-factory/form-ui'
8
- import { connect } from 'pwa-helpers/connect-mixin'
9
11
  import { i18next, localize } from '@things-factory/i18n-base'
10
12
  import { client, store } from '@things-factory/shell'
11
13
  import { isMobileDevice } from '@things-factory/utils'
12
14
 
13
- import { LOCATION_TYPE } from '../constants'
15
+ import { fetchSettingRule } from '../../fetch-setting-value'
16
+ import { LOCATION_TYPE, ROUTE_LABEL_SETTING_KEY } from '../constants'
14
17
 
15
- import { DirectPrinter } from '@things-factory/barcode-base'
16
- import { ROUTE_LABEL_SETTING_KEY } from '../constants'
17
18
  class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
18
19
  static get styles() {
19
20
  return [
@@ -50,6 +51,16 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
50
51
  .mobile-full-width {
51
52
  grid-column: span 12 / auto;
52
53
  }
54
+ .multi-column-form {
55
+ max-width: 100%;
56
+ }
57
+ }
58
+
59
+ #search {
60
+ float: right;
61
+ padding-right: 5px;
62
+ padding-bottom: 1px;
63
+ color: var(--search-form-icon-color);
53
64
  }
54
65
  `
55
66
  ]
@@ -62,10 +73,13 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
62
73
  partnerId: String,
63
74
  worksheetType: String,
64
75
  _binNumberList: Array,
65
- _selectedBinNumber: String,
66
- _selectedPriority: String,
67
76
  _searchFields: Array,
77
+ _priorityList: Array,
68
78
  _routeLabel: Object,
79
+ _selectedPriority: String,
80
+ _selectedBinNumber: String,
81
+ _enableToteScanning: Boolean,
82
+ _enableBinScanning: Boolean,
69
83
  orderInventories: Object
70
84
  }
71
85
  }
@@ -75,7 +89,15 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
75
89
  }
76
90
 
77
91
  get searchForm() {
78
- return this.shadowRoot.querySelector('search-form')
92
+ return this.shadowRoot.querySelector('form')
93
+ }
94
+
95
+ get _withSkuCheckbox() {
96
+ return this.shadowRoot.querySelector('input[name=withSku]')
97
+ }
98
+
99
+ get _withToteCheckbox() {
100
+ return this.shadowRoot.querySelector('input[name=withTote]')
79
101
  }
80
102
 
81
103
  _focusOnSerialInput() {
@@ -90,47 +112,72 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
90
112
 
91
113
  render() {
92
114
  return html`
93
- <form id="search-form" class="multi-column-form">
94
- <fieldset>
95
- <select
96
- name="binNumber"
97
- @change="${e => {
98
- this._selectedBinNumber = this._binNumberList.filter(itm => itm.name == e.currentTarget.value)
99
- if (this._selectedBinNumber) this.dataGrist.fetch()
100
- }}"
101
- >
102
- <option value="">-- ${i18next.t('text.bin_number')} --</option>
103
- ${(this._binNumberList || []).map(list => html` <option value=${list.name}>${list.name}</option> `)}
104
- </select>
115
+ <div>
116
+ <form class="multi-column-form" @keypress=${async e => this.dataGrist.fetch()}>
105
117
  ${this.worksheetType == 'merged'
106
118
  ? html`
119
+ <label>${i18next.t('field.priority')}</label>
120
+ <select
121
+ name="priority"
122
+ @change="${e => {
123
+ this._selectedPriority = this._priorityList.filter(itm => itm.value == e.currentTarget.value)
124
+ }}"
125
+ >
126
+ ${(this._priorityList || []).map(list => html` <option value=${list?.value}>${list?.name}</option> `)}
127
+ </select>
128
+ `
129
+ : ''}
130
+ ${this._enableBinScanning
131
+ ? html`
132
+ <label>${i18next.t('field.bin_number')}</label>
107
133
  <select
108
- name="sortingRule"
134
+ name="binNumber"
109
135
  @change="${e => {
110
- this._selectedPriority = e.currentTarget.value
111
- if (this._selectedPriority) this.dataGrist.fetch()
136
+ this._selectedBinNumber = this._binNumberList.filter(itm => itm.id == e.currentTarget.value)
137
+ if (this._selectedBinNumber.length == 0) this._selectedBinNumber = e.currentTarget.value
138
+ this._changeCheckbox()
112
139
  }}"
113
140
  >
114
- <option value="">-- ${i18next.t('text.priority')} --</option>
115
- <option value="roSku">${'RO, Sku'}</option>
116
- <option value="roBin">${'RO, Bin'}</option>
117
- <option value="skuRo">${'Sku, Ro'}</option>
118
- <option value="skuBin">${'Sku, Bin'}</option>
119
- <option value="binRo">${'Bin, Ro'}</option>
120
- <option value="binSku">${'Bin, Sku'}</option>
141
+ <option value="" selected></option>
142
+ <option value="all">Show All</option>
143
+ ${(this._binNumberList || []).map(list => html` <option value=${list.id}>${list.name}</option> `)}
121
144
  </select>
122
145
  `
123
146
  : ''}
124
- </fieldset>
125
- </form>
147
+
148
+ <input
149
+ type="checkbox"
150
+ checked
151
+ id="withSku"
152
+ name="withSku"
153
+ @change="${e => {
154
+ this._changeCheckbox()
155
+ }}"
156
+ />
157
+ <label for="withSku">${i18next.t('field.sku')}</label>
158
+
159
+ ${this._enableToteScanning
160
+ ? html`
161
+ <input
162
+ type="checkbox"
163
+ id="withTote"
164
+ name="withTote"
165
+ @change="${e => {
166
+ this._changeCheckbox()
167
+ }}"
168
+ />
169
+ <label for="withTote">${i18next.t('field.tote')}</label>
170
+ `
171
+ : ''}
172
+ </form>
173
+ <mwc-icon id="search" @click=${e => this.dataGrist.fetch()} search>search</mwc-icon>
174
+ </div>
126
175
 
127
176
  <div class="grist">
128
177
  <data-grist
129
178
  .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
130
179
  .config=${this.config}
131
- .fetchHandler=${this.worksheetType == 'single'
132
- ? this.fetchOrderInventoriesOfMultipleReleaseOrders.bind(this)
133
- : this.fetchOrderInventoriesOfMergedReleaseOrders.bind(this)}
180
+ .fetchHandler=${this.fetchHandler.bind(this)}
134
181
  ></data-grist>
135
182
  </div>
136
183
 
@@ -156,6 +203,69 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
156
203
 
157
204
  async firstUpdated() {
158
205
  await this.fetchLocations()
206
+ this._enableToteScanning = await fetchSettingRule('enable-tote-scanning')
207
+ this._enableBinScanning = await fetchSettingRule('enable-bin-picking')
208
+
209
+ this._priorityList = [
210
+ { value: '' },
211
+ {
212
+ name: 'RO, Sku',
213
+ value: 'roSku'
214
+ },
215
+ {
216
+ name: 'Sku, RO',
217
+ value: 'skuRo'
218
+ }
219
+ ]
220
+
221
+ let configColumns = [
222
+ { type: 'gutter', gutterName: 'sequence' },
223
+ { type: 'gutter', gutterName: 'row-selector', multiple: true }
224
+ ]
225
+
226
+ if (this._enableToteScanning) {
227
+ configColumns.push({
228
+ type: 'string',
229
+ name: 'toteNumber',
230
+ header: i18next.t('field.tote_no'),
231
+ sortable: true,
232
+ width: 150
233
+ })
234
+ }
235
+
236
+ configColumns.push(
237
+ {
238
+ type: 'string',
239
+ name: 'productSku',
240
+ header: i18next.t('field.sku'),
241
+ sortable: true,
242
+ width: 150
243
+ },
244
+ {
245
+ type: 'integer',
246
+ name: 'releaseQty',
247
+ header: i18next.t('field.release_qty'),
248
+ width: 150
249
+ },
250
+ {
251
+ type: 'string',
252
+ name: 'roName',
253
+ header: i18next.t('field.ro'),
254
+ sortable: true,
255
+ width: 150
256
+ }
257
+ )
258
+
259
+ if (this._enableBinScanning) {
260
+ configColumns.push({
261
+ type: 'string',
262
+ name: 'binNumber',
263
+ header: i18next.t('field.bin_no'),
264
+ sortable: true,
265
+ width: 150
266
+ })
267
+ }
268
+
159
269
  this.config = {
160
270
  rows: {
161
271
  appendable: false,
@@ -169,49 +279,25 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
169
279
  list: {
170
280
  fields: ['productSku', 'releaseQty', 'roName', 'binNumber']
171
281
  },
172
- columns: [
173
- { type: 'gutter', gutterName: 'sequence' },
174
- { type: 'gutter', gutterName: 'row-selector', multiple: true },
175
- {
176
- type: 'string',
177
- name: 'productSku',
178
- header: i18next.t('field.sku'),
179
- sortable: true,
180
- width: 150
181
- },
182
- {
183
- type: 'integer',
184
- name: 'releaseQty',
185
- header: i18next.t('field.release_qty'),
186
- width: 150
187
- },
188
- {
189
- type: 'string',
190
- name: 'roName',
191
- header: i18next.t('field.ro'),
192
- sortable: true,
193
- width: 150
194
- },
195
- {
196
- type: 'string',
197
- name: 'binNumber',
198
- header: i18next.t('field.bin_number'),
199
- sortable: true,
200
- width: 150
201
- }
202
- ]
282
+ columns: configColumns
203
283
  }
204
284
  }
205
285
 
206
- async fetchOrderInventoriesOfMultipleReleaseOrders({ sorters = [] }) {
286
+ async fetchHandler({ sorters = [] }) {
207
287
  const filters = []
208
- if (this._selectedBinNumber && this._selectedBinNumber.length !== 0) {
209
- filters.push({
210
- name: 'binNumber',
211
- operator: 'eq',
212
- value: this._selectedBinNumber[0].name
213
- })
288
+
289
+ if (this.worksheetType == 'merged') {
290
+ filters.push({ name: 'merged', operator: 'eq', value: 'merged' })
214
291
  }
292
+
293
+ if (this._withSkuCheckbox?.checked == true) {
294
+ filters.push({ name: 'withSku', operator: 'eq', value: true })
295
+ }
296
+
297
+ if (this._withToteCheckbox?.checked == true) {
298
+ filters.push({ name: 'withTote', operator: 'eq', value: true })
299
+ }
300
+
215
301
  try {
216
302
  const response = await client.query({
217
303
  query: gql`
@@ -219,39 +305,39 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
219
305
  $partnerId: String!
220
306
  $filters: [Filter!]
221
307
  $sortings: [Sorting!]
308
+ $priority: String
309
+ $binNumber: String
222
310
  ) {
223
- orderInventoriesOfMultipleReleaseOrders(partnerId: $partnerId, filters: $filters, sortings: $sortings) {
311
+ orderInventoriesOfMultipleReleaseOrders(
312
+ partnerId: $partnerId
313
+ filters: $filters
314
+ sortings: $sortings
315
+ priority: $priority
316
+ binNumber: $binNumber
317
+ ) {
224
318
  items {
225
- id
226
- name
319
+ toteNumber
320
+ binNumber
321
+ productSKU
322
+ productName
227
323
  releaseQty
228
- releaseGood {
229
- id
230
- name
231
- routeId
232
- storeId
233
- storeName
234
- stopId
235
- }
236
- product {
237
- id
238
- sku
239
- name
240
- }
241
- inventory {
242
- id
243
- name
244
- }
245
- binLocation {
246
- id
247
- name
248
- }
324
+ releaseGoodName
325
+ routeId
326
+ storeId
327
+ storeName
328
+ stopId
249
329
  }
250
330
  total
251
331
  }
252
332
  }
253
333
  `,
254
- variables: { partnerId: this.partnerId, filters, sortings: sorters }
334
+ variables: {
335
+ partnerId: this.partnerId,
336
+ filters,
337
+ sortings: sorters,
338
+ priority: this._selectedPriority?.length == 1 ? this._selectedPriority[0].value : this._selectedPriority,
339
+ binNumber: this._selectedBinNumber?.length == 1 ? this._selectedBinNumber[0].name : this._selectedBinNumber
340
+ }
255
341
  })
256
342
 
257
343
  if (!response.errors) {
@@ -263,87 +349,8 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
263
349
  records.items.map(itm => {
264
350
  return {
265
351
  ...itm,
266
- productSku: itm.product?.sku,
267
- productName: itm.product?.name,
268
- roName: itm.releaseGood?.name,
269
- binNumber: itm.binLocation?.name
270
- }
271
- }) || {}
272
- })
273
- }
274
- } catch (e) {
275
- this._showToast(e)
276
- }
277
- }
278
-
279
- async fetchOrderInventoriesOfMergedReleaseOrders({ sorters = [] }) {
280
- const filters = []
281
- if (this._selectedBinNumber && this._selectedBinNumber.length !== 0) {
282
- filters.push({
283
- name: 'binNumber',
284
- operator: 'eq',
285
- value: this._selectedBinNumber[0].name
286
- })
287
- }
288
-
289
- if (this._selectedPriority && this._selectedPriority.length !== 0) {
290
- filters.push({
291
- name: 'priority',
292
- operator: 'eq',
293
- value: this._selectedPriority
294
- })
295
- }
296
- try {
297
- const response = await client.query({
298
- query: gql`
299
- query orderInventoriesOfMergedReleaseOrders($partnerId: String!, $filters: [Filter!], $sortings: [Sorting!]) {
300
- orderInventoriesOfMergedReleaseOrders(partnerId: $partnerId, filters: $filters, sortings: $sortings) {
301
- items {
302
- id
303
- name
304
- releaseQty
305
- releaseGood {
306
- id
307
- name
308
- routeId
309
- storeId
310
- storeName
311
- stopId
312
- }
313
- product {
314
- id
315
- sku
316
- name
317
- }
318
- inventory {
319
- id
320
- name
321
- }
322
- binLocation {
323
- id
324
- name
325
- }
326
- }
327
- total
328
- }
329
- }
330
- `,
331
- variables: { partnerId: this.partnerId, filters, sortings: sorters }
332
- })
333
-
334
- if (!response.errors) {
335
- let records = response.data.orderInventoriesOfMergedReleaseOrders
336
-
337
- return (this.orderInventories = {
338
- total: records.total || 0,
339
- records:
340
- records.items.map(itm => {
341
- return {
342
- ...itm,
343
- productSku: itm.product?.sku,
344
- productName: itm.product?.name,
345
- roName: itm.releaseGood?.name,
346
- binNumber: itm.binLocation?.name
352
+ roName: itm.releaseGoodName,
353
+ productSku: itm.productSKU
347
354
  }
348
355
  }) || {}
349
356
  })
@@ -367,26 +374,33 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
367
374
  })
368
375
  } else {
369
376
  for (var record of records) {
370
- for (let qty = 1; qty <= record.releaseQty; qty++) {
377
+ let max = record.releaseQty ? record.releaseQty : 1
378
+ for (let qty = 1; qty <= max; qty++) {
371
379
  var searchParams = new URLSearchParams()
372
380
 
373
381
  /* for pallet record mapping */
374
382
  searchParams.append('roName', record.roName)
375
- searchParams.append('productSku', record.productSku)
376
- searchParams.append('productName', record.productName)
377
- searchParams.append('binNumber', record.binNumber)
378
- searchParams.append('qty', qty)
379
- searchParams.append('releaseQty', record.releaseQty)
380
- searchParams.append('stopId', record.releaseGood.stopId)
381
- searchParams.append('routeId', record.releaseGood.routeId)
382
- searchParams.append('storeId', record.releaseGood.storeId)
383
- searchParams.append('storeName', record.releaseGood.storeName)
384
- searchParams.append('str', `STR: ${record.releaseGood.storeId}`)
383
+ if (record?.binNumber) {
384
+ searchParams.append('binNumber', record.binNumber)
385
+ }
386
+ if (!record?.toteNumber) {
387
+ searchParams.append('qty', record.qty)
388
+ searchParams.append('releaseQty', record.releaseQty)
389
+ searchParams.append('counter', `${qty} of ${record.releaseQty}`)
390
+ searchParams.append('productSku', record.productSku)
391
+ searchParams.append('productName', record.productName)
392
+ } else {
393
+ searchParams.append('productName', record.toteNumber)
394
+ }
395
+ searchParams.append('stopId', record.stopId)
396
+ searchParams.append('routeId', record.routeId)
397
+ searchParams.append('storeId', record.storeId)
398
+ searchParams.append('storeName', record.storeName)
399
+ searchParams.append('str', `STR: ${record.storeId}`)
385
400
  searchParams.append(
386
401
  'storeInformation',
387
- `(Store ID) ${record.releaseGood.storeId}, (Store Name) ${record.releaseGood.storeName}, (Route ID) ${record.releaseGood.routeId}, (Stop ID) ${record.releaseGood.stopId}`
402
+ `(Store ID) ${record.storeId}, (Store Name) ${record.storeName}, (Route ID) ${record.routeId}, (Stop ID) ${record.stopId}`
388
403
  )
389
- searchParams.append('counter', `${qty} of ${record.releaseQty}`)
390
404
 
391
405
  try {
392
406
  const response = await fetch(`label-command/${labelId}?${searchParams.toString()}`, {
@@ -449,6 +463,84 @@ class RouteLabelPopup extends connect(store)(localize(i18next)(LitElement)) {
449
463
  }
450
464
  }
451
465
 
466
+ _compareValues(key, order = 'asc') {
467
+ return function innerSort(a, b) {
468
+ if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {
469
+ return 0
470
+ }
471
+
472
+ const varA = typeof a[key] === 'string' ? a[key].toUpperCase() : a[key]
473
+ const varB = typeof b[key] === 'string' ? b[key].toUpperCase() : b[key]
474
+
475
+ let comparison = 0
476
+ if (varA > varB) {
477
+ comparison = 1
478
+ } else if (varA < varB) {
479
+ comparison = -1
480
+ }
481
+ return order === 'desc' ? comparison * -1 : comparison
482
+ }
483
+ }
484
+
485
+ _changeCheckbox(e) {
486
+ let priorList = [{ value: '' }]
487
+
488
+ let skuPriorList = [
489
+ {
490
+ name: 'RO, Sku',
491
+ value: 'roSku'
492
+ },
493
+ {
494
+ name: 'Sku, RO',
495
+ value: 'skuRo'
496
+ }
497
+ ]
498
+
499
+ let binPriorList = [
500
+ {
501
+ name: 'Sku, Bin',
502
+ value: 'skuBin'
503
+ },
504
+ {
505
+ name: 'RO, Bin',
506
+ value: 'roBin'
507
+ },
508
+ {
509
+ name: 'Bin, RO',
510
+ value: 'binRo'
511
+ },
512
+ {
513
+ name: 'Bin, Sku',
514
+ value: 'binSku'
515
+ }
516
+ ]
517
+
518
+ let totePriorList = [
519
+ {
520
+ name: 'RO, Tote',
521
+ value: 'roTote'
522
+ },
523
+ {
524
+ name: 'Tote, RO',
525
+ value: 'toteRo'
526
+ }
527
+ ]
528
+
529
+ if (this._withSkuCheckbox.checked == true) {
530
+ priorList.push(...skuPriorList)
531
+ }
532
+
533
+ if (this._selectedBinNumber?.length > 0 && this._selectedBinNumber[0].value !== '') {
534
+ priorList.push(...binPriorList)
535
+ }
536
+
537
+ if (this._withToteCheckbox.checked == true) {
538
+ priorList.push(...totePriorList)
539
+ }
540
+
541
+ this._priorityList = priorList
542
+ }
543
+
452
544
  _showToast({ type, message }) {
453
545
  document.dispatchEvent(
454
546
  new CustomEvent('notify', {
@@ -346,6 +346,7 @@ class SerialNumberPopup extends localize(i18next)(LitElement) {
346
346
  }
347
347
 
348
348
  if (!response.errors) {
349
+ this._selectedSerialNumber = {}
349
350
  this.dataGrist.fetch()
350
351
  }
351
352
  } catch (e) {
@@ -3,12 +3,12 @@ import '@things-factory/grist-ui'
3
3
  import './show-ro-list-popup'
4
4
  import '../components/worksheet-information-popup'
5
5
  import './tote-popup'
6
- import { sleep } from '@operato/utils'
7
6
 
8
7
  import gql from 'graphql-tag'
9
8
  import { css, html } from 'lit-element'
10
9
  import { connect } from 'pwa-helpers/connect-mixin.js'
11
10
 
11
+ import { sleep } from '@operato/utils'
12
12
  import { MultiColumnFormStyles } from '@things-factory/form-ui'
13
13
  import { i18next, localize } from '@things-factory/i18n-base'
14
14
  import { openPopup } from '@things-factory/layout-base'
@@ -360,8 +360,8 @@ class SortingProduct extends connect(store)(localize(i18next)(PageView)) {
360
360
  try {
361
361
  const response = await client.query({
362
362
  query: gql`
363
- query findReleaseOrdersByTaskNo($taskNo: String!) {
364
- findReleaseOrdersByTaskNo(taskNo: $taskNo) {
363
+ query findSortingReleaseOrdersByTaskNo($taskNo: String!) {
364
+ findSortingReleaseOrdersByTaskNo(taskNo: $taskNo) {
365
365
  releaseGoods {
366
366
  id
367
367
  name
@@ -375,8 +375,8 @@ class SortingProduct extends connect(store)(localize(i18next)(PageView)) {
375
375
  })
376
376
 
377
377
  if (!response.errors) {
378
- this.releaseOrders = response.data.findReleaseOrdersByTaskNo.releaseGoods
379
- this.taskNo = response.data.findReleaseOrdersByTaskNo.taskNo
378
+ this.releaseOrders = response.data.findSortingReleaseOrdersByTaskNo.releaseGoods
379
+ this.taskNo = response.data.findSortingReleaseOrdersByTaskNo.taskNo
380
380
  if (this.releaseOrders?.length) {
381
381
  await this._openSelectReleaseOrderPopup()
382
382
  } else {
@@ -504,12 +504,12 @@ class SortingProduct extends connect(store)(localize(i18next)(PageView)) {
504
504
  this._completeHandler()
505
505
 
506
506
  if (this._isRequireSerialNumberScanningOutbound) {
507
- if (this._enableProductScanning) {
508
- this._focusOnProductBarcodeInput
509
- } else {
510
- this._focusOnSerialInput()
511
- }
512
- } else this._focusOnSortingQtyInput()
507
+ this._focusOnSerialInput()
508
+ } else if (this._enableProductScanning && !this._isRequireSerialNumberScanningOutbound) {
509
+ this._focusOnProductBarcodeInput()
510
+ } else {
511
+ this._focusOnSortingQtyInput()
512
+ }
513
513
  }
514
514
  }
515
515
 
@@ -530,7 +530,7 @@ class SortingProduct extends connect(store)(localize(i18next)(PageView)) {
530
530
  this.serialInput.value = ''
531
531
  }
532
532
 
533
- if (this._enableProductScanning) {
533
+ if (this._enableProductScanning && !this._isRequireSerialNumberScanningOutbound) {
534
534
  this.productBarcodeInput.value = ''
535
535
  } else if (!this._enableProductScanning && !this._isRequireSerialNumberScanningOutbound) {
536
536
  this.sortingQtyInput.value = ''