@things-factory/operato-wms 3.7.2 → 3.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client/pages/components/select-product-popup.js +5 -1
- package/client/pages/constants/order.js +10 -0
- package/client/pages/inbound/putaway-product.js +162 -139
- package/client/pages/inventory-check/inspecting-product.js +146 -80
- package/client/pages/manifest/create-loading-manifest.js +314 -0
- package/client/pages/manifest/dispatcher-verification-popup.js +86 -0
- package/client/pages/manifest/loading-manifest-detail.js +345 -0
- package/client/pages/manifest/loading-manifest-list.js +305 -0
- package/client/pages/order/arrival-notice/create-arrival-notice.js +8 -1
- package/client/pages/order/goods-received-note/received-note-list.js +138 -6
- package/client/pages/order/release-order/b2b/b2b-order-list.js +45 -5
- package/client/pages/order/release-order/b2b/b2b-order-requests.js +45 -5
- package/client/pages/order/release-order/b2c/b2c-order-requests.js +181 -21
- package/client/pages/order/release-order/bulk-print-packing-list.js +23 -0
- package/client/pages/order/release-order/create-release-order.js +25 -4
- package/client/pages/order/release-order/receive-release-order-request.js +27 -24
- package/client/pages/order/release-order/release-extra-product-popup.js +189 -56
- package/client/pages/order/release-order/release-order-detail.js +292 -71
- package/client/pages/order/reverse-kitting-order/reverse-kitting-order-detail.js +115 -50
- package/client/pages/order/reverse-kitting-order/reverse-kitting-order-list.js +1 -6
- package/client/pages/order/reverse-kitting-order/reverse-kitting-pallet-label-popup.js +239 -0
- package/client/pages/order/transport-order/delivery-order-list.js +99 -59
- package/client/pages/outbound/loading-product.js +4 -1
- package/client/pages/outbound/merged-outbound-worksheet.js +39 -1
- package/client/pages/outbound/packing-product.js +4 -1
- package/client/pages/outbound/packing-worksheet-list.js +39 -1
- package/client/pages/outbound/picking-product.js +622 -290
- package/client/pages/outbound/serial-number-popup.js +280 -0
- package/client/pages/outbound/worksheet-picking.js +28 -2
- package/client/pages/report/product-label-report.js +401 -0
- package/client/pages/support/inventory-comparison.js +296 -0
- package/client/pages/vas/print-product-label.js +298 -132
- package/client/pages/vas/reverse-kitting/execute-reverse-kitting.js +30 -12
- package/client/pages/vas/reverse-kitting/popup-combination-sets.js +75 -5
- package/client/pages/vas/reverse-kitting/popup-reverse-kitting-template.js +113 -18
- package/client/route.js +23 -0
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js +64 -54
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js.map +1 -1
- package/dist-server/graphql/resolvers/extra/add-release-good-products.js +34 -9
- package/dist-server/graphql/resolvers/extra/add-release-good-products.js.map +1 -1
- package/dist-server/graphql/resolvers/index.js +3 -1
- package/dist-server/graphql/resolvers/index.js.map +1 -1
- package/dist-server/graphql/resolvers/inventory-comparison/index.js +6 -0
- package/dist-server/graphql/resolvers/inventory-comparison/index.js.map +1 -0
- package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js +78 -0
- package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/index.js +2 -1
- package/dist-server/graphql/resolvers/reports/index.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/product-label-report.js +56 -0
- package/dist-server/graphql/resolvers/reports/product-label-report.js.map +1 -0
- package/dist-server/graphql/types/index.js +5 -2
- package/dist-server/graphql/types/index.js.map +1 -1
- package/dist-server/graphql/types/inventory-comparison/index.js +13 -0
- package/dist-server/graphql/types/inventory-comparison/index.js.map +1 -0
- package/dist-server/graphql/types/inventory-comparison/inventory-comparison-list.js +14 -0
- package/dist-server/graphql/types/inventory-comparison/inventory-comparison-list.js.map +1 -0
- package/dist-server/graphql/types/inventory-comparison/inventory-comparison.js +18 -0
- package/dist-server/graphql/types/inventory-comparison/inventory-comparison.js.map +1 -0
- package/dist-server/graphql/types/reports/index.js +6 -1
- package/dist-server/graphql/types/reports/index.js.map +1 -1
- package/dist-server/graphql/types/reports/product-label-report-list.js +14 -0
- package/dist-server/graphql/types/reports/product-label-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/product-label-report.js +16 -0
- package/dist-server/graphql/types/reports/product-label-report.js.map +1 -0
- package/package.json +65 -65
- package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts +75 -65
- package/server/graphql/resolvers/extra/add-release-good-products.ts +57 -15
- package/server/graphql/resolvers/index.ts +3 -1
- package/server/graphql/resolvers/inventory-comparison/index.ts +5 -0
- package/server/graphql/resolvers/inventory-comparison/inventory-comparison-list.ts +99 -0
- package/server/graphql/resolvers/reports/index.ts +3 -1
- package/server/graphql/resolvers/reports/product-label-report.ts +56 -0
- package/server/graphql/types/index.ts +5 -2
- package/server/graphql/types/inventory-comparison/index.ts +11 -0
- package/server/graphql/types/inventory-comparison/inventory-comparison-list.ts +8 -0
- package/server/graphql/types/inventory-comparison/inventory-comparison.ts +12 -0
- package/server/graphql/types/reports/index.ts +6 -1
- package/server/graphql/types/reports/product-label-report-list.ts +8 -0
- package/server/graphql/types/reports/product-label-report.ts +10 -0
- package/things-factory.config.js +24 -0
- package/translations/en.json +64 -12
- package/translations/ko.json +50 -1
- package/translations/ms.json +51 -1
- package/translations/zh.json +50 -1
|
@@ -72,9 +72,6 @@ class ExecuteReverseKitting extends connect(store)(localize(i18next)(PageView))
|
|
|
72
72
|
? html`<form class="multi-column-form" id="info-form">
|
|
73
73
|
<fieldset>
|
|
74
74
|
<legend>${`${i18next.t('title.order_no')}: ${this._orderNo}`}</legend>
|
|
75
|
-
|
|
76
|
-
<!-- <label>${i18next.t('label.company')}</label>
|
|
77
|
-
<input name="bizplaceName" readonly /> -->
|
|
78
75
|
</fieldset>
|
|
79
76
|
</form>
|
|
80
77
|
|
|
@@ -109,8 +106,11 @@ class ExecuteReverseKitting extends connect(store)(localize(i18next)(PageView))
|
|
|
109
106
|
|
|
110
107
|
get completable() {
|
|
111
108
|
let completable = false
|
|
112
|
-
|
|
113
|
-
|
|
109
|
+
const orderDataWithIssues = this.orderData.records.filter(orderReverseKitting => !orderReverseKitting.completed)
|
|
110
|
+
if (!orderDataWithIssues?.length) {
|
|
111
|
+
completable = this.orderData.records.every(record => record.completed)
|
|
112
|
+
} else {
|
|
113
|
+
completable = orderDataWithIssues.every(record => record.issue)
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
return completable
|
|
@@ -131,7 +131,7 @@ class ExecuteReverseKitting extends connect(store)(localize(i18next)(PageView))
|
|
|
131
131
|
pageInitialized() {
|
|
132
132
|
this.orderGristConfig = {
|
|
133
133
|
pagination: { infinite: true },
|
|
134
|
-
list: { fields: ['completed', 'batchId', 'palletId', 'product', 'qty'] },
|
|
134
|
+
list: { fields: ['completed', 'batchId', 'palletId', 'product', 'qty', 'issue'] },
|
|
135
135
|
rows: {
|
|
136
136
|
appendable: false,
|
|
137
137
|
handlers: {
|
|
@@ -179,6 +179,13 @@ class ExecuteReverseKitting extends connect(store)(localize(i18next)(PageView))
|
|
|
179
179
|
header: i18next.t('field.uom_value'),
|
|
180
180
|
label: true,
|
|
181
181
|
width: 60
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
type: 'string',
|
|
185
|
+
name: 'issue',
|
|
186
|
+
header: i18next.t('field.issue'),
|
|
187
|
+
label: true,
|
|
188
|
+
width: 200
|
|
182
189
|
}
|
|
183
190
|
]
|
|
184
191
|
}
|
|
@@ -236,6 +243,7 @@ class ExecuteReverseKitting extends connect(store)(localize(i18next)(PageView))
|
|
|
236
243
|
otherTarget
|
|
237
244
|
operationGuide
|
|
238
245
|
status
|
|
246
|
+
issue
|
|
239
247
|
description
|
|
240
248
|
remark
|
|
241
249
|
}
|
|
@@ -336,7 +344,6 @@ class ExecuteReverseKitting extends connect(store)(localize(i18next)(PageView))
|
|
|
336
344
|
|
|
337
345
|
_clearView() {
|
|
338
346
|
this.orderData = { records: [] }
|
|
339
|
-
this.inputForm.reset()
|
|
340
347
|
this._selectedParentInventory = null
|
|
341
348
|
this.updateContext()
|
|
342
349
|
}
|
|
@@ -346,11 +353,22 @@ class ExecuteReverseKitting extends connect(store)(localize(i18next)(PageView))
|
|
|
346
353
|
}
|
|
347
354
|
|
|
348
355
|
_openPopupCombinationSets(record) {
|
|
349
|
-
openPopup(
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
356
|
+
openPopup(
|
|
357
|
+
html`
|
|
358
|
+
<popup-combination-sets
|
|
359
|
+
.orderNo="${this._orderNo}"
|
|
360
|
+
.data="${record}"
|
|
361
|
+
@order-reverse-kitting-data="${e => {
|
|
362
|
+
this.fetchReverseKittingOrder(this._orderNo)
|
|
363
|
+
}}"
|
|
364
|
+
></popup-combination-sets>
|
|
365
|
+
`,
|
|
366
|
+
{
|
|
367
|
+
backdrop: true,
|
|
368
|
+
size: 'large',
|
|
369
|
+
title: record.palletId
|
|
370
|
+
}
|
|
371
|
+
)
|
|
354
372
|
}
|
|
355
373
|
|
|
356
374
|
_showToast({ type, message }) {
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import '../../vas/reverse-kitting/popup-reverse-kitting-template'
|
|
2
|
+
import '../../components/popup-note'
|
|
2
3
|
|
|
4
|
+
import gql from 'graphql-tag'
|
|
3
5
|
import { css, html, LitElement } from 'lit-element'
|
|
4
6
|
|
|
5
7
|
import { MultiColumnFormStyles } from '@things-factory/form-ui'
|
|
6
8
|
import { i18next, localize } from '@things-factory/i18n-base'
|
|
7
9
|
import { openPopup } from '@things-factory/layout-base'
|
|
10
|
+
import { client } from '@things-factory/shell'
|
|
8
11
|
import { isMobileDevice } from '@things-factory/utils'
|
|
9
12
|
|
|
10
13
|
class PopupCombinationSets extends localize(i18next)(LitElement) {
|
|
@@ -53,12 +56,15 @@ class PopupCombinationSets extends localize(i18next)(LitElement) {
|
|
|
53
56
|
font-size: var(--grist-title-icon-size);
|
|
54
57
|
color: var(--grist-title-icon-color);
|
|
55
58
|
}
|
|
59
|
+
.grist {
|
|
60
|
+
display: flex;
|
|
61
|
+
flex-direction: column;
|
|
62
|
+
flex: 1;
|
|
63
|
+
overflow-y: auto;
|
|
64
|
+
}
|
|
56
65
|
.button-container {
|
|
57
|
-
padding:
|
|
58
|
-
|
|
59
|
-
text-align: var(--button-container-align);
|
|
60
|
-
background-color: var(--button-container-background);
|
|
61
|
-
height: var(--button-container-height);
|
|
66
|
+
padding: 10px 0 12px 0;
|
|
67
|
+
text-align: center;
|
|
62
68
|
}
|
|
63
69
|
`
|
|
64
70
|
]
|
|
@@ -129,6 +135,15 @@ class PopupCombinationSets extends localize(i18next)(LitElement) {
|
|
|
129
135
|
></data-grist>
|
|
130
136
|
</div>`
|
|
131
137
|
: ''}
|
|
138
|
+
${this.data
|
|
139
|
+
? html`<div class="button-container">
|
|
140
|
+
<mwc-button
|
|
141
|
+
raised
|
|
142
|
+
@click=${this._openIssueNote.bind(this)}
|
|
143
|
+
label="${i18next.t('button.issue')}"
|
|
144
|
+
></mwc-button>
|
|
145
|
+
</div>`
|
|
146
|
+
: ''}
|
|
132
147
|
`
|
|
133
148
|
}
|
|
134
149
|
|
|
@@ -214,6 +229,31 @@ class PopupCombinationSets extends localize(i18next)(LitElement) {
|
|
|
214
229
|
}
|
|
215
230
|
}
|
|
216
231
|
|
|
232
|
+
async updateReverseKittingIssue(orderReverseKitting, issue) {
|
|
233
|
+
try {
|
|
234
|
+
if (!issue) return
|
|
235
|
+
const response = await client.mutate({
|
|
236
|
+
mutation: gql`
|
|
237
|
+
mutation updateOrderReverseKitting($id: String!, $patch: OrderReverseKittingPatch!) {
|
|
238
|
+
updateOrderReverseKitting(id: $id, patch: $patch) {
|
|
239
|
+
id
|
|
240
|
+
name
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
`,
|
|
244
|
+
variables: { id: orderReverseKitting.id, patch: { issue } }
|
|
245
|
+
})
|
|
246
|
+
|
|
247
|
+
if (!response.errors) {
|
|
248
|
+
this._showToast({ message: i18next.t('text.issue_updated') })
|
|
249
|
+
this.dispatchEvent(new CustomEvent('order-reverse-kitting-data', { detail: this.data }))
|
|
250
|
+
history.back()
|
|
251
|
+
}
|
|
252
|
+
} catch (e) {
|
|
253
|
+
this._showToast(e)
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
217
257
|
getProductCombination() {
|
|
218
258
|
let operationGuide = JSON.parse(this.data.operationGuide)
|
|
219
259
|
this.productCombinationSets = {
|
|
@@ -229,6 +269,25 @@ class PopupCombinationSets extends localize(i18next)(LitElement) {
|
|
|
229
269
|
}
|
|
230
270
|
}
|
|
231
271
|
|
|
272
|
+
_openIssueNote() {
|
|
273
|
+
openPopup(
|
|
274
|
+
html`
|
|
275
|
+
<popup-note
|
|
276
|
+
.title="${i18next.t('title.issue')}"
|
|
277
|
+
.value="${this.data.issue}"
|
|
278
|
+
@submit="${async e => {
|
|
279
|
+
await this.updateReverseKittingIssue(this.data, e.detail.value)
|
|
280
|
+
}}"
|
|
281
|
+
></popup-note>
|
|
282
|
+
`,
|
|
283
|
+
{
|
|
284
|
+
backdrop: true,
|
|
285
|
+
size: 'medium',
|
|
286
|
+
title: i18next.t('title.issue')
|
|
287
|
+
}
|
|
288
|
+
)
|
|
289
|
+
}
|
|
290
|
+
|
|
232
291
|
_openPopupReverseKittingTemplate(record) {
|
|
233
292
|
openPopup(
|
|
234
293
|
html`
|
|
@@ -247,6 +306,17 @@ class PopupCombinationSets extends localize(i18next)(LitElement) {
|
|
|
247
306
|
}
|
|
248
307
|
)
|
|
249
308
|
}
|
|
309
|
+
|
|
310
|
+
_showToast({ type, message }) {
|
|
311
|
+
document.dispatchEvent(
|
|
312
|
+
new CustomEvent('notify', {
|
|
313
|
+
detail: {
|
|
314
|
+
type,
|
|
315
|
+
message
|
|
316
|
+
}
|
|
317
|
+
})
|
|
318
|
+
)
|
|
319
|
+
}
|
|
250
320
|
}
|
|
251
321
|
|
|
252
322
|
window.customElements.define('popup-combination-sets', PopupCombinationSets)
|
|
@@ -7,7 +7,7 @@ import { css, html, LitElement } from 'lit-element'
|
|
|
7
7
|
import { MultiColumnFormStyles } from '@things-factory/form-ui'
|
|
8
8
|
import { i18next, localize } from '@things-factory/i18n-base'
|
|
9
9
|
import { openPopup } from '@things-factory/layout-base'
|
|
10
|
-
import { client } from '@things-factory/shell'
|
|
10
|
+
import { client, CustomAlert } from '@things-factory/shell'
|
|
11
11
|
import { isMobileDevice } from '@things-factory/utils'
|
|
12
12
|
|
|
13
13
|
class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
@@ -20,8 +20,11 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
20
20
|
actualQty: Number,
|
|
21
21
|
incompleteLocationName: Boolean,
|
|
22
22
|
locations: Array,
|
|
23
|
+
_selectedInventory: Object,
|
|
23
24
|
reverseKittingInventoriesConfig: Object,
|
|
24
|
-
_reverseKittingInventories: Array
|
|
25
|
+
_reverseKittingInventories: Array,
|
|
26
|
+
_palletId: String,
|
|
27
|
+
_locationCode: String
|
|
25
28
|
}
|
|
26
29
|
}
|
|
27
30
|
|
|
@@ -62,11 +65,8 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
62
65
|
color: var(--grist-title-icon-color);
|
|
63
66
|
}
|
|
64
67
|
.button-container {
|
|
65
|
-
padding:
|
|
66
|
-
|
|
67
|
-
text-align: var(--button-container-align);
|
|
68
|
-
background-color: var(--button-container-background);
|
|
69
|
-
height: var(--button-container-height);
|
|
68
|
+
padding: 10px 0 12px 0;
|
|
69
|
+
text-align: center;
|
|
70
70
|
}
|
|
71
71
|
`
|
|
72
72
|
]
|
|
@@ -99,13 +99,23 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
99
99
|
<legend>${this.productSku} [ ${this.actualQty} / ${this.qty} ]</legend>
|
|
100
100
|
|
|
101
101
|
<label>${i18next.t('label.lot_id')}</label>
|
|
102
|
-
<barcode-scanable-input
|
|
102
|
+
<barcode-scanable-input
|
|
103
|
+
name="palletId"
|
|
104
|
+
value="${this._palletId}"
|
|
105
|
+
without-enter
|
|
106
|
+
custom-input
|
|
107
|
+
></barcode-scanable-input>
|
|
103
108
|
|
|
104
109
|
<label>${i18next.t('label.qty')}</label>
|
|
105
|
-
<input name="qty" type="number" min="1" />
|
|
110
|
+
<input name="qty" type="number" value="" min="1" />
|
|
106
111
|
|
|
107
112
|
<label>${i18next.t('label.location')}</label>
|
|
108
|
-
<barcode-scanable-input
|
|
113
|
+
<barcode-scanable-input
|
|
114
|
+
name="locationCode"
|
|
115
|
+
value="${this._locationCode}"
|
|
116
|
+
without-enter
|
|
117
|
+
custom-input
|
|
118
|
+
></barcode-scanable-input>
|
|
109
119
|
</fieldset>
|
|
110
120
|
</form>
|
|
111
121
|
|
|
@@ -118,12 +128,21 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
118
128
|
.config=${this.reverseKittingInventoriesConfig}
|
|
119
129
|
.data=${this._reverseKittingInventories}
|
|
120
130
|
></data-grist>
|
|
121
|
-
</div
|
|
131
|
+
</div>
|
|
132
|
+
<div class="button-container">
|
|
133
|
+
<mwc-button
|
|
134
|
+
raised
|
|
135
|
+
@click=${this._undoInventory.bind(this)}
|
|
136
|
+
label="${i18next.t('button.undo')}"
|
|
137
|
+
></mwc-button>
|
|
138
|
+
</div> `
|
|
122
139
|
: ''}
|
|
123
140
|
`
|
|
124
141
|
}
|
|
125
142
|
|
|
126
143
|
async firstUpdated() {
|
|
144
|
+
this._palletId = ''
|
|
145
|
+
this._locationCode = ''
|
|
127
146
|
this.productSku = this.data.productSku
|
|
128
147
|
this.qty = this.data.qty
|
|
129
148
|
this.actualQty = this.data.actualQty
|
|
@@ -133,7 +152,10 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
133
152
|
appendable: false,
|
|
134
153
|
handlers: {
|
|
135
154
|
click: (columns, data, column, record, rowIndex) => {
|
|
136
|
-
|
|
155
|
+
this._selectedInventory = record
|
|
156
|
+
this._palletId = record.palletId
|
|
157
|
+
this._locationCode = record.locationCode
|
|
158
|
+
this._fillUpForm(this.inputForm, record)
|
|
137
159
|
}
|
|
138
160
|
}
|
|
139
161
|
},
|
|
@@ -202,8 +224,11 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
202
224
|
async _fetchInventories() {
|
|
203
225
|
const response = await client.query({
|
|
204
226
|
query: gql`
|
|
205
|
-
query reverseKittingInventories($orderReverseKittingName: String
|
|
206
|
-
reverseKittingInventories(
|
|
227
|
+
query reverseKittingInventories($orderReverseKittingName: String!, $productDetailId: String) {
|
|
228
|
+
reverseKittingInventories(
|
|
229
|
+
orderReverseKittingName: $orderReverseKittingName
|
|
230
|
+
productDetailId: $productDetailId
|
|
231
|
+
) {
|
|
207
232
|
batchId
|
|
208
233
|
packingType
|
|
209
234
|
bizplace {
|
|
@@ -218,6 +243,11 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
218
243
|
qty
|
|
219
244
|
expirationDate
|
|
220
245
|
status
|
|
246
|
+
location {
|
|
247
|
+
id
|
|
248
|
+
name
|
|
249
|
+
description
|
|
250
|
+
}
|
|
221
251
|
product {
|
|
222
252
|
id
|
|
223
253
|
name
|
|
@@ -227,7 +257,7 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
227
257
|
}
|
|
228
258
|
}
|
|
229
259
|
`,
|
|
230
|
-
variables: { orderReverseKittingName: this.orderReverseKittingName }
|
|
260
|
+
variables: { orderReverseKittingName: this.orderReverseKittingName, productDetailId: this.data.productDetailId }
|
|
231
261
|
})
|
|
232
262
|
|
|
233
263
|
if (!response.errors) {
|
|
@@ -237,15 +267,24 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
237
267
|
return {
|
|
238
268
|
...reverseKittingInventory,
|
|
239
269
|
sku: reverseKittingInventory.product.sku,
|
|
240
|
-
packingTypeSize: `${reverseKittingInventory.packingType}(${reverseKittingInventory.packingSize})
|
|
270
|
+
packingTypeSize: `${reverseKittingInventory.packingType}(${reverseKittingInventory.packingSize})`,
|
|
271
|
+
locationCode: reverseKittingInventory.location.name
|
|
241
272
|
}
|
|
242
273
|
}) || []
|
|
243
274
|
}
|
|
275
|
+
|
|
276
|
+
let totalActualQty = 0
|
|
277
|
+
response.data.reverseKittingInventories.forEach(inventory => {
|
|
278
|
+
totalActualQty += inventory.qty
|
|
279
|
+
})
|
|
280
|
+
|
|
281
|
+
this.actualQty = totalActualQty
|
|
244
282
|
}
|
|
245
283
|
}
|
|
246
284
|
|
|
247
285
|
async _executeReverseKitting(e) {
|
|
248
286
|
if (e.keyCode === 13) {
|
|
287
|
+
e.preventDefault()
|
|
249
288
|
try {
|
|
250
289
|
await this._validateReverseKitting()
|
|
251
290
|
if (!this.incompleteLocationName) {
|
|
@@ -266,8 +305,8 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
266
305
|
}
|
|
267
306
|
})
|
|
268
307
|
if (!response.errors) {
|
|
269
|
-
this.
|
|
270
|
-
|
|
308
|
+
this._clearView()
|
|
309
|
+
await this._fetchInventories()
|
|
271
310
|
}
|
|
272
311
|
} else {
|
|
273
312
|
this._openSelectLocationPopup()
|
|
@@ -278,6 +317,41 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
278
317
|
}
|
|
279
318
|
}
|
|
280
319
|
|
|
320
|
+
async _undoInventory() {
|
|
321
|
+
try {
|
|
322
|
+
this._validateSelectedInventory()
|
|
323
|
+
const result = await CustomAlert({
|
|
324
|
+
title: i18next.t('title.are_you_sure'),
|
|
325
|
+
text: i18next.t('text.undo_x', { state: { x: this._palletId } }),
|
|
326
|
+
confirmButton: { text: i18next.t('button.confirm') },
|
|
327
|
+
cancelButton: { text: i18next.t('button.cancel') }
|
|
328
|
+
})
|
|
329
|
+
|
|
330
|
+
if (!result.value) {
|
|
331
|
+
return
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
let response = await client.mutate({
|
|
335
|
+
mutation: gql`
|
|
336
|
+
mutation undoReverseKittingInventory($orderReverseKittingName: String!, $palletId: String!) {
|
|
337
|
+
undoReverseKittingInventory(orderReverseKittingName: $orderReverseKittingName, palletId: $palletId)
|
|
338
|
+
}
|
|
339
|
+
`,
|
|
340
|
+
variables: {
|
|
341
|
+
orderReverseKittingName: this.orderReverseKittingName,
|
|
342
|
+
palletId: this._palletId.trim()
|
|
343
|
+
}
|
|
344
|
+
})
|
|
345
|
+
|
|
346
|
+
if (!response.errors) {
|
|
347
|
+
this._clearView()
|
|
348
|
+
await this._fetchInventories()
|
|
349
|
+
}
|
|
350
|
+
} catch (e) {
|
|
351
|
+
this._showToast(e)
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
281
355
|
_fillUpForm(form, data) {
|
|
282
356
|
for (let key in data) {
|
|
283
357
|
Array.from(form.querySelectorAll('input')).forEach(field => {
|
|
@@ -299,12 +373,25 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
299
373
|
}
|
|
300
374
|
}
|
|
301
375
|
|
|
376
|
+
_clearView() {
|
|
377
|
+
this.inputForm.reset()
|
|
378
|
+
this._palletId = ''
|
|
379
|
+
this._locationCode = ''
|
|
380
|
+
}
|
|
381
|
+
|
|
302
382
|
async _validateReverseKitting() {
|
|
303
383
|
if (!this.palletInput.value) {
|
|
304
384
|
this._focusOnPalletInput()
|
|
305
385
|
throw new Error(i18next.t('text.lot_id_is_empty'))
|
|
306
386
|
}
|
|
307
387
|
|
|
388
|
+
if (!this.qtyInput.value) {
|
|
389
|
+
this._focusOnQtyInput()
|
|
390
|
+
throw new Error(i18next.t('text.qty_is_empty'))
|
|
391
|
+
} else {
|
|
392
|
+
if (!this.qtyInput.checkValidity()) throw new Error(i18next.t('text.qty_invalid'))
|
|
393
|
+
}
|
|
394
|
+
|
|
308
395
|
// 4. location code existing
|
|
309
396
|
if (!this.locationInput.value) {
|
|
310
397
|
this._focusOnLocationInput()
|
|
@@ -327,6 +414,10 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
327
414
|
}
|
|
328
415
|
}
|
|
329
416
|
|
|
417
|
+
_validateSelectedInventory() {
|
|
418
|
+
if (!this._selectedInventory) throw new Error(i18next.t('text.target_does_not_selected'))
|
|
419
|
+
}
|
|
420
|
+
|
|
330
421
|
async _fetchLocations(zone, row, column) {
|
|
331
422
|
const filters = [
|
|
332
423
|
{
|
|
@@ -420,6 +511,10 @@ class PopupReverseKittingTemplate extends localize(i18next)(LitElement) {
|
|
|
420
511
|
setTimeout(() => this.palletInput.focus(), 100)
|
|
421
512
|
}
|
|
422
513
|
|
|
514
|
+
_focusOnQtyInput() {
|
|
515
|
+
setTimeout(() => this.qtyInput.focus(), 100)
|
|
516
|
+
}
|
|
517
|
+
|
|
423
518
|
_focusOnLocationInput() {
|
|
424
519
|
setTimeout(() => this.locationInput.focus(), 100)
|
|
425
520
|
}
|
package/client/route.js
CHANGED
|
@@ -212,6 +212,18 @@ export default function route(page) {
|
|
|
212
212
|
import('./pages/order/release-order/bulk-print-packing-list')
|
|
213
213
|
return page
|
|
214
214
|
|
|
215
|
+
case 'create_loading_manifest':
|
|
216
|
+
import('./pages/manifest/create-loading-manifest')
|
|
217
|
+
return page
|
|
218
|
+
|
|
219
|
+
case 'loading_manifest_list':
|
|
220
|
+
import('./pages/manifest/loading-manifest-list')
|
|
221
|
+
return page
|
|
222
|
+
|
|
223
|
+
case 'loading_manifest_detail':
|
|
224
|
+
import('./pages/manifest/loading-manifest-detail')
|
|
225
|
+
return page
|
|
226
|
+
|
|
215
227
|
/**
|
|
216
228
|
* GRN Menus Section
|
|
217
229
|
*/
|
|
@@ -452,6 +464,10 @@ export default function route(page) {
|
|
|
452
464
|
import('./pages/report/outbound-order-details-report')
|
|
453
465
|
return page
|
|
454
466
|
|
|
467
|
+
case 'product_label_report':
|
|
468
|
+
import('./pages/report/product-label-report')
|
|
469
|
+
return page
|
|
470
|
+
|
|
455
471
|
/**
|
|
456
472
|
* Custom ELCCL Menus Section
|
|
457
473
|
*/
|
|
@@ -479,6 +495,13 @@ export default function route(page) {
|
|
|
479
495
|
import('./pages/report/custom-elccl/elccl-delivery-order-summary')
|
|
480
496
|
return page
|
|
481
497
|
|
|
498
|
+
/**
|
|
499
|
+
* Support
|
|
500
|
+
*/
|
|
501
|
+
case 'inventory_comparison':
|
|
502
|
+
import('./pages/support/inventory-comparison')
|
|
503
|
+
return page
|
|
504
|
+
|
|
482
505
|
/** Custom VAS */
|
|
483
506
|
case 'reverse_kitting_orders':
|
|
484
507
|
import('./pages/order/reverse-kitting-order/reverse-kitting-order-list')
|
package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js
CHANGED
|
@@ -1,66 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.elcclInventoryHistorySummaryReport = void 0;
|
|
3
|
+
exports.inventoryHistorySummaryReportQuery = exports.elcclInventoryHistorySummaryReport = void 0;
|
|
4
4
|
const typeorm_1 = require("typeorm");
|
|
5
5
|
const biz_base_1 = require("@things-factory/biz-base");
|
|
6
6
|
exports.elcclInventoryHistorySummaryReport = {
|
|
7
7
|
async elcclInventoryHistorySummaryReport(_, params, context) {
|
|
8
8
|
try {
|
|
9
9
|
const { tx } = context.state;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
let fromDate = params.filters.find(data => data.name === 'fromDate');
|
|
13
|
-
let toDate = params.filters.find(data => data.name === 'toDate');
|
|
14
|
-
if (!bizplaceFilter || !fromDate || !toDate)
|
|
15
|
-
throw 'Invalid input';
|
|
16
|
-
const bizplace = await (0, typeorm_1.getRepository)(biz_base_1.Bizplace).findOne({
|
|
17
|
-
id: bizplaceFilter.value
|
|
18
|
-
});
|
|
19
|
-
let balanceOnlyQuery = '';
|
|
20
|
-
if (balanceOnlyFilter && balanceOnlyFilter.value) {
|
|
21
|
-
balanceOnlyQuery = 'and (opening_qty + adjustment_qty + total_in_qty + total_out_qty + total_return_qty) > 0 ';
|
|
22
|
-
}
|
|
23
|
-
await tx.query(`
|
|
24
|
-
create temp table temp_inv_history on commit drop as (
|
|
25
|
-
select i2.pallet_id, ih.product_id::uuid, ih.packing_type, ih.batch_id,
|
|
26
|
-
ih.id as inventory_history_id, ih.seq, ih.status, ih.transaction_type, ih.qty, ih.opening_qty, ih.weight, ih.opening_weight, ih.created_at,
|
|
27
|
-
ih.ref_order_id::uuid as ref_order_id
|
|
28
|
-
from inventories i2
|
|
29
|
-
inner join reduced_inventory_histories ih on ih.pallet_id = i2.pallet_id and ih.domain_id = i2.domain_id
|
|
30
|
-
where
|
|
31
|
-
i2.domain_id = $1
|
|
32
|
-
and i2.bizplace_id = $2
|
|
33
|
-
and ih.created_at <= $3
|
|
34
|
-
)
|
|
35
|
-
`, [context.state.domain.id, bizplace.id, toDate.value]);
|
|
36
|
-
await tx.query(`
|
|
37
|
-
create temp table temp_elccl_inventory_summary on commit drop as (
|
|
38
|
-
select src.*,
|
|
39
|
-
opening_qty + adjustment_qty + total_in_qty + total_out_qty + total_return_qty as closing_qty,
|
|
40
|
-
prd.name as product_name, prd.sku as product_sku, prd.description as product_description
|
|
41
|
-
from (
|
|
42
|
-
select ih.batch_id, ih.packing_type,
|
|
43
|
-
min(ih.created_at) as initial_date,
|
|
44
|
-
sum(case when (ih.transaction_type = 'UNLOADING' or ih.transaction_type = 'NEW') and rtn.id is null then qty else 0 end) as initial_qty,
|
|
45
|
-
sum(case when ih.created_at > $1 and ih.transaction_type = 'ADJUSTMENT' then ih.qty else 0 end) as adjustment_qty,
|
|
46
|
-
sum(case when ih.created_at < $1 then ih.qty else 0 end) as opening_qty,
|
|
47
|
-
sum(case when ih.created_at > $1 then case when ih.qty > 0 and ih.transaction_type <> 'ADJUSTMENT' and ih.transaction_type <> 'RETURN' and rtn.id is null then ih.qty else 0 end else 0 end) as total_in_qty,
|
|
48
|
-
sum(case when ih.created_at > $1 then case when (ih.qty < 0 and ih.transaction_type <> 'ADJUSTMENT') or ih.transaction_type = 'RETURN' then ih.qty else 0 end else 0 end) as total_out_qty,
|
|
49
|
-
ih.product_id,
|
|
50
|
-
sum(case when rtn.id is not null and ih.transaction_type <> 'ADJUSTMENT' and ih.created_at > $1 then qty else 0 end) as total_return_qty
|
|
51
|
-
from temp_inv_history ih
|
|
52
|
-
left join return_orders rtn on rtn.id = ih.ref_order_id
|
|
53
|
-
group by ih.batch_id, ih.product_id, ih.packing_type
|
|
54
|
-
order by batch_id
|
|
55
|
-
) src
|
|
56
|
-
inner join products prd on prd.id = src.product_id
|
|
57
|
-
where (opening_qty > 0 or total_in_qty > 0 or adjustment_qty > 0)
|
|
58
|
-
${balanceOnlyQuery}
|
|
59
|
-
)
|
|
60
|
-
`, [fromDate.value]);
|
|
61
|
-
const total = await tx.query(`select count(*) from temp_elccl_inventory_summary`);
|
|
10
|
+
await inventoryHistorySummaryReportQuery(_, params, context);
|
|
11
|
+
const total = await tx.query(`select count(*) from temp_inventory_summary`);
|
|
62
12
|
const result = await tx.query(`
|
|
63
|
-
select * from
|
|
13
|
+
select * from temp_inventory_summary ORDER BY initial_date OFFSET $1 LIMIT $2
|
|
64
14
|
`, [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]);
|
|
65
15
|
let items = result.map(itm => {
|
|
66
16
|
return Object.assign(Object.assign({}, itm), { batchId: itm.batch_id, packingType: itm.packing_type, openingQty: itm.opening_qty, adjustmentQty: itm.adjustment_qty, closingQty: itm.closing_qty, totalInQty: itm.total_in_qty, totalOutQty: itm.total_out_qty, totalReturnQty: itm.total_return_qty, initialQty: itm.initial_qty, initialDate: itm.initial_date, product: {
|
|
@@ -77,4 +27,64 @@ exports.elcclInventoryHistorySummaryReport = {
|
|
|
77
27
|
}
|
|
78
28
|
}
|
|
79
29
|
};
|
|
30
|
+
async function inventoryHistorySummaryReportQuery(_, params, context) {
|
|
31
|
+
try {
|
|
32
|
+
const { tx } = context.state;
|
|
33
|
+
let balanceOnlyFilter = params.filters.find(data => data.name === 'balanceOnly');
|
|
34
|
+
let bizplaceFilter = params.filters.find(data => data.name === 'bizplace');
|
|
35
|
+
let fromDate = params.filters.find(data => data.name === 'fromDate');
|
|
36
|
+
let toDate = params.filters.find(data => data.name === 'toDate');
|
|
37
|
+
if (!bizplaceFilter || !fromDate || !toDate)
|
|
38
|
+
throw 'Invalid input';
|
|
39
|
+
const bizplace = await (0, typeorm_1.getRepository)(biz_base_1.Bizplace).findOne({
|
|
40
|
+
id: bizplaceFilter.value
|
|
41
|
+
});
|
|
42
|
+
let balanceOnlyQuery = '';
|
|
43
|
+
if (balanceOnlyFilter && balanceOnlyFilter.value) {
|
|
44
|
+
balanceOnlyQuery = 'and (opening_qty + adjustment_qty + total_in_qty + total_out_qty + total_return_qty) > 0 ';
|
|
45
|
+
}
|
|
46
|
+
await tx.query(`
|
|
47
|
+
create temp table temp_inv_history on commit drop as (
|
|
48
|
+
select i2.pallet_id, ih.product_id::uuid, ih.packing_type, ih.batch_id,
|
|
49
|
+
ih.id as inventory_history_id, ih.seq, ih.status, ih.transaction_type, ih.qty, ih.opening_qty, ih.weight, ih.opening_weight, ih.created_at,
|
|
50
|
+
ih.ref_order_id::uuid as ref_order_id
|
|
51
|
+
from inventories i2
|
|
52
|
+
inner join reduced_inventory_histories ih on ih.pallet_id = i2.pallet_id and ih.domain_id = i2.domain_id
|
|
53
|
+
where
|
|
54
|
+
i2.domain_id = $1
|
|
55
|
+
and i2.bizplace_id = $2
|
|
56
|
+
and ih.created_at <= $3
|
|
57
|
+
)
|
|
58
|
+
`, [context.state.domain.id, bizplace.id, toDate.value]);
|
|
59
|
+
await tx.query(`
|
|
60
|
+
create temp table temp_inventory_summary on commit drop as (
|
|
61
|
+
select src.*,
|
|
62
|
+
opening_qty + adjustment_qty + total_in_qty + total_out_qty + total_return_qty as closing_qty,
|
|
63
|
+
prd.name as product_name, prd.sku as product_sku, prd.description as product_description
|
|
64
|
+
from (
|
|
65
|
+
select ih.batch_id, ih.packing_type,
|
|
66
|
+
min(ih.created_at) as initial_date,
|
|
67
|
+
sum(case when (ih.transaction_type = 'UNLOADING' or ih.transaction_type = 'NEW') and rtn.id is null then qty else 0 end) as initial_qty,
|
|
68
|
+
sum(case when ih.created_at > $1 and ih.transaction_type = 'ADJUSTMENT' then ih.qty else 0 end) as adjustment_qty,
|
|
69
|
+
sum(case when ih.created_at < $1 then ih.qty else 0 end) as opening_qty,
|
|
70
|
+
sum(case when ih.created_at > $1 then case when ih.qty > 0 and ih.transaction_type <> 'ADJUSTMENT' and ih.transaction_type <> 'RETURN' and rtn.id is null then ih.qty else 0 end else 0 end) as total_in_qty,
|
|
71
|
+
sum(case when ih.created_at > $1 then case when (ih.qty < 0 and ih.transaction_type <> 'ADJUSTMENT') or ih.transaction_type = 'RETURN' then ih.qty else 0 end else 0 end) as total_out_qty,
|
|
72
|
+
ih.product_id,
|
|
73
|
+
sum(case when rtn.id is not null and ih.transaction_type <> 'ADJUSTMENT' and ih.created_at > $1 then qty else 0 end) as total_return_qty
|
|
74
|
+
from temp_inv_history ih
|
|
75
|
+
left join return_orders rtn on rtn.id = ih.ref_order_id
|
|
76
|
+
group by ih.batch_id, ih.product_id, ih.packing_type
|
|
77
|
+
order by batch_id
|
|
78
|
+
) src
|
|
79
|
+
inner join products prd on prd.id = src.product_id
|
|
80
|
+
where (opening_qty > 0 or total_in_qty > 0 or adjustment_qty > 0)
|
|
81
|
+
${balanceOnlyQuery}
|
|
82
|
+
)
|
|
83
|
+
`, [fromDate.value]);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.inventoryHistorySummaryReportQuery = inventoryHistorySummaryReportQuery;
|
|
80
90
|
//# sourceMappingURL=elccl-inventory-history-summary-report.js.map
|
package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"elccl-inventory-history-summary-report.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts"],"names":[],"mappings":";;;AAAA,qCAAsD;AAEtD,uDAAmD;AAGtC,QAAA,kCAAkC,GAAG;IAChD,KAAK,CAAC,kCAAkC,CAAC,CAAM,EAAE,MAAiB,EAAE,OAAY;QAC9E,IAAI;YACF,MAAM,EAAE,EAAE,EAAE,GAA0B,OAAO,CAAC,KAAK,CAAA;YAEnD,
|
|
1
|
+
{"version":3,"file":"elccl-inventory-history-summary-report.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts"],"names":[],"mappings":"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"}
|