@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.
Files changed (35) hide show
  1. package/dist-server/controllers/outbound/packing-worksheet-controller.js +14 -2
  2. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/outbound/picking-worksheet-controller.js +6 -9
  4. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/worksheet-controller.js +14 -1
  6. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  7. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +3 -3
  8. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -1
  9. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +4 -4
  10. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +54 -11
  12. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  13. package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js.map +1 -1
  14. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +4 -22
  15. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  16. package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js.map +1 -1
  17. package/dist-server/graphql/types/worksheet/index.js +5 -2
  18. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  19. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js +11 -0
  20. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js.map +1 -0
  21. package/dist-server/utils/worksheet-util.js +3 -1
  22. package/dist-server/utils/worksheet-util.js.map +1 -1
  23. package/package.json +17 -17
  24. package/server/controllers/outbound/packing-worksheet-controller.ts +21 -2
  25. package/server/controllers/outbound/picking-worksheet-controller.ts +7 -11
  26. package/server/controllers/worksheet-controller.ts +25 -2
  27. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +3 -7
  28. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +5 -4
  29. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +62 -12
  30. package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +1 -1
  31. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +1 -20
  32. package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +1 -0
  33. package/server/graphql/types/worksheet/index.ts +5 -2
  34. package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
  35. 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, { releaseGoodNos }, context: 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 < releaseGoodNos.length; idx++) {
12
+ for (let idx = 0; idx < releaseGoods.length; idx++) {
17
13
  await getManager().transaction(async txMgr => {
18
- await generatePickingWorksheet(txMgr, domain, user, releaseGoodNos[idx])
14
+ await generatePickingWorksheet(txMgr, domain, user, releaseGoods[idx].name, releaseGoods[idx].status)
19
15
  });
20
16
  }
21
17
 
@@ -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 orderInventoryByBin = await qb.getOne()
66
- if (orderInventoryByBin?.releaseGood) {
67
- releaseGoodNo = orderInventoryByBin.releaseGood.name
68
- releaseGood = orderInventoryByBin.releaseGood
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
- let marketplaceOrder: MarketplaceOrder
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.platform : 'operato',
169
- marketplaceStoreId: marketplaceOrder ? marketplaceOrder.marketplaceStore.id : '',
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(`packing-worksheet[getSellercraftDocument]:(data:${JSON.stringify({ sellercraft, releaseGood, domain, user })}) ${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
- releaseGoodNos: [String!]
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
  ]
@@ -0,0 +1,8 @@
1
+ import { gql } from 'apollo-server-koa'
2
+
3
+ export const MultipleReleaseGoodWorksheet = gql`
4
+ input MultipleReleaseGoodWorksheet {
5
+ name: String
6
+ status: String
7
+ }
8
+ `
@@ -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
- throw new Error(`Worksheet is not activated yet`)
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
  }