@things-factory/worksheet-base 4.3.76 → 4.3.79-alpha.0

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 (64) 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/confirm-cancellation-release-order.js +12 -0
  8. package/dist-server/graphql/resolvers/worksheet/confirm-cancellation-release-order.js.map +1 -1
  9. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +3 -3
  10. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +4 -4
  12. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  13. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +67 -28
  14. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
  15. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js +23 -8
  16. package/dist-server/graphql/resolvers/worksheet/packing/activate-packing.js.map +1 -1
  17. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js +30 -7
  18. package/dist-server/graphql/resolvers/worksheet/packing/complete-packing.js.map +1 -1
  19. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +23 -8
  20. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
  21. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +25 -8
  22. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  23. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +112 -22
  24. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  25. package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js +87 -79
  26. package/dist-server/graphql/resolvers/worksheet/pending-cancellation-release-order.js.map +1 -1
  27. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +51 -25
  28. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
  29. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +2 -2
  30. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  31. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +266 -140
  32. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  33. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +39 -14
  34. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
  35. package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js +92 -150
  36. package/dist-server/graphql/resolvers/worksheet/reject-cancellation-release-order.js.map +1 -1
  37. package/dist-server/graphql/types/worksheet/index.js +5 -2
  38. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  39. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js +11 -0
  40. package/dist-server/graphql/types/worksheet/multiple-release-good-worksheet.js.map +1 -0
  41. package/dist-server/utils/worksheet-util.js +3 -1
  42. package/dist-server/utils/worksheet-util.js.map +1 -1
  43. package/package.json +17 -17
  44. package/server/controllers/outbound/packing-worksheet-controller.ts +21 -2
  45. package/server/controllers/outbound/picking-worksheet-controller.ts +7 -11
  46. package/server/controllers/worksheet-controller.ts +25 -2
  47. package/server/graphql/resolvers/worksheet/confirm-cancellation-release-order.ts +13 -0
  48. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +3 -7
  49. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +5 -4
  50. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +77 -33
  51. package/server/graphql/resolvers/worksheet/packing/activate-packing.ts +26 -9
  52. package/server/graphql/resolvers/worksheet/packing/complete-packing.ts +34 -9
  53. package/server/graphql/resolvers/worksheet/packing/packing.ts +26 -9
  54. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +28 -9
  55. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +128 -23
  56. package/server/graphql/resolvers/worksheet/pending-cancellation-release-order.ts +99 -94
  57. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +60 -30
  58. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +2 -2
  59. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +288 -149
  60. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +45 -15
  61. package/server/graphql/resolvers/worksheet/reject-cancellation-release-order.ts +98 -213
  62. package/server/graphql/types/worksheet/index.ts +5 -2
  63. package/server/graphql/types/worksheet/multiple-release-good-worksheet.ts +8 -0
  64. 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
@@ -1,6 +1,6 @@
1
1
  import { EntityManager } from 'typeorm'
2
2
 
3
- import { User } from '@things-factory/auth-base'
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
4
  import { Bizplace, Company } from '@things-factory/biz-base'
5
5
  import { FulfillmentCenter } from '@things-factory/integration-fulfillment'
6
6
  import { Sftp, SftpAPI } from '@things-factory/integration-sftp'
@@ -58,42 +58,86 @@ export async function completeLoading(
58
58
  const warehouseCompanyBizplaces: Bizplace[] = warehouseBizplaces.filter(biz => biz.domain.extType == 'company')
59
59
  const warehouseCompanyDomain: Domain = warehouseCompanyBizplaces[0].domain
60
60
 
61
- const customerDomain: Domain = releaseGood.bizplace.domain
62
- const fulfillmentCenter: FulfillmentCenter = await tx
63
- .getRepository(FulfillmentCenter)
64
- .findOne({ domain: warehouseCompanyDomain, centerId: domain.subdomain, status: 'active' })
65
-
66
- if (fulfillmentCenter) {
67
- let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOne({
68
- where: { domain: customerDomain, status: 'ACTIVE', fulfillmentCenter }
69
- })
70
- if (customerAvailableSftp) {
71
- const responseFileTypes: any = JSON.parse(customerAvailableSftp.responseFileTypes)
72
-
73
- let inventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({
74
- where: { domain, outboundOrderId: releaseGood.id }
75
- })
76
-
77
- // if (responseFileTypes.enableShipment) {
78
- // let shipmentResult: Sftp = await SftpAPI.createShipment(customerAvailableSftp, {
79
- // releaseGood,
80
- // orderInventories: targetInventories,
81
- // sftp: customerAvailableSftp
82
- // })
83
- // customerAvailableSftp = await tx.getRepository(Sftp).save(shipmentResult)
84
- // }
85
-
86
- if (responseFileTypes.enableSerialNumber) {
87
- let snResult: Sftp = await SftpAPI.createSerialNumber(customerAvailableSftp, {
88
- releaseGood,
89
- inventoryItems,
90
- sftp: customerAvailableSftp
61
+ const orderSource: string = releaseGood.source
62
+ switch (orderSource) {
63
+ case ApplicationType.SFTP:
64
+ const customerDomain: Domain = releaseGood.bizplace.domain
65
+ const fulfillmentCenter: FulfillmentCenter = await tx
66
+ .getRepository(FulfillmentCenter)
67
+ .findOne({ domain: warehouseCompanyDomain, centerId: domain.subdomain, status: 'active' })
68
+
69
+ if (fulfillmentCenter) {
70
+ let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOne({
71
+ where: { domain: customerDomain, status: 'ACTIVE', fulfillmentCenter }
91
72
  })
92
- customerAvailableSftp = await tx.getRepository(Sftp).save(snResult)
73
+ if (customerAvailableSftp) {
74
+ const responseFileTypes: any = JSON.parse(customerAvailableSftp.responseFileTypes)
75
+
76
+ let inventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({
77
+ where: { domain, outboundOrderId: releaseGood.id }
78
+ })
79
+
80
+ // if (responseFileTypes.enableShipment) {
81
+ // let shipmentResult: Sftp = await SftpAPI.createShipment(customerAvailableSftp, {
82
+ // releaseGood,
83
+ // orderInventories: targetInventories,
84
+ // sftp: customerAvailableSftp
85
+ // })
86
+ // customerAvailableSftp = await tx.getRepository(Sftp).save(shipmentResult)
87
+ // }
88
+
89
+ if (responseFileTypes.enableSerialNumber) {
90
+ let snResult: Sftp = await SftpAPI.createSerialNumber(customerAvailableSftp, {
91
+ releaseGood,
92
+ inventoryItems,
93
+ sftp: customerAvailableSftp
94
+ })
95
+ customerAvailableSftp = await tx.getRepository(Sftp).save(snResult)
96
+ }
97
+ }
93
98
  }
94
- }
99
+ break
100
+
101
+ default:
102
+ break
95
103
  }
96
104
 
105
+ // const customerDomain: Domain = releaseGood.bizplace.domain
106
+ // const fulfillmentCenter: FulfillmentCenter = await tx
107
+ // .getRepository(FulfillmentCenter)
108
+ // .findOne({ domain: warehouseCompanyDomain, centerId: domain.subdomain, status: 'active' })
109
+
110
+ // if (fulfillmentCenter) {
111
+ // let customerAvailableSftp: Sftp = await tx.getRepository(Sftp).findOne({
112
+ // where: { domain: customerDomain, status: 'ACTIVE', fulfillmentCenter }
113
+ // })
114
+ // if (customerAvailableSftp) {
115
+ // const responseFileTypes: any = JSON.parse(customerAvailableSftp.responseFileTypes)
116
+
117
+ // let inventoryItems: InventoryItem[] = await tx.getRepository(InventoryItem).find({
118
+ // where: { domain, outboundOrderId: releaseGood.id }
119
+ // })
120
+
121
+ // // if (responseFileTypes.enableShipment) {
122
+ // // let shipmentResult: Sftp = await SftpAPI.createShipment(customerAvailableSftp, {
123
+ // // releaseGood,
124
+ // // orderInventories: targetInventories,
125
+ // // sftp: customerAvailableSftp
126
+ // // })
127
+ // // customerAvailableSftp = await tx.getRepository(Sftp).save(shipmentResult)
128
+ // // }
129
+
130
+ // if (responseFileTypes.enableSerialNumber) {
131
+ // let snResult: Sftp = await SftpAPI.createSerialNumber(customerAvailableSftp, {
132
+ // releaseGood,
133
+ // inventoryItems,
134
+ // sftp: customerAvailableSftp
135
+ // })
136
+ // customerAvailableSftp = await tx.getRepository(Sftp).save(snResult)
137
+ // }
138
+ // }
139
+ // }
140
+
97
141
  await worksheetController.completeLoading(releaseGoodNo)
98
142
 
99
143
  if (remainInventories.length) {
@@ -1,6 +1,6 @@
1
1
  import { EntityManager, getManager } from 'typeorm'
2
2
 
3
- import { User } from '@things-factory/auth-base'
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
4
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
5
5
  import { ReleaseGood } from '@things-factory/sales-base'
6
6
  import { Domain } from '@things-factory/shell'
@@ -38,15 +38,32 @@ export async function activatePacking(
38
38
  const worksheet = await worksheetController.activatePacking(worksheetNo)
39
39
  let releaseGood: ReleaseGood = worksheet.releaseGood
40
40
 
41
- if (releaseGood.type == 'b2c') {
42
- const sellercraft: Sellercraft = await tx
43
- .getRepository(Sellercraft)
44
- .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
41
+ const orderSource: string = releaseGood.source
42
+ switch (orderSource) {
43
+ case ApplicationType.SELLERCRAFT:
44
+ const sellercraft: Sellercraft = await tx
45
+ .getRepository(Sellercraft)
46
+ .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
45
47
 
46
- if (sellercraft) {
47
- const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
48
- sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
49
- }
48
+ if (sellercraft) {
49
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
50
+ sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
51
+ }
52
+ break
53
+
54
+ default:
55
+ break
50
56
  }
57
+
58
+ // if (releaseGood.type == 'b2c') {
59
+ // const sellercraft: Sellercraft = await tx
60
+ // .getRepository(Sellercraft)
61
+ // .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
62
+
63
+ // if (sellercraft) {
64
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
65
+ // sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
66
+ // }
67
+ // }
51
68
  return worksheet
52
69
  }
@@ -1,9 +1,8 @@
1
1
  import { EntityManager } from 'typeorm'
2
2
 
3
- import { User } from '@things-factory/auth-base'
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
4
  import { Bizplace, getMyBizplace } from '@things-factory/biz-base'
5
5
  import { MarketplaceStore } from '@things-factory/integration-marketplace'
6
- import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
7
6
  import { MarketplaceOrder } from '@things-factory/marketplace-base'
8
7
  import { ReleaseGood } from '@things-factory/sales-base'
9
8
  import { Domain } from '@things-factory/shell'
@@ -29,12 +28,9 @@ export const completePackingResolver = {
29
28
  ]
30
29
  })
31
30
 
32
- if (releaseGood.type === 'b2c') {
33
- const sellercraft: Sellercraft = await tx
34
- .getRepository(Sellercraft)
35
- .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
36
-
37
- if (!sellercraft) {
31
+ const orderSource: string = releaseGood.source
32
+ switch (orderSource) {
33
+ case ApplicationType.MMS:
38
34
  const companyDomain: Domain = releaseGood.bizplace.company.domain
39
35
  const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
40
36
  where: { orderNo: releaseGood.refNo, domain: companyDomain },
@@ -52,9 +48,38 @@ export const completePackingResolver = {
52
48
  const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
53
49
  await ecommerceCtrl.createOrderShip(releaseGood, marketplaceStore, marketplaceOrder, companyDomain)
54
50
  }
55
- }
51
+ break
52
+
53
+ default:
54
+ break
56
55
  }
57
56
 
57
+ // if (releaseGood.type === 'b2c') {
58
+ // const sellercraft: Sellercraft = await tx
59
+ // .getRepository(Sellercraft)
60
+ // .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
61
+
62
+ // if (!sellercraft) {
63
+ // const companyDomain: Domain = releaseGood.bizplace.company.domain
64
+ // const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
65
+ // where: { orderNo: releaseGood.refNo, domain: companyDomain },
66
+ // relations: [
67
+ // 'marketplaceOrderItems',
68
+ // 'marketplaceOrderItems.marketplaceOrderShippingItems',
69
+ // 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping',
70
+ // 'marketplaceStore',
71
+ // 'marketplaceStore.marketplaceDistributors'
72
+ // ]
73
+ // })
74
+ // const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
75
+
76
+ // if (marketplaceStore.isAutoUpdateShipment) {
77
+ // const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
78
+ // await ecommerceCtrl.createOrderShip(releaseGood, marketplaceStore, marketplaceOrder, companyDomain)
79
+ // }
80
+ // }
81
+ // }
82
+
58
83
  const bizplace: Bizplace = await getMyBizplace(domain, user)
59
84
  const worksheetController: WorksheetController = new WorksheetController(tx, domain, user)
60
85
  await worksheetController.notifyToCustomer(bizplace, {
@@ -1,6 +1,6 @@
1
1
  import { EntityManager } from 'typeorm'
2
2
 
3
- import { User } from '@things-factory/auth-base'
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
4
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
5
5
  import { ReleaseGood } from '@things-factory/sales-base'
6
6
  import { Domain } from '@things-factory/shell'
@@ -29,14 +29,31 @@ export async function packing(
29
29
  let releaseGood: ReleaseGood = worksheetDetail.targetInventory.releaseGood
30
30
  const worksheet: Worksheet = worksheetDetail.worksheet
31
31
 
32
- if (releaseGood.type === 'b2c' && !releaseGood?.airwayBill) {
33
- const sellercraft: Sellercraft = await tx
34
- .getRepository(Sellercraft)
35
- .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
32
+ const orderSource: string = releaseGood.source
33
+ switch (orderSource) {
34
+ case ApplicationType.SELLERCRAFT:
35
+ const sellercraft: Sellercraft = await tx
36
+ .getRepository(Sellercraft)
37
+ .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
36
38
 
37
- if (sellercraft) {
38
- const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
39
- await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
40
- }
39
+ if (sellercraft) {
40
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
41
+ await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
42
+ }
43
+ break
44
+
45
+ default:
46
+ break
41
47
  }
48
+
49
+ // if (releaseGood.type === 'b2c' && !releaseGood?.airwayBill) {
50
+ // const sellercraft: Sellercraft = await tx
51
+ // .getRepository(Sellercraft)
52
+ // .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
53
+
54
+ // if (sellercraft) {
55
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
56
+ // await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
57
+ // }
58
+ // }
42
59
  }
@@ -1,6 +1,6 @@
1
1
  import { EntityManager } from 'typeorm'
2
2
 
3
- import { User } from '@things-factory/auth-base'
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
4
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
5
5
  import { ReleaseGood } from '@things-factory/sales-base'
6
6
  import { Domain } from '@things-factory/shell'
@@ -34,17 +34,36 @@ export async function scanProductPacking(
34
34
  let releaseGood: ReleaseGood = worksheetDetail.targetInventory.releaseGood
35
35
  const worksheet: Worksheet = worksheetDetail.worksheet
36
36
 
37
- if (releaseGood.type === 'b2c' && !releaseGood?.airwayBill) {
38
- const sellercraft: Sellercraft = await tx
39
- .getRepository(Sellercraft)
40
- .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
37
+ const orderSource: string = releaseGood.source
38
+ switch (orderSource) {
39
+ case ApplicationType.SELLERCRAFT:
40
+ if (!releaseGood?.airwayBill) {
41
+ const sellercraft: Sellercraft = await tx
42
+ .getRepository(Sellercraft)
43
+ .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
41
44
 
42
- if (sellercraft) {
43
- const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
44
- sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
45
- }
45
+ if (sellercraft) {
46
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
47
+ sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
48
+ }
49
+ }
50
+
51
+ break
52
+
53
+ default:
54
+ break
46
55
  }
47
56
 
57
+ // if (releaseGood.type === 'b2c' && !releaseGood?.airwayBill) {
58
+ // const sellercraft: Sellercraft = await tx
59
+ // .getRepository(Sellercraft)
60
+ // .findOne({ domain: worksheet.bizplace.domain, status: SellercraftStatus.ACTIVE })
61
+
62
+ // if (sellercraft) {
63
+ // const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
64
+ // sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
65
+ // }
66
+ // }
48
67
  } catch (error) {
49
68
  throw error
50
69
  }
@@ -1,6 +1,6 @@
1
- import { EntityManager, SelectQueryBuilder, getManager } from 'typeorm'
1
+ import { EntityManager, getManager, SelectQueryBuilder } from 'typeorm'
2
2
 
3
- import { User } from '@things-factory/auth-base'
3
+ import { ApplicationType, User } from '@things-factory/auth-base'
4
4
  import { logger } from '@things-factory/env'
5
5
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
6
6
  import {
@@ -10,11 +10,12 @@ import {
10
10
  MarketplaceOrderShippingItem
11
11
  } from '@things-factory/marketplace-base'
12
12
  import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
13
+ import { PartnerSetting, Setting } from '@things-factory/setting-base'
13
14
  import { Domain } from '@things-factory/shell'
14
15
  import { Inventory, Location } from '@things-factory/warehouse-base'
15
16
 
16
17
  import { WORKSHEET_TYPE } from '../../../constants'
17
- import { SellercraftController } from '../../../controllers'
18
+ import { PackingWorksheetController, SellercraftController } from '../../../controllers'
18
19
  import { Worksheet, WorksheetDetail } from '../../../entities'
19
20
  import { fetchExecutingWorksheet } from '../../../utils'
20
21
 
@@ -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,24 +107,59 @@ 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
102
146
  let shippingProvider: string
103
147
  let marketplaceStatus: string
104
148
 
105
- if (releaseGood.type === 'b2c') {
149
+ const orderSource: string = releaseGood.source
150
+ switch (orderSource) {
151
+ case ApplicationType.SELLERCRAFT:
152
+ const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
153
+ domain: worksheet.bizplace.domain,
154
+ status: SellercraftStatus.ACTIVE
155
+ })
106
156
 
107
- const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
108
- domain: worksheet.bizplace.domain,
109
- status: SellercraftStatus.ACTIVE
110
- })
157
+ if (sellercraft) {
158
+ getSellercraftDocument(sellercraft, releaseGood, domain, user)
159
+ }
160
+ break
111
161
 
112
- if (sellercraft) {
113
- // asynchronously get document from sellercraft
114
- getSellercraftDocument(sellercraft, releaseGood, domain, user)
115
- } else {
162
+ case ApplicationType.MMS:
116
163
  marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
117
164
  where: { orderNo: releaseGood.refNo },
118
165
  relations: [
@@ -148,9 +195,60 @@ export const packingWorksheetResolver = {
148
195
 
149
196
  marketplaceStore = marketplaceOrder?.marketplaceStore
150
197
  marketplaceStatus = marketplaceOrder?.status
151
- }
198
+ break
199
+
200
+ default:
201
+ break
152
202
  }
153
203
 
204
+ // if (releaseGood.type === 'b2c') {
205
+ // const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
206
+ // domain: worksheet.bizplace.domain,
207
+ // status: SellercraftStatus.ACTIVE
208
+ // })
209
+
210
+ // if (sellercraft) {
211
+ // // asynchronously get document from sellercraft
212
+ // getSellercraftDocument(sellercraft, releaseGood, domain, user)
213
+ // } else {
214
+ // marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
215
+ // where: { orderNo: releaseGood.refNo },
216
+ // relations: [
217
+ // 'domain',
218
+ // 'marketplaceStore',
219
+ // 'marketplaceOrderItems',
220
+ // 'marketplaceOrderItems.marketplaceOrderShippingItems',
221
+ // 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
222
+ // ]
223
+ // })
224
+
225
+ // if (!marketplaceOrder) {
226
+ // throw new Error('Failed to retrieve ecommerce information, kindly contact our support team for this issue.')
227
+ // }
228
+
229
+ // let marketplaceOrderShipping: MarketplaceOrderShipping
230
+ // if (marketplaceOrder.isSplitted) {
231
+ // marketplaceOrderShipping = await tx.getRepository(MarketplaceOrderShipping).findOne({
232
+ // where: { subOrderNoRef: worksheet.releaseGood.refNo2 }
233
+ // })
234
+ // } else {
235
+ // marketplaceOrderShipping = await tx.getRepository(MarketplaceOrderShipping).findOne({
236
+ // where: { orderNoRef: worksheet.releaseGood.refNo }
237
+ // })
238
+ // }
239
+
240
+ // trackingNo = marketplaceOrderShipping.ownTrackingNo
241
+ // ? marketplaceOrderShipping.ownTrackingNo
242
+ // : marketplaceOrderShipping.trackingNo
243
+ // shippingProvider = marketplaceOrderShipping.ownTransporter
244
+ // ? marketplaceOrderShipping.ownTransporter
245
+ // : marketplaceOrderShipping.transporter
246
+
247
+ // marketplaceStore = marketplaceOrder?.marketplaceStore
248
+ // marketplaceStatus = marketplaceOrder?.status
249
+ // }
250
+ // }
251
+
154
252
  return {
155
253
  worksheetInfo: {
156
254
  releaseGood,
@@ -165,8 +263,8 @@ export const packingWorksheetResolver = {
165
263
  airwayBill: releaseGood?.airwayBill,
166
264
  checkedRemarkBy: releaseGood?.checkedRemarkBy,
167
265
  invoice: releaseGood?.invoice,
168
- platform: marketplaceOrder ? marketplaceOrder.marketplaceStore.platform : 'operato',
169
- marketplaceStoreId: marketplaceOrder ? marketplaceOrder.marketplaceStore.id : '',
266
+ platform: Object.keys(marketplaceOrder).length > 0 ? marketplaceOrder.marketplaceStore?.platform : 'operato',
267
+ marketplaceStoreId: Object.keys(marketplaceOrder).length > 0 ? marketplaceOrder.marketplaceStore?.id : '',
170
268
  marketplaceStatus: marketplaceStatus ? marketplaceStatus : '',
171
269
  marketplaceOrder: marketplaceOrder ? marketplaceOrder : ''
172
270
  },
@@ -265,7 +363,14 @@ async function getSellercraftDocument(sellercraft: Sellercraft, releaseGood: Rel
265
363
  }
266
364
  }
267
365
  } catch (error) {
268
- logger.error(`packing-worksheet[getSellercraftDocument]:(data:${JSON.stringify({ sellercraft, releaseGood, domain, user })}) ${error} `)
366
+ logger.error(
367
+ `packing-worksheet[getSellercraftDocument]:(data:${JSON.stringify({
368
+ sellercraft,
369
+ releaseGood,
370
+ domain,
371
+ user
372
+ })}) ${error} `
373
+ )
269
374
  }
270
375
  })
271
- }
376
+ }