@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.
Files changed (93) hide show
  1. package/dist-server/controllers/ecommerce/ecommerce-controller.js +10 -3
  2. package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/sellercraft-controller.js +5 -3
  4. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js +24 -4
  6. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +98 -140
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/outbound/packing-worksheet-controller.js +2 -6
  10. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  11. package/dist-server/controllers/outbound/picking-worksheet-controller.js +4 -4
  12. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/render-grn.js +7 -2
  14. package/dist-server/controllers/render-grn.js.map +1 -1
  15. package/dist-server/controllers/render-manual-do.js +4 -3
  16. package/dist-server/controllers/render-manual-do.js.map +1 -1
  17. package/dist-server/controllers/render-orientage-do.js +3 -3
  18. package/dist-server/controllers/render-orientage-do.js.map +1 -1
  19. package/dist-server/controllers/render-orientage-grn.js +4 -4
  20. package/dist-server/controllers/render-orientage-grn.js.map +1 -1
  21. package/dist-server/controllers/render-ro-do.js +1 -0
  22. package/dist-server/controllers/render-ro-do.js.map +1 -1
  23. package/dist-server/controllers/worksheet-controller.js +5 -5
  24. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  25. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +14 -0
  26. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -0
  27. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  28. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js +2 -1
  29. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js.map +1 -1
  30. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +8 -4
  31. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  32. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +6 -4
  33. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
  34. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +4 -7
  35. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  36. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +64 -54
  37. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
  38. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +1 -0
  39. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  40. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js +5 -1
  41. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js.map +1 -1
  42. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js +6 -2
  43. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js.map +1 -1
  44. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js +3 -1
  45. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js.map +1 -1
  46. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +2 -1
  47. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
  48. package/dist-server/graphql/resolvers/worksheet/unloading/index.js +4 -5
  49. package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
  50. package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js +4 -4
  51. package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js.map +1 -1
  52. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +4 -2
  53. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
  54. package/dist-server/graphql/resolvers/worksheet/worksheet.js +28 -1
  55. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  56. package/dist-server/graphql/types/worksheet/index.js +7 -8
  57. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  58. package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
  59. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  60. package/package.json +16 -16
  61. package/server/controllers/ecommerce/ecommerce-controller.ts +18 -4
  62. package/server/controllers/ecommerce/sellercraft-controller.ts +11 -5
  63. package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +28 -6
  64. package/server/controllers/inbound/unloading-worksheet-controller.ts +130 -152
  65. package/server/controllers/outbound/packing-worksheet-controller.ts +2 -7
  66. package/server/controllers/outbound/picking-worksheet-controller.ts +4 -4
  67. package/server/controllers/render-grn.ts +7 -2
  68. package/server/controllers/render-manual-do.ts +7 -4
  69. package/server/controllers/render-orientage-do.ts +7 -5
  70. package/server/controllers/render-orientage-grn.ts +9 -7
  71. package/server/controllers/render-ro-do.ts +1 -0
  72. package/server/controllers/worksheet-controller.ts +5 -5
  73. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +22 -0
  74. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +3 -1
  75. package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +2 -0
  76. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +9 -5
  77. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +7 -4
  78. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +4 -8
  79. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +67 -56
  80. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +1 -0
  81. package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +9 -3
  82. package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +9 -3
  83. package/server/graphql/resolvers/worksheet/return-worksheet.ts +7 -3
  84. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +5 -2
  85. package/server/graphql/resolvers/worksheet/unloading/index.ts +3 -5
  86. package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +9 -6
  87. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +7 -3
  88. package/server/graphql/resolvers/worksheet/worksheet.ts +29 -1
  89. package/server/graphql/types/worksheet/index.ts +8 -9
  90. package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
  91. package/dist-server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.js +0 -15
  92. package/dist-server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.js.map +0 -1
  93. package/server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.ts +0 -23
@@ -1,19 +1,21 @@
1
+ import FormData from 'form-data'
2
+ import fetch from 'node-fetch'
3
+ import { getRepository, IsNull, Not } 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 { ProductDetail } from '@things-factory/product-base'
5
10
  import {
6
11
  ArrivalNotice,
7
12
  GoodsReceivalNote,
8
- OrderProduct,
9
13
  ORDER_PRODUCT_STATUS,
10
- ORDER_STATUS
14
+ ORDER_STATUS,
15
+ OrderProduct
11
16
  } from '@things-factory/sales-base'
12
- import { Product, ProductDetail } from '@things-factory/product-base'
13
17
  import { Domain } from '@things-factory/shell'
14
- import FormData from 'form-data'
15
- import fetch from 'node-fetch'
16
- import { getRepository, IsNull, Not } from 'typeorm'
18
+
17
19
  import { TEMPLATE_TYPE } from '../constants'
18
20
  import { Worksheet } from '../entities'
19
21
  import { DateTimeConverter } from '../utils/datetime-util'
@@ -134,7 +136,7 @@ export async function renderOrientageGRN({ grnNo }, context: any) {
134
136
  pack_qty: item.packQty ? item.packQty : 0,
135
137
  actual_pack_qty: item.actualPackQty ? item.actualPackQty : 0,
136
138
  container_no: foundGAN.containerNo ? foundGAN.containerNo : '',
137
- aux_value_3: item.product.auxValue3 ? item.product.auxValue3 : '',
139
+ aux_value_3: matchedProductDetail?.auxValue3 ? matchedProductDetail.auxValue3 : '',
138
140
  product_volume: matchedProductDetail
139
141
  ? matchedProductDetail?.volume
140
142
  ? matchedProductDetail.volume
@@ -138,6 +138,7 @@ export async function renderRODO({ doNo }, context: any) {
138
138
  product_batch: inventory.batchId,
139
139
  product_qty: targetInventory.releaseQty,
140
140
  product_weight: targetInventory.releaseWeight,
141
+ product_gross_weight: inventory.product.grossWeight,
141
142
  product_uom_value: targetInventory.releaseUomValue,
142
143
  product_uom: inventory.uom,
143
144
  remark: targetInventory.remark,
@@ -387,7 +387,7 @@ export class WorksheetController {
387
387
  type: string,
388
388
  additionalProps: Partial<Worksheet> = {}
389
389
  ): Promise<Worksheet> {
390
- let refOrderType: string = this.getRefOrderField(refOrder)
390
+ let refOrderType: string = await this.getRefOrderField(refOrder)
391
391
  const bizplace: Bizplace = await this.extractBizplaceFromRefOrder(refOrder)
392
392
 
393
393
  const worksheet: Partial<Worksheet> = {
@@ -676,7 +676,7 @@ export class WorksheetController {
676
676
  'worksheetDetails.targetVas'
677
677
  ])
678
678
 
679
- const worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
679
+ let worksheetDetails: WorksheetDetail[] = worksheet.worksheetDetails
680
680
 
681
681
  worksheetDetails
682
682
  .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)
@@ -687,7 +687,7 @@ export class WorksheetController {
687
687
  await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)
688
688
 
689
689
  if (worksheetType === WORKSHEET_TYPE.UNLOADING) {
690
- const targetProducts: OrderProduct[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {
690
+ let targetProducts: OrderProduct[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {
691
691
  let targetProduct: OrderProduct = wsd.targetProduct
692
692
  targetProduct.status = ORDER_PRODUCT_STATUS.TERMINATED
693
693
  targetProduct.updater = this.user
@@ -696,7 +696,7 @@ export class WorksheetController {
696
696
 
697
697
  await this.updateOrderTargets(targetProducts)
698
698
  } else if (worksheetType === WORKSHEET_TYPE.VAS) {
699
- const targetVASs: OrderVas[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {
699
+ let targetVASs: OrderVas[] = worksheet.worksheetDetails.map((wsd: WorksheetDetail) => {
700
700
  let targetVAS: OrderVas = wsd.targetVas
701
701
  targetVAS.status = ORDER_VAS_STATUS.TERMINATED
702
702
  targetVAS.updater = this.user
@@ -712,7 +712,7 @@ export class WorksheetController {
712
712
  worksheetType === WORKSHEET_TYPE.WAREHOUSE_RETURN ||
713
713
  worksheetType === WORKSHEET_TYPE.UNLOADING_RETURN
714
714
  ) {
715
- const targetInventories: OrderInventory[] = worksheet.worksheetDetails
715
+ let targetInventories: OrderInventory[] = worksheet.worksheetDetails
716
716
  .filter((wsd: WorksheetDetail) => wsd.status !== ORDER_INVENTORY_STATUS.REPLACED)
717
717
  .map((wsd: WorksheetDetail) => {
718
718
  let targetInventory: OrderInventory = wsd.targetInventory
@@ -0,0 +1,22 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { OrderInventory } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { PickingWorksheetController } from '../../../../controllers/'
8
+ import { Worksheet, WorksheetDetail } from '../../../../entities'
9
+
10
+ import { generatePickingWorksheet } from './generate-release-good-worksheet'
11
+
12
+ export const generateMultipleReleaseGoodWorksheetResolver = {
13
+ async generateMultipleReleaseGoodWorksheet(_: any, { releaseGoodNos }, context: any) {
14
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
15
+
16
+ for (let idx = 0; idx < releaseGoodNos.length; idx++) {
17
+ await generatePickingWorksheet(tx, domain, user, releaseGoodNos[idx])
18
+ }
19
+
20
+ return true
21
+ }
22
+ }
@@ -1,7 +1,9 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
4
  import { OrderInventory } from '@things-factory/sales-base'
3
5
  import { Domain } from '@things-factory/shell'
4
- import { EntityManager } from 'typeorm'
6
+
5
7
  import { PickingWorksheetController } from '../../../../controllers/'
6
8
  import { Worksheet, WorksheetDetail } from '../../../../entities'
7
9
 
@@ -4,6 +4,7 @@ import { generateCycleCountWorksheetResolver } from './generate-cycle-count-work
4
4
  import { generatePartialPutawayWorksheetResolver } from './generate-partial-putaway-worksheet'
5
5
  import { generatePutawayWorksheetResolver } from './generate-putaway-worksheet'
6
6
  import { generateReleaseGoodWorksheetResolver } from './generate-release-good-worksheet'
7
+ import { generateMultipleReleaseGoodWorksheetResolver } from './generate-multiple-release-good-worksheet'
7
8
  import { generateVasOrderWorksheetResolver } from './generate-vas-order-worksheet'
8
9
  import { generateReturnOrderWorksheetResolver } from './generate-return-order-worksheet'
9
10
  import { generatePartialPutawayReturnWorksheetResolver } from './generate-partial-putaway-return-worksheet'
@@ -15,6 +16,7 @@ export const Mutations = {
15
16
  ...generatePartialPutawayWorksheetResolver,
16
17
  ...generatePutawayWorksheetResolver,
17
18
  ...generateReleaseGoodWorksheetResolver,
19
+ ...generateMultipleReleaseGoodWorksheetResolver,
18
20
  ...generateVasOrderWorksheetResolver,
19
21
  ...generateReturnOrderWorksheetResolver,
20
22
  ...generatePartialPutawayReturnWorksheetResolver
@@ -1,9 +1,9 @@
1
- import { EntityManager, In, SelectQueryBuilder } from 'typeorm'
1
+ import { EntityManager, SelectQueryBuilder } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
5
5
  import { MarketplaceOrder, MarketplaceOrderItem, MarketplaceOrderShipping } from '@things-factory/marketplace-base'
6
- import { ORDER_INVENTORY_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
6
+ import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
7
7
  import { Domain } from '@things-factory/shell'
8
8
  import { Inventory, Location } from '@things-factory/warehouse-base'
9
9
 
@@ -11,7 +11,6 @@ import { WORKSHEET_TYPE } from '../../../constants'
11
11
  import { SellercraftController } from '../../../controllers'
12
12
  import { Worksheet, WorksheetDetail } from '../../../entities'
13
13
  import { fetchExecutingWorksheet } from '../../../utils'
14
- import { ORDER_STATUS } from '@things-factory/sales-base'
15
14
 
16
15
  export const packingWorksheetResolver = {
17
16
  async packingWorksheet(_: any, { releaseGoodNo }, context: any) {
@@ -30,12 +29,16 @@ export const packingWorksheetResolver = {
30
29
  where: { domain, name: releaseGoodNo }
31
30
  })
32
31
 
33
- const qb: SelectQueryBuilder<OrderInventory> = tx.getRepository(OrderInventory).createQueryBuilder('orderInventory')
32
+ const qb: SelectQueryBuilder<OrderInventory> = tx
33
+ .getRepository(OrderInventory)
34
+ .createQueryBuilder('orderInventory')
34
35
  qb.innerJoinAndSelect('orderInventory.releaseGood', 'releaseGood')
35
36
  .innerJoinAndSelect('releaseGood.bizplace', 'bizplace')
36
37
  .innerJoinAndSelect('bizplace.domain', 'domain')
37
38
  .where('orderInventory.domain_id = :domainId', { domainId: domain.id })
38
- .andWhere('orderInventory.status IN (:...orderInventoryStatus)', { orderInventoryStatus: [ORDER_INVENTORY_STATUS.PACKING, ORDER_INVENTORY_STATUS.PACKED] })
39
+ .andWhere('orderInventory.status IN (:...orderInventoryStatus)', {
40
+ orderInventoryStatus: [ORDER_INVENTORY_STATUS.PACKING, ORDER_INVENTORY_STATUS.PACKED]
41
+ })
39
42
  .andWhere('orderInventory.bin_location_id = :locationId', { locationId: binLocation.id })
40
43
  .andWhere('releaseGood.status = :status', { status: ORDER_STATUS.PACKING })
41
44
 
@@ -138,6 +141,7 @@ export const packingWorksheetResolver = {
138
141
  bizplaceName: releaseGood.bizplace.name,
139
142
  refNo: releaseGood.refNo,
140
143
  refNo2: releaseGood.refNo2,
144
+ refNo3: releaseGood.refNo3,
141
145
  partnerDomainId: releaseGood.bizplace?.domain.id,
142
146
  startedAt: worksheet.startedAt,
143
147
  shippingProvider: shippingProvider ? shippingProvider : '',
@@ -52,11 +52,14 @@ export async function activatePicking(
52
52
  where: { orderNo: releaseGood.refNo, domain: companyDomain },
53
53
  relations: ['marketplaceStore']
54
54
  })
55
- const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
56
55
 
57
- if (marketplaceStore.isAutoUpdateShipment) {
58
- const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
59
- await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
56
+ if (marketplaceOrder) {
57
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
58
+
59
+ if (marketplaceStore.isAutoUpdateShipment) {
60
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
61
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
62
+ }
60
63
  }
61
64
  }
62
65
  }
@@ -45,7 +45,7 @@ export async function completePicking(
45
45
  releaseGoodNo: string
46
46
  ): Promise<void> {
47
47
  const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
48
- const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
48
+ let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
49
49
  where: { domain, name: releaseGoodNo },
50
50
  relations: [
51
51
  'bizplace',
@@ -53,6 +53,7 @@ export async function completePicking(
53
53
  'bizplace.company',
54
54
  'bizplace.company.domain',
55
55
  'orderInventories',
56
+ 'orderInventories.inventory',
56
57
  'orderInventories.product'
57
58
  ]
58
59
  })
@@ -84,13 +85,13 @@ export async function completePicking(
84
85
 
85
86
  if (sellercraft) {
86
87
  const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
87
- await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
88
+ releaseGood = await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
88
89
  await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
89
90
  } else {
90
91
  const companyDomain: Domain = releaseGood.bizplace.company.domain
91
92
  let marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
92
93
  where: { orderNo: releaseGood.refNo, domain: companyDomain },
93
- relations: ['marketplaceStore']
94
+ relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
94
95
  })
95
96
  const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
96
97
  let eTraxOption: boolean
@@ -100,11 +101,6 @@ export async function completePicking(
100
101
  await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
101
102
  }
102
103
 
103
- marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
104
- where: { orderNo: releaseGood.refNo },
105
- relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
106
- })
107
-
108
104
  if (!marketplaceOrder)
109
105
  throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue')
110
106
  eTraxOption = marketplaceOrder?.marketplaceStore.eTrax
@@ -1,6 +1,7 @@
1
1
  import { EntityManager, getRepository } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
+ import { ReleaseGood, OrderInventory } from '@things-factory/sales-base'
4
5
  import { Setting } from '@things-factory/setting-base'
5
6
  import { Domain } from '@things-factory/shell'
6
7
 
@@ -10,69 +11,79 @@ import { pickingWorksheet } from '../picking-worksheet'
10
11
  import { activatePicking } from './activate-picking'
11
12
 
12
13
  export const fetchAndAssignPickingTaskResolver = {
13
- async fetchAndAssignPickingTask(_: any, {}, context: any) {
14
- const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
15
- const assignee: User = await tx.getRepository(User).findOne(user.id, { relations: ['domains'] })
16
- if ((assignee?.domains || []).every((userDomain: Domain) => userDomain.id !== domain.id))
17
- throw new Error('Target user is not belong to current domain')
14
+ async fetchAndAssignPickingTask(_: any, { }, context: any) {
15
+ try {
16
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
17
+ const assignee: User = await tx.getRepository(User).findOne(user.id, { relations: ['domains'] })
18
+ if ((assignee?.domains || []).every((userDomain: Domain) => userDomain.id !== domain.id))
19
+ throw new Error('Target user is not belong to current domain')
18
20
 
19
- if (!assignee) throw new Error('failed to find target user')
21
+ if (!assignee) throw new Error('failed to find target user')
20
22
 
21
- let worksheet: Worksheet
22
- worksheet = await tx.getRepository(Worksheet).findOne({
23
- relations: ['releaseGood'],
24
- where: [
25
- {
26
- domain,
27
- type: WORKSHEET_TYPE.PICKING,
28
- status: WORKSHEET_STATUS.EXECUTING,
29
- assignee: assignee
30
- },
31
- {
32
- domain,
33
- type: WORKSHEET_TYPE.PICKING,
34
- status: WORKSHEET_STATUS.DEACTIVATED,
35
- assignee: assignee
36
- }
37
- ],
38
- order: {
39
- name: 'ASC'
40
- }
41
- })
23
+ let worksheet: any
24
+ let worksheetQb = await tx.getRepository(Worksheet).createQueryBuilder('ws')
25
+ .select('ws.id')
26
+ .addSelect('ws.name')
27
+ .addSelect('ws.status')
28
+ .addSelect('ws.release_good_id')
29
+ .where('(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id =:assignee AND (ws.status = :status1 OR ws.status = :status2))', { domain_id: domain.id, type: WORKSHEET_TYPE.PICKING, assignee: assignee.id, status1: WORKSHEET_STATUS.EXECUTING, status2: WORKSHEET_STATUS.DEACTIVATED })
30
+ .andWhere(qb => {
31
+ const subQuery = qb
32
+ .subQuery()
33
+ .select('COUNT(*) AS totalPS')
34
+ .from(OrderInventory, 'OrderInventory')
35
+ .where('OrderInventory.release_good_id = ws.release_good_id')
36
+ .andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
37
+ .groupBy('OrderInventory.release_good_id')
38
+ .having('COUNT(*) > 0')
39
+ .getQuery()
40
+ return 'NOT EXISTS ' + subQuery
41
+ })
42
42
 
43
- if (!worksheet) {
44
- worksheet = await tx.getRepository(Worksheet).findOne({
45
- relations: ['releaseGood'],
46
- where: [
47
- {
48
- domain,
49
- type: WORKSHEET_TYPE.PICKING,
50
- status: WORKSHEET_STATUS.EXECUTING,
51
- assignee: null
52
- },
53
- {
54
- domain,
55
- type: WORKSHEET_TYPE.PICKING,
56
- status: WORKSHEET_STATUS.DEACTIVATED,
57
- assignee: null
58
- }
59
- ]
60
- })
43
+ worksheet = await worksheetQb.getRawOne();
61
44
 
62
- await getRepository(Worksheet).update({ id: worksheet.id }, { assignee: assignee })
63
- }
45
+ if (!worksheet) {
46
+ let worksheetQb = await tx.getRepository(Worksheet).createQueryBuilder('ws')
47
+ .select('ws.id')
48
+ .addSelect('ws.name')
49
+ .addSelect('ws.status')
50
+ .addSelect('ws.release_good_id')
51
+ .where('(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id IS NULL AND (ws.status = :status1 OR ws.status = :status2))', { domain_id: domain.id, type: WORKSHEET_TYPE.PICKING, status1: WORKSHEET_STATUS.EXECUTING, status2: WORKSHEET_STATUS.DEACTIVATED })
52
+ .andWhere(qb => {
53
+ const subQuery = qb
54
+ .subQuery()
55
+ .select('COUNT(*) AS totalPS')
56
+ .from(OrderInventory, 'OrderInventory')
57
+ .where('OrderInventory.release_good_id = ws.release_good_id')
58
+ .andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
59
+ .groupBy('OrderInventory.release_good_id')
60
+ .having('COUNT(*) > 0')
61
+ .getQuery()
62
+ return 'NOT EXISTS ' + subQuery
63
+ })
64
+
65
+ worksheet = await worksheetQb.getRawOne();
66
+
67
+ if (!worksheet) throw new Error('no suitable worksheet found')
68
+ await getRepository(Worksheet).update({ id: worksheet.id }, { assignee: assignee })
69
+ }
64
70
 
65
- if (worksheet.status == WORKSHEET_STATUS.DEACTIVATED) await activatePicking(tx, domain, user, worksheet.name)
71
+ if (worksheet.ws_status == WORKSHEET_STATUS.DEACTIVATED) await activatePicking(tx, domain, user, worksheet.ws_name)
66
72
 
67
- const locationSortingRules: Setting = await tx.getRepository(Setting).findOne({
68
- where: { domain, name: 'rule-for-picking-product' }
69
- })
73
+ const locationSortingRules: Setting = await tx.getRepository(Setting).findOne({
74
+ where: { domain, name: 'rule-for-picking-product' }
75
+ })
70
76
 
71
- const sortingRule = JSON.parse(locationSortingRules.value)
72
- const locationSortingRule = Object.keys(sortingRule).map(field => {
73
- return { name: field, desc: sortingRule[field] === 'DESC' }
74
- })
77
+ const sortingRule = JSON.parse(locationSortingRules.value)
78
+ const locationSortingRule = Object.keys(sortingRule).map(field => {
79
+ return { name: field, desc: sortingRule[field] === 'DESC' }
80
+ })
75
81
 
76
- return await pickingWorksheet(domain, worksheet.releaseGood.name, locationSortingRule, tx)
82
+ const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne(worksheet.release_good_id)
83
+
84
+ return await pickingWorksheet(domain, releaseGood.name, locationSortingRule, tx)
85
+ } catch (error) {
86
+ throw error
87
+ }
77
88
  }
78
89
  }
@@ -90,6 +90,7 @@ export async function pickingWorksheet(
90
90
  startedAt: worksheet.startedAt,
91
91
  refNo: releaseGood.refNo,
92
92
  refNo2: releaseGood.refNo2,
93
+ refNo3: releaseGood.refNo3,
93
94
  releaseGood
94
95
  },
95
96
  worksheetDetailInfos: worksheetDetails.map(async (pickingWSD: WorksheetDetail) => {
@@ -1,11 +1,13 @@
1
- import { Domain } from '@things-factory/shell'
2
1
  import { getRepository } from 'typeorm'
2
+
3
3
  import { Bizplace } from '@things-factory/biz-base'
4
- import { fetchExecutingWorksheet } from '../../../utils'
4
+ import { OrderInventory, ReturnOrder } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
5
6
  import { Inventory } from '@things-factory/warehouse-base'
6
- import { ReturnOrder, OrderInventory } from '@things-factory/sales-base'
7
+
7
8
  import { WORKSHEET_TYPE } from '../../../constants'
8
9
  import { Worksheet, WorksheetDetail } from '../../../entities'
10
+ import { fetchExecutingWorksheet } from '../../../utils'
9
11
 
10
12
  export const putawayReturningWorksheetResolver = {
11
13
  async putawayReturningWorksheet(_: any, { returnOrderNo }, context: any) {
@@ -32,6 +34,7 @@ export const putawayReturningWorksheetResolver = {
32
34
  [
33
35
  'bizplace',
34
36
  'returnOrder',
37
+ 'bufferLocation',
35
38
  'worksheetDetails',
36
39
  'worksheetDetails.targetInventory',
37
40
  'worksheetDetails.targetInventory.inventory',
@@ -49,7 +52,10 @@ export const putawayReturningWorksheetResolver = {
49
52
  bizplaceName: returnOrder.bizplace.name,
50
53
  partnerDomainId: customerBizplace?.domain.id,
51
54
  customerCompanyDomainId: customerCompanyDomain.id,
55
+ bufferLocation: worksheet?.bufferLocation.name,
52
56
  refNo: returnOrder.refNo,
57
+ refNo2: returnOrder.refNo2,
58
+ refNo3: returnOrder.refNo3,
53
59
  startedAt: worksheet.startedAt
54
60
  },
55
61
  worksheetDetailInfos: worksheet.worksheetDetails.map(async (putawayWSD: WorksheetDetail) => {
@@ -1,11 +1,13 @@
1
- import { ArrivalNotice, OrderInventory } from '@things-factory/sales-base'
1
+ import { getRepository } from 'typeorm'
2
+
2
3
  import { Bizplace } from '@things-factory/biz-base'
4
+ import { ArrivalNotice, OrderInventory } from '@things-factory/sales-base'
3
5
  import { Domain } from '@things-factory/shell'
4
- import { getRepository } from 'typeorm'
5
- import { fetchExecutingWorksheet } from '../../../utils'
6
6
  import { Inventory } from '@things-factory/warehouse-base'
7
+
7
8
  import { WORKSHEET_TYPE } from '../../../constants'
8
9
  import { Worksheet, WorksheetDetail } from '../../../entities'
10
+ import { fetchExecutingWorksheet } from '../../../utils'
9
11
 
10
12
  export const putawayWorksheetResolver = {
11
13
  async putawayWorksheet(_: any, { arrivalNoticeNo }, context: any) {
@@ -31,6 +33,7 @@ export const putawayWorksheetResolver = {
31
33
  [
32
34
  'bizplace',
33
35
  'arrivalNotice',
36
+ 'bufferLocation',
34
37
  'worksheetDetails',
35
38
  'worksheetDetails.targetInventory',
36
39
  'worksheetDetails.targetInventory.inventory',
@@ -48,7 +51,10 @@ export const putawayWorksheetResolver = {
48
51
  bizplaceName: customerBizplace.name,
49
52
  partnerDomainId: customerBizplace?.domain.id,
50
53
  customerCompanyDomainId: customerCompanyDomain.id,
54
+ bufferLocation: worksheet?.bufferLocation.name,
51
55
  refNo: arrivalNotice.refNo,
56
+ refNo2: arrivalNotice.refNo2,
57
+ refNo3: arrivalNotice.refNo3,
52
58
  startedAt: worksheet.startedAt
53
59
  },
54
60
  worksheetDetailInfos: worksheet.worksheetDetails.map(async (putawayWSD: WorksheetDetail) => {
@@ -1,10 +1,12 @@
1
- import { Domain } from '@things-factory/shell'
2
1
  import { getRepository } from 'typeorm'
3
- import { fetchExecutingWorksheet } from '../../../utils'
4
- import { Inventory } from '@things-factory/warehouse-base'
2
+
5
3
  import { OrderInventory, ReleaseGood } from '@things-factory/sales-base'
4
+ import { Domain } from '@things-factory/shell'
5
+ import { Inventory } from '@things-factory/warehouse-base'
6
+
6
7
  import { WORKSHEET_TYPE } from '../../../constants'
7
8
  import { Worksheet, WorksheetDetail } from '../../../entities'
9
+ import { fetchExecutingWorksheet } from '../../../utils'
8
10
 
9
11
  export const returnWorksheetResolver = {
10
12
  async returnWorksheet(_: any, { releaseGoodNo }, context: any) {
@@ -41,6 +43,8 @@ export const returnWorksheetResolver = {
41
43
  partnerDomainId: worksheet?.bizplace.domain.id,
42
44
  customerCompanyDomainId: customerCompanyDomain.id,
43
45
  refNo: releaseGood.refNo,
46
+ refNo2: releaseGood.refNo2,
47
+ refNo3: releaseGood.refNo3,
44
48
  startedAt: worksheet.startedAt
45
49
  },
46
50
  worksheetDetailInfos: worksheet.worksheetDetails.map((returnWSD: WorksheetDetail) => {
@@ -1,6 +1,8 @@
1
- import { OrderInventory, ORDER_STATUS, ORDER_INVENTORY_STATUS, ReleaseGood } from '@things-factory/sales-base'
2
- import { Domain } from '@things-factory/shell'
3
1
  import { getRepository, SelectQueryBuilder } from 'typeorm'
2
+
3
+ import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
4
6
  import { WORKSHEET_TYPE } from '../../../constants'
5
7
  import { fetchExecutingBatchWorksheet } from '../../../utils'
6
8
 
@@ -55,6 +57,7 @@ export const sortingWorksheetResolver = {
55
57
  startedAt: worksheet.startedAt,
56
58
  refNo: releaseGood.refNo,
57
59
  refNo2: releaseGood.refNo2,
60
+ refNo3: releaseGood.refNo3,
58
61
  releaseGood
59
62
  },
60
63
  worksheetDetailInfos: items.map((item: any) => {
@@ -1,18 +1,16 @@
1
1
  import { activateUnloadingResolver } from './activate-unloading'
2
- import { unloadResolver } from './unload'
3
- import { scanProductUnloadResolver } from './scan-product-unload'
4
- import { undoUnloadingResolver } from './undo-unloading'
5
- import { undoProductScanUnloadResolver } from './undo-product-scan-unload'
6
2
  import { completeProductScanUnloadResolver } from './complete-product-scan-unload'
7
3
  import { completeUnloadingResolver } from './complete-unloading'
8
4
  import { completeUnloadingPartiallyResolver } from './complete-unloading-partially'
5
+ import { scanProductUnloadResolver } from './scan-product-unload'
6
+ import { undoUnloadingResolver } from './undo-unloading'
7
+ import { unloadResolver } from './unload'
9
8
 
10
9
  export const Mutations = {
11
10
  ...activateUnloadingResolver,
12
11
  ...scanProductUnloadResolver,
13
12
  ...unloadResolver,
14
13
  ...undoUnloadingResolver,
15
- ...undoProductScanUnloadResolver,
16
14
  ...completeProductScanUnloadResolver,
17
15
  ...completeUnloadingResolver,
18
16
  ...completeUnloadingPartiallyResolver
@@ -1,12 +1,14 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
4
  import { Domain } from '@things-factory/shell'
3
- import { EntityManager } from 'typeorm'
5
+
4
6
  import { UnloadingWorksheetController } from '../../../../controllers'
5
7
 
6
8
  export const undoUnloadingResolver = {
7
- async undoUnloading(_: any, { worksheetDetailName, palletId }, context: any) {
9
+ async undoUnloading(_: any, { orderType, orderNo, inventoryIds }, context: any) {
8
10
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
9
- await undoUnloading(tx, domain, user, worksheetDetailName, palletId)
11
+ await undoUnloading(tx, domain, user, orderType, orderNo, inventoryIds)
10
12
  }
11
13
  }
12
14
 
@@ -14,9 +16,10 @@ async function undoUnloading(
14
16
  tx: EntityManager,
15
17
  domain: Domain,
16
18
  user: User,
17
- worksheetDetailName: string,
18
- palletId: string
19
+ orderType: string,
20
+ orderNo: string,
21
+ inventoryIds: [string]
19
22
  ): Promise<void> {
20
23
  const worksheetController: UnloadingWorksheetController = new UnloadingWorksheetController(tx, domain, user)
21
- await worksheetController.undoUnload(worksheetDetailName, palletId)
24
+ await worksheetController.undoUnload(orderType, orderNo, inventoryIds)
22
25
  }
@@ -1,10 +1,12 @@
1
- import { ArrivalNotice, OrderProduct } from '@things-factory/sales-base'
1
+ import { getRepository } from 'typeorm'
2
+
2
3
  import { Bizplace } from '@things-factory/biz-base'
4
+ import { ArrivalNotice, OrderProduct } from '@things-factory/sales-base'
3
5
  import { Domain } from '@things-factory/shell'
4
- import { getRepository } from 'typeorm'
5
- import { fetchExecutingWorksheet } from '../../../utils'
6
+
6
7
  import { WORKSHEET_TYPE } from '../../../constants'
7
8
  import { Worksheet, WorksheetDetail } from '../../../entities'
9
+ import { fetchExecutingWorksheet } from '../../../utils'
8
10
 
9
11
  export const unloadingWorksheetResolver = {
10
12
  async unloadingWorksheet(_: any, { arrivalNoticeNo }, context: any) {
@@ -64,6 +66,8 @@ export const unloadingWorksheetResolver = {
64
66
  bufferLocation: worksheet.bufferLocation.name,
65
67
  startedAt: worksheet.startedAt,
66
68
  refNo: arrivalNotice.refNo,
69
+ refNo2: arrivalNotice?.refNo2,
70
+ refNo3: arrivalNotice?.refNo3,
67
71
  looseItem: arrivalNotice.looseItem,
68
72
  orderVas: vasWorksheet ? vasWorksheet.worksheetDetails : null
69
73
  },
@@ -18,7 +18,8 @@ interface WorksheetInterface extends Worksheet {
18
18
  export const worksheetResolver = {
19
19
  async worksheet(_: any, { name }, context: any) {
20
20
  const { domain }: { domain: Domain } = context.state
21
- const worksheet: WorksheetInterface = (await getRepository(Worksheet).findOne({
21
+ let worksheet: WorksheetInterface
22
+ worksheet = (await getRepository(Worksheet).findOne({
22
23
  where: {
23
24
  domain,
24
25
  name
@@ -60,6 +61,33 @@ export const worksheetResolver = {
60
61
  ]
61
62
  })) as WorksheetInterface
62
63
 
64
+ if (!worksheet) {
65
+ worksheet = (await getRepository(Worksheet).findOne({
66
+ where: {
67
+ domain,
68
+ arrivalNotice: name
69
+ },
70
+ relations: [
71
+ 'domain',
72
+ 'bizplace',
73
+ 'bizplace.domain',
74
+ 'worksheetDetails',
75
+ 'worksheetDetails.targetProduct',
76
+ 'worksheetDetails.targetProduct.product',
77
+ 'worksheetDetails.targetInventory',
78
+ 'worksheetDetails.targetInventory.releaseGood',
79
+ 'worksheetDetails.targetInventory.product',
80
+ 'worksheetDetails.targetInventory.inventory',
81
+ 'worksheetDetails.targetInventory.inventory.product',
82
+ 'worksheetDetails.targetInventory.inventory.warehouse',
83
+ 'worksheetDetails.targetInventory.inventory.location',
84
+ 'worksheetDetails.targetInventory.inspectedLocation',
85
+ 'creator',
86
+ 'updater'
87
+ ]
88
+ })) as WorksheetInterface
89
+ }
90
+
63
91
  let pWorksheetPickingItemSorting = getRepository(Setting).findOne({
64
92
  where: { domain, category: 'location', name: 'rule-for-worksheet-release-goods-item' }
65
93
  })