@things-factory/operato-mms 3.6.4 → 3.6.9

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.
package/Dockerfile CHANGED
@@ -10,7 +10,7 @@ ARG DEBIAN_FRONTEND=noninteractive
10
10
  RUN apt-get update -o Acquire::CompressionTypes::Order::=gz
11
11
  RUN apt-get upgrade -y
12
12
 
13
- RUN echo "deb http://ftp.de.debian.org/debian sid main" > /etc/apt/sources.list
13
+ RUN echo "deb http://ftp.de.debian.org/debian stable main" > /etc/apt/sources.list
14
14
 
15
15
  RUN apt-get update
16
16
 
@@ -207,6 +207,15 @@ class BatchInitPopup extends localize(i18next)(LitElement) {
207
207
  sortable: false,
208
208
  width: 130
209
209
  },
210
+ {
211
+ type: 'string',
212
+ name: 'ownTrackingNo',
213
+ header: i18next.t('field.own_tracking_no'),
214
+ record: { editable: true },
215
+ label: true,
216
+ sortable: false,
217
+ width: 130
218
+ },
210
219
  {
211
220
  type: 'string',
212
221
  name: 'shippingProvider',
@@ -215,6 +224,14 @@ class BatchInitPopup extends localize(i18next)(LitElement) {
215
224
  sortable: true,
216
225
  width: 130
217
226
  },
227
+ {
228
+ type: 'string',
229
+ name: 'ownShippingProvider',
230
+ header: i18next.t('field.own_shipping_carrier'),
231
+ label: true,
232
+ sortable: true,
233
+ width: 130
234
+ },
218
235
  {
219
236
  type: 'number',
220
237
  name: 'totalVolume',
@@ -313,7 +330,11 @@ class BatchInitPopup extends localize(i18next)(LitElement) {
313
330
  phone2
314
331
  attentionTo
315
332
  trackingNo
333
+ ownTrackingNo
334
+ transporter
335
+ ownTransporter
316
336
  orderNoRef
337
+ subOrderNoRef
317
338
  totalWeight
318
339
  weightUnit
319
340
  totalVolume
@@ -363,88 +384,14 @@ class BatchInitPopup extends localize(i18next)(LitElement) {
363
384
  return {
364
385
  ...itm,
365
386
  status: itm.marketplaceOrder.status,
366
- shippingProvider: itm.transporter
387
+ shippingProvider: itm.transporter,
388
+ ownShippingProvider: itm.ownTransporter
367
389
  }
368
390
  }) || []
369
391
  }
370
392
  }
371
393
  }
372
394
 
373
- getTotalWeight(marketplaceOrderItems) {
374
- let totalWeight = 0
375
- let marketplaceOrderShippings = []
376
-
377
- marketplaceOrderItems.map(item => {
378
- const marketplaceOrderShipping = item.marketplaceOrderShipping
379
-
380
- if (marketplaceOrderShipping) {
381
- marketplaceOrderShippings.push(marketplaceOrderShipping)
382
- }
383
- })
384
-
385
- const uniqueMarketplaceOrderShippings = Array.from(new Set(marketplaceOrderShippings.map(a => a.id))).map(id => {
386
- return marketplaceOrderShippings.find(a => a.id === id)
387
- })
388
-
389
- if (uniqueMarketplaceOrderShippings) {
390
- uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
391
- totalWeight += marketplaceOrderShipping.totalWeight
392
- })
393
- }
394
-
395
- return parseFloat(totalWeight) || 0
396
- }
397
-
398
- getTotalVolume(marketplaceOrderItems) {
399
- let totalVolume = 0
400
- let marketplaceOrderShippings = []
401
-
402
- marketplaceOrderItems.map(item => {
403
- const marketplaceOrderShipping = item.marketplaceOrderShipping
404
-
405
- if (marketplaceOrderShipping) {
406
- marketplaceOrderShippings.push(marketplaceOrderShipping)
407
- }
408
- })
409
-
410
- const uniqueMarketplaceOrderShippings = Array.from(new Set(marketplaceOrderShippings.map(a => a.id))).map(id => {
411
- return marketplaceOrderShippings.find(a => a.id === id)
412
- })
413
-
414
- if (uniqueMarketplaceOrderShippings) {
415
- uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
416
- totalVolume += marketplaceOrderShipping.totalVolume
417
- })
418
- }
419
-
420
- return parseFloat(totalVolume) || 0
421
- }
422
-
423
- getTrackingNos(marketplaceOrderItems) {
424
- let trackingNo = ''
425
- let marketplaceOrderShippings = []
426
-
427
- marketplaceOrderItems.map(item => {
428
- const marketplaceOrderShipping = item.marketplaceOrderShipping
429
-
430
- if (marketplaceOrderShipping) {
431
- marketplaceOrderShippings.push(marketplaceOrderShipping)
432
- }
433
- })
434
-
435
- const uniqueMarketplaceOrderShippings = Array.from(new Set(marketplaceOrderShippings.map(a => a.id))).map(id => {
436
- return marketplaceOrderShippings.find(a => a.id === id)
437
- })
438
-
439
- if (uniqueMarketplaceOrderShippings) {
440
- uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
441
- trackingNo = marketplaceOrderShipping.trackingNo
442
- })
443
- }
444
-
445
- return trackingNo
446
- }
447
-
448
395
  async fetchShippingProvider() {
449
396
  const filters = []
450
397
  const response = await client.query({
@@ -510,7 +457,8 @@ class BatchInitPopup extends localize(i18next)(LitElement) {
510
457
  if (selectedData.find(selected => selected.id == item.id) && shippingProviderValue) {
511
458
  return {
512
459
  ...item,
513
- shippingProvider: shippingProviderValue
460
+ shippingProvider: shippingProviderValue,
461
+ ownShippingProvider: shippingProviderValue
514
462
  }
515
463
  } else {
516
464
  return item
@@ -68,6 +68,24 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
68
68
  return html`
69
69
  <search-form id="search-form" .fields=${this._searchFields} @submit=${e => this.grist.fetch()}></search-form>
70
70
 
71
+ <div name="batchUpdate" class="multi-column-form">
72
+ <label>${i18next.t('label.own_shipping_provider')}</label>
73
+ <select name="ownShippingProvider-select">
74
+ <option value="">${i18next.t('text.select_courier')}</option>
75
+ ${(this.ownShippingProviders || []).map(
76
+ shippingProvider => html` <option value="${shippingProvider.name}">${shippingProvider.name}</option> `
77
+ )}
78
+ </select>
79
+
80
+ <div class="set-button-container">
81
+ <mwc-button
82
+ @click="${e => this.setShippingProvider()}"
83
+ raised
84
+ label="${i18next.t('button.set')}"
85
+ ></mwc-button>
86
+ </div>
87
+ </div>
88
+
71
89
  <div class="grist">
72
90
  <data-grist
73
91
  id="grist"
@@ -108,10 +126,27 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
108
126
  return this.shadowRoot.querySelector('select[name=pickupdate-select]')
109
127
  }
110
128
 
129
+ get ownShippingProviderSelect() {
130
+ return this.shadowRoot.querySelector('select[name=ownShippingProvider-select]')
131
+ }
132
+
111
133
  get gristConfig() {
134
+ const maxWeight = this.maxWeightSetting[0].value
112
135
  return {
113
136
  list: { fields: ['name', 'marketplaceStore', 'itemCount', 'totalAmount', 'status', 'updatedAt'] },
114
- rows: { selectable: { multiple: true }, appendable: false },
137
+ rows: {
138
+ selectable: { multiple: true },
139
+ appendable: false,
140
+ classifier: function (record, rowIndex) {
141
+ const totalWeight = record['totalWeight']
142
+ var emphasized
143
+ if (totalWeight > maxWeight) {
144
+ emphasized = ['#F43838', 'yellow']
145
+ }
146
+
147
+ return { emphasized }
148
+ }
149
+ },
115
150
  pagination: { infinite: true },
116
151
  columns: [
117
152
  { type: 'gutter', gutterName: 'sequence' },
@@ -142,6 +177,13 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
142
177
  sortable: true,
143
178
  width: 130
144
179
  },
180
+ {
181
+ type: 'string',
182
+ name: 'ownShippingProvider',
183
+ header: i18next.t('field.own_shipping_carrier'),
184
+ sortable: true,
185
+ width: 130
186
+ },
145
187
  {
146
188
  type: 'string',
147
189
  name: 'itemCount',
@@ -156,6 +198,13 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
156
198
  sortable: true,
157
199
  width: 100
158
200
  },
201
+ {
202
+ type: 'float',
203
+ name: 'totalWeight',
204
+ header: i18next.t('field.total_weight'),
205
+ sortable: true,
206
+ width: 100
207
+ },
159
208
  {
160
209
  type: 'string',
161
210
  name: 'status',
@@ -275,6 +324,13 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
275
324
  phone2
276
325
  attentionTo
277
326
  trackingNo
327
+ ownTrackingNo
328
+ transporter
329
+ ownTransporter
330
+ totalWeight
331
+ weightUnit
332
+ totalVolume
333
+ volumeUnit
278
334
  }
279
335
  marketplaceProductVariation {
280
336
  name
@@ -288,10 +344,12 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
288
344
  status
289
345
  itemCount
290
346
  shippingProvider
347
+ ownShippingProvider
291
348
  totalAmount
292
349
  orderCreatedAt
293
350
  orderUpdatedAt
294
351
  trackingNo
352
+ ownTrackingNo
295
353
  updatedAt
296
354
  fullLogisticsDetail {
297
355
  pickup
@@ -336,7 +394,10 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
336
394
  marketplaceOrders = marketplaceOrders.map(item => {
337
395
  return {
338
396
  ...item,
339
- trackingNo: this.getTrackingNos(item.marketplaceOrderItems)
397
+ trackingNo: this.getOrderShippingInformation(item.marketplaceOrderItems, 'trackingNo'),
398
+ ownTrackingNo: this.getOrderShippingInformation(item.marketplaceOrderItems, 'ownTrackingNo'),
399
+ totalWeight: this.getOrderShippingInformation(item.marketplaceOrderItems, 'totalWeight'),
400
+ totalVolume: this.getOrderShippingInformation(item.marketplaceOrderItems, 'totalVolume')
340
401
  }
341
402
  })
342
403
 
@@ -350,8 +411,8 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
350
411
  }
351
412
  }
352
413
 
353
- getTrackingNos(marketplaceOrderItems) {
354
- let trackingNo = ''
414
+ getOrderShippingInformation(marketplaceOrderItems, type) {
415
+ let item
355
416
  let marketplaceOrderShippings = []
356
417
 
357
418
  marketplaceOrderItems.map(item => {
@@ -366,28 +427,73 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
366
427
  return marketplaceOrderShippings.find(a => a.id === id)
367
428
  })
368
429
 
369
- if (uniqueMarketplaceOrderShippings) {
370
- uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
371
- if (this.store?.platform === PLATFORM.LAZADA.value) {
372
- var newTrackingNo = []
373
- if (marketplaceOrderShipping?.trackingNo) {
374
- const trackingNos = JSON.parse(marketplaceOrderShipping.trackingNo)
375
- newTrackingNo = trackingNos.map(item => item.tracking_code)
376
- }
377
- let uniqueTrackingNos = [...new Set(newTrackingNo)]
378
- trackingNo = uniqueTrackingNos.join(', ')
379
- } else {
380
- trackingNo = marketplaceOrderShipping.trackingNo
430
+ switch (type) {
431
+ case 'trackingNo':
432
+ if (uniqueMarketplaceOrderShippings) {
433
+ uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
434
+ if (this.store?.platform === PLATFORM.LAZADA.value) {
435
+ var newTrackingNo = []
436
+ if (marketplaceOrderShipping?.trackingNo) {
437
+ const trackingNos = JSON.parse(marketplaceOrderShipping.trackingNo)
438
+ newTrackingNo = trackingNos.map(item => item.tracking_code)
439
+ }
440
+ let uniqueTrackingNos = [...new Set(newTrackingNo)]
441
+ item = uniqueTrackingNos.join(', ')
442
+ } else {
443
+ item = marketplaceOrderShipping.trackingNo
444
+ }
445
+ })
381
446
  }
382
- })
447
+ break
448
+ case 'ownTrackingNo':
449
+ if (uniqueMarketplaceOrderShippings) {
450
+ uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
451
+ if (this.store?.platform === PLATFORM.LAZADA.value) {
452
+ var newTrackingNo = []
453
+ if (marketplaceOrderShipping?.ownTrackingNo) {
454
+ const trackingNos = JSON.parse(marketplaceOrderShipping.ownTrackingNo)
455
+ newTrackingNo = trackingNos.map(item => item.tracking_code)
456
+ }
457
+ let uniqueTrackingNos = [...new Set(newTrackingNo)]
458
+ item = uniqueTrackingNos.join(', ')
459
+ } else {
460
+ item = marketplaceOrderShipping.ownTrackingNo
461
+ }
462
+ })
463
+ }
464
+ break
465
+ case 'totalVolume':
466
+ let totalVolume = 0
467
+ if (uniqueMarketplaceOrderShippings) {
468
+ uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
469
+ totalVolume += marketplaceOrderShipping?.totalVolume || 0
470
+ })
471
+ }
472
+
473
+ item = parseFloat(totalVolume) || 0
474
+ break
475
+ case 'totalWeight':
476
+ let totalWeight = 0
477
+ if (uniqueMarketplaceOrderShippings) {
478
+ uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
479
+ totalWeight += marketplaceOrderShipping?.totalWeight
480
+ })
481
+ }
482
+ item = parseFloat(totalWeight) || 0
483
+ break
383
484
  }
384
485
 
385
- return trackingNo
486
+ return item
386
487
  }
387
488
 
388
489
  async _marketplaceLogisticsInitParam() {
389
490
  this.shippingProviders = await this.fetchShippingProvider()
390
491
  this.deliveryTypes = [{ name: 'dropship', description: 'dropship' }]
492
+ this.ownShippingProviders = [{ name: 'SeeBuu Logistics' }]
493
+ this.marketplaceSettings = await this.fetchMarketplaceSettings()
494
+ this.maxWeightSetting = this.marketplaceSettings.filter(
495
+ setting => setting.category === 'marketplace_order_max_weight'
496
+ )
391
497
  }
392
498
 
393
499
  async fetchShippingProvider() {
@@ -412,6 +518,74 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
412
518
  }
413
519
  }
414
520
 
521
+ async fetchMarketplaceSettings() {
522
+ const filters = []
523
+ const sortings = []
524
+
525
+ const response = await client.query({
526
+ query: gql`
527
+ query marketplaceSettings($filters: [Filter], $sortings: [Sorting]) {
528
+ marketplaceSettings(filters: $filters, sortings: $sortings) {
529
+ items {
530
+ id
531
+ name
532
+ marketplaceStore {
533
+ id
534
+ name
535
+ storeName
536
+ platform
537
+ description
538
+ }
539
+ category
540
+ value
541
+ updatedAt
542
+ }
543
+ total
544
+ }
545
+ }
546
+ `,
547
+ variables: { filters, sortings }
548
+ })
549
+
550
+ if (!response.error) {
551
+ return response.data.marketplaceSettings.items || []
552
+ }
553
+ }
554
+
555
+ async setShippingProvider() {
556
+ try {
557
+ let selectedData = this.grist.selected
558
+ if (!selectedData?.length) throw new Error('please select at least one order')
559
+
560
+ const ownShippingProviderValue = this.ownShippingProviderSelect?.value
561
+ if (!ownShippingProviderValue) throw new Error('Own Shipping provider selection is required')
562
+
563
+ const patches = selectedData.map(patch => {
564
+ return {
565
+ id: patch.id,
566
+ orderNo: patch.orderNo,
567
+ ownShippingProvider: ownShippingProviderValue
568
+ }
569
+ })
570
+
571
+ const response = await client.mutate({
572
+ mutation: gql`
573
+ mutation setOwnShippingProviderByOrders($patches: [LogisticsInfo]!) {
574
+ setOwnShippingProviderByOrders(patches: $patches)
575
+ }
576
+ `,
577
+ variables: { patches }
578
+ })
579
+
580
+ if (!response.errors) {
581
+ await this.fetchHandler({ page: 1, limit: 100 })
582
+ this._initGrist()
583
+ }
584
+ } catch (e) {
585
+ this._showToast(e)
586
+ }
587
+ }
588
+
415
589
  async initLogistics() {
416
590
  let result = await CustomAlert({
417
591
  title: i18next.t('title.are_you_sure'),
@@ -519,13 +693,13 @@ class LazadaOrderInitBatchPopup extends localize(i18next)(LitElement) {
519
693
  }
520
694
  }
521
695
 
522
- _validateInit(data) {
696
+ _validateSplitting(data) {
523
697
  if (!data) {
524
- throw new Error('No order to initiate logistics')
698
+ throw new Error('No order to split')
525
699
  }
526
700
 
527
- if (!this.shippingProviderInput?.value || this.shippingProviderInput.value == '') {
528
- throw new Error('Shipping provider selection is required for initiate logistics')
701
+ if (data.some(item => item.trackingNo)) {
702
+ throw new Error('Order with tracking no not allowed to split')
529
703
  }
530
704
  }
531
705
 
@@ -108,6 +108,12 @@ class OrderShippingItems extends localize(i18next)(LitElement) {
108
108
  <input type="text" name="trackingNo" readonly />
109
109
  </label>
110
110
  </div>
111
+ <div field>
112
+ <label
113
+ >${i18next.t('label.own_tracking_no')}
114
+ <input type="text" name="ownTrackingNo" readonly />
115
+ </label>
116
+ </div>
111
117
  <div field>
112
118
  <label
113
119
  >${i18next.t('label.phone')} 1
@@ -186,6 +192,12 @@ class OrderShippingItems extends localize(i18next)(LitElement) {
186
192
  <input type="text" name="transporter" readonly />
187
193
  </label>
188
194
  </div>
195
+ <div field>
196
+ <label
197
+ >${i18next.t('label.own_shipping_provider')}
198
+ <input type="text" name="ownTransporter" readonly />
199
+ </label>
200
+ </div>
189
201
  </div>
190
202
  </form>
191
203
 
@@ -263,6 +275,10 @@ class OrderShippingItems extends localize(i18next)(LitElement) {
263
275
  marketplaceOrderShipping(name: $name) {
264
276
  id
265
277
  name
278
+ trackingNo
279
+ ownTrackingNo
280
+ transporter
281
+ ownTransporter
266
282
  marketplaceOrderItems {
267
283
  marketplaceProductVariation {
268
284
  marketplaceProduct {
@@ -65,8 +65,9 @@ class OrderShipping extends localize(i18next)(LitElement) {
65
65
  .data="${infoSet}"
66
66
  @tabChanged="${e => (this.currentTab = e.detail.currentTabKey)}"
67
67
  .headerRenderer=${shipping => {
68
- return html`${shipping.attentionTo} ( ${shipping.postCode}, ${shipping.city} ) - ${shipping.totalWeight}
69
- ${shipping.weightUnit}`
68
+ return html`[Order No]: ${shipping?.subOrderNoRef ? shipping.subOrderNoRef : shipping.orderNoRef} [Attention
69
+ To]: ${shipping.attentionTo} [Address]: ${shipping.postCode}, ${shipping.city} [Weight]:
70
+ ${shipping.totalWeight} ${shipping.weightUnit}`
70
71
  }}
71
72
  .contentRenderer="${shipping =>
72
73
  html`<order-shipping-items
@@ -23,12 +23,15 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
23
23
  _searchFields: Array,
24
24
  store: Object,
25
25
  marketplaceSettings: Array,
26
- maxWeightSetting: Object
26
+ maxWeightSetting: Object,
27
+ ownShippingProviders: Array,
28
+ shippingProviders: Array
27
29
  }
28
30
  }
29
31
 
30
32
  constructor() {
31
33
  super()
34
+ this._searchFields = []
32
35
  this.addressList = []
33
36
  this.timeSlotList = []
34
37
  this.branchList = []
@@ -77,6 +80,25 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
77
80
  return html`
78
81
  <search-form id="search-form" .fields=${this._searchFields} @submit=${e => this.grist.fetch()}></search-form>
79
82
 
83
+ ${this._type === 'non_integrated'
84
+ ? html`<div name="batchUpdate" class="multi-column-form">
85
+ <label>${i18next.t('label.own_shipping_provider')}</label>
86
+ <select name="ownShippingProvider-select">
87
+ <option value="">${i18next.t('text.select_courier')}</option>
88
+ ${(this.ownShippingProviders || []).map(
89
+ shippingProvider => html` <option value="${shippingProvider.name}">${shippingProvider.name}</option> `
90
+ )}
91
+ </select>
92
+
93
+ <div class="set-button-container">
94
+ <mwc-button
95
+ @click="${e => this.setShippingProvider()}"
96
+ raised
97
+ label="${i18next.t('button.set')}"
98
+ ></mwc-button>
99
+ </div>
100
+ </div>`
101
+ : ''}
80
102
  ${this._type === 'pickup'
81
103
  ? html` <div name="batchUpdate" class="multi-column-form">
82
104
  <label>${i18next.t('label.address')}</label>
@@ -142,6 +164,10 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
142
164
  return this.shadowRoot.querySelector('select[name=pickupdate-select]')
143
165
  }
144
166
 
167
+ get ownShippingProviderSelect() {
168
+ return this.shadowRoot.querySelector('select[name=ownShippingProvider-select]')
169
+ }
170
+
145
171
  get gristConfig() {
146
172
  const maxWeight = this.maxWeightSetting[0].value
147
173
  return {
@@ -202,6 +228,13 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
202
228
  sortable: true,
203
229
  width: 130
204
230
  },
231
+ {
232
+ type: 'string',
233
+ name: 'ownShippingProvider',
234
+ header: i18next.t('field.own_shipping_carrier'),
235
+ sortable: true,
236
+ width: 130
237
+ },
205
238
  {
206
239
  type: 'string',
207
240
  name: 'itemCount',
@@ -214,21 +247,21 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
214
247
  name: 'totalAmount',
215
248
  header: i18next.t('field.total_amount'),
216
249
  sortable: true,
217
- width: 100
250
+ width: 80
218
251
  },
219
252
  {
220
253
  type: 'number',
221
254
  name: 'totalVolume',
222
255
  header: i18next.t('field.total_volume'),
223
256
  label: true,
224
- width: 120
257
+ width: 80
225
258
  },
226
259
  {
227
260
  type: 'number',
228
261
  name: 'totalWeight',
229
262
  header: i18next.t('field.total_weight'),
230
263
  label: true,
231
- width: 120
264
+ width: 80
232
265
  },
233
266
  {
234
267
  type: 'string',
@@ -242,11 +275,13 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
242
275
  }
243
276
 
244
277
  async firstUpdated() {
245
- const shippingProviders = await this.fetchShippingProvider()
278
+ this.ownShippingProviders = [{ name: 'SeeBuu Logistics' }]
279
+ this.shippingProviders = await this.fetchShippingProvider()
246
280
  this.marketplaceSettings = await this.fetchMarketplaceSettings()
247
281
  this.maxWeightSetting = this.marketplaceSettings.filter(
248
282
  setting => setting.category === 'marketplace_order_max_weight'
249
283
  )
284
+
250
285
  await this.fetchHandler({ page: 1, limit: 100 })
251
286
  this._initGrist()
252
287
 
@@ -273,7 +308,7 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
273
308
  type: 'select',
274
309
  options: [
275
310
  { value: '' },
276
- ...shippingProviders.map(shippingProvider => {
311
+ ...this.shippingProviders.map(shippingProvider => {
277
312
  return {
278
313
  name: shippingProvider.name,
279
314
  value: shippingProvider.name
@@ -339,6 +374,9 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
339
374
  phone2
340
375
  attentionTo
341
376
  trackingNo
377
+ ownTrackingNo
378
+ transporter
379
+ ownTransporter
342
380
  totalWeight
343
381
  weightUnit
344
382
  totalVolume
@@ -356,10 +394,12 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
356
394
  status
357
395
  itemCount
358
396
  shippingProvider
397
+ ownShippingProvider
359
398
  totalAmount
360
399
  orderCreatedAt
361
400
  orderUpdatedAt
362
401
  trackingNo
402
+ ownTrackingNo
363
403
  updatedAt
364
404
  fullLogisticsDetail {
365
405
  pickup
@@ -403,9 +443,10 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
403
443
  const marketplaceOrders = response.data.marketplaceOrdersForBatchInit.items.map(item => {
404
444
  return {
405
445
  ...item,
406
- trackingNo: this.getTrackingNos(item.marketplaceOrderItems),
407
- totalWeight: this.getTotalWeight(item.marketplaceOrderItems),
408
- totalVolume: this.getTotalVolume(item.marketplaceOrderItems)
446
+ trackingNo: this.getOrderShippingInformation(item.marketplaceOrderItems, 'trackingNo'),
447
+ ownTrackingNo: this.getOrderShippingInformation(item.marketplaceOrderItems, 'ownTrackingNo'),
448
+ totalWeight: this.getOrderShippingInformation(item.marketplaceOrderItems, 'totalWeight'),
449
+ totalVolume: this.getOrderShippingInformation(item.marketplaceOrderItems, 'totalVolume')
409
450
  }
410
451
  })
411
452
 
@@ -498,8 +539,8 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
498
539
  return logisticsParam
499
540
  }
500
541
 
501
- getTotalWeight(marketplaceOrderItems) {
502
- let totalWeight = 0
542
+ getOrderShippingInformation(marketplaceOrderItems, type) {
543
+ let item
503
544
  let marketplaceOrderShippings = []
504
545
 
505
546
  marketplaceOrderItems.map(item => {
@@ -514,73 +555,63 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
514
555
  return marketplaceOrderShippings.find(a => a.id === id)
515
556
  })
516
557
 
517
- if (uniqueMarketplaceOrderShippings) {
518
- uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
519
- totalWeight += marketplaceOrderShipping.totalWeight
520
- })
521
- }
522
-
523
- return parseFloat(totalWeight) || 0
524
- }
525
-
526
- getTotalVolume(marketplaceOrderItems) {
527
- let totalVolume = 0
528
- let marketplaceOrderShippings = []
529
-
530
- marketplaceOrderItems.map(item => {
531
- const marketplaceOrderShipping = item.marketplaceOrderShipping
532
-
533
- if (marketplaceOrderShipping) {
534
- marketplaceOrderShippings.push(marketplaceOrderShipping)
535
- }
536
- })
537
-
538
- const uniqueMarketplaceOrderShippings = Array.from(new Set(marketplaceOrderShippings.map(a => a.id))).map(id => {
539
- return marketplaceOrderShippings.find(a => a.id === id)
540
- })
541
-
542
- if (uniqueMarketplaceOrderShippings) {
543
- uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
544
- totalVolume += marketplaceOrderShipping.totalVolume
545
- })
546
- }
547
-
548
- return parseFloat(totalVolume) || 0
549
- }
550
-
551
- getTrackingNos(marketplaceOrderItems) {
552
- let trackingNo = ''
553
- let marketplaceOrderShippings = []
554
-
555
- marketplaceOrderItems.map(item => {
556
- const marketplaceOrderShipping = item.marketplaceOrderShipping
557
-
558
- if (marketplaceOrderShipping) {
559
- marketplaceOrderShippings.push(marketplaceOrderShipping)
560
- }
561
- })
562
-
563
- const uniqueMarketplaceOrderShippings = Array.from(new Set(marketplaceOrderShippings.map(a => a.id))).map(id => {
564
- return marketplaceOrderShippings.find(a => a.id === id)
565
- })
558
+ switch (type) {
559
+ case 'trackingNo':
560
+ if (uniqueMarketplaceOrderShippings) {
561
+ uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
562
+ if (this.store?.platform === PLATFORM.LAZADA.value) {
563
+ var newTrackingNo = []
564
+ if (marketplaceOrderShipping?.trackingNo) {
565
+ const trackingNos = JSON.parse(marketplaceOrderShipping.trackingNo)
566
+ newTrackingNo = trackingNos.map(item => item.tracking_code)
567
+ }
568
+ let uniqueTrackingNos = [...new Set(newTrackingNo)]
569
+ item = uniqueTrackingNos.join(', ')
570
+ } else {
571
+ item = marketplaceOrderShipping.trackingNo
572
+ }
573
+ })
574
+ }
575
+ break
576
+ case 'ownTrackingNo':
577
+ if (uniqueMarketplaceOrderShippings) {
578
+ uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
579
+ if (this.store?.platform === PLATFORM.LAZADA.value) {
580
+ var newTrackingNo = []
581
+ if (marketplaceOrderShipping?.ownTrackingNo) {
582
+ const trackingNos = JSON.parse(marketplaceOrderShipping.ownTrackingNo)
583
+ newTrackingNo = trackingNos.map(item => item.tracking_code)
584
+ }
585
+ let uniqueTrackingNos = [...new Set(newTrackingNo)]
586
+ item = uniqueTrackingNos.join(', ')
587
+ } else {
588
+ item = marketplaceOrderShipping.ownTrackingNo
589
+ }
590
+ })
591
+ }
592
+ break
593
+ case 'totalVolume':
594
+ let totalVolume = 0
595
+ if (uniqueMarketplaceOrderShippings) {
596
+ uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
597
+ totalVolume += marketplaceOrderShipping?.totalVolume || 0
598
+ })
599
+ }
566
600
 
567
- if (uniqueMarketplaceOrderShippings) {
568
- uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
569
- if (this.store?.platform === PLATFORM.LAZADA.value) {
570
- var newTrackingNo = []
571
- if (marketplaceOrderShipping?.trackingNo) {
572
- const trackingNos = JSON.parse(marketplaceOrderShipping.trackingNo)
573
- newTrackingNo = trackingNos.map(item => item.tracking_code)
574
- }
575
- let uniqueTrackingNos = [...new Set(newTrackingNo)]
576
- trackingNo = uniqueTrackingNos.join(', ')
577
- } else {
578
- trackingNo = marketplaceOrderShipping.trackingNo
601
+ item = parseFloat(totalVolume) || 0
602
+ break
603
+ case 'totalWeight':
604
+ let totalWeight = 0
605
+ if (uniqueMarketplaceOrderShippings) {
606
+ uniqueMarketplaceOrderShippings.map(marketplaceOrderShipping => {
607
+ totalWeight += marketplaceOrderShipping?.totalWeight
608
+ })
579
609
  }
580
- })
610
+ item = parseFloat(totalWeight) || 0
611
+ break
581
612
  }
582
613
 
583
- return trackingNo
614
+ return item
584
615
  }
585
616
 
586
617
  _initGrist() {
@@ -727,6 +758,40 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
727
758
  }
728
759
  }
729
760
 
761
+ async setShippingProvider() {
762
+ try {
763
+ let selectedData = this.grist.selected
764
+ if (!selectedData?.length) throw new Error('please select at least one order')
765
+
766
+ const ownShippingProviderValue = this.ownShippingProviderSelect?.value
767
+ if (!ownShippingProviderValue) throw new Error('Own Shipping provider selection is required')
768
+
769
+ const patches = selectedData.map(patch => {
770
+ return {
771
+ id: patch.id,
772
+ orderNo: patch.orderNo,
773
+ ownShippingProvider: ownShippingProviderValue
774
+ }
775
+ })
776
+
777
+ const response = await client.mutate({
778
+ mutation: gql`
779
+ mutation setOwnShippingProviderByOrders($patches: [LogisticsInfo]!) {
780
+ setOwnShippingProviderByOrders(patches: $patches)
781
+ }
782
+ `,
783
+ variables: { patches }
784
+ })
785
+
786
+ if (!response.errors) {
787
+ await this.fetchHandler({ page: 1, limit: 100 })
788
+ this._initGrist()
789
+ }
790
+ } catch (e) {
791
+ this._showToast(e)
792
+ }
793
+ }
794
+
730
795
  async initLogistics() {
731
796
  let result = await CustomAlert({
732
797
  title: i18next.t('title.are_you_sure'),
@@ -740,6 +805,7 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
740
805
  try {
741
806
  let selectedData = this.grist.selected
742
807
  let deliveryType = this.searchForm.queryFilters.find(itm => itm.name == 'logisticsType')?.value
808
+ let shippingProvider = this.searchForm.queryFilters.find(itm => itm.name == 'shippingProvider')?.value
743
809
  let patches = []
744
810
  this._validateInit(selectedData)
745
811
 
@@ -778,7 +844,9 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
778
844
  id: patch.id,
779
845
  orderNo: patch.orderNo,
780
846
  deliveryType,
781
- trackingNo: patch.trackingNo
847
+ trackingNo: patch.trackingNo,
848
+ ownTrackingNo: patch.ownTrackingNo,
849
+ shippingProvider
782
850
  }
783
851
  })
784
852
  }
@@ -895,9 +963,9 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
895
963
  return { ...item, ...updateData }
896
964
  })
897
965
  ]
898
- }
899
966
 
900
- this.grist.refresh()
967
+ this.grist.refresh()
968
+ }
901
969
  } catch (e) {
902
970
  this._showToast(e)
903
971
  }
@@ -922,6 +990,17 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
922
990
  }
923
991
 
924
992
  if (this._type == 'non_integrated') {
993
+ let deliveryType = this.searchForm.queryFilters.find(itm => itm.name == 'logisticsType')?.value
994
+ let shippingProvider = this.searchForm.queryFilters.find(itm => itm.name == 'shippingProvider')?.value
995
+
996
+ if (!shippingProvider || shippingProvider === '') {
997
+ throw new Error('Shipping provider selection is required for initiate logistics')
998
+ }
999
+
1000
+ if (!deliveryType || deliveryType === '') {
1001
+ throw new Error('Delivery type selection is required for initiate logistics')
1002
+ }
1003
+
925
1004
  patches.forEach(itm => {
926
1005
  if (!itm?.trackingNo) throw new Error(i18next.t('text.tracking_is_required'))
927
1006
  })
@@ -958,16 +1037,6 @@ class ShopeeOrderInitBatchPopup extends localize(i18next)(LitElement) {
958
1037
  }
959
1038
  }
960
1039
 
961
- _validateInit(data) {
962
- if (!data) {
963
- throw new Error('No order to initiate logistics')
964
- }
965
-
966
- if (!this.shippingProviderInput?.value || this.shippingProviderInput.value == '') {
967
- throw new Error('Shipping provider selection is required for initiate logistics')
968
- }
969
- }
970
-
971
1040
  _validateSplitting(data) {
972
1041
  if (!data) {
973
1042
  throw new Error('No order to split')
@@ -370,11 +370,15 @@ class OrderByStore extends localize(i18next)(PageView) {
370
370
  phone2
371
371
  attentionTo
372
372
  trackingNo
373
+ ownTrackingNo
373
374
  totalWeight
374
375
  weightUnit
375
376
  totalVolume
376
377
  volumeUnit
377
378
  transporter
379
+ ownTransporter
380
+ orderNoRef
381
+ subOrderNoRef
378
382
  }
379
383
  marketplaceProductVariation {
380
384
  marketplaceProduct {
@@ -504,7 +508,7 @@ class OrderByStore extends localize(i18next)(PageView) {
504
508
  backdrop: true,
505
509
  escapable: false,
506
510
  size: 'large',
507
- title: `${record.name}`
511
+ title: `${record.orderNo}`
508
512
  }
509
513
  )
510
514
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/operato-mms",
3
- "version": "3.6.4",
3
+ "version": "3.6.9",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -41,68 +41,68 @@
41
41
  "@material/mwc-formfield": "^0.22.1",
42
42
  "@material/mwc-linear-progress": "^0.22.1",
43
43
  "@material/mwc-radio": "^0.22.1",
44
- "@things-factory/apptool-ui": "^3.6.4",
45
- "@things-factory/attachment-base": "^3.6.4",
46
- "@things-factory/auth-ui": "^3.6.4",
47
- "@things-factory/biz-base": "^3.6.4",
48
- "@things-factory/board-service": "^3.6.4",
49
- "@things-factory/board-ui": "^3.6.4",
50
- "@things-factory/code-ui": "^3.6.4",
51
- "@things-factory/context-ui": "^3.6.4",
52
- "@things-factory/dashboard": "^3.6.4",
53
- "@things-factory/export-ui": "^3.6.4",
54
- "@things-factory/export-ui-csv": "^3.6.4",
55
- "@things-factory/export-ui-excel": "^3.6.4",
56
- "@things-factory/geography": "^3.6.4",
57
- "@things-factory/grist-ui": "^3.6.4",
58
- "@things-factory/help": "^3.6.4",
59
- "@things-factory/i18n-ui": "^3.6.4",
60
- "@things-factory/integration-fulfillment": "^3.6.4",
61
- "@things-factory/integration-lmd": "^3.6.4",
62
- "@things-factory/lite-menu": "^3.6.4",
63
- "@things-factory/marketplace-base": "^3.6.4",
64
- "@things-factory/more-ui": "^3.6.4",
65
- "@things-factory/notification": "^3.6.4",
66
- "@things-factory/oauth2-client": "^3.6.4",
67
- "@things-factory/pdf": "^3.6.0",
68
- "@things-factory/product-base": "^3.6.4",
69
- "@things-factory/resource-ui": "^3.6.4",
70
- "@things-factory/scene-chartjs": "^3.6.0",
71
- "@things-factory/scene-clock": "^3.6.0",
72
- "@things-factory/scene-clone": "^3.6.0",
73
- "@things-factory/scene-compass": "^3.6.0",
74
- "@things-factory/scene-data-transform": "^3.6.0",
75
- "@things-factory/scene-excel": "^3.6.0",
76
- "@things-factory/scene-firebase": "^3.6.0",
77
- "@things-factory/scene-form": "^3.6.0",
78
- "@things-factory/scene-gauge": "^3.6.0",
79
- "@things-factory/scene-google-map": "^3.6.0",
80
- "@things-factory/scene-graphql": "^3.6.0",
81
- "@things-factory/scene-grist": "^3.6.4",
82
- "@things-factory/scene-half-roundrect": "^3.6.0",
83
- "@things-factory/scene-indoor-map": "^3.6.0",
84
- "@things-factory/scene-integration": "^3.6.0",
85
- "@things-factory/scene-label": "^3.6.4",
86
- "@things-factory/scene-legend": "^3.6.0",
87
- "@things-factory/scene-marker": "^3.6.0",
88
- "@things-factory/scene-mqtt": "^3.6.0",
89
- "@things-factory/scene-news-ticker": "^3.6.0",
90
- "@things-factory/scene-progressbar": "^3.6.0",
91
- "@things-factory/scene-random": "^3.6.0",
92
- "@things-factory/scene-restful": "^3.6.0",
93
- "@things-factory/scene-switch": "^3.6.0",
94
- "@things-factory/scene-tab": "^3.6.0",
95
- "@things-factory/scene-table": "^3.6.0",
96
- "@things-factory/scene-timer": "^3.6.0",
97
- "@things-factory/scene-visualizer": "^3.6.0",
98
- "@things-factory/scene-wheel-sorter": "^3.6.0",
99
- "@things-factory/setting-ui": "^3.6.4",
100
- "@things-factory/system-ui": "^3.6.4",
101
- "@things-factory/warehouse-base": "^3.6.4"
44
+ "@things-factory/apptool-ui": "^3.6.7",
45
+ "@things-factory/attachment-base": "^3.6.7",
46
+ "@things-factory/auth-ui": "^3.6.7",
47
+ "@things-factory/biz-base": "^3.6.7",
48
+ "@things-factory/board-service": "^3.6.7",
49
+ "@things-factory/board-ui": "^3.6.7",
50
+ "@things-factory/code-ui": "^3.6.7",
51
+ "@things-factory/context-ui": "^3.6.7",
52
+ "@things-factory/dashboard": "^3.6.7",
53
+ "@things-factory/export-ui": "^3.6.7",
54
+ "@things-factory/export-ui-csv": "^3.6.7",
55
+ "@things-factory/export-ui-excel": "^3.6.7",
56
+ "@things-factory/geography": "^3.6.7",
57
+ "@things-factory/grist-ui": "^3.6.7",
58
+ "@things-factory/help": "^3.6.7",
59
+ "@things-factory/i18n-ui": "^3.6.7",
60
+ "@things-factory/integration-fulfillment": "^3.6.8",
61
+ "@things-factory/integration-lmd": "^3.6.7",
62
+ "@things-factory/lite-menu": "^3.6.7",
63
+ "@things-factory/marketplace-base": "^3.6.8",
64
+ "@things-factory/more-ui": "^3.6.7",
65
+ "@things-factory/notification": "^3.6.7",
66
+ "@things-factory/oauth2-client": "^3.6.7",
67
+ "@things-factory/pdf": "^3.6.7",
68
+ "@things-factory/product-base": "^3.6.7",
69
+ "@things-factory/resource-ui": "^3.6.7",
70
+ "@things-factory/scene-chartjs": "^3.6.7",
71
+ "@things-factory/scene-clock": "^3.6.7",
72
+ "@things-factory/scene-clone": "^3.6.7",
73
+ "@things-factory/scene-compass": "^3.6.7",
74
+ "@things-factory/scene-data-transform": "^3.6.7",
75
+ "@things-factory/scene-excel": "^3.6.7",
76
+ "@things-factory/scene-firebase": "^3.6.7",
77
+ "@things-factory/scene-form": "^3.6.7",
78
+ "@things-factory/scene-gauge": "^3.6.7",
79
+ "@things-factory/scene-google-map": "^3.6.7",
80
+ "@things-factory/scene-graphql": "^3.6.7",
81
+ "@things-factory/scene-grist": "^3.6.7",
82
+ "@things-factory/scene-half-roundrect": "^3.6.7",
83
+ "@things-factory/scene-indoor-map": "^3.6.7",
84
+ "@things-factory/scene-integration": "^3.6.7",
85
+ "@things-factory/scene-label": "^3.6.7",
86
+ "@things-factory/scene-legend": "^3.6.7",
87
+ "@things-factory/scene-marker": "^3.6.7",
88
+ "@things-factory/scene-mqtt": "^3.6.7",
89
+ "@things-factory/scene-news-ticker": "^3.6.7",
90
+ "@things-factory/scene-progressbar": "^3.6.7",
91
+ "@things-factory/scene-random": "^3.6.7",
92
+ "@things-factory/scene-restful": "^3.6.7",
93
+ "@things-factory/scene-switch": "^3.6.7",
94
+ "@things-factory/scene-tab": "^3.6.7",
95
+ "@things-factory/scene-table": "^3.6.7",
96
+ "@things-factory/scene-timer": "^3.6.7",
97
+ "@things-factory/scene-visualizer": "^3.6.7",
98
+ "@things-factory/scene-wheel-sorter": "^3.6.7",
99
+ "@things-factory/setting-ui": "^3.6.7",
100
+ "@things-factory/system-ui": "^3.6.7",
101
+ "@things-factory/warehouse-base": "^3.6.8"
102
102
  },
103
103
  "devDependencies": {
104
- "@things-factory/builder": "^3.6.0",
104
+ "@things-factory/builder": "^3.6.7",
105
105
  "@types/node-fetch": "^2.5.7"
106
106
  },
107
- "gitHead": "48b9fe15809b253c674ab386589db01a6bf8b0fc"
107
+ "gitHead": "a8154d7742cf9a7dad7e5b13125eade87093bcd4"
108
108
  }
@@ -57,6 +57,8 @@
57
57
  "field.not_assigned": "not assigned",
58
58
  "field.on_hold": "on hold",
59
59
  "field.order_no": "order no",
60
+ "field.own_shipping_carrier": "own shipping carrier",
61
+ "field.own_tracking_no": "own tracking no",
60
62
  "field.pack_qty": "pack qty",
61
63
  "field.pack_weight": "pack weight",
62
64
  "field.packing_type": "packing type",
@@ -174,6 +176,8 @@
174
176
  "label.order_status_rejected": "rejected",
175
177
  "label.order_status_shipped": "shipped",
176
178
  "label.order_status_to_confirm_receive": "to confirm receive",
179
+ "label.own_shipping_provider": "own shipping provider",
180
+ "label.own_tracking_no": "own tracking no",
177
181
  "label.own_transport": "own transport",
178
182
  "label.oversell_will_happen_with_all_full_allocation": "oversell will happen with all 100% allocation",
179
183
  "label.parent_sku": "parent SKU",
@@ -57,6 +57,8 @@
57
57
  "field.not_assigned": "[ko] not assigned",
58
58
  "field.on_hold": "[ko] on hold",
59
59
  "field.order_no": "[ko] order no",
60
+ "field.own_shipping_carrier": "[ko] own shipping carrier",
61
+ "field.own_tracking_no": "[ko] own tracking no",
60
62
  "field.pack_qty": "[ko] pack qty",
61
63
  "field.pack_weight": "[ko] pack weight",
62
64
  "field.packing_type": "[ko] packing type",
@@ -171,6 +173,8 @@
171
173
  "label.order_status_rejected": "[ko] rejected",
172
174
  "label.order_status_shipped": "[ko] shipped",
173
175
  "label.order_status_to_confirm_receive": "[ko] to confirm receive",
176
+ "label.own_shipping_provider": "[ko] own shipping provider",
177
+ "label.own_tracking_no": "[ko] own tracking no",
174
178
  "label.own_transport": "[ko] own transport",
175
179
  "label.parent_sku": "[ko] parent SKU",
176
180
  "label.pending": "[ko] pending",
@@ -57,6 +57,8 @@
57
57
  "field.not_assigned": "[ms] not assigned",
58
58
  "field.on_hold": "[ms] on hold",
59
59
  "field.order_no": "[ms] order no",
60
+ "field.own_shipping_carrier": "[ms] own shipping carrier",
61
+ "field.own_tracking_no": "[ms] own tracking no",
60
62
  "field.pack_qty": "[ms] pack qty",
61
63
  "field.pack_weight": "[ms] pack weight",
62
64
  "field.packing_type": "[ms] packing type",
@@ -171,6 +173,8 @@
171
173
  "label.order_status_rejected": "[ms] rejected",
172
174
  "label.order_status_shipped": "[ms] shipped",
173
175
  "label.order_status_to_confirm_receive": "[ms] to confirm receive",
176
+ "label.own_shipping_provider": "[ms] own shipping provider",
177
+ "label.own_tracking_no": "[ms] own tracking no",
174
178
  "label.own_transport": "[ms] own transport",
175
179
  "label.parent_sku": "[ms] parent SKU",
176
180
  "label.pending": "[ms] pending",
@@ -57,6 +57,8 @@
57
57
  "field.not_assigned": "[zh] not assigned",
58
58
  "field.on_hold": "[zh] on hold",
59
59
  "field.order_no": "[zh] order no",
60
+ "field.own_shipping_carrier": "[zh] own shipping carrier",
61
+ "field.own_tracking_no": "[zh] own tracking no",
60
62
  "field.pack_qty": "[zh] pack qty",
61
63
  "field.pack_weight": "[zh] pack weight",
62
64
  "field.packing_type": "[zh] packing type",
@@ -171,6 +173,8 @@
171
173
  "label.order_status_rejected": "[zh] rejected",
172
174
  "label.order_status_shipped": "[zh] shipped",
173
175
  "label.order_status_to_confirm_receive": "[zh] to confirm receive",
176
+ "label.own_shipping_provider": "[zh] own shipping provider",
177
+ "label.own_tracking_no": "[zh] own tracking no",
174
178
  "label.own_transport": "[zh] own transport",
175
179
  "label.parent_sku": "[zh] parent SKU",
176
180
  "label.pending": "[zh] pending",