@things-factory/worksheet-base 4.0.24 → 4.0.28
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/dist-server/controllers/ecommerce/ecommerce-controller.js +10 -3
- package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
- package/dist-server/controllers/ecommerce/sellercraft-controller.js +5 -3
- package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
- package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js +24 -4
- package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js +98 -140
- package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/packing-worksheet-controller.js +2 -6
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +4 -4
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/render-grn.js +7 -2
- package/dist-server/controllers/render-grn.js.map +1 -1
- package/dist-server/controllers/render-manual-do.js +4 -3
- package/dist-server/controllers/render-manual-do.js.map +1 -1
- package/dist-server/controllers/render-orientage-do.js +3 -3
- package/dist-server/controllers/render-orientage-do.js.map +1 -1
- package/dist-server/controllers/render-orientage-grn.js +4 -4
- package/dist-server/controllers/render-orientage-grn.js.map +1 -1
- package/dist-server/controllers/render-ro-do.js +1 -0
- package/dist-server/controllers/render-ro-do.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +5 -5
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +14 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +8 -4
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +6 -4
- package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +4 -7
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +64 -54
- package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +1 -0
- package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js +5 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js +6 -2
- package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/return-worksheet.js +3 -1
- package/dist-server/graphql/resolvers/worksheet/return-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +2 -1
- package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/index.js +4 -5
- package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +4 -2
- package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet.js +28 -1
- package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +7 -8
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
- package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
- package/package.json +16 -16
- package/server/controllers/ecommerce/ecommerce-controller.ts +18 -4
- package/server/controllers/ecommerce/sellercraft-controller.ts +11 -5
- package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +28 -6
- package/server/controllers/inbound/unloading-worksheet-controller.ts +130 -152
- package/server/controllers/outbound/packing-worksheet-controller.ts +2 -7
- package/server/controllers/outbound/picking-worksheet-controller.ts +4 -4
- package/server/controllers/render-grn.ts +7 -2
- package/server/controllers/render-manual-do.ts +7 -4
- package/server/controllers/render-orientage-do.ts +7 -5
- package/server/controllers/render-orientage-grn.ts +9 -7
- package/server/controllers/render-ro-do.ts +1 -0
- package/server/controllers/worksheet-controller.ts +5 -5
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +22 -0
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +3 -1
- package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +2 -0
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +9 -5
- package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +7 -4
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +4 -8
- package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +67 -56
- package/server/graphql/resolvers/worksheet/picking-worksheet.ts +1 -0
- package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +9 -3
- package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +9 -3
- package/server/graphql/resolvers/worksheet/return-worksheet.ts +7 -3
- package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +5 -2
- package/server/graphql/resolvers/worksheet/unloading/index.ts +3 -5
- package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +9 -6
- package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +7 -3
- package/server/graphql/resolvers/worksheet/worksheet.ts +29 -1
- package/server/graphql/types/worksheet/index.ts +8 -9
- package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.js +0 -15
- package/dist-server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.js.map +0 -1
- package/server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.ts +0 -23
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/worksheet-base",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.28",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -24,20 +24,20 @@
|
|
|
24
24
|
"migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@things-factory/auth-base": "^4.0.
|
|
28
|
-
"@things-factory/biz-base": "^4.0.
|
|
29
|
-
"@things-factory/document-template-base": "^4.0.
|
|
30
|
-
"@things-factory/id-rule-base": "^4.0.
|
|
31
|
-
"@things-factory/integration-lmd": "^4.0.
|
|
32
|
-
"@things-factory/integration-marketplace": "^4.0.
|
|
33
|
-
"@things-factory/integration-sellercraft": "^4.0.
|
|
34
|
-
"@things-factory/marketplace-base": "^4.0.
|
|
35
|
-
"@things-factory/notification": "^4.0.
|
|
36
|
-
"@things-factory/sales-base": "^4.0.
|
|
37
|
-
"@things-factory/setting-base": "^4.0.
|
|
38
|
-
"@things-factory/shell": "^4.0.
|
|
39
|
-
"@things-factory/transport-base": "^4.0.
|
|
40
|
-
"@things-factory/warehouse-base": "^4.0.
|
|
27
|
+
"@things-factory/auth-base": "^4.0.28",
|
|
28
|
+
"@things-factory/biz-base": "^4.0.28",
|
|
29
|
+
"@things-factory/document-template-base": "^4.0.28",
|
|
30
|
+
"@things-factory/id-rule-base": "^4.0.28",
|
|
31
|
+
"@things-factory/integration-lmd": "^4.0.28",
|
|
32
|
+
"@things-factory/integration-marketplace": "^4.0.28",
|
|
33
|
+
"@things-factory/integration-sellercraft": "^4.0.28",
|
|
34
|
+
"@things-factory/marketplace-base": "^4.0.28",
|
|
35
|
+
"@things-factory/notification": "^4.0.28",
|
|
36
|
+
"@things-factory/sales-base": "^4.0.28",
|
|
37
|
+
"@things-factory/setting-base": "^4.0.28",
|
|
38
|
+
"@things-factory/shell": "^4.0.28",
|
|
39
|
+
"@things-factory/transport-base": "^4.0.28",
|
|
40
|
+
"@things-factory/warehouse-base": "^4.0.28"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "fc526e27ae290a6fa3f001ce7ee75a2904b1d363"
|
|
43
43
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Equal, Not } from 'typeorm'
|
|
2
|
+
|
|
1
3
|
import { MarketplaceSetting, MarketplaceStore, StoreAPI } from '@things-factory/integration-marketplace'
|
|
2
4
|
import {
|
|
3
5
|
MarketplaceOrder,
|
|
@@ -6,7 +8,7 @@ import {
|
|
|
6
8
|
} from '@things-factory/marketplace-base'
|
|
7
9
|
import { ReleaseGood } from '@things-factory/sales-base'
|
|
8
10
|
import { Domain } from '@things-factory/shell'
|
|
9
|
-
import { getProductBundleInventory, Inventory } from '@things-factory/warehouse-base'
|
|
11
|
+
import { getProductBundleInventory, Inventory, INVENTORY_STATUS, LOCATION_TYPE } from '@things-factory/warehouse-base'
|
|
10
12
|
|
|
11
13
|
import { WorksheetController } from '../worksheet-controller'
|
|
12
14
|
|
|
@@ -19,10 +21,20 @@ export class EcommerceController extends WorksheetController {
|
|
|
19
21
|
let inventoryProducts: any[] = await Promise.all(
|
|
20
22
|
orderProducts.map(async orderProduct => {
|
|
21
23
|
const product = orderProduct.product
|
|
22
|
-
|
|
23
|
-
where: {
|
|
24
|
+
let inventories: Inventory[] = await this.trxMgr.getRepository(Inventory).find({
|
|
25
|
+
where: {
|
|
26
|
+
domain: this.domain,
|
|
27
|
+
product: orderProduct.product,
|
|
28
|
+
status: Not(Equal(INVENTORY_STATUS.TERMINATED))
|
|
29
|
+
},
|
|
30
|
+
relations: ['location']
|
|
24
31
|
})
|
|
25
32
|
|
|
33
|
+
inventories = inventories.filter(
|
|
34
|
+
inventory =>
|
|
35
|
+
inventory?.location.type !== LOCATION_TYPE.QUARANTINE || inventory?.location.type !== LOCATION_TYPE.RESERVE
|
|
36
|
+
)
|
|
37
|
+
|
|
26
38
|
const inventoryQty: number = inventories.reduce((total, currentValue) => {
|
|
27
39
|
total += currentValue.qty
|
|
28
40
|
return total
|
|
@@ -74,7 +86,9 @@ export class EcommerceController extends WorksheetController {
|
|
|
74
86
|
}
|
|
75
87
|
|
|
76
88
|
let productVariationLocationId = marketplaceProductVariation?.locationId
|
|
77
|
-
let adjustQty: number = Math.floor(
|
|
89
|
+
let adjustQty: number = Math.floor(
|
|
90
|
+
(inventoryProduct.qty - marketplaceProductVariation.reserveQty) * (percentageValue / 100)
|
|
91
|
+
)
|
|
78
92
|
|
|
79
93
|
if (marketplaceStore.platform === 'shopify') {
|
|
80
94
|
let locationIds: any[] = JSON.parse(productVariationLocationId)
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
ReleaseGood,
|
|
11
11
|
ReturnOrder
|
|
12
12
|
} from '@things-factory/sales-base'
|
|
13
|
-
import { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'
|
|
13
|
+
import { Inventory, INVENTORY_STATUS, LOCATION_TYPE } from '@things-factory/warehouse-base'
|
|
14
14
|
|
|
15
15
|
import { WorksheetController } from '../worksheet-controller'
|
|
16
16
|
|
|
@@ -113,10 +113,16 @@ export class SellercraftController extends WorksheetController {
|
|
|
113
113
|
async updateSellercraftStock(sellercraft: Sellercraft, inventory: Inventory): Promise<void> {
|
|
114
114
|
let product: Product = inventory.product
|
|
115
115
|
const productDetails: ProductDetail[] = product.productDetails
|
|
116
|
-
|
|
117
|
-
where: { domain: this.domain, product, status: Not(Equal(INVENTORY_STATUS.TERMINATED)) }
|
|
116
|
+
let inventories: Inventory[] = await this.trxMgr.getRepository(Inventory).find({
|
|
117
|
+
where: { domain: this.domain, product, status: Not(Equal(INVENTORY_STATUS.TERMINATED)) },
|
|
118
|
+
relations: ['location']
|
|
118
119
|
})
|
|
119
120
|
|
|
121
|
+
inventories = inventories.filter(
|
|
122
|
+
inventory =>
|
|
123
|
+
inventory?.location.type !== LOCATION_TYPE.QUARANTINE || inventory?.location.type !== LOCATION_TYPE.RESERVE
|
|
124
|
+
)
|
|
125
|
+
|
|
120
126
|
let defaultProductDetail: ProductDetail
|
|
121
127
|
const sellercraftInvs: any[] = await Promise.all(
|
|
122
128
|
inventories.map(async (inventory: Inventory) => {
|
|
@@ -158,7 +164,7 @@ export class SellercraftController extends WorksheetController {
|
|
|
158
164
|
await SellercraftAPI.updateProduct(sellercraft, { sellercraftInv })
|
|
159
165
|
}
|
|
160
166
|
|
|
161
|
-
async initiateOrderShipment(sellercraft: Sellercraft, releaseGood: ReleaseGood): Promise<
|
|
167
|
+
async initiateOrderShipment(sellercraft: Sellercraft, releaseGood: ReleaseGood): Promise<ReleaseGood> {
|
|
162
168
|
const orderInformation: any = {
|
|
163
169
|
accountId: sellercraft.accountId,
|
|
164
170
|
orderId: releaseGood.refNo2,
|
|
@@ -179,7 +185,7 @@ export class SellercraftController extends WorksheetController {
|
|
|
179
185
|
}
|
|
180
186
|
if (dropoffAddress) releaseGood.dropoffAddress = dropoffAddress
|
|
181
187
|
releaseGood.updater = this.user
|
|
182
|
-
await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)
|
|
188
|
+
return await this.trxMgr.getRepository(ReleaseGood).save(releaseGood)
|
|
183
189
|
}
|
|
184
190
|
|
|
185
191
|
async initiateOrderDocument(sellercraft: Sellercraft, releaseGood: ReleaseGood): Promise<void> {
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { Equal, In, Not } from 'typeorm'
|
|
2
|
+
|
|
1
3
|
import { Bizplace } from '@things-factory/biz-base'
|
|
2
4
|
import {
|
|
3
|
-
OrderInventory,
|
|
4
|
-
OrderNoGenerator,
|
|
5
5
|
ORDER_INVENTORY_STATUS,
|
|
6
6
|
ORDER_PRODUCT_STATUS,
|
|
7
7
|
ORDER_STATUS,
|
|
8
8
|
ORDER_TYPES,
|
|
9
|
+
OrderInventory,
|
|
10
|
+
OrderNoGenerator,
|
|
9
11
|
ReturnOrder
|
|
10
12
|
} from '@things-factory/sales-base'
|
|
11
13
|
import {
|
|
@@ -17,7 +19,7 @@ import {
|
|
|
17
19
|
Pallet,
|
|
18
20
|
Warehouse
|
|
19
21
|
} from '@things-factory/warehouse-base'
|
|
20
|
-
|
|
22
|
+
|
|
21
23
|
import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
|
|
22
24
|
import { Worksheet, WorksheetDetail } from '../../entities'
|
|
23
25
|
import { switchLocationStatus } from '../../utils'
|
|
@@ -207,7 +209,13 @@ export class PutawayReturningWorksheetController extends VasWorksheetController
|
|
|
207
209
|
where: {
|
|
208
210
|
domain: this.domain,
|
|
209
211
|
name: locationName,
|
|
210
|
-
type: In([
|
|
212
|
+
type: In([
|
|
213
|
+
LOCATION_TYPE.SHELF,
|
|
214
|
+
LOCATION_TYPE.BUFFER,
|
|
215
|
+
LOCATION_TYPE.FLOOR,
|
|
216
|
+
LOCATION_TYPE.QUARANTINE,
|
|
217
|
+
LOCATION_TYPE.RESERVED
|
|
218
|
+
])
|
|
211
219
|
},
|
|
212
220
|
relations: ['warehouse']
|
|
213
221
|
})
|
|
@@ -253,7 +261,14 @@ export class PutawayReturningWorksheetController extends VasWorksheetController
|
|
|
253
261
|
where: {
|
|
254
262
|
domain: this.domain,
|
|
255
263
|
name: locationName,
|
|
256
|
-
type: In([
|
|
264
|
+
type: In([
|
|
265
|
+
LOCATION_TYPE.SHELF,
|
|
266
|
+
LOCATION_TYPE.BUFFER,
|
|
267
|
+
LOCATION_TYPE.FLOOR,
|
|
268
|
+
LOCATION_TYPE.BIN,
|
|
269
|
+
LOCATION_TYPE.QUARANTINE,
|
|
270
|
+
LOCATION_TYPE.RESERVED
|
|
271
|
+
])
|
|
257
272
|
},
|
|
258
273
|
relations: ['warehouse']
|
|
259
274
|
})
|
|
@@ -298,7 +313,14 @@ export class PutawayReturningWorksheetController extends VasWorksheetController
|
|
|
298
313
|
where: {
|
|
299
314
|
domain: this.domain,
|
|
300
315
|
name: locationName,
|
|
301
|
-
type: In([
|
|
316
|
+
type: In([
|
|
317
|
+
LOCATION_TYPE.SHELF,
|
|
318
|
+
LOCATION_TYPE.FLOOR,
|
|
319
|
+
LOCATION_TYPE.BIN,
|
|
320
|
+
LOCATION_TYPE.BUFFER,
|
|
321
|
+
LOCATION_TYPE.QUARANTINE,
|
|
322
|
+
LOCATION_TYPE.RESERVED
|
|
323
|
+
])
|
|
302
324
|
},
|
|
303
325
|
relations: ['warehouse']
|
|
304
326
|
})
|
|
@@ -508,170 +508,148 @@ export class UnloadingWorksheetController extends VasWorksheetController {
|
|
|
508
508
|
)
|
|
509
509
|
}
|
|
510
510
|
|
|
511
|
-
async undoUnload(
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
])
|
|
519
|
-
this.checkRecordValidity(worksheetDetail, {
|
|
520
|
-
status: (status: string) => {
|
|
521
|
-
const availableStatus: string[] = [WORKSHEET_STATUS.EXECUTING, WORKSHEET_STATUS.PARTIALLY_UNLOADED]
|
|
522
|
-
if (availableStatus.indexOf(status) < 0) {
|
|
523
|
-
throw new Error(
|
|
524
|
-
this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('status', 'Executing or Partially Unloaded', status)
|
|
525
|
-
)
|
|
526
|
-
}
|
|
527
|
-
return true
|
|
528
|
-
}
|
|
529
|
-
})
|
|
530
|
-
|
|
531
|
-
const worksheet: Worksheet = worksheetDetail.worksheet
|
|
532
|
-
|
|
533
|
-
let arrivalNotice: ArrivalNotice
|
|
534
|
-
let returnOrder: ReturnOrder
|
|
535
|
-
if (worksheet?.arrivalNotice) arrivalNotice = worksheet.arrivalNotice
|
|
536
|
-
else if (worksheet?.returnOrder) returnOrder = worksheet.returnOrder
|
|
537
|
-
|
|
538
|
-
let inventory: Inventory = await this.trxMgr.getRepository(Inventory).findOne({
|
|
539
|
-
where: { domain: this.domain, status: INVENTORY_STATUS.UNLOADED, palletId },
|
|
540
|
-
relations: ['location']
|
|
541
|
-
})
|
|
542
|
-
|
|
543
|
-
const qty: number = inventory.qty
|
|
544
|
-
|
|
545
|
-
if (arrivalNotice) {
|
|
546
|
-
let targetProduct: OrderProduct = worksheetDetail.targetProduct
|
|
547
|
-
targetProduct.actualPackQty -= qty
|
|
548
|
-
targetProduct.actualPalletQty--
|
|
549
|
-
targetProduct.remark = null
|
|
550
|
-
targetProduct.issue = null
|
|
551
|
-
targetProduct.status = ORDER_PRODUCT_STATUS.UNLOADING
|
|
552
|
-
targetProduct.updater = this.user
|
|
553
|
-
await this.updateOrderTargets([targetProduct])
|
|
554
|
-
} else if (returnOrder) {
|
|
555
|
-
let targetInventory: OrderInventory = worksheetDetail.targetInventory
|
|
556
|
-
targetInventory.actualPackQty -= qty
|
|
557
|
-
targetInventory.actualPalletQty--
|
|
558
|
-
targetInventory.status = ORDER_PRODUCT_STATUS.UNLOADING
|
|
559
|
-
targetInventory.updater = this.user
|
|
560
|
-
await this.updateOrderTargets([targetInventory])
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
worksheetDetail.issue = null
|
|
564
|
-
worksheetDetail.status = WORKSHEET_STATUS.EXECUTING
|
|
565
|
-
worksheetDetail.updater = this.user
|
|
566
|
-
await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
|
|
567
|
-
|
|
568
|
-
inventory.lastSeq++
|
|
569
|
-
inventory.status = INVENTORY_STATUS.DELETED
|
|
570
|
-
inventory = await this.transactionInventory(
|
|
571
|
-
inventory,
|
|
572
|
-
Boolean(arrivalNotice) ? arrivalNotice : returnOrder,
|
|
573
|
-
-inventory.qty,
|
|
574
|
-
-inventory.uomValue,
|
|
575
|
-
INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING
|
|
576
|
-
)
|
|
577
|
-
inventory.qty = 0
|
|
578
|
-
inventory.uomValue = 0
|
|
579
|
-
inventory.updater = this.user
|
|
580
|
-
|
|
581
|
-
await this.trxMgr.getRepository(InventoryHistory).update({ inventory }, { inventory: null })
|
|
582
|
-
|
|
583
|
-
await this.trxMgr.getRepository(Inventory).delete({ id: inventory.id })
|
|
584
|
-
}
|
|
511
|
+
async undoUnload(orderType: string, orderNo: string, inventoryIds: [string]): Promise<void> {
|
|
512
|
+
for (var i = 0; i < inventoryIds.length; i++) {
|
|
513
|
+
const inventoryId: string = inventoryIds[i]
|
|
514
|
+
let inventory: Inventory = await this.trxMgr.getRepository(Inventory).findOne({
|
|
515
|
+
where: { domain: this.domain, id: inventoryId },
|
|
516
|
+
relations: ['location', 'product']
|
|
517
|
+
})
|
|
585
518
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
const availableStatus: string[] = [WORKSHEET_STATUS.EXECUTING, WORKSHEET_STATUS.PARTIALLY_UNLOADED]
|
|
600
|
-
if (availableStatus.indexOf(status) < 0) {
|
|
601
|
-
throw new Error(
|
|
602
|
-
this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE('status', 'Executing or Partially Unloaded', status)
|
|
603
|
-
)
|
|
519
|
+
this.checkRecordValidity(inventory, {
|
|
520
|
+
status: (status: string) => {
|
|
521
|
+
const availableStatus: string[] = [INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.CHECKED]
|
|
522
|
+
if (availableStatus.indexOf(status) < 0) {
|
|
523
|
+
throw new Error(
|
|
524
|
+
this.ERROR_MSG.VALIDITY.UNEXPECTED_FIELD_VALUE(
|
|
525
|
+
'status',
|
|
526
|
+
'Inventory current status unable to undo',
|
|
527
|
+
status
|
|
528
|
+
)
|
|
529
|
+
)
|
|
530
|
+
}
|
|
531
|
+
return true
|
|
604
532
|
}
|
|
605
|
-
|
|
606
|
-
}
|
|
607
|
-
})
|
|
533
|
+
})
|
|
608
534
|
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
535
|
+
const qty: number = inventory.qty
|
|
536
|
+
|
|
537
|
+
let targetProduct: OrderProduct
|
|
538
|
+
let targetInventory: OrderInventory
|
|
539
|
+
let arrivalNotice: ArrivalNotice
|
|
540
|
+
let returnOrder: ReturnOrder
|
|
541
|
+
let worksheetDetail: WorksheetDetail
|
|
542
|
+
|
|
543
|
+
if (orderType === ORDER_TYPES.ARRIVAL_NOTICE) {
|
|
544
|
+
arrivalNotice = await this.trxMgr.getRepository(ArrivalNotice).findOne({
|
|
545
|
+
where: { domain: this.domain, name: orderNo },
|
|
546
|
+
relations: ['orderProducts', 'orderProducts.product']
|
|
547
|
+
})
|
|
548
|
+
|
|
549
|
+
targetProduct = arrivalNotice.orderProducts.find(
|
|
550
|
+
op =>
|
|
551
|
+
op.batchId == inventory.batchId &&
|
|
552
|
+
op.packingType == inventory.packingType &&
|
|
553
|
+
op.product.id === inventory.product.id
|
|
554
|
+
)
|
|
618
555
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
556
|
+
if (inventory.status == INVENTORY_STATUS.UNLOADED) {
|
|
557
|
+
targetProduct.actualPackQty -= qty
|
|
558
|
+
targetProduct.actualPalletQty--
|
|
559
|
+
targetProduct.remark = null
|
|
560
|
+
targetProduct.issue = null
|
|
561
|
+
targetProduct.status = ORDER_PRODUCT_STATUS.UNLOADING
|
|
562
|
+
} else {
|
|
563
|
+
targetProduct.actualPackQty--
|
|
564
|
+
}
|
|
565
|
+
targetProduct.updater = this.user
|
|
566
|
+
await this.updateOrderTargets([targetProduct])
|
|
628
567
|
|
|
629
|
-
|
|
630
|
-
|
|
568
|
+
worksheetDetail = await this.trxMgr
|
|
569
|
+
.getRepository(WorksheetDetail)
|
|
570
|
+
.findOne({ where: { domain: this.domain, targetProduct } })
|
|
571
|
+
} else {
|
|
572
|
+
returnOrder = await this.trxMgr.getRepository(ReturnOrder).findOne({
|
|
573
|
+
where: { domain: this.domain, name: orderNo },
|
|
574
|
+
relations: ['orderInventories', 'orderInventories.inventory', 'orderInventories.product']
|
|
575
|
+
})
|
|
576
|
+
|
|
577
|
+
targetInventory = returnOrder.orderInventories.find(
|
|
578
|
+
oi =>
|
|
579
|
+
oi.batchId == inventory.batchId &&
|
|
580
|
+
oi.packingType == inventory.packingType &&
|
|
581
|
+
oi.product.id == inventory.product.id &&
|
|
582
|
+
oi.inventory.id == inventory.id
|
|
583
|
+
)
|
|
584
|
+
if (inventory.status == INVENTORY_STATUS.UNLOADED) {
|
|
585
|
+
targetInventory.actualPackQty -= qty
|
|
586
|
+
targetInventory.actualPalletQty--
|
|
587
|
+
targetInventory.status = ORDER_PRODUCT_STATUS.UNLOADING
|
|
588
|
+
} else {
|
|
589
|
+
targetInventory.actualPackQty--
|
|
590
|
+
}
|
|
591
|
+
targetInventory.updater = this.user
|
|
592
|
+
await this.updateOrderTargets([targetInventory])
|
|
631
593
|
|
|
632
|
-
|
|
633
|
-
|
|
594
|
+
worksheetDetail = await this.trxMgr
|
|
595
|
+
.getRepository(WorksheetDetail)
|
|
596
|
+
.findOne({ where: { domain: this.domain, targetInventory } })
|
|
597
|
+
}
|
|
634
598
|
|
|
635
|
-
|
|
636
|
-
|
|
599
|
+
if (inventory.status == INVENTORY_STATUS.CHECKED) {
|
|
600
|
+
inventory.qty--
|
|
601
|
+
inventory.uomValue =
|
|
602
|
+
Math.round(
|
|
603
|
+
inventory.qty *
|
|
604
|
+
(Boolean(orderType === ORDER_TYPES.ARRIVAL_NOTICE)
|
|
605
|
+
? targetProduct.uomValue
|
|
606
|
+
: targetInventory.returnUomValue) *
|
|
607
|
+
100
|
|
608
|
+
) / 100
|
|
609
|
+
inventory.updater = this.user
|
|
610
|
+
await this.trxMgr.getRepository(Inventory).save(inventory)
|
|
611
|
+
|
|
612
|
+
if (inventory == 0) {
|
|
613
|
+
inventory.lastSeq++
|
|
614
|
+
inventory.status = INVENTORY_STATUS.DELETED
|
|
615
|
+
inventory = await this.transactionInventory(
|
|
616
|
+
inventory,
|
|
617
|
+
Boolean(orderType === ORDER_TYPES.ARRIVAL_NOTICE) ? arrivalNotice : returnOrder,
|
|
618
|
+
-inventory.qty,
|
|
619
|
+
-inventory.uomValue,
|
|
620
|
+
INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING
|
|
621
|
+
)
|
|
622
|
+
inventory.qty = 0
|
|
623
|
+
inventory.uomValue = 0
|
|
624
|
+
inventory.updater = this.user
|
|
637
625
|
|
|
638
|
-
|
|
639
|
-
targetProduct.actualPackQty--
|
|
640
|
-
targetProduct.status = ORDER_PRODUCT_STATUS.UNLOADING
|
|
641
|
-
targetProduct.updater = this.user
|
|
642
|
-
} else if (returnOrder) {
|
|
643
|
-
targetInventory.actualPackQty--
|
|
644
|
-
targetInventory.status = ORDER_PRODUCT_STATUS.UNLOADING
|
|
645
|
-
targetInventory.updater = this.user
|
|
646
|
-
}
|
|
626
|
+
await this.trxMgr.getRepository(InventoryHistory).update({ inventory }, { inventory: null })
|
|
647
627
|
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
628
|
+
await this.trxMgr.getRepository(Inventory).delete({ id: inventory.id })
|
|
629
|
+
}
|
|
630
|
+
} else {
|
|
631
|
+
inventory.lastSeq++
|
|
632
|
+
inventory.status = INVENTORY_STATUS.DELETED
|
|
633
|
+
inventory = await this.transactionInventory(
|
|
634
|
+
inventory,
|
|
635
|
+
Boolean(orderType === ORDER_TYPES.ARRIVAL_NOTICE) ? arrivalNotice : returnOrder,
|
|
636
|
+
-inventory.qty,
|
|
637
|
+
-inventory.uomValue,
|
|
638
|
+
INVENTORY_TRANSACTION_TYPE.UNDO_UNLOADING
|
|
639
|
+
)
|
|
640
|
+
inventory.qty = 0
|
|
641
|
+
inventory.uomValue = 0
|
|
642
|
+
inventory.updater = this.user
|
|
654
643
|
|
|
655
|
-
|
|
656
|
-
worksheetDetail.status = WORKSHEET_STATUS.EXECUTING
|
|
657
|
-
worksheetDetail.updater = this.user
|
|
658
|
-
await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
|
|
644
|
+
await this.trxMgr.getRepository(InventoryHistory).update({ inventory }, { inventory: null })
|
|
659
645
|
|
|
660
|
-
|
|
661
|
-
if (arrivalNotice) {
|
|
662
|
-
targetProduct.actualPalletQty--
|
|
663
|
-
targetProduct.issue = null
|
|
664
|
-
targetProduct.remark = null
|
|
665
|
-
await this.updateOrderTargets([targetProduct])
|
|
666
|
-
} else if (returnOrder) {
|
|
667
|
-
targetInventory.actualPalletQty--
|
|
668
|
-
await this.updateOrderTargets([targetInventory])
|
|
646
|
+
await this.trxMgr.getRepository(Inventory).delete({ id: inventory.id })
|
|
669
647
|
}
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
await this.trxMgr.getRepository(
|
|
648
|
+
|
|
649
|
+
worksheetDetail.issue = inventory.qty == 0 && worksheetDetail?.issue ? null : worksheetDetail.issue
|
|
650
|
+
worksheetDetail.status = WORKSHEET_STATUS.EXECUTING
|
|
651
|
+
worksheetDetail.updater = this.user
|
|
652
|
+
await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetail)
|
|
675
653
|
}
|
|
676
654
|
}
|
|
677
655
|
|
|
@@ -12,12 +12,11 @@ export class PackingWorksheetController extends VasWorksheetController {
|
|
|
12
12
|
ReleaseGood,
|
|
13
13
|
{
|
|
14
14
|
domain: this.domain,
|
|
15
|
-
name: releaseGoodNo
|
|
16
|
-
status: ORDER_STATUS.READY_TO_PACK
|
|
15
|
+
name: releaseGoodNo
|
|
17
16
|
},
|
|
18
17
|
['orderInventories', 'orderInventories.inventory']
|
|
19
18
|
)
|
|
20
|
-
|
|
19
|
+
let orderInventories: OrderInventory[] = releaseGood.orderInventories
|
|
21
20
|
|
|
22
21
|
const existingPackingWorksheet: Worksheet = await this.trxMgr.getRepository(Worksheet).findOne({
|
|
23
22
|
where: { domain: this.domain, releaseGood, type: WORKSHEET_TYPE.PACKING, status: WORKSHEET_STATUS.DEACTIVATED }
|
|
@@ -40,10 +39,6 @@ export class PackingWorksheetController extends VasWorksheetController {
|
|
|
40
39
|
})
|
|
41
40
|
await this.updateOrderTargets(orderInventories)
|
|
42
41
|
|
|
43
|
-
releaseGood.status = ORDER_STATUS.READY_TO_PACK
|
|
44
|
-
releaseGood.updater = this.user
|
|
45
|
-
await this.updateRefOrder(releaseGood)
|
|
46
|
-
|
|
47
42
|
return worksheet
|
|
48
43
|
}
|
|
49
44
|
|
|
@@ -823,16 +823,16 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
823
823
|
status: ORDER_STATUS.PICKING
|
|
824
824
|
})
|
|
825
825
|
|
|
826
|
-
|
|
826
|
+
let worksheet: Worksheet = await this.findWorksheetByRefOrder(releaseGood, WORKSHEET_TYPE.PICKING, [
|
|
827
827
|
'worksheetDetails',
|
|
828
828
|
'worksheetDetails.targetInventory'
|
|
829
829
|
])
|
|
830
|
-
this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })
|
|
830
|
+
await this.checkRecordValidity(worksheet, { status: WORKSHEET_STATUS.EXECUTING })
|
|
831
831
|
|
|
832
832
|
let orderStatus: string
|
|
833
833
|
if (releaseGood?.packingOption) {
|
|
834
834
|
orderStatus = ORDER_STATUS.READY_TO_PACK
|
|
835
|
-
} else
|
|
835
|
+
} else {
|
|
836
836
|
orderStatus = ORDER_STATUS.LOADING
|
|
837
837
|
}
|
|
838
838
|
|
|
@@ -933,7 +933,7 @@ export class PickingWorksheetController extends VasWorksheetController {
|
|
|
933
933
|
name: 'enable-bin-picking'
|
|
934
934
|
}
|
|
935
935
|
})
|
|
936
|
-
if (binPickingSetting
|
|
936
|
+
if (binPickingSetting != undefined && binPickingSetting.value.toLowerCase() == 'true') {
|
|
937
937
|
if (binLocation) {
|
|
938
938
|
const foundBinLocation: Location = await this.trxMgr.getRepository(Location).findOne({
|
|
939
939
|
where: { domain: this.domain, name: binLocation, type: LOCATION_TYPE.BIN }
|
|
@@ -166,9 +166,12 @@ export async function renderGRN({ grnNo, timezoneOffSet }, context: any) {
|
|
|
166
166
|
gan_accepted_at: foundGAN.acceptedAt ? DateTimeConverter.datetime(foundGAN.acceptedAt, timezoneOffSet) : '',
|
|
167
167
|
unload_date: DateTimeConverter.date(foundWS.endedAt),
|
|
168
168
|
ref_no: ownRefNo ? `${foundGAN.name} / ${foundGAN.refNo}` : `${foundGAN.name}`,
|
|
169
|
+
ref_no1: foundGAN.refNo2 ? `${foundGAN.refNo2}` : '',
|
|
170
|
+
ref_no2: foundGAN.refNo3 ? `${foundGAN.refNo3}` : '',
|
|
169
171
|
received_date: DateTimeConverter.date(foundWS.endedAt),
|
|
170
172
|
truck_no: foundGAN.truckNo || '',
|
|
171
173
|
container_no: foundGAN.containerNo || '',
|
|
174
|
+
container_size: foundGAN.containerSize || '',
|
|
172
175
|
delivery_order_no: foundGAN.deliveryOrderNo ? foundGAN.deliveryOrderNo : '',
|
|
173
176
|
account_no: foundPartnerCP ? foundPartnerCP.accountNo : '',
|
|
174
177
|
unloaded_by: foundWS ? foundWS.updater.name : '',
|
|
@@ -198,8 +201,10 @@ export async function renderGRN({ grnNo, timezoneOffSet }, context: any) {
|
|
|
198
201
|
Math.round((unloadInvHistory.uomValue || item.uomValue * item.actualPackQty) * 100) / 100
|
|
199
202
|
}`,
|
|
200
203
|
product_uom: `${unloadInvHistory.uom || item.uom}`,
|
|
201
|
-
|
|
202
|
-
|
|
204
|
+
product_gross_weight: item.product.grossWeight || null,
|
|
205
|
+
unit_price: item.unitPrice || null,
|
|
206
|
+
expiry_date: unloadInvHistory.expiryDate || '',
|
|
207
|
+
reusable_pallet_id: unloadInvHistory.reusablePalletId || '',
|
|
203
208
|
remark: (item.remark ? item.remark : '') + (item.issue ? ' [Issue]: ' + item.issue : '')
|
|
204
209
|
}
|
|
205
210
|
})
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
import FormData from 'form-data'
|
|
2
|
+
import fetch from 'node-fetch'
|
|
3
|
+
import { getRepository } from 'typeorm'
|
|
4
|
+
|
|
1
5
|
import { Attachment, STORAGE } from '@things-factory/attachment-base'
|
|
2
6
|
import { Partner } from '@things-factory/auth-base'
|
|
3
7
|
import { Bizplace, ContactPoint } from '@things-factory/biz-base'
|
|
4
8
|
import { config } from '@things-factory/env'
|
|
9
|
+
import { Product } from '@things-factory/product-base'
|
|
5
10
|
import { DeliveryOrder, OrderInventory } from '@things-factory/sales-base'
|
|
6
11
|
import { Domain } from '@things-factory/shell'
|
|
7
|
-
|
|
8
|
-
import FormData from 'form-data'
|
|
9
|
-
import fetch from 'node-fetch'
|
|
10
|
-
import { getRepository } from 'typeorm'
|
|
12
|
+
|
|
11
13
|
import { TEMPLATE_TYPE } from '../constants'
|
|
12
14
|
|
|
13
15
|
const REPORT_API_URL = config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html')
|
|
@@ -107,6 +109,7 @@ export async function renderManualDO({ doNo }, context: any) {
|
|
|
107
109
|
product_batch: `${oi.batchId}`,
|
|
108
110
|
product_qty: `${oi.releaseQty}`,
|
|
109
111
|
product_weight: `${oi.releaseWeight}`,
|
|
112
|
+
product_gross_weight: product.grossWeight,
|
|
110
113
|
product_uom_value: `${oi.releaseUomValue}`,
|
|
111
114
|
product_uom: `${product.primaryUnit || ''}`,
|
|
112
115
|
remark: `${oi.remark}`,
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
import FormData from 'form-data'
|
|
2
|
+
import fetch from 'node-fetch'
|
|
3
|
+
import { Equal, getRepository, In } from 'typeorm'
|
|
4
|
+
|
|
1
5
|
import { Attachment, STORAGE } from '@things-factory/attachment-base'
|
|
2
6
|
import { Partner } from '@things-factory/auth-base'
|
|
3
7
|
import { Bizplace, ContactPoint } from '@things-factory/biz-base'
|
|
4
8
|
import { config } from '@things-factory/env'
|
|
5
|
-
import {
|
|
9
|
+
import { ProductDetail } from '@things-factory/product-base'
|
|
10
|
+
import { DeliveryOrder, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
|
|
6
11
|
import { Domain } from '@things-factory/shell'
|
|
7
|
-
import { Product, ProductDetail } from '@things-factory/product-base'
|
|
8
12
|
import { Inventory, Pallet } from '@things-factory/warehouse-base'
|
|
9
|
-
|
|
10
|
-
import fetch from 'node-fetch'
|
|
11
|
-
import { Equal, getRepository, In } from 'typeorm'
|
|
13
|
+
|
|
12
14
|
import { TEMPLATE_TYPE, WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'
|
|
13
15
|
import { Worksheet, WorksheetDetail } from '../entities'
|
|
14
16
|
|