@things-factory/operato-mms 4.3.203 → 4.3.204

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.
@@ -0,0 +1,111 @@
1
+ import '../../components/stock-allocation-ratio'
2
+ import '../../components/marketplace-order-max-weight'
3
+
4
+ import gql from 'graphql-tag'
5
+ import { css, html, LitElement } from 'lit-element'
6
+
7
+ import { i18next, localize } from '@things-factory/i18n-base'
8
+ import { client } from '@things-factory/shell'
9
+
10
+ class GlobalMarketplaceSettings extends localize(i18next)(LitElement) {
11
+ static get styles() {
12
+ return [
13
+ css`
14
+ :host {
15
+ display: flex;
16
+ flex-direction: column;
17
+ background-color: var(--main-section-background-color);
18
+ padding: var(--padding-wide);
19
+ overflow: auto;
20
+ }
21
+ h2 {
22
+ margin: var(--title-margin);
23
+ font: var(--title-font);
24
+ color: var(--title-text-color);
25
+ }
26
+ [subtitle] {
27
+ padding: var(--subtitle-padding);
28
+ font: var(--subtitle-font);
29
+ color: var(--subtitle-text-color);
30
+ }
31
+ input {
32
+ display: block;
33
+ }
34
+ `
35
+ ]
36
+ }
37
+
38
+ static get properties() {
39
+ return {
40
+ ratioSettings: Array
41
+ }
42
+ }
43
+
44
+ render() {
45
+ const ratioSettings = this.ratioSettings || []
46
+
47
+ return html`
48
+ <div subtitle>${i18next.t('text.update_stock_allocation_ratio')}</div>
49
+
50
+ <stock-allocation-ratio
51
+ .ratioSettings=${ratioSettings.filter(setting => setting.category === 'stock_allocation')}
52
+ .category=${'stock_allocation'}
53
+ @fetch-settings=${async () => {
54
+ this.ratioSettings = await this.fetchMarketplaceSettings()
55
+ }}
56
+ ></stock-allocation-ratio>
57
+
58
+ <div subtitle>${i18next.t('text.update_marketplace_order_max_weight')}</div>
59
+
60
+ <marketplace-order-max-weight
61
+ .maxWeightSettings=${ratioSettings.filter(setting => setting.category === 'marketplace_order_max_weight')}
62
+ @fetch-settings=${async () => {
63
+ this.ratioSettings = await this.fetchMarketplaceSettings()
64
+ }}
65
+ ></marketplace-order-max-weight>
66
+ `
67
+ }
68
+
69
+ async firstUpdated() {
70
+ this.ratioSettings = await this.fetchMarketplaceSettings()
71
+ }
72
+
73
+ async fetchMarketplaceSettings() {
74
+ const filters = []
75
+ const sortings = []
76
+
77
+ const response = await client.query({
78
+ query: gql`
79
+ query marketplaceSettings($filters: [Filter], $sortings: [Sorting]) {
80
+ marketplaceSettings(filters: $filters, sortings: $sortings) {
81
+ items {
82
+ id
83
+ name
84
+ marketplaceStore {
85
+ id
86
+ name
87
+ storeName
88
+ platform
89
+ description
90
+ status
91
+ }
92
+ category
93
+ value
94
+ updatedAt
95
+ }
96
+ total
97
+ }
98
+ }
99
+ `,
100
+ variables: { filters, sortings }
101
+ })
102
+
103
+ return response.data.marketplaceSettings.items.filter(item => item.marketplaceStore.status == 'ACTIVE') || []
104
+ }
105
+
106
+ showToast(message) {
107
+ document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }))
108
+ }
109
+ }
110
+
111
+ customElements.define('global-marketplace-settings', GlobalMarketplaceSettings)
@@ -1,14 +1,13 @@
1
- import '../../components/stock-allocation-ratio'
2
- import '../../components/marketplace-order-max-weight'
1
+ import '@things-factory/component-ui'
2
+ import './global-marketplace-settings'
3
+ import './transaction-rates'
3
4
 
4
- import gql from 'graphql-tag'
5
5
  import { css, html } from 'lit-element'
6
- import { connect } from 'pwa-helpers/connect-mixin.js'
7
6
 
8
- import { i18next } from '@things-factory/i18n-base'
9
- import { client, PageView, store } from '@things-factory/shell'
7
+ import { i18next, localize } from '@things-factory/i18n-base'
8
+ import { PageView } from '@things-factory/shell'
10
9
 
11
- class MarketplaceSetting extends connect(store)(PageView) {
10
+ class MarketplaceSetting extends localize(i18next)(PageView) {
12
11
  static get styles() {
13
12
  return [
14
13
  css`
@@ -38,7 +37,7 @@ class MarketplaceSetting extends connect(store)(PageView) {
38
37
 
39
38
  static get properties() {
40
39
  return {
41
- ratioSettings: Array
40
+ currentTab: String
42
41
  }
43
42
  }
44
43
 
@@ -50,28 +49,32 @@ class MarketplaceSetting extends connect(store)(PageView) {
50
49
  }
51
50
 
52
51
  render() {
53
- const ratioSettings = this.ratioSettings || []
54
-
55
- return html`
56
- <h2>${i18next.t('title.global_marketplace_settings')}</h2>
57
- <div subtitle>${i18next.t('text.update_stock_allocation_ratio')}</div>
52
+ const SETTING_TABS = {
53
+ GLOBAL_SETTINGS: i18next.t('label.global_marketplace_settings'),
54
+ TRANSACTION_RATES: i18next.t('label.transaction_rates')
55
+ }
58
56
 
59
- <stock-allocation-ratio
60
- .ratioSettings=${ratioSettings.filter(setting => setting.category === 'stock_allocation')}
61
- .category=${'stock_allocation'}
62
- @fetch-settings=${async () => {
63
- this.ratioSettings = await this.fetchMarketplaceSettings()
64
- }}
65
- ></stock-allocation-ratio>
57
+ const settingTemplate = [
58
+ { name: i18next.t('label.global_marketplace_settings'), template: 'global-marketplace-settings' },
59
+ { name: i18next.t('label.transaction_rates'), template: 'transaction-rates' }
60
+ ]
66
61
 
67
- <div subtitle>${i18next.t('text.update_marketplace_order_max_weight')}</div>
62
+ const settingSet = {
63
+ [SETTING_TABS.GLOBAL_SETTINGS]: [],
64
+ [SETTING_TABS.TRANSACTION_RATES]: []
65
+ }
68
66
 
69
- <marketplace-order-max-weight
70
- .maxWeightSettings=${ratioSettings.filter(setting => setting.category === 'marketplace_order_max_weight')}
71
- @fetch-settings=${async () => {
72
- this.ratioSettings = await this.fetchMarketplaceSettings()
73
- }}
74
- ></marketplace-order-max-weight>
67
+ return html`
68
+ <quick-find-content
69
+ id="setting-list"
70
+ .data="${settingSet}"
71
+ @tabChanged="${e => (this.currentTab = e.detail.currentTabKey)}"
72
+ .contentRenderer="${(item, currentKeyTab) => {
73
+ const matchTab = settingTemplate.find(ot => ot.name === currentKeyTab)
74
+ let template = document.createElement(matchTab.template)
75
+ return template
76
+ }}"
77
+ ></quick-find-content>
75
78
  `
76
79
  }
77
80
 
@@ -116,11 +119,7 @@ class MarketplaceSetting extends connect(store)(PageView) {
116
119
  */
117
120
  }
118
121
 
119
- async pageUpdated(changes, lifecycle, before) {
120
- if (this.active) {
121
- this.ratioSettings = await this.fetchMarketplaceSettings()
122
- }
123
- }
122
+ async pageUpdated(changes, lifecycle, before) {}
124
123
 
125
124
  pageDisposed(lifecycle) {
126
125
  /*
@@ -134,39 +133,6 @@ class MarketplaceSetting extends connect(store)(PageView) {
134
133
  */
135
134
  }
136
135
 
137
- async fetchMarketplaceSettings() {
138
- const filters = []
139
- const sortings = []
140
-
141
- const response = await client.query({
142
- query: gql`
143
- query marketplaceSettings($filters: [Filter], $sortings: [Sorting]) {
144
- marketplaceSettings(filters: $filters, sortings: $sortings) {
145
- items {
146
- id
147
- name
148
- marketplaceStore {
149
- id
150
- name
151
- storeName
152
- platform
153
- description
154
- status
155
- }
156
- category
157
- value
158
- updatedAt
159
- }
160
- total
161
- }
162
- }
163
- `,
164
- variables: { filters, sortings }
165
- })
166
-
167
- return response.data.marketplaceSettings.items.filter(item => item.marketplaceStore.status == 'ACTIVE') || []
168
- }
169
-
170
136
  showToast(message) {
171
137
  document.dispatchEvent(new CustomEvent('notify', { detail: { message, option: { timer: 1000 } } }))
172
138
  }
@@ -0,0 +1,454 @@
1
+ import '@things-factory/form-ui'
2
+ import '@things-factory/grist-ui'
3
+
4
+ import gql from 'graphql-tag'
5
+ import { css, html, LitElement } from 'lit-element'
6
+
7
+ import { i18next } from '@things-factory/i18n-base'
8
+ import { client, CustomAlert } from '@things-factory/shell'
9
+ import { ScrollbarStyles } from '@things-factory/styles'
10
+ import { isMobileDevice } from '@things-factory/utils'
11
+
12
+ class TransactionRates extends LitElement {
13
+ static get styles() {
14
+ return [
15
+ ScrollbarStyles,
16
+ css`
17
+ :host {
18
+ display: flex;
19
+ flex-direction: column;
20
+ overflow: hidden;
21
+ }
22
+ search-form {
23
+ overflow: visible;
24
+ }
25
+ data-grist {
26
+ overflow-y: auto;
27
+ flex: 1;
28
+ }
29
+ .button-container {
30
+ padding: var(--button-container-padding);
31
+ margin: var(--button-container-margin);
32
+ text-align: var(--button-container-align);
33
+ background-color: var(--button-container-background);
34
+ height: var(--button-container-height);
35
+ }
36
+ .button-container button {
37
+ background-color: var(--button-container-button-background-color);
38
+ border-radius: var(--button-container-button-border-radius);
39
+ height: var(--button-container-button-height);
40
+ border: var(--button-container-button-border);
41
+ margin: var(--button-container-button-margin);
42
+
43
+ padding: var(--button-padding);
44
+ color: var(--theme-white-color);
45
+ font: var(--button-font);
46
+ text-transform: var(--button-text-transform);
47
+ }
48
+ .button-container button:hover,
49
+ .button-container button:active {
50
+ background-color: var(--button-background-focus-color);
51
+ }
52
+ `
53
+ ]
54
+ }
55
+
56
+ static get properties() {
57
+ return {
58
+ _searchFields: Array,
59
+ config: Object,
60
+ _selectedRecords: Array,
61
+ _marketplaceStore: Array,
62
+ _brands: Array,
63
+ _rateTypes: Array
64
+ }
65
+ }
66
+
67
+ render() {
68
+ return html`
69
+ <search-form id="search-form" .fields=${this._searchFields} @submit=${e => this.dataGrist.fetch()}></search-form>
70
+
71
+ <data-grist
72
+ .mode=${isMobileDevice() ? 'LIST' : 'GRID'}
73
+ .config=${this.config}
74
+ .fetchHandler="${this.fetchHandler.bind(this)}"
75
+ @select-record-change=${e => (this._selectedRecords = e.detail.selectedRecords)}
76
+ ></data-grist>
77
+
78
+ <div class="button-container">
79
+ <button @click=${this._saveMarketplaceTransactionRate.bind(this)}>${i18next.t('button.save')}</button>
80
+ <button @click=${this._deleteMarketplaceTransactionRates.bind(this)}>${i18next.t('button.delete')}</button>
81
+ </div>
82
+ `
83
+ }
84
+
85
+ get searchForm() {
86
+ return this.shadowRoot.querySelector('search-form')
87
+ }
88
+
89
+ get dataGrist() {
90
+ return this.shadowRoot.querySelector('data-grist')
91
+ }
92
+
93
+ updated(_changes, lifecycle) {
94
+ if (this.active) {
95
+ this._warehouseId = lifecycle.resourceId
96
+ this.dataGrist.fetch()
97
+ }
98
+ }
99
+
100
+ async firstUpdated() {
101
+ this._marketplaceStore = await this._fetchMarketplaceStore()
102
+ this._brands = await this._fetchBrand()
103
+ this._rateTypes = ['PERCENTAGE', 'AMOUNT']
104
+
105
+ this._searchFields = [
106
+ {
107
+ label: i18next.t('field.brand'),
108
+ name: 'brand',
109
+ type: 'select',
110
+ options: [
111
+ { value: '' },
112
+ ...this._brands
113
+ .map(brand => {
114
+ return {
115
+ name: brand,
116
+ value: brand
117
+ }
118
+ })
119
+ .sort()
120
+ ],
121
+ props: { searchOper: 'eq' }
122
+ },
123
+ {
124
+ label: i18next.t('field.payment_method'),
125
+ name: 'paymentMethod',
126
+ type: 'text',
127
+ props: { searchOper: 'i_like' }
128
+ }
129
+ ]
130
+
131
+ this.config = {
132
+ rows: { selectable: { multiple: true } },
133
+ list: { fields: ['name', 'type', 'status'] },
134
+ columns: [
135
+ { type: 'gutter', gutterName: 'dirty' },
136
+ { type: 'gutter', gutterName: 'sequence' },
137
+ { type: 'gutter', gutterName: 'row-selector', multiple: true },
138
+ {
139
+ type: 'select',
140
+ name: 'brand',
141
+ header: i18next.t('field.brand'),
142
+ record: {
143
+ editable: true,
144
+ options: [
145
+ '',
146
+ ...Object.values(this._brands)
147
+ .map(b => b)
148
+ .sort()
149
+ ]
150
+ },
151
+ imex: { header: i18next.t('field.brand'), key: 'brand', width: 50, type: 'string' },
152
+ sortable: true,
153
+ width: 100
154
+ },
155
+ {
156
+ type: 'string',
157
+ name: 'paymentMethod',
158
+ header: i18next.t('field.payment_method'),
159
+ record: { editable: true, align: 'center' },
160
+ imex: { header: i18next.t('field.payment_method'), key: 'paymentMethod', width: 50, type: 'string' },
161
+ sortable: true,
162
+ width: 150
163
+ },
164
+ {
165
+ type: 'select',
166
+ name: 'rateType',
167
+ header: i18next.t('field.rate_type'),
168
+ record: {
169
+ editable: true,
170
+ options: [
171
+ '',
172
+ ...Object.values(this._rateTypes)
173
+ .map(b => b)
174
+ .sort()
175
+ ]
176
+ },
177
+ imex: { header: i18next.t('field.rate_type'), key: 'rateType', width: 50, type: 'string' },
178
+ sortable: true,
179
+ width: 100
180
+ },
181
+ {
182
+ type: 'float',
183
+ name: 'rate',
184
+ header: i18next.t('field.rate'),
185
+ record: { editable: true, align: 'center' },
186
+ imex: { header: i18next.t('field.rate'), key: 'rate', width: 50, type: 'string' },
187
+ sortable: true,
188
+ width: 100
189
+ },
190
+ {
191
+ type: 'select',
192
+ name: 'marketplaceStore',
193
+ header: i18next.t('field.marketplace_store'),
194
+ record: {
195
+ editable: true,
196
+ options: [
197
+ '',
198
+ ...Object.values(this._marketplaceStore.records)
199
+ .map(ms => ms.storeName)
200
+ .sort()
201
+ ]
202
+ },
203
+ imex: { header: i18next.t('field.marketplace_store'), key: 'marketplaceStore', width: 50, type: 'string' },
204
+ sortable: true,
205
+ width: 150
206
+ },
207
+ {
208
+ type: 'datetime',
209
+ name: 'createdAt',
210
+ header: i18next.t('field.created_at'),
211
+ record: { editable: false, align: 'center' },
212
+ sortable: true,
213
+ width: 80
214
+ },
215
+ {
216
+ type: 'datetime',
217
+ name: 'updatedAt',
218
+ header: i18next.t('field.updated_at'),
219
+ record: { editable: false, align: 'center' },
220
+ sortable: true,
221
+ width: 80
222
+ },
223
+ {
224
+ type: 'object',
225
+ name: 'updater',
226
+ header: i18next.t('field.updater'),
227
+ record: { editable: false, align: 'center' },
228
+ sortable: true,
229
+ width: 80
230
+ }
231
+ ]
232
+ }
233
+ }
234
+
235
+ async fetchHandler({ page, limit, sorters = [] }) {
236
+ let filters = []
237
+
238
+ const response = await client.query({
239
+ query: gql`
240
+ query marketplaceTransactionRates($filters: [Filter!], $pagination: Pagination, $sortings: [Sorting!]) {
241
+ marketplaceTransactionRates(filters: $filters, pagination: $pagination, sortings: $sortings) {
242
+ items {
243
+ id
244
+ brand
245
+ paymentMethod
246
+ rateType
247
+ rate
248
+ marketplaceStore {
249
+ id
250
+ platform
251
+ name
252
+ storeName
253
+ }
254
+ createdAt
255
+ updatedAt
256
+ updater {
257
+ id
258
+ name
259
+ }
260
+ }
261
+ total
262
+ }
263
+ }
264
+ `,
265
+ variables: {
266
+ filters: [...filters, ...this.searchForm.queryFilters],
267
+ pagination: { page, limit },
268
+ sortings: sorters
269
+ }
270
+ })
271
+
272
+ return {
273
+ total: response.data.marketplaceTransactionRates.total || 0,
274
+ records:
275
+ response.data.marketplaceTransactionRates.items.map(data => {
276
+ return {
277
+ ...data,
278
+ marketplaceStore: data.marketplaceStore.storeName
279
+ }
280
+ }) || []
281
+ }
282
+ }
283
+
284
+ async _saveMarketplaceTransactionRate(patches) {
285
+ try {
286
+ patches = this.dataGrist.exportPatchList({ flagName: 'cuFlag' })
287
+ this.validateData(patches)
288
+ patches = patches.map(patch => {
289
+ if (patch.marketplaceStore) {
290
+ let ms = this._marketplaceStore.records.find(ms => ms.storeName === patch.marketplaceStore)
291
+ return {
292
+ ...patch,
293
+ marketplaceStore: {
294
+ id: ms.id,
295
+ name: ms.name,
296
+ description: ms.description
297
+ }
298
+ }
299
+ } else {
300
+ return { ...patch }
301
+ }
302
+ })
303
+ if (patches && patches.length) {
304
+ const response = await client.mutate({
305
+ mutation: gql`
306
+ mutation updateMultipleMarketplaceTransactionRate($patches: [MarketplaceTransactionRatePatch!]!) {
307
+ updateMultipleMarketplaceTransactionRate(patches: $patches) {
308
+ id
309
+ }
310
+ }
311
+ `,
312
+ variables: { patches: patches }
313
+ })
314
+
315
+ if (!response.errors) {
316
+ this.dataGrist.fetch()
317
+ this.showToast(i18next.t('text.data_updated_successfully'))
318
+ }
319
+ } else {
320
+ CustomAlert({
321
+ title: i18next.t('text.nothing_changed'),
322
+ text: i18next.t('text.there_is_nothing_to_save')
323
+ })
324
+ }
325
+ } catch (error) {
326
+ this.showToast(error)
327
+ }
328
+ }
329
+
330
+ async _deleteMarketplaceTransactionRates() {
331
+ const ids = this.dataGrist.selected.map(record => record.id)
332
+ if (ids && ids.length) {
333
+ const anwer = await CustomAlert({
334
+ type: 'warning',
335
+ title: i18next.t('button.delete'),
336
+ text: i18next.t('text.are_you_sure'),
337
+ confirmButton: { text: i18next.t('button.delete') },
338
+ cancelButton: { text: i18next.t('button.cancel') }
339
+ })
340
+
341
+ if (!anwer.value) return
342
+
343
+ const response = await client.mutate({
344
+ mutation: gql`
345
+ mutation deleteMarketplaceTransactionRates($ids: [String!]!) {
346
+ deleteMarketplaceTransactionRates(ids: $ids)
347
+ }
348
+ `,
349
+ variables: { ids }
350
+ })
351
+
352
+ if (!response.errors) {
353
+ this.dataGrist.fetch()
354
+ this.showToast(i18next.t('text.data_deleted_successfully'))
355
+ }
356
+ } else {
357
+ CustomAlert({
358
+ title: i18next.t('text.nothing_selected'),
359
+ text: i18next.t('text.there_is_nothing_to_delete')
360
+ })
361
+ }
362
+ }
363
+
364
+ async _fetchMarketplaceStore() {
365
+ const filters = []
366
+ const pagination = {}
367
+ const sortings = []
368
+ const response = await client.query({
369
+ query: gql`
370
+ query marketplaceStores($filters: [Filter], $pagination: Pagination, $sortings: [Sorting]) {
371
+ marketplaceStores(filters: $filters, pagination: $pagination, sortings: $sortings) {
372
+ items {
373
+ id
374
+ platform
375
+ name
376
+ storeName
377
+ description
378
+ }
379
+ total
380
+ }
381
+ }
382
+ `,
383
+ variables: { filters: filters, pagination: pagination, sortings: sortings }
384
+ })
385
+
386
+ if (!response.errors) {
387
+ return {
388
+ total: response.data.marketplaceStores.total || 0,
389
+ records: response.data.marketplaceStores.items || []
390
+ }
391
+ }
392
+ }
393
+
394
+ async _fetchBrand() {
395
+ const filters = []
396
+ const response = await client.query({
397
+ query: gql`
398
+ query productBrands($filters: [Filter!]) {
399
+ productBrands(filters: $filters) {
400
+ items {
401
+ brand
402
+ }
403
+ }
404
+ }
405
+ `,
406
+ variables: { filters: filters }
407
+ })
408
+
409
+ if (!response.errors) {
410
+ return response.data.productBrands.items.map(item => {
411
+ return item.brand
412
+ })
413
+ }
414
+ }
415
+
416
+ validateData(patches) {
417
+ patches.find(patch => {
418
+ if (patch.cuFlag === '+') {
419
+ if (!patch.brand || !patch.paymentMethod || !patch.rateType || !patch.rate || !patch.marketplaceStore) {
420
+ throw new Error(i18next.t('text.empty_fields'))
421
+ }
422
+ } else {
423
+ if (
424
+ patch.brand === '' ||
425
+ patch.paymentMethod === '' ||
426
+ patch.rateType === '' ||
427
+ patch.rate === '' ||
428
+ patch.marketplaceStore === ''
429
+ ) {
430
+ throw new Error(i18next.t('text.empty_fields'))
431
+ }
432
+ }
433
+ if (patch.rate) {
434
+ if (isNaN(parseFloat(patch.rate)) === true) {
435
+ throw new Error(i18next.t('text.invalid_rate'))
436
+ }
437
+ }
438
+ })
439
+ }
440
+
441
+ onlyNumbers(str) {
442
+ const specialCharacter = /[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]+/
443
+ const alphabet = /[a-zA-Z]/g
444
+
445
+ const value = specialCharacter.test(str) ? false : alphabet.test(str) ? false : true
446
+ return value
447
+ }
448
+
449
+ showToast(message) {
450
+ document.dispatchEvent(new CustomEvent('notify', { detail: { message } }))
451
+ }
452
+ }
453
+
454
+ window.customElements.define('transaction-rates', TransactionRates)
package/client/route.js CHANGED
@@ -106,5 +106,9 @@ export default function route(page) {
106
106
  case 'shopee-sales-report':
107
107
  import('./pages/reports/sales-by-platform/shopee-sales-report')
108
108
  return page
109
+
110
+ case 'mms-transaction-rates':
111
+ import('./pages/setting/transaction-rates')
112
+ return page
109
113
  }
110
114
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/operato-mms",
3
- "version": "4.3.203",
3
+ "version": "4.3.204",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -80,12 +80,12 @@
80
80
  "@things-factory/integration-fulfillment": "^4.3.190",
81
81
  "@things-factory/integration-lmd": "^4.3.197",
82
82
  "@things-factory/lite-menu": "^4.3.186",
83
- "@things-factory/marketplace-base": "^4.3.203",
83
+ "@things-factory/marketplace-base": "^4.3.204",
84
84
  "@things-factory/more-ui": "^4.3.179",
85
85
  "@things-factory/notification": "^4.3.186",
86
86
  "@things-factory/oauth2-client": "^4.3.179",
87
87
  "@things-factory/pdf": "^4.3.159",
88
- "@things-factory/product-base": "^4.3.186",
88
+ "@things-factory/product-base": "^4.3.204",
89
89
  "@things-factory/resource-ui": "^4.3.179",
90
90
  "@things-factory/scene-data-transform": "^4.3.159",
91
91
  "@things-factory/scene-excel": "^4.3.159",
@@ -100,11 +100,11 @@
100
100
  "@things-factory/scene-visualizer": "^4.3.159",
101
101
  "@things-factory/setting-ui": "^4.3.186",
102
102
  "@things-factory/system-ui": "^4.3.179",
103
- "@things-factory/warehouse-base": "^4.3.203"
103
+ "@things-factory/warehouse-base": "^4.3.204"
104
104
  },
105
105
  "devDependencies": {
106
106
  "@things-factory/builder": "^4.3.179",
107
107
  "@types/node-fetch": "^2.5.7"
108
108
  },
109
- "gitHead": "b52c1edcf8ce5a968ccbf008a6a5f364f7de6f08"
109
+ "gitHead": "d7400c05d76662c2df54c0278078ade54e57f271"
110
110
  }
@@ -107,6 +107,10 @@ export default {
107
107
  {
108
108
  tagname: 'shopee-sales-report',
109
109
  page: 'shopee-sales-report'
110
+ },
111
+ {
112
+ tagname: 'mms-transaction-rates',
113
+ page: 'mms-transaction-rates'
110
114
  }
111
115
  ],
112
116
  bootstrap
@@ -1,14 +1,4 @@
1
1
  {
2
- "field.variation_id": "variation ID",
3
- "field.voucher_amt": "voucher amount",
4
- "field.shipping_rebate": "shipping rebate",
5
- "field.shipping_mode": "shipping mode",
6
- "field.service_fee": "service fee",
7
- "field.transaction_fee": "transaction fee",
8
- "field.total_released_amt": "total release amount",
9
- "field.voucher_code": "voucher code",
10
- "field.comission_fee": "comission fee",
11
- "field.fulfilment_center": "fulfilment center",
12
2
  "button.add_product": "add product",
13
3
  "button.add": "add",
14
4
  "button.airway_bill": "airway bill",
@@ -54,6 +44,7 @@
54
44
  "field.buyer_username": "buyer username",
55
45
  "field.channel_sku": "channel sku",
56
46
  "field.city": "city",
47
+ "field.comission_fee": "comission fee",
57
48
  "field.commission_fee": "commission fee",
58
49
  "field.country": "country",
59
50
  "field.criteria": "criteria",
@@ -64,18 +55,20 @@
64
55
  "field.eta_date": "eta date",
65
56
  "field.from_date": "from date",
66
57
  "field.fulfillment_partner": "fulfilment partner",
58
+ "field.fulfilment_center": "fulfilment center",
67
59
  "field.grand_total": "grand total",
68
60
  "field.import_cargo": "import cargo",
69
- "field.isku": "ISKU",
70
61
  "field.is_splitted": "splitted",
62
+ "field.isku": "ISKU",
71
63
  "field.item_count": "item count",
72
64
  "field.item_price_credit": "item price credit",
73
65
  "field.item": "item",
74
66
  "field.last_updated": "last updated",
75
- "field.lazada_bonus": "lazada bonus",
76
67
  "field.lazada_bonus_lzd_cofund": "lazada bonus - LZD co-fund",
68
+ "field.lazada_bonus": "lazada bonus",
77
69
  "field.marketplace_product_name": "marketplace product name",
78
70
  "field.marketplace_product_sku": "marketplace product sku",
71
+ "field.marketplace_store": "marketplace store",
79
72
  "field.name": "name",
80
73
  "field.not_assigned": "not assigned",
81
74
  "field.on_hold": "on hold",
@@ -93,8 +86,9 @@
93
86
  "field.packing_type": "packing type",
94
87
  "field.paid_price": "paid price",
95
88
  "field.pallet_qty": "pallet qty",
96
- "field.payout_date": "payout date",
97
89
  "field.payment_fee": "payment fee",
90
+ "field.payment_method": "payment method",
91
+ "field.payout_date": "payout date",
98
92
  "field.pickup_date": "pickup date",
99
93
  "field.pickup_time_id": "pickup time id",
100
94
  "field.post_code": "post code",
@@ -109,6 +103,8 @@
109
103
  "field.promotional_charges_flexi_combo": "promotional charges flexi-combo",
110
104
  "field.promotional_charges_vouchers": "promotional charges vouchers",
111
105
  "field.qty": "qty",
106
+ "field.rate_type": "rate type",
107
+ "field.rate": "rate",
112
108
  "field.ref_no": "ref no.",
113
109
  "field.refund_amount": "refund amount",
114
110
  "field.remark": "remark",
@@ -121,13 +117,16 @@
121
117
  "field.save": "save",
122
118
  "field.seller_shipping_fee_voucher": "seller shipping fee voucher",
123
119
  "field.sender": "sender",
120
+ "field.service_fee": "service fee",
124
121
  "field.shipping_carrier": "shipping carrier",
125
- "field.shipping_fee_voucher": "shipping fee voucher",
126
122
  "field.shipping_fee_paid_by_customer": "shipping fee (paid by customer)",
127
123
  "field.shipping_fee_voucher_by_lazada": "shipping fee voucher (by lazada)",
128
124
  "field.shipping_fee_voucher_by_seller": "shipping fee voucher (by seller)",
125
+ "field.shipping_fee_voucher": "shipping fee voucher",
129
126
  "field.shipping_fee": "shipping fee",
127
+ "field.shipping_mode": "shipping mode",
130
128
  "field.shipping_provider": "shipping provider",
129
+ "field.shipping_rebate": "shipping rebate",
131
130
  "field.sku_name": "sku name",
132
131
  "field.sku": "SKU",
133
132
  "field.sold_stock": "sold stock",
@@ -141,12 +140,14 @@
141
140
  "field.tax_amount": "tax amount",
142
141
  "field.to_date": "to date",
143
142
  "field.total_amount": "total amount",
143
+ "field.total_released_amt": "total release amount",
144
144
  "field.total_uom_value": "total UOM value",
145
145
  "field.total_volume": "total volume",
146
146
  "field.total_weight": "total weight",
147
147
  "field.town": "town",
148
148
  "field.tracking_no": "tracking no",
149
149
  "field.tracking_url": "tracking URL",
150
+ "field.transaction_fee": "transaction fee",
150
151
  "field.transporter": "transporter",
151
152
  "field.type": "type",
152
153
  "field.unit": "unit",
@@ -154,6 +155,7 @@
154
155
  "field.uom": "UOM",
155
156
  "field.variation_cost_price": "variation cost price",
156
157
  "field.variation_description": "variation description",
158
+ "field.variation_id": "variation ID",
157
159
  "field.variation_marketplace_status": "variation marketplace status",
158
160
  "field.variation_name": "variation name",
159
161
  "field.variation_qty": "variation qty",
@@ -161,6 +163,8 @@
161
163
  "field.variation_selling_price": "variation selling price",
162
164
  "field.variation_sku": "variation sku",
163
165
  "field.variation_uom_value": "variation uom value",
166
+ "field.voucher_amt": "voucher amount",
167
+ "field.voucher_code": "voucher code",
164
168
  "field.warehouse_sku": "warehouse SKU",
165
169
  "field.zipcode": "zipcode",
166
170
  "label.address_id": "address id",
@@ -189,6 +193,7 @@
189
193
  "label.do_no": "D/O no.",
190
194
  "label.eta_date": "eta date",
191
195
  "label.from_date": "from date",
196
+ "label.global_marketplace_settings": "global marketplace settings",
192
197
  "label.group_product": "group product",
193
198
  "label.height": "height",
194
199
  "label.images": "images",
@@ -268,6 +273,7 @@
268
273
  "label.to_confirm_receive": "to confirm receive",
269
274
  "label.to_date": "to date",
270
275
  "label.tracking_no": "tracking no",
276
+ "label.transaction_rates": "transaction rates",
271
277
  "label.truck_no": "truck no.",
272
278
  "label.unpaid": "unpaid",
273
279
  "label.upload_documents": "upload documents",
@@ -291,8 +297,10 @@
291
297
  "text.do_you_want_to_update_x": "do you want to update {x}",
292
298
  "text.document_has_been_generated": "document has been generated",
293
299
  "text.draft_product_has_been_updated_successfully": "draft product has been updated successfully",
300
+ "text.empty_fields": "empty field(s)",
294
301
  "text.form_is_incomplete": "form is incomplete",
295
302
  "text.initialise_logistics": "initialise logistics",
303
+ "text.invalid_rate": "invalid input (rate)",
296
304
  "text.isku_is_empty": "isku is empty",
297
305
  "text.kindly_select_a_shipping_provider": "kindly select a shipping provider",
298
306
  "text.kindly_select_at_least_one_of_the_option_for_configuration": "kindly select at least one of the option for configuration",
@@ -360,6 +368,7 @@
360
368
  "title.lazada_sales_report": "lazada sales report",
361
369
  "title.link_product_configuration": "link product configuration",
362
370
  "title.marketplace_setting": "marketplace setting",
371
+ "title.marketplace_transaction_rate": "marketplace transaction rate",
363
372
  "title.onhand_inventory": "onhand inventory",
364
373
  "title.order_by_store": "order by store",
365
374
  "title.order_items_information": "order items information",
@@ -186,6 +186,7 @@
186
186
  "label.do_no": "[ko] D/O no.",
187
187
  "label.eta_date": "[ko] eta date",
188
188
  "label.from_date": "[ko] from date",
189
+ "label.global_marketplace_settings": "[ko] global marketplace settings",
189
190
  "label.group_product": "[ko] group product",
190
191
  "label.height": "[ko] height",
191
192
  "label.images": "[ko] images",
@@ -261,6 +262,7 @@
261
262
  "label.to_confirm_receive": "[ko] to confirm receive",
262
263
  "label.to_date": "[ko] to date",
263
264
  "label.tracking_no": "[ko] tracking no",
265
+ "label.transaction_rates": "[ko] transaction rates",
264
266
  "label.truck_no": "[ko] truck no.",
265
267
  "label.unpaid": "[ko] unpaid",
266
268
  "label.upload_documents": "[ko] upload documents",
@@ -364,5 +366,12 @@
364
366
  "title.uploaded_images": "[ko] uploaded images",
365
367
  "title.vas": "[ko] vas",
366
368
  "title.warehouse_products": "[ko] warehouse products",
367
- "button.ok": "[ko] ok"
369
+ "button.ok": "[ko] ok",
370
+ "field.payment_method": "[ko] payment method",
371
+ "field.rate_type": "[ko] rate type",
372
+ "field.rate": "[ko] rate",
373
+ "field.marketplace_store": "[ko] marketplace store",
374
+ "title.marketplace_transaction_rate": "[ko] marketplace transaction rate",
375
+ "text.empty_fields": "[ko] empty field(s)",
376
+ "text.invalid_rate": "[ko] invalid input (rate)"
368
377
  }
@@ -186,6 +186,7 @@
186
186
  "label.do_no": "[ms] D/O no.",
187
187
  "label.eta_date": "[ms] eta date",
188
188
  "label.from_date": "[ms] from date",
189
+ "label.global_marketplace_settings": "[ms]global marketplace settings",
189
190
  "label.group_product": "[ms] group product",
190
191
  "label.height": "[ms] height",
191
192
  "label.images": "[ms] images",
@@ -261,6 +262,7 @@
261
262
  "label.to_confirm_receive": "[ms] to confirm receive",
262
263
  "label.to_date": "[ms] to date",
263
264
  "label.tracking_no": "[ms] tracking no",
265
+ "label.transaction_rates": "[ms] transaction rates",
264
266
  "label.truck_no": "[ms] truck no.",
265
267
  "label.unpaid": "[ms] unpaid",
266
268
  "label.upload_documents": "[ms] upload documents",
@@ -364,5 +366,12 @@
364
366
  "title.uploaded_images": "[ms] uploaded images",
365
367
  "title.vas": "[ms] vas",
366
368
  "title.warehouse_products": "[ms] warehouse products",
367
- "button.ok": "[ms] ok"
369
+ "button.ok": "[ms] ok",
370
+ "field.payment_method": "[ms] payment method",
371
+ "field.rate_type": "[ms] rate type",
372
+ "field.rate": "[ms] rate",
373
+ "field.marketplace_store": "[ms] marketplace store",
374
+ "title.marketplace_transaction_rate": "[ms] marketplace transaction rate",
375
+ "text.empty_fields": "[ms] empty field(s)",
376
+ "text.invalid_rate": "[ms] invalid input (rate)"
368
377
  }
@@ -186,6 +186,7 @@
186
186
  "label.do_no": "[zh] D/O no.",
187
187
  "label.eta_date": "[zh] eta date",
188
188
  "label.from_date": "[zh] from date",
189
+ "label.global_marketplace_settings": "[zh]global marketplace settings",
189
190
  "label.group_product": "[zh] group product",
190
191
  "label.height": "[zh] height",
191
192
  "label.images": "[zh] images",
@@ -261,6 +262,7 @@
261
262
  "label.to_confirm_receive": "[zh] to confirm receive",
262
263
  "label.to_date": "[zh] to date",
263
264
  "label.tracking_no": "[zh] tracking no",
265
+ "label.transaction_rates": "[zh] transaction rates",
264
266
  "label.truck_no": "[zh] truck no.",
265
267
  "label.unpaid": "[zh] unpaid",
266
268
  "label.upload_documents": "[zh] upload documents",
@@ -364,5 +366,12 @@
364
366
  "title.uploaded_images": "[zh] uploaded images",
365
367
  "title.vas": "[zh] vas",
366
368
  "title.warehouse_products": "[zh] warehouse products",
367
- "button.ok": "[zh] ok"
369
+ "button.ok": "[zh] ok",
370
+ "field.payment_method": "[zh] payment method",
371
+ "field.rate_type": "[zh] rate_ ype",
372
+ "field.rate": "[zh] rate",
373
+ "field.marketplace_store": "[zh] marketplace store",
374
+ "title.marketplace_transaction_rate": "[zh] marketplace transaction rate",
375
+ "text.empty_fields": "[zh] empty field(s)",
376
+ "text.invalid_rate": "[zh] invalid input (rate)"
368
377
  }