@things-factory/sales-base 3.7.2 → 3.7.7

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 (193) hide show
  1. package/dist-server/constants/order.js +9 -1
  2. package/dist-server/constants/order.js.map +1 -1
  3. package/dist-server/entities/index.js +4 -1
  4. package/dist-server/entities/index.js.map +1 -1
  5. package/dist-server/entities/manifest.js +100 -0
  6. package/dist-server/entities/manifest.js.map +1 -0
  7. package/dist-server/entities/order-inventory.js +4 -0
  8. package/dist-server/entities/order-inventory.js.map +1 -1
  9. package/dist-server/entities/order-reverse-kitting.js +7 -9
  10. package/dist-server/entities/order-reverse-kitting.js.map +1 -1
  11. package/dist-server/entities/release-good.js +22 -1
  12. package/dist-server/entities/release-good.js.map +1 -1
  13. package/dist-server/graphql/resolvers/arrival-notice/add-edit-arrival-notice-products.js +1 -1
  14. package/dist-server/graphql/resolvers/arrival-notice/add-edit-arrival-notice-products.js.map +1 -1
  15. package/dist-server/graphql/resolvers/arrival-notice/arrival-notice.js +74 -73
  16. package/dist-server/graphql/resolvers/arrival-notice/arrival-notice.js.map +1 -1
  17. package/dist-server/graphql/resolvers/delivery-order/delivery-orders.js +20 -4
  18. package/dist-server/graphql/resolvers/delivery-order/delivery-orders.js.map +1 -1
  19. package/dist-server/graphql/resolvers/goods-receival-note/goods-receival-notes.js +86 -43
  20. package/dist-server/graphql/resolvers/goods-receival-note/goods-receival-notes.js.map +1 -1
  21. package/dist-server/graphql/resolvers/index.js +7 -2
  22. package/dist-server/graphql/resolvers/index.js.map +1 -1
  23. package/dist-server/graphql/resolvers/manifest/delete-manifest.js +13 -0
  24. package/dist-server/graphql/resolvers/manifest/delete-manifest.js.map +1 -0
  25. package/dist-server/graphql/resolvers/manifest/dispatch-manifest.js +22 -0
  26. package/dist-server/graphql/resolvers/manifest/dispatch-manifest.js.map +1 -0
  27. package/dist-server/graphql/resolvers/manifest/generate-manifest.js +45 -0
  28. package/dist-server/graphql/resolvers/manifest/generate-manifest.js.map +1 -0
  29. package/dist-server/graphql/resolvers/manifest/index.js +11 -0
  30. package/dist-server/graphql/resolvers/manifest/index.js.map +1 -0
  31. package/dist-server/graphql/resolvers/manifest/manifest.js +25 -0
  32. package/dist-server/graphql/resolvers/manifest/manifest.js.map +1 -0
  33. package/dist-server/graphql/resolvers/manifest/manifests.js +36 -0
  34. package/dist-server/graphql/resolvers/manifest/manifests.js.map +1 -0
  35. package/dist-server/graphql/resolvers/order-inventory/index.js +2 -1
  36. package/dist-server/graphql/resolvers/order-inventory/index.js.map +1 -1
  37. package/dist-server/graphql/resolvers/order-inventory/order-inventories.js +1 -0
  38. package/dist-server/graphql/resolvers/order-inventory/order-inventories.js.map +1 -1
  39. package/dist-server/graphql/resolvers/order-inventory/order-inventory.js +3 -3
  40. package/dist-server/graphql/resolvers/order-inventory/order-inventory.js.map +1 -1
  41. package/dist-server/graphql/resolvers/order-inventory/update-order-inventories-serial-number.js +23 -0
  42. package/dist-server/graphql/resolvers/order-inventory/update-order-inventories-serial-number.js.map +1 -0
  43. package/dist-server/graphql/resolvers/order-reverse-kitting/index.js +2 -1
  44. package/dist-server/graphql/resolvers/order-reverse-kitting/index.js.map +1 -1
  45. package/dist-server/graphql/resolvers/order-reverse-kitting/update-order-reverse-kitting.js +20 -0
  46. package/dist-server/graphql/resolvers/order-reverse-kitting/update-order-reverse-kitting.js.map +1 -0
  47. package/dist-server/graphql/resolvers/others/bulk-upload-validate-warehouse-partners-products-quantity.js +2 -1
  48. package/dist-server/graphql/resolvers/others/bulk-upload-validate-warehouse-partners-products-quantity.js.map +1 -1
  49. package/dist-server/graphql/resolvers/release-good/index.js +2 -1
  50. package/dist-server/graphql/resolvers/release-good/index.js.map +1 -1
  51. package/dist-server/graphql/resolvers/release-good/release-good-detail.js +12 -6
  52. package/dist-server/graphql/resolvers/release-good/release-good-detail.js.map +1 -1
  53. package/dist-server/graphql/resolvers/release-good/release-good-requests.js +2 -2
  54. package/dist-server/graphql/resolvers/release-good/release-good-requests.js.map +1 -1
  55. package/dist-server/graphql/resolvers/release-good/release-good.js +18 -2
  56. package/dist-server/graphql/resolvers/release-good/release-good.js.map +1 -1
  57. package/dist-server/graphql/resolvers/release-good/update-release-good-details.js +42 -0
  58. package/dist-server/graphql/resolvers/release-good/update-release-good-details.js.map +1 -0
  59. package/dist-server/graphql/resolvers/reverse-kitting-order/cancel-reverse-kitting-order.js +9 -3
  60. package/dist-server/graphql/resolvers/reverse-kitting-order/cancel-reverse-kitting-order.js.map +1 -1
  61. package/dist-server/graphql/resolvers/reverse-kitting-order/complete-reverse-kitting-order.js +2 -0
  62. package/dist-server/graphql/resolvers/reverse-kitting-order/complete-reverse-kitting-order.js.map +1 -1
  63. package/dist-server/graphql/resolvers/reverse-kitting-order/delete-reverse-kitting-order.js +11 -1
  64. package/dist-server/graphql/resolvers/reverse-kitting-order/delete-reverse-kitting-order.js.map +1 -1
  65. package/dist-server/graphql/resolvers/reverse-kitting-order/execute-reverse-kitting.js +1 -2
  66. package/dist-server/graphql/resolvers/reverse-kitting-order/execute-reverse-kitting.js.map +1 -1
  67. package/dist-server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-order.js +6 -1
  68. package/dist-server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-order.js.map +1 -1
  69. package/dist-server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-pallet-id.js +60 -0
  70. package/dist-server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-pallet-id.js.map +1 -0
  71. package/dist-server/graphql/resolvers/reverse-kitting-order/index.js +3 -1
  72. package/dist-server/graphql/resolvers/reverse-kitting-order/index.js.map +1 -1
  73. package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-inventories.js +9 -2
  74. package/dist-server/graphql/resolvers/reverse-kitting-order/reverse-kitting-inventories.js.map +1 -1
  75. package/dist-server/graphql/resolvers/reverse-kitting-order/undo-reverse-kitting-inventory.js +46 -0
  76. package/dist-server/graphql/resolvers/reverse-kitting-order/undo-reverse-kitting-inventory.js.map +1 -0
  77. package/dist-server/graphql/types/index.js +7 -3
  78. package/dist-server/graphql/types/index.js.map +1 -1
  79. package/dist-server/graphql/types/manifest/index.js +35 -0
  80. package/dist-server/graphql/types/manifest/index.js.map +1 -0
  81. package/dist-server/graphql/types/manifest/manifest-item.js +15 -0
  82. package/dist-server/graphql/types/manifest/manifest-item.js.map +1 -0
  83. package/dist-server/graphql/types/manifest/manifest-list.js +14 -0
  84. package/dist-server/graphql/types/manifest/manifest-list.js.map +1 -0
  85. package/dist-server/graphql/types/manifest/manifest-patch.js +19 -0
  86. package/dist-server/graphql/types/manifest/manifest-patch.js.map +1 -0
  87. package/dist-server/graphql/types/manifest/manifest.js +25 -0
  88. package/dist-server/graphql/types/manifest/manifest.js.map +1 -0
  89. package/dist-server/graphql/types/manifest/new-manifest.js +13 -0
  90. package/dist-server/graphql/types/manifest/new-manifest.js.map +1 -0
  91. package/dist-server/graphql/types/manifest/tracking-no.js +20 -0
  92. package/dist-server/graphql/types/manifest/tracking-no.js.map +1 -0
  93. package/dist-server/graphql/types/order-inventory/index.js +5 -1
  94. package/dist-server/graphql/types/order-inventory/index.js.map +1 -1
  95. package/dist-server/graphql/types/order-inventory/new-order-inventory.js +1 -0
  96. package/dist-server/graphql/types/order-inventory/new-order-inventory.js.map +1 -1
  97. package/dist-server/graphql/types/order-inventory/order-inventory-patch.js +1 -0
  98. package/dist-server/graphql/types/order-inventory/order-inventory-patch.js.map +1 -1
  99. package/dist-server/graphql/types/order-inventory/order-inventory.js +1 -0
  100. package/dist-server/graphql/types/order-inventory/order-inventory.js.map +1 -1
  101. package/dist-server/graphql/types/order-reverse-kitting/index.js +6 -1
  102. package/dist-server/graphql/types/order-reverse-kitting/index.js.map +1 -1
  103. package/dist-server/graphql/types/order-reverse-kitting/new-order-reverse-kitting.js +1 -0
  104. package/dist-server/graphql/types/order-reverse-kitting/new-order-reverse-kitting.js.map +1 -1
  105. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-patch.js +1 -0
  106. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting-patch.js.map +1 -1
  107. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting.js +1 -0
  108. package/dist-server/graphql/types/order-reverse-kitting/order-reverse-kitting.js.map +1 -1
  109. package/dist-server/graphql/types/release-good/index.js +5 -0
  110. package/dist-server/graphql/types/release-good/index.js.map +1 -1
  111. package/dist-server/graphql/types/release-good/inventory-infos.js +2 -0
  112. package/dist-server/graphql/types/release-good/inventory-infos.js.map +1 -1
  113. package/dist-server/graphql/types/release-good/release-good-detail.js +1 -0
  114. package/dist-server/graphql/types/release-good/release-good-detail.js.map +1 -1
  115. package/dist-server/graphql/types/release-good/release-good-patch.js +1 -0
  116. package/dist-server/graphql/types/release-good/release-good-patch.js.map +1 -1
  117. package/dist-server/graphql/types/release-good/release-good.js +2 -0
  118. package/dist-server/graphql/types/release-good/release-good.js.map +1 -1
  119. package/dist-server/graphql/types/release-good/shipping-order-info.js +1 -0
  120. package/dist-server/graphql/types/release-good/shipping-order-info.js.map +1 -1
  121. package/dist-server/graphql/types/reverse-kitting-order/index.js +8 -1
  122. package/dist-server/graphql/types/reverse-kitting-order/index.js.map +1 -1
  123. package/dist-server/graphql/types/shipping-order/shipping-order-patch.js +1 -0
  124. package/dist-server/graphql/types/shipping-order/shipping-order-patch.js.map +1 -1
  125. package/dist-server/utils/inventory-util.js +9 -5
  126. package/dist-server/utils/inventory-util.js.map +1 -1
  127. package/dist-server/utils/order-no-generator.js +35 -31
  128. package/dist-server/utils/order-no-generator.js.map +1 -1
  129. package/package.json +12 -12
  130. package/server/constants/order.ts +10 -0
  131. package/server/entities/index.ts +3 -0
  132. package/server/entities/manifest.ts +79 -0
  133. package/server/entities/order-inventory.ts +3 -0
  134. package/server/entities/order-reverse-kitting.ts +6 -9
  135. package/server/entities/release-good.ts +29 -1
  136. package/server/graphql/resolvers/arrival-notice/add-edit-arrival-notice-products.ts +3 -1
  137. package/server/graphql/resolvers/arrival-notice/arrival-notice.ts +79 -74
  138. package/server/graphql/resolvers/delivery-order/delivery-orders.ts +27 -5
  139. package/server/graphql/resolvers/goods-receival-note/goods-receival-notes.ts +105 -47
  140. package/server/graphql/resolvers/index.ts +7 -2
  141. package/server/graphql/resolvers/manifest/delete-manifest.ts +13 -0
  142. package/server/graphql/resolvers/manifest/dispatch-manifest.ts +34 -0
  143. package/server/graphql/resolvers/manifest/generate-manifest.ts +50 -0
  144. package/server/graphql/resolvers/manifest/index.ts +16 -0
  145. package/server/graphql/resolvers/manifest/manifest.ts +28 -0
  146. package/server/graphql/resolvers/manifest/manifests.ts +43 -0
  147. package/server/graphql/resolvers/order-inventory/index.ts +3 -1
  148. package/server/graphql/resolvers/order-inventory/order-inventories.ts +1 -0
  149. package/server/graphql/resolvers/order-inventory/order-inventory.ts +3 -3
  150. package/server/graphql/resolvers/order-inventory/update-order-inventories-serial-number.ts +28 -0
  151. package/server/graphql/resolvers/order-reverse-kitting/index.ts +4 -1
  152. package/server/graphql/resolvers/order-reverse-kitting/update-order-reverse-kitting.ts +26 -0
  153. package/server/graphql/resolvers/others/bulk-upload-validate-warehouse-partners-products-quantity.ts +10 -7
  154. package/server/graphql/resolvers/release-good/index.ts +3 -1
  155. package/server/graphql/resolvers/release-good/release-good-detail.ts +16 -7
  156. package/server/graphql/resolvers/release-good/release-good-requests.ts +2 -2
  157. package/server/graphql/resolvers/release-good/release-good.ts +27 -3
  158. package/server/graphql/resolvers/release-good/update-release-good-details.ts +61 -0
  159. package/server/graphql/resolvers/reverse-kitting-order/cancel-reverse-kitting-order.ts +18 -4
  160. package/server/graphql/resolvers/reverse-kitting-order/complete-reverse-kitting-order.ts +2 -0
  161. package/server/graphql/resolvers/reverse-kitting-order/delete-reverse-kitting-order.ts +19 -1
  162. package/server/graphql/resolvers/reverse-kitting-order/execute-reverse-kitting.ts +1 -2
  163. package/server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-order.ts +8 -1
  164. package/server/graphql/resolvers/reverse-kitting-order/generate-reverse-kitting-pallet-id.ts +71 -0
  165. package/server/graphql/resolvers/reverse-kitting-order/index.ts +5 -1
  166. package/server/graphql/resolvers/reverse-kitting-order/reverse-kitting-inventories.ts +12 -2
  167. package/server/graphql/resolvers/reverse-kitting-order/undo-reverse-kitting-inventory.ts +70 -0
  168. package/server/graphql/types/index.ts +7 -3
  169. package/server/graphql/types/manifest/index.ts +34 -0
  170. package/server/graphql/types/manifest/manifest-item.ts +9 -0
  171. package/server/graphql/types/manifest/manifest-list.ts +8 -0
  172. package/server/graphql/types/manifest/manifest-patch.ts +13 -0
  173. package/server/graphql/types/manifest/manifest.ts +19 -0
  174. package/server/graphql/types/manifest/new-manifest.ts +7 -0
  175. package/server/graphql/types/manifest/tracking-no.ts +14 -0
  176. package/server/graphql/types/order-inventory/index.ts +5 -1
  177. package/server/graphql/types/order-inventory/new-order-inventory.ts +1 -0
  178. package/server/graphql/types/order-inventory/order-inventory-patch.ts +1 -0
  179. package/server/graphql/types/order-inventory/order-inventory.ts +1 -0
  180. package/server/graphql/types/order-reverse-kitting/index.ts +6 -1
  181. package/server/graphql/types/order-reverse-kitting/new-order-reverse-kitting.ts +1 -0
  182. package/server/graphql/types/order-reverse-kitting/order-reverse-kitting-patch.ts +1 -0
  183. package/server/graphql/types/order-reverse-kitting/order-reverse-kitting.ts +1 -0
  184. package/server/graphql/types/release-good/index.ts +5 -0
  185. package/server/graphql/types/release-good/inventory-infos.ts +2 -0
  186. package/server/graphql/types/release-good/release-good-detail.ts +1 -0
  187. package/server/graphql/types/release-good/release-good-patch.ts +1 -0
  188. package/server/graphql/types/release-good/release-good.ts +2 -0
  189. package/server/graphql/types/release-good/shipping-order-info.ts +1 -0
  190. package/server/graphql/types/reverse-kitting-order/index.ts +8 -1
  191. package/server/graphql/types/shipping-order/shipping-order-patch.ts +1 -0
  192. package/server/utils/inventory-util.ts +17 -12
  193. package/server/utils/order-no-generator.ts +43 -36
@@ -83,7 +83,7 @@ export const releaseGoodRequestsResolver = {
83
83
  'cc.status = rg.status'
84
84
  )
85
85
 
86
- const arrChildSortData = ['bizplace']
86
+ const arrChildSortData = ['bizplace', 'creator']
87
87
  const sort = (params.sortings || []).reduce(
88
88
  (acc, sort) => ({
89
89
  ...acc,
@@ -91,7 +91,7 @@ export const releaseGoodRequestsResolver = {
91
91
  ? 'DESC'
92
92
  : 'ASC'
93
93
  }),
94
- !params.sortings.some(e => e.name === 'status') ? { rank: 'ASC' } : {}
94
+ params.sortings.length < 1 ? { rank: 'ASC', 'rg.createdAt': 'DESC' } : {}
95
95
  )
96
96
 
97
97
  qb.orderBy(sort)
@@ -1,14 +1,17 @@
1
+ import { getRepository, In } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
4
  import { getPermittedBizplaceIds } from '@things-factory/biz-base'
5
+ import { ProductDetail } from '@things-factory/product-base'
3
6
  import { Domain } from '@things-factory/shell'
4
- import { getRepository, In } from 'typeorm'
5
- import { ReleaseGood } from '../../../entities'
7
+
8
+ import { OrderInventory, ReleaseGood } from '../../../entities'
6
9
 
7
10
  export const releaseGoodResolver = {
8
11
  async releaseGood(_: any, { name }, context: any) {
9
12
  const { domain, user }: { domain: Domain; user: User } = context.state
10
13
 
11
- return await getRepository(ReleaseGood).findOne({
14
+ let releaseGood: ReleaseGood = await getRepository(ReleaseGood).findOne({
12
15
  where: {
13
16
  domain,
14
17
  name,
@@ -23,11 +26,32 @@ export const releaseGoodResolver = {
23
26
  'orderInventories.product',
24
27
  'orderInventories.inventory',
25
28
  'orderInventories.inventory.product',
29
+ 'orderInventories.inventory.location',
26
30
  'orderVass',
27
31
  'orderVass.vas',
28
32
  'creator',
29
33
  'updater'
30
34
  ]
31
35
  })
36
+
37
+ releaseGood.orderInventories = await Promise.all(
38
+ releaseGood.orderInventories.map(async (orderInventory: OrderInventory) => {
39
+ const productDetails: ProductDetail[] = await getRepository(ProductDetail).find({
40
+ where: {
41
+ product: orderInventory.product.id,
42
+ packingType: orderInventory.packingType,
43
+ packingSize: orderInventory.packingSize
44
+ }
45
+ })
46
+
47
+ orderInventory.product['productDetails'] = productDetails
48
+
49
+ if (orderInventory.inventory) orderInventory.inventory.product['productDetails'] = productDetails
50
+
51
+ return orderInventory
52
+ })
53
+ )
54
+
55
+ return releaseGood
32
56
  }
33
57
  }
@@ -0,0 +1,61 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { getMyBizplace } from '@things-factory/biz-base'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { ORDER_STATUS } from '../../../constants'
8
+ import { ReleaseGood, ShippingOrder } from '../../../entities'
9
+ import { OrderNoGenerator } from '../../../utils/order-no-generator'
10
+
11
+ export const updateReleaseGoodDetailsResolver = {
12
+ async updateReleaseGoodDetails(_: any, { releaseGood, shippingOrder }, context: any) {
13
+ const { tx }: { tx: EntityManager } = context.state
14
+
15
+ try {
16
+ return updateReleaseGoodFunction(releaseGood, shippingOrder, context, tx)
17
+ } catch (error) {
18
+ throw error
19
+ }
20
+ }
21
+ }
22
+
23
+ export async function updateReleaseGoodFunction(
24
+ releaseGood: ReleaseGood,
25
+ shippingOrder: ShippingOrder,
26
+ context: any,
27
+ tx?: EntityManager
28
+ ) {
29
+ const { domain, user }: { domain: Domain; user: User } = context.state
30
+ let foundReleaseGood = await tx.getRepository(ReleaseGood).findOne({
31
+ where: { id: releaseGood.id, name: releaseGood.name, domain },
32
+ relations: ['shippingOrder']
33
+ })
34
+
35
+ if (!foundReleaseGood) {
36
+ throw new Error(`Release Order ${releaseGood.name} is not found.`)
37
+ }
38
+
39
+ // case to update existing shippingOrder
40
+ if (foundReleaseGood.shippingOrder && shippingOrder) {
41
+ await tx.getRepository(ShippingOrder).update(foundReleaseGood.shippingOrder.id, shippingOrder)
42
+ }
43
+ // case for new shippingOrder
44
+ else if (!foundReleaseGood.shippingOrder && shippingOrder) {
45
+ let newShippingOrder: ShippingOrder = await tx.getRepository(ShippingOrder).save({
46
+ ...shippingOrder,
47
+ name: OrderNoGenerator.shippingOrder(),
48
+ domain,
49
+ bizplace: await getMyBizplace(domain, user),
50
+ status: ORDER_STATUS.PENDING,
51
+ creator: user,
52
+ updater: user
53
+ })
54
+
55
+ releaseGood.shippingOrder = newShippingOrder
56
+ }
57
+
58
+ await tx.getRepository(ReleaseGood).update(foundReleaseGood.id, releaseGood)
59
+ // return updated Release Good
60
+ return await tx.getRepository(ReleaseGood).findOne(foundReleaseGood.id)
61
+ }
@@ -2,6 +2,7 @@ import { EntityManager } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import { Domain } from '@things-factory/shell'
5
+ import { Inventory } from '@things-factory/warehouse-base'
5
6
 
6
7
  import { ORDER_STATUS, ORDER_VAS_STATUS } from '../../../constants'
7
8
  import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
@@ -24,7 +25,7 @@ export async function cancelReverseKittingOrderFunction(
24
25
 
25
26
  const foundReverseKittingOrder: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).findOne({
26
27
  where: { domain, name, status: ORDER_STATUS.READY_TO_EXECUTE },
27
- relations: ['bizplace', 'orderReverseKittings', 'creator', 'updater']
28
+ relations: ['bizplace', 'orderReverseKittings', 'orderReverseKittings.inventory', 'creator', 'updater']
28
29
  })
29
30
 
30
31
  let foundORKs: OrderReverseKitting[] = foundReverseKittingOrder.orderReverseKittings
@@ -38,9 +39,22 @@ export async function cancelReverseKittingOrderFunction(
38
39
  updater: user
39
40
  })
40
41
 
41
- foundORKs = foundORKs.map((ork: OrderReverseKitting) => {
42
- return { ...ork, status: ORDER_VAS_STATUS.CANCELLED }
43
- })
42
+ foundORKs = await Promise.all(
43
+ foundORKs.map(async (ork: OrderReverseKitting) => {
44
+ if (ork?.inventory?.id) {
45
+ ork.inventory = await tx.getRepository(Inventory).findOne(ork.inventory.id)
46
+
47
+ await tx.getRepository(Inventory).save({
48
+ ...ork.inventory,
49
+ lockedQty: ork.inventory.lockedQty - ork.qty,
50
+ lockedUomValue: ork.inventory.lockedUomValue - ork.uomValue,
51
+ updater: user
52
+ })
53
+ }
54
+
55
+ return { ...ork, status: ORDER_VAS_STATUS.CANCELLED }
56
+ })
57
+ )
44
58
  await tx.getRepository(OrderReverseKitting).save(foundORKs)
45
59
 
46
60
  return reverseKitting
@@ -25,7 +25,9 @@ export const completeReverseKittingOrderResolver = {
25
25
  orderReverseKittings.map(async orderReverseKitting => {
26
26
  let inventory: Inventory = orderReverseKitting.inventory
27
27
  inventory.qty = inventory.qty - orderReverseKitting.qty
28
+ inventory.lockedQty = inventory.lockedQty - orderReverseKitting.qty
28
29
  inventory.uomValue = inventory.uomValue - orderReverseKitting.uomValue
30
+ inventory.lockedUomValue = inventory.lockedUomValue - orderReverseKitting.uomValue
29
31
 
30
32
  await InventoryUtil.transactionInventory(
31
33
  inventory,
@@ -2,6 +2,7 @@ import { EntityManager, In } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import { Domain } from '@things-factory/shell'
5
+ import { Inventory } from '@things-factory/warehouse-base'
5
6
 
6
7
  import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
7
8
 
@@ -21,13 +22,30 @@ export async function deleteReverseKittingOrder(
21
22
  ): Promise<boolean> {
22
23
  let foundReverseKittingOrder: ReverseKittingOrder = await tx.getRepository(ReverseKittingOrder).findOne({
23
24
  where: { domain, name },
24
- relations: ['bizplace', 'orderReverseKittings', 'creator', 'updater']
25
+ relations: ['bizplace', 'orderReverseKittings', 'orderReverseKittings.inventory', 'creator', 'updater']
25
26
  })
26
27
 
27
28
  if (!foundReverseKittingOrder) throw new Error(`Reverse kitting order doesn't exists.`)
28
29
 
29
30
  const foundORKs: OrderReverseKitting[] = foundReverseKittingOrder.orderReverseKittings
30
31
 
32
+ // Delete order reverse kittings by ids
33
+ await Promise.all(
34
+ foundORKs.map(async (ork: OrderReverseKitting) => {
35
+ if (ork?.inventory?.id) {
36
+ ork.inventory = await tx.getRepository(Inventory).findOne(ork.inventory.id)
37
+
38
+ await tx.getRepository(Inventory).save({
39
+ ...ork.inventory,
40
+ lockedQty: ork.inventory.lockedQty - ork.qty,
41
+ lockedUomValue: ork.inventory.lockedUomValue - ork.uomValue,
42
+ updater: user
43
+ })
44
+ }
45
+ return ork
46
+ })
47
+ )
48
+
31
49
  // 1. delete order reverse kittings
32
50
  const productIds = foundORKs.map((ork: OrderReverseKitting) => ork.id)
33
51
  if (productIds.length) {
@@ -50,7 +50,6 @@ export async function executeReverseKittingFunction(
50
50
 
51
51
  const productDetail: ProductDetail = await tx.getRepository(ProductDetail).findOne({
52
52
  where: {
53
- domain: customerCompanyBizplace.domain,
54
53
  id: inventory.productDetailId
55
54
  },
56
55
  relations: ['product']
@@ -115,7 +114,7 @@ export async function executeReverseKittingFunction(
115
114
  let productCombinationSets: any[] = operationGuide.data.productCombinationSets
116
115
  operationGuide.data.productCombinationSets = productCombinationSets.map(item => {
117
116
  if (item.productDetailId == inventory.productDetailId) {
118
- item.actualQty++
117
+ item.actualQty += qty
119
118
  }
120
119
  return item
121
120
  })
@@ -38,7 +38,14 @@ export const generateReverseKittingOrder = {
38
38
  orderReverseKittings = await Promise.all(
39
39
  orderReverseKittings.map(async (ork: OrderReverseKitting) => {
40
40
  if (ork?.inventory?.id) {
41
- ork.inventory = await tx.getRepository(Inventory).findOne(ork.inventory.id)
41
+ const foundInv: Inventory = await tx.getRepository(Inventory).findOne(ork.inventory.id)
42
+ ork.inventory = foundInv
43
+
44
+ foundInv.lockedQty = Number(foundInv.lockedQty) + ork.qty
45
+ foundInv.lockedUomValue = Number(foundInv.lockedUomValue) + ork.uomValue
46
+ foundInv.updater = user
47
+
48
+ await tx.getRepository(Inventory).save(foundInv)
42
49
  }
43
50
  return {
44
51
  ...ork,
@@ -0,0 +1,71 @@
1
+ import { EntityManager, In } from 'typeorm'
2
+
3
+ import { generateId } from '@things-factory/id-rule-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
6
+ import { OrderReverseKitting } from '../../../entities'
7
+
8
+ export const generateReverseKittingPalletIdResolver = {
9
+ async generateReverseKittingPalletId(_: any, { targets, type }, context: any) {
10
+ const { tx, domain }: { tx: EntityManager; domain: Domain } = context.state
11
+ // 1. get and set the date
12
+ const today = new Date()
13
+ const year = today.getFullYear()
14
+ const month = today.getMonth()
15
+ const day = today.getDate()
16
+
17
+ const yy = String(year).substr(String(year).length - 2)
18
+ const mm = String(month + 1).padStart(2, '0')
19
+ const dd = String(day).padStart(2, '0')
20
+
21
+ const date = yy + mm + dd
22
+ let results = []
23
+
24
+ // 2. get worksheet detail
25
+ let ids = targets.map(target => target.id)
26
+
27
+ // - getRepository using In(array) to pass the value to defined variable
28
+ const foundOrderReverseKittings: OrderReverseKitting[] = await tx.getRepository(OrderReverseKitting).find({
29
+ where: {
30
+ domain,
31
+ id: In(ids)
32
+ },
33
+ relations: ['domain', 'bizplace']
34
+ })
35
+
36
+ // 3. from worksheet detail get product name, product type, batchid, packing type, bizplace
37
+
38
+ if (foundOrderReverseKittings.length <= 0) throw new Error('Unable to find order reverse kittings')
39
+ else {
40
+ for (let i = 0; i < foundOrderReverseKittings.length; i++) {
41
+ let foundORK = foundOrderReverseKittings[i]
42
+ for (let idx = 0; idx < targets.length; idx++) {
43
+ if (foundORK.id === targets[idx].id) {
44
+ // 4. generate pallet id based on print qty > call generateId resolver
45
+ for (let i = 0; i < targets[idx].printQty; i++) {
46
+ const generatedPalletId = await generateId({
47
+ domain,
48
+ type,
49
+ seed: {
50
+ batchId: foundORK.inventory.batchId,
51
+ date: date
52
+ }
53
+ })
54
+
55
+ // 5. map all data to be returned
56
+ if (foundORK != null) {
57
+ results.push({
58
+ ...foundORK,
59
+ palletId: generatedPalletId,
60
+ bizplace: foundORK.bizplace
61
+ })
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ return results
70
+ }
71
+ }
@@ -6,9 +6,11 @@ import { deleteReverseKittingOrderResolver } from './delete-reverse-kitting-orde
6
6
  import { executeReverseKittingResolver } from './execute-reverse-kitting'
7
7
  import { executingReverseKittingOrderResolver } from './executing-reverse-kitting-order'
8
8
  import { generateReverseKittingOrder } from './generate-reverse-kitting-order'
9
+ import { generateReverseKittingPalletIdResolver } from './generate-reverse-kitting-pallet-id'
9
10
  import { reverseKittingInventoriesResolver } from './reverse-kitting-inventories'
10
11
  import { reverseKittingOrderResolver } from './reverse-kitting-order'
11
12
  import { reverseKittingOrdersResolver } from './reverse-kitting-orders'
13
+ import { undoReverseKittingInventoryResolver } from './undo-reverse-kitting-inventory'
12
14
 
13
15
  export const Query = {
14
16
  ...reverseKittingOrdersResolver,
@@ -24,5 +26,7 @@ export const Mutation = {
24
26
  ...deleteReverseKittingOrderResolver,
25
27
  ...cancelReverseKittingOrderResolver,
26
28
  ...executeReverseKittingResolver,
27
- ...completeReverseKittingOrderResolver
29
+ ...completeReverseKittingOrderResolver,
30
+ ...generateReverseKittingPalletIdResolver,
31
+ ...undoReverseKittingInventoryResolver
28
32
  }
@@ -1,6 +1,7 @@
1
1
  import { getRepository } from 'typeorm'
2
2
 
3
3
  import { Bizplace } from '@things-factory/biz-base'
4
+ import { Product, ProductDetail } from '@things-factory/product-base'
4
5
  import { Domain } from '@things-factory/shell'
5
6
  import { Inventory, INVENTORY_STATUS } from '@things-factory/warehouse-base'
6
7
 
@@ -8,8 +9,16 @@ import { ORDER_VAS_STATUS } from '../../../constants'
8
9
  import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
9
10
 
10
11
  export const reverseKittingInventoriesResolver = {
11
- async reverseKittingInventories(_: any, { orderReverseKittingName }, context: any) {
12
+ async reverseKittingInventories(_: any, { orderReverseKittingName, productDetailId }, context: any) {
12
13
  const { domain }: { domain: Domain } = context.state
14
+
15
+ const productDetail: ProductDetail = await getRepository(ProductDetail).findOne({
16
+ where: { id: productDetailId },
17
+ relations: ['product']
18
+ })
19
+
20
+ const product: Product = productDetail.product
21
+
13
22
  const foundOrderReverseKitting: OrderReverseKitting = await getRepository(OrderReverseKitting).findOne({
14
23
  where: {
15
24
  domain,
@@ -29,9 +38,10 @@ export const reverseKittingInventoriesResolver = {
29
38
  bizplace: customerBizplace,
30
39
  refOrderId: reverseKittingOrder.id,
31
40
  orderVasId: foundOrderReverseKitting.id,
41
+ product: product,
32
42
  status: INVENTORY_STATUS.STORED
33
43
  },
34
- relations: ['product', 'bizplace']
44
+ relations: ['product', 'bizplace', 'location']
35
45
  })
36
46
  }
37
47
  }
@@ -0,0 +1,70 @@
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 {
7
+ Inventory,
8
+ INVENTORY_STATUS,
9
+ INVENTORY_TRANSACTION_TYPE,
10
+ InventoryHistory
11
+ } from '@things-factory/warehouse-base'
12
+
13
+ import { OrderReverseKitting, ReverseKittingOrder } from '../../../entities'
14
+ import { InventoryUtil } from '../../../utils'
15
+
16
+ export const undoReverseKittingInventoryResolver = {
17
+ async undoReverseKittingInventory(_: any, { orderReverseKittingName, palletId }, context: any) {
18
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
19
+
20
+ //@sumjoekin please add stricter validation. It is dangerous without strict validation. Unexpected behaviour will cause accidental deletion of inventory.
21
+
22
+ const orderReverseKitting: OrderReverseKitting = await tx.getRepository(OrderReverseKitting).findOne({
23
+ where: { domain, name: orderReverseKittingName },
24
+ relations: ['bizplace', 'reverseKittingOrder']
25
+ })
26
+
27
+ const bizplace: Bizplace = orderReverseKitting.bizplace
28
+ const reverseKittingOrder: ReverseKittingOrder = orderReverseKitting.reverseKittingOrder
29
+ let foundInventory: Inventory = await tx.getRepository(Inventory).findOne({
30
+ where: { domain, bizplace, orderVasId: orderReverseKitting.id, palletId },
31
+ relations: ['bizplace', 'product']
32
+ })
33
+ if (!foundInventory) throw new Error(`There's no results matched with condition ${foundInventory.palletId}`)
34
+
35
+ let operationGuide: any = JSON.parse(orderReverseKitting.operationGuide)
36
+ let productCombinationSets: any[] = operationGuide.data.productCombinationSets
37
+ productCombinationSets = productCombinationSets.map(item => {
38
+ if (foundInventory.product.id == item.productId) {
39
+ item.actualQty -= foundInventory.qty
40
+ }
41
+ return item
42
+ })
43
+ operationGuide.data.productCombinationSets = productCombinationSets
44
+
45
+ await tx
46
+ .getRepository(OrderReverseKitting)
47
+ .update({ id: orderReverseKitting.id }, { operationGuide: operationGuide })
48
+
49
+ foundInventory.lastSeq++
50
+ foundInventory.status = INVENTORY_STATUS.DELETED
51
+ foundInventory = await InventoryUtil.transactionInventory(
52
+ foundInventory,
53
+ reverseKittingOrder,
54
+ -foundInventory.qty,
55
+ -foundInventory.uomValue,
56
+ INVENTORY_TRANSACTION_TYPE.UNDO_REVERSE_KITTING,
57
+ user,
58
+ tx
59
+ )
60
+ foundInventory.qty = 0
61
+ foundInventory.uomValue = 0
62
+ foundInventory.updater = this.user
63
+
64
+ await tx.getRepository(InventoryHistory).update({ inventory: foundInventory }, { inventory: null })
65
+
66
+ await tx.getRepository(Inventory).delete({ id: foundInventory.id })
67
+
68
+ return true
69
+ }
70
+ }
@@ -8,6 +8,7 @@ import * as GoodsReceivalNote from './goods-receival-note'
8
8
  import * as InventoryCheck from './inventory-check'
9
9
  import * as Invoice from './invoice'
10
10
  import * as JobSheet from './job-sheet'
11
+ import * as Manifest from './manifest'
11
12
  import * as OrderInventory from './order-inventory'
12
13
  import * as OrderProduct from './order-product'
13
14
  import * as OrderReverseKitting from './order-reverse-kitting'
@@ -49,7 +50,8 @@ export const queries = [
49
50
  GoodsReceivalNote.Query,
50
51
  Others.Query,
51
52
  OrderReverseKitting.Query,
52
- ReverseKittingOrder.Query
53
+ ReverseKittingOrder.Query,
54
+ Manifest.Query
53
55
  ]
54
56
 
55
57
  export const mutations = [
@@ -76,7 +78,8 @@ export const mutations = [
76
78
  VasOrder.Mutation,
77
79
  GoodsReceivalNote.Mutation,
78
80
  ReverseKittingOrder.Mutation,
79
- OrderReverseKitting.Mutation
81
+ OrderReverseKitting.Mutation,
82
+ Manifest.Mutation
80
83
  ]
81
84
 
82
85
  export const types = [
@@ -104,5 +107,6 @@ export const types = [
104
107
  ...GoodsReceivalNote.Types,
105
108
  ...Others.Types,
106
109
  ...ReverseKittingOrder.Types,
107
- ...OrderReverseKitting.Types
110
+ ...OrderReverseKitting.Types,
111
+ ...Manifest.Types
108
112
  ]
@@ -0,0 +1,34 @@
1
+ import { Manifest } from './manifest'
2
+ import { ManifestItem } from './manifest-item'
3
+ import { ManifestList } from './manifest-list'
4
+ import { ManifestPatch } from './manifest-patch'
5
+ import { NewManifest } from './new-manifest'
6
+ import { TrackingNo } from './tracking-no'
7
+
8
+ export const Mutation = `
9
+ generateManifest (
10
+ manifest: NewManifest
11
+ ): Boolean @transaction
12
+
13
+ dispatchManifest (
14
+ name: String!
15
+ patch: ManifestPatch!
16
+ ): Manifest @transaction
17
+
18
+ deleteManifest (
19
+ name: String!
20
+ ): Manifest @transaction
21
+ `
22
+
23
+ export const Query = `
24
+ manifests(
25
+ filters: [Filter],
26
+ pagination: Pagination,sortings: [Sorting]
27
+ ): ManifestList @transaction
28
+
29
+ manifest(
30
+ name: String!
31
+ ): Manifest @transaction
32
+ `
33
+
34
+ export const Types = [Manifest, NewManifest, ManifestList, ManifestPatch, ManifestItem, TrackingNo]
@@ -0,0 +1,9 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const ManifestItem = gql`
4
+ input ManifestItem {
5
+ trackingNo: String
6
+ refNo: String
7
+ transporter: String
8
+ }
9
+ `
@@ -0,0 +1,8 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const ManifestList = gql`
4
+ type ManifestList {
5
+ items: [Manifest]
6
+ total: Int
7
+ }
8
+ `
@@ -0,0 +1,13 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const ManifestPatch = gql`
4
+ input ManifestPatch {
5
+ id: String
6
+ name: String
7
+ shippingProvider: String
8
+ dispatcherName: String
9
+ dispatcherIdentity: String
10
+ status: String
11
+ cuFlag: String
12
+ }
13
+ `
@@ -0,0 +1,19 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const Manifest = gql`
4
+ type Manifest {
5
+ id: String
6
+ name: String
7
+ domain: Domain
8
+ shippingProvider: String
9
+ dispatcherName: String
10
+ dispatcherIdentity: String
11
+ dispatchedAt: String
12
+ trackingNos: [TrackingNo]
13
+ status: String
14
+ updater: User
15
+ creator: User
16
+ updatedAt: String
17
+ createdAt: String
18
+ }
19
+ `
@@ -0,0 +1,7 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const NewManifest = gql`
4
+ input NewManifest {
5
+ manifestItems: [ManifestItem]
6
+ }
7
+ `
@@ -0,0 +1,14 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const TrackingNo = gql`
4
+ type TrackingNo {
5
+ trackingNo: String
6
+ refNo: String
7
+ dispatchmentStatus: String
8
+ deliveryAddress: String
9
+ attentionTo: String
10
+ postalCode: String
11
+ phone: String
12
+ city: String
13
+ }
14
+ `
@@ -11,12 +11,16 @@ export const Mutation = /* GraphQL */ `
11
11
  deleteOrderInventories (
12
12
  names: [String]!
13
13
  ): Boolean @transaction
14
+
15
+ updateOrderInventorySerialNumber(
16
+ orderInventory: OrderInventoryPatch
17
+ ): OrderInventory @transaction
14
18
  `
15
19
 
16
20
  export const Query = /* GraphQL */ `
17
21
  orderInventories(filters: [Filter], pagination: Pagination, sortings: [Sorting]): OrderInventoryList
18
22
  mergedProductOrderInventories(filters: [Filter], pagination: Pagination, sortings: [Sorting]): OrderInventoryList
19
- orderInventory(name: String!): OrderInventory
23
+ orderInventory(id: String!): OrderInventory
20
24
  inventoriesByOrder(filters: [Filter], pagination: Pagination, sortings: [Sorting]): OrderInventoryList
21
25
  `
22
26
 
@@ -27,6 +27,7 @@ export const NewOrderInventory = gql`
27
27
  remark: String
28
28
  issue: String
29
29
  crossDocking: Boolean
30
+ serialNumber: String
30
31
  status: String
31
32
  existingRow: Boolean
32
33
  returnQty: Float
@@ -34,6 +34,7 @@ export const OrderInventoryPatch = gql`
34
34
  remark: String
35
35
  issue: String
36
36
  crossDocking: Boolean
37
+ serialNumber: String
37
38
  status: String
38
39
  pallet: String
39
40
  extraJsonData: String
@@ -47,6 +47,7 @@ export const OrderInventory = gql`
47
47
  actualPackQty: Float
48
48
  actualPalletQty: Float
49
49
  crossDocking: Boolean
50
+ serialNumber: String
50
51
  status: String
51
52
  updater: User
52
53
  creator: User