@things-factory/sales-base 8.0.0-beta.0 → 8.0.0-beta.2

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 (177) hide show
  1. package/package.json +13 -13
  2. package/server/constants/attachment-type.ts +0 -9
  3. package/server/constants/index.ts +0 -7
  4. package/server/constants/load-type.ts +0 -4
  5. package/server/constants/order.ts +0 -203
  6. package/server/constants/product-group-type.ts +0 -4
  7. package/server/constants/release-good.ts +0 -9
  8. package/server/constants/transfer-order-type.ts +0 -6
  9. package/server/constants/validation-error-code.ts +0 -3
  10. package/server/constants/vas-target-type.ts +0 -25
  11. package/server/controllers/ecommerce/ecommerce-controller.ts +0 -122
  12. package/server/controllers/ecommerce/index.ts +0 -2
  13. package/server/controllers/ecommerce/sellercraft-controller.ts +0 -182
  14. package/server/controllers/index.ts +0 -2
  15. package/server/controllers/order-controller.ts +0 -296
  16. package/server/errors/index.ts +0 -1
  17. package/server/errors/validation-error.ts +0 -25
  18. package/server/index.ts +0 -5
  19. package/server/migrations/index.ts +0 -9
  20. package/server/service/arrival-notice/arrival-notice-mutation.ts +0 -1152
  21. package/server/service/arrival-notice/arrival-notice-query.ts +0 -549
  22. package/server/service/arrival-notice/arrival-notice-types.ts +0 -310
  23. package/server/service/arrival-notice/arrival-notice.ts +0 -202
  24. package/server/service/arrival-notice/index.ts +0 -9
  25. package/server/service/claim/claim-mutation.ts +0 -308
  26. package/server/service/claim/claim-query.ts +0 -122
  27. package/server/service/claim/claim-types.ts +0 -130
  28. package/server/service/claim/claim.ts +0 -140
  29. package/server/service/claim/index.ts +0 -9
  30. package/server/service/claim-detail/claim-detail-mutation.ts +0 -102
  31. package/server/service/claim-detail/claim-detail-query.ts +0 -55
  32. package/server/service/claim-detail/claim-detail-types.ts +0 -47
  33. package/server/service/claim-detail/claim-detail.ts +0 -69
  34. package/server/service/claim-detail/index.ts +0 -9
  35. package/server/service/claim-order/claim-order-mutation.ts +0 -101
  36. package/server/service/claim-order/claim-order-query.ts +0 -47
  37. package/server/service/claim-order/claim-order-types.ts +0 -35
  38. package/server/service/claim-order/claim-order.ts +0 -81
  39. package/server/service/claim-order/index.ts +0 -9
  40. package/server/service/collection-order/collection-order-mutation.ts +0 -245
  41. package/server/service/collection-order/collection-order-query.ts +0 -97
  42. package/server/service/collection-order/collection-order-types.ts +0 -165
  43. package/server/service/collection-order/collection-order.ts +0 -135
  44. package/server/service/collection-order/index.ts +0 -9
  45. package/server/service/delivery-order/delivery-order-mutation.ts +0 -967
  46. package/server/service/delivery-order/delivery-order-query.ts +0 -631
  47. package/server/service/delivery-order/delivery-order-types.ts +0 -268
  48. package/server/service/delivery-order/delivery-order.ts +0 -258
  49. package/server/service/delivery-order/index.ts +0 -9
  50. package/server/service/draft-release-good/draft-release-good-mutation.ts +0 -765
  51. package/server/service/draft-release-good/draft-release-good-query.ts +0 -354
  52. package/server/service/draft-release-good/draft-release-good-type.ts +0 -261
  53. package/server/service/draft-release-good/draft-release-good.ts +0 -284
  54. package/server/service/draft-release-good/index.ts +0 -9
  55. package/server/service/goods-receival-note/goods-receival-note-mutation.ts +0 -129
  56. package/server/service/goods-receival-note/goods-receival-note-query.ts +0 -280
  57. package/server/service/goods-receival-note/goods-receival-note-types.ts +0 -105
  58. package/server/service/goods-receival-note/goods-receival-note.ts +0 -127
  59. package/server/service/goods-receival-note/index.ts +0 -9
  60. package/server/service/index.ts +0 -238
  61. package/server/service/inventory-check/index.ts +0 -9
  62. package/server/service/inventory-check/inventory-check-mutation.ts +0 -149
  63. package/server/service/inventory-check/inventory-check-query.ts +0 -48
  64. package/server/service/inventory-check/inventory-check-types.ts +0 -48
  65. package/server/service/inventory-check/inventory-check.ts +0 -90
  66. package/server/service/invoice/index.ts +0 -9
  67. package/server/service/invoice/invoice-mutation.ts +0 -95
  68. package/server/service/invoice/invoice-query.ts +0 -53
  69. package/server/service/invoice/invoice-types.ts +0 -279
  70. package/server/service/invoice/invoice.ts +0 -230
  71. package/server/service/invoice-product/index.ts +0 -9
  72. package/server/service/invoice-product/invoice-product-mutation.ts +0 -54
  73. package/server/service/invoice-product/invoice-product-query.ts +0 -54
  74. package/server/service/invoice-product/invoice-product-types.ts +0 -84
  75. package/server/service/invoice-product/invoice-product.ts +0 -92
  76. package/server/service/job-sheet/index.ts +0 -9
  77. package/server/service/job-sheet/job-sheet-mutation.ts +0 -92
  78. package/server/service/job-sheet/job-sheet-query.ts +0 -112
  79. package/server/service/job-sheet/job-sheet-types.ts +0 -78
  80. package/server/service/job-sheet/job-sheet.ts +0 -102
  81. package/server/service/manifest/index.ts +0 -6
  82. package/server/service/manifest/manifest-mutation.ts +0 -190
  83. package/server/service/manifest/manifest-query.ts +0 -149
  84. package/server/service/manifest/manifest-type.ts +0 -84
  85. package/server/service/manifest/manifest.ts +0 -114
  86. package/server/service/order-inventory/index.ts +0 -9
  87. package/server/service/order-inventory/order-inventory-mutation.ts +0 -54
  88. package/server/service/order-inventory/order-inventory-query.ts +0 -722
  89. package/server/service/order-inventory/order-inventory-types.ts +0 -238
  90. package/server/service/order-inventory/order-inventory.ts +0 -401
  91. package/server/service/order-product/index.ts +0 -9
  92. package/server/service/order-product/order-product-mutation.ts +0 -48
  93. package/server/service/order-product/order-product-query.ts +0 -89
  94. package/server/service/order-product/order-product-types.ts +0 -335
  95. package/server/service/order-product/order-product.ts +0 -362
  96. package/server/service/order-tote/index.ts +0 -9
  97. package/server/service/order-tote/order-tote-mutation.ts +0 -31
  98. package/server/service/order-tote/order-tote-query.ts +0 -112
  99. package/server/service/order-tote/order-tote-types.ts +0 -47
  100. package/server/service/order-tote/order-tote.ts +0 -73
  101. package/server/service/order-tote-item/index.ts +0 -9
  102. package/server/service/order-tote-item/order-tote-item-mutation.ts +0 -31
  103. package/server/service/order-tote-item/order-tote-item-query.ts +0 -82
  104. package/server/service/order-tote-item/order-tote-item-types.ts +0 -56
  105. package/server/service/order-tote-item/order-tote-item.ts +0 -72
  106. package/server/service/order-tote-seal/index.ts +0 -9
  107. package/server/service/order-tote-seal/order-tote-seal-mutation.ts +0 -31
  108. package/server/service/order-tote-seal/order-tote-seal-query.ts +0 -59
  109. package/server/service/order-tote-seal/order-tote-seal-types.ts +0 -41
  110. package/server/service/order-tote-seal/order-tote-seal.ts +0 -46
  111. package/server/service/order-vas/index.ts +0 -9
  112. package/server/service/order-vas/order-vas-mutation.ts +0 -20
  113. package/server/service/order-vas/order-vas-query.ts +0 -72
  114. package/server/service/order-vas/order-vas-types.ts +0 -159
  115. package/server/service/order-vas/order-vas.ts +0 -207
  116. package/server/service/others/index.ts +0 -5
  117. package/server/service/others/other-query.ts +0 -563
  118. package/server/service/others/other-types.ts +0 -115
  119. package/server/service/purchase-order/index.ts +0 -9
  120. package/server/service/purchase-order/purchase-order-mutation.ts +0 -458
  121. package/server/service/purchase-order/purchase-order-query.ts +0 -90
  122. package/server/service/purchase-order/purchase-order-types.ts +0 -154
  123. package/server/service/purchase-order/purchase-order.ts +0 -172
  124. package/server/service/purchase-order-other-charge/index.ts +0 -9
  125. package/server/service/purchase-order-other-charge/purchase-order-other-charge-mutation.ts +0 -31
  126. package/server/service/purchase-order-other-charge/purchase-order-other-charge-query.ts +0 -52
  127. package/server/service/purchase-order-other-charge/purchase-order-other-charge-types.ts +0 -44
  128. package/server/service/purchase-order-other-charge/purchase-order-other-charge.ts +0 -68
  129. package/server/service/release-good/index.ts +0 -9
  130. package/server/service/release-good/release-good-mutation.ts +0 -1686
  131. package/server/service/release-good/release-good-query.ts +0 -980
  132. package/server/service/release-good/release-good-types.ts +0 -662
  133. package/server/service/release-good/release-good.ts +0 -490
  134. package/server/service/retail-replenishment-order/index.ts +0 -9
  135. package/server/service/retail-replenishment-order/retail-replenishment-order-mutation.ts +0 -382
  136. package/server/service/retail-replenishment-order/retail-replenishment-order-query.ts +0 -54
  137. package/server/service/retail-replenishment-order/retail-replenishment-order-types.ts +0 -101
  138. package/server/service/retail-replenishment-order/retail-replenishment-order.ts +0 -115
  139. package/server/service/return-order/index.ts +0 -9
  140. package/server/service/return-order/return-order-mutation.ts +0 -516
  141. package/server/service/return-order/return-order-query.ts +0 -226
  142. package/server/service/return-order/return-order-types.ts +0 -196
  143. package/server/service/return-order/return-order.ts +0 -127
  144. package/server/service/reverse-kitting-order/index.ts +0 -9
  145. package/server/service/reverse-kitting-order/reverse-kitting-order-mutation.ts +0 -500
  146. package/server/service/reverse-kitting-order/reverse-kitting-order-query.ts +0 -197
  147. package/server/service/reverse-kitting-order/reverse-kitting-order-type.ts +0 -173
  148. package/server/service/reverse-kitting-order/reverse-kitting-order.ts +0 -121
  149. package/server/service/reverse-kitting-order-inventory/index.ts +0 -9
  150. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-mutation.ts +0 -129
  151. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-query.ts +0 -52
  152. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.ts +0 -95
  153. package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.ts +0 -143
  154. package/server/service/shipping-order/index.ts +0 -9
  155. package/server/service/shipping-order/shipping-order-mutation.ts +0 -61
  156. package/server/service/shipping-order/shipping-order-query.ts +0 -61
  157. package/server/service/shipping-order/shipping-order-types.ts +0 -89
  158. package/server/service/shipping-order/shipping-order.ts +0 -129
  159. package/server/service/transfer-order/index.ts +0 -9
  160. package/server/service/transfer-order/transfer-order-mutation.ts +0 -309
  161. package/server/service/transfer-order/transfer-order-query.ts +0 -66
  162. package/server/service/transfer-order/transfer-order-types.ts +0 -97
  163. package/server/service/transfer-order/transfer-order.ts +0 -117
  164. package/server/service/vas/index.ts +0 -9
  165. package/server/service/vas/vas-mutation.ts +0 -106
  166. package/server/service/vas/vas-query.ts +0 -60
  167. package/server/service/vas/vas-types.ts +0 -71
  168. package/server/service/vas/vas.ts +0 -77
  169. package/server/service/vas-order/index.ts +0 -9
  170. package/server/service/vas-order/vas-order-mutation.ts +0 -259
  171. package/server/service/vas-order/vas-order-query.ts +0 -119
  172. package/server/service/vas-order/vas-order-types.ts +0 -49
  173. package/server/service/vas-order/vas-order.ts +0 -81
  174. package/server/utils/datetime-util.ts +0 -54
  175. package/server/utils/index.ts +0 -3
  176. package/server/utils/inventory-util.ts +0 -1155
  177. package/server/utils/order-no-generator.ts +0 -146
@@ -1,631 +0,0 @@
1
- import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { EntityManager, In, Not, OrderByCondition, Repository } 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 { Product } from '@things-factory/product-base'
8
- import {
9
- buildQuery,
10
- convertListParams,
11
- Domain,
12
- Filter,
13
- getRepository,
14
- ListParam,
15
- Pagination,
16
- Sorting
17
- } from '@things-factory/shell'
18
- import { Inventory } from '@things-factory/warehouse-base'
19
-
20
- import { ORDER_STATUS } from '../../constants'
21
- import { OrderInventory } from '../order-inventory/order-inventory'
22
- import { OrderInventoryList } from '../order-inventory/order-inventory-types'
23
- import { ReleaseGood } from '../release-good/release-good'
24
- import { DeliveryOrder } from './delivery-order'
25
- import { DeliveryOrderList } from './delivery-order-types'
26
-
27
- const debug = require('debug')('things-factory:sales-base:delivery-orders')
28
-
29
- @Resolver(DeliveryOrder)
30
- export class DeliveryOrderQuery {
31
- @Query(returns => DeliveryOrderList)
32
- async deliveryOrders(
33
- @Ctx() context: ResolverContext,
34
- @Args(type => ListParam) params: ListParam
35
- ): Promise<DeliveryOrderList> {
36
- try {
37
- const { domain, user, tx } = context.state
38
-
39
- const bizplaceFilter = params.filters.find(param => param.name === 'bizplaceId')
40
- if (!bizplaceFilter) {
41
- params.filters.push({
42
- name: 'bizplaceId',
43
- operator: 'in',
44
- value: await getPermittedBizplaceIds(domain, user),
45
- relation: false
46
- })
47
- }
48
-
49
- const releaseGoodParam = params.filters.find(param => param.name === 'releaseGoodNo')
50
- if (releaseGoodParam) {
51
- let arrFilters = []
52
- params.filters.splice(
53
- params.filters.findIndex(item => item.name == 'releaseGoodNo'),
54
- 1
55
- )
56
- arrFilters.push({ ...releaseGoodParam, name: 'name' })
57
-
58
- const foundReleaseGoods: ReleaseGood[] = await getRepository(ReleaseGood).find({
59
- ...convertListParams(
60
- { filters: arrFilters },
61
- {
62
- searchables: ['name', 'releaseGoodNo', 'truckNo']
63
- }
64
- )
65
- })
66
-
67
- if (foundReleaseGoods && foundReleaseGoods.length) {
68
- params.filters.push({
69
- name: 'releaseGoodId',
70
- operator: 'in',
71
- value: foundReleaseGoods.map((releaseGood: ReleaseGood) => releaseGood.id),
72
- relation: false
73
- })
74
- }
75
- }
76
-
77
- const tzOffsetIdx = params.filters.findIndex(param => param.name === 'tzoffset')
78
- let tzOffset = 0
79
- if (tzOffsetIdx >= 0) {
80
- tzOffset = params.filters[tzOffsetIdx].value
81
- params.filters.splice(tzOffsetIdx, 1)
82
- }
83
-
84
- const fromDateParamIdx = params.filters.findIndex(param => param.name === 'fromDate')
85
- if (fromDateParamIdx >= 0) {
86
- let fromDateVal = new Date(params.filters[fromDateParamIdx].value)
87
- params.filters.splice(fromDateParamIdx, 1)
88
-
89
- params.filters.push({
90
- name: 'createdAt',
91
- operator: 'gte',
92
- value: fromDateVal.toISOString(),
93
- relation: false
94
- })
95
- }
96
- const toDateParamIdx = params.filters.findIndex(param => param.name === 'toDate')
97
- if (toDateParamIdx >= 0) {
98
- let toDateVal = new Date(params.filters[toDateParamIdx].value)
99
- params.filters.splice(toDateParamIdx, 1)
100
-
101
- params.filters.push({
102
- name: 'createdAt',
103
- operator: 'lt',
104
- value: new Date(toDateVal.setDate(toDateVal.getDate() + 1)).toISOString(),
105
- relation: false
106
- })
107
- }
108
-
109
- let refNoFilter = params.filters.find(x => x.name == 'refNo')
110
- let refNo2Filter = params.filters.find(x => x.name == 'refNo2')
111
- let refNo3Filter = params.filters.find(x => x.name == 'refNo3')
112
- let orderProductsApiFilter = params.filters.find(x => x.name == 'orderProductsApi')
113
-
114
- params.filters = params.filters.filter(
115
- x => x.name != 'refNo' && x.name != 'refNo2' && x.name != 'refNo3' && x.name != 'orderProductsApi'
116
- )
117
-
118
- const qb: any = getRepository(DeliveryOrder).createQueryBuilder('do')
119
- buildQuery(qb, params, context)
120
- qb.addSelect('COALESCE("cc".rank, 99999)', 'rank')
121
- qb.leftJoinAndSelect('do.bizplace', 'bizplace')
122
- qb.leftJoinAndSelect('do.releaseGood', 'releaseGood')
123
- qb.leftJoinAndSelect('do.transportDriver', 'td')
124
- qb.leftJoinAndSelect('do.transportVehicle', 'th')
125
- qb.leftJoin(
126
- subQuery => {
127
- return subQuery
128
- .select(`ccd.rank`, 'rank')
129
- .addSelect(`ccd.name`, 'status')
130
- .from(`common_code_details`, 'ccd')
131
- .innerJoin(`ccd.commonCode`, 'cc')
132
- .where(`ccd.domain_id = :domainId`, { domainId: domain.id })
133
- .andWhere(`cc.name = 'DELIVERY_STATUS'`)
134
- },
135
- 'cc',
136
- 'cc.status = do.status'
137
- )
138
-
139
- // was add specifically for API usage, do we really need
140
- // orderProducts over orderInventories? else we should remove this
141
- if (orderProductsApiFilter?.value) {
142
- qb.innerJoinAndSelect('releaseGood.orderProducts', 'orderProducts')
143
- }
144
-
145
- if (refNoFilter?.value) {
146
- qb.andWhere('releaseGood.ref_no ilike :refNo', { refNo: refNoFilter.value })
147
- }
148
- if (refNo2Filter?.value) {
149
- qb.andWhere('releaseGood.ref_no_2 ilike :refNo2', { refNo2: refNo2Filter.value })
150
- }
151
- if (refNo3Filter?.value) {
152
- qb.andWhere('releaseGood.ref_no_3 ilike :refNo3', { refNo3: refNo3Filter.value })
153
- }
154
-
155
- const arrChildSortData = ['refNo', 'refNo2', 'refNo3']
156
- const arrNameSortData = ['bizplace', 'releaseGood', 'updater']
157
- const sort: OrderByCondition = (params.sortings || []).reduce(
158
- (acc, sort) => ({
159
- ...acc,
160
- [arrChildSortData.indexOf(sort.name) >= 0
161
- ? 'releaseGood.' + sort.name
162
- : arrNameSortData.indexOf(sort.name) >= 0
163
- ? sort.name + '.name'
164
- : 'do.' + sort.name]: sort.desc ? 'DESC' : 'ASC'
165
- }),
166
- params.sortings.length < 1 ? { rank: 'ASC', 'do.createdAt': 'DESC' } : {}
167
- )
168
-
169
- qb.orderBy(sort)
170
-
171
- let [items, total] = await qb.getManyAndCount()
172
- if (orderProductsApiFilter?.value) {
173
- items = await Promise.all(
174
- items.map(async itm => {
175
- const qb: any = getRepository(OrderInventory).createQueryBuilder('OrderInventory')
176
-
177
- let orderInventories: any[] = await qb
178
- .leftJoinAndSelect('OrderInventory.product', 'Product')
179
- .leftJoinAndSelect('OrderInventory.orderToteItems', 'OrderToteItems')
180
- .leftJoinAndSelect('OrderToteItems.orderTote', 'OrderTote')
181
- .leftJoinAndSelect('OrderTote.orderToteSeals', 'OrderToteSeals')
182
- .where('OrderInventory.delivery_order_id = :deliveryOrderId', { deliveryOrderId: itm.id })
183
- .andWhere('OrderInventory.domain_id = :domainId', { domainId: domain.id })
184
- .getMany()
185
-
186
- return {
187
- ...itm,
188
- orderInventories
189
- }
190
- })
191
- )
192
- }
193
-
194
- return { items, total }
195
- } catch (error) {
196
- debug('deliveryOrders', error.toString())
197
- throw error
198
- }
199
- }
200
-
201
- @Query(returns => DeliveryOrder)
202
- async deliveryOrder(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<DeliveryOrder> {
203
- const { domain } = context.state
204
-
205
- const foundDO = await getRepository(DeliveryOrder).findOne({
206
- where: {
207
- domain: { id: domain.id },
208
- name
209
- },
210
- relations: ['domain', 'bizplace', 'transportDriver', 'transportVehicle', 'releaseGood', 'creator', 'updater']
211
- })
212
-
213
- let foundAttachments = []
214
- if (foundDO) {
215
- foundAttachments = await getRepository(Attachment).find({
216
- where: {
217
- domain: { id: domain.id },
218
- refBy: foundDO.id
219
- }
220
- })
221
- }
222
-
223
- return { ...foundDO, attachments: foundAttachments }
224
- }
225
-
226
- @Query(returns => DeliveryOrderList)
227
- async deliveryOrderRequests(
228
- @Ctx() context: ResolverContext,
229
- @Arg('filters', type => [Filter], { nullable: true }) filters?: Filter[],
230
- @Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
231
- @Arg('sortings', type => [Sorting], { nullable: true }) sortings?: Sorting[]
232
- ): Promise<DeliveryOrderList> {
233
- const { domain, user } = context.state
234
-
235
- const convertedParams = convertListParams({ filters, pagination, sortings })
236
-
237
- if (!convertedParams.where || !convertedParams.where.status) {
238
- convertedParams.where.status = Not(In([ORDER_STATUS.PENDING, ORDER_STATUS.EDITING]))
239
- }
240
-
241
- ;(convertedParams as any).bizplace = In(await getPermittedBizplaceIds(domain, user))
242
-
243
- const [items, total] = await getRepository(DeliveryOrder).findAndCount({
244
- ...convertedParams,
245
- relations: ['domain', 'bizplace', 'releaseGood', 'transportDriver', 'transportVehicle', 'creator', 'updater']
246
- })
247
-
248
- return { items, total }
249
- }
250
-
251
- @Query(returns => DeliveryOrderList)
252
- async deliveryOrderByReleaseGood(
253
- @Arg('releaseGoodNo') releaseGoodNo: string,
254
- @Ctx() context: ResolverContext
255
- ): Promise<DeliveryOrderList> {
256
- const releaseGood: ReleaseGood = await getRepository(ReleaseGood).findOne({
257
- where: { name: releaseGoodNo }
258
- })
259
-
260
- return await deliveryOrderByReleaseGood(releaseGood)
261
- }
262
-
263
- @Query(returns => OrderInventoryList)
264
- async deliveryOrderItems(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<OrderInventoryList> {
265
- const { domain } = context.state
266
- const deliveryOrder: DeliveryOrder = await getRepository(DeliveryOrder).findOne({
267
- where: { domain: { id: domain.id }, name }
268
- })
269
-
270
- let [items, total] = await getRepository(OrderInventory).findAndCount({
271
- where: { domain: { id: domain.id }, deliveryOrder: { id: deliveryOrder.id } },
272
- relations: ['inventory', 'inventory.product', 'inventory.reusablePallet']
273
- })
274
-
275
- items = items
276
- .map((oi: OrderInventory) => {
277
- const inventory: Inventory = oi.inventory
278
- const product: Product = inventory.product
279
- return {
280
- inventory: inventory,
281
- productName: `${product.name} (${product.description})`,
282
- packingType: inventory.packingType,
283
- batchId: inventory.batchId,
284
- releaseQty: oi.releaseQty,
285
- releaseUomValue: oi.releaseUomValue,
286
- remark: oi.remark,
287
- crossDocking: oi.crossDocking,
288
- pallet: inventory?.reusablePallet && inventory?.reusablePallet?.name ? inventory.reusablePallet.name : ''
289
- }
290
- })
291
- .reduce((newItem, item) => {
292
- var foundItem = newItem.find(
293
- newItem =>
294
- newItem.productName === item.productName &&
295
- newItem.batchId === item.batchId &&
296
- newItem.crossDocking === item.crossDocking &&
297
- newItem.pallet === item.pallet
298
- )
299
- if (!foundItem) {
300
- foundItem = {
301
- inventory: item.inventory,
302
- productName: item.productName,
303
- packingType: item.packingType,
304
- batchId: item.batchId,
305
- releaseQty: item.releaseQty,
306
- releaseUomValue: item.releaseUomValue,
307
- palletQty: 1,
308
- remark: item.remark,
309
- crossDocking: item.crossDocking,
310
- pallet: item.pallet
311
- }
312
-
313
- newItem.push(foundItem)
314
- return newItem
315
- } else {
316
- return newItem.map(ni => {
317
- if (
318
- ni.productName === item.productName &&
319
- ni.batchId === item.batchId &&
320
- ni.crossDocking === item.crossDocking &&
321
- ni.pallet === item.pallet
322
- ) {
323
- return {
324
- ...ni,
325
- palletQty: ni.palletQty + 1,
326
- releaseQty: ni.releaseQty + item.releaseQty,
327
- releaseUomValue: ni.releaseUomValue + item.releaseUomValue
328
- }
329
- } else {
330
- return ni
331
- }
332
- })
333
- }
334
- }, [])
335
-
336
- items = items.map((prod: any) => {
337
- return {
338
- ...prod,
339
- systemRemark: prod?.remark
340
- ? prod.remark
341
- : prod.crossDocking
342
- ? prod.pallet === ''
343
- ? `${prod.palletQty} PALLET(S) [C/D]`
344
- : `${prod.palletQty} PALLET(S) (${prod.pallet}) [C/D]`
345
- : prod.pallet === ''
346
- ? `${prod.palletQty} PALLET(S)`
347
- : `${prod.palletQty} PALLET(S) (${prod.pallet})`
348
- }
349
- })
350
-
351
- return { items, total }
352
- }
353
-
354
- @Query(returns => OrderInventoryList)
355
- async manualDeliveryOrderItems(
356
- @Arg('name') name: string,
357
- @Ctx() context: ResolverContext
358
- ): Promise<OrderInventoryList> {
359
- const { domain } = context.state
360
- const deliveryOrder: DeliveryOrder = await getRepository(DeliveryOrder).findOne({
361
- where: { domain: { id: domain.id }, name }
362
- })
363
-
364
- let [items, total] = await getRepository(OrderInventory).findAndCount({
365
- where: { domain: { id: domain.id }, deliveryOrder: { id: deliveryOrder.id } },
366
- relations: ['product']
367
- })
368
-
369
- items = items
370
- .map((oi: OrderInventory) => {
371
- const product: Product = oi.product
372
- return {
373
- inventory: oi.inventory,
374
- productId: product.id,
375
- productName: `${product.name} (${product.description})`,
376
- packingType: oi.packingType,
377
- batchId: oi.batchId,
378
- releaseQty: oi.releaseQty,
379
- releaseUomValue: oi.releaseUomValue,
380
- remark: oi.remark,
381
- crossDocking: oi.crossDocking,
382
- pallet: ''
383
- }
384
- })
385
- .reduce((newItem, item) => {
386
- var foundItem = newItem.find(
387
- newItem =>
388
- newItem.productName === item.productName &&
389
- newItem.batchId === item.batchId &&
390
- newItem.crossDocking === item.crossDocking &&
391
- newItem.pallet === item.pallet
392
- )
393
- if (!foundItem) {
394
- foundItem = {
395
- inventory: item.inventory,
396
- productId: item.productId,
397
- productName: item.productName,
398
- packingType: item.packingType,
399
- batchId: item.batchId,
400
- releaseQty: item.releaseQty,
401
- releaseUomValue: item.releaseUomValue,
402
- palletQty: 1,
403
- remark: item.remark,
404
- crossDocking: item.crossDocking,
405
- pallet: item.pallet
406
- }
407
-
408
- newItem.push(foundItem)
409
- return newItem
410
- } else {
411
- return newItem.map(ni => {
412
- if (
413
- ni.productName === item.productName &&
414
- ni.batchId === item.batchId &&
415
- ni.crossDocking === item.crossDocking &&
416
- ni.pallet === item.pallet
417
- ) {
418
- return {
419
- ...ni,
420
- palletQty: ni.palletQty + 1,
421
- releaseQty: ni.releaseQty + item.releaseQty,
422
- releaseUomValue: ni.releaseUomValue + item.releaseUomValue
423
- }
424
- } else {
425
- return ni
426
- }
427
- })
428
- }
429
- }, [])
430
-
431
- items = items.map((prod: any) => {
432
- return {
433
- ...prod,
434
- systemRemark: prod?.remark
435
- ? prod.remark
436
- : prod.crossDocking
437
- ? prod.pallet === ''
438
- ? `${prod.palletQty} PALLET(S) [C/D]`
439
- : `${prod.palletQty} PALLET(S) (${prod.pallet}) [C/D]`
440
- : prod.pallet === ''
441
- ? `${prod.palletQty} PALLET(S)`
442
- : `${prod.palletQty} PALLET(S) (${prod.pallet})`
443
- }
444
- })
445
-
446
- return { items, total }
447
- }
448
-
449
- @Query(returns => DeliveryOrderList)
450
- async deliveryOrderReport(
451
- @Ctx() context: ResolverContext,
452
- @Args(type => ListParam) params: ListParam
453
- ): Promise<DeliveryOrderList> {
454
- try {
455
- const { domain, user } = context.state
456
-
457
- const bizplaceFilter = params.filters.find(param => param.name === 'bizplaceId')
458
- if (!bizplaceFilter) {
459
- params.filters.push({
460
- name: 'bizplaceId',
461
- operator: 'in',
462
- value: await getPermittedBizplaceIds(domain, user),
463
- relation: false
464
- })
465
- }
466
-
467
- const releaseGoodParam = params.filters.find(param => param.name === 'releaseGoodNo')
468
- if (releaseGoodParam) {
469
- let arrFilters = []
470
- params.filters.splice(
471
- params.filters.findIndex(item => item.name == 'releaseGoodNo'),
472
- 1
473
- )
474
- arrFilters.push({ ...releaseGoodParam, name: 'name' })
475
-
476
- const foundReleaseGoods: ReleaseGood[] = await getRepository(ReleaseGood).find({
477
- ...convertListParams({ filters: arrFilters })
478
- })
479
-
480
- if (foundReleaseGoods && foundReleaseGoods.length) {
481
- params.filters.push({
482
- name: 'releaseGoodId',
483
- operator: 'in',
484
- value: foundReleaseGoods.map((releaseGood: ReleaseGood) => releaseGood.id),
485
- relation: false
486
- })
487
- }
488
- }
489
-
490
- const tzOffsetIdx = params.filters.findIndex(param => param.name === 'tzoffset')
491
- let tzOffset = 0
492
- if (tzOffsetIdx >= 0) {
493
- tzOffset = params.filters[tzOffsetIdx].value
494
- params.filters.splice(tzOffsetIdx, 1)
495
- }
496
-
497
- const fromDateParamIdx = params.filters.findIndex(param => param.name === 'fromDate')
498
- if (fromDateParamIdx >= 0) {
499
- let fromDateVal = new Date(params.filters[fromDateParamIdx].value)
500
- params.filters.splice(fromDateParamIdx, 1)
501
-
502
- params.filters.push({
503
- name: 'createdAt',
504
- operator: 'gte',
505
- value: fromDateVal.toISOString(),
506
- relation: false
507
- })
508
- }
509
- const toDateParamIdx = params.filters.findIndex(param => param.name === 'toDate')
510
- if (toDateParamIdx >= 0) {
511
- let toDateVal = new Date(params.filters[toDateParamIdx].value)
512
- params.filters.splice(toDateParamIdx, 1)
513
-
514
- params.filters.push({
515
- name: 'createdAt',
516
- operator: 'lt',
517
- value: new Date(toDateVal.setDate(toDateVal.getDate() + 1)).toISOString(),
518
- relation: false
519
- })
520
- }
521
-
522
- let refNoFilter = params.filters.find(x => x.name == 'refNo')
523
- let refNo2Filter = params.filters.find(x => x.name == 'refNo2')
524
- let refNo3Filter = params.filters.find(x => x.name == 'refNo3')
525
-
526
- params.filters = params.filters.filter(x => x.name != 'refNo' && x.name != 'refNo2' && x.name != 'refNo3')
527
-
528
- const qb: any = getRepository(DeliveryOrder).createQueryBuilder('do')
529
- buildQuery(qb, params, context)
530
- qb.addSelect('COALESCE("cc".rank, 99999)', 'rank')
531
- qb.leftJoinAndSelect('do.domain', 'domain')
532
- qb.leftJoinAndSelect('do.bizplace', 'bizplace')
533
- qb.leftJoinAndSelect('do.releaseGood', 'releaseGood')
534
- qb.leftJoinAndSelect('do.transportDriver', 'td')
535
- qb.leftJoinAndSelect('do.transportVehicle', 'th')
536
- qb.leftJoinAndSelect('do.orderInventories', 'oi')
537
- qb.leftJoinAndSelect('oi.inventory', 'inv')
538
- qb.leftJoinAndSelect('inv.product', 'prd')
539
- qb.leftJoinAndSelect('do.creator', 'creator')
540
- qb.leftJoinAndSelect('do.updater', 'updater')
541
- qb.leftJoin(
542
- subQuery => {
543
- return subQuery
544
- .select(`ccd.rank`, 'rank')
545
- .addSelect(`ccd.name`, 'status')
546
- .from(`common_code_details`, 'ccd')
547
- .innerJoin(`ccd.commonCode`, 'cc')
548
- .where(`ccd.domain_id = :domainId`, { domainId: domain.id })
549
- .andWhere(`cc.name = 'DELIVERY_STATUS'`)
550
- },
551
- 'cc',
552
- 'cc.status = do.status'
553
- )
554
-
555
- if (refNoFilter?.value) {
556
- qb.andWhere('releaseGood.ref_no ilike :refNo', { refNo: refNoFilter.value })
557
- }
558
- if (refNo2Filter?.value) {
559
- qb.andWhere('releaseGood.ref_no_2 ilike :refNo2', { refNo2: refNo2Filter.value })
560
- }
561
- if (refNo3Filter?.value) {
562
- qb.andWhere('releaseGood.ref_no_3 ilike :refNo3', { refNo3: refNo3Filter.value })
563
- }
564
-
565
- const arrChildSortData = ['refNo', 'refNo2', 'refNo3']
566
- const arrNameSortData = ['bizplace', 'releaseGood', 'updater']
567
- const sort: OrderByCondition = (params.sortings || []).reduce(
568
- (acc, sort) => ({
569
- ...acc,
570
- [arrChildSortData.indexOf(sort.name) >= 0
571
- ? 'releaseGood.' + sort.name
572
- : arrNameSortData.indexOf(sort.name) >= 0
573
- ? sort.name + '.name'
574
- : 'do.' + sort.name]: sort.desc ? 'DESC' : 'ASC'
575
- }),
576
- params.sortings.length < 1 ? { rank: 'ASC', 'do.createdAt': 'DESC' } : {}
577
- )
578
-
579
- qb.orderBy(sort)
580
-
581
- const [items, total] = await qb.getManyAndCount()
582
- return { items, total }
583
- } catch (error) {
584
- debug('deliveryOrders', error.toString())
585
- throw error
586
- }
587
- }
588
-
589
- @FieldResolver(type => Domain)
590
- async domain(@Root() deliveryOrder: DeliveryOrder): Promise<Domain> {
591
- return await getRepository(Domain).findOneBy({ id: deliveryOrder.domainId })
592
- }
593
-
594
- @FieldResolver(type => User)
595
- async creator(@Root() deliveryOrder: DeliveryOrder): Promise<User> {
596
- return await getRepository(User).findOneBy({ id: deliveryOrder.creatorId })
597
- }
598
-
599
- @FieldResolver(type => User)
600
- async updater(@Root() deliveryOrder: DeliveryOrder): Promise<User> {
601
- return await getRepository(User).findOneBy({ id: deliveryOrder.updaterId })
602
- }
603
- }
604
-
605
- export async function deliveryOrderByReleaseGood(releaseGood: ReleaseGood, trxMgr?: EntityManager): Promise<any> {
606
- const doRepo: Repository<DeliveryOrder> = trxMgr?.getRepository(DeliveryOrder) || getRepository(DeliveryOrder)
607
- const oiRepo: Repository<OrderInventory> = trxMgr?.getRepository(OrderInventory) || getRepository(OrderInventory)
608
-
609
- let [items, total] = await doRepo.findAndCount({
610
- where: { releaseGood: { id: releaseGood.id } },
611
- relations: ['domain', 'bizplace', 'releaseGood', 'transportDriver', 'transportVehicle', 'creator', 'updater']
612
- })
613
-
614
- items = await Promise.all(
615
- items.map(async (deliveryOrder: DeliveryOrder) => {
616
- return {
617
- ...deliveryOrder,
618
- truck: deliveryOrder?.truckNo || deliveryOrder.transportVehicle?.name || null,
619
- targetInventories: await oiRepo.find({
620
- where: { deliveryOrder: { id: deliveryOrder.id } },
621
- relations: ['domain', 'bizplace', 'releaseGood', 'inventory']
622
- })
623
- }
624
- })
625
- )
626
-
627
- return {
628
- items,
629
- total
630
- }
631
- }