@things-factory/sales-base 3.6.46 → 3.6.50

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 (94) hide show
  1. package/dist-server/entities/index.js +28 -22
  2. package/dist-server/entities/index.js.map +1 -1
  3. package/dist-server/entities/order-reverse-kitting.js +156 -0
  4. package/dist-server/entities/order-reverse-kitting.js.map +1 -0
  5. package/dist-server/entities/reverse-kitting-order.js +82 -0
  6. package/dist-server/entities/reverse-kitting-order.js.map +1 -0
  7. package/dist-server/graphql/resolvers/index.js +14 -11
  8. package/dist-server/graphql/resolvers/index.js.map +1 -1
  9. package/dist-server/graphql/resolvers/order-reverse-kitting/index.js +8 -0
  10. package/dist-server/graphql/resolvers/order-reverse-kitting/index.js.map +1 -0
  11. package/dist-server/graphql/resolvers/order-reverse-kitting/order-reverse-kitting.js +18 -0
  12. package/dist-server/graphql/resolvers/order-reverse-kitting/order-reverse-kitting.js.map +1 -0
  13. package/dist-server/graphql/resolvers/order-reverse-kitting/order-reverse-kittings.js +14 -0
  14. package/dist-server/graphql/resolvers/order-reverse-kitting/order-reverse-kittings.js.map +1 -0
  15. package/dist-server/graphql/resolvers/reverse-kitting-order/activate-reverse-kitting-order.js +31 -0
  16. package/dist-server/graphql/resolvers/reverse-kitting-order/activate-reverse-kitting-order.js.map +1 -0
  17. package/dist-server/graphql/resolvers/reverse-kitting-order/cancel-reverse-kitting-order.js +31 -0
  18. package/dist-server/graphql/resolvers/reverse-kitting-order/cancel-reverse-kitting-order.js.map +1 -0
  19. package/dist-server/graphql/resolvers/reverse-kitting-order/complete-reverse-kitting-order.js +34 -0
  20. package/dist-server/graphql/resolvers/reverse-kitting-order/complete-reverse-kitting-order.js.map +1 -0
  21. package/dist-server/graphql/resolvers/reverse-kitting-order/confirm-reverse-kitting-order.js +31 -0
  22. package/dist-server/graphql/resolvers/reverse-kitting-order/confirm-reverse-kitting-order.js.map +1 -0
  23. package/dist-server/graphql/resolvers/reverse-kitting-order/delete-reverse-kitting-order.js +30 -0
  24. package/dist-server/graphql/resolvers/reverse-kitting-order/delete-reverse-kitting-order.js.map +1 -0
  25. package/dist-server/graphql/resolvers/reverse-kitting-order/execute-reverse-kitting.js +94 -0
  26. package/dist-server/graphql/resolvers/reverse-kitting-order/execute-reverse-kitting.js.map +1 -0
  27. package/dist-server/graphql/resolvers/reverse-kitting-order/executing-reverse-kitting-order.js +37 -0
  28. package/dist-server/graphql/resolvers/reverse-kitting-order/executing-reverse-kitting-order.js.map +1 -0
  29. package/dist-server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-order.js +34 -0
  30. package/dist-server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-order.js.map +1 -0
  31. package/dist-server/graphql/resolvers/reverse-kitting-order/index.js +17 -0
  32. package/dist-server/graphql/resolvers/reverse-kitting-order/index.js.map +1 -0
  33. package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-inventories.js +35 -0
  34. package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-inventories.js.map +1 -0
  35. package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-order.js +32 -0
  36. package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-order.js.map +1 -0
  37. package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-orders.js +25 -0
  38. package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-orders.js.map +1 -0
  39. package/dist-server/graphql/types/index.js +22 -14
  40. package/dist-server/graphql/types/index.js.map +1 -1
  41. package/dist-server/graphql/types/order-reverse-kitting/index.js +14 -0
  42. package/dist-server/graphql/types/order-reverse-kitting/index.js.map +1 -0
  43. package/dist-server/graphql/types/order-reverse-kitting/new-order-reverse-kitting.js +31 -0
  44. package/dist-server/graphql/types/order-reverse-kitting/new-order-reverse-kitting.js.map +1 -0
  45. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-list.js +14 -0
  46. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-list.js.map +1 -0
  47. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-patch.js +32 -0
  48. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-patch.js.map +1 -0
  49. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting.js +37 -0
  50. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting.js.map +1 -0
  51. package/dist-server/graphql/types/reverse-kitting-order/index.js +47 -0
  52. package/dist-server/graphql/types/reverse-kitting-order/index.js.map +1 -0
  53. package/dist-server/graphql/types/reverse-kitting-order/new-reverse-kitting-order.js +17 -0
  54. package/dist-server/graphql/types/reverse-kitting-order/new-reverse-kitting-order.js.map +1 -0
  55. package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order-list.js +14 -0
  56. package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order-list.js.map +1 -0
  57. package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order-patch.js +17 -0
  58. package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order-patch.js.map +1 -0
  59. package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order.js +24 -0
  60. package/dist-server/graphql/types/reverse-kitting-order/reverse-kitting-order.js.map +1 -0
  61. package/dist-server/utils/inventory-util.js +145 -1
  62. package/dist-server/utils/inventory-util.js.map +1 -1
  63. package/package.json +11 -11
  64. package/server/entities/index.ts +33 -27
  65. package/server/entities/order-reverse-kitting.ts +116 -0
  66. package/server/entities/reverse-kitting-order.ts +68 -0
  67. package/server/graphql/resolvers/index.ts +14 -11
  68. package/server/graphql/resolvers/order-reverse-kitting/index.ts +9 -0
  69. package/server/graphql/resolvers/order-reverse-kitting/order-reverse-kitting.ts +19 -0
  70. package/server/graphql/resolvers/order-reverse-kitting/order-reverse-kittings.ts +16 -0
  71. package/server/graphql/resolvers/reverse-kitting-order/activate-reverse-kitting-order.ts +47 -0
  72. package/server/graphql/resolvers/reverse-kitting-order/cancel-reverse-kitting-order.ts +47 -0
  73. package/server/graphql/resolvers/reverse-kitting-order/complete-reverse-kitting-order.ts +59 -0
  74. package/server/graphql/resolvers/reverse-kitting-order/confirm-reverse-kitting-order.ts +47 -0
  75. package/server/graphql/resolvers/reverse-kitting-order/delete-reverse-kitting-order.ts +41 -0
  76. package/server/graphql/resolvers/reverse-kitting-order/execute-reverse-kitting.ts +125 -0
  77. package/server/graphql/resolvers/reverse-kitting-order/executing-reverse-kitting-order.ts +40 -0
  78. package/server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-order.ts +60 -0
  79. package/server/graphql/resolvers/reverse-kitting-order/index.ts +28 -0
  80. package/server/graphql/resolvers/reverse-kitting-order/reverse-kitting-inventories.ts +37 -0
  81. package/server/graphql/resolvers/reverse-kitting-order/reverse-kitting-order.ts +34 -0
  82. package/server/graphql/resolvers/reverse-kitting-order/reverse-kitting-orders.ts +30 -0
  83. package/server/graphql/types/index.ts +22 -14
  84. package/server/graphql/types/order-reverse-kitting/index.ts +13 -0
  85. package/server/graphql/types/order-reverse-kitting/new-order-reverse-kitting.ts +25 -0
  86. package/server/graphql/types/order-reverse-kitting/order-reverse-kitting-list.ts +8 -0
  87. package/server/graphql/types/order-reverse-kitting/order-reverse-kitting-patch.ts +26 -0
  88. package/server/graphql/types/order-reverse-kitting/order-reverse-kitting.ts +31 -0
  89. package/server/graphql/types/reverse-kitting-order/index.ts +46 -0
  90. package/server/graphql/types/reverse-kitting-order/new-reverse-kitting-order.ts +11 -0
  91. package/server/graphql/types/reverse-kitting-order/reverse-kitting-order-list.ts +8 -0
  92. package/server/graphql/types/reverse-kitting-order/reverse-kitting-order-patch.ts +11 -0
  93. package/server/graphql/types/reverse-kitting-order/reverse-kitting-order.ts +18 -0
  94. package/server/utils/inventory-util.ts +227 -3
@@ -0,0 +1,68 @@
1
+ import {
2
+ Column,
3
+ CreateDateColumn,
4
+ Entity,
5
+ Index,
6
+ ManyToOne,
7
+ OneToMany,
8
+ PrimaryGeneratedColumn,
9
+ UpdateDateColumn
10
+ } from 'typeorm'
11
+
12
+ import { User } from '@things-factory/auth-base'
13
+ import { Bizplace } from '@things-factory/biz-base'
14
+ import { Domain } from '@things-factory/shell'
15
+
16
+ import { OrderReverseKitting } from './order-reverse-kitting'
17
+
18
+ @Entity()
19
+ @Index(
20
+ 'ix_reverse-kitting-order_0',
21
+ (reverseKittingOrder: ReverseKittingOrder) => [reverseKittingOrder.domain, reverseKittingOrder.name],
22
+ { unique: true }
23
+ )
24
+ export class ReverseKittingOrder {
25
+ @PrimaryGeneratedColumn('uuid')
26
+ id: string
27
+
28
+ @ManyToOne(type => Domain)
29
+ domain: Domain
30
+
31
+ @ManyToOne(type => Bizplace)
32
+ bizplace: Bizplace
33
+
34
+ @Column()
35
+ name: string
36
+
37
+ @Column({
38
+ nullable: true
39
+ })
40
+ description: string
41
+
42
+ @OneToMany(type => OrderReverseKitting, orderReverseKitting => orderReverseKitting.reverseKittingOrder)
43
+ orderReverseKittings: OrderReverseKitting[]
44
+
45
+ @Column({
46
+ nullable: true
47
+ })
48
+ remark: String
49
+
50
+ @Column()
51
+ status: string
52
+
53
+ @CreateDateColumn()
54
+ createdAt: Date
55
+
56
+ @UpdateDateColumn()
57
+ updatedAt: Date
58
+
59
+ @ManyToOne(type => User, {
60
+ nullable: true
61
+ })
62
+ creator: User
63
+
64
+ @ManyToOne(type => User, {
65
+ nullable: true
66
+ })
67
+ updater: User
68
+ }
@@ -1,26 +1,27 @@
1
1
  import * as ArrivalNotice from './arrival-notice'
2
+ import * as Claim from './claim'
3
+ import * as ClaimDetail from './claim-detail'
4
+ import * as ClaimOrder from './claim-order'
2
5
  import * as CollectionOrder from './collection-order'
3
6
  import * as DeliveryOrder from './delivery-order'
4
- import * as Invoice from './invoice'
7
+ import * as GoodsReceivalNote from './goods-receival-note'
5
8
  import * as InventoryCheck from './inventory-check'
9
+ import * as Invoice from './invoice'
6
10
  import * as JobSheet from './job-sheet'
7
- import * as OrderProduct from './order-product'
8
11
  import * as OrderInventory from './order-inventory'
12
+ import * as OrderProduct from './order-product'
9
13
  import * as OrderVas from './order-vas'
14
+ import * as Others from './others'
10
15
  import * as PurchaseOrder from './purchase-order'
11
16
  import * as PurchaseOrderOtherCharge from './purchase-order-other-charge'
12
- import * as ShippingOrder from './shipping-order'
13
17
  import * as ReleaseGood from './release-good'
14
- import * as ReturnOrder from './return-order'
15
18
  import * as RetailReplenishmentOrder from './retail-replenishment-order'
19
+ import * as ReturnOrder from './return-order'
20
+ import * as ReverseKittingOrder from './reverse-kitting-order'
21
+ import * as ShippingOrder from './shipping-order'
16
22
  import * as TransferOrder from './transfer-order'
17
23
  import * as Vas from './vas'
18
- import * as Claim from './claim'
19
- import * as ClaimDetail from './claim-detail'
20
- import * as ClaimOrder from './claim-order'
21
24
  import * as VasOrder from './vas-order'
22
- import * as GoodsReceivalNote from './goods-receival-note'
23
- import * as Others from './others'
24
25
 
25
26
  export const queries = [
26
27
  Invoice.Query,
@@ -45,7 +46,8 @@ export const queries = [
45
46
  ClaimOrder.Query,
46
47
  VasOrder.Query,
47
48
  GoodsReceivalNote.Query,
48
- Others.Query
49
+ Others.Query,
50
+ ReverseKittingOrder.Query
49
51
  ]
50
52
 
51
53
  export const mutations = [
@@ -71,5 +73,6 @@ export const mutations = [
71
73
  ClaimOrder.Mutation,
72
74
  VasOrder.Mutation,
73
75
  GoodsReceivalNote.Mutation,
74
- Others.Mutation
76
+ Others.Mutation,
77
+ ReverseKittingOrder.Mutation
75
78
  ]
@@ -0,0 +1,9 @@
1
+ import { orderReverseKittingResolver } from './order-reverse-kitting'
2
+ import { orderReverseKittingsResolver } from './order-reverse-kittings'
3
+
4
+ export const Query = {
5
+ ...orderReverseKittingResolver,
6
+ ...orderReverseKittingsResolver
7
+ }
8
+
9
+ export const Mutation = {}
@@ -0,0 +1,19 @@
1
+ import { getRepository } from 'typeorm'
2
+
3
+ import { Domain } from '@things-factory/shell'
4
+
5
+ import { OrderReverseKitting } from '../../../entities'
6
+
7
+ export const orderReverseKittingResolver = {
8
+ async orderReverseKitting(_: any, { name }, context: any) {
9
+ const { domain }: { domain: Domain } = context.state
10
+
11
+ return await getRepository(OrderReverseKitting).findOne({
12
+ where: {
13
+ domain,
14
+ name
15
+ },
16
+ relations: ['domain', 'reverseKittingOrder', 'vas', 'inventory', 'creator', 'updater']
17
+ })
18
+ }
19
+ }
@@ -0,0 +1,16 @@
1
+ import { getRepository } from 'typeorm'
2
+
3
+ import { convertListParams, ListParam } from '@things-factory/shell'
4
+
5
+ import { OrderReverseKitting } from '../../../entities'
6
+
7
+ export const orderReverseKittingsResolver = {
8
+ async orderReverseKittings(_: any, params: ListParam, context: any) {
9
+ const convertedParams = convertListParams(params)
10
+ const [items, total] = await getRepository(OrderReverseKitting).findAndCount({
11
+ ...convertedParams,
12
+ relations: ['domain', 'reverseKittingOrder', 'vas', 'inventory', 'creator', 'updater']
13
+ })
14
+ return { items, total }
15
+ }
16
+ }
@@ -0,0 +1,47 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { ORDER_STATUS, ORDER_VAS_STATUS } from '../../../constants'
7
+ import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
8
+
9
+ export const activateReverseKittingOrderResolver = {
10
+ async activateReverseKittingOrder(_: any, { name }, context: any) {
11
+ const { tx }: { tx: EntityManager } = context.state
12
+ const reverseKittingOrder: ReverseKittingOrder = await activateReverseKittingOrderFunction(name, context, tx)
13
+
14
+ return reverseKittingOrder
15
+ }
16
+ }
17
+
18
+ export async function activateReverseKittingOrderFunction(
19
+ name: string,
20
+ context: any,
21
+ tx?: EntityManager
22
+ ): Promise<ReverseKittingOrder> {
23
+ const { user, domain }: { user: User; domain: Domain } = context.state
24
+
25
+ const foundReverseKittingOrder: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).findOne({
26
+ where: { domain, name, status: ORDER_STATUS.READY_TO_EXECUTE },
27
+ relations: ['bizplace', 'orderReverseKittings', 'creator', 'updater']
28
+ })
29
+
30
+ let foundORKs: OrderReverseKitting[] = foundReverseKittingOrder.orderReverseKittings
31
+
32
+ if (!foundReverseKittingOrder) throw new Error(`Reverse kitting order doesn't exists.`)
33
+
34
+ // 1. Reverse Kitting Order Status change (PENDING => PENDING_RECEIVE)
35
+ const reverseKitting: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).save({
36
+ ...foundReverseKittingOrder,
37
+ status: ORDER_STATUS.EXECUTING,
38
+ updater: user
39
+ })
40
+
41
+ foundORKs = foundORKs.map((ork: OrderReverseKitting) => {
42
+ return { ...ork, status: ORDER_VAS_STATUS.PROCESSING }
43
+ })
44
+ await tx.getRepository(OrderReverseKitting).save(foundORKs)
45
+
46
+ return reverseKitting
47
+ }
@@ -0,0 +1,47 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { ORDER_STATUS, ORDER_VAS_STATUS } from '../../../constants'
7
+ import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
8
+
9
+ export const cancelReverseKittingOrderResolver = {
10
+ async cancelReverseKittingOrder(_: any, { name }, context: any) {
11
+ const { tx }: { tx: EntityManager } = context.state
12
+ const reverseKittingOrder: ReverseKittingOrder = await cancelReverseKittingOrderFunction(name, context, tx)
13
+
14
+ return reverseKittingOrder
15
+ }
16
+ }
17
+
18
+ export async function cancelReverseKittingOrderFunction(
19
+ name: string,
20
+ context: any,
21
+ tx?: EntityManager
22
+ ): Promise<ReverseKittingOrder> {
23
+ const { user, domain }: { user: User; domain: Domain } = context.state
24
+
25
+ const foundReverseKittingOrder: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).findOne({
26
+ where: { domain, name, status: ORDER_STATUS.READY_TO_EXECUTE },
27
+ relations: ['bizplace', 'orderReverseKittings', 'creator', 'updater']
28
+ })
29
+
30
+ let foundORKs: OrderReverseKitting[] = foundReverseKittingOrder.orderReverseKittings
31
+
32
+ if (!foundReverseKittingOrder) throw new Error(`Reverse kitting order doesn't exists.`)
33
+
34
+ // 1. Reverse Kitting Order Status change (PENDING => PENDING_RECEIVE)
35
+ const reverseKitting: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).save({
36
+ ...foundReverseKittingOrder,
37
+ status: ORDER_STATUS.CANCELLED,
38
+ updater: user
39
+ })
40
+
41
+ foundORKs = foundORKs.map((ork: OrderReverseKitting) => {
42
+ return { ...ork, status: ORDER_VAS_STATUS.CANCELLED }
43
+ })
44
+ await tx.getRepository(OrderReverseKitting).save(foundORKs)
45
+
46
+ return reverseKitting
47
+ }
@@ -0,0 +1,59 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+ import { Inventory, INVENTORY_TRANSACTION_TYPE } from '@things-factory/warehouse-base'
6
+
7
+ import { ORDER_STATUS, ORDER_VAS_STATUS } from '../../../constants'
8
+ import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
9
+ import { InventoryUtil } from '../../../utils'
10
+
11
+ export const completeReverseKittingOrderResolver = {
12
+ async completeReverseKittingOrder(_: any, { name }, context: any) {
13
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
14
+
15
+ let foundReverseKittingOrder: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).findOne({
16
+ where: { domain, name, status: ORDER_STATUS.EXECUTING },
17
+ relations: ['bizplace', 'orderReverseKittings', 'orderReverseKittings.inventory', 'creator', 'updater']
18
+ })
19
+
20
+ if (!foundReverseKittingOrder) throw new Error(foundReverseKittingOrder.name + ` not found`)
21
+
22
+ let orderReverseKittings: OrderReverseKitting[] = foundReverseKittingOrder.orderReverseKittings
23
+
24
+ await Promise.all(
25
+ orderReverseKittings.map(async orderReverseKitting => {
26
+ let inventory: Inventory = orderReverseKitting.inventory
27
+ inventory.qty = inventory.qty - orderReverseKitting.qty
28
+ inventory.uomValue = inventory.uomValue - orderReverseKitting.uomValue
29
+
30
+ await InventoryUtil.transactionInventory(
31
+ inventory,
32
+ foundReverseKittingOrder,
33
+ -orderReverseKitting.qty,
34
+ -orderReverseKitting.uomValue,
35
+ INVENTORY_TRANSACTION_TYPE.REVERSE_KITTING,
36
+ user,
37
+ tx
38
+ )
39
+ })
40
+ )
41
+
42
+ orderReverseKittings = orderReverseKittings.map(orderReverseKitting => {
43
+ return {
44
+ ...orderReverseKitting,
45
+ status: ORDER_VAS_STATUS.TERMINATED,
46
+ updater: user
47
+ }
48
+ })
49
+
50
+ await tx.getRepository(OrderReverseKitting).save(orderReverseKittings)
51
+
52
+ foundReverseKittingOrder.status = ORDER_STATUS.DONE
53
+ foundReverseKittingOrder.updater = user
54
+
55
+ await tx.getRepository(ReverseKittingOrder).save(foundReverseKittingOrder)
56
+
57
+ return true
58
+ }
59
+ }
@@ -0,0 +1,47 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { ORDER_STATUS, ORDER_VAS_STATUS } from '../../../constants'
7
+ import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
8
+
9
+ export const confirmReverseKittingOrderResolver = {
10
+ async confirmReverseKittingOrder(_: any, { name }, context: any) {
11
+ const { tx }: { tx: EntityManager } = context.state
12
+ const reverseKittingOrder: ReverseKittingOrder = await confirmReverseKittingOrderFunction(name, context, tx)
13
+
14
+ return reverseKittingOrder
15
+ }
16
+ }
17
+
18
+ export async function confirmReverseKittingOrderFunction(
19
+ name: string,
20
+ context: any,
21
+ tx?: EntityManager
22
+ ): Promise<ReverseKittingOrder> {
23
+ const { user, domain }: { user: User; domain: Domain } = context.state
24
+
25
+ const foundReverseKittingOrder: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).findOne({
26
+ where: { domain, name, status: ORDER_STATUS.PENDING },
27
+ relations: ['bizplace', 'orderReverseKittings', 'creator', 'updater']
28
+ })
29
+
30
+ let foundORKs: OrderReverseKitting[] = foundReverseKittingOrder.orderReverseKittings
31
+
32
+ if (!foundReverseKittingOrder) throw new Error(`Reverse kitting order doesn't exists.`)
33
+
34
+ // 1. Reverse Kitting Order Status change (PENDING => READY_TO_EXECUTE)
35
+ const reverseKitting: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).save({
36
+ ...foundReverseKittingOrder,
37
+ status: ORDER_STATUS.READY_TO_EXECUTE,
38
+ updater: user
39
+ })
40
+
41
+ foundORKs = foundORKs.map((ork: OrderReverseKitting) => {
42
+ return { ...ork, status: ORDER_VAS_STATUS.READY_TO_PROCESS }
43
+ })
44
+ await tx.getRepository(OrderReverseKitting).save(foundORKs)
45
+
46
+ return reverseKitting
47
+ }
@@ -0,0 +1,41 @@
1
+ import { EntityManager, In } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
7
+
8
+ export const deleteReverseKittingOrderResolver = {
9
+ async deleteReverseKittingOrder(_: any, { name }, context: any) {
10
+ const { tx, user, domain }: { tx: EntityManager; user: User; domain: Domain } = context.state
11
+
12
+ return await deleteReverseKittingOrder(tx, name, user, domain)
13
+ }
14
+ }
15
+
16
+ export async function deleteReverseKittingOrder(
17
+ tx: EntityManager,
18
+ name: string,
19
+ user: User,
20
+ domain: Domain
21
+ ): Promise<boolean> {
22
+ let foundReverseKittingOrder: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).findOne({
23
+ where: { domain, name },
24
+ relations: ['bizplace', 'orderReverseKittings', 'creator', 'updater']
25
+ })
26
+
27
+ if (!foundReverseKittingOrder) throw new Error(`Reverse kitting order doesn't exists.`)
28
+
29
+ const foundORKs: OrderReverseKitting[] = foundReverseKittingOrder.orderReverseKittings
30
+
31
+ // 1. delete order reverse kittings
32
+ const productIds = foundORKs.map((ork: OrderReverseKitting) => ork.id)
33
+ if (productIds.length) {
34
+ await tx.getRepository(OrderReverseKitting).delete({ id: In(productIds) })
35
+ }
36
+
37
+ // 2. delete Reverse Kitting Order
38
+ await tx.getRepository(ReverseKittingOrder).delete({ domain, name })
39
+
40
+ return true
41
+ }
@@ -0,0 +1,125 @@
1
+ import { EntityManager, Equal, In, Not } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Bizplace, getCompanyBizplace } from '@things-factory/biz-base'
5
+ import { Product, ProductDetail } from '@things-factory/product-base'
6
+ import { Domain } from '@things-factory/shell'
7
+ import {
8
+ Inventory,
9
+ INVENTORY_STATUS,
10
+ INVENTORY_TRANSACTION_TYPE,
11
+ InventoryNoGenerator,
12
+ Location,
13
+ LOCATION_TYPE,
14
+ Warehouse
15
+ } from '@things-factory/warehouse-base'
16
+
17
+ import { ORDER_VAS_STATUS } from '../../../constants'
18
+ import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
19
+ import { InventoryUtil } from '../../../utils'
20
+
21
+ export const executeReverseKittingResolver = {
22
+ async executeReverseKitting(_: any, { name, inventory }, context: any) {
23
+ const { tx }: { tx: EntityManager } = context.state
24
+ await executeReverseKittingFunction(name, inventory, context, tx)
25
+ }
26
+ }
27
+
28
+ export async function executeReverseKittingFunction(
29
+ name: string,
30
+ inventory: Partial<Inventory>,
31
+ context: any,
32
+ tx?: EntityManager
33
+ ): Promise<void> {
34
+ const { user, domain }: { user: User; domain: Domain } = context.state
35
+
36
+ let orderReverseKitting: OrderReverseKitting = await tx.getRepository(OrderReverseKitting).findOne({
37
+ where: {
38
+ name,
39
+ domain,
40
+ status: Not(Equal(ORDER_VAS_STATUS.READY_TO_PROCESS))
41
+ },
42
+ relations: ['bizplace', 'reverseKittingOrder', 'reverseKittingOrder.bizplace', 'inventory']
43
+ })
44
+
45
+ const foundReverseKittingOrder: ReverseKittingOrder = orderReverseKitting.reverseKittingOrder
46
+ if (!foundReverseKittingOrder) throw new Error(`Reverse kitting order doesn't exists.`)
47
+
48
+ const customerBizplace: Bizplace = foundReverseKittingOrder.bizplace
49
+ const customerCompanyBizplace: Bizplace = await getCompanyBizplace(null, null, customerBizplace.id)
50
+
51
+ const productDetail: ProductDetail = await tx.getRepository(ProductDetail).findOne({
52
+ where: {
53
+ domain: customerCompanyBizplace.domain,
54
+ id: inventory.productDetailId
55
+ },
56
+ relations: ['product']
57
+ })
58
+
59
+ const location: Location = await tx.getRepository(Location).findOne({
60
+ where: {
61
+ domain,
62
+ name: inventory.locationName,
63
+ type: In([LOCATION_TYPE.SHELF, LOCATION_TYPE.BUFFER, LOCATION_TYPE.FLOOR])
64
+ },
65
+ relations: ['warehouse']
66
+ })
67
+ if (!location) throw new Error(inventory.locationName + ' not exists')
68
+
69
+ const palletId: string = inventory.palletId
70
+ await InventoryUtil.checkPalletDuplication(inventory.palletId, domain, tx)
71
+
72
+ const product: Product = productDetail.product
73
+ const packingType: string = productDetail.packingType
74
+ const packingSize: number = productDetail.packingSize
75
+ const uom: string = productDetail.uom
76
+ const qty: number = inventory.qty
77
+ const uomValue: number = Math.round(qty * productDetail.uomValue * 100) / 100
78
+ const batchId: string = orderReverseKitting.inventory.batchId
79
+ const orderId: string = foundReverseKittingOrder.id
80
+ const warehouse: Warehouse = location.warehouse
81
+ const zone: string = location.zone
82
+
83
+ let newInventory: Partial<Inventory> = new Inventory()
84
+ newInventory.bizplace = customerBizplace
85
+ newInventory.name = InventoryNoGenerator.inventoryName()
86
+ newInventory.orderVasId = orderReverseKitting.id
87
+ newInventory.palletId = palletId
88
+ newInventory.batchId = batchId
89
+ newInventory.product = product
90
+ newInventory.packingType = packingType
91
+ newInventory.packingSize = packingSize
92
+ newInventory.uom = uom
93
+ newInventory.qty = qty
94
+ newInventory.uomValue = uomValue
95
+ newInventory.refOrderId = orderId
96
+ newInventory.warehouse = warehouse
97
+ newInventory.location = location
98
+ newInventory.zone = zone
99
+ newInventory.status = INVENTORY_STATUS.STORED
100
+ newInventory.domain = domain
101
+ newInventory.creator = user
102
+ newInventory.updater = user
103
+
104
+ newInventory = await InventoryUtil.transactionInventory(
105
+ newInventory,
106
+ foundReverseKittingOrder,
107
+ newInventory.qty,
108
+ newInventory.uomValue,
109
+ INVENTORY_TRANSACTION_TYPE.REVERSE_KITTING,
110
+ user,
111
+ tx
112
+ )
113
+
114
+ let operationGuide: any = JSON.parse(orderReverseKitting.operationGuide)
115
+ let productCombinationSets: any[] = operationGuide.data.productCombinationSets
116
+ operationGuide.data.productCombinationSets = productCombinationSets.map(item => {
117
+ if (item.productDetailId == inventory.productDetailId) {
118
+ item.actualQty++
119
+ }
120
+ return item
121
+ })
122
+ orderReverseKitting.operationGuide = JSON.stringify(operationGuide)
123
+
124
+ await tx.getRepository(OrderReverseKitting).save(orderReverseKitting)
125
+ }
@@ -0,0 +1,40 @@
1
+ import { getRepository, In } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { getPermittedBizplaceIds } from '@things-factory/biz-base'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { ORDER_STATUS } from '../../../constants'
8
+ import { ReverseKittingOrder } from '../../../entities'
9
+
10
+ export const executingReverseKittingOrderResolver = {
11
+ async executingReverseKittingOrder(_: any, { name }, context: any) {
12
+ const { domain, user }: { domain: Domain; user: User } = context.state
13
+
14
+ const reverseKittingOrder: ReverseKittingOrder = await getRepository(ReverseKittingOrder).findOne({
15
+ where: {
16
+ domain,
17
+ name,
18
+ status: ORDER_STATUS.EXECUTING,
19
+ bizplace: In(await getPermittedBizplaceIds(domain, user))
20
+ },
21
+ relations: [
22
+ 'domain',
23
+ 'bizplace',
24
+ 'orderReverseKittings',
25
+ 'orderReverseKittings.vas',
26
+ 'orderReverseKittings.inventory',
27
+ 'orderReverseKittings.inventory.product',
28
+ 'orderReverseKittings.inventory.location',
29
+ 'orderReverseKittings.inventory.warehouse',
30
+ 'orderReverseKittings.targetProduct',
31
+ 'creator',
32
+ 'updater'
33
+ ]
34
+ })
35
+
36
+ if (!reverseKittingOrder) throw new Error(`Reverse Kitting Order not exists`)
37
+
38
+ return reverseKittingOrder
39
+ }
40
+ }
@@ -0,0 +1,60 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { Bizplace } from '@things-factory/biz-base'
5
+ import { Domain } from '@things-factory/shell'
6
+ import { Inventory } from '@things-factory/warehouse-base'
7
+
8
+ import { ORDER_STATUS, ORDER_TYPES, ORDER_VAS_STATUS } from '../../../constants'
9
+ import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
10
+ import { OrderNoGenerator } from '../../../utils/order-no-generator'
11
+
12
+ export const generateReverseKittingOrder = {
13
+ async generateReverseKittingOrder(_: any, { reverseKittingOrder }, context: any) {
14
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
15
+
16
+ const customerBizplace: Bizplace = await tx.getRepository(Bizplace).findOne({
17
+ where: {
18
+ id: reverseKittingOrder.customerBizplaceId
19
+ }
20
+ })
21
+
22
+ if (!customerBizplace) throw new Error('company is not found')
23
+
24
+ let orderReverseKittings: OrderReverseKitting[] = reverseKittingOrder.orderReverseKittings
25
+
26
+ // 1. Create reverse kitting order
27
+ const createdReverseKittingOrder: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).save({
28
+ ...reverseKittingOrder,
29
+ name: OrderNoGenerator.vasOrder(),
30
+ domain,
31
+ bizplace: customerBizplace,
32
+ status: ORDER_STATUS.PENDING,
33
+ creator: user,
34
+ updater: user
35
+ })
36
+
37
+ // 2. Create Reverse Kitting Order Items
38
+ orderReverseKittings = await Promise.all(
39
+ orderReverseKittings.map(async (ork: OrderReverseKitting) => {
40
+ if (ork?.inventory?.id) {
41
+ ork.inventory = await tx.getRepository(Inventory).findOne(ork.inventory.id)
42
+ }
43
+ return {
44
+ ...ork,
45
+ domain,
46
+ name: OrderNoGenerator.orderVas(),
47
+ reverseKittingOrder: createdReverseKittingOrder,
48
+ bizplace: customerBizplace,
49
+ type: ORDER_TYPES.VAS_ORDER,
50
+ status: ORDER_VAS_STATUS.PENDING,
51
+ creator: user,
52
+ updater: user
53
+ }
54
+ })
55
+ )
56
+ await tx.getRepository(OrderReverseKitting).save(orderReverseKittings)
57
+
58
+ return createdReverseKittingOrder
59
+ }
60
+ }
@@ -0,0 +1,28 @@
1
+ import { activateReverseKittingOrderResolver } from './activate-reverse-kitting-order'
2
+ import { cancelReverseKittingOrderResolver } from './cancel-reverse-kitting-order'
3
+ import { completeReverseKittingOrderResolver } from './complete-reverse-kitting-order'
4
+ import { confirmReverseKittingOrderResolver } from './confirm-reverse-kitting-order'
5
+ import { deleteReverseKittingOrderResolver } from './delete-reverse-kitting-order'
6
+ import { executeReverseKittingResolver } from './execute-reverse-kitting'
7
+ import { executingReverseKittingOrderResolver } from './executing-reverse-kitting-order'
8
+ import { generateReverseKittingOrder } from './generate-reverse-kitting-order'
9
+ import { reverseKittingInventoriesResolver } from './reverse-kitting-inventories'
10
+ import { reverseKittingOrderResolver } from './reverse-kitting-order'
11
+ import { reverseKittingOrdersResolver } from './reverse-kitting-orders'
12
+
13
+ export const Query = {
14
+ ...reverseKittingOrdersResolver,
15
+ ...reverseKittingOrderResolver,
16
+ ...executingReverseKittingOrderResolver,
17
+ ...reverseKittingInventoriesResolver
18
+ }
19
+
20
+ export const Mutation = {
21
+ ...generateReverseKittingOrder,
22
+ ...confirmReverseKittingOrderResolver,
23
+ ...activateReverseKittingOrderResolver,
24
+ ...deleteReverseKittingOrderResolver,
25
+ ...cancelReverseKittingOrderResolver,
26
+ ...executeReverseKittingResolver,
27
+ ...completeReverseKittingOrderResolver
28
+ }