@things-factory/operato-wms 3.7.15 → 3.8.0

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 (83) hide show
  1. package/client/pages/adjustment/transfer-inventory.js +364 -158
  2. package/client/pages/bulk-operation/bulk-operation.js +316 -0
  3. package/client/pages/bulk-operation/validate-ro-popup.js +445 -0
  4. package/client/pages/components/select-product-popup.js +1 -1
  5. package/client/pages/constants/inventory.js +1 -0
  6. package/client/pages/constants/location.js +33 -6
  7. package/client/pages/constants/worksheet.js +2 -2
  8. package/client/pages/inbound/inbound-worksheet.js +81 -15
  9. package/client/pages/inbound/putaway-product.js +60 -8
  10. package/client/pages/inbound/putaway-worksheet-generate-popup.js +29 -5
  11. package/client/pages/inbound/unload-product.js +80 -19
  12. package/client/pages/inbound/worksheet-putaway-return.js +14 -5
  13. package/client/pages/inbound/worksheet-putaway.js +13 -8
  14. package/client/pages/inbound/worksheet-unloading-return.js +14 -5
  15. package/client/pages/inventory/inventory-adjustment-approval.js +18 -8
  16. package/client/pages/inventory/inventory-adjustment.js +81 -76
  17. package/client/pages/inventory/inventory-by-product-detail.js +1 -1
  18. package/client/pages/inventory/inventory-by-product.js +1 -1
  19. package/client/pages/inventory/inventory-history-by-pallet.js +1 -1
  20. package/client/pages/inventory/inventory-history.js +2 -2
  21. package/client/pages/inventory/onhand-inventory.js +1 -2
  22. package/client/pages/inventory-check/create-cycle-count.js +1 -6
  23. package/client/pages/master/location-list.js +58 -17
  24. package/client/pages/order/arrival-notice/arrival-notice-detail.js +15 -8
  25. package/client/pages/order/arrival-notice/arrival-notice-list.js +87 -6
  26. package/client/pages/order/arrival-notice/arrival-notice-requests.js +83 -6
  27. package/client/pages/order/arrival-notice/create-arrival-notice.js +23 -2
  28. package/client/pages/order/arrival-notice/duplicate-arrival-notice.js +290 -25
  29. package/client/pages/order/arrival-notice/edit-product-popup.js +36 -5
  30. package/client/pages/order/release-order/b2b/b2b-order-requests.js +7 -7
  31. package/client/pages/order/release-order/b2c/b2c-order-requests.js +65 -5
  32. package/client/pages/order/release-order/release-extra-product-popup.js +12 -4
  33. package/client/pages/order/release-order/release-order-detail.js +1 -1
  34. package/client/pages/order/return-order/create-return-order.js +1 -1
  35. package/client/pages/order/return-order/return-order-detail.js +6 -5
  36. package/client/pages/order/transport-order/delivery-order-list.js +4 -1
  37. package/client/pages/outbound/inventory-assign-popup.js +1 -1
  38. package/client/pages/outbound/merged-outbound-worksheet.js +9 -5
  39. package/client/pages/outbound/picking-product.js +202 -162
  40. package/client/pages/outbound/picking-replacement-popup.js +2 -2
  41. package/client/pages/outbound/single-outbound-worksheet.js +47 -1
  42. package/client/pages/outbound/worksheet-loading.js +14 -5
  43. package/client/pages/outbound/worksheet-picking.js +10 -5
  44. package/client/pages/report/custom-elccl/elccl-inventory-report.js +31 -30
  45. package/client/pages/report/custom-elccl/elccl-inventory-summary-report.js +23 -26
  46. package/client/pages/report/inventory-pallet-storage-report.js +11 -10
  47. package/client/pages/report/inventory-report.js +41 -43
  48. package/client/pages/report/inventory-summary-report.js +25 -28
  49. package/client/route.js +5 -0
  50. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js +1 -1
  51. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js.map +1 -1
  52. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js +1 -1
  53. package/dist-server/graphql/resolvers/index.js +3 -1
  54. package/dist-server/graphql/resolvers/index.js.map +1 -1
  55. package/dist-server/graphql/resolvers/shipping-provider/index.js +6 -0
  56. package/dist-server/graphql/resolvers/shipping-provider/index.js.map +1 -0
  57. package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js +20 -0
  58. package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js.map +1 -0
  59. package/dist-server/graphql/types/custom/elccl/elccl-inventory-report.js +1 -1
  60. package/dist-server/graphql/types/index.js +5 -2
  61. package/dist-server/graphql/types/index.js.map +1 -1
  62. package/dist-server/graphql/types/shipping-provider/index.js +10 -0
  63. package/dist-server/graphql/types/shipping-provider/index.js.map +1 -0
  64. package/dist-server/graphql/types/shipping-provider/shipping-provider-list.js +13 -0
  65. package/dist-server/graphql/types/shipping-provider/shipping-provider-list.js.map +1 -0
  66. package/dist-server/graphql/types/shipping-provider/shipping-provider.js +13 -0
  67. package/dist-server/graphql/types/shipping-provider/shipping-provider.js.map +1 -0
  68. package/package.json +37 -37
  69. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.ts +4 -2
  70. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts +1 -1
  71. package/server/graphql/resolvers/index.ts +3 -1
  72. package/server/graphql/resolvers/shipping-provider/index.ts +5 -0
  73. package/server/graphql/resolvers/shipping-provider/shipping-providers.ts +20 -0
  74. package/server/graphql/types/custom/elccl/elccl-inventory-report.ts +1 -1
  75. package/server/graphql/types/index.ts +5 -2
  76. package/server/graphql/types/shipping-provider/index.ts +8 -0
  77. package/server/graphql/types/shipping-provider/shipping-provider-list.ts +7 -0
  78. package/server/graphql/types/shipping-provider/shipping-provider.ts +7 -0
  79. package/things-factory.config.js +6 -0
  80. package/translations/en.json +27 -0
  81. package/translations/ko.json +84 -36
  82. package/translations/ms.json +85 -37
  83. package/translations/zh.json +98 -51
@@ -16,11 +16,6 @@ import { isMobileDevice } from '@things-factory/utils'
16
16
  import { fetchLocationSortingRule } from '../../fetch-location-sorting-rule'
17
17
  import { LOCATION_SORTING_RULE } from '../constants'
18
18
 
19
- // import { openPopup } from '@things-factory/layout-base'
20
- // import { fetchLocationSortingRule } from '../../fetch-location-sorting-rule'
21
- // import { INVENTORY_STATUS, LOCATION_SORTING_RULE } from '../constants'
22
- // import { fetchSettingRule } from '../../../fetch-setting-value'
23
-
24
19
  const _ = require('lodash')
25
20
 
26
21
  class CreateCycleCount extends localize(i18next)(PageView) {
@@ -166,7 +161,7 @@ class CreateCycleCount extends localize(i18next)(PageView) {
166
161
  basicArgs: {
167
162
  filters: [
168
163
  { name: 'bizplace_id', operator: 'eq', value: this._bizplaceId },
169
- { name: 'groupType', operator: 'noteq', value: 'BUNDLE' }
164
+ { name: 'hideBundle', operator: 'eq', value: true }
170
165
  ]
171
166
  },
172
167
  nameField: 'batchId',
@@ -1,18 +1,21 @@
1
- import { DirectPrinter } from '@things-factory/barcode-base'
2
1
  import '@things-factory/form-ui'
3
2
  import '@things-factory/grist-ui'
4
- import { i18next, localize } from '@things-factory/i18n-base'
5
3
  import '@things-factory/import-ui'
6
- import { openPopup } from '@things-factory/layout-base'
7
- import { client, CustomAlert, PageView, store } from '@things-factory/shell'
8
- import { ScrollbarStyles, CommonButtonStyles } from '@things-factory/styles'
9
- import { gqlBuilder, isMobileDevice } from '@things-factory/utils'
4
+ import './generate-location-list'
5
+ import './print-location-label'
6
+
10
7
  import gql from 'graphql-tag'
11
8
  import { css, html } from 'lit-element'
12
9
  import { connect } from 'pwa-helpers/connect-mixin'
13
- import { LOCATION_LABEL_SETTING_KEY } from '../constants'
14
- import './generate-location-list'
15
- import './print-location-label'
10
+
11
+ import { DirectPrinter } from '@things-factory/barcode-base'
12
+ import { i18next, localize } from '@things-factory/i18n-base'
13
+ import { openPopup } from '@things-factory/layout-base'
14
+ import { client, CustomAlert, PageView, store } from '@things-factory/shell'
15
+ import { CommonButtonStyles, ScrollbarStyles } from '@things-factory/styles'
16
+ import { gqlBuilder, isMobileDevice } from '@things-factory/utils'
17
+
18
+ import { LOCATION_LABEL_SETTING_KEY, LOCATION_STATUS, LOCATION_TYPE } from '../constants'
16
19
 
17
20
  class LocationList extends connect(store)(localize(i18next)(PageView)) {
18
21
  static get styles() {
@@ -130,8 +133,19 @@ class LocationList extends connect(store)(localize(i18next)(PageView)) {
130
133
  {
131
134
  label: i18next.t('field.type'),
132
135
  name: 'type',
133
- type: 'text',
134
- props: { searchOper: 'i_like' }
136
+ type: 'select',
137
+ options: [
138
+ { value: '' },
139
+ ...Object.values(LOCATION_TYPE)
140
+ .map(type => {
141
+ return {
142
+ name: type.name,
143
+ value: type.value
144
+ }
145
+ })
146
+ .sort((a, b) => (a.name > b.name ? 1 : -1))
147
+ ],
148
+ props: { searchOper: 'eq' }
135
149
  },
136
150
  {
137
151
  label: i18next.t('field.zone'),
@@ -160,8 +174,19 @@ class LocationList extends connect(store)(localize(i18next)(PageView)) {
160
174
  {
161
175
  label: i18next.t('field.status'),
162
176
  name: 'status',
163
- type: 'text',
164
- props: { searchOper: 'i_like' }
177
+ type: 'select',
178
+ options: [
179
+ { value: '' },
180
+ ...Object.values(LOCATION_STATUS)
181
+ .map(status => {
182
+ return {
183
+ name: status.name,
184
+ value: status.value
185
+ }
186
+ })
187
+ .sort((a, b) => (a.name > b.name ? 1 : -1))
188
+ ],
189
+ props: { searchOper: 'eq' }
165
190
  }
166
191
  ]
167
192
 
@@ -185,10 +210,18 @@ class LocationList extends connect(store)(localize(i18next)(PageView)) {
185
210
  width: 150
186
211
  },
187
212
  {
188
- type: 'string',
213
+ type: 'select',
189
214
  name: 'type',
190
215
  header: i18next.t('field.type'),
191
- record: { editable: true },
216
+ record: {
217
+ editable: true,
218
+ options: [
219
+ '',
220
+ ...Object.values(LOCATION_TYPE)
221
+ .map(type => type.value)
222
+ .sort()
223
+ ]
224
+ },
192
225
  imex: { header: i18next.t('field.type'), key: 'type', width: 50, type: 'string' },
193
226
  sortable: true,
194
227
  width: 150
@@ -231,10 +264,18 @@ class LocationList extends connect(store)(localize(i18next)(PageView)) {
231
264
  width: 80
232
265
  },
233
266
  {
234
- type: 'string',
267
+ type: 'select',
235
268
  name: 'status',
236
269
  header: i18next.t('field.status'),
237
- record: { editable: true },
270
+ record: {
271
+ editable: true,
272
+ options: [
273
+ '',
274
+ ...Object.values(LOCATION_STATUS)
275
+ .map(status => status.value)
276
+ .sort()
277
+ ]
278
+ },
238
279
  imex: { header: i18next.t('field.status'), key: 'status', width: 50, type: 'string' },
239
280
  sortable: true,
240
281
  width: 80
@@ -1,15 +1,21 @@
1
- import { MultiColumnFormStyles } from '@things-factory/form-ui'
2
1
  import '@things-factory/grist-ui'
2
+ import '../../components/attachment-viewer'
3
+ import '../../components/vas-templates'
4
+ import './edit-product-popup'
5
+ import './proceed-edit-product-popup'
6
+ import './view-product-changes-popup'
7
+
8
+ import gql from 'graphql-tag'
9
+ import { css, html } from 'lit-element'
10
+
11
+ import { MultiColumnFormStyles } from '@things-factory/form-ui'
3
12
  import { getRenderer } from '@things-factory/grist-ui'
4
13
  import { i18next, localize } from '@things-factory/i18n-base'
5
14
  import { openPopup } from '@things-factory/layout-base'
6
15
  import { client, CustomAlert, navigate, PageView } from '@things-factory/shell'
7
16
  import { CommonButtonStyles } from '@things-factory/styles'
8
17
  import { isMobileDevice } from '@things-factory/utils'
9
- import gql from 'graphql-tag'
10
- import { css, html } from 'lit-element'
11
- import '../../components/attachment-viewer'
12
- import '../../components/vas-templates'
18
+
13
19
  import {
14
20
  ORDER_PRODUCT_STATUS,
15
21
  ORDER_STATUS,
@@ -18,9 +24,6 @@ import {
18
24
  VAS_ETC_TYPE,
19
25
  VAS_PRODUCT_TYPE
20
26
  } from '../../constants'
21
- import './edit-product-popup'
22
- import './proceed-edit-product-popup'
23
- import './view-product-changes-popup'
24
27
 
25
28
  class ArrivalNoticeDetail extends localize(i18next)(PageView) {
26
29
  static get properties() {
@@ -927,6 +930,10 @@ class ArrivalNoticeDetail extends localize(i18next)(PageView) {
927
930
  }
928
931
 
929
932
  openEditProductPopup() {
933
+ this.productData.records = this.productData.records.filter(
934
+ orderProduct => orderProduct.status !== ORDER_PRODUCT_STATUS.UNLOADED.value
935
+ )
936
+
930
937
  openPopup(
931
938
  html`
932
939
  <edit-product-popup
@@ -204,12 +204,29 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
204
204
  ]
205
205
 
206
206
  this.config = {
207
- list: { fields: ['name', 'etaDate', 'importCargo', 'ownTransport', 'crossDocking', 'updatedAt', 'updater'] },
207
+ list: {
208
+ fields: [
209
+ 'name',
210
+ 'bizplace',
211
+ 'refNo',
212
+ 'refNo2',
213
+ 'refNo3',
214
+ 'etaDate',
215
+ 'container',
216
+ 'importCargo',
217
+ 'ownTransport',
218
+ 'crossDocking',
219
+ 'status',
220
+ 'createdAt',
221
+ 'updatedAt',
222
+ 'creator'
223
+ ]
224
+ },
208
225
  rows: { appendable: false, selectable: { multiple: true } },
209
226
  pagination: { limit: 100, pages: [20, 50, 100, 200, 500] },
210
227
  columns: [
211
- { type: 'gutter', gutterName: 'dirty' },
212
228
  { type: 'gutter', gutterName: 'sequence' },
229
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
213
230
  {
214
231
  type: 'gutter',
215
232
  gutterName: 'button',
@@ -229,6 +246,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
229
246
  type: 'string',
230
247
  name: 'name',
231
248
  header: i18next.t('field.gan'),
249
+ label: true,
232
250
  sortable: true,
233
251
  width: 180
234
252
  },
@@ -236,6 +254,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
236
254
  type: 'object',
237
255
  name: 'bizplace',
238
256
  header: i18next.t('field.company'),
257
+ label: true,
239
258
  sortable: true,
240
259
  width: 250
241
260
  },
@@ -243,6 +262,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
243
262
  type: 'string',
244
263
  name: 'refNo',
245
264
  header: i18next.t('field.ref_no'),
265
+ label: true,
246
266
  sortable: true,
247
267
  width: 150
248
268
  },
@@ -250,6 +270,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
250
270
  type: 'string',
251
271
  name: 'refNo2',
252
272
  header: i18next.t('field.ref_no_2'),
273
+ label: true,
253
274
  sortable: true,
254
275
  width: 150
255
276
  },
@@ -257,6 +278,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
257
278
  type: 'string',
258
279
  name: 'refNo3',
259
280
  header: i18next.t('field.ref_no_3'),
281
+ label: true,
260
282
  sortable: true,
261
283
  width: 150
262
284
  },
@@ -264,6 +286,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
264
286
  type: 'date',
265
287
  name: 'etaDate',
266
288
  header: i18next.t('field.eta'),
289
+ label: true,
267
290
  sortable: true,
268
291
  width: 120
269
292
  },
@@ -271,6 +294,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
271
294
  type: 'boolean',
272
295
  name: 'container',
273
296
  header: i18next.t('field.container'),
297
+ label: true,
274
298
  sortable: true,
275
299
  width: 60
276
300
  },
@@ -278,6 +302,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
278
302
  type: 'boolean',
279
303
  name: 'importCargo',
280
304
  header: i18next.t('field.import_cargo'),
305
+ label: true,
281
306
  sortable: true,
282
307
  width: 60
283
308
  },
@@ -285,6 +310,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
285
310
  type: 'boolean',
286
311
  name: 'ownTransport',
287
312
  header: i18next.t('field.own_transport'),
313
+ label: true,
288
314
  sortable: true,
289
315
  width: 60
290
316
  },
@@ -292,18 +318,23 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
292
318
  type: 'boolean',
293
319
  name: 'crossDocking',
294
320
  header: i18next.t('field.cross_docking'),
321
+ label: true,
322
+ sortable: true,
295
323
  width: 60
296
324
  },
297
325
  {
298
326
  type: 'object',
299
327
  name: 'releaseGood',
300
328
  header: i18next.t('field.ro'),
329
+ label: true,
330
+ sortable: true,
301
331
  width: 160
302
332
  },
303
333
  {
304
334
  type: 'string',
305
335
  name: 'status',
306
336
  header: i18next.t('field.status'),
337
+ label: true,
307
338
  sortable: true,
308
339
  width: 120
309
340
  },
@@ -311,6 +342,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
311
342
  type: 'datetime',
312
343
  name: 'createdAt',
313
344
  header: i18next.t('field.created_at'),
345
+ label: true,
314
346
  sortable: true,
315
347
  width: 160
316
348
  },
@@ -318,6 +350,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
318
350
  type: 'datetime',
319
351
  name: 'updatedAt',
320
352
  header: i18next.t('field.updated_at'),
353
+ label: true,
321
354
  sortable: true,
322
355
  width: 160
323
356
  },
@@ -325,6 +358,7 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
325
358
  type: 'object',
326
359
  name: 'creator',
327
360
  header: i18next.t('field.created_by'),
361
+ label: true,
328
362
  sortable: true,
329
363
  width: 200
330
364
  }
@@ -447,12 +481,59 @@ class ArrivalNoticeList extends localize(i18next)(PageView) {
447
481
  }
448
482
  }
449
483
 
450
- get _columns() {
451
- return this.config.columns
484
+ async _exportableData() {
485
+ try {
486
+ let data = []
487
+
488
+ var headerSetting = [
489
+ { header: i18next.t('field.order_no'), key: 'name', width: 25, type: 'string' },
490
+ { header: i18next.t('field.company'), key: 'bizplaceName', width: 25, type: 'string' },
491
+ { header: i18next.t('field.ref_no'), key: 'refNo', width: 25, type: 'string' },
492
+ { header: i18next.t('field.ref_no_2'), key: 'refNo2', width: 25, type: 'string' },
493
+ { header: i18next.t('field.ref_no_3'), key: 'refNo3', width: 25, type: 'string' },
494
+ { header: i18next.t('field.eta_date'), key: 'etaDate', width: 30, type: 'string' },
495
+ { header: i18next.t('field.container'), key: 'container', width: 30, type: 'string' },
496
+ { header: i18next.t('field.import_cargo'), key: 'importCargo', width: 30, type: 'string' },
497
+ { header: i18next.t('field.cross_docking'), key: 'crossDocking', width: 30, type: 'string' },
498
+ { header: i18next.t('field.status'), key: 'status', width: 25, type: 'string' },
499
+ { header: i18next.t('field.created_at'), key: 'createdAt', width: 30, type: 'date' },
500
+ { header: i18next.t('field.updated_at'), key: 'updatedAt', width: 30, type: 'date' },
501
+ { header: i18next.t('field.created_by'), key: 'creatorName', width: 25, type: 'string' }
502
+ ]
503
+
504
+ if (this.dataGrist.selected && this.dataGrist.selected.length > 0) {
505
+ data = this.dataGrist.selected.map(record => {
506
+ return {
507
+ ...record,
508
+ bizplaceName: record.bizplace?.name,
509
+ creatorName: record.creator?.name
510
+ }
511
+ })
512
+ } else {
513
+ data = (await this.fetchHandler({ page: 1, limit: 9999999 })).records.map(record => {
514
+ return {
515
+ ...record,
516
+ bizplaceName: record.bizplace?.name,
517
+ creatorName: record.creator?.name
518
+ }
519
+ })
520
+ }
521
+
522
+ return { header: headerSetting, data }
523
+ } catch (e) {
524
+ this._showToast(e)
525
+ }
452
526
  }
453
527
 
454
- _exportableData() {
455
- return this.dataGrist.exportRecords()
528
+ _showToast({ type, message }) {
529
+ document.dispatchEvent(
530
+ new CustomEvent('notify', {
531
+ detail: {
532
+ type,
533
+ message
534
+ }
535
+ })
536
+ )
456
537
  }
457
538
  }
458
539
 
@@ -216,12 +216,27 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
216
216
  this.config = {
217
217
  rows: { appendable: false, selectable: { multiple: true } },
218
218
  list: {
219
- fields: ['bizplace', 'status', 'updatedAt']
219
+ fields: [
220
+ 'name',
221
+ 'bizplace',
222
+ 'refNo',
223
+ 'refNo2',
224
+ 'refNo3',
225
+ 'etaDate',
226
+ 'container',
227
+ 'importCargo',
228
+ 'ownTransport',
229
+ 'crossDocking',
230
+ 'status',
231
+ 'createdAt',
232
+ 'updatedAt',
233
+ 'acceptedBy'
234
+ ]
220
235
  },
221
236
  pagination: { limit: 100, pages: [20, 50, 100, 200, 500] },
222
237
  columns: [
223
- { type: 'gutter', gutterName: 'dirty' },
224
238
  { type: 'gutter', gutterName: 'sequence' },
239
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
225
240
  {
226
241
  type: 'gutter',
227
242
  gutterName: 'button',
@@ -245,6 +260,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
245
260
  type: 'string',
246
261
  name: 'name',
247
262
  header: i18next.t('field.gan'),
263
+ label: true,
248
264
  sortable: true,
249
265
  width: 180
250
266
  },
@@ -252,6 +268,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
252
268
  type: 'object',
253
269
  name: 'bizplace',
254
270
  header: i18next.t('field.company'),
271
+ label: true,
255
272
  sortable: true,
256
273
  width: 250
257
274
  },
@@ -259,6 +276,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
259
276
  type: 'string',
260
277
  name: 'refNo',
261
278
  header: i18next.t('field.ref_no'),
279
+ label: true,
262
280
  sortable: true,
263
281
  width: 150
264
282
  },
@@ -266,6 +284,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
266
284
  type: 'string',
267
285
  name: 'refNo2',
268
286
  header: i18next.t('field.ref_no_2'),
287
+ label: true,
269
288
  sortable: true,
270
289
  width: 150
271
290
  },
@@ -273,6 +292,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
273
292
  type: 'string',
274
293
  name: 'refNo3',
275
294
  header: i18next.t('field.ref_no_3'),
295
+ label: true,
276
296
  sortable: true,
277
297
  width: 150
278
298
  },
@@ -280,6 +300,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
280
300
  type: 'date',
281
301
  name: 'etaDate',
282
302
  header: i18next.t('field.eta'),
303
+ label: true,
283
304
  sortable: true,
284
305
  width: 120
285
306
  },
@@ -287,6 +308,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
287
308
  type: 'boolean',
288
309
  name: 'container',
289
310
  header: i18next.t('field.container'),
311
+ label: true,
290
312
  sortable: true,
291
313
  width: 60
292
314
  },
@@ -294,6 +316,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
294
316
  type: 'boolean',
295
317
  name: 'importCargo',
296
318
  header: i18next.t('field.import_cargo'),
319
+ label: true,
297
320
  sortable: true,
298
321
  width: 60
299
322
  },
@@ -301,6 +324,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
301
324
  type: 'boolean',
302
325
  name: 'ownTransport',
303
326
  header: i18next.t('field.own_transport'),
327
+ label: true,
304
328
  sortable: true,
305
329
  width: 60
306
330
  },
@@ -308,18 +332,21 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
308
332
  type: 'boolean',
309
333
  name: 'crossDocking',
310
334
  header: i18next.t('field.cross_docking'),
335
+ label: true,
311
336
  width: 60
312
337
  },
313
338
  {
314
339
  type: 'object',
315
340
  name: 'releaseGood',
316
341
  header: i18next.t('field.ro'),
342
+ label: true,
317
343
  width: 160
318
344
  },
319
345
  {
320
346
  type: 'string',
321
347
  name: 'status',
322
348
  header: i18next.t('field.status'),
349
+ label: true,
323
350
  sortable: true,
324
351
  width: 120
325
352
  },
@@ -327,6 +354,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
327
354
  type: 'datetime',
328
355
  name: 'createdAt',
329
356
  header: i18next.t('field.created_at'),
357
+ label: true,
330
358
  sortable: true,
331
359
  width: 160
332
360
  },
@@ -334,6 +362,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
334
362
  type: 'datetime',
335
363
  name: 'updatedAt',
336
364
  header: i18next.t('field.updated_at'),
365
+ label: true,
337
366
  sortable: true,
338
367
  width: 160
339
368
  },
@@ -341,6 +370,7 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
341
370
  type: 'object',
342
371
  name: 'acceptedBy',
343
372
  header: i18next.t('field.accepted_by'),
373
+ label: true,
344
374
  sortable: true,
345
375
  width: 200
346
376
  }
@@ -458,12 +488,59 @@ class ArrivalNoticeRequests extends localize(i18next)(PageView) {
458
488
  }
459
489
  }
460
490
 
461
- get _columns() {
462
- return this.config.columns
491
+ async _exportableData() {
492
+ try {
493
+ let data = []
494
+
495
+ var headerSetting = [
496
+ { header: i18next.t('field.order_no'), key: 'name', width: 25, type: 'string' },
497
+ { header: i18next.t('field.company'), key: 'bizplaceName', width: 25, type: 'string' },
498
+ { header: i18next.t('field.ref_no'), key: 'refNo', width: 25, type: 'string' },
499
+ { header: i18next.t('field.ref_no_2'), key: 'refNo2', width: 25, type: 'string' },
500
+ { header: i18next.t('field.ref_no_3'), key: 'refNo3', width: 25, type: 'string' },
501
+ { header: i18next.t('field.eta_date'), key: 'etaDate', width: 30, type: 'string' },
502
+ { header: i18next.t('field.container'), key: 'container', width: 30, type: 'string' },
503
+ { header: i18next.t('field.import_cargo'), key: 'importCargo', width: 30, type: 'string' },
504
+ { header: i18next.t('field.cross_docking'), key: 'crossDocking', width: 30, type: 'string' },
505
+ { header: i18next.t('field.status'), key: 'status', width: 25, type: 'string' },
506
+ { header: i18next.t('field.created_at'), key: 'createdAt', width: 30, type: 'date' },
507
+ { header: i18next.t('field.updated_at'), key: 'updatedAt', width: 30, type: 'date' },
508
+ { header: i18next.t('field.accepted_by'), key: 'acceptedByName', width: 25, type: 'string' }
509
+ ]
510
+
511
+ if (this.dataGrist.selected && this.dataGrist.selected.length > 0) {
512
+ data = this.dataGrist.selected.map(record => {
513
+ return {
514
+ ...record,
515
+ bizplaceName: record.bizplace?.name,
516
+ acceptedByName: record.acceptedBy?.name
517
+ }
518
+ })
519
+ } else {
520
+ data = (await this.fetchHandler({ page: 1, limit: 9999999 })).records.map(record => {
521
+ return {
522
+ ...record,
523
+ bizplaceName: record.bizplace?.name,
524
+ acceptedByName: record.acceptedBy?.name
525
+ }
526
+ })
527
+ }
528
+
529
+ return { header: headerSetting, data }
530
+ } catch (e) {
531
+ this._showToast(e)
532
+ }
463
533
  }
464
534
 
465
- _exportableData() {
466
- return this.dataGrist.exportRecords()
535
+ _showToast({ type, message }) {
536
+ document.dispatchEvent(
537
+ new CustomEvent('notify', {
538
+ detail: {
539
+ type,
540
+ message
541
+ }
542
+ })
543
+ )
467
544
  }
468
545
  }
469
546
 
@@ -660,7 +660,7 @@ class CreateArrivalNotice extends localize(i18next)(PageView) {
660
660
  name: 'manufactureYear',
661
661
  header: i18next.t('field.manufacture_year'),
662
662
  imex: { header: i18next.t('field.manufacture_year'), key: 'manufactureYear', width: 25, type: 'float' },
663
- record: { editable: editable, options: { min: 1500, max: 2200 } },
663
+ record: { editable: editable },
664
664
  width: 100
665
665
  },
666
666
  {
@@ -786,6 +786,26 @@ class CreateArrivalNotice extends localize(i18next)(PageView) {
786
786
  }
787
787
  }
788
788
 
789
+ if (changedColumn === 'manufactureYear') {
790
+ let manufactureYear = changeRecord.manufactureYear
791
+ const regExp = /^(181[2-9]|18[2-9]\d|19\d\d|2\d{3}|30[0-3]\d|304[0-8])$/
792
+
793
+ if (typeof manufactureYear === undefined || !regExp.test(manufactureYear)) {
794
+ if (manufactureYear === 0) {
795
+ delete event.detail.after[event.detail.column.name]
796
+ } else {
797
+ throw new Error(i18next.t('text.invalid_x', { state: { x: i18next.t('label.manufacture_year') } }))
798
+ }
799
+ }
800
+ }
801
+
802
+ if (changedColumn === 'unitPrice') {
803
+ let unitPrice = changeRecord.unitPrice
804
+ if (typeof unitPrice === undefined || unitPrice < 0) {
805
+ throw new Error(i18next.t('text.x_should_be_positive', { state: { x: i18next.t('label.unit_price') } }))
806
+ }
807
+ }
808
+
789
809
  this._updateVasTargets(true)
790
810
  } catch (e) {
791
811
  const beforeValue = event.detail.before && event.detail.before[event.detail.column.name]
@@ -917,7 +937,7 @@ class CreateArrivalNotice extends localize(i18next)(PageView) {
917
937
 
918
938
  const response = await client.query({
919
939
  query: gql`
920
- query productDetails($filters: [Filter]) {
940
+ query productDetails($filters: [Filter!]!) {
921
941
  productDetails(filters: $filters) {
922
942
  items {
923
943
  id
@@ -1461,6 +1481,7 @@ class CreateArrivalNotice extends localize(i18next)(PageView) {
1461
1481
  this.vasGrist.reset()
1462
1482
  this._strictProductSelection = await fetchSettingRule('strict-product-selection', e.detail.domain.id)
1463
1483
  this._configureProductGrist()
1484
+ this._clearView()
1464
1485
  }}"
1465
1486
  ></popup-partner-bizplaces-selector>
1466
1487
  `,