@things-factory/sales-base 8.0.2 → 8.0.5

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 (178) hide show
  1. package/dist-server/tsconfig.tsbuildinfo +1 -1
  2. package/package.json +12 -12
  3. package/server/constants/attachment-type.ts +0 -9
  4. package/server/constants/index.ts +0 -7
  5. package/server/constants/load-type.ts +0 -4
  6. package/server/constants/order.ts +0 -203
  7. package/server/constants/product-group-type.ts +0 -4
  8. package/server/constants/release-good.ts +0 -9
  9. package/server/constants/transfer-order-type.ts +0 -6
  10. package/server/constants/validation-error-code.ts +0 -3
  11. package/server/constants/vas-target-type.ts +0 -25
  12. package/server/controllers/ecommerce/ecommerce-controller.ts +0 -122
  13. package/server/controllers/ecommerce/index.ts +0 -2
  14. package/server/controllers/ecommerce/sellercraft-controller.ts +0 -182
  15. package/server/controllers/index.ts +0 -2
  16. package/server/controllers/order-controller.ts +0 -296
  17. package/server/errors/index.ts +0 -1
  18. package/server/errors/validation-error.ts +0 -25
  19. package/server/index.ts +0 -5
  20. package/server/migrations/index.ts +0 -9
  21. package/server/service/arrival-notice/arrival-notice-mutation.ts +0 -1152
  22. package/server/service/arrival-notice/arrival-notice-query.ts +0 -549
  23. package/server/service/arrival-notice/arrival-notice-types.ts +0 -310
  24. package/server/service/arrival-notice/arrival-notice.ts +0 -202
  25. package/server/service/arrival-notice/index.ts +0 -9
  26. package/server/service/claim/claim-mutation.ts +0 -308
  27. package/server/service/claim/claim-query.ts +0 -122
  28. package/server/service/claim/claim-types.ts +0 -130
  29. package/server/service/claim/claim.ts +0 -140
  30. package/server/service/claim/index.ts +0 -9
  31. package/server/service/claim-detail/claim-detail-mutation.ts +0 -102
  32. package/server/service/claim-detail/claim-detail-query.ts +0 -55
  33. package/server/service/claim-detail/claim-detail-types.ts +0 -47
  34. package/server/service/claim-detail/claim-detail.ts +0 -69
  35. package/server/service/claim-detail/index.ts +0 -9
  36. package/server/service/claim-order/claim-order-mutation.ts +0 -101
  37. package/server/service/claim-order/claim-order-query.ts +0 -47
  38. package/server/service/claim-order/claim-order-types.ts +0 -35
  39. package/server/service/claim-order/claim-order.ts +0 -81
  40. package/server/service/claim-order/index.ts +0 -9
  41. package/server/service/collection-order/collection-order-mutation.ts +0 -245
  42. package/server/service/collection-order/collection-order-query.ts +0 -97
  43. package/server/service/collection-order/collection-order-types.ts +0 -165
  44. package/server/service/collection-order/collection-order.ts +0 -135
  45. package/server/service/collection-order/index.ts +0 -9
  46. package/server/service/delivery-order/delivery-order-mutation.ts +0 -967
  47. package/server/service/delivery-order/delivery-order-query.ts +0 -631
  48. package/server/service/delivery-order/delivery-order-types.ts +0 -268
  49. package/server/service/delivery-order/delivery-order.ts +0 -258
  50. package/server/service/delivery-order/index.ts +0 -9
  51. package/server/service/draft-release-good/draft-release-good-mutation.ts +0 -765
  52. package/server/service/draft-release-good/draft-release-good-query.ts +0 -354
  53. package/server/service/draft-release-good/draft-release-good-type.ts +0 -261
  54. package/server/service/draft-release-good/draft-release-good.ts +0 -284
  55. package/server/service/draft-release-good/index.ts +0 -9
  56. package/server/service/goods-receival-note/goods-receival-note-mutation.ts +0 -129
  57. package/server/service/goods-receival-note/goods-receival-note-query.ts +0 -280
  58. package/server/service/goods-receival-note/goods-receival-note-types.ts +0 -105
  59. package/server/service/goods-receival-note/goods-receival-note.ts +0 -127
  60. package/server/service/goods-receival-note/index.ts +0 -9
  61. package/server/service/index.ts +0 -238
  62. package/server/service/inventory-check/index.ts +0 -9
  63. package/server/service/inventory-check/inventory-check-mutation.ts +0 -149
  64. package/server/service/inventory-check/inventory-check-query.ts +0 -48
  65. package/server/service/inventory-check/inventory-check-types.ts +0 -48
  66. package/server/service/inventory-check/inventory-check.ts +0 -90
  67. package/server/service/invoice/index.ts +0 -9
  68. package/server/service/invoice/invoice-mutation.ts +0 -95
  69. package/server/service/invoice/invoice-query.ts +0 -53
  70. package/server/service/invoice/invoice-types.ts +0 -279
  71. package/server/service/invoice/invoice.ts +0 -230
  72. package/server/service/invoice-product/index.ts +0 -9
  73. package/server/service/invoice-product/invoice-product-mutation.ts +0 -54
  74. package/server/service/invoice-product/invoice-product-query.ts +0 -54
  75. package/server/service/invoice-product/invoice-product-types.ts +0 -84
  76. package/server/service/invoice-product/invoice-product.ts +0 -92
  77. package/server/service/job-sheet/index.ts +0 -9
  78. package/server/service/job-sheet/job-sheet-mutation.ts +0 -92
  79. package/server/service/job-sheet/job-sheet-query.ts +0 -112
  80. package/server/service/job-sheet/job-sheet-types.ts +0 -78
  81. package/server/service/job-sheet/job-sheet.ts +0 -102
  82. package/server/service/manifest/index.ts +0 -6
  83. package/server/service/manifest/manifest-mutation.ts +0 -190
  84. package/server/service/manifest/manifest-query.ts +0 -149
  85. package/server/service/manifest/manifest-type.ts +0 -84
  86. package/server/service/manifest/manifest.ts +0 -114
  87. package/server/service/order-inventory/index.ts +0 -9
  88. package/server/service/order-inventory/order-inventory-mutation.ts +0 -54
  89. package/server/service/order-inventory/order-inventory-query.ts +0 -722
  90. package/server/service/order-inventory/order-inventory-types.ts +0 -238
  91. package/server/service/order-inventory/order-inventory.ts +0 -401
  92. package/server/service/order-product/index.ts +0 -9
  93. package/server/service/order-product/order-product-mutation.ts +0 -48
  94. package/server/service/order-product/order-product-query.ts +0 -89
  95. package/server/service/order-product/order-product-types.ts +0 -335
  96. package/server/service/order-product/order-product.ts +0 -362
  97. package/server/service/order-tote/index.ts +0 -9
  98. package/server/service/order-tote/order-tote-mutation.ts +0 -31
  99. package/server/service/order-tote/order-tote-query.ts +0 -112
  100. package/server/service/order-tote/order-tote-types.ts +0 -47
  101. package/server/service/order-tote/order-tote.ts +0 -73
  102. package/server/service/order-tote-item/index.ts +0 -9
  103. package/server/service/order-tote-item/order-tote-item-mutation.ts +0 -31
  104. package/server/service/order-tote-item/order-tote-item-query.ts +0 -82
  105. package/server/service/order-tote-item/order-tote-item-types.ts +0 -56
  106. package/server/service/order-tote-item/order-tote-item.ts +0 -72
  107. package/server/service/order-tote-seal/index.ts +0 -9
  108. package/server/service/order-tote-seal/order-tote-seal-mutation.ts +0 -31
  109. package/server/service/order-tote-seal/order-tote-seal-query.ts +0 -59
  110. package/server/service/order-tote-seal/order-tote-seal-types.ts +0 -41
  111. package/server/service/order-tote-seal/order-tote-seal.ts +0 -46
  112. package/server/service/order-vas/index.ts +0 -9
  113. package/server/service/order-vas/order-vas-mutation.ts +0 -20
  114. package/server/service/order-vas/order-vas-query.ts +0 -72
  115. package/server/service/order-vas/order-vas-types.ts +0 -159
  116. package/server/service/order-vas/order-vas.ts +0 -207
  117. package/server/service/others/index.ts +0 -5
  118. package/server/service/others/other-query.ts +0 -563
  119. package/server/service/others/other-types.ts +0 -115
  120. package/server/service/purchase-order/index.ts +0 -9
  121. package/server/service/purchase-order/purchase-order-mutation.ts +0 -458
  122. package/server/service/purchase-order/purchase-order-query.ts +0 -90
  123. package/server/service/purchase-order/purchase-order-types.ts +0 -154
  124. package/server/service/purchase-order/purchase-order.ts +0 -172
  125. package/server/service/purchase-order-other-charge/index.ts +0 -9
  126. package/server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.ts +0 -31
  127. package/server/service/purchase-order-other-charge/purchase-order-other-charge-query.ts +0 -52
  128. package/server/service/purchase-order-other-charge/purchase-order-other-charge-types.ts +0 -44
  129. package/server/service/purchase-order-other-charge/purchase-order-other-charge.ts +0 -68
  130. package/server/service/release-good/index.ts +0 -9
  131. package/server/service/release-good/release-good-mutation.ts +0 -1686
  132. package/server/service/release-good/release-good-query.ts +0 -980
  133. package/server/service/release-good/release-good-types.ts +0 -662
  134. package/server/service/release-good/release-good.ts +0 -490
  135. package/server/service/retail-replenishment-order/index.ts +0 -9
  136. package/server/service/retail-replenishment-order/retail-replenishment-order-mutation.ts +0 -382
  137. package/server/service/retail-replenishment-order/retail-replenishment-order-query.ts +0 -54
  138. package/server/service/retail-replenishment-order/retail-replenishment-order-types.ts +0 -101
  139. package/server/service/retail-replenishment-order/retail-replenishment-order.ts +0 -115
  140. package/server/service/return-order/index.ts +0 -9
  141. package/server/service/return-order/return-order-mutation.ts +0 -516
  142. package/server/service/return-order/return-order-query.ts +0 -226
  143. package/server/service/return-order/return-order-types.ts +0 -196
  144. package/server/service/return-order/return-order.ts +0 -127
  145. package/server/service/reverse-kitting-order/index.ts +0 -9
  146. package/server/service/reverse-kitting-order/reverse-kitting-order-mutation.ts +0 -500
  147. package/server/service/reverse-kitting-order/reverse-kitting-order-query.ts +0 -197
  148. package/server/service/reverse-kitting-order/reverse-kitting-order-type.ts +0 -173
  149. package/server/service/reverse-kitting-order/reverse-kitting-order.ts +0 -121
  150. package/server/service/reverse-kitting-order-inventory/index.ts +0 -9
  151. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.ts +0 -129
  152. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.ts +0 -52
  153. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.ts +0 -95
  154. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.ts +0 -143
  155. package/server/service/shipping-order/index.ts +0 -9
  156. package/server/service/shipping-order/shipping-order-mutation.ts +0 -61
  157. package/server/service/shipping-order/shipping-order-query.ts +0 -61
  158. package/server/service/shipping-order/shipping-order-types.ts +0 -89
  159. package/server/service/shipping-order/shipping-order.ts +0 -129
  160. package/server/service/transfer-order/index.ts +0 -9
  161. package/server/service/transfer-order/transfer-order-mutation.ts +0 -309
  162. package/server/service/transfer-order/transfer-order-query.ts +0 -66
  163. package/server/service/transfer-order/transfer-order-types.ts +0 -97
  164. package/server/service/transfer-order/transfer-order.ts +0 -117
  165. package/server/service/vas/index.ts +0 -9
  166. package/server/service/vas/vas-mutation.ts +0 -106
  167. package/server/service/vas/vas-query.ts +0 -60
  168. package/server/service/vas/vas-types.ts +0 -71
  169. package/server/service/vas/vas.ts +0 -77
  170. package/server/service/vas-order/index.ts +0 -9
  171. package/server/service/vas-order/vas-order-mutation.ts +0 -259
  172. package/server/service/vas-order/vas-order-query.ts +0 -119
  173. package/server/service/vas-order/vas-order-types.ts +0 -49
  174. package/server/service/vas-order/vas-order.ts +0 -81
  175. package/server/utils/datetime-util.ts +0 -54
  176. package/server/utils/index.ts +0 -3
  177. package/server/utils/inventory-util.ts +0 -1155
  178. package/server/utils/order-no-generator.ts +0 -146
@@ -1,516 +0,0 @@
1
- import type { FileUpload } from 'graphql-upload/GraphQLUpload.js'
2
- import GraphQLUpload from 'graphql-upload/GraphQLUpload.js'
3
- import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
4
- import { EntityManager, In } from 'typeorm'
5
-
6
- import { Attachment, createAttachments } from '@things-factory/attachment-base'
7
- import { Role } from '@things-factory/auth-base'
8
- import { Bizplace, getDomainUsers } from '@things-factory/biz-base'
9
- import { Product } from '@things-factory/product-base'
10
- import { Inventory } from '@things-factory/warehouse-base'
11
-
12
- import { NewOrderInventory, NewReturnOrder, OrderInventory, OrderVas, ReturnOrderPatch } from '../'
13
- import { ATTACHMENT_TYPE, ORDER_INVENTORY_STATUS, ORDER_STATUS, ORDER_VAS_STATUS } from '../../constants'
14
- import { OrderNoGenerator } from '../../utils'
15
- import { ReturnOrder } from './return-order'
16
-
17
- @Resolver(ReturnOrder)
18
- export class ReturnOrderMutation {
19
- @Directive('@privilege(category: "order_customer", privilege: "mutation")')
20
- @Directive('@transaction')
21
- @Mutation(returns => Boolean)
22
- async deleteReturnOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<boolean> {
23
- const { tx } = context.state
24
-
25
- return await deleteReturnOrder(tx, name, context)
26
- }
27
-
28
- @Directive('@privilege(category: "order_customer", privilege: "mutation")')
29
- @Directive('@transaction')
30
- @Mutation(returns => Boolean)
31
- async deleteReturnOrders(
32
- @Arg('names', type => [String]) names: string[],
33
- @Ctx() context: ResolverContext
34
- ): Promise<boolean> {
35
- const { tx, domain } = context.state
36
-
37
- await tx.getRepository(ReturnOrder).delete({
38
- domain: { id: domain.id },
39
- name: In(names)
40
- })
41
- return true
42
- }
43
-
44
- @Directive('@privilege(category: "order_customer", privilege: "mutation")')
45
- @Directive('@transaction')
46
- @Mutation(returns => ReturnOrder)
47
- async generateReturnOrder(
48
- @Ctx() context: ResolverContext,
49
- @Arg('file', type => [GraphQLUpload], { nullable: true }) file: FileUpload[],
50
- @Arg('returnOrder', type => NewReturnOrder, { nullable: true }) returnOrder: NewReturnOrder
51
- ): Promise<ReturnOrder> {
52
- const { tx, domain, user } = context.state
53
-
54
- const bizplace: Bizplace = await tx.getRepository(Bizplace).findOneBy({ id: returnOrder.customerBizplaceId })
55
-
56
- let orderInventories: NewOrderInventory[] = returnOrder.orderInventories
57
- let foundInv = Inventory
58
-
59
- const mergedOrderInventories = orderInventories.reduce((acc, curr) => {
60
- let existingItem = acc.find(
61
- itm =>
62
- itm.product.id === curr.product.id &&
63
- itm.packingType === curr.packingType &&
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
- }
74
-
75
- return acc
76
- }, [])
77
-
78
- returnOrder.orderInventories = mergedOrderInventories
79
-
80
- let newReturnOrder: NewReturnOrder = {
81
- ...returnOrder,
82
- name: OrderNoGenerator.returnOrder(),
83
- domain,
84
- bizplace,
85
- status: ORDER_STATUS.PENDING,
86
- creator: user,
87
- updater: user
88
- }
89
-
90
- if (newReturnOrder.orderInventories[0].returnQty < 0) {
91
- throw new Error('invalid return quantity')
92
- }
93
-
94
- let createdReturnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).save(newReturnOrder as any)
95
-
96
- for (let moi of mergedOrderInventories) {
97
- let newOrderInv: OrderInventory = Object.assign({}, moi) as any
98
- newOrderInv.domain = domain
99
- newOrderInv.bizplace = bizplace
100
- newOrderInv.status = ORDER_INVENTORY_STATUS.PENDING
101
- newOrderInv.name = OrderNoGenerator.orderInventory()
102
- newOrderInv.returnOrder = createdReturnOrder
103
- newOrderInv.product = await tx.getRepository(Product).findOneBy({ id: moi.product.id })
104
- newOrderInv.creator = user
105
- newOrderInv.updater = user
106
-
107
- if (newOrderInv.inventory?.id) {
108
- foundInv = (await tx.getRepository(Inventory).findOneBy({ id: newOrderInv.inventory.id })) as any
109
- newOrderInv.inventory = foundInv as any
110
- }
111
-
112
- await tx.getRepository(OrderInventory).save(newOrderInv)
113
- }
114
-
115
- if (file?.length > 0) {
116
- const attachments: Partial<Attachment>[] = file.map(attachment => {
117
- return {
118
- file: attachment,
119
- refType: ATTACHMENT_TYPE.RETURN_ORDER,
120
- refBy: createdReturnOrder.id,
121
- category: ATTACHMENT_TYPE.RETURN_ORDER /* TODO use refType */
122
- }
123
- })
124
- await createAttachments(null, { attachments }, context)
125
- }
126
-
127
- return createdReturnOrder
128
- }
129
-
130
- @Directive('@privilege(category: "order_customer", privilege: "mutation")')
131
- @Directive('@transaction')
132
- @Mutation(returns => ReturnOrder)
133
- async confirmReturnOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ReturnOrder> {
134
- const { tx } = context.state
135
-
136
- const returnOrder: ReturnOrder = await confirmReturnOrder(tx, name, context)
137
-
138
- return returnOrder
139
- }
140
-
141
- @Directive('@privilege(category: "order_customer", privilege: "mutation")')
142
- @Directive('@transaction')
143
- @Mutation(returns => ReturnOrder)
144
- async receiveReturnOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ReturnOrder> {
145
- const { tx } = context.state
146
- const returnOrder: ReturnOrder = await receiveReturnOrder(tx, name, context)
147
-
148
- return returnOrder
149
- }
150
-
151
- @Directive('@privilege(category: "order_customer", privilege: "mutation")')
152
- @Directive('@transaction')
153
- @Mutation(returns => ReturnOrder)
154
- async rejectReturnOrder(
155
- @Arg('name') name: string,
156
- @Arg('patch', type => ReturnOrderPatch) patch: ReturnOrderPatch,
157
- @Ctx() context: ResolverContext
158
- ): Promise<ReturnOrder> {
159
- const { tx } = context.state
160
- const returnOrder: ReturnOrder = await rejectReturnOrder(tx, name, patch.remark, context)
161
-
162
- return returnOrder
163
- }
164
-
165
- @Directive('@privilege(category: "order_customer", privilege: "mutation")')
166
- @Directive('@transaction')
167
- @Mutation(returns => ReturnOrder)
168
- async checkReturnOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<ReturnOrder> {
169
- const { tx } = context.state
170
- const returnOrder: ReturnOrder = await checkReturnOrder(tx, name, context)
171
-
172
- return returnOrder
173
- }
174
- }
175
-
176
- export async function deleteReturnOrder(tx: EntityManager, name: string, context: ResolverContext): Promise<boolean> {
177
- const { domain } = context.state
178
-
179
- let foundReturnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).findOne({
180
- where: { domain: { id: domain.id }, name },
181
- relations: ['orderInventories', 'orderInventories.inventory', 'orderVass', 'creator', 'updater']
182
- })
183
-
184
- if (!foundReturnOrder) throw new Error(`Return Order doesn't exists.`)
185
- const foundOIs: OrderInventory[] = foundReturnOrder.orderInventories
186
- const foundOVs: OrderVas[] = foundReturnOrder.orderVass
187
-
188
- let foundAttachment: Attachment
189
- if (foundReturnOrder?.ownTransport) {
190
- foundAttachment = await tx.getRepository(Attachment).findOne({
191
- where: {
192
- domain: { id: domain.id },
193
- refBy: foundReturnOrder.id,
194
- category: ATTACHMENT_TYPE.RETURN_ORDER
195
- }
196
- })
197
- }
198
-
199
- // Update locked qty and locked weight of inventories and return id list of order inventories
200
- const inventoryIds: string[] = foundOIs.map((oi: OrderInventory) => oi.id)
201
-
202
- // Delete order inventories by ids
203
- if (inventoryIds.length) {
204
- await tx.getRepository(OrderInventory).delete({ id: In(inventoryIds) })
205
- }
206
-
207
- // 2. delete order vass
208
- const vasIds = foundOVs.map((vas: OrderVas) => vas.id)
209
- if (vasIds.length) {
210
- await tx.getRepository(OrderVas).delete({ id: In(vasIds) })
211
- }
212
-
213
- if (foundAttachment) {
214
- await tx.getRepository(Attachment).delete({ domain: { id: domain.id }, id: foundAttachment.id })
215
- }
216
-
217
- await tx.getRepository(ReturnOrder).delete({ domain: { id: domain.id }, name })
218
- return true
219
- }
220
-
221
- export async function confirmReturnOrder(
222
- tx: EntityManager,
223
- name: string,
224
- context: ResolverContext
225
- ): Promise<ReturnOrder> {
226
- const { domain, user } = context.state
227
-
228
- const foundReturnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).findOne({
229
- where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING },
230
- relations: ['bizplace', 'orderInventories', 'orderVass']
231
- })
232
-
233
- if (!foundReturnOrder) throw new Error(`Return order doesn't exists.`)
234
- let foundOIs: OrderInventory[] = foundReturnOrder.orderInventories
235
- let foundOVs: OrderVas[] = foundReturnOrder.orderVass
236
- let customerBizplace: Bizplace = foundReturnOrder.bizplace
237
-
238
- // 1. RO Status change (PENDING => PENDING_RECEIVE)
239
- const returnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).save({
240
- ...foundReturnOrder,
241
- status: ORDER_STATUS.PENDING_RECEIVE,
242
- updater: user
243
- })
244
-
245
- // 1. Update status of order inventories
246
- foundOIs = foundOIs.map((orderInventory: OrderInventory) => {
247
- return {
248
- ...orderInventory,
249
- status: ORDER_INVENTORY_STATUS.PENDING_RECEIVE,
250
- updater: user
251
- }
252
- })
253
- await tx.getRepository(OrderInventory).save(foundOIs)
254
-
255
- // 2. Update status of order vass
256
- if (foundOVs && foundOVs.length) {
257
- foundOVs = foundOVs.map((orderVas: OrderVas) => {
258
- return {
259
- ...orderVas,
260
- status: ORDER_VAS_STATUS.PENDING_RECEIVE,
261
- updater: user
262
- }
263
- })
264
- await tx.getRepository(OrderVas).save(foundOVs)
265
- }
266
-
267
- // notification logics
268
- // get Office Admin Users
269
- const users: any[] = await tx
270
- .getRepository('users_roles')
271
- .createQueryBuilder('ur')
272
- .select('ur.users_id', 'id')
273
- .where(qb => {
274
- const subQuery = qb
275
- .subQuery()
276
- .select('role.id')
277
- .from(Role, 'role')
278
- .where("role.name = 'Office Admin'")
279
- .andWhere('role.domain_id = :domain', { domain: domain.id })
280
- .getQuery()
281
- return 'ur.roles_id IN ' + subQuery
282
- })
283
- .getRawMany()
284
-
285
- // send notification to Office Admin Users
286
- if (users?.length && context.header?.referer) {
287
- const receivers: any[] = users.map(user => user.id)
288
- const msg = {
289
- title: `New Return Order from ${customerBizplace.name}`,
290
- body: `New incoming order, ${foundReturnOrder.name} is pending for receiving`,
291
- url: context.header.referer,
292
- data: { url: context.header.referer }
293
- }
294
- /**
295
- * @notes Temporary off sendNotification due to suspect of causing wms down
296
- */
297
-
298
- // await sendNotification({
299
- // receivers,
300
- // message: { ...msg }
301
- // })
302
- }
303
-
304
- return returnOrder
305
- }
306
-
307
- export async function receiveReturnOrder(
308
- tx: EntityManager,
309
- name: string,
310
- context: ResolverContext
311
- ): Promise<ReturnOrder> {
312
- const { domain, user } = context.state
313
-
314
- const foundReturnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).findOne({
315
- where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },
316
- relations: ['bizplace', 'orderInventories', 'orderVass']
317
- })
318
-
319
- if (!foundReturnOrder) throw new Error(`Return order doesn't exists.`)
320
- let foundOIs: OrderInventory[] = foundReturnOrder.orderInventories
321
- let foundOVs: OrderVas[] = foundReturnOrder.orderVass
322
-
323
- // 1. RO Status change (PENDING_RECEIVE => INTRANSIT)
324
- const returnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).save({
325
- ...foundReturnOrder,
326
- status: ORDER_STATUS.INTRANSIT,
327
- updater: user,
328
- acceptedBy: user,
329
- acceptedAt: new Date()
330
- })
331
-
332
- // 1. Update status of order inventories
333
- foundOIs = foundOIs.map((orderInventory: OrderInventory) => {
334
- return {
335
- ...orderInventory,
336
- status: ORDER_INVENTORY_STATUS.INTRANSIT,
337
- updater: user
338
- }
339
- })
340
- await tx.getRepository(OrderInventory).save(foundOIs)
341
-
342
- // 2. Update status of order vass
343
- if (foundOVs && foundOVs.length) {
344
- foundOVs = foundOVs.map((orderVas: OrderVas) => {
345
- return {
346
- ...orderVas,
347
- status: ORDER_VAS_STATUS.INTRANSIT,
348
- updater: user
349
- }
350
- })
351
- await tx.getRepository(OrderVas).save(foundOVs)
352
- }
353
-
354
- // notification logics
355
- const users: any[] = await getDomainUsers(foundReturnOrder?.bizplace, tx)
356
-
357
- if (users?.length && context.header?.referer) {
358
- const receivers: any[] = users.map(user => user.id)
359
- const msg = {
360
- title: `Latest status for ${foundReturnOrder.name}`,
361
- body: `Your Return Order has been received and processed by ${domain.name}`,
362
- url: context.header.referer,
363
- data: { url: context.header.referer }
364
- }
365
-
366
- /**
367
- * @notes Temporary off sendNotification due to suspect of causing wms down
368
- */
369
-
370
- // await sendNotification({
371
- // receivers,
372
- // message: { ...msg }
373
- // })
374
- }
375
-
376
- return returnOrder
377
- }
378
-
379
- export async function rejectReturnOrder(
380
- tx: EntityManager,
381
- name: string,
382
- remark: string,
383
- context: any
384
- ): Promise<ReturnOrder> {
385
- const { domain, user } = context.state
386
-
387
- const foundReturnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).findOne({
388
- where: { domain: { id: domain.id }, name, status: ORDER_STATUS.PENDING_RECEIVE },
389
- relations: ['bizplace', 'orderInventories', 'orderVass']
390
- })
391
-
392
- if (!foundReturnOrder) throw new Error(`Return order doesn't exists.`)
393
- if (!remark) throw new Error('Remark is not exist.')
394
-
395
- let foundOIs: OrderInventory[] = foundReturnOrder.orderInventories
396
- let foundOVs: OrderVas[] = foundReturnOrder.orderVass
397
-
398
- foundReturnOrder.remark = remark
399
- foundReturnOrder.status = ORDER_STATUS.REJECTED
400
- foundReturnOrder.updater = user
401
- await tx.getRepository(ReturnOrder).save(foundReturnOrder)
402
-
403
- // 1. Update status of order inventories
404
- foundOIs = foundOIs.map((orderInventory: OrderInventory) => {
405
- return {
406
- ...orderInventory,
407
- status: ORDER_INVENTORY_STATUS.REJECTED,
408
- updater: user
409
- }
410
- })
411
- await tx.getRepository(OrderInventory).save(foundOIs)
412
-
413
- // 2. Update status of order vass
414
- if (foundOVs && foundOVs.length) {
415
- foundOVs = foundOVs.map((orderVas: OrderVas) => {
416
- return {
417
- ...orderVas,
418
- status: ORDER_VAS_STATUS.REJECTED,
419
- updater: user
420
- }
421
- })
422
- await tx.getRepository(OrderVas).save(foundOVs)
423
- }
424
-
425
- // notification logics
426
- const users: any[] = await getDomainUsers(foundReturnOrder?.bizplace, tx)
427
-
428
- if (users?.length && context.header?.referer) {
429
- const receivers: any[] = users.map(user => user.id)
430
- const msg = {
431
- title: `Latest status for ${foundReturnOrder.name}`,
432
- body: `Your Return Order has been rejected.`,
433
- url: context.header.referer,
434
- data: { url: context.header.referer }
435
- }
436
-
437
- /**
438
- * @notes Temporary off sendNotification due to suspect of causing wms down
439
- */
440
-
441
- // await sendNotification({
442
- // receivers,
443
- // message: { ...msg }
444
- // })
445
- }
446
-
447
- return foundReturnOrder
448
- }
449
-
450
- export async function checkReturnOrder(
451
- tx: EntityManager,
452
- name: string,
453
- context: ResolverContext
454
- ): Promise<ReturnOrder> {
455
- const { domain, user } = context.state
456
-
457
- const foundReturnOrder: ReturnOrder = await tx.getRepository(ReturnOrder).findOne({
458
- where: { domain: { id: domain.id }, name, status: ORDER_STATUS.INTRANSIT },
459
- relations: ['bizplace', 'orderInventories', 'orderVass']
460
- })
461
-
462
- if (!foundReturnOrder) throw new Error(`Return order doesn't exists.`)
463
-
464
- let foundOIs: OrderInventory[] = foundReturnOrder.orderInventories
465
- let foundOVs: OrderVas[] = foundReturnOrder.orderVass
466
-
467
- foundReturnOrder.status = ORDER_STATUS.ARRIVED
468
- foundReturnOrder.updater = user
469
- await tx.getRepository(ReturnOrder).save(foundReturnOrder)
470
-
471
- // 1. Update status of order inventories
472
- foundOIs = foundOIs.map((orderInventory: OrderInventory) => {
473
- return {
474
- ...orderInventory,
475
- status: ORDER_INVENTORY_STATUS.ARRIVED,
476
- updater: user
477
- }
478
- })
479
- await tx.getRepository(OrderInventory).save(foundOIs)
480
-
481
- // 2. Update status of order vass
482
- if (foundOVs && foundOVs.length) {
483
- foundOVs = foundOVs.map((orderVas: OrderVas) => {
484
- return {
485
- ...orderVas,
486
- status: ORDER_VAS_STATUS.ARRIVED,
487
- updater: user
488
- }
489
- })
490
- await tx.getRepository(OrderVas).save(foundOVs)
491
- }
492
-
493
- // notification logics
494
- const users: any[] = await getDomainUsers(foundReturnOrder?.bizplace, tx)
495
-
496
- if (users?.length && context.header?.referer) {
497
- const receivers: any[] = users.map(user => user.id)
498
- const msg = {
499
- title: `Latest status for ${foundReturnOrder.name}`,
500
- body: `Your goods has safely arrived at ${domain.name}.`,
501
- url: context.header.referer,
502
- data: { url: context.header.referer }
503
- }
504
-
505
- /**
506
- * @notes Temporary off sendNotification due to suspect of causing wms down
507
- */
508
-
509
- // await sendNotification({
510
- // receivers,
511
- // message: { ...msg }
512
- // })
513
- }
514
-
515
- return foundReturnOrder
516
- }