@things-factory/operato-wms 4.3.797 → 4.3.798
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/client/pages/components/worksheet-information-popup.js +60 -8
- package/client/pages/constants/order.js +7 -1
- package/client/pages/order/release-order/b2b/b2b-order-list.js +17 -1
- package/client/pages/order/release-order/release-order-detail.js +19 -0
- package/client/pages/order/transport-order/print-delivery-note.js +19 -1
- package/client/pages/outbound/loading-v2/load-by-qty.js +10 -0
- package/client/pages/outbound/loading-v2/loading-execution-base.js +22 -8
- package/client/pages/outbound/loading-v2/loading-execution.js +37 -8
- package/client/pages/outbound/loading-v2/loading.js +6 -0
- package/client/pages/outbound/loading-v2/release-good-info.js +3 -0
- package/client/pages/outbound/picking-product.js +25 -3
- package/client/pages/outbound/picking-v2/picking-execution-base.js +20 -2
- package/client/pages/outbound/picking-v2/picking-execution.js +4 -3
- package/client/pages/outbound/picking-v2/picking.js +3 -0
- package/client/pages/outbound/single-outbound-worksheet.js +18 -1
- package/client/pages/outbound/sorting-product.js +24 -1
- package/client/pages/outbound/worksheet-zone-picking.js +1 -0
- package/dist-server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.js +9 -4
- package/dist-server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.js.map +1 -1
- package/dist-server/graphql/resolvers/outbound/load-by-qty.js +1 -1
- package/dist-server/graphql/resolvers/outbound/load-by-qty.js.map +1 -1
- package/dist-server/graphql/resolvers/outbound/loading-worksheet-v2.js +5 -1
- package/dist-server/graphql/resolvers/outbound/loading-worksheet-v2.js.map +1 -1
- package/dist-server/graphql/resolvers/zone-worksheet/zone-worksheet.js +8 -2
- package/dist-server/graphql/resolvers/zone-worksheet/zone-worksheet.js.map +1 -1
- package/package.json +8 -8
- package/server/graphql/resolvers/outbound/find-loadable-release-good-by-bin.ts +7 -1
- package/server/graphql/resolvers/outbound/load-by-qty.ts +1 -1
- package/server/graphql/resolvers/outbound/loading-worksheet-v2.ts +9 -2
- package/server/graphql/resolvers/zone-worksheet/zone-worksheet.ts +32 -23
- package/translations/en.json +2 -0
- package/translations/ko.json +2 -0
- package/translations/ms.json +2 -0
- package/translations/zh.json +2 -0
|
@@ -10,7 +10,8 @@ import { store } from '@things-factory/shell'
|
|
|
10
10
|
class WorksheetInformationPopup extends connect(store)(localize(i18next)(LitElement)) {
|
|
11
11
|
static get properties() {
|
|
12
12
|
return {
|
|
13
|
-
worksheetInformation: Object
|
|
13
|
+
worksheetInformation: Object,
|
|
14
|
+
_expanded: Boolean
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
|
|
@@ -23,8 +24,33 @@ class WorksheetInformationPopup extends connect(store)(localize(i18next)(LitElem
|
|
|
23
24
|
display: flex;
|
|
24
25
|
flex-direction: column;
|
|
25
26
|
overflow-x: overlay;
|
|
27
|
+
overflow-y: auto;
|
|
26
28
|
background-color: var(--main-section-background-color);
|
|
27
29
|
}
|
|
30
|
+
|
|
31
|
+
.expandable {
|
|
32
|
+
text-overflow: ellipsis;
|
|
33
|
+
overflow: hidden;
|
|
34
|
+
white-space: nowrap;
|
|
35
|
+
cursor: pointer;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
textarea.expandable {
|
|
39
|
+
resize: none;
|
|
40
|
+
white-space: pre-wrap;
|
|
41
|
+
overflow: hidden;
|
|
42
|
+
font-family: inherit;
|
|
43
|
+
font-size: inherit;
|
|
44
|
+
padding: var(--input-padding, 4px);
|
|
45
|
+
border: var(--input-border, 1px solid #ccc);
|
|
46
|
+
border-radius: var(--input-border-radius, 2px);
|
|
47
|
+
background: var(--input-background-color, #fff);
|
|
48
|
+
color: var(--input-color, #333);
|
|
49
|
+
width: 100%;
|
|
50
|
+
box-sizing: border-box;
|
|
51
|
+
cursor: pointer;
|
|
52
|
+
}
|
|
53
|
+
|
|
28
54
|
`
|
|
29
55
|
]
|
|
30
56
|
}
|
|
@@ -33,6 +59,14 @@ class WorksheetInformationPopup extends connect(store)(localize(i18next)(LitElem
|
|
|
33
59
|
return this.shadowRoot.querySelector('form#info-form')
|
|
34
60
|
}
|
|
35
61
|
|
|
62
|
+
_expandableField(name) {
|
|
63
|
+
const value = this.worksheetInformation?.[name] || ''
|
|
64
|
+
if (this._expanded) {
|
|
65
|
+
return html`<textarea class="expandable" name="${name}" readonly @click="${this._toggleExpand}">${value.replace(/, /g, ',\n')}</textarea>`
|
|
66
|
+
}
|
|
67
|
+
return html`<input class="expandable" name="${name}" .value="${value}" readonly @click="${this._toggleExpand}" />`
|
|
68
|
+
}
|
|
69
|
+
|
|
36
70
|
render() {
|
|
37
71
|
return html`
|
|
38
72
|
<form id="info-form" class="multi-column-form">
|
|
@@ -41,25 +75,28 @@ class WorksheetInformationPopup extends connect(store)(localize(i18next)(LitElem
|
|
|
41
75
|
<input name="bizplaceName" readonly />
|
|
42
76
|
|
|
43
77
|
<label>${i18next.t('label.container_no')}</label>
|
|
44
|
-
|
|
78
|
+
${this._expandableField('containerNo')}
|
|
45
79
|
|
|
46
80
|
<label>${i18next.t('label.ref_no')}</label>
|
|
47
|
-
|
|
81
|
+
${this._expandableField('refNo')}
|
|
48
82
|
|
|
49
83
|
<label>${i18next.t('label.ref_no_2')}</label>
|
|
50
|
-
|
|
84
|
+
${this._expandableField('refNo2')}
|
|
51
85
|
|
|
52
86
|
<label>${i18next.t('label.ref_no_3')}</label>
|
|
53
|
-
|
|
87
|
+
${this._expandableField('refNo3')}
|
|
88
|
+
|
|
89
|
+
<label>${i18next.t('field.rtm')}</label>
|
|
90
|
+
${this._expandableField('rtm')}
|
|
54
91
|
|
|
55
92
|
<label>${i18next.t('label.shipping_provider')}</label>
|
|
56
|
-
|
|
93
|
+
${this._expandableField('shippingProvider')}
|
|
57
94
|
|
|
58
95
|
<label>${i18next.t('label.tracking_no')}</label>
|
|
59
|
-
|
|
96
|
+
${this._expandableField('trackingNo')}
|
|
60
97
|
|
|
61
98
|
<label>${i18next.t('label.status')}</label>
|
|
62
|
-
|
|
99
|
+
${this._expandableField('marketplaceStatus')}
|
|
63
100
|
|
|
64
101
|
<label>${i18next.t('label.staging_area')}</label>
|
|
65
102
|
<input name="bufferLocation" readonly />
|
|
@@ -69,6 +106,8 @@ class WorksheetInformationPopup extends connect(store)(localize(i18next)(LitElem
|
|
|
69
106
|
|
|
70
107
|
<label>${i18next.t('label.reusable_pallet_id')}</label>
|
|
71
108
|
<input name="plasticPallet" readonly />
|
|
109
|
+
|
|
110
|
+
|
|
72
111
|
</fieldset>
|
|
73
112
|
</form>
|
|
74
113
|
`
|
|
@@ -78,6 +117,19 @@ class WorksheetInformationPopup extends connect(store)(localize(i18next)(LitElem
|
|
|
78
117
|
if (this.worksheetInformation) this._fillUpForm(this.infoForm, this.worksheetInformation)
|
|
79
118
|
}
|
|
80
119
|
|
|
120
|
+
_toggleExpand() {
|
|
121
|
+
this._expanded = !this._expanded
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
updated(changedProps) {
|
|
125
|
+
if (changedProps.has('_expanded') && this._expanded) {
|
|
126
|
+
this.shadowRoot.querySelectorAll('textarea.expandable').forEach(textarea => {
|
|
127
|
+
textarea.style.height = '100%'
|
|
128
|
+
textarea.style.minHeight = textarea.scrollHeight + 'px'
|
|
129
|
+
})
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
81
133
|
_fillUpForm(form, data) {
|
|
82
134
|
for (let key in data) {
|
|
83
135
|
Array.from(form.querySelectorAll('input')).forEach(field => {
|
|
@@ -212,4 +212,10 @@ export const CONDITION_OF_GOODS = {
|
|
|
212
212
|
DEFECT: { name: 'condition_of_goods_defect', value: 'DEFECT' },
|
|
213
213
|
DAMAGED: { name: 'condition_of_goods_damaged', value: 'DAMAGED' },
|
|
214
214
|
QUARANTINE: { name: 'condition_of_goods_quarantine', value: 'QUARANTINE' },
|
|
215
|
-
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export const RTM_OPTIONS = [
|
|
218
|
+
{ label: 'FTL NORMAL', value: 'FTL_NORMAL' },
|
|
219
|
+
{ label: 'FTL SPECIAL', value: 'FTL_SPECIAL' },
|
|
220
|
+
{ label: 'LTL', value: 'LTL' }
|
|
221
|
+
]
|
|
@@ -16,7 +16,7 @@ import { client, navigate, PageView } from '@things-factory/shell'
|
|
|
16
16
|
import { CommonButtonStyles, ScrollbarStyles } from '@things-factory/styles'
|
|
17
17
|
import { isMobileDevice, sleep } from '@things-factory/utils'
|
|
18
18
|
|
|
19
|
-
import { ORDER_STATUS, ORDER_VAS_STATUS } from '../../../constants'
|
|
19
|
+
import { ORDER_STATUS, ORDER_VAS_STATUS, RTM_OPTIONS } from '../../../constants'
|
|
20
20
|
import { fetchSettingRule } from '../../../../fetch-setting-value'
|
|
21
21
|
|
|
22
22
|
import { applyParamsToFields } from '../../../../util'
|
|
@@ -282,6 +282,13 @@ class B2bOrderList extends localize(i18next)(PageView) {
|
|
|
282
282
|
},
|
|
283
283
|
value: new Date().toISOString().split('T')[0]
|
|
284
284
|
},
|
|
285
|
+
{
|
|
286
|
+
label: i18next.t('field.rtm'),
|
|
287
|
+
name: 'rtm',
|
|
288
|
+
type: 'select',
|
|
289
|
+
props: { searchOper: 'eq' },
|
|
290
|
+
options: [{ value: '' }, ...RTM_OPTIONS.map(option => ({ name: option.label, value: option.value }))]
|
|
291
|
+
},
|
|
285
292
|
{
|
|
286
293
|
label: i18next.t('field.based_on_release_date'),
|
|
287
294
|
name: 'isReleaseDateSearch',
|
|
@@ -416,6 +423,14 @@ class B2bOrderList extends localize(i18next)(PageView) {
|
|
|
416
423
|
sortable: true,
|
|
417
424
|
width: 120
|
|
418
425
|
},
|
|
426
|
+
{
|
|
427
|
+
type: 'string',
|
|
428
|
+
name: 'rtm',
|
|
429
|
+
header: i18next.t('field.rtm'),
|
|
430
|
+
imex: { header: i18next.t('field.rtm'), key: 'rtm', width: 40, type: 'string' },
|
|
431
|
+
sortable: true,
|
|
432
|
+
width: 120
|
|
433
|
+
},
|
|
419
434
|
{
|
|
420
435
|
type: 'boolean',
|
|
421
436
|
name: 'exportOption',
|
|
@@ -601,6 +616,7 @@ class B2bOrderList extends localize(i18next)(PageView) {
|
|
|
601
616
|
refNo3
|
|
602
617
|
exportOption
|
|
603
618
|
routeId
|
|
619
|
+
rtm
|
|
604
620
|
releaseDate
|
|
605
621
|
recall
|
|
606
622
|
status
|
|
@@ -30,6 +30,7 @@ import {
|
|
|
30
30
|
ORDER_STATUS,
|
|
31
31
|
ORDER_VAS_STATUS,
|
|
32
32
|
PICKING_STANDARD,
|
|
33
|
+
RTM_OPTIONS,
|
|
33
34
|
VAS_BATCH_AND_PRODUCT_TYPE,
|
|
34
35
|
VAS_BATCH_NO_TYPE,
|
|
35
36
|
VAS_PRODUCT_TYPE
|
|
@@ -100,6 +101,7 @@ class ReleaseOrderDetail extends connect(store)(localize(i18next)(PageView)) {
|
|
|
100
101
|
_shippingInfo: Object,
|
|
101
102
|
_selectedCountry: String,
|
|
102
103
|
_selectedBillingCountry: String,
|
|
104
|
+
_rtm: String,
|
|
103
105
|
|
|
104
106
|
/* Tab Toggle*/
|
|
105
107
|
_showReleasedOrderInfo: Boolean,
|
|
@@ -583,6 +585,14 @@ class ReleaseOrderDetail extends connect(store)(localize(i18next)(PageView)) {
|
|
|
583
585
|
<label>${i18next.t('label.contact')}</label>
|
|
584
586
|
<input name="phone1" value="${this._releaseOrder.phone1}" />
|
|
585
587
|
|
|
588
|
+
<label>${i18next.t('field.rtm')}</label>
|
|
589
|
+
<select name="rtm" ?disabled="${!this?._editable}">
|
|
590
|
+
<option value=""></option>
|
|
591
|
+
${RTM_OPTIONS.map(
|
|
592
|
+
option => html`<option value="${option.value}" ?selected="${option.value === this._rtm}">${option.label}</option>`
|
|
593
|
+
)}
|
|
594
|
+
</select>
|
|
595
|
+
|
|
586
596
|
<!-- delivery -->
|
|
587
597
|
<div class="header-with-checkbox">
|
|
588
598
|
<label class="section-header">${i18next.t('label.delivery_address')}</label>
|
|
@@ -1559,6 +1569,7 @@ class ReleaseOrderDetail extends connect(store)(localize(i18next)(PageView)) {
|
|
|
1559
1569
|
courierOption
|
|
1560
1570
|
packingOption
|
|
1561
1571
|
recall
|
|
1572
|
+
rtm
|
|
1562
1573
|
releaseDate
|
|
1563
1574
|
collectionOrderNo
|
|
1564
1575
|
attachment {
|
|
@@ -2169,6 +2180,7 @@ class ReleaseOrderDetail extends connect(store)(localize(i18next)(PageView)) {
|
|
|
2169
2180
|
this._selectedCountry = data.country
|
|
2170
2181
|
this._selectedBillingCountry = data.billingCountry || data.country
|
|
2171
2182
|
this._releaseOrder.billingPostalCode = data.billingPostalCode
|
|
2183
|
+
this._rtm = data.rtm || ''
|
|
2172
2184
|
}
|
|
2173
2185
|
|
|
2174
2186
|
_fillupForm(form, data) {
|
|
@@ -2216,6 +2228,7 @@ class ReleaseOrderDetail extends connect(store)(localize(i18next)(PageView)) {
|
|
|
2216
2228
|
this.inventoryData = { records: [] }
|
|
2217
2229
|
this.orderInventoryData = { records: [] }
|
|
2218
2230
|
this.vasData = { records: [] }
|
|
2231
|
+
this._rtm = ''
|
|
2219
2232
|
}
|
|
2220
2233
|
|
|
2221
2234
|
async _deleteReleaseOrder() {
|
|
@@ -3043,6 +3056,12 @@ class ReleaseOrderDetail extends connect(store)(localize(i18next)(PageView)) {
|
|
|
3043
3056
|
delete shippingOrderInfo['']
|
|
3044
3057
|
delete shippingOrderInfo.matchDeliveryAddressInput
|
|
3045
3058
|
|
|
3059
|
+
// rtm belongs to ReleaseGood, not ShippingOrderInfo
|
|
3060
|
+
if ('rtm' in shippingOrderInfo) {
|
|
3061
|
+
releaseOrder.rtm = shippingOrderInfo.rtm || null
|
|
3062
|
+
delete shippingOrderInfo.rtm
|
|
3063
|
+
}
|
|
3064
|
+
|
|
3046
3065
|
// If match delivery address is ticked, all the billing address info will be the same with delivery address info
|
|
3047
3066
|
if (this._disableBillingAddress) {
|
|
3048
3067
|
shippingOrderInfo.billingAddress = contactPointInfo.deliveryAddress1
|
|
@@ -157,6 +157,7 @@ class PrintDeliveryOrder extends localize(i18next)(PageView) {
|
|
|
157
157
|
refNo2
|
|
158
158
|
refNo3
|
|
159
159
|
attentionTo
|
|
160
|
+
rtm
|
|
160
161
|
}
|
|
161
162
|
productList {
|
|
162
163
|
batchNo
|
|
@@ -176,6 +177,7 @@ class PrintDeliveryOrder extends localize(i18next)(PageView) {
|
|
|
176
177
|
fax
|
|
177
178
|
email
|
|
178
179
|
businessRestDay
|
|
180
|
+
customerCode
|
|
179
181
|
}
|
|
180
182
|
}
|
|
181
183
|
}
|
|
@@ -379,13 +381,15 @@ class PrintDeliveryOrder extends localize(i18next)(PageView) {
|
|
|
379
381
|
}
|
|
380
382
|
|
|
381
383
|
_exportableData() {
|
|
382
|
-
const { name, doNo, refNo, refNo2, refNo3, companyDomain, attentionTo, doDate } = {
|
|
384
|
+
const { name, doNo, refNo, refNo2, refNo3, companyDomain, attentionTo, doDate, rtm } = {
|
|
383
385
|
...this._orderInfo.releaseGood,
|
|
384
386
|
bizplaceName: this._orderInfo.bizplace.name,
|
|
385
387
|
doNo: this._orderInfo.name,
|
|
386
388
|
doDate: this._orderInfo.createdDate
|
|
387
389
|
}
|
|
388
390
|
|
|
391
|
+
const customerCode = this._deliveryContactPoint?.customerCode || ''
|
|
392
|
+
|
|
389
393
|
const exportData = this._orderInfo.productList.map(res => {
|
|
390
394
|
return {
|
|
391
395
|
roNo: name,
|
|
@@ -396,6 +400,8 @@ class PrintDeliveryOrder extends localize(i18next)(PageView) {
|
|
|
396
400
|
companyDomain,
|
|
397
401
|
recipientBiz: attentionTo,
|
|
398
402
|
doDate,
|
|
403
|
+
rtm,
|
|
404
|
+
customerCode,
|
|
399
405
|
...res
|
|
400
406
|
}
|
|
401
407
|
})
|
|
@@ -431,6 +437,18 @@ class PrintDeliveryOrder extends localize(i18next)(PageView) {
|
|
|
431
437
|
width: 25,
|
|
432
438
|
type: 'string'
|
|
433
439
|
},
|
|
440
|
+
{
|
|
441
|
+
header: i18next.t('field.rtm'),
|
|
442
|
+
key: 'rtm',
|
|
443
|
+
width: 25,
|
|
444
|
+
type: 'string'
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
header: i18next.t('field.customer_code'),
|
|
448
|
+
key: 'customerCode',
|
|
449
|
+
width: 25,
|
|
450
|
+
type: 'string'
|
|
451
|
+
},
|
|
434
452
|
{
|
|
435
453
|
header: i18next.t('field.company'),
|
|
436
454
|
key: 'companyDomain',
|
|
@@ -108,6 +108,16 @@ class LoadByQty extends localize(i18next)(LitElement) {
|
|
|
108
108
|
if (isNaN(qty) || qty < 0) {
|
|
109
109
|
throw new Error(`Invalid quantity for product ${data.productName}. Quantity must be a number greater than 0.`)
|
|
110
110
|
}
|
|
111
|
+
|
|
112
|
+
const isInventoryDecimal = data.relatedOrderInv?.product?.isInventoryDecimal === true
|
|
113
|
+
if (!isInventoryDecimal && !Number.isInteger(qty)) {
|
|
114
|
+
const sku = data.relatedOrderInv?.product?.sku || data.productSku || data.productName
|
|
115
|
+
throw new Error(
|
|
116
|
+
i18next.t('text.decimal_not_allowed_for_product', { sku }) ||
|
|
117
|
+
`Decimal quantity is not allowed for product ${sku}`
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
|
|
111
121
|
return {
|
|
112
122
|
...data,
|
|
113
123
|
loadedQty: qty
|
|
@@ -15,15 +15,14 @@ import { openPopup } from '@things-factory/layout-base'
|
|
|
15
15
|
import { client, CustomAlert, gqlContext } from '@things-factory/shell'
|
|
16
16
|
import { CommonButtonStyles } from '@things-factory/styles'
|
|
17
17
|
import { WORKSHEET_STATUS } from '../../constants'
|
|
18
|
-
import {
|
|
19
|
-
|
|
20
|
-
import { showToast } from '../../../util'
|
|
18
|
+
import { fetchPageSettings, showToast } from '../../../util'
|
|
21
19
|
|
|
22
20
|
// Constants
|
|
23
21
|
const SETTINGS = {
|
|
24
22
|
QC_SKU: 'qc-sku',
|
|
25
23
|
DISABLE_QC: 'disable-QC-in-loading',
|
|
26
|
-
ENABLE_TOTE_SCANNING: 'enable-tote-scanning'
|
|
24
|
+
ENABLE_TOTE_SCANNING: 'enable-tote-scanning',
|
|
25
|
+
DISPLAY_CONVERSION: 'display-conversion'
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
const TAB_TYPES = {
|
|
@@ -86,6 +85,7 @@ const FIND_LOADABLE_RELEASE_GOOD_BY_BIN = gql`
|
|
|
86
85
|
refNo
|
|
87
86
|
refNo2
|
|
88
87
|
refNo3
|
|
88
|
+
rtm
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
worksheetDetailInfos {
|
|
@@ -98,6 +98,7 @@ const FIND_LOADABLE_RELEASE_GOOD_BY_BIN = gql`
|
|
|
98
98
|
status
|
|
99
99
|
packingType
|
|
100
100
|
packingSize
|
|
101
|
+
conversion
|
|
101
102
|
expirationDate
|
|
102
103
|
binLocation {
|
|
103
104
|
name
|
|
@@ -168,6 +169,7 @@ const LOADING_WORKSHEET_V2 = gql`
|
|
|
168
169
|
refNo2
|
|
169
170
|
refNo3
|
|
170
171
|
remark
|
|
172
|
+
rtm
|
|
171
173
|
}
|
|
172
174
|
}
|
|
173
175
|
worksheetDetailInfos {
|
|
@@ -180,6 +182,7 @@ const LOADING_WORKSHEET_V2 = gql`
|
|
|
180
182
|
status
|
|
181
183
|
packingType
|
|
182
184
|
packingSize
|
|
185
|
+
conversion
|
|
183
186
|
expirationDate
|
|
184
187
|
binLocation {
|
|
185
188
|
name
|
|
@@ -310,7 +313,8 @@ export class LoadingExecutionBase extends LitElement {
|
|
|
310
313
|
_hasRefWorksheetId: Boolean,
|
|
311
314
|
toteNo: String,
|
|
312
315
|
_tabCounts: Object,
|
|
313
|
-
_needsSealing: Boolean
|
|
316
|
+
_needsSealing: Boolean,
|
|
317
|
+
_displayConversion: Boolean
|
|
314
318
|
}
|
|
315
319
|
}
|
|
316
320
|
|
|
@@ -936,9 +940,19 @@ export class LoadingExecutionBase extends LitElement {
|
|
|
936
940
|
}
|
|
937
941
|
|
|
938
942
|
async resetView() {
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
943
|
+
const pageSettings = await fetchPageSettings({
|
|
944
|
+
settings: {
|
|
945
|
+
name: 'name',
|
|
946
|
+
operator: 'in',
|
|
947
|
+
value: [SETTINGS.DISABLE_QC, SETTINGS.QC_SKU, SETTINGS.ENABLE_TOTE_SCANNING, SETTINGS.DISPLAY_CONVERSION]
|
|
948
|
+
}
|
|
949
|
+
})
|
|
950
|
+
const settingsMap = new Map(pageSettings?.settings?.map(setting => [setting.name, setting.value]) || [])
|
|
951
|
+
|
|
952
|
+
this._disableQC = settingsMap.get(SETTINGS.DISABLE_QC) === 'true'
|
|
953
|
+
this._useQcSku = settingsMap.get(SETTINGS.QC_SKU) === 'true'
|
|
954
|
+
this._enableToteScanningValue = parseInt(settingsMap.get(SETTINGS.ENABLE_TOTE_SCANNING) || '0', 10)
|
|
955
|
+
this._displayConversion = settingsMap.get(SETTINGS.DISPLAY_CONVERSION) === 'true'
|
|
942
956
|
this._enableToteScanning = this._enableToteScanningValue >= 1
|
|
943
957
|
|
|
944
958
|
let activeTab = TAB_TYPES.QC
|
|
@@ -8,7 +8,7 @@ import { i18next } from '@things-factory/i18n-base'
|
|
|
8
8
|
import { isMobileDevice } from '@things-factory/utils'
|
|
9
9
|
import { LoadingExecutionBase } from './loading-execution-base'
|
|
10
10
|
import '../../components/list-view/product-list-view'
|
|
11
|
-
import {
|
|
11
|
+
import { fetchPageSettings } from '../../../util'
|
|
12
12
|
import { CommonButtonStyles } from '@things-factory/styles'
|
|
13
13
|
import { client, CustomAlert, gqlContext } from '@things-factory/shell'
|
|
14
14
|
import { openPopup } from '@things-factory/layout-base'
|
|
@@ -19,7 +19,8 @@ import './loading-package-info-popup'
|
|
|
19
19
|
const SETTINGS = {
|
|
20
20
|
QC_SKU: 'qc-sku',
|
|
21
21
|
DISABLE_QC: 'disable-QC-in-loading',
|
|
22
|
-
ENABLE_TOTE_SCANNING: 'enable-tote-scanning'
|
|
22
|
+
ENABLE_TOTE_SCANNING: 'enable-tote-scanning',
|
|
23
|
+
DISPLAY_CONVERSION: 'display-conversion'
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
const TAB_TYPES = {
|
|
@@ -137,6 +138,10 @@ const QC_LIST_CONFIG = {
|
|
|
137
138
|
type: 'row',
|
|
138
139
|
content: [{ header: 'Bin No.', field: 'binLocation.name', type: 'string', style: 'font-weight: bold;' }]
|
|
139
140
|
},
|
|
141
|
+
{
|
|
142
|
+
type: 'row',
|
|
143
|
+
content: [{ header: 'Pack Conv.', field: 'conversion', type: 'string' }]
|
|
144
|
+
},
|
|
140
145
|
{
|
|
141
146
|
type: 'valueBox',
|
|
142
147
|
content: { header: 'QC Qty.', field: 'sortedQty', field2: 'pickedQty', type: 'string' }
|
|
@@ -185,6 +190,10 @@ const LOADING_LIST_CONFIG = {
|
|
|
185
190
|
type: 'row',
|
|
186
191
|
content: [{ header: 'Bin No.', field: 'binLocation.name', type: 'string', style: 'font-weight: bold;' }]
|
|
187
192
|
},
|
|
193
|
+
{
|
|
194
|
+
type: 'row',
|
|
195
|
+
content: [{ header: 'Pack Conv.', field: 'conversion', type: 'string' }]
|
|
196
|
+
},
|
|
188
197
|
{
|
|
189
198
|
type: 'valueBox',
|
|
190
199
|
content: { header: 'Ready Qty.', field: 'sortedQty', field2: 'pickedQty', type: 'string' }
|
|
@@ -590,10 +599,19 @@ export class LoadingExecution extends LoadingExecutionBase {
|
|
|
590
599
|
}
|
|
591
600
|
|
|
592
601
|
async resetView() {
|
|
593
|
-
const
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
602
|
+
const pageSettings = await fetchPageSettings({
|
|
603
|
+
settings: {
|
|
604
|
+
name: 'name',
|
|
605
|
+
operator: 'in',
|
|
606
|
+
value: [SETTINGS.DISABLE_QC, SETTINGS.QC_SKU, SETTINGS.ENABLE_TOTE_SCANNING, SETTINGS.DISPLAY_CONVERSION]
|
|
607
|
+
}
|
|
608
|
+
})
|
|
609
|
+
const settingsMap = new Map(pageSettings?.settings?.map(setting => [setting.name, setting.value]) || [])
|
|
610
|
+
|
|
611
|
+
this._disableQC = settingsMap.get(SETTINGS.DISABLE_QC) === 'true'
|
|
612
|
+
this._useQcSku = settingsMap.get(SETTINGS.QC_SKU) === 'true'
|
|
613
|
+
this._enableToteScanningValue = parseInt(settingsMap.get(SETTINGS.ENABLE_TOTE_SCANNING) || '0', 10)
|
|
614
|
+
this._displayConversion = settingsMap.get(SETTINGS.DISPLAY_CONVERSION) === 'true'
|
|
597
615
|
this._enableToteScanning = this._enableToteScanningValue >= 1
|
|
598
616
|
this.toteNo = ''
|
|
599
617
|
|
|
@@ -641,17 +659,28 @@ export class LoadingExecution extends LoadingExecutionBase {
|
|
|
641
659
|
}
|
|
642
660
|
|
|
643
661
|
get qcListItemConfig() {
|
|
644
|
-
return QC_LIST_CONFIG
|
|
662
|
+
return this._filterConversionField(QC_LIST_CONFIG)
|
|
645
663
|
}
|
|
646
664
|
|
|
647
665
|
get loadingListItemConfig() {
|
|
648
|
-
return LOADING_LIST_CONFIG
|
|
666
|
+
return this._filterConversionField(LOADING_LIST_CONFIG)
|
|
649
667
|
}
|
|
650
668
|
|
|
651
669
|
get skuListItemConfig() {
|
|
652
670
|
return SKU_LIST_CONFIG
|
|
653
671
|
}
|
|
654
672
|
|
|
673
|
+
_filterConversionField(config) {
|
|
674
|
+
if (this._displayConversion) return config
|
|
675
|
+
return {
|
|
676
|
+
...config,
|
|
677
|
+
columnRight: {
|
|
678
|
+
...config.columnRight,
|
|
679
|
+
fields: config.columnRight.fields.filter(f => !(f.type === 'row' && f.content?.[0]?.field === 'conversion'))
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
|
|
655
684
|
get deliveryOrderConfig() {
|
|
656
685
|
return this._deliveryOrderConfig
|
|
657
686
|
}
|
|
@@ -95,6 +95,7 @@ const FIND_LOADABLE_RELEASE_GOOD_BY_BIN = gql`
|
|
|
95
95
|
refNo
|
|
96
96
|
refNo2
|
|
97
97
|
refNo3
|
|
98
|
+
rtm
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
worksheetDetailInfos {
|
|
@@ -107,6 +108,7 @@ const FIND_LOADABLE_RELEASE_GOOD_BY_BIN = gql`
|
|
|
107
108
|
status
|
|
108
109
|
packingType
|
|
109
110
|
packingSize
|
|
111
|
+
conversion
|
|
110
112
|
expirationDate
|
|
111
113
|
binLocation {
|
|
112
114
|
name
|
|
@@ -165,6 +167,7 @@ const LOADING_WORKSHEET_V2 = gql`
|
|
|
165
167
|
refNo2
|
|
166
168
|
refNo3
|
|
167
169
|
remark
|
|
170
|
+
rtm
|
|
168
171
|
}
|
|
169
172
|
}
|
|
170
173
|
worksheetDetailInfos {
|
|
@@ -177,6 +180,7 @@ const LOADING_WORKSHEET_V2 = gql`
|
|
|
177
180
|
status
|
|
178
181
|
packingType
|
|
179
182
|
packingSize
|
|
183
|
+
conversion
|
|
180
184
|
expirationDate
|
|
181
185
|
binLocation {
|
|
182
186
|
name
|
|
@@ -258,6 +262,7 @@ const GET_LOADING_TASK = gql`
|
|
|
258
262
|
refNo2
|
|
259
263
|
refNo3
|
|
260
264
|
remark
|
|
265
|
+
rtm
|
|
261
266
|
}
|
|
262
267
|
}
|
|
263
268
|
worksheetDetailInfos {
|
|
@@ -270,6 +275,7 @@ const GET_LOADING_TASK = gql`
|
|
|
270
275
|
status
|
|
271
276
|
packingType
|
|
272
277
|
packingSize
|
|
278
|
+
conversion
|
|
273
279
|
expirationDate
|
|
274
280
|
binLocation {
|
|
275
281
|
name
|
|
@@ -79,6 +79,9 @@ class ReleaseGoodInfo extends localize(i18next)(LitElement) {
|
|
|
79
79
|
<label class="worksheet-info-title">Ref 3</label>
|
|
80
80
|
<label class="worksheet-info-description">: ${this.data?.releaseGood?.refNo3 || ''}</label>
|
|
81
81
|
|
|
82
|
+
<label class="worksheet-info-title">${i18next.t('field.rtm')}</label>
|
|
83
|
+
<label class="worksheet-info-description">: ${this.data?.releaseGood?.rtm || ''}</label>
|
|
84
|
+
|
|
82
85
|
<label class="worksheet-info-title">Remark</label>
|
|
83
86
|
<label class="worksheet-info-description">: ${this.data?.releaseGood?.remark || ''}</label>
|
|
84
87
|
|
|
@@ -581,7 +581,7 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
581
581
|
settings: {
|
|
582
582
|
name: 'name',
|
|
583
583
|
operator: 'in',
|
|
584
|
-
value: ['enable-bin-picking', 'camera-scan-only', 'enable-picking-random-seq', 'disable-missing-button']
|
|
584
|
+
value: ['enable-bin-picking', 'camera-scan-only', 'enable-picking-random-seq', 'disable-missing-button', 'display-conversion']
|
|
585
585
|
}
|
|
586
586
|
})
|
|
587
587
|
|
|
@@ -591,6 +591,7 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
591
591
|
let cameraScanOnly = settingsMap.get('camera-scan-only') === 'true'
|
|
592
592
|
let enablePickingRandomSeq = settingsMap.get('enable-picking-random-seq') === 'true'
|
|
593
593
|
let disableMissingButton = settingsMap.get('disable-missing-button') === 'true'
|
|
594
|
+
let displayConversion = settingsMap.get('display-conversion') === 'true'
|
|
594
595
|
|
|
595
596
|
const locationSortingTask = fetchLocationSortingRule(LOCATION_SORTING_RULE.PICKING_PRODUCT.value)
|
|
596
597
|
|
|
@@ -726,6 +727,14 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
726
727
|
label: true,
|
|
727
728
|
width: 140
|
|
728
729
|
},
|
|
730
|
+
{
|
|
731
|
+
type: 'string',
|
|
732
|
+
name: 'conversion',
|
|
733
|
+
header: i18next.t('field.pack_conversion'),
|
|
734
|
+
label: true,
|
|
735
|
+
hidden: !displayConversion,
|
|
736
|
+
width: 140
|
|
737
|
+
},
|
|
729
738
|
{
|
|
730
739
|
type: 'string',
|
|
731
740
|
name: 'releaseProgress',
|
|
@@ -750,7 +759,8 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
750
759
|
this._pageSettings = {
|
|
751
760
|
...this._pageSettings,
|
|
752
761
|
enablePickingRandomSeq: (await enablePickingRandomSeq) || false,
|
|
753
|
-
cameraScanOnly: (await cameraScanOnly) || false
|
|
762
|
+
cameraScanOnly: (await cameraScanOnly) || false,
|
|
763
|
+
displayConversion: (await displayConversion) || false
|
|
754
764
|
}
|
|
755
765
|
}
|
|
756
766
|
|
|
@@ -1722,6 +1732,7 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
1722
1732
|
recall
|
|
1723
1733
|
crossDocking
|
|
1724
1734
|
type
|
|
1735
|
+
rtm
|
|
1725
1736
|
}
|
|
1726
1737
|
replenishment {
|
|
1727
1738
|
id
|
|
@@ -1763,6 +1774,7 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
1763
1774
|
targetName
|
|
1764
1775
|
packingType
|
|
1765
1776
|
packingSize
|
|
1777
|
+
conversion
|
|
1766
1778
|
location {
|
|
1767
1779
|
name
|
|
1768
1780
|
description
|
|
@@ -1818,7 +1830,7 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
1818
1830
|
this._crossDocking = worksheetInfo.releaseGood?._crossDocking
|
|
1819
1831
|
this._bizplaceName = worksheetInfo?.bizplaceName
|
|
1820
1832
|
this._orderNo = this.releaseGoodNo
|
|
1821
|
-
this._worksheetInfo = worksheetInfo
|
|
1833
|
+
this._worksheetInfo = { ...worksheetInfo, rtm: worksheetInfo.releaseGood?.rtm }
|
|
1822
1834
|
let data = { records: this.formatWorksheetDetailInfos(worksheetDetailInfos) }
|
|
1823
1835
|
this.data = { ...data }
|
|
1824
1836
|
|
|
@@ -1910,6 +1922,14 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
1910
1922
|
partnerDomainId
|
|
1911
1923
|
customerCompanyDomainId
|
|
1912
1924
|
startedAt
|
|
1925
|
+
rtm
|
|
1926
|
+
refNo
|
|
1927
|
+
refNo2
|
|
1928
|
+
refNo3
|
|
1929
|
+
shippingProvider
|
|
1930
|
+
trackingNo
|
|
1931
|
+
marketplaceStatus
|
|
1932
|
+
containerNo
|
|
1913
1933
|
}
|
|
1914
1934
|
worksheetDetailInfos {
|
|
1915
1935
|
hasMissingInventoryChanges
|
|
@@ -1931,6 +1951,7 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
1931
1951
|
status
|
|
1932
1952
|
packingType
|
|
1933
1953
|
packingSize
|
|
1954
|
+
conversion
|
|
1934
1955
|
location {
|
|
1935
1956
|
name
|
|
1936
1957
|
}
|
|
@@ -2330,6 +2351,7 @@ class PickingProduct extends connect(store)(localize(i18next)(PageView)) {
|
|
|
2330
2351
|
targetName
|
|
2331
2352
|
packingType
|
|
2332
2353
|
packingSize
|
|
2354
|
+
conversion
|
|
2333
2355
|
location {
|
|
2334
2356
|
name
|
|
2335
2357
|
description
|