@things-factory/worksheet-base 4.3.77 → 4.3.78
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/outbound/packing-worksheet-controller.js +14 -2
- package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/outbound/picking-worksheet-controller.js +6 -9
- package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
- package/dist-server/controllers/worksheet-controller.js +14 -1
- package/dist-server/controllers/worksheet-controller.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +3 -3
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +4 -4
- package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +54 -11
- package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +4 -22
- package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
- package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js.map +1 -1
- package/dist-server/graphql/types/worksheet/index.js +5 -2
- package/dist-server/graphql/types/worksheet/index.js.map +1 -1
- package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js +11 -0
- package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js.map +1 -0
- package/dist-server/utils/worksheet-util.js +3 -1
- package/dist-server/utils/worksheet-util.js.map +1 -1
- package/package.json +17 -17
- package/server/controllers/outbound/packing-worksheet-controller.ts +21 -2
- package/server/controllers/outbound/picking-worksheet-controller.ts +7 -11
- package/server/controllers/worksheet-controller.ts +25 -2
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +3 -7
- package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +5 -4
- package/server/graphql/resolvers/worksheet/packing-worksheet.ts +62 -12
- package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +1 -1
- package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +1 -20
- package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +1 -0
- package/server/graphql/types/worksheet/index.ts +5 -2
- package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
- package/server/utils/worksheet-util.ts +3 -1
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
import { EntityManager, getManager } from 'typeorm'
|
|
2
2
|
|
|
3
3
|
import { User } from '@things-factory/auth-base'
|
|
4
|
-
import { OrderInventory } from '@things-factory/sales-base'
|
|
5
4
|
import { Domain } from '@things-factory/shell'
|
|
6
5
|
|
|
7
|
-
import { PickingWorksheetController } from '../../../../controllers/'
|
|
8
|
-
import { Worksheet, WorksheetDetail } from '../../../../entities'
|
|
9
|
-
|
|
10
6
|
import { generatePickingWorksheet } from './generate-release-good-worksheet'
|
|
11
7
|
|
|
12
8
|
export const generateMultipleReleaseGoodWorksheetResolver = {
|
|
13
|
-
async generateMultipleReleaseGoodWorksheet(_: any, {
|
|
9
|
+
async generateMultipleReleaseGoodWorksheet(_: any, { releaseGoods }, context: any) {
|
|
14
10
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
15
11
|
|
|
16
|
-
for (let idx = 0; idx <
|
|
12
|
+
for (let idx = 0; idx < releaseGoods.length; idx++) {
|
|
17
13
|
await getManager().transaction(async txMgr => {
|
|
18
|
-
await generatePickingWorksheet(txMgr, domain, user,
|
|
14
|
+
await generatePickingWorksheet(txMgr, domain, user, releaseGoods[idx].name, releaseGoods[idx].status)
|
|
19
15
|
});
|
|
20
16
|
}
|
|
21
17
|
|
package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts
CHANGED
|
@@ -11,9 +11,9 @@ import { Worksheet, WorksheetDetail } from '../../../../entities'
|
|
|
11
11
|
import { Inventory, InventoryUtil, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
|
|
12
12
|
|
|
13
13
|
export const generateReleaseGoodWorksheetResolver = {
|
|
14
|
-
async generateReleaseGoodWorksheet(_: any, { releaseGoodNo }, context: any) {
|
|
14
|
+
async generateReleaseGoodWorksheet(_: any, { releaseGoodNo, currentStatus = null }, context: any) {
|
|
15
15
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
16
|
-
return await generatePickingWorksheet(tx, domain, user, releaseGoodNo)
|
|
16
|
+
return await generatePickingWorksheet(tx, domain, user, releaseGoodNo, currentStatus)
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -21,7 +21,8 @@ export async function generatePickingWorksheet(
|
|
|
21
21
|
tx: EntityManager,
|
|
22
22
|
domain: Domain,
|
|
23
23
|
user: User,
|
|
24
|
-
releaseGoodNo: string
|
|
24
|
+
releaseGoodNo: string,
|
|
25
|
+
currentStatus: string = null
|
|
25
26
|
): Promise<Worksheet> {
|
|
26
27
|
try {
|
|
27
28
|
const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
|
|
@@ -78,7 +79,7 @@ export async function generatePickingWorksheet(
|
|
|
78
79
|
|
|
79
80
|
await tx.getRepository(ReleaseGood).update({ id: releaseGood.id }, { status: ORDER_STATUS.DONE })
|
|
80
81
|
} else {
|
|
81
|
-
worksheet = await worksheetController.generatePickingWorksheet(releaseGoodNo)
|
|
82
|
+
worksheet = await worksheetController.generatePickingWorksheet(releaseGoodNo, currentStatus)
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
return worksheet
|
|
@@ -14,9 +14,10 @@ import { Domain } from '@things-factory/shell'
|
|
|
14
14
|
import { Inventory, Location } from '@things-factory/warehouse-base'
|
|
15
15
|
|
|
16
16
|
import { WORKSHEET_TYPE } from '../../../constants'
|
|
17
|
-
import { SellercraftController } from '../../../controllers'
|
|
17
|
+
import { PackingWorksheetController, SellercraftController } from '../../../controllers'
|
|
18
18
|
import { Worksheet, WorksheetDetail } from '../../../entities'
|
|
19
19
|
import { fetchExecutingWorksheet } from '../../../utils'
|
|
20
|
+
import { PartnerSetting, Setting } from '@things-factory/setting-base'
|
|
20
21
|
|
|
21
22
|
export const packingWorksheetResolver = {
|
|
22
23
|
async packingWorksheet(_: any, { releaseGoodNo }, context: any) {
|
|
@@ -47,7 +48,7 @@ export const packingWorksheetResolver = {
|
|
|
47
48
|
.innerJoinAndSelect(
|
|
48
49
|
'worksheets',
|
|
49
50
|
'ws',
|
|
50
|
-
`orderInventory.release_good_id = ws.release_good_id AND ws.type = 'PACKING' AND ws.status = 'EXECUTING'`
|
|
51
|
+
`orderInventory.release_good_id = ws.release_good_id AND ws.type = 'PACKING' AND (ws.status = 'EXECUTING' OR ws.status = 'DEACTIVATED')`
|
|
51
52
|
)
|
|
52
53
|
.where('orderInventory.domain_id = :domainId', { domainId: domain.id })
|
|
53
54
|
.andWhere('orderInventory.status IN (:...orderInventoryStatus)', {
|
|
@@ -61,11 +62,22 @@ export const packingWorksheetResolver = {
|
|
|
61
62
|
.andWhere('releaseGood.status IN (:...status)', {
|
|
62
63
|
status: [ORDER_STATUS.READY_TO_PACK, ORDER_STATUS.PACKING]
|
|
63
64
|
})
|
|
65
|
+
.orderBy(`case when orderInventory.status = '${ORDER_INVENTORY_STATUS.PACKED}' then 1 end`)
|
|
66
|
+
.addOrderBy('ws.created_at', 'ASC')
|
|
64
67
|
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
const [orderInventoriesByBin, totalInventoriesByBin] = await qb.getManyAndCount()
|
|
69
|
+
// @oscarchuaweiwen-fsd @chrislim I suggest using getMany() instead since the total is redundant here
|
|
70
|
+
|
|
71
|
+
// remove duplicated count of release good
|
|
72
|
+
const filteredRO = orderInventoriesByBin.map(oiBin => {
|
|
73
|
+
return oiBin.releaseGood.name
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
if (orderInventoriesByBin.length > 0) {
|
|
77
|
+
releaseGoodNo = orderInventoriesByBin[0].releaseGood.name
|
|
78
|
+
releaseGood = orderInventoriesByBin[0].releaseGood
|
|
79
|
+
releaseGood.totalInventoriesByBin = [...new Set(filteredRO)].length
|
|
80
|
+
releaseGood.isOrderInventoryBin = true
|
|
69
81
|
} else {
|
|
70
82
|
throw new Error(`Bin do not have any existing order.`)
|
|
71
83
|
}
|
|
@@ -95,7 +107,39 @@ export const packingWorksheetResolver = {
|
|
|
95
107
|
releaseGood
|
|
96
108
|
)
|
|
97
109
|
|
|
98
|
-
|
|
110
|
+
if (worksheet.status === 'DEACTIVATED') {
|
|
111
|
+
const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
|
|
112
|
+
|
|
113
|
+
const directActivatePackingWorksheet: Setting = await tx.getRepository(Setting).findOne({
|
|
114
|
+
where: { domain: domain, category: 'id-rule', name: 'enable-direct-activate-packing-worksheet' }
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
const partnerDirectActivatePackingWorksheetSetting: PartnerSetting = await tx
|
|
118
|
+
.getRepository(PartnerSetting)
|
|
119
|
+
.findOne({
|
|
120
|
+
where: {
|
|
121
|
+
setting: directActivatePackingWorksheet,
|
|
122
|
+
domain: domain,
|
|
123
|
+
partnerDomain: releaseGood.bizplace?.domain
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
if (
|
|
128
|
+
directActivatePackingWorksheet != undefined &&
|
|
129
|
+
directActivatePackingWorksheet.value.toLowerCase() == 'true'
|
|
130
|
+
) {
|
|
131
|
+
if (partnerDirectActivatePackingWorksheetSetting != undefined) {
|
|
132
|
+
if (partnerDirectActivatePackingWorksheetSetting.value.toLowerCase() == 'true')
|
|
133
|
+
await packingWSCtrl.activatePacking(worksheet.name)
|
|
134
|
+
} else {
|
|
135
|
+
await packingWSCtrl.activatePacking(worksheet.name)
|
|
136
|
+
}
|
|
137
|
+
} else {
|
|
138
|
+
throw new Error('Kindly go to packing worksheet page to activate the packing worksheet')
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
let marketplaceOrder: MarketplaceOrder = {}
|
|
99
143
|
let marketplaceOrderItems: MarketplaceOrderItem[] = []
|
|
100
144
|
let marketplaceStore
|
|
101
145
|
let trackingNo: string
|
|
@@ -103,7 +147,6 @@ export const packingWorksheetResolver = {
|
|
|
103
147
|
let marketplaceStatus: string
|
|
104
148
|
|
|
105
149
|
if (releaseGood.type === 'b2c') {
|
|
106
|
-
|
|
107
150
|
const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
|
|
108
151
|
domain: worksheet.bizplace.domain,
|
|
109
152
|
status: SellercraftStatus.ACTIVE
|
|
@@ -165,8 +208,8 @@ export const packingWorksheetResolver = {
|
|
|
165
208
|
airwayBill: releaseGood?.airwayBill,
|
|
166
209
|
checkedRemarkBy: releaseGood?.checkedRemarkBy,
|
|
167
210
|
invoice: releaseGood?.invoice,
|
|
168
|
-
platform: marketplaceOrder ? marketplaceOrder.marketplaceStore
|
|
169
|
-
marketplaceStoreId: marketplaceOrder ? marketplaceOrder.marketplaceStore
|
|
211
|
+
platform: Object.keys(marketplaceOrder).length > 0 ? marketplaceOrder.marketplaceStore?.platform : 'operato',
|
|
212
|
+
marketplaceStoreId: Object.keys(marketplaceOrder).length > 0 ? marketplaceOrder.marketplaceStore?.id : '',
|
|
170
213
|
marketplaceStatus: marketplaceStatus ? marketplaceStatus : '',
|
|
171
214
|
marketplaceOrder: marketplaceOrder ? marketplaceOrder : ''
|
|
172
215
|
},
|
|
@@ -265,7 +308,14 @@ async function getSellercraftDocument(sellercraft: Sellercraft, releaseGood: Rel
|
|
|
265
308
|
}
|
|
266
309
|
}
|
|
267
310
|
} catch (error) {
|
|
268
|
-
logger.error(
|
|
311
|
+
logger.error(
|
|
312
|
+
`packing-worksheet[getSellercraftDocument]:(data:${JSON.stringify({
|
|
313
|
+
sellercraft,
|
|
314
|
+
releaseGood,
|
|
315
|
+
domain,
|
|
316
|
+
user
|
|
317
|
+
})}) ${error} `
|
|
318
|
+
)
|
|
269
319
|
}
|
|
270
320
|
})
|
|
271
|
-
}
|
|
321
|
+
}
|
|
@@ -24,7 +24,7 @@ export const pendingCancellationReleaseOrder = {
|
|
|
24
24
|
relations: ['bizplace', 'orderInventories', 'orderVass']
|
|
25
25
|
})
|
|
26
26
|
|
|
27
|
-
if (foundRO.status === "DONE") throw new Error('Release good has been completed!')
|
|
27
|
+
if (foundRO.status === "DONE") throw new Error('Release good has been completed!')
|
|
28
28
|
if (!foundRO) throw new Error(`Release good order doesn't exists.`)
|
|
29
29
|
let targetOIs: OrderInventory[] = foundRO.orderInventories
|
|
30
30
|
let foundOVs: OrderVas[] = foundRO.orderVass
|
|
@@ -226,26 +226,7 @@ export async function completePicking(
|
|
|
226
226
|
|
|
227
227
|
if (releaseGood.packingOption) {
|
|
228
228
|
const packingWSCtrl: PackingWorksheetController = new PackingWorksheetController(tx, domain, user)
|
|
229
|
-
|
|
230
|
-
const directActivatePackingWorksheet: Setting = await tx.getRepository(Setting).findOne({
|
|
231
|
-
where: { domain: domain, category: 'id-rule', name: 'enable-direct-activate-packing-worksheet' }
|
|
232
|
-
})
|
|
233
|
-
const partnerDirectActivatePackingWorksheetSetting: PartnerSetting = await tx
|
|
234
|
-
.getRepository(PartnerSetting)
|
|
235
|
-
.findOne({
|
|
236
|
-
where: { setting: directActivatePackingWorksheet, domain: domain, partnerDomain: releaseGood.bizplace?.domain }
|
|
237
|
-
})
|
|
238
|
-
|
|
239
|
-
let packingWorksheet: Worksheet = await packingWSCtrl.generatePackingWorksheet(releaseGoodNo)
|
|
240
|
-
|
|
241
|
-
if (directActivatePackingWorksheet != undefined && directActivatePackingWorksheet.value.toLowerCase() == 'true') {
|
|
242
|
-
if (partnerDirectActivatePackingWorksheetSetting != undefined) {
|
|
243
|
-
if (partnerDirectActivatePackingWorksheetSetting.value.toLowerCase() == 'true')
|
|
244
|
-
await packingWSCtrl.activatePacking(packingWorksheet.name)
|
|
245
|
-
} else {
|
|
246
|
-
await packingWSCtrl.activatePacking(packingWorksheet.name)
|
|
247
|
-
}
|
|
248
|
-
}
|
|
229
|
+
await packingWSCtrl.generatePackingWorksheet(releaseGoodNo)
|
|
249
230
|
} else {
|
|
250
231
|
// Find Existing Loading Worksheet if any
|
|
251
232
|
let existLoadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({
|
|
@@ -18,6 +18,7 @@ export const rejectCancellationReleaseOrder = {
|
|
|
18
18
|
async rejectCancellationReleaseOrder(_: any, { name }, context: any) {
|
|
19
19
|
const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
|
|
20
20
|
|
|
21
|
+
|
|
21
22
|
try {
|
|
22
23
|
// find release order
|
|
23
24
|
let foundRO: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
|
|
@@ -25,6 +25,7 @@ import { WorksheetList } from './worksheet-list'
|
|
|
25
25
|
import { WorksheetPatch } from './worksheet-patch'
|
|
26
26
|
import { WorksheetWithPagination } from './worksheet-with-pagination'
|
|
27
27
|
import { GenerateBatchPickInfo } from './batch-pick-worksheet-info'
|
|
28
|
+
import { MultipleReleaseGoodWorksheet } from './multiple-release-good-worksheet'
|
|
28
29
|
|
|
29
30
|
export const Mutation = /* GraphQL */ `
|
|
30
31
|
createWorksheet (
|
|
@@ -62,10 +63,11 @@ export const Mutation = /* GraphQL */ `
|
|
|
62
63
|
|
|
63
64
|
generateReleaseGoodWorksheet (
|
|
64
65
|
releaseGoodNo: String!
|
|
66
|
+
currentStatus: String
|
|
65
67
|
): ReleaseGoodWorksheet @privilege(category: "worksheet_control", privilege: "mutation") @transaction
|
|
66
68
|
|
|
67
69
|
generateMultipleReleaseGoodWorksheet (
|
|
68
|
-
|
|
70
|
+
releaseGoods: [MultipleReleaseGoodWorksheet!]
|
|
69
71
|
): Boolean @privilege(category: "worksheet_control", privilege: "mutation") @transaction
|
|
70
72
|
|
|
71
73
|
fetchSellercraftDocument (
|
|
@@ -743,5 +745,6 @@ export const Types = /* GraphQL */[
|
|
|
743
745
|
MyPickingAssignmentStatus,
|
|
744
746
|
FindReleaseOrdersByTaskNo,
|
|
745
747
|
DeliveryOrderRO,
|
|
746
|
-
GenerateBatchPickInfo
|
|
748
|
+
GenerateBatchPickInfo,
|
|
749
|
+
MultipleReleaseGoodWorksheet
|
|
747
750
|
]
|
|
@@ -41,7 +41,9 @@ export async function fetchExecutingWorksheet(
|
|
|
41
41
|
} else if (worksheet.status === WORKSHEET_STATUS.DONE) {
|
|
42
42
|
throw new Error(`Worksheet is completed already`)
|
|
43
43
|
} else if (worksheet.status === WORKSHEET_STATUS.DEACTIVATED) {
|
|
44
|
-
|
|
44
|
+
//@oscarchuaweiwen-fsd this function is being used in quite some place, for packing worksheet you have handled the status DEACTIVATED, but for loading worksheet it's not being handled
|
|
45
|
+
//won't there be issue if it doesn't throw error for places that didnt handle the status DEACTIVATED?
|
|
46
|
+
return worksheet
|
|
45
47
|
} else {
|
|
46
48
|
throw new Error(`Current worksheet status (${worksheet.status}) is not proper to execute it.`)
|
|
47
49
|
}
|