@things-factory/operato-hub 4.3.79-alpha.1 → 4.3.79

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 (168) hide show
  1. package/dist-server/middlewares/business-middleware.js +1 -4
  2. package/dist-server/middlewares/business-middleware.js.map +1 -1
  3. package/dist-server/middlewares/store-middleware.js.map +1 -1
  4. package/dist-server/routers/api/restful-apis/unstable/add-draft-release-order.js +2 -3
  5. package/dist-server/routers/api/restful-apis/unstable/add-draft-release-order.js.map +1 -1
  6. package/dist-server/routers/api/restful-apis/unstable/add-inbound-order.js +2 -5
  7. package/dist-server/routers/api/restful-apis/unstable/add-inbound-order.js.map +1 -1
  8. package/dist-server/routers/api/restful-apis/unstable/add-release-order.js +2 -4
  9. package/dist-server/routers/api/restful-apis/unstable/add-release-order.js.map +1 -1
  10. package/dist-server/routers/api/restful-apis/v1/bizplace.js +45 -0
  11. package/dist-server/routers/api/restful-apis/v1/bizplace.js.map +1 -0
  12. package/dist-server/routers/api/restful-apis/v1/get-contact-point-list.js +103 -0
  13. package/dist-server/routers/api/restful-apis/v1/get-contact-point-list.js.map +1 -0
  14. package/dist-server/routers/api/restful-apis/v1/get-delivery-order-detail.js +47 -0
  15. package/dist-server/routers/api/restful-apis/v1/get-delivery-order-detail.js.map +1 -0
  16. package/dist-server/routers/api/restful-apis/v1/get-delivery-order-list.js +124 -0
  17. package/dist-server/routers/api/restful-apis/v1/get-delivery-order-list.js.map +1 -0
  18. package/dist-server/routers/api/restful-apis/v1/get-delivery-orders.js +164 -0
  19. package/dist-server/routers/api/restful-apis/v1/get-delivery-orders.js.map +1 -0
  20. package/dist-server/routers/api/restful-apis/v1/get-goods-received-notes.js +120 -0
  21. package/dist-server/routers/api/restful-apis/v1/get-goods-received-notes.js.map +1 -0
  22. package/dist-server/routers/api/restful-apis/v1/get-inbound-order-detail.js +115 -0
  23. package/dist-server/routers/api/restful-apis/v1/get-inbound-order-detail.js.map +1 -0
  24. package/dist-server/routers/api/restful-apis/v1/get-inbound-order-list.js +125 -0
  25. package/dist-server/routers/api/restful-apis/v1/get-inbound-order-list.js.map +1 -0
  26. package/dist-server/routers/api/restful-apis/v1/get-inventory-overall-product-group.js +88 -0
  27. package/dist-server/routers/api/restful-apis/v1/get-inventory-overall-product-group.js.map +1 -0
  28. package/dist-server/routers/api/restful-apis/v1/get-marketplace-store-list.js +79 -0
  29. package/dist-server/routers/api/restful-apis/v1/get-marketplace-store-list.js.map +1 -0
  30. package/dist-server/routers/api/restful-apis/v1/get-onhand-inventories.js +110 -0
  31. package/dist-server/routers/api/restful-apis/v1/get-onhand-inventories.js.map +1 -0
  32. package/dist-server/routers/api/restful-apis/v1/get-partners.js +23 -0
  33. package/dist-server/routers/api/restful-apis/v1/get-partners.js.map +1 -0
  34. package/dist-server/routers/api/restful-apis/v1/get-products.js +210 -0
  35. package/dist-server/routers/api/restful-apis/v1/get-products.js.map +1 -0
  36. package/dist-server/routers/api/restful-apis/v1/get-release-order-detail.js +122 -0
  37. package/dist-server/routers/api/restful-apis/v1/get-release-order-detail.js.map +1 -0
  38. package/dist-server/routers/api/restful-apis/v1/get-release-order-list.js +191 -0
  39. package/dist-server/routers/api/restful-apis/v1/get-release-order-list.js.map +1 -0
  40. package/dist-server/routers/api/restful-apis/v1/get-warehouses.js +20 -0
  41. package/dist-server/routers/api/restful-apis/v1/get-warehouses.js.map +1 -0
  42. package/dist-server/routers/api/restful-apis/v1/index.js +31 -2
  43. package/dist-server/routers/api/restful-apis/v1/index.js.map +1 -1
  44. package/package.json +54 -54
  45. package/server/middlewares/business-middleware.ts +1 -5
  46. package/server/middlewares/store-middleware.ts +0 -1
  47. package/server/routers/api/restful-apis/unstable/add-draft-release-order.ts +2 -3
  48. package/server/routers/api/restful-apis/unstable/add-inbound-order.ts +2 -5
  49. package/server/routers/api/restful-apis/unstable/add-release-order.ts +2 -4
  50. package/server/routers/api/restful-apis/v1/bizplace.ts +45 -0
  51. package/server/routers/api/restful-apis/v1/get-contact-point-list.ts +110 -0
  52. package/server/routers/api/restful-apis/v1/get-delivery-order-detail.ts +46 -0
  53. package/server/routers/api/restful-apis/v1/get-delivery-order-list.ts +121 -0
  54. package/server/routers/api/restful-apis/v1/get-delivery-orders.ts +178 -0
  55. package/server/routers/api/restful-apis/v1/get-goods-received-notes.ts +134 -0
  56. package/server/routers/api/restful-apis/v1/get-inbound-order-detail.ts +128 -0
  57. package/server/routers/api/restful-apis/v1/get-inbound-order-list.ts +126 -0
  58. package/server/routers/api/restful-apis/v1/get-inventory-overall-product-group.ts +99 -0
  59. package/server/routers/api/restful-apis/v1/get-marketplace-store-list.ts +81 -0
  60. package/server/routers/api/restful-apis/v1/get-onhand-inventories.ts +125 -0
  61. package/server/routers/api/restful-apis/v1/get-partners.ts +24 -0
  62. package/server/routers/api/restful-apis/v1/get-products.ts +216 -0
  63. package/server/routers/api/restful-apis/v1/get-release-order-detail.ts +134 -0
  64. package/server/routers/api/restful-apis/v1/get-release-order-list.ts +198 -0
  65. package/server/routers/api/restful-apis/v1/get-warehouses.ts +18 -0
  66. package/server/routers/api/restful-apis/v1/index.ts +31 -2
  67. package/dist-server/routers/api/restful-apis/v1/company/add-contact-points.js +0 -94
  68. package/dist-server/routers/api/restful-apis/v1/company/add-contact-points.js.map +0 -1
  69. package/dist-server/routers/api/restful-apis/v1/company/add-marketplace-order.js +0 -208
  70. package/dist-server/routers/api/restful-apis/v1/company/add-marketplace-order.js.map +0 -1
  71. package/dist-server/routers/api/restful-apis/v1/company/add-product.js +0 -65
  72. package/dist-server/routers/api/restful-apis/v1/company/add-product.js.map +0 -1
  73. package/dist-server/routers/api/restful-apis/v1/company/cancel-marketplace-order.js +0 -97
  74. package/dist-server/routers/api/restful-apis/v1/company/cancel-marketplace-order.js.map +0 -1
  75. package/dist-server/routers/api/restful-apis/v1/company/get-bizplace-list.js +0 -50
  76. package/dist-server/routers/api/restful-apis/v1/company/get-bizplace-list.js.map +0 -1
  77. package/dist-server/routers/api/restful-apis/v1/company/get-contact-point-list.js +0 -63
  78. package/dist-server/routers/api/restful-apis/v1/company/get-contact-point-list.js.map +0 -1
  79. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-order-shipping-list.js +0 -110
  80. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-order-shipping-list.js.map +0 -1
  81. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-store-list.js +0 -52
  82. package/dist-server/routers/api/restful-apis/v1/company/get-marketplace-store-list.js.map +0 -1
  83. package/dist-server/routers/api/restful-apis/v1/company/get-partner-list.js +0 -90
  84. package/dist-server/routers/api/restful-apis/v1/company/get-partner-list.js.map +0 -1
  85. package/dist-server/routers/api/restful-apis/v1/company/get-product-list.js +0 -99
  86. package/dist-server/routers/api/restful-apis/v1/company/get-product-list.js.map +0 -1
  87. package/dist-server/routers/api/restful-apis/v1/company/index.js +0 -14
  88. package/dist-server/routers/api/restful-apis/v1/company/index.js.map +0 -1
  89. package/dist-server/routers/api/restful-apis/v1/company/update-marketplace-order-delivered.js +0 -65
  90. package/dist-server/routers/api/restful-apis/v1/company/update-marketplace-order-delivered.js.map +0 -1
  91. package/dist-server/routers/api/restful-apis/v1/middlewares/business-middleware.js +0 -29
  92. package/dist-server/routers/api/restful-apis/v1/middlewares/business-middleware.js.map +0 -1
  93. package/dist-server/routers/api/restful-apis/v1/middlewares/index.js +0 -40
  94. package/dist-server/routers/api/restful-apis/v1/middlewares/index.js.map +0 -1
  95. package/dist-server/routers/api/restful-apis/v1/middlewares/logging-middleware.js +0 -23
  96. package/dist-server/routers/api/restful-apis/v1/middlewares/logging-middleware.js.map +0 -1
  97. package/dist-server/routers/api/restful-apis/v1/middlewares/store-middleware.js +0 -32
  98. package/dist-server/routers/api/restful-apis/v1/middlewares/store-middleware.js.map +0 -1
  99. package/dist-server/routers/api/restful-apis/v1/middlewares/validation-middleware.js +0 -53
  100. package/dist-server/routers/api/restful-apis/v1/middlewares/validation-middleware.js.map +0 -1
  101. package/dist-server/routers/api/restful-apis/v1/middlewares/warehouse-middleware.js +0 -31
  102. package/dist-server/routers/api/restful-apis/v1/middlewares/warehouse-middleware.js.map +0 -1
  103. package/dist-server/routers/api/restful-apis/v1/utils/error-util.js +0 -71
  104. package/dist-server/routers/api/restful-apis/v1/utils/error-util.js.map +0 -1
  105. package/dist-server/routers/api/restful-apis/v1/utils/expected-parameters.js +0 -201
  106. package/dist-server/routers/api/restful-apis/v1/utils/expected-parameters.js.map +0 -1
  107. package/dist-server/routers/api/restful-apis/v1/utils/params.js +0 -293
  108. package/dist-server/routers/api/restful-apis/v1/utils/params.js.map +0 -1
  109. package/dist-server/routers/api/restful-apis/v1/utils/validate-util.js +0 -90
  110. package/dist-server/routers/api/restful-apis/v1/utils/validate-util.js.map +0 -1
  111. package/dist-server/routers/api/restful-apis/v1/warehouse/add-inbound-order.js +0 -277
  112. package/dist-server/routers/api/restful-apis/v1/warehouse/add-inbound-order.js.map +0 -1
  113. package/dist-server/routers/api/restful-apis/v1/warehouse/add-release-order.js +0 -810
  114. package/dist-server/routers/api/restful-apis/v1/warehouse/add-release-order.js.map +0 -1
  115. package/dist-server/routers/api/restful-apis/v1/warehouse/cancel-inbound-order.js +0 -116
  116. package/dist-server/routers/api/restful-apis/v1/warehouse/cancel-inbound-order.js.map +0 -1
  117. package/dist-server/routers/api/restful-apis/v1/warehouse/get-delivery-order-list.js +0 -140
  118. package/dist-server/routers/api/restful-apis/v1/warehouse/get-delivery-order-list.js.map +0 -1
  119. package/dist-server/routers/api/restful-apis/v1/warehouse/get-goods-received-note-list.js +0 -100
  120. package/dist-server/routers/api/restful-apis/v1/warehouse/get-goods-received-note-list.js.map +0 -1
  121. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.js +0 -78
  122. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.js.map +0 -1
  123. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-list.js +0 -96
  124. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inbound-order-list.js.map +0 -1
  125. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inventory-product-group-list.js +0 -244
  126. package/dist-server/routers/api/restful-apis/v1/warehouse/get-inventory-product-group-list.js.map +0 -1
  127. package/dist-server/routers/api/restful-apis/v1/warehouse/get-onhand-inventory-list.js +0 -96
  128. package/dist-server/routers/api/restful-apis/v1/warehouse/get-onhand-inventory-list.js.map +0 -1
  129. package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-details.js +0 -94
  130. package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-details.js.map +0 -1
  131. package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-list.js +0 -112
  132. package/dist-server/routers/api/restful-apis/v1/warehouse/get-release-order-list.js.map +0 -1
  133. package/dist-server/routers/api/restful-apis/v1/warehouse/index.js +0 -13
  134. package/dist-server/routers/api/restful-apis/v1/warehouse/index.js.map +0 -1
  135. package/server/routers/api/restful-apis/v1/company/add-contact-points.ts +0 -94
  136. package/server/routers/api/restful-apis/v1/company/add-marketplace-order.ts +0 -242
  137. package/server/routers/api/restful-apis/v1/company/add-product.ts +0 -78
  138. package/server/routers/api/restful-apis/v1/company/cancel-marketplace-order.ts +0 -102
  139. package/server/routers/api/restful-apis/v1/company/get-bizplace-list.ts +0 -56
  140. package/server/routers/api/restful-apis/v1/company/get-contact-point-list.ts +0 -69
  141. package/server/routers/api/restful-apis/v1/company/get-marketplace-order-shipping-list.ts +0 -118
  142. package/server/routers/api/restful-apis/v1/company/get-marketplace-store-list.ts +0 -58
  143. package/server/routers/api/restful-apis/v1/company/get-partner-list.ts +0 -97
  144. package/server/routers/api/restful-apis/v1/company/get-product-list.ts +0 -105
  145. package/server/routers/api/restful-apis/v1/company/index.ts +0 -11
  146. package/server/routers/api/restful-apis/v1/company/update-marketplace-order-delivered.ts +0 -70
  147. package/server/routers/api/restful-apis/v1/middlewares/business-middleware.ts +0 -31
  148. package/server/routers/api/restful-apis/v1/middlewares/index.ts +0 -26
  149. package/server/routers/api/restful-apis/v1/middlewares/logging-middleware.ts +0 -24
  150. package/server/routers/api/restful-apis/v1/middlewares/store-middleware.ts +0 -34
  151. package/server/routers/api/restful-apis/v1/middlewares/validation-middleware.ts +0 -50
  152. package/server/routers/api/restful-apis/v1/middlewares/warehouse-middleware.ts +0 -31
  153. package/server/routers/api/restful-apis/v1/utils/error-util.ts +0 -70
  154. package/server/routers/api/restful-apis/v1/utils/expected-parameters.ts +0 -199
  155. package/server/routers/api/restful-apis/v1/utils/params.ts +0 -291
  156. package/server/routers/api/restful-apis/v1/utils/validate-util.ts +0 -74
  157. package/server/routers/api/restful-apis/v1/warehouse/add-inbound-order.ts +0 -361
  158. package/server/routers/api/restful-apis/v1/warehouse/add-release-order.ts +0 -1000
  159. package/server/routers/api/restful-apis/v1/warehouse/cancel-inbound-order.ts +0 -139
  160. package/server/routers/api/restful-apis/v1/warehouse/get-delivery-order-list.ts +0 -144
  161. package/server/routers/api/restful-apis/v1/warehouse/get-goods-received-note-list.ts +0 -109
  162. package/server/routers/api/restful-apis/v1/warehouse/get-inbound-order-details.ts +0 -74
  163. package/server/routers/api/restful-apis/v1/warehouse/get-inbound-order-list.ts +0 -99
  164. package/server/routers/api/restful-apis/v1/warehouse/get-inventory-product-group-list.ts +0 -295
  165. package/server/routers/api/restful-apis/v1/warehouse/get-onhand-inventory-list.ts +0 -99
  166. package/server/routers/api/restful-apis/v1/warehouse/get-release-order-details.ts +0 -97
  167. package/server/routers/api/restful-apis/v1/warehouse/get-release-order-list.ts +0 -116
  168. package/server/routers/api/restful-apis/v1/warehouse/index.ts +0 -10
@@ -1,74 +0,0 @@
1
- import _ from 'lodash'
2
- import { getRepository } from 'typeorm'
3
-
4
- import { Bizplace } from '@things-factory/biz-base'
5
-
6
- import { ApiError } from './error-util'
7
-
8
- // validates limit and offset are passed in as integers within accepted range
9
- // values are floored
10
- export function validateLimitOffset(limit, offset) {
11
- if (!limit) limit = 100
12
- limit = parseInt(limit)
13
- if (isNaN(limit)) throw new ApiError('E01', 'limit')
14
- if (limit > 100 || limit < 1) throw new ApiError('E01', 'limit')
15
-
16
- if (!offset) offset = 0
17
- offset = parseInt(offset)
18
- if (isNaN(offset)) throw new ApiError('E01', 'offset')
19
- if (offset < 0) throw new ApiError('E01', 'offset')
20
-
21
- return { limit, offset }
22
- }
23
-
24
- // loops through query parameters to ensure only expected parameters are passed to logic
25
- export function validateFilter(queryObj: Object, expectedParams: string[]) {
26
- for (const key in queryObj) {
27
- if (!expectedParams.includes(key)) throw new ApiError('E02', key)
28
- }
29
- }
30
-
31
- // checks if object has required parameter property
32
- export function validateReqParams(queryObj: Object, reqParams: string[]) {
33
- let noparams = []
34
- for (const reqParam of reqParams) {
35
- if (!_.has(queryObj, reqParam)) noparams.push(reqParam)
36
- }
37
- if (noparams.length > 0) throw new ApiError('E03', noparams.join(', '))
38
- }
39
-
40
- // assigns default values if undefined
41
- // validates passed in dates are ISO format
42
- // converts ISO format dates to UTC format dates for database query
43
- export function validateFromToDate(fromDate, toDate) {
44
- const now = new Date()
45
- const ago = new Date(now.getTime())
46
- const sevenDaysAgo = ago.setDate(ago.getDate() - 7)
47
- const nowUtc = now.toUTCString()
48
- const sevenDaysAgoUtc = new Date(sevenDaysAgo).toUTCString()
49
-
50
- if (!fromDate) fromDate = sevenDaysAgoUtc
51
- else fromDate = new Date(fromDate).toUTCString()
52
- if (!toDate) toDate = nowUtc
53
- else toDate = new Date(toDate).toUTCString()
54
-
55
- if (isNaN(Date.parse(fromDate))) throw new ApiError('E01', 'fromDate')
56
- if (isNaN(Date.parse(toDate))) throw new ApiError('E01', 'toDate')
57
-
58
- return { fromDate, toDate }
59
- }
60
-
61
- // validates if bizplace belongs to company
62
- export async function validateBizplaceOfCompany(companyId, bizplaceId) {
63
- if (!isValidUUID(bizplaceId)) throw new ApiError('E01', 'bizplaceId')
64
- const bizplace: Bizplace = await getRepository(Bizplace).findOne({
65
- where: { id: bizplaceId }
66
- })
67
- if (!bizplace) throw new ApiError('E01', 'bizplaceId')
68
- }
69
-
70
- // Regular expression to check if string is a valid UUID
71
- function isValidUUID(str) {
72
- const regexExp = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/gi
73
- return regexExp.test(str)
74
- }
@@ -1,361 +0,0 @@
1
- import { EntityManager, getConnection, SelectQueryBuilder } from 'typeorm'
2
- import { v4 as uuidv4 } from 'uuid'
3
-
4
- import { restfulApiRouter as router } from '@things-factory/api'
5
- import { User } from '@things-factory/auth-base'
6
- import { Bizplace, ContactPoint, getCompanyBizplace } from '@things-factory/biz-base'
7
- import { generateId } from '@things-factory/id-rule-base'
8
- import { ProductDetail } from '@things-factory/product-base'
9
- import {
10
- ArrivalNotice,
11
- ORDER_NUMBER_RULE_TYPE,
12
- ORDER_NUMBER_SETTING_KEY,
13
- ORDER_PRODUCT_STATUS,
14
- ORDER_STATUS,
15
- ORDER_TYPES,
16
- OrderNoGenerator,
17
- OrderProduct
18
- } from '@things-factory/sales-base'
19
- import { PartnerSetting, Setting } from '@things-factory/setting-base'
20
- import { Domain } from '@things-factory/shell'
21
-
22
- import { businessMiddleware, loggingMiddleware, validationMiddleware } from '../middlewares'
23
- import { ApiError, ApiErrorHandler, throwInternalServerError } from '../utils/error-util'
24
-
25
- router.post(
26
- '/v1/warehouse/add-inbound-order',
27
- businessMiddleware,
28
- validationMiddleware,
29
- loggingMiddleware,
30
- async (context, next) => {
31
- try {
32
- const { domain, application } = context.domain
33
- const bodyReq = context.request.body
34
- let inboundOrder
35
- let massagedData = { orderProducts: [] }
36
-
37
- const customerBizplaceId = bodyReq.data.bizplaceId
38
-
39
- await getConnection().transaction(async (tx: EntityManager) => {
40
- // get customer company's bizplace
41
- const customerCompanyBizplace: Bizplace = await getCompanyBizplace(null, null, customerBizplaceId, tx)
42
- const customerBizplace: Bizplace = await tx.getRepository(Bizplace).findOne({
43
- where: { id: customerBizplaceId },
44
- relations: ['company', 'company.domain']
45
- })
46
-
47
- inboundOrder = {
48
- domain,
49
- bizplace: customerBizplace,
50
- companyBizplace: customerCompanyBizplace,
51
- refNo: bodyReq?.refNo || null,
52
- refNo2: bodyReq?.refNo2 || null,
53
- refNo3: bodyReq?.refNo3 || null,
54
- etaDate: bodyReq.etaDate,
55
- ownTransport: bodyReq.ownTransport,
56
- importCargo: bodyReq?.importCargo || false,
57
- container: bodyReq?.container || false,
58
- containerNo: bodyReq?.containerNo || null,
59
- containerSize: bodyReq?.containerSize || null,
60
- truckNo: bodyReq?.truckNo || null,
61
- deliveryOrderNo: bodyReq?.deliveryOrderNo || null,
62
- source: application?.type
63
- }
64
-
65
- if (bodyReq?.supplier) {
66
- const supplierInfo = bodyReq.supplier
67
- const foundSupplier: ContactPoint = await tx.getRepository(ContactPoint).findOne({
68
- where: {
69
- domain,
70
- bizplace: customerBizplaceId,
71
- name: supplierInfo.name,
72
- companyName: supplierInfo.companyName,
73
- email: supplierInfo.email,
74
- accountNo: supplierInfo.accountNo,
75
- type: 'SUPPLIER'
76
- }
77
- })
78
-
79
- if (foundSupplier) {
80
- inboundOrder.supplier = foundSupplier
81
- } else {
82
- throw new ApiError('E04', 'supplier')
83
- }
84
- }
85
-
86
- //massage data
87
- massagedData = await massageOrderItems(inboundOrder, bodyReq.orderProducts, context, tx)
88
-
89
- let result = await createInboundOrder(inboundOrder, massagedData.orderProducts, customerBizplace, context, tx)
90
-
91
- const data = {
92
- id: result.id,
93
- ganNo: result.name,
94
- refNo: result.refNo,
95
- refNo2: result.refNo2,
96
- refNo3: result.refNo3,
97
- etaDate: result.etaDate,
98
- ownTransport: result.ownTransport,
99
- importCargo: result.importCargo,
100
- container: result.container,
101
- containerNo: result.containerNo,
102
- containerSize: result.containerSize,
103
- truckNo: result.truckNo,
104
- deliveryOrderNo: result.deliveryOrderNo,
105
- orderProducts: result.orderProducts,
106
- supplier: result?.supplier
107
- ? {
108
- name: result.supplier.name,
109
- companyName: result.supplier.companyName,
110
- email: result.supplier.email,
111
- accountNo: result.supplier.accountNo
112
- }
113
- : {}
114
- }
115
-
116
- context.body = {
117
- responseCode: '200',
118
- message: 'success',
119
- data
120
- }
121
- })
122
- } catch (e) {
123
- if (e instanceof ApiError) ApiErrorHandler(context, e)
124
- else throwInternalServerError(context, e)
125
- }
126
- }
127
- )
128
-
129
- async function massageOrderItems(
130
- inboundOrder,
131
- inputOrderProducts,
132
- context,
133
- tx
134
- ): Promise<{ orderProducts: OrderProduct[] }> {
135
- try {
136
- let orderProducts: OrderProduct[] = []
137
- let errorList = []
138
- inputOrderProducts = inputOrderProducts.reduce((acc, itm, idx) => {
139
- let { sku, refCode } = itm.product
140
- let { packingType, packingSize, batchId, packQty } = itm
141
-
142
- if (packQty <= 0) {
143
- errorList.push(
144
- JSON.stringify({
145
- code: 'INVALID_DATA',
146
- message: 'negative stock request',
147
- sku: sku,
148
- refCode: refCode,
149
- packingType: packingType?.trim(),
150
- packingSize: packingSize,
151
- qty: packQty
152
- })
153
- )
154
- }
155
-
156
- let existingIndex = acc.findIndex(
157
- itm =>
158
- itm?.sku == sku?.trim() &&
159
- itm?.refCode == refCode?.trim() &&
160
- itm?.batchId == batchId?.trim() &&
161
- itm?.packingType == packingType?.trim() &&
162
- itm?.packingSize == packingSize
163
- )
164
-
165
- if (existingIndex >= 0 && packQty > 0) {
166
- acc[existingIndex].packQty = acc[existingIndex].packQty + packQty
167
- } else {
168
- acc.push({
169
- sku: sku?.trim(),
170
- refCode: refCode?.trim(),
171
- batchId: batchId?.trim(),
172
- packingType: packingType?.trim(),
173
- packingSize: packingSize,
174
- releaseQty: packQty
175
- })
176
- }
177
-
178
- return acc
179
- }, [])
180
-
181
- await Promise.all(
182
- inputOrderProducts.map(async inputOrderItem => {
183
- const sku: string = inputOrderItem.sku
184
- const refCode: string = inputOrderItem.refCode
185
- const packingType: string = inputOrderItem.packingType
186
- const packingSize: string = inputOrderItem.packingSize
187
-
188
- const qb: SelectQueryBuilder<ProductDetail> = tx
189
- .getRepository(ProductDetail)
190
- .createQueryBuilder('pd')
191
- .innerJoinAndSelect('pd.product', 'prod')
192
- .where('prod.bizplace_id = :bizplaceId', { bizplaceId: inboundOrder.companyBizplace.id })
193
-
194
- if (refCode) {
195
- qb.andWhere('pd.ref_code = :refCode', { refCode })
196
- }
197
-
198
- if (sku) {
199
- qb.andWhere('prod.sku = :sku', { sku })
200
- }
201
-
202
- if (packingType) {
203
- qb.andWhere('pd.packing_type = :packingType', { packingType })
204
- }
205
-
206
- if ((!packingType && !refCode) || !packingSize) {
207
- qb.andWhere('pd.is_default = :isDefault', { isDefault: true })
208
- }
209
-
210
- const productDetail: ProductDetail = await qb.getOne()
211
-
212
- if (productDetail) {
213
- let newOrderProduct: OrderProduct = Object.assign({}, inputOrderItem)
214
- newOrderProduct = {
215
- ...newOrderProduct,
216
- product: productDetail.product,
217
- productDetail: productDetail,
218
- packingType: productDetail.packingType,
219
- packingSize: productDetail.packingSize,
220
- uom: productDetail.uom,
221
- uomValue: productDetail.uomValue,
222
- packQty: inputOrderItem.packQty,
223
- totalUomValue: `${inputOrderItem.packQty * (productDetail.uomValue || 1)} ${productDetail.uomValue}`,
224
- batchId: inputOrderItem.batchId,
225
- status: ORDER_PRODUCT_STATUS.PENDING_RECEIVE,
226
- unitPrice: inputOrderItem?.unitPrice ? parseFloat(inputOrderItem.unitPrice) : null,
227
- manufactureDate: inputOrderItem?.manufactureDate || null,
228
- remark: inputOrderItem?.remark || null
229
- }
230
-
231
- orderProducts.push(newOrderProduct)
232
- } else {
233
- if (sku && refCode) {
234
- throw new ApiError('E04', `sku ${sku} and refCode ${refCode}`)
235
- }
236
-
237
- if (sku) {
238
- throw new ApiError('E04', `sku ${sku}`)
239
- }
240
-
241
- if (refCode) {
242
- throw new ApiError('E04', `refCode ${refCode}`)
243
- }
244
- }
245
- })
246
- )
247
-
248
- return { orderProducts }
249
- } catch (error) {
250
- if (error instanceof ApiError) ApiErrorHandler(context, error)
251
- else throwInternalServerError(context, error)
252
- }
253
- }
254
-
255
- async function createInboundOrder(
256
- inboundOrder: any,
257
- orderProducts: OrderProduct[],
258
- bizplace: Bizplace,
259
- context: any,
260
- tx?: EntityManager
261
- ): Promise<ArrivalNotice> {
262
- try {
263
- const { domain, user }: { domain: Domain; user: User } = context.state
264
-
265
- let newArrivalNotice: ArrivalNotice = new ArrivalNotice()
266
- const ganNoSetting: Setting = await tx.getRepository(Setting).findOne({
267
- where: {
268
- domain,
269
- name: ORDER_NUMBER_SETTING_KEY.GAN_NUMBER_RULE
270
- }
271
- })
272
-
273
- let anStatus = ORDER_STATUS.PENDING_RECEIVE
274
- let opStatus = ORDER_PRODUCT_STATUS.PENDING_RECEIVE
275
- let acceptedByUser = null
276
- let acceptedTime = null
277
-
278
- const ganProcessingSetting: Setting = await tx.getRepository(Setting).findOne({
279
- where: { domain, category: 'id-rule', name: 'gan-order-processing' }
280
- })
281
-
282
- const partnerGanProcessingSetting: PartnerSetting = await tx.getRepository(PartnerSetting).findOne({
283
- where: { setting: ganProcessingSetting, domain, partnerDomain: bizplace?.domain }
284
- })
285
-
286
- // If status of GAN is PENDING_RECEIVE then directly to assign warehouse
287
- if (ganProcessingSetting) {
288
- let setting = !isNaN(partnerGanProcessingSetting?.value)
289
- ? partnerGanProcessingSetting?.value
290
- : ganProcessingSetting.value
291
-
292
- // CONFIRM to assign if setting value is 1
293
- if (setting == 1) {
294
- opStatus = ORDER_PRODUCT_STATUS.ARRIVED
295
- anStatus = ORDER_STATUS.ARRIVED
296
- acceptedByUser = user
297
- acceptedTime = new Date()
298
- }
299
- }
300
-
301
- newArrivalNotice = {
302
- name: ganNoSetting
303
- ? await generateId({ domain, type: ORDER_NUMBER_RULE_TYPE.GAN_NUMBER, seed: {} })
304
- : OrderNoGenerator.arrivalNotice(),
305
- domain: domain,
306
- bizplace: bizplace,
307
- refNo: inboundOrder?.refNo || null,
308
- refNo2: inboundOrder?.refNo2 || null,
309
- refNo3: inboundOrder?.refNo3 || null,
310
- etaDate: inboundOrder.etaDate,
311
- ownTransport: inboundOrder.ownTransport,
312
- looseItem: false,
313
- importCargo: inboundOrder?.importCargo || false,
314
- container: inboundOrder?.container || false,
315
- containerNo: inboundOrder?.containerNo || null,
316
- containerSize: inboundOrder?.containerSize || null,
317
- truckNo: inboundOrder?.truckNo || null,
318
- deliveryOrderNo: inboundOrder?.deliveryOrderNo || null,
319
- source: inboundOrder?.type || null,
320
- status: anStatus,
321
- supplier: inboundOrder?.supplier || null,
322
- creator: user,
323
- updater: user,
324
- acceptedByUser,
325
- acceptedTime
326
- }
327
-
328
- let resultArrivalNotice = await tx.getRepository(ArrivalNotice).save(newArrivalNotice)
329
-
330
- let resultOrderProducts: OrderProduct[] = []
331
- for (let i = 0; i < orderProducts.length; i++) {
332
- let orderProduct = Object.assign(new OrderProduct(), {
333
- ...orderProducts[i],
334
- name: uuidv4(),
335
- domain: domain,
336
- bizplace: bizplace,
337
- arrivalNotice: resultArrivalNotice,
338
- type: ORDER_TYPES.ARRIVAL_NOTICE,
339
- status: opStatus
340
- })
341
- await tx.getRepository(OrderProduct).save(orderProduct)
342
-
343
- resultOrderProducts.push({
344
- product: { name: orderProduct.product.name, sku: orderProduct.product.sku },
345
- batchId: orderProduct.batchId,
346
- packingType: orderProduct.packingType,
347
- packingSize: orderProduct.packingSize,
348
- packQty: orderProduct.packQty,
349
- palletQty: orderProduct.palletQty,
350
- uom: orderProduct.uom,
351
- uomValue: orderProduct.uomValue
352
- })
353
- }
354
- newArrivalNotice.orderProducts = resultOrderProducts
355
-
356
- return newArrivalNotice
357
- } catch (error) {
358
- if (error instanceof ApiError) ApiErrorHandler(context, error)
359
- else throwInternalServerError(context, error)
360
- }
361
- }