@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
@@ -0,0 +1,374 @@
1
+ import { i18next, localize } from '@things-factory/i18n-base'
2
+ import { css, html, LitElement } from 'lit-element'
3
+ import { SingleColumnFormStyles, MultiColumnFormStyles } from '@things-factory/form-ui'
4
+ import { client, navigate } from '@things-factory/shell'
5
+ import gql from 'graphql-tag'
6
+ import { isMobileDevice } from '@things-factory/utils'
7
+ import { fetchSettingRule } from '../../fetch-setting-value'
8
+ import { ORDER_STATUS } from '../constants'
9
+ import { sleep } from '@things-factory/utils'
10
+
11
+ class GenerateWorksheetPopup extends localize(i18next)(LitElement) {
12
+ static get properties() {
13
+ return {
14
+ _generateStd: String,
15
+ gristData: Object,
16
+ _partnerBizplaceIds: Array,
17
+ _releaseGoods: Array,
18
+ _batchLimit: String,
19
+ _groupedReleaseGoods: Array,
20
+ _processing: Boolean
21
+ }
22
+ }
23
+
24
+ static get styles() {
25
+ return [
26
+ MultiColumnFormStyles,
27
+ SingleColumnFormStyles,
28
+ css`
29
+ :host {
30
+ display: flex;
31
+ flex-direction: column;
32
+ overflow-x: overlay;
33
+ background-color: var(--main-section-background-color);
34
+ }
35
+ .container {
36
+ display: flex;
37
+ flex-direction: column;
38
+ }
39
+ .button-container {
40
+ padding: var(--button-container-padding);
41
+ margin: var(--button-container-margin);
42
+ text-align: var(--button-container-align);
43
+ background-color: var(--button-container-background);
44
+ height: var(--button-container-height);
45
+ }
46
+ .picking-div {
47
+ width: max-content;
48
+ margin: 10px auto auto -10px;
49
+ display: flex;
50
+ gap: 5em;
51
+ }
52
+ .radio-div {
53
+ margin: auto;
54
+ }
55
+ input[type='radio'] {
56
+ top: 2px;
57
+ }
58
+ .multi-column-form {
59
+ display: table !important;
60
+ }
61
+ .grist {
62
+ display: flex;
63
+ flex-direction: column;
64
+ flex: 1;
65
+ overflow-y: auto;
66
+ }
67
+ .grist-container {
68
+ overflow-y: hidden;
69
+ display: flex;
70
+ flex: 1;
71
+ padding: 10px;
72
+ }
73
+ data-grist {
74
+ overflow-y: auto;
75
+ flex: 1;
76
+ }
77
+ `
78
+ ]
79
+ }
80
+
81
+ render() {
82
+ return html`
83
+ <div class="container">
84
+ <form id="input-form" class="multi-column-form">
85
+ <fieldset>
86
+ <legend>${i18next.t('title.please_select_generate_type')}</legend>
87
+ <div class="picking-div">
88
+ <div class="radio-div">
89
+ <input
90
+ id="order-picking"
91
+ name="generate-std"
92
+ type="radio"
93
+ value="single"
94
+ @change="${e => {
95
+ this._generateStd = e.currentTarget.value
96
+ }}"
97
+ .checked="true"
98
+ checked
99
+ />
100
+ <label for="order-picking">${i18next.t('text.single_picking')}</label>
101
+ </div>
102
+ <div class="radio-div">
103
+ <input
104
+ id="batch-picking"
105
+ name="generate-std"
106
+ type="radio"
107
+ value="batch"
108
+ @change="${e => {
109
+ this._generateStd = e.currentTarget.value
110
+ }}"
111
+ />
112
+ <label for="batch-picking">${i18next.t('text.batch_picking')}</label>
113
+ </div>
114
+ </div>
115
+ </fieldset>
116
+ </form>
117
+ </div>
118
+
119
+ <div class="grist-container">
120
+ <div class="grist">
121
+ <data-grist
122
+ id="grist"
123
+ .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
124
+ .config=${this.config}
125
+ .fetchHandler=${this._calculatePossibleWorksheets.bind(this)}
126
+ ></data-grist>
127
+ </div>
128
+ </div>
129
+ <div class="button-container">
130
+ <mwc-button
131
+ raised
132
+ @click="${async e => {
133
+ const button = e.currentTarget
134
+ this.disableButton(button)
135
+ try {
136
+ this._generateStd == 'single'
137
+ ? await this._generatePickingWorksheet()
138
+ : await this._generateBatchPickingWorksheet()
139
+ } finally {
140
+ await sleep(200)
141
+ this.enableButton(button)
142
+ }
143
+ }}"
144
+ label="${i18next.t('button.confirm')}"
145
+ ?disabled=${this._processing}
146
+ ></mwc-button>
147
+ </div>
148
+ `
149
+ }
150
+
151
+ get grist() {
152
+ return this.shadowRoot.querySelector('data-grist#grist')
153
+ }
154
+
155
+ constructor() {
156
+ super()
157
+ this._generateStd = 'single'
158
+ this._partnerBizplaceIds = []
159
+ this._releaseGoods = []
160
+ this._groupedReleaseGoods = []
161
+ this._processing = false
162
+ }
163
+
164
+ async firstUpdated() {
165
+ this.config = {
166
+ pagination: { infinite: true },
167
+ rows: {
168
+ appendable: false
169
+ },
170
+ columns: [
171
+ { type: 'gutter', gutterName: 'sequence' },
172
+ {
173
+ type: 'string',
174
+ name: 'company',
175
+ header: i18next.t('field.company'),
176
+ width: 180
177
+ },
178
+ {
179
+ type: 'int',
180
+ name: 'totalReleaseOrder',
181
+ header: i18next.t('field.release_order'),
182
+ width: 180
183
+ },
184
+ {
185
+ type: 'string',
186
+ name: 'totalBatchWorksheet',
187
+ header: i18next.t('field.merged_worksheet'),
188
+ width: 180
189
+ }
190
+ ]
191
+ }
192
+
193
+ this._batchLimit = await fetchSettingRule('batch-picking-limit')
194
+ //calculate possible worksheets from selected orders
195
+ await this._calculatePossibleWorksheets()
196
+ }
197
+
198
+ async _generatePickingWorksheet() {
199
+ this._processing = true
200
+ try {
201
+ let releaseGoods = this.gristData.selected.filter(itm => itm.status === ORDER_STATUS.PENDING_WORKSHEET.value)
202
+
203
+ releaseGoods = releaseGoods.map(ro => {
204
+ return {
205
+ name: ro.name,
206
+ status: ro.status
207
+ }
208
+ })
209
+
210
+ const response = await client.mutate({
211
+ mutation: gql`
212
+ mutation generateMultipleReleaseGoodWorksheet($releaseGoods: [MultipleReleaseGoodWorksheet!]) {
213
+ generateMultipleReleaseGoodWorksheet(releaseGoods: $releaseGoods)
214
+ }
215
+ `,
216
+ variables: {
217
+ releaseGoods
218
+ }
219
+ })
220
+
221
+ if (!response.errors) {
222
+ navigate('single_outbound_worksheets')
223
+ this._showToast({ message: i18next.t('text.worksheet(s)_has_been_generated') })
224
+ }
225
+ this._processing = false
226
+ } catch (e) {
227
+ this._showToast(e)
228
+ this._processing = false
229
+ }
230
+ }
231
+
232
+ async _generateBatchPickingWorksheet() {
233
+ this._processing = true
234
+ try {
235
+ await this._validateWorksheets()
236
+ const response = await client.mutate({
237
+ mutation: gql`
238
+ mutation generateBatchPickingWorksheet($releaseGoods: [[GenerateBatchPickInfo!]]) {
239
+ generateBatchPickingWorksheet(releaseGoodWithBiz: $releaseGoods) {
240
+ name
241
+ }
242
+ }
243
+ `,
244
+ variables: {
245
+ releaseGoods: this._groupedReleaseGoods
246
+ }
247
+ })
248
+
249
+ if (!response.errors) {
250
+ navigate('merged_outbound_worksheets')
251
+ this._showToast({ message: i18next.t('text.worksheet(s)_has_been_generated') })
252
+ }
253
+ this._processing = false
254
+ } catch (e) {
255
+ this._showToast(e)
256
+ this._processing = false
257
+ }
258
+ }
259
+
260
+ async _splitOrdersForGenerateBatchWorksheet() {
261
+ this._releaseGoods = this.gristData.selected
262
+ .filter(itm => itm.status === ORDER_STATUS.PENDING_WORKSHEET.value)
263
+ .map(itm => {
264
+ return {
265
+ releaseGoodNo: itm.name,
266
+ bizplaceId: itm.bizplace.id,
267
+ bizplaceName: itm.bizplace.name
268
+ }
269
+ })
270
+
271
+ this._partnerBizplaceIds = [...new Set(this._releaseGoods.map(item => item.bizplaceId))]
272
+
273
+ //separate orders by bizplace
274
+ let array = []
275
+ this._releaseGoods.forEach(rg => {
276
+ const { bizplaceId } = rg
277
+ array[bizplaceId] = array[bizplaceId] ?? []
278
+
279
+ array[bizplaceId].push(rg)
280
+ return array
281
+ })
282
+
283
+ //check if there is at least 2 orders, separate orders based on batch picking limit
284
+ this._partnerBizplaceIds.forEach(itm => {
285
+ let insufficientOrders = this._releaseGoods.filter(rg => rg.bizplaceId == itm)
286
+
287
+ if (insufficientOrders?.length > 1) {
288
+ while (array[itm].length > 0) {
289
+ array.push(array[itm].splice(0, parseInt(this._batchLimit) ? parseInt(this._batchLimit) : 20))
290
+ }
291
+
292
+ delete array[itm]
293
+ }
294
+ })
295
+
296
+ return array
297
+ }
298
+
299
+ async _calculatePossibleWorksheets() {
300
+ //get grouped release goods
301
+ this._groupedReleaseGoods = await this._splitOrdersForGenerateBatchWorksheet()
302
+ let batchLimit = parseInt(this._batchLimit) ? parseInt(this._batchLimit) : 20
303
+ //for each bizplace, generate data of possible worksheets
304
+ let data = this._partnerBizplaceIds.map(id => {
305
+ let selectedOrders = this._releaseGoods.filter(rg => rg.bizplaceId == id)
306
+ let possibleBatchWorksheet = Math.ceil(selectedOrders.length / batchLimit)
307
+
308
+ return {
309
+ company: selectedOrders[0].bizplaceName,
310
+ totalReleaseOrder: selectedOrders.length,
311
+ totalBatchWorksheet: possibleBatchWorksheet
312
+ }
313
+ })
314
+
315
+ return { records: data, total: data.length }
316
+ }
317
+
318
+ _validateWorksheets() {
319
+ //check if there is at least 2 orders, separate orders based on batch picking limit
320
+ this._partnerBizplaceIds.forEach(itm => {
321
+ let insufficientOrders = this._releaseGoods.filter(rg => rg.bizplaceId == itm)
322
+
323
+ if (insufficientOrders?.length < 2) {
324
+ throw new Error(i18next.t('text.minimum_of_2_orders_required_for_batch_picking'))
325
+ }
326
+ })
327
+
328
+ //check recall and normal orders are selected together
329
+ let uniqueWS = this.gristData.selected.filter(
330
+ res => res.recall !== this.gristData.selected[0].recall && res.status === ORDER_STATUS.PENDING_WORKSHEET.value
331
+ )
332
+
333
+ if (uniqueWS.length > 0) {
334
+ throw new Error(i18next.t('text.recall_release_order_cant_be_generated_together_with_normal_release_order'))
335
+ }
336
+
337
+ //check route and without route orders are selected together
338
+ let withRouteLabel = this.gristData.selected.find(
339
+ itm => itm.routeId && itm.status === ORDER_STATUS.PENDING_WORKSHEET.value
340
+ )
341
+ let withoutRouteLabel = this.gristData.selected.find(
342
+ itm => itm.routeId == null && itm.status === ORDER_STATUS.PENDING_WORKSHEET.value
343
+ )
344
+
345
+ if (withRouteLabel && withoutRouteLabel) {
346
+ throw new Error(i18next.t('text.release_order_without_route_labelling_is_included_in_the_batch_picking'))
347
+ }
348
+ }
349
+
350
+ disableButton(button) {
351
+ button.icon = 'rotate_right'
352
+ button.setAttribute('working', true)
353
+ button.disabled = true
354
+ }
355
+
356
+ enableButton(button) {
357
+ button.disabled = false
358
+ button.icon = ''
359
+ button.removeAttribute('working')
360
+ }
361
+
362
+ _showToast({ type, message }) {
363
+ document.dispatchEvent(
364
+ new CustomEvent('notify', {
365
+ detail: {
366
+ type,
367
+ message
368
+ }
369
+ })
370
+ )
371
+ }
372
+ }
373
+
374
+ window.customElements.define('generate-worksheet-popup', GenerateWorksheetPopup)