@things-factory/operato-hub 4.3.2 → 4.4.0-alpha.0

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 (63) hide show
  1. package/client/pages/constants/setting.js +0 -1
  2. package/config.development.js +49 -0
  3. package/dist-server/controllers/bizplace-initializer/dataset/codes.js +0 -9
  4. package/dist-server/controllers/bizplace-initializer/dataset/codes.js.map +1 -1
  5. package/dist-server/controllers/bizplace-initializer/dataset/index.js +5 -1
  6. package/dist-server/controllers/bizplace-initializer/dataset/index.js.map +1 -1
  7. package/dist-server/controllers/bizplace-initializer/dataset/settings.js +0 -10
  8. package/dist-server/controllers/bizplace-initializer/dataset/settings.js.map +1 -1
  9. package/dist-server/controllers/bizplace-initializer/index.js +5 -1
  10. package/dist-server/controllers/bizplace-initializer/index.js.map +1 -1
  11. package/dist-server/controllers/company-initializer/index.js +5 -1
  12. package/dist-server/controllers/company-initializer/index.js.map +1 -1
  13. package/dist-server/graphql/index.js +5 -1
  14. package/dist-server/graphql/index.js.map +1 -1
  15. package/dist-server/graphql/resolvers/index.js +5 -1
  16. package/dist-server/graphql/resolvers/index.js.map +1 -1
  17. package/dist-server/graphql/types/index.js +5 -1
  18. package/dist-server/graphql/types/index.js.map +1 -1
  19. package/dist-server/index.js +5 -1
  20. package/dist-server/index.js.map +1 -1
  21. package/dist-server/routers/api/restful-apis/unstable/add-marketplace-order.js +75 -85
  22. package/dist-server/routers/api/restful-apis/unstable/add-marketplace-order.js.map +1 -1
  23. package/dist-server/routers/api/restful-apis/unstable/add-release-order.js +35 -147
  24. package/dist-server/routers/api/restful-apis/unstable/add-release-order.js.map +1 -1
  25. package/dist-server/routers/api/restful-apis/unstable/index.js +0 -1
  26. package/dist-server/routers/api/restful-apis/unstable/index.js.map +1 -1
  27. package/dist-server/routers/api/restful-apis/v1/add-marketplace-order.js +75 -85
  28. package/dist-server/routers/api/restful-apis/v1/add-marketplace-order.js.map +1 -1
  29. package/dist-server/routers/api/restful-apis/v1/add-release-order.js +34 -146
  30. package/dist-server/routers/api/restful-apis/v1/add-release-order.js.map +1 -1
  31. package/dist-server/routers/api/restful-apis/v1/index.js +0 -1
  32. package/dist-server/routers/api/restful-apis/v1/index.js.map +1 -1
  33. package/dist-server/routers/api/restful-apis/v2/add-marketplace-order.js +75 -85
  34. package/dist-server/routers/api/restful-apis/v2/add-marketplace-order.js.map +1 -1
  35. package/dist-server/routers/api/restful-apis/v2/add-release-order.js +34 -149
  36. package/dist-server/routers/api/restful-apis/v2/add-release-order.js.map +1 -1
  37. package/dist-server/routers/api/restful-apis/v2/index.js +0 -1
  38. package/dist-server/routers/api/restful-apis/v2/index.js.map +1 -1
  39. package/dist-server/routers/business/index.js +5 -1
  40. package/dist-server/routers/business/index.js.map +1 -1
  41. package/dist-server/utils/index.js +5 -1
  42. package/dist-server/utils/index.js.map +1 -1
  43. package/package.json +54 -54
  44. package/server/controllers/bizplace-initializer/dataset/codes.ts +0 -9
  45. package/server/controllers/bizplace-initializer/dataset/settings.ts +0 -10
  46. package/server/routers/api/restful-apis/unstable/add-marketplace-order.ts +85 -97
  47. package/server/routers/api/restful-apis/unstable/add-release-order.ts +28 -211
  48. package/server/routers/api/restful-apis/unstable/index.ts +0 -1
  49. package/server/routers/api/restful-apis/v1/add-marketplace-order.ts +85 -97
  50. package/server/routers/api/restful-apis/v1/add-release-order.ts +26 -209
  51. package/server/routers/api/restful-apis/v1/index.ts +0 -1
  52. package/server/routers/api/restful-apis/v2/add-marketplace-order.ts +85 -97
  53. package/server/routers/api/restful-apis/v2/add-release-order.ts +26 -212
  54. package/server/routers/api/restful-apis/v2/index.ts +0 -1
  55. package/dist-server/routers/api/restful-apis/unstable/add-draft-release-order.js +0 -171
  56. package/dist-server/routers/api/restful-apis/unstable/add-draft-release-order.js.map +0 -1
  57. package/dist-server/routers/api/restful-apis/v1/add-draft-release-order.js +0 -171
  58. package/dist-server/routers/api/restful-apis/v1/add-draft-release-order.js.map +0 -1
  59. package/dist-server/routers/api/restful-apis/v2/add-draft-release-order.js +0 -171
  60. package/dist-server/routers/api/restful-apis/v2/add-draft-release-order.js.map +0 -1
  61. package/server/routers/api/restful-apis/unstable/add-draft-release-order.ts +0 -196
  62. package/server/routers/api/restful-apis/v1/add-draft-release-order.ts +0 -196
  63. package/server/routers/api/restful-apis/v2/add-draft-release-order.ts +0 -196
@@ -5,8 +5,6 @@
5
5
  import gql from 'graphql-tag'
6
6
 
7
7
  import { restfulApiRouter as router } from '@things-factory/api'
8
- import { EntityManager, getConnection } from 'typeorm'
9
- import { MarketplaceOrder } from '@things-factory/marketplace-base'
10
8
 
11
9
  import { businessMiddleware } from '../../../../middlewares/business-middleware'
12
10
  import { storeMiddleware } from '../../../../middlewares/store-middleware'
@@ -18,109 +16,99 @@ router.post(
18
16
  businessMiddleware,
19
17
  storeMiddleware,
20
18
  async (context, next) => {
21
- return await getConnection().transaction(async (tx: EntityManager) => {
22
- const { client, marketplaceStore, domain } = context.state
23
- const { t } = context
24
- const bodyReq = context.request.body
25
-
26
- if (typeof bodyReq === undefined || !Object.keys(bodyReq)?.length) {
27
- context.throw(400, t('error.invalid body request format'))
28
- }
29
-
30
- await checkMandatoryKey(context, bodyReq)
31
- debug('post:/add-marketplace-order body request', bodyReq)
32
-
33
- let existingMarketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
34
- where: { name: bodyReq.name, domain, marketplaceStore }
35
- })
36
-
37
- if (existingMarketplaceOrder) {
38
- context.throw(400, `error.duplicate entry for order ${bodyReq.name}`)
39
- }
40
-
41
- context.body = {
42
- result: (
43
- await client.mutate({
44
- mutation: gql`
45
- mutation generateMarketplaceOrder($marketplaceOrder: NewMarketplaceOrder!) {
46
- generateMarketplaceOrder(marketplaceOrder: $marketplaceOrder) {
19
+ const { client, marketplaceStore, domain } = context.state
20
+ const { t } = context
21
+ const bodyReq = context.request.body
22
+
23
+ if (typeof bodyReq === undefined || !Object.keys(bodyReq)?.length) {
24
+ context.throw(400, t('error.invalid body request format'))
25
+ }
26
+
27
+ await checkMandatoryKey(context, bodyReq)
28
+ debug('post:/add-marketplace-order body request', bodyReq)
29
+
30
+ context.body = {
31
+ result: (
32
+ await client.mutate({
33
+ mutation: gql`
34
+ mutation generateMarketplaceOrder($marketplaceOrder: NewMarketplaceOrder!) {
35
+ generateMarketplaceOrder(marketplaceOrder: $marketplaceOrder) {
36
+ id
37
+ orderNo
38
+ currency
39
+ itemCount
40
+ totalAmount
41
+ paymentMethod
42
+ remark
43
+ giftOption
44
+ orderCreatedAt
45
+ orderUpdatedAt
46
+ marketplaceStore {
47
+ storeId
48
+ }
49
+ marketplaceOrderItems {
47
50
  id
48
- orderNo
49
- currency
50
- itemCount
51
- totalAmount
52
- paymentMethod
53
- remark
54
- giftOption
55
- orderCreatedAt
56
- orderUpdatedAt
57
- marketplaceStore {
58
- storeId
51
+ name
52
+ qty
53
+ cancelBy
54
+ returnStatus
55
+ paidPrice
56
+ packageId
57
+ invoiceNo
58
+ status
59
+ marketplaceOrderShippingItems {
60
+ marketplaceOrderShipping {
61
+ attentionTo
62
+ address1
63
+ address2
64
+ address3
65
+ address4
66
+ address5
67
+ state
68
+ city
69
+ postCode
70
+ country
71
+ phone1
72
+ phone2
73
+ email
74
+ orderType
75
+ freightType
76
+ parcelType
77
+ goodsType
78
+ deliveryMethod
79
+ totalWeight
80
+ totalVolume
81
+ transporter
82
+ }
59
83
  }
60
- marketplaceOrderItems {
84
+ marketplaceProductVariation {
61
85
  id
86
+ sku
87
+ variationId
88
+ variationSku
89
+ channelSku
62
90
  name
63
- qty
64
- cancelBy
65
- returnStatus
66
- paidPrice
67
- packageId
68
- invoiceNo
69
- status
70
- marketplaceOrderShippingItems {
71
- marketplaceOrderShipping {
72
- attentionTo
73
- address1
74
- address2
75
- address3
76
- address4
77
- address5
78
- state
79
- city
80
- postCode
81
- country
82
- phone1
83
- phone2
84
- email
85
- orderType
86
- freightType
87
- parcelType
88
- goodsType
89
- deliveryMethod
90
- totalWeight
91
- totalVolume
92
- transporter
93
- }
94
- }
95
- marketplaceProductVariation {
96
- id
97
- sku
98
- variationId
99
- variationSku
100
- channelSku
101
- name
102
- costPrice
103
- sellPrice
104
- marketplaceStatus
105
- }
91
+ costPrice
92
+ sellPrice
93
+ marketplaceStatus
106
94
  }
107
95
  }
108
96
  }
109
- `,
110
- variables: { marketplaceOrder: bodyReq },
111
- context: {
112
- ...context,
113
- state: {
114
- ...context.state,
115
- marketplaceStore,
116
- domain,
117
- type: 'api'
118
- }
119
97
  }
120
- } as any)
121
- ).data
122
- }
123
- })
98
+ `,
99
+ variables: { marketplaceOrder: bodyReq },
100
+ context: {
101
+ ...context,
102
+ state: {
103
+ ...context.state,
104
+ marketplaceStore,
105
+ domain,
106
+ type: 'api'
107
+ }
108
+ }
109
+ } as any)
110
+ ).data
111
+ }
124
112
  }
125
113
  )
126
114
 
@@ -4,7 +4,7 @@ import { EntityManager, getConnection, SelectQueryBuilder } from 'typeorm'
4
4
  import { restfulApiRouter as router } from '@things-factory/api'
5
5
  import { Bizplace, getCompanyBizplace } from '@things-factory/biz-base'
6
6
  import { Product, ProductBundle, ProductDetail } from '@things-factory/product-base'
7
- import { ORDER_TYPES, OrderInventory, OrderProduct } from '@things-factory/sales-base'
7
+ import { ORDER_TYPES, OrderInventory } from '@things-factory/sales-base'
8
8
  import { Setting } from '@things-factory/setting-base'
9
9
  import { Inventory, INVENTORY_STATUS, LOCATION_TYPE } from '@things-factory/warehouse-base'
10
10
  import { WorksheetDetail } from '@things-factory/worksheet-base'
@@ -254,37 +254,17 @@ router.post(
254
254
 
255
255
  if (!response.errors) {
256
256
  const items = response.data.inventoriesByPallet.items || []
257
- if (!items?.length) {
258
- context.body = {
259
- result: await createDraftOrder(
260
- client,
261
- customerBizplace,
262
- bodyReq,
263
- bundleInfo,
264
- domain,
265
- context,
266
- orderInventories,
267
- tx
257
+ if (!items?.length)
258
+ context.throw(
259
+ 404,
260
+ t(
261
+ `error.no inventories found for ${orderInventory.product?.sku} with batch ID ${orderInventory?.batchId}`
268
262
  )
269
- }
270
- return
271
- }
263
+ )
272
264
 
273
- items.forEach(async item => {
265
+ items.forEach(item => {
274
266
  if (orderInventory.releaseQty > item.remainQty || orderInventory.releaseQty <= 0) {
275
- context.body = {
276
- result: await createDraftOrder(
277
- client,
278
- customerBizplace,
279
- bodyReq,
280
- bundleInfo,
281
- domain,
282
- context,
283
- orderInventories,
284
- tx
285
- )
286
- }
287
- return
267
+ context.throw(404, t(`error.invalid release qty for ${orderInventory.product?.sku}`))
288
268
  }
289
269
 
290
270
  // 3. add more information to orderInventory
@@ -297,21 +277,7 @@ router.post(
297
277
  })
298
278
 
299
279
  return orderInventory
300
- } else {
301
- context.body = {
302
- result: await createDraftOrder(
303
- client,
304
- customerBizplace,
305
- bodyReq,
306
- bundleInfo,
307
- domain,
308
- context,
309
- orderInventories,
310
- tx
311
- )
312
- }
313
- return
314
- }
280
+ } else context.throw(404, t('error.failed to fetch inventory'))
315
281
  })
316
282
  )
317
283
  } else {
@@ -396,21 +362,8 @@ router.post(
396
362
  }
397
363
 
398
364
  let inventories: Inventory[] = await qb.getMany()
399
- if (!inventories?.length) {
400
- context.body = {
401
- result: await createDraftOrder(
402
- client,
403
- customerBizplace,
404
- bodyReq,
405
- bundleInfo,
406
- domain,
407
- context,
408
- orderInventories,
409
- tx
410
- )
411
- }
412
- return
413
- }
365
+ if (!inventories?.length) context.throw(404, t(`error.no inventories found for ${product.sku}`))
366
+
414
367
  inventories = inventories
415
368
  .map(inventory => {
416
369
  return {
@@ -421,24 +374,12 @@ router.post(
421
374
  })
422
375
  .filter(inventory => inventory.remainQty > 0)
423
376
 
424
- let targetInventories: WorksheetDetail[]
425
- try {
426
- targetInventories = _composeTargetInventories(context, product, orderInventory, inventories)
427
- } catch (e) {
428
- context.body = {
429
- result: await createDraftOrder(
430
- client,
431
- customerBizplace,
432
- bodyReq,
433
- bundleInfo,
434
- domain,
435
- context,
436
- orderInventories,
437
- tx
438
- )
439
- }
440
- return
441
- }
377
+ const targetInventories: WorksheetDetail[] = _composeTargetInventories(
378
+ context,
379
+ product,
380
+ orderInventory,
381
+ inventories
382
+ )
442
383
  targetInventories.map(item => {
443
384
  finalOrderInventories.push(item.targetInventory)
444
385
  })
@@ -487,37 +428,17 @@ router.post(
487
428
 
488
429
  if (!response.errors) {
489
430
  const items = response.data.inventoryProductGroup.items || []
490
- if (!items?.length) {
491
- context.body = {
492
- result: await createDraftOrder(
493
- client,
494
- customerBizplace,
495
- bodyReq,
496
- bundleInfo,
497
- domain,
498
- context,
499
- orderInventories,
500
- tx
431
+ if (!items?.length)
432
+ context.throw(
433
+ 404,
434
+ t(
435
+ `error.no inventories found for ${orderInventory.product?.sku} with batch ID ${orderInventory?.batchId}`
501
436
  )
502
- }
503
- return
504
- }
437
+ )
505
438
 
506
- items.forEach(async item => {
439
+ items.forEach(item => {
507
440
  if (orderInventory.releaseQty > item.remainQty || orderInventory.releaseQty <= 0) {
508
- context.body = {
509
- result: await createDraftOrder(
510
- client,
511
- customerBizplace,
512
- bodyReq,
513
- bundleInfo,
514
- domain,
515
- context,
516
- orderInventories,
517
- tx
518
- )
519
- }
520
- return
441
+ context.throw(404, t(`error.invalid release qty for ${orderInventory.product?.sku}`))
521
442
  }
522
443
 
523
444
  // 3. add more information to orderInventory
@@ -531,21 +452,7 @@ router.post(
531
452
 
532
453
  delete orderInventory.uomValue
533
454
  finalOrderInventories.push(orderInventory)
534
- } else {
535
- context.body = {
536
- result: await createDraftOrder(
537
- client,
538
- customerBizplace,
539
- bodyReq,
540
- bundleInfo,
541
- domain,
542
- context,
543
- orderInventories,
544
- tx
545
- )
546
- }
547
- return
548
- }
455
+ } else context.throw(404, t('error.failed to fetch inventory'))
549
456
  }
550
457
  }
551
458
  }
@@ -753,7 +660,7 @@ export function _composeTargetInventories(context, product, record, inventories)
753
660
  })
754
661
 
755
662
  if (totalInventoryQty < record.releaseQty) {
756
- context.throw(404, t(`error.invalid release qty for ${product?.sku}`)) //
663
+ context.throw(404, t(`error.invalid release qty for ${product?.sku}`))
757
664
  }
758
665
 
759
666
  let targetInventories = []
@@ -819,93 +726,3 @@ function combineItems(inventoryList) {
819
726
 
820
727
  return mappedList
821
728
  }
822
-
823
- async function createDraftOrder(client, customerBizplace, bodyReq, bundleInfo, domain, context, orderInventories, tx) {
824
- return (
825
- await client.mutate({
826
- mutation: gql`
827
- mutation upsertDraftReleaseGood(
828
- $draftReleaseGood: DraftReleaseGoodPatch!
829
- $orderProducts: [OrderProductPatch!]!
830
- ) {
831
- upsertDraftReleaseGood(draftReleaseGood: $draftReleaseGood, orderProducts: $orderProducts) {
832
- id
833
- name
834
- refNo
835
- refNo2
836
- status
837
- truckNo
838
- ownTransport
839
- marketplaceOrderStatus
840
- billingAddress
841
- deliveryAddress1
842
- deliveryAddress2
843
- deliveryAddress3
844
- deliveryAddress4
845
- deliveryAddress5
846
- attentionTo
847
- attentionCompany
848
- city
849
- state
850
- postalCode
851
- country
852
- phone1
853
- phone2
854
- email
855
- type
856
- exportOption
857
- releaseDate
858
- collectionOrderNo
859
- bizplace {
860
- name
861
- }
862
- }
863
- }
864
- `,
865
- variables: {
866
- draftReleaseGood: {
867
- bizplace: {
868
- id: customerBizplace.id
869
- },
870
- courierOption: bodyReq.courierOption,
871
- collectionOrderNo: bodyReq.collectionOrderNo,
872
- exportOption: bodyReq.exportOption,
873
- ownTransport: bodyReq.ownTransport,
874
- packingOption: bodyReq.packingOption,
875
- refNo: bodyReq.refNo,
876
- refNo2: bodyReq?.refNo2,
877
- releaseDate: bodyReq.releaseDate,
878
- type: bodyReq.type,
879
- marketplaceOrderStatus: bodyReq?.marketplaceOrderStatus,
880
- remark: bodyReq?.remark || null,
881
- billingAddress: bodyReq?.billTo?.billingAddress || null,
882
- deliveryAddress1: bodyReq?.deliverTo?.deliveryAddress1 || null,
883
- deliveryAddress2: bodyReq?.deliverTo?.deliveryAddress2 || null,
884
- deliveryAddress3: bodyReq?.deliverTo?.deliveryAddress3 || null,
885
- deliveryAddress4: bodyReq?.deliverTo?.deliveryAddress4 || null,
886
- deliveryAddress5: bodyReq?.deliverTo?.deliveryAddress5 || null,
887
- attentionTo: bodyReq?.deliverTo?.attentionTo || null,
888
- attentionCompany: bodyReq?.deliverTo?.attentionCompany || null,
889
- city: bodyReq?.deliverTo?.city || null,
890
- state: bodyReq?.deliverTo?.state || null,
891
- postalCode: bodyReq?.deliverTo?.postalCode || null,
892
- country: bodyReq?.deliverTo?.country || null,
893
- phone1: bodyReq?.deliverTo?.phone1 || null,
894
- phone2: bodyReq?.deliverTo?.phone2 || null,
895
- email: bodyReq?.deliverTo?.email || null
896
- },
897
- orderProducts: orderInventories
898
- },
899
- context: {
900
- ...context,
901
- hasUpload: true,
902
- state: {
903
- ...context.state,
904
- customerBizplace,
905
- domain,
906
- type: 'api'
907
- }
908
- }
909
- } as any)
910
- ).data
911
- }
@@ -2,7 +2,6 @@ import './add-contact-point'
2
2
  import './add-inbound-order'
3
3
  import './add-marketplace-order'
4
4
  import './add-products'
5
- import './add-draft-release-order'
6
5
  import './add-release-order'
7
6
  import './add-sales-invoice'
8
7
  import './bizplace'