@things-factory/operato-wms 3.7.2 → 3.7.7

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 (84) hide show
  1. package/client/pages/components/select-product-popup.js +5 -1
  2. package/client/pages/constants/order.js +10 -0
  3. package/client/pages/inbound/putaway-product.js +162 -139
  4. package/client/pages/inventory-check/inspecting-product.js +146 -80
  5. package/client/pages/manifest/create-loading-manifest.js +314 -0
  6. package/client/pages/manifest/dispatcher-verification-popup.js +86 -0
  7. package/client/pages/manifest/loading-manifest-detail.js +345 -0
  8. package/client/pages/manifest/loading-manifest-list.js +305 -0
  9. package/client/pages/order/arrival-notice/create-arrival-notice.js +8 -1
  10. package/client/pages/order/goods-received-note/received-note-list.js +138 -6
  11. package/client/pages/order/release-order/b2b/b2b-order-list.js +45 -5
  12. package/client/pages/order/release-order/b2b/b2b-order-requests.js +45 -5
  13. package/client/pages/order/release-order/b2c/b2c-order-requests.js +181 -21
  14. package/client/pages/order/release-order/bulk-print-packing-list.js +23 -0
  15. package/client/pages/order/release-order/create-release-order.js +25 -4
  16. package/client/pages/order/release-order/receive-release-order-request.js +27 -24
  17. package/client/pages/order/release-order/release-extra-product-popup.js +189 -56
  18. package/client/pages/order/release-order/release-order-detail.js +292 -71
  19. package/client/pages/order/reverse-kitting-order/reverse-kitting-order-detail.js +115 -50
  20. package/client/pages/order/reverse-kitting-order/reverse-kitting-order-list.js +1 -6
  21. package/client/pages/order/reverse-kitting-order/reverse-kitting-pallet-label-popup.js +239 -0
  22. package/client/pages/order/transport-order/delivery-order-list.js +99 -59
  23. package/client/pages/outbound/loading-product.js +4 -1
  24. package/client/pages/outbound/merged-outbound-worksheet.js +39 -1
  25. package/client/pages/outbound/packing-product.js +4 -1
  26. package/client/pages/outbound/packing-worksheet-list.js +39 -1
  27. package/client/pages/outbound/picking-product.js +622 -290
  28. package/client/pages/outbound/serial-number-popup.js +280 -0
  29. package/client/pages/outbound/worksheet-picking.js +28 -2
  30. package/client/pages/report/product-label-report.js +401 -0
  31. package/client/pages/support/inventory-comparison.js +296 -0
  32. package/client/pages/vas/print-product-label.js +298 -132
  33. package/client/pages/vas/reverse-kitting/execute-reverse-kitting.js +30 -12
  34. package/client/pages/vas/reverse-kitting/popup-combination-sets.js +75 -5
  35. package/client/pages/vas/reverse-kitting/popup-reverse-kitting-template.js +113 -18
  36. package/client/route.js +23 -0
  37. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js +64 -54
  38. package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js.map +1 -1
  39. package/dist-server/graphql/resolvers/extra/add-release-good-products.js +34 -9
  40. package/dist-server/graphql/resolvers/extra/add-release-good-products.js.map +1 -1
  41. package/dist-server/graphql/resolvers/index.js +3 -1
  42. package/dist-server/graphql/resolvers/index.js.map +1 -1
  43. package/dist-server/graphql/resolvers/inventory-comparison/index.js +6 -0
  44. package/dist-server/graphql/resolvers/inventory-comparison/index.js.map +1 -0
  45. package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js +78 -0
  46. package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js.map +1 -0
  47. package/dist-server/graphql/resolvers/reports/index.js +2 -1
  48. package/dist-server/graphql/resolvers/reports/index.js.map +1 -1
  49. package/dist-server/graphql/resolvers/reports/product-label-report.js +56 -0
  50. package/dist-server/graphql/resolvers/reports/product-label-report.js.map +1 -0
  51. package/dist-server/graphql/types/index.js +5 -2
  52. package/dist-server/graphql/types/index.js.map +1 -1
  53. package/dist-server/graphql/types/inventory-comparison/index.js +13 -0
  54. package/dist-server/graphql/types/inventory-comparison/index.js.map +1 -0
  55. package/dist-server/graphql/types/inventory-comparison/inventory-comparison-list.js +14 -0
  56. package/dist-server/graphql/types/inventory-comparison/inventory-comparison-list.js.map +1 -0
  57. package/dist-server/graphql/types/inventory-comparison/inventory-comparison.js +18 -0
  58. package/dist-server/graphql/types/inventory-comparison/inventory-comparison.js.map +1 -0
  59. package/dist-server/graphql/types/reports/index.js +6 -1
  60. package/dist-server/graphql/types/reports/index.js.map +1 -1
  61. package/dist-server/graphql/types/reports/product-label-report-list.js +14 -0
  62. package/dist-server/graphql/types/reports/product-label-report-list.js.map +1 -0
  63. package/dist-server/graphql/types/reports/product-label-report.js +16 -0
  64. package/dist-server/graphql/types/reports/product-label-report.js.map +1 -0
  65. package/package.json +65 -65
  66. package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts +75 -65
  67. package/server/graphql/resolvers/extra/add-release-good-products.ts +57 -15
  68. package/server/graphql/resolvers/index.ts +3 -1
  69. package/server/graphql/resolvers/inventory-comparison/index.ts +5 -0
  70. package/server/graphql/resolvers/inventory-comparison/inventory-comparison-list.ts +99 -0
  71. package/server/graphql/resolvers/reports/index.ts +3 -1
  72. package/server/graphql/resolvers/reports/product-label-report.ts +56 -0
  73. package/server/graphql/types/index.ts +5 -2
  74. package/server/graphql/types/inventory-comparison/index.ts +11 -0
  75. package/server/graphql/types/inventory-comparison/inventory-comparison-list.ts +8 -0
  76. package/server/graphql/types/inventory-comparison/inventory-comparison.ts +12 -0
  77. package/server/graphql/types/reports/index.ts +6 -1
  78. package/server/graphql/types/reports/product-label-report-list.ts +8 -0
  79. package/server/graphql/types/reports/product-label-report.ts +10 -0
  80. package/things-factory.config.js +24 -0
  81. package/translations/en.json +64 -12
  82. package/translations/ko.json +50 -1
  83. package/translations/ms.json +51 -1
  84. package/translations/zh.json +50 -1
@@ -232,6 +232,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
232
232
  type: 'string',
233
233
  name: 'name',
234
234
  header: i18next.t('field.ro'),
235
+ imex: { header: i18next.t('field.ro'), key: 'name', width: 30, type: 'string' },
235
236
  sortable: true,
236
237
  width: 150
237
238
  },
@@ -239,6 +240,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
239
240
  type: 'object',
240
241
  name: 'bizplace',
241
242
  header: i18next.t('field.company'),
243
+ imex: { header: i18next.t('field.company'), key: 'bizplace.name', width: 30, type: 'string' },
242
244
  sortable: true,
243
245
  width: 250
244
246
  },
@@ -246,6 +248,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
246
248
  type: 'string',
247
249
  name: 'refNo',
248
250
  header: i18next.t('field.ref_no'),
251
+ imex: { header: i18next.t('field.ref_no'), key: 'refNo', width: 20, type: 'string' },
249
252
  sortable: true,
250
253
  width: 150
251
254
  },
@@ -253,6 +256,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
253
256
  type: 'string',
254
257
  name: 'refNo2',
255
258
  header: i18next.t('field.ref_no_2'),
259
+ imex: { header: i18next.t('field.ref_no_2'), key: 'refNo2', width: 20, type: 'string' },
256
260
  sortable: true,
257
261
  width: 150
258
262
  },
@@ -260,6 +264,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
260
264
  type: 'string',
261
265
  name: 'refNo3',
262
266
  header: i18next.t('field.ref_no_3'),
267
+ imex: { header: i18next.t('field.ref_no_3'), key: 'refNo3', width: 20, type: 'string' },
263
268
  sortable: true,
264
269
  width: 150
265
270
  },
@@ -267,6 +272,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
267
272
  type: 'date',
268
273
  name: 'releaseDate',
269
274
  header: i18next.t('field.release_date'),
275
+ imex: { header: i18next.t('field.release_date'), key: 'releaseDate', width: 20, type: 'string' },
270
276
  sortable: true,
271
277
  width: 120
272
278
  },
@@ -274,7 +280,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
274
280
  type: 'boolean',
275
281
  name: 'exportOption',
276
282
  header: i18next.t('field.export_option'),
277
- record: { align: 'center' },
283
+ imex: { header: i18next.t('field.export_option'), key: 'exportOption', width: 20, type: 'string' },
278
284
  sortable: true,
279
285
  width: 60
280
286
  },
@@ -282,7 +288,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
282
288
  type: 'boolean',
283
289
  name: 'ownTransport',
284
290
  header: i18next.t('field.own_transport'),
285
- record: { align: 'center' },
291
+ imex: { header: i18next.t('field.own_transport'), key: 'ownTransport', width: 20, type: 'string' },
286
292
  sortable: true,
287
293
  width: 60
288
294
  },
@@ -290,19 +296,21 @@ class B2bOrderList extends localize(i18next)(PageView) {
290
296
  type: 'boolean',
291
297
  name: 'crossDocking',
292
298
  header: i18next.t('field.cross_docking'),
293
- record: { align: 'center' },
299
+ imex: { header: i18next.t('field.cross_docking'), key: 'crossDocking', width: 20, type: 'string' },
294
300
  width: 60
295
301
  },
296
302
  {
297
303
  type: 'object',
298
304
  name: 'arrivalNotice',
299
305
  header: i18next.t('field.gan'),
306
+ imex: { header: i18next.t('field.gan'), key: 'arrivalNotice.name', width: 30, type: 'string' },
300
307
  width: 160
301
308
  },
302
309
  {
303
310
  type: 'string',
304
311
  name: 'status',
305
312
  header: i18next.t('field.status'),
313
+ imex: { header: i18next.t('field.status'), key: 'status', width: 30, type: 'string' },
306
314
  sortable: true,
307
315
  width: 120
308
316
  },
@@ -310,6 +318,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
310
318
  type: 'datetime',
311
319
  name: 'createdAt',
312
320
  header: i18next.t('field.created_at'),
321
+ imex: { header: i18next.t('field.created_at'), key: 'createdAt', width: 30, type: 'datetime' },
313
322
  sortable: true,
314
323
  width: 160
315
324
  },
@@ -317,6 +326,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
317
326
  type: 'datetime',
318
327
  name: 'updatedAt',
319
328
  header: i18next.t('field.updated_at'),
329
+ imex: { header: i18next.t('field.updated_at'), key: 'updatedAt', width: 30, type: 'datetime' },
320
330
  sortable: true,
321
331
  width: 160
322
332
  },
@@ -324,6 +334,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
324
334
  type: 'object',
325
335
  name: 'creator',
326
336
  header: i18next.t('field.created_by'),
337
+ imex: { header: i18next.t('field.created_by'), key: 'creator.name', width: 30, type: 'string' },
327
338
  sortable: true,
328
339
  width: 200
329
340
  }
@@ -343,7 +354,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
343
354
  return this.config.columns
344
355
  }
345
356
 
346
- async fetchHandler({ page, limit, sorters = [{ name: 'createdAt', desc: true }] }) {
357
+ async fetchHandler({ page, limit, sorters = [] }) {
347
358
  const response = await client.query({
348
359
  query: gql`
349
360
  query releaseGoodRequests($filters: [Filter], $pagination: Pagination, $sortings: [Sorting]) {
@@ -463,7 +474,36 @@ class B2bOrderList extends localize(i18next)(PageView) {
463
474
  }
464
475
 
465
476
  _exportableData() {
466
- return this.dataGrist.exportRecords()
477
+ let records = []
478
+ if (this.dataGrist.selected && this.dataGrist.selected.length > 0) {
479
+ records = this.dataGrist.selected
480
+ } else {
481
+ records = this.dataGrist.data.records
482
+ }
483
+
484
+ var headerSetting = this.dataGrist._config.columns
485
+ .filter(column => column.type !== 'gutter' /* && column.record !== undefined */ && column.imex !== undefined)
486
+ .map(column => {
487
+ return column.imex
488
+ })
489
+
490
+ var data = records.map(item => {
491
+ return {
492
+ id: item.id,
493
+ ...this._columns
494
+ .filter(column => column.type !== 'gutter' /* && column.record !== undefined */ && column.imex !== undefined)
495
+ .reduce((record, column) => {
496
+ record[column.imex.key] = column.imex.key
497
+ .split('.')
498
+ .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
499
+ if (column.type === 'datetime') {
500
+ record[column.imex.key] = new Date(parseInt(record[column.imex.key])).toLocaleString()
501
+ }
502
+ return record
503
+ }, {})
504
+ }
505
+ })
506
+ return { header: headerSetting, data: data }
467
507
  }
468
508
  }
469
509
 
@@ -231,6 +231,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
231
231
  type: 'string',
232
232
  name: 'name',
233
233
  header: i18next.t('field.ro'),
234
+ imex: { header: i18next.t('field.ro'), key: 'name', width: 30, type: 'string' },
234
235
  sortable: true,
235
236
  width: 150
236
237
  },
@@ -238,6 +239,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
238
239
  type: 'object',
239
240
  name: 'bizplace',
240
241
  header: i18next.t('field.company'),
242
+ imex: { header: i18next.t('field.company'), key: 'bizplace.name', width: 30, type: 'string' },
241
243
  sortable: true,
242
244
  width: 200
243
245
  },
@@ -245,6 +247,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
245
247
  type: 'string',
246
248
  name: 'refNo',
247
249
  header: i18next.t('field.ref_no'),
250
+ imex: { header: i18next.t('field.ref_no'), key: 'refNo', width: 20, type: 'string' },
248
251
  sortable: true,
249
252
  width: 160
250
253
  },
@@ -252,6 +255,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
252
255
  type: 'string',
253
256
  name: 'refNo2',
254
257
  header: i18next.t('field.ref_no_2'),
258
+ imex: { header: i18next.t('field.ref_no_2'), key: 'refNo2', width: 20, type: 'string' },
255
259
  sortable: true,
256
260
  width: 160
257
261
  },
@@ -259,6 +263,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
259
263
  type: 'string',
260
264
  name: 'refNo3',
261
265
  header: i18next.t('field.ref_no_3'),
266
+ imex: { header: i18next.t('field.ref_no_3'), key: 'refNo3', width: 20, type: 'string' },
262
267
  sortable: true,
263
268
  width: 160
264
269
  },
@@ -266,6 +271,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
266
271
  type: 'date',
267
272
  name: 'releaseDate',
268
273
  header: i18next.t('field.release_date'),
274
+ imex: { header: i18next.t('field.release_date'), key: 'releaseDate', width: 20, type: 'string' },
269
275
  sortable: true,
270
276
  width: 120
271
277
  },
@@ -273,7 +279,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
273
279
  type: 'boolean',
274
280
  name: 'exportOption',
275
281
  header: i18next.t('field.export_option'),
276
- record: { align: 'center' },
282
+ imex: { header: i18next.t('field.export_option'), key: 'exportOption', width: 20, type: 'string' },
277
283
  sortable: true,
278
284
  width: 60
279
285
  },
@@ -281,7 +287,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
281
287
  type: 'boolean',
282
288
  name: 'ownTransport',
283
289
  header: i18next.t('field.own_transport'),
284
- record: { align: 'center' },
290
+ imex: { header: i18next.t('field.own_transport'), key: 'ownTransport', width: 20, type: 'string' },
285
291
  sortable: true,
286
292
  width: 60
287
293
  },
@@ -289,19 +295,21 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
289
295
  type: 'boolean',
290
296
  name: 'crossDocking',
291
297
  header: i18next.t('field.cross_docking'),
292
- record: { align: 'center' },
298
+ imex: { header: i18next.t('field.cross_docking'), key: 'crossDocking', width: 20, type: 'string' },
293
299
  width: 60
294
300
  },
295
301
  {
296
302
  type: 'object',
297
303
  name: 'arrivalNotice',
298
304
  header: i18next.t('field.gan'),
305
+ imex: { header: i18next.t('field.gan'), key: 'arrivalNotice.name', width: 30, type: 'string' },
299
306
  width: 160
300
307
  },
301
308
  {
302
309
  type: 'string',
303
310
  name: 'status',
304
311
  header: i18next.t('field.status'),
312
+ imex: { header: i18next.t('field.status'), key: 'status', width: 30, type: 'string' },
305
313
  sortable: true,
306
314
  width: 120
307
315
  },
@@ -309,6 +317,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
309
317
  type: 'datetime',
310
318
  name: 'createdAt',
311
319
  header: i18next.t('field.created_at'),
320
+ imex: { header: i18next.t('field.created_at'), key: 'createdAt', width: 30, type: 'datetime' },
312
321
  sortable: true,
313
322
  width: 200
314
323
  },
@@ -316,6 +325,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
316
325
  type: 'datetime',
317
326
  name: 'updatedAt',
318
327
  header: i18next.t('field.updated_at'),
328
+ imex: { header: i18next.t('field.updated_at'), key: 'updatedAt', width: 30, type: 'datetime' },
319
329
  sortable: true,
320
330
  width: 160
321
331
  },
@@ -323,6 +333,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
323
333
  type: 'object',
324
334
  name: 'acceptedBy',
325
335
  header: i18next.t('field.accepted_by'),
336
+ imex: { header: i18next.t('field.accepted_by'), key: 'acceptedBy.name', width: 30, type: 'string' },
326
337
  sortable: true,
327
338
  width: 200
328
339
  }
@@ -338,7 +349,7 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
338
349
  return this.shadowRoot.querySelector('data-grist')
339
350
  }
340
351
 
341
- async fetchHandler({ page, limit, sorters = [{ name: 'updatedAt', desc: true }] }) {
352
+ async fetchHandler({ page, limit, sorters = [] }) {
342
353
  const response = await client.query({
343
354
  query: gql`
344
355
  query releaseGoodRequests($filters: [Filter], $pagination: Pagination, $sortings: [Sorting]) {
@@ -480,7 +491,36 @@ class B2bOrderRequests extends localize(i18next)(PageView) {
480
491
  }
481
492
 
482
493
  _exportableData() {
483
- return this.dataGrist.exportRecords()
494
+ let records = []
495
+ if (this.dataGrist.selected && this.dataGrist.selected.length > 0) {
496
+ records = this.dataGrist.selected
497
+ } else {
498
+ records = this.dataGrist.data.records
499
+ }
500
+
501
+ var headerSetting = this.dataGrist._config.columns
502
+ .filter(column => column.type !== 'gutter' /* && column.record !== undefined */ && column.imex !== undefined)
503
+ .map(column => {
504
+ return column.imex
505
+ })
506
+
507
+ var data = records.map(item => {
508
+ return {
509
+ id: item.id,
510
+ ...this._columns
511
+ .filter(column => column.type !== 'gutter' /* && column.record !== undefined */ && column.imex !== undefined)
512
+ .reduce((record, column) => {
513
+ record[column.imex.key] = column.imex.key
514
+ .split('.')
515
+ .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
516
+ if (column.type === 'datetime') {
517
+ record[column.imex.key] = new Date(parseInt(record[column.imex.key])).toLocaleString()
518
+ }
519
+ return record
520
+ }, {})
521
+ }
522
+ })
523
+ return { header: headerSetting, data: data }
484
524
  }
485
525
  }
486
526
 
@@ -113,18 +113,6 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
113
113
  ],
114
114
  props: { searchOper: 'eq' }
115
115
  },
116
- {
117
- label: i18next.t('field.release_date'),
118
- name: 'releaseDate',
119
- type: 'date',
120
- props: { searchOper: 'i_like' }
121
- },
122
- {
123
- label: i18next.t('field.ref_no'),
124
- name: 'refNo',
125
- type: 'text',
126
- props: { searchOper: 'i_like' }
127
- },
128
116
  {
129
117
  label: i18next.t('field.status'),
130
118
  name: 'status',
@@ -136,6 +124,52 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
136
124
  })
137
125
  ],
138
126
  props: { searchOper: 'eq' }
127
+ },
128
+ {
129
+ label: i18next.t('field.ref_no'),
130
+ name: 'refNo',
131
+ type: 'text',
132
+ props: { searchOper: 'i_like' }
133
+ },
134
+ {
135
+ label: i18next.t('field.ref_no_2'),
136
+ name: 'refNo2',
137
+ type: 'text',
138
+ props: { searchOper: 'i_like' }
139
+ },
140
+ {
141
+ label: i18next.t('field.ref_no_3'),
142
+ name: 'refNo3',
143
+ type: 'text',
144
+ props: { searchOper: 'i_like' }
145
+ },
146
+ {
147
+ label: i18next.t('field.from'),
148
+ name: 'fromDate',
149
+ type: 'date',
150
+ props: {
151
+ searchOper: 'eq'
152
+ },
153
+ value: (() => {
154
+ let date = new Date()
155
+ date.setMonth(date.getMonth() - 6)
156
+ return date.toISOString().split('T')[0]
157
+ })(),
158
+ handlers: { change: this._modifyDateRange.bind(this) }
159
+ },
160
+ {
161
+ label: i18next.t('field.to'),
162
+ name: 'toDate',
163
+ type: 'date',
164
+ props: {
165
+ searchOper: 'eq',
166
+ min: (() => {
167
+ let date = new Date()
168
+ date.setMonth(date.getMonth() - 6)
169
+ return date.toISOString().split('T')[0]
170
+ })()
171
+ },
172
+ value: new Date().toISOString().split('T')[0]
139
173
  }
140
174
  ]
141
175
 
@@ -168,6 +202,7 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
168
202
  type: 'string',
169
203
  name: 'name',
170
204
  header: i18next.t('field.ro'),
205
+ imex: { header: i18next.t('field.ro'), key: 'name', width: 25, type: 'string' },
171
206
  sortable: true,
172
207
  width: 150
173
208
  },
@@ -175,6 +210,7 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
175
210
  type: 'object',
176
211
  name: 'bizplace',
177
212
  header: i18next.t('field.company'),
213
+ imex: { header: i18next.t('field.company'), key: 'bizplace.name', width: 25, type: 'string' },
178
214
  sortable: true,
179
215
  width: 200
180
216
  },
@@ -182,6 +218,7 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
182
218
  type: 'string',
183
219
  name: 'refNo',
184
220
  header: i18next.t('field.ref_no'),
221
+ imex: { header: i18next.t('field.ref_no'), key: 'refNo', width: 25, type: 'string' },
185
222
  sortable: true,
186
223
  width: 160
187
224
  },
@@ -189,20 +226,52 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
189
226
  type: 'string',
190
227
  name: 'refNo2',
191
228
  header: i18next.t('field.ref_no_2'),
229
+ imex: { header: i18next.t('field.ref_no_2'), key: 'refNo2', width: 25, type: 'string' },
192
230
  sortable: true,
193
231
  width: 160
194
232
  },
233
+ {
234
+ type: 'string',
235
+ name: 'refNo3',
236
+ header: i18next.t('field.ref_no_3'),
237
+ imex: { header: i18next.t('field.ref_no_3'), key: 'refNo3', width: 25, type: 'string' },
238
+ sortable: true,
239
+ width: 160
240
+ },
241
+ {
242
+ type: 'string',
243
+ name: 'postalCode',
244
+ header: i18next.t('field.postal_code'),
245
+ sortable: true,
246
+ width: 100
247
+ },
248
+ {
249
+ type: 'string',
250
+ name: 'transporter',
251
+ header: i18next.t('field.courier'),
252
+ sortable: true,
253
+ width: 120
254
+ },
195
255
  {
196
256
  type: 'date',
197
257
  name: 'releaseDate',
198
258
  header: i18next.t('field.release_date'),
259
+ imex: { header: i18next.t('field.release_date'), key: 'releaseDate', width: 25, type: 'string' },
199
260
  sortable: true,
200
261
  width: 120
201
262
  },
263
+ // {
264
+ // type: 'string',
265
+ // name: 'marketplaceOrderStatus',
266
+ // header: i18next.t('field.marketplace_order_status'),
267
+ // sortable: true,
268
+ // width: 120
269
+ // },
202
270
  {
203
271
  type: 'string',
204
272
  name: 'status',
205
273
  header: i18next.t('field.status'),
274
+ imex: { header: i18next.t('field.grn_status'), key: 'status', width: 25, type: 'string' },
206
275
  sortable: true,
207
276
  width: 120
208
277
  },
@@ -210,6 +279,7 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
210
279
  type: 'datetime',
211
280
  name: 'updatedAt',
212
281
  header: i18next.t('field.updated_at'),
282
+ imex: { header: i18next.t('field.updated_at'), key: 'updatedAt', width: 25, type: 'datetime' },
213
283
  sortable: true,
214
284
  width: 160
215
285
  },
@@ -217,6 +287,7 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
217
287
  type: 'object',
218
288
  name: 'acceptedBy',
219
289
  header: i18next.t('field.accepted_by'),
290
+ imex: { header: i18next.t('field.accepted_by'), key: 'acceptedBy.name', width: 25, type: 'string' },
220
291
  sortable: true,
221
292
  width: 200
222
293
  }
@@ -232,13 +303,19 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
232
303
  return this.shadowRoot.querySelector('data-grist')
233
304
  }
234
305
 
235
- async fetchHandler({ page, limit, sorters = [{ name: 'updatedAt', desc: true }] }) {
306
+ async fetchHandler({ page, limit, sorters = [] }) {
236
307
  const response = await client.query({
237
308
  query: gql`
238
309
  query releaseGoodRequests($filters: [Filter], $pagination: Pagination, $sortings: [Sorting]) {
239
310
  releaseGoodRequests(filters: $filters, pagination: $pagination, sortings: $sortings) {
240
311
  items {
241
312
  id
313
+ attentionTo
314
+ deliveryAddress1
315
+ phone1
316
+ postalCode
317
+ marketplaceOrderStatus
318
+ transporter
242
319
  bizplace {
243
320
  id
244
321
  name
@@ -250,12 +327,6 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
250
327
  refNo
251
328
  refNo2
252
329
  refNo3
253
- ownTransport
254
- crossDocking
255
- arrivalNotice {
256
- name
257
- }
258
- exportOption
259
330
  updatedAt
260
331
  acceptedBy {
261
332
  id
@@ -277,7 +348,12 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
277
348
  if (!response.errors) {
278
349
  return {
279
350
  total: response.data.releaseGoodRequests.total || 0,
280
- records: response.data.releaseGoodRequests.items || []
351
+ records: (response.data.releaseGoodRequests.items || []).map(item => {
352
+ return {
353
+ ...item,
354
+ bizplaceName: item.bizplace.name
355
+ }
356
+ })
281
357
  }
282
358
  }
283
359
  }
@@ -314,6 +390,7 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
314
390
  this.dataGrist.selected
315
391
  .filter(
316
392
  record =>
393
+ record.status === ORDER_STATUS.PENDING_WORKSHEET.value ||
317
394
  record.status === ORDER_STATUS.READY_TO_PICK.value ||
318
395
  record.status === ORDER_STATUS.PICKING.value ||
319
396
  record.status === ORDER_STATUS.PACKING.value ||
@@ -385,8 +462,91 @@ class B2cOrderRequests extends localize(i18next)(PageView) {
385
462
  )
386
463
  }
387
464
 
465
+ async _exportableData() {
466
+ try {
467
+ let data = []
468
+
469
+ var headerSetting = [
470
+ { header: i18next.t('field.ro'), key: 'name', width: 25, type: 'string' },
471
+ { header: i18next.t('field.company'), key: 'bizplaceName', width: 25, type: 'string' },
472
+ { header: i18next.t('field.ref_no'), key: 'refNo', width: 25, type: 'string' },
473
+ { header: i18next.t('field.ref_no_2'), key: 'refNo2', width: 25, type: 'string' },
474
+ { header: i18next.t('field.release_date'), key: 'releaseDate', width: 30, type: 'date' },
475
+ { header: i18next.t('field.postal_code'), key: 'postalCode', width: 30, type: 'string' },
476
+ {
477
+ header: i18next.t('field.marketplace_order_status'),
478
+ key: 'marketplaceOrderStatus',
479
+ width: 30,
480
+ type: 'string'
481
+ },
482
+ { header: i18next.t('field.warehouse_status'), key: 'status', width: 30, type: 'string' },
483
+ { header: i18next.t('field.courier'), key: 'transporter', width: 30, type: 'string' },
484
+ { header: i18next.t('field.delivery_address'), key: 'deliveryAddress1', width: 30, type: 'string' },
485
+ { header: i18next.t('field.attention_to'), key: 'attentionTo', width: 30, type: 'string' },
486
+ { header: i18next.t('field.phone'), key: 'phone1', width: 30, type: 'string' }
487
+ ]
488
+
489
+ if (this.dataGrist.selected && this.dataGrist.selected.length > 0) {
490
+ data = this.dataGrist.selected
491
+ } else {
492
+ const bizplaceFilters = (await this.searchForm.getQueryFilters()).filter(x => x.name === 'bizplaceId')
493
+ if (bizplaceFilters.length == 0) {
494
+ throw new Error(`Please select a customer for export.`)
495
+ }
496
+ data = await this.fetchHandler({ page: 1, limit: 9999999 })
497
+ }
498
+
499
+ return { header: headerSetting, data }
500
+ } catch (e) {
501
+ this._showToast(e)
502
+ }
503
+ }
504
+
505
+ _modifyDateRange(e) {
506
+ const fromDate = e.currentTarget.value
507
+
508
+ if (this._toDateInput.value < fromDate) this._toDateInput.value = fromDate
509
+
510
+ let min = new Date(fromDate)
511
+ let today = new Date()
512
+ today.setHours(0, 0, 0, 0)
513
+
514
+ min = min.toISOString().split('T')[0]
515
+
516
+ this._toDateInput.min = min
517
+ }
518
+
388
519
  _exportableData() {
389
- return this.dataGrist.exportRecords()
520
+ let records = []
521
+ if (this.dataGrist.selected && this.dataGrist.selected.length > 0) {
522
+ records = this.dataGrist.selected
523
+ } else {
524
+ records = this.dataGrist.data.records
525
+ }
526
+
527
+ var headerSetting = this.dataGrist._config.columns
528
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
529
+ .map(column => {
530
+ return column.imex
531
+ })
532
+
533
+ var data = records.map(item => {
534
+ return {
535
+ id: item.id,
536
+ ...this._columns
537
+ .filter(column => column.type !== 'gutter' && column.record !== undefined && column.imex !== undefined)
538
+ .reduce((record, column) => {
539
+ record[column.imex.key] = column.imex.key
540
+ .split('.')
541
+ .reduce((obj, key) => (obj && obj[key] !== 'undefined' ? obj[key] : undefined), item)
542
+ if (column.type === 'datetime') {
543
+ record[column.imex.key] = new Date(parseInt(record[column.imex.key])).toLocaleString()
544
+ }
545
+ return record
546
+ }, {})
547
+ }
548
+ })
549
+ return { header: headerSetting, data: data }
390
550
  }
391
551
  }
392
552
 
@@ -148,6 +148,26 @@ class BulkPrintPackingList extends localize(i18next)(PageView) {
148
148
 
149
149
  <label>${i18next.t('label.release_date')}</label>
150
150
  <input name="releaseDate" type="date" value="${releaseOrder.releaseDate}" readonly />
151
+
152
+ <label ?hidden="${!!!releaseOrder?.attentionTo}">${i18next.t('label.attention_to')}</label>
153
+ <input
154
+ name="attentionto"
155
+ .value="${releaseOrder?.attentionTo}"
156
+ ?hidden="${!!!releaseOrder?.attentionTo}"
157
+ readonly
158
+ />
159
+
160
+ <label ?hidden="${!!!releaseOrder?.phone1}">${i18next.t('label.phone_no')}</label>
161
+ <input name="phone1" .value="${releaseOrder?.phone1}" ?hidden="${!!!releaseOrder?.phone1}" readonly />
162
+
163
+ <label ?hidden="${!!!releaseOrder?.deliveryAddress1}">${i18next.t('label.delivery_address')}</label>
164
+ <textarea
165
+ name="deliveryAddress1"
166
+ .value="${releaseOrder?.deliveryAddress1}"
167
+ ?hidden="${!!!releaseOrder?.deliveryAddress1}"
168
+ rows="5"
169
+ readonly
170
+ ></textarea>
151
171
  </fieldset>
152
172
  </form>
153
173
 
@@ -242,6 +262,9 @@ class BulkPrintPackingList extends localize(i18next)(PageView) {
242
262
  refNo2
243
263
  refNo3
244
264
  releaseDate
265
+ attentionTo
266
+ phone1
267
+ deliveryAddress1
245
268
  bizplace {
246
269
  id
247
270
  name