@things-factory/sales-base 4.3.622 → 4.3.629

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.
@@ -49,84 +49,7 @@ export class ReturnOrderMutation {
49
49
  @Arg('returnOrder', type => NewReturnOrder, { nullable: true }) returnOrder: NewReturnOrder
50
50
  ): Promise<ReturnOrder> {
51
51
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
52
-
53
- const bizplace: Bizplace = await tx.getRepository(Bizplace).findOne(returnOrder.customerBizplaceId)
54
-
55
- let orderInventories: NewOrderInventory[] = returnOrder.orderInventories
56
- let foundInv = Inventory
57
-
58
- const mergedOrderInventories = orderInventories.reduce((acc, curr) => {
59
- let existingItem = acc.find(
60
- itm =>
61
- itm.product.id === curr.product.id &&
62
- itm.packingType === curr.packingType &&
63
- itm.productDetailId === curr.product.productDetailId &&
64
- itm.batchId === curr.batchId &&
65
- itm.packingSize === curr.packingSize
66
- )
67
-
68
- if (!existingItem) {
69
- acc.push(curr)
70
- } else {
71
- existingItem.returnQty = existingItem.returnQty + curr.returnQty
72
- existingItem.returnUomValue = existingItem.returnUomValue + curr.returnUomValue
73
- existingItem.remark = `${existingItem.remark} | ${curr.remark}`
74
- }
75
-
76
- return acc
77
- }, [])
78
-
79
- returnOrder.orderInventories = mergedOrderInventories
80
-
81
- let newReturnOrder: NewReturnOrder = {
82
- ...returnOrder,
83
- name: OrderNoGenerator.returnOrder(),
84
- domain,
85
- bizplace,
86
- status: ORDER_STATUS.PENDING,
87
- creator: user,
88
- updater: user
89
- }
90
-
91
- if (newReturnOrder.orderInventories[0].returnQty < 0) {
92
- throw new Error('invalid return quantity')
93
- }
94
-
95
- let createdReturnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).save(newReturnOrder)
96
-
97
- for (let moi of mergedOrderInventories) {
98
- let newOrderInv: OrderInventory = Object.assign({}, moi) as any
99
- newOrderInv.domain = domain
100
- newOrderInv.bizplace = bizplace
101
- newOrderInv.status = ORDER_INVENTORY_STATUS.PENDING
102
- newOrderInv.name = OrderNoGenerator.orderInventory()
103
- newOrderInv.returnOrder = createdReturnOrder
104
- newOrderInv.product = await tx.getRepository(Product).findOne(moi.product.id)
105
- newOrderInv.productDetail = await tx.getRepository(ProductDetail).findOne(moi.productDetail.id)
106
- newOrderInv.creator = user
107
- newOrderInv.updater = user
108
-
109
- if (newOrderInv.inventory?.id) {
110
- foundInv = await tx.getRepository(Inventory).findOne(newOrderInv.inventory.id)
111
- newOrderInv.inventory = foundInv
112
- }
113
-
114
- await tx.getRepository(OrderInventory).save(newOrderInv)
115
- }
116
-
117
- if (file?.length > 0) {
118
- const attachments: Attachment[] = file.map(attachment => {
119
- return {
120
- file: attachment,
121
- refBy: createdReturnOrder.id,
122
- category: ATTACHMENT_TYPE.RETURN_ORDER
123
- }
124
- })
125
- await createAttachments(null, { attachments }, context)
126
- }
127
-
128
- webhookHandler(createdReturnOrder, { id: createdReturnOrder.bizplace }, WebhookEventsEnum.ReturnOrderCreated)
129
- return createdReturnOrder
52
+ return await generateReturnOrder(tx, domain, user, returnOrder, file, context)
130
53
  }
131
54
 
132
55
  @Directive('@privilege(category: "order_customer", privilege: "mutation")')
@@ -507,3 +430,92 @@ export async function checkReturnOrder(tx: EntityManager, name: string, context:
507
430
 
508
431
  return foundReturnOrder
509
432
  }
433
+
434
+ export async function generateReturnOrder(
435
+ tx: EntityManager,
436
+ domain: Domain,
437
+ user: User,
438
+ returnOrder: NewReturnOrder,
439
+ file: FileUpload[],
440
+ context: any
441
+ ): Promise<ReturnOrder> {
442
+ const bizplace: Bizplace = await tx.getRepository(Bizplace).findOne(returnOrder.customerBizplaceId)
443
+
444
+ let orderInventories: NewOrderInventory[] = returnOrder.orderInventories
445
+ let foundInv = Inventory
446
+
447
+ const mergedOrderInventories = orderInventories.reduce((acc, curr) => {
448
+ let existingItem = acc.find(
449
+ itm =>
450
+ itm.product.id === curr.product.id &&
451
+ itm.packingType === curr.packingType &&
452
+ itm.productDetailId === curr.product.productDetailId &&
453
+ itm.batchId === curr.batchId &&
454
+ itm.packingSize === curr.packingSize
455
+ )
456
+
457
+ if (!existingItem) {
458
+ acc.push(curr)
459
+ } else {
460
+ existingItem.returnQty = existingItem.returnQty + curr.returnQty
461
+ existingItem.returnUomValue = existingItem.returnUomValue + curr.returnUomValue
462
+ existingItem.remark = `${existingItem.remark} | ${curr.remark}`
463
+ }
464
+
465
+ return acc
466
+ }, [])
467
+
468
+ returnOrder.orderInventories = mergedOrderInventories
469
+
470
+ let newReturnOrder: NewReturnOrder = {
471
+ ...returnOrder,
472
+ name: OrderNoGenerator.returnOrder(),
473
+ domain,
474
+ bizplace,
475
+ status: ORDER_STATUS.PENDING,
476
+ creator: user,
477
+ updater: user
478
+ }
479
+
480
+ if (newReturnOrder.orderInventories[0].returnQty < 0) {
481
+ throw new Error('invalid return quantity')
482
+ }
483
+
484
+ let createdReturnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).save(newReturnOrder)
485
+
486
+ for (let moi of mergedOrderInventories) {
487
+ let newOrderInv: OrderInventory = Object.assign({}, moi) as any
488
+ newOrderInv.domain = domain
489
+ newOrderInv.bizplace = bizplace
490
+ newOrderInv.status = ORDER_INVENTORY_STATUS.PENDING
491
+ newOrderInv.name = OrderNoGenerator.orderInventory()
492
+ newOrderInv.returnOrder = createdReturnOrder
493
+ newOrderInv.product = await tx.getRepository(Product).findOne(moi.product.id)
494
+ newOrderInv.productDetail = await tx.getRepository(ProductDetail).findOne(moi.productDetail.id)
495
+ newOrderInv.creator = user
496
+ newOrderInv.updater = user
497
+
498
+ if (newOrderInv.inventory?.id) {
499
+ foundInv = await tx.getRepository(Inventory).findOne(newOrderInv.inventory.id)
500
+ newOrderInv.inventory = foundInv
501
+ }
502
+
503
+ await tx.getRepository(OrderInventory).save(newOrderInv)
504
+ }
505
+
506
+ if (file?.length > 0) {
507
+ const attachments: Attachment[] = file.map(attachment => {
508
+ return {
509
+ file: attachment,
510
+ refBy: createdReturnOrder.id,
511
+ category: ATTACHMENT_TYPE.RETURN_ORDER
512
+ }
513
+ })
514
+ await createAttachments(null, { attachments }, context)
515
+ }
516
+
517
+ webhookHandler(createdReturnOrder, { id: createdReturnOrder.bizplace }, WebhookEventsEnum.ReturnOrderCreated)
518
+ return createdReturnOrder
519
+ }
520
+
521
+