@things-factory/sales-base 8.0.0-beta.9 → 8.0.1

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 +13 -13
  3. package/server/constants/attachment-type.ts +9 -0
  4. package/server/constants/index.ts +7 -0
  5. package/server/constants/load-type.ts +4 -0
  6. package/server/constants/order.ts +203 -0
  7. package/server/constants/product-group-type.ts +4 -0
  8. package/server/constants/release-good.ts +9 -0
  9. package/server/constants/transfer-order-type.ts +6 -0
  10. package/server/constants/validation-error-code.ts +3 -0
  11. package/server/constants/vas-target-type.ts +25 -0
  12. package/server/controllers/ecommerce/ecommerce-controller.ts +122 -0
  13. package/server/controllers/ecommerce/index.ts +2 -0
  14. package/server/controllers/ecommerce/sellercraft-controller.ts +182 -0
  15. package/server/controllers/index.ts +2 -0
  16. package/server/controllers/order-controller.ts +296 -0
  17. package/server/errors/index.ts +1 -0
  18. package/server/errors/validation-error.ts +25 -0
  19. package/server/index.ts +5 -0
  20. package/server/migrations/index.ts +9 -0
  21. package/server/service/arrival-notice/arrival-notice-mutation.ts +1152 -0
  22. package/server/service/arrival-notice/arrival-notice-query.ts +549 -0
  23. package/server/service/arrival-notice/arrival-notice-types.ts +310 -0
  24. package/server/service/arrival-notice/arrival-notice.ts +202 -0
  25. package/server/service/arrival-notice/index.ts +9 -0
  26. package/server/service/claim/claim-mutation.ts +308 -0
  27. package/server/service/claim/claim-query.ts +122 -0
  28. package/server/service/claim/claim-types.ts +130 -0
  29. package/server/service/claim/claim.ts +140 -0
  30. package/server/service/claim/index.ts +9 -0
  31. package/server/service/claim-detail/claim-detail-mutation.ts +102 -0
  32. package/server/service/claim-detail/claim-detail-query.ts +55 -0
  33. package/server/service/claim-detail/claim-detail-types.ts +47 -0
  34. package/server/service/claim-detail/claim-detail.ts +69 -0
  35. package/server/service/claim-detail/index.ts +9 -0
  36. package/server/service/claim-order/claim-order-mutation.ts +101 -0
  37. package/server/service/claim-order/claim-order-query.ts +47 -0
  38. package/server/service/claim-order/claim-order-types.ts +35 -0
  39. package/server/service/claim-order/claim-order.ts +81 -0
  40. package/server/service/claim-order/index.ts +9 -0
  41. package/server/service/collection-order/collection-order-mutation.ts +245 -0
  42. package/server/service/collection-order/collection-order-query.ts +97 -0
  43. package/server/service/collection-order/collection-order-types.ts +165 -0
  44. package/server/service/collection-order/collection-order.ts +135 -0
  45. package/server/service/collection-order/index.ts +9 -0
  46. package/server/service/delivery-order/delivery-order-mutation.ts +967 -0
  47. package/server/service/delivery-order/delivery-order-query.ts +631 -0
  48. package/server/service/delivery-order/delivery-order-types.ts +268 -0
  49. package/server/service/delivery-order/delivery-order.ts +258 -0
  50. package/server/service/delivery-order/index.ts +9 -0
  51. package/server/service/draft-release-good/draft-release-good-mutation.ts +765 -0
  52. package/server/service/draft-release-good/draft-release-good-query.ts +354 -0
  53. package/server/service/draft-release-good/draft-release-good-type.ts +261 -0
  54. package/server/service/draft-release-good/draft-release-good.ts +284 -0
  55. package/server/service/draft-release-good/index.ts +9 -0
  56. package/server/service/goods-receival-note/goods-receival-note-mutation.ts +129 -0
  57. package/server/service/goods-receival-note/goods-receival-note-query.ts +280 -0
  58. package/server/service/goods-receival-note/goods-receival-note-types.ts +105 -0
  59. package/server/service/goods-receival-note/goods-receival-note.ts +127 -0
  60. package/server/service/goods-receival-note/index.ts +9 -0
  61. package/server/service/index.ts +238 -0
  62. package/server/service/inventory-check/index.ts +9 -0
  63. package/server/service/inventory-check/inventory-check-mutation.ts +149 -0
  64. package/server/service/inventory-check/inventory-check-query.ts +48 -0
  65. package/server/service/inventory-check/inventory-check-types.ts +48 -0
  66. package/server/service/inventory-check/inventory-check.ts +90 -0
  67. package/server/service/invoice/index.ts +9 -0
  68. package/server/service/invoice/invoice-mutation.ts +95 -0
  69. package/server/service/invoice/invoice-query.ts +53 -0
  70. package/server/service/invoice/invoice-types.ts +279 -0
  71. package/server/service/invoice/invoice.ts +230 -0
  72. package/server/service/invoice-product/index.ts +9 -0
  73. package/server/service/invoice-product/invoice-product-mutation.ts +54 -0
  74. package/server/service/invoice-product/invoice-product-query.ts +54 -0
  75. package/server/service/invoice-product/invoice-product-types.ts +84 -0
  76. package/server/service/invoice-product/invoice-product.ts +92 -0
  77. package/server/service/job-sheet/index.ts +9 -0
  78. package/server/service/job-sheet/job-sheet-mutation.ts +92 -0
  79. package/server/service/job-sheet/job-sheet-query.ts +112 -0
  80. package/server/service/job-sheet/job-sheet-types.ts +78 -0
  81. package/server/service/job-sheet/job-sheet.ts +102 -0
  82. package/server/service/manifest/index.ts +6 -0
  83. package/server/service/manifest/manifest-mutation.ts +190 -0
  84. package/server/service/manifest/manifest-query.ts +149 -0
  85. package/server/service/manifest/manifest-type.ts +84 -0
  86. package/server/service/manifest/manifest.ts +114 -0
  87. package/server/service/order-inventory/index.ts +9 -0
  88. package/server/service/order-inventory/order-inventory-mutation.ts +54 -0
  89. package/server/service/order-inventory/order-inventory-query.ts +722 -0
  90. package/server/service/order-inventory/order-inventory-types.ts +238 -0
  91. package/server/service/order-inventory/order-inventory.ts +401 -0
  92. package/server/service/order-product/index.ts +9 -0
  93. package/server/service/order-product/order-product-mutation.ts +48 -0
  94. package/server/service/order-product/order-product-query.ts +89 -0
  95. package/server/service/order-product/order-product-types.ts +335 -0
  96. package/server/service/order-product/order-product.ts +362 -0
  97. package/server/service/order-tote/index.ts +9 -0
  98. package/server/service/order-tote/order-tote-mutation.ts +31 -0
  99. package/server/service/order-tote/order-tote-query.ts +112 -0
  100. package/server/service/order-tote/order-tote-types.ts +47 -0
  101. package/server/service/order-tote/order-tote.ts +73 -0
  102. package/server/service/order-tote-item/index.ts +9 -0
  103. package/server/service/order-tote-item/order-tote-item-mutation.ts +31 -0
  104. package/server/service/order-tote-item/order-tote-item-query.ts +82 -0
  105. package/server/service/order-tote-item/order-tote-item-types.ts +56 -0
  106. package/server/service/order-tote-item/order-tote-item.ts +72 -0
  107. package/server/service/order-tote-seal/index.ts +9 -0
  108. package/server/service/order-tote-seal/order-tote-seal-mutation.ts +31 -0
  109. package/server/service/order-tote-seal/order-tote-seal-query.ts +59 -0
  110. package/server/service/order-tote-seal/order-tote-seal-types.ts +41 -0
  111. package/server/service/order-tote-seal/order-tote-seal.ts +46 -0
  112. package/server/service/order-vas/index.ts +9 -0
  113. package/server/service/order-vas/order-vas-mutation.ts +20 -0
  114. package/server/service/order-vas/order-vas-query.ts +72 -0
  115. package/server/service/order-vas/order-vas-types.ts +159 -0
  116. package/server/service/order-vas/order-vas.ts +207 -0
  117. package/server/service/others/index.ts +5 -0
  118. package/server/service/others/other-query.ts +563 -0
  119. package/server/service/others/other-types.ts +115 -0
  120. package/server/service/purchase-order/index.ts +9 -0
  121. package/server/service/purchase-order/purchase-order-mutation.ts +458 -0
  122. package/server/service/purchase-order/purchase-order-query.ts +90 -0
  123. package/server/service/purchase-order/purchase-order-types.ts +154 -0
  124. package/server/service/purchase-order/purchase-order.ts +172 -0
  125. package/server/service/purchase-order-other-charge/index.ts +9 -0
  126. package/server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.ts +31 -0
  127. package/server/service/purchase-order-other-charge/purchase-order-other-charge-query.ts +52 -0
  128. package/server/service/purchase-order-other-charge/purchase-order-other-charge-types.ts +44 -0
  129. package/server/service/purchase-order-other-charge/purchase-order-other-charge.ts +68 -0
  130. package/server/service/release-good/index.ts +9 -0
  131. package/server/service/release-good/release-good-mutation.ts +1686 -0
  132. package/server/service/release-good/release-good-query.ts +980 -0
  133. package/server/service/release-good/release-good-types.ts +662 -0
  134. package/server/service/release-good/release-good.ts +490 -0
  135. package/server/service/retail-replenishment-order/index.ts +9 -0
  136. package/server/service/retail-replenishment-order/retail-replenishment-order-mutation.ts +382 -0
  137. package/server/service/retail-replenishment-order/retail-replenishment-order-query.ts +54 -0
  138. package/server/service/retail-replenishment-order/retail-replenishment-order-types.ts +101 -0
  139. package/server/service/retail-replenishment-order/retail-replenishment-order.ts +115 -0
  140. package/server/service/return-order/index.ts +9 -0
  141. package/server/service/return-order/return-order-mutation.ts +516 -0
  142. package/server/service/return-order/return-order-query.ts +226 -0
  143. package/server/service/return-order/return-order-types.ts +196 -0
  144. package/server/service/return-order/return-order.ts +127 -0
  145. package/server/service/reverse-kitting-order/index.ts +9 -0
  146. package/server/service/reverse-kitting-order/reverse-kitting-order-mutation.ts +500 -0
  147. package/server/service/reverse-kitting-order/reverse-kitting-order-query.ts +197 -0
  148. package/server/service/reverse-kitting-order/reverse-kitting-order-type.ts +173 -0
  149. package/server/service/reverse-kitting-order/reverse-kitting-order.ts +121 -0
  150. package/server/service/reverse-kitting-order-inventory/index.ts +9 -0
  151. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.ts +129 -0
  152. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.ts +52 -0
  153. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.ts +95 -0
  154. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.ts +143 -0
  155. package/server/service/shipping-order/index.ts +9 -0
  156. package/server/service/shipping-order/shipping-order-mutation.ts +61 -0
  157. package/server/service/shipping-order/shipping-order-query.ts +61 -0
  158. package/server/service/shipping-order/shipping-order-types.ts +89 -0
  159. package/server/service/shipping-order/shipping-order.ts +129 -0
  160. package/server/service/transfer-order/index.ts +9 -0
  161. package/server/service/transfer-order/transfer-order-mutation.ts +309 -0
  162. package/server/service/transfer-order/transfer-order-query.ts +66 -0
  163. package/server/service/transfer-order/transfer-order-types.ts +97 -0
  164. package/server/service/transfer-order/transfer-order.ts +117 -0
  165. package/server/service/vas/index.ts +9 -0
  166. package/server/service/vas/vas-mutation.ts +106 -0
  167. package/server/service/vas/vas-query.ts +60 -0
  168. package/server/service/vas/vas-types.ts +71 -0
  169. package/server/service/vas/vas.ts +77 -0
  170. package/server/service/vas-order/index.ts +9 -0
  171. package/server/service/vas-order/vas-order-mutation.ts +259 -0
  172. package/server/service/vas-order/vas-order-query.ts +119 -0
  173. package/server/service/vas-order/vas-order-types.ts +49 -0
  174. package/server/service/vas-order/vas-order.ts +81 -0
  175. package/server/utils/datetime-util.ts +54 -0
  176. package/server/utils/index.ts +3 -0
  177. package/server/utils/inventory-util.ts +1155 -0
  178. package/server/utils/order-no-generator.ts +146 -0
@@ -0,0 +1,245 @@
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 { In } from 'typeorm'
5
+
6
+ import { Attachment, createAttachments, deleteAttachment } from '@things-factory/attachment-base'
7
+ import { Bizplace, getMyBizplace, getPermittedBizplaceIds } from '@things-factory/biz-base'
8
+ import { getRepository } from '@things-factory/shell'
9
+ import { TransportDriver, TransportVehicle } from '@things-factory/transport-base'
10
+
11
+ import { ArrivalNotice, CollectionOrderPatch, GenerateCollectionOrder } from '../'
12
+ import { ORDER_STATUS } from '../../constants'
13
+ import { OrderNoGenerator } from '../../utils'
14
+ import { CollectionOrder } from './collection-order'
15
+
16
+ @Resolver(CollectionOrder)
17
+ export class CollectionOrderMutation {
18
+ @Directive('@transaction')
19
+ @Mutation(returns => CollectionOrder)
20
+ async updateCollectionOrder(
21
+ @Arg('name') name: string,
22
+ @Arg('patch', type => CollectionOrderPatch) patch: CollectionOrderPatch,
23
+ @Ctx() context: ResolverContext
24
+ ): Promise<CollectionOrder> {
25
+ const { tx, domain, user } = context.state
26
+
27
+ const collectionOrder = await tx.getRepository(CollectionOrder).findOne({
28
+ where: {
29
+ domain: { id: domain.id },
30
+ name,
31
+ bizplace: In(await getPermittedBizplaceIds(domain, user))
32
+ }
33
+ })
34
+
35
+ return await tx.getRepository(CollectionOrder).save({
36
+ ...collectionOrder,
37
+ ...patch,
38
+ updater: user
39
+ })
40
+ }
41
+
42
+ @Directive('@transaction')
43
+ @Mutation(returns => Boolean)
44
+ async deleteCollectionOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<boolean> {
45
+ const { tx, domain } = context.state
46
+
47
+ const foundCO = await tx.getRepository(CollectionOrder).findOne({
48
+ where: { domain: { id: domain.id }, name }
49
+ })
50
+ if (foundCO) {
51
+ const previousAttachment: Attachment = await tx.getRepository(Attachment).findOne({
52
+ where: { domain: { id: domain.id }, refBy: foundCO.id }
53
+ })
54
+ if (previousAttachment) await deleteAttachment(null, { id: previousAttachment.id }, context)
55
+ await tx.getRepository(CollectionOrder).delete({ domain: { id: domain.id }, name })
56
+ }
57
+ return true
58
+ }
59
+
60
+ @Directive('@transaction')
61
+ @Mutation(returns => CollectionOrder)
62
+ async generateCollectionOrder(
63
+ @Arg('collectionOrder', type => GenerateCollectionOrder) collectionOrder: GenerateCollectionOrder,
64
+ @Arg('attachments', type => [GraphQLUpload], { nullable: true }) attachments: FileUpload[],
65
+ @Ctx() context: ResolverContext
66
+ ): Promise<CollectionOrder> {
67
+ const { tx, domain, user } = context.state
68
+
69
+ const myBizplace: Bizplace = await getMyBizplace(domain, user)
70
+ // 1. Create collection order
71
+ const createdCollectionOrder: CollectionOrder = await tx.getRepository(CollectionOrder).save({
72
+ ...collectionOrder,
73
+ domain,
74
+ bizplace: myBizplace,
75
+ arrivalNotice: await tx.getRepository(ArrivalNotice).findOne({
76
+ where: { domain: { id: domain.id }, name: collectionOrder.refNo }
77
+ }),
78
+ status: ORDER_STATUS.PENDING,
79
+ creator: user,
80
+ updater: user
81
+ })
82
+
83
+ // 2. Create attachment
84
+ if (!attachments) return createdCollectionOrder
85
+
86
+ attachments = attachments.map(attachment => {
87
+ return {
88
+ refType: 'ORDER',
89
+ refBy: createdCollectionOrder.id,
90
+ file: attachment,
91
+ category: 'ORDER' /* TODO use refType */
92
+ }
93
+ })
94
+ await createAttachments(null, { attachments }, context)
95
+
96
+ return createdCollectionOrder
97
+ }
98
+
99
+ @Directive('@transaction')
100
+ @Mutation(returns => CollectionOrder)
101
+ async confirmCollectionOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<CollectionOrder> {
102
+ const { tx, domain, user } = context.state
103
+
104
+ const foundCollectionOrder: CollectionOrder = await tx.getRepository(CollectionOrder).findOne({
105
+ where: { domain: { id: domain.id }, name },
106
+ relations: ['creator', 'updater']
107
+ })
108
+
109
+ let collectionOrder: CollectionOrder
110
+ if (!foundCollectionOrder) throw new Error(`Collection Order doesn't exists.`)
111
+ if (foundCollectionOrder.status !== ORDER_STATUS.PENDING) throw new Error('Not confirmable status.')
112
+
113
+ // Collection Order Status change (PENDING => PENDING_RECEIVE)
114
+ collectionOrder = await tx.getRepository(CollectionOrder).save({
115
+ ...foundCollectionOrder,
116
+ status: ORDER_STATUS.PENDING_RECEIVE,
117
+ updater: user
118
+ })
119
+
120
+ return collectionOrder
121
+ }
122
+
123
+ @Directive('@transaction')
124
+ @Mutation(returns => CollectionOrder)
125
+ async receiveCollectionOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<CollectionOrder> {
126
+ try {
127
+ const { tx, domain, user } = context.state
128
+
129
+ const collectionOrder: CollectionOrder = await tx.getRepository(CollectionOrder).findOne({
130
+ where: { domain: { id: domain.id }, name }
131
+ })
132
+
133
+ if (!collectionOrder) throw new Error(`Collection order doesn't exists.`)
134
+ if (collectionOrder.status !== ORDER_STATUS.PENDING_RECEIVE) throw new Error(`Status is not receivable.`)
135
+
136
+ await tx.getRepository(CollectionOrder).save({
137
+ ...collectionOrder,
138
+ status: ORDER_STATUS.READY_TO_DISPATCH,
139
+ updater: user
140
+ })
141
+
142
+ return collectionOrder
143
+ } catch (e) {
144
+ throw e
145
+ }
146
+ }
147
+
148
+ @Directive('@transaction')
149
+ @Mutation(returns => CollectionOrder)
150
+ async checkCollectedOrder(
151
+ @Ctx() context: ResolverContext,
152
+ @Arg('name') name: string,
153
+ @Arg('patch', type => CollectionOrderPatch, { nullable: true }) patch?: CollectionOrderPatch
154
+ ): Promise<CollectionOrder> {
155
+ try {
156
+ const { tx, domain, user } = context.state
157
+
158
+ const collectionOrder: CollectionOrder = await tx.getRepository(CollectionOrder).findOne({
159
+ where: { domain: { id: domain.id }, name }
160
+ })
161
+
162
+ if (!collectionOrder) throw new Error(`Collection order doesn't exists.`)
163
+ if (collectionOrder.status !== ORDER_STATUS.COLLECTING) throw new Error(`Status is not receivable.`)
164
+
165
+ await getRepository(CollectionOrder).save({
166
+ ...collectionOrder,
167
+ ...patch,
168
+ status: ORDER_STATUS.DONE,
169
+ updater: user
170
+ })
171
+
172
+ return collectionOrder
173
+ } catch (e) {
174
+ throw e
175
+ }
176
+ }
177
+
178
+ @Directive('@transaction')
179
+ @Mutation(returns => CollectionOrder)
180
+ async dispatchCollectionOrder(
181
+ @Ctx() context: ResolverContext,
182
+ @Arg('orderInfo', type => CollectionOrderPatch, { nullable: true }) orderInfo?: CollectionOrderPatch
183
+ ): Promise<CollectionOrder> {
184
+ try {
185
+ const { tx, domain, user } = context.state
186
+
187
+ const foundCollectionOrder: CollectionOrder = await tx.getRepository(CollectionOrder).findOne({
188
+ where: { domain: { id: domain.id }, name: orderInfo.name }
189
+ })
190
+
191
+ if (!foundCollectionOrder) throw new Error(`Collection order doesn't exists.`)
192
+ if (foundCollectionOrder.status !== ORDER_STATUS.READY_TO_DISPATCH) throw new Error(`Status is not receivable.`)
193
+
194
+ await tx.getRepository(CollectionOrder).save({
195
+ ...foundCollectionOrder,
196
+ name: OrderNoGenerator.collectionOrder(),
197
+ transportDriver: await tx.getRepository(TransportDriver).findOneBy({
198
+ domain: { id: domain.id },
199
+ id: foundCollectionOrder.transportDriver.id
200
+ }),
201
+ transportVehicle: await tx.getRepository(TransportVehicle).findOneBy({
202
+ domain: { id: domain.id },
203
+ id: foundCollectionOrder.transportVehicle.id
204
+ }),
205
+ status: ORDER_STATUS.COLLECTING,
206
+ updater: user
207
+ })
208
+
209
+ return foundCollectionOrder
210
+ } catch (e) {
211
+ throw e
212
+ }
213
+ }
214
+
215
+ @Directive('@transaction')
216
+ @Mutation(returns => CollectionOrder)
217
+ async rejectCollectionOrder(
218
+ @Arg('name') name: string,
219
+ @Arg('patch', type => CollectionOrderPatch) patch: CollectionOrderPatch,
220
+ @Ctx() context: ResolverContext
221
+ ): Promise<CollectionOrder> {
222
+ try {
223
+ const { tx, domain, user } = context.state
224
+
225
+ const collectionOrder: CollectionOrder = await tx.getRepository(CollectionOrder).findOne({
226
+ where: { domain: { id: domain.id }, name }
227
+ })
228
+
229
+ if (!collectionOrder) throw new Error(`Collection order doesn't exists.`)
230
+ if (!patch.remark) throw new Error('Remark is not exist.')
231
+ if (collectionOrder.status !== ORDER_STATUS.PENDING_RECEIVE) throw new Error(`Status is not receivable.`)
232
+
233
+ await tx.getRepository(CollectionOrder).save({
234
+ ...collectionOrder,
235
+ ...patch,
236
+ status: ORDER_STATUS.REJECTED,
237
+ updater: user
238
+ })
239
+
240
+ return collectionOrder
241
+ } catch (e) {
242
+ throw e
243
+ }
244
+ }
245
+ }
@@ -0,0 +1,97 @@
1
+ import { Arg, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
+ import { In, Not } from 'typeorm'
3
+
4
+ import { Attachment } from '@things-factory/attachment-base'
5
+ import { User } from '@things-factory/auth-base'
6
+ import { getPermittedBizplaceIds } from '@things-factory/biz-base'
7
+ import { convertListParams, Domain, Filter, getRepository, Pagination, Sorting } from '@things-factory/shell'
8
+
9
+ import { CollectionOrderList } from '../'
10
+ import { ORDER_STATUS } from '../../constants'
11
+ import { CollectionOrder } from './collection-order'
12
+
13
+ @Resolver(CollectionOrder)
14
+ export class CollectionOrderQuery {
15
+ @Query(returns => CollectionOrder)
16
+ async collectionOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<CollectionOrder> {
17
+ const { domain, user } = context.state
18
+
19
+ const foundCO = await getRepository(CollectionOrder).findOne({
20
+ where: {
21
+ domain: { id: domain.id },
22
+ name,
23
+ bizplace: In(await getPermittedBizplaceIds(domain, user))
24
+ },
25
+ relations: ['domain', 'bizplace', 'arrivalNotice', 'transportDriver', 'transportVehicle', 'creator', 'updater']
26
+ })
27
+
28
+ const foundAttachments = await getRepository(Attachment).find({
29
+ where: {
30
+ domain: { id: domain.id },
31
+ refBy: foundCO.id
32
+ }
33
+ })
34
+
35
+ return { ...foundCO, attachments: foundAttachments }
36
+ }
37
+
38
+ @Query(returns => CollectionOrderList)
39
+ async collectionOrders(
40
+ @Ctx() context: ResolverContext,
41
+ @Arg('filters', type => [Filter], { nullable: true }) filters?: [Filter],
42
+ @Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
43
+ @Arg('sortings', type => [Sorting], { nullable: true }) sortings?: [Sorting]
44
+ ): Promise<CollectionOrderList> {
45
+ const { domain, user } = context.state
46
+
47
+ const convertedParams = convertListParams({ filters, pagination, sortings })
48
+ convertedParams.where.bizplace = In(await getPermittedBizplaceIds(domain, user))
49
+
50
+ const [items, total] = await getRepository(CollectionOrder).findAndCount({
51
+ ...convertedParams,
52
+ relations: ['domain', 'bizplace', 'arrivalNotice', 'transportDriver', 'transportVehicle', 'creator', 'updater']
53
+ })
54
+
55
+ return { items, total }
56
+ }
57
+
58
+ @Query(returns => CollectionOrderList)
59
+ async collectionOrderRequests(
60
+ @Ctx() context: ResolverContext,
61
+ @Arg('filters', type => [Filter], { nullable: true }) filters?: [Filter],
62
+ @Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
63
+ @Arg('sortings', type => [Sorting], { nullable: true }) sortings?: [Sorting]
64
+ ): Promise<CollectionOrderList> {
65
+ const { domain, user } = context.state
66
+
67
+ const convertedParams = convertListParams({ filters, pagination, sortings })
68
+
69
+ if (!convertedParams.where || !convertedParams.where.status) {
70
+ convertedParams.where.status = Not(In([ORDER_STATUS.PENDING, ORDER_STATUS.EDITING]))
71
+ }
72
+
73
+ ;(convertedParams as any).bizplace = In(await getPermittedBizplaceIds(domain, user))
74
+
75
+ const [items, total] = await getRepository(CollectionOrder).findAndCount({
76
+ ...convertedParams,
77
+ relations: ['domain', 'bizplace', 'arrivalNotice', 'transportDriver', 'transportVehicle', 'creator', 'updater']
78
+ })
79
+
80
+ return { items, total }
81
+ }
82
+
83
+ @FieldResolver(type => Domain)
84
+ async domain(@Root() collectionOrder: CollectionOrder): Promise<Domain> {
85
+ return await getRepository(Domain).findOneBy({ id: collectionOrder.domainId })
86
+ }
87
+
88
+ @FieldResolver(type => User)
89
+ async creator(@Root() collectionOrder: CollectionOrder): Promise<User> {
90
+ return await getRepository(User).findOneBy({ id: collectionOrder.creatorId })
91
+ }
92
+
93
+ @FieldResolver(type => User)
94
+ async updater(@Root() collectionOrder: CollectionOrder): Promise<User> {
95
+ return await getRepository(User).findOneBy({ id: collectionOrder.updaterId })
96
+ }
97
+ }
@@ -0,0 +1,165 @@
1
+ import { ObjectRef } from '@things-factory/shell'
2
+ import { Field, Float, ID, InputType, Int, ObjectType } from 'type-graphql'
3
+ import { CollectionOrder } from './collection-order'
4
+
5
+ @ObjectType()
6
+ export class CollectionOrderList {
7
+ @Field(type => [CollectionOrder], { nullable: true })
8
+ items: CollectionOrder[]
9
+
10
+ @Field(type => Int, { nullable: true })
11
+ total: number
12
+ }
13
+
14
+ @InputType()
15
+ export class NewCollectionOrder {
16
+ @Field({ nullable: true })
17
+ name: string
18
+
19
+ @Field({ nullable: true })
20
+ description: string
21
+
22
+ @Field({ nullable: true })
23
+ from: string
24
+
25
+ @Field({ nullable: true })
26
+ to: string
27
+
28
+ @Field({ nullable: true })
29
+ truckNo: string
30
+
31
+ @Field({ nullable: true })
32
+ refNo: string
33
+
34
+ @Field({ nullable: true })
35
+ telNo: string
36
+
37
+ @Field(type => Float, { nullable: true })
38
+ loadWeight: number
39
+
40
+ @Field({ nullable: true })
41
+ urgency: Boolean
42
+
43
+ @Field({ nullable: true })
44
+ cargoType: string
45
+
46
+ @Field({ nullable: true })
47
+ looseItem: Boolean
48
+
49
+ @Field(type => ObjectRef, { nullable: true })
50
+ arrivalNotice: ObjectRef
51
+
52
+ @Field({ nullable: true })
53
+ collectionDateTime: string
54
+
55
+ @Field()
56
+ collectionDate: string
57
+
58
+ @Field({ nullable: true })
59
+ status: string
60
+ }
61
+
62
+ @InputType()
63
+ export class GenerateCollectionOrder {
64
+ @Field({ nullable: true })
65
+ name: string
66
+
67
+ @Field({ nullable: true })
68
+ description: string
69
+
70
+ @Field({ nullable: true })
71
+ from: string
72
+
73
+ @Field({ nullable: true })
74
+ to: string
75
+
76
+ @Field({ nullable: true })
77
+ truckNo: string
78
+
79
+ @Field({ nullable: true })
80
+ refNo: string
81
+
82
+ @Field({ nullable: true })
83
+ telNo: string
84
+
85
+ @Field(type => Float, { nullable: true })
86
+ loadWeight: number
87
+
88
+ @Field({ nullable: true })
89
+ looseItem: Boolean
90
+
91
+ @Field({ nullable: true })
92
+ urgency: Boolean
93
+
94
+ @Field({ nullable: true })
95
+ cargoType: string
96
+
97
+ @Field({ nullable: true })
98
+ collectionDateTime: string
99
+
100
+ @Field()
101
+ collectionDate: string
102
+
103
+ @Field({ nullable: true })
104
+ status: string
105
+ }
106
+
107
+ @InputType()
108
+ export class CollectionOrderPatch {
109
+ @Field(type => ID, { nullable: true })
110
+ id: string
111
+
112
+ @Field({ nullable: true })
113
+ name: string
114
+
115
+ @Field({ nullable: true })
116
+ description: string
117
+
118
+ @Field({ nullable: true })
119
+ from: string
120
+
121
+ @Field({ nullable: true })
122
+ to: string
123
+
124
+ @Field({ nullable: true })
125
+ refNo: string
126
+
127
+ @Field(type => Float, { nullable: true })
128
+ loadWeight: number
129
+
130
+ @Field({ nullable: true })
131
+ urgency: Boolean
132
+
133
+ @Field({ nullable: true })
134
+ looseItem: Boolean
135
+
136
+ @Field({ nullable: true })
137
+ cargoType: string
138
+
139
+ @Field({ nullable: true })
140
+ collectionDateTime: string
141
+
142
+ @Field({ nullable: true })
143
+ collectionDate: string
144
+
145
+ @Field(type => ObjectRef, { nullable: true })
146
+ arrivalNotice: ObjectRef
147
+
148
+ @Field(type => ObjectRef, { nullable: true })
149
+ transportDriver: ObjectRef
150
+
151
+ @Field(type => ObjectRef, { nullable: true })
152
+ transportVehicle: ObjectRef
153
+
154
+ @Field({ nullable: true })
155
+ telNo: string
156
+
157
+ @Field({ nullable: true })
158
+ remark: string
159
+
160
+ @Field({ nullable: true })
161
+ truckNo: string
162
+
163
+ @Field({ nullable: true })
164
+ status: string
165
+ }
@@ -0,0 +1,135 @@
1
+ import { Attachment } from '@things-factory/attachment-base'
2
+ import { User } from '@things-factory/auth-base'
3
+ import { Bizplace } from '@things-factory/biz-base'
4
+ import { Domain, roundTransformer } from '@things-factory/shell'
5
+ import { TransportDriver, TransportVehicle } from '@things-factory/transport-base'
6
+ import { Field, ObjectType } from 'type-graphql'
7
+ import { Column, CreateDateColumn, Entity, Index, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, RelationId, UpdateDateColumn } from 'typeorm'
8
+ import { ArrivalNotice } from '../'
9
+
10
+ @Entity()
11
+ @Index('ix_collection-order_0', (collectionOrder: CollectionOrder) => [collectionOrder.domain, collectionOrder.name], {
12
+ unique: true
13
+ })
14
+ @ObjectType()
15
+ export class CollectionOrder {
16
+ @PrimaryGeneratedColumn('uuid')
17
+ @Field()
18
+ readonly id: string
19
+
20
+ @ManyToOne(type => Domain)
21
+ @Field(type => Domain, { nullable: true })
22
+ domain: Domain
23
+
24
+ @RelationId((collectionOrder: CollectionOrder) => collectionOrder.domain)
25
+ domainId: string
26
+
27
+ @ManyToOne(type => Bizplace)
28
+ @Field(type => Bizplace, { nullable: true })
29
+ bizplace: Bizplace
30
+
31
+ @RelationId((collectionOrder: CollectionOrder) => collectionOrder.bizplace)
32
+ bizplaceId: string
33
+
34
+ @Column()
35
+ @Field()
36
+ name: string
37
+
38
+ @Column({ nullable: true })
39
+ @Field({ nullable: true })
40
+ from: string
41
+
42
+ @Column({ nullable: true })
43
+ @Field({ nullable: true })
44
+ to: string
45
+
46
+ @Column({ nullable: true })
47
+ @Field({ nullable: true })
48
+ collectionDateTime: Date
49
+
50
+ @Column({ nullable: true })
51
+ @Field({ nullable: true })
52
+ collectionDate: string
53
+
54
+ @Column('float', { nullable: true, transformer: roundTransformer })
55
+ @Field({ nullable: true })
56
+ loadWeight: Number
57
+
58
+ @Column({ nullable: true })
59
+ @Field({ nullable: true })
60
+ cargoType: string
61
+
62
+ @OneToOne(type => TransportDriver)
63
+ @JoinColumn()
64
+ @Field(type => TransportDriver, { nullable: true })
65
+ transportDriver: TransportDriver
66
+
67
+ @OneToOne(type => TransportVehicle)
68
+ @JoinColumn()
69
+ @Field(type => TransportVehicle, { nullable: true })
70
+ transportVehicle: TransportVehicle
71
+
72
+ @Column({ nullable: true })
73
+ @Field({ nullable: true })
74
+ urgency: Boolean
75
+
76
+ @Column({ nullable: true })
77
+ @Field({ nullable: true })
78
+ looseItem: Boolean
79
+
80
+ @Column({ nullable: true })
81
+ @Field({ nullable: true })
82
+ refNo: string
83
+
84
+ @Column({ nullable: true })
85
+ @Field({ nullable: true })
86
+ truckNo: string
87
+
88
+ @ManyToOne(type => ArrivalNotice)
89
+ @Field(type => ArrivalNotice, { nullable: true })
90
+ arrivalNotice: ArrivalNotice
91
+
92
+ @RelationId((collectionOrder: CollectionOrder) => collectionOrder.arrivalNotice)
93
+ arrivalNoticeId: string
94
+
95
+ @Column({ nullable: true })
96
+ @Field({ nullable: true })
97
+ telNo: string
98
+
99
+ @Column({ nullable: true })
100
+ @Field({ nullable: true })
101
+ remark: string
102
+
103
+ @Column()
104
+ @Field()
105
+ status: string
106
+
107
+ @Column({ nullable: true })
108
+ @Field({ nullable: true })
109
+ description: string
110
+
111
+ @CreateDateColumn()
112
+ @Field()
113
+ createdAt: Date
114
+
115
+ @UpdateDateColumn()
116
+ @Field()
117
+ updatedAt: Date
118
+
119
+ @ManyToOne(type => User)
120
+ @Field(type => User, { nullable: true })
121
+ creator: User
122
+
123
+ @RelationId((collectionOrder: CollectionOrder) => collectionOrder.creator)
124
+ creatorId: string
125
+
126
+ @ManyToOne(type => User)
127
+ @Field(type => User, { nullable: true })
128
+ updater: User
129
+
130
+ @RelationId((collectionOrder: CollectionOrder) => collectionOrder.updater)
131
+ updaterId: string
132
+
133
+ @Field(type => Attachment, { nullable: true })
134
+ attachments: Attachment[]
135
+ }
@@ -0,0 +1,9 @@
1
+ import { CollectionOrder } from './collection-order'
2
+ import { CollectionOrderMutation } from './collection-order-mutation'
3
+ import { CollectionOrderQuery } from './collection-order-query'
4
+
5
+ export const entities = [CollectionOrder]
6
+ export const resolvers = [CollectionOrderQuery, CollectionOrderMutation]
7
+
8
+ export * from './collection-order-mutation'
9
+ export * from './collection-order-query'