@things-factory/worksheet-base 4.3.67 → 4.3.70

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 (40) hide show
  1. package/dist-server/controllers/ecommerce/sellercraft-controller.js +31 -25
  2. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  3. package/dist-server/graphql/resolvers/worksheet/delivery-order-by-worksheet.js +81 -52
  4. package/dist-server/graphql/resolvers/worksheet/delivery-order-by-worksheet.js.map +1 -1
  5. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js +57 -0
  6. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js.map +1 -0
  7. package/dist-server/graphql/resolvers/worksheet/index.js +2 -2
  8. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  9. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +2 -3
  10. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +16 -11
  12. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  13. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +38 -8
  14. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  15. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +20 -17
  16. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  17. package/dist-server/graphql/types/worksheet/delivery-order-info.js +3 -0
  18. package/dist-server/graphql/types/worksheet/delivery-order-info.js.map +1 -1
  19. package/dist-server/graphql/types/worksheet/index.js +6 -6
  20. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  21. package/dist-server/graphql/types/worksheet/sellercraft-document.js +11 -0
  22. package/dist-server/graphql/types/worksheet/sellercraft-document.js.map +1 -0
  23. package/package.json +17 -17
  24. package/server/controllers/ecommerce/sellercraft-controller.ts +42 -29
  25. package/server/graphql/resolvers/worksheet/delivery-order-by-worksheet.ts +86 -51
  26. package/server/graphql/resolvers/worksheet/fetch-sellercraft-document.ts +62 -0
  27. package/server/graphql/resolvers/worksheet/index.ts +2 -2
  28. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +2 -5
  29. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +23 -18
  30. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +36 -9
  31. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +23 -19
  32. package/server/graphql/types/worksheet/delivery-order-info.ts +3 -0
  33. package/server/graphql/types/worksheet/index.ts +6 -6
  34. package/server/graphql/types/worksheet/sellercraft-document.ts +8 -0
  35. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js +0 -25
  36. package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.js.map +0 -1
  37. package/dist-server/graphql/types/worksheet/airwaybill.js +0 -10
  38. package/dist-server/graphql/types/worksheet/airwaybill.js.map +0 -1
  39. package/server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.ts +0 -30
  40. package/server/graphql/types/worksheet/airwaybill.ts +0 -7
@@ -1,6 +1,7 @@
1
- import { EntityManager, SelectQueryBuilder } from 'typeorm'
1
+ import { EntityManager, SelectQueryBuilder, getManager } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
+ import { logger } from '@things-factory/env'
4
5
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
5
6
  import {
6
7
  MarketplaceOrder,
@@ -102,20 +103,15 @@ export const packingWorksheetResolver = {
102
103
  let marketplaceStatus: string
103
104
 
104
105
  if (releaseGood.type === 'b2c') {
106
+
105
107
  const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
106
108
  domain: worksheet.bizplace.domain,
107
109
  status: SellercraftStatus.ACTIVE
108
110
  })
109
111
 
110
112
  if (sellercraft) {
111
- if (!releaseGood?.airwayBill) {
112
- const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
113
- sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
114
- releaseGood = await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
115
- }
116
- trackingNo = releaseGood?.trackingNo
117
- shippingProvider = releaseGood?.transporter
118
- marketplaceStatus = releaseGood?.marketplaceOrderStatus
113
+ // asynchronously get document from sellercraft
114
+ getSellercraftDocument(sellercraft, releaseGood, domain, user)
119
115
  } else {
120
116
  marketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
121
117
  where: { orderNo: releaseGood.refNo },
@@ -242,3 +238,34 @@ export async function getTrackingNo(marketplaceStore, marketplaceOrderItems): Pr
242
238
 
243
239
  return trackingNo
244
240
  }
241
+
242
+ //trigger RTS, init document, and fetch sellercraft document in separated transaction
243
+ async function getSellercraftDocument(sellercraft: Sellercraft, releaseGood: ReleaseGood, domain: Domain, user: User) {
244
+ await getManager().transaction(async txMgr => {
245
+ const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, domain, user)
246
+ try {
247
+ if (!releaseGood?.airwayBill) {
248
+ try {
249
+ // try fetch order document / AWB
250
+ releaseGood = await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
251
+ } catch (error) {
252
+ try {
253
+ // retry initiate order document
254
+ await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
255
+ } catch (error) {
256
+ try {
257
+ // retry initiate order shipment / RTS
258
+ await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
259
+ } catch (error) {
260
+ throw new Error(`initiateOrderShipment: ${error}`)
261
+ }
262
+ throw new Error(`initiateOrderDocument: ${error}`)
263
+ }
264
+ throw new Error(`fetchOrderDocument: ${error}`)
265
+ }
266
+ }
267
+ } catch (error) {
268
+ logger.error(`packing-worksheet[getSellercraftDocument]:(data:${JSON.stringify({ sellercraft, releaseGood, domain, user })}) ${error} `)
269
+ }
270
+ })
271
+ }
@@ -1,4 +1,4 @@
1
- import { EntityManager } from 'typeorm'
1
+ import { EntityManager, getManager } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import { Bizplace, ContactPoint, getMyBizplace } from '@things-factory/biz-base'
@@ -82,30 +82,34 @@ export async function completePicking(
82
82
  await pickingWSCtrl.completePicking(releaseGoodNo)
83
83
 
84
84
  if (releaseGood.type == 'b2c') {
85
- const sellercraft: Sellercraft = await tx
86
- .getRepository(Sellercraft)
87
- .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
88
85
 
89
- if (sellercraft) {
90
- const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
86
+ const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
87
+ const initSCOrderShipment = async (sellercraft) => {
88
+ if (sellercraft) {
91
89
 
92
- if (!releaseGood?.packageId) {
93
- const orderProducts: OrderProduct[] = await tx.getRepository(OrderProduct).find({
94
- where: { releaseGood },
95
- relations: ['product', 'product.productDetails']
96
- })
97
- releaseGood = await sellercraftCtrl.packOrder(sellercraft, { ...releaseGood, orderProducts })
90
+ await getManager().transaction(async txMgr => {
91
+ const sellercraftCtrl: SellercraftController = new SellercraftController(txMgr, domain, user)
98
92
 
99
- if (releaseGood?.packageId) {
100
- await tx
101
- .getRepository(ReleaseGood)
102
- .update({ id: releaseGood.id }, { packageId: releaseGood.packageId, updater: releaseGood.updater })
103
- }
104
- }
93
+ if (!releaseGood?.packageId) {
94
+ const orderProducts: OrderProduct[] = await tx.getRepository(OrderProduct).find({
95
+ where: { releaseGood },
96
+ relations: ['product', 'product.productDetails']
97
+ })
98
+ releaseGood = await sellercraftCtrl.packOrder(sellercraft, { ...releaseGood, orderProducts })
99
+
100
+ if (releaseGood?.packageId) {
101
+ await txMgr.getRepository(ReleaseGood).update({ id: releaseGood.id }, { packageId: releaseGood.packageId, updater: releaseGood.updater })
102
+ }
103
+ }
105
104
 
106
- sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
105
+ await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
106
+ })
107
+ }
107
108
  }
108
109
 
110
+ // asynchronouly call to initiate sellercraft order shipment/ RTS
111
+ initSCOrderShipment(sellercraft)
112
+
109
113
  const companyDomain: Domain = releaseGood.bizplace.company.domain
110
114
  let marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
111
115
  where: { orderNo: releaseGood.refNo, domain: companyDomain },
@@ -2,6 +2,7 @@ import { gql } from 'apollo-server-koa'
2
2
 
3
3
  export const DeliveryOrderInfo = gql`
4
4
  type DeliveryOrderInfo {
5
+ name: String
5
6
  ownCollection: Boolean
6
7
  doStatus: String
7
8
  truckNo: String
@@ -17,5 +18,7 @@ export const DeliveryOrderInfo = gql`
17
18
  reusablePallet: String
18
19
  createdDate: String
19
20
  isManualDo: Boolean
21
+ releaseGood: ReleaseGood
22
+ productList: [Product]
20
23
  }
21
24
  `
@@ -1,4 +1,4 @@
1
- import { AirwayBill } from './airwaybill'
1
+ import { SellercraftDocument } from './sellercraft-document'
2
2
  import { ArrivalNoticeWorksheet } from './arrival-notice-worksheet'
3
3
  import { ContactPointInfo } from './contact-point-info'
4
4
  import { CycleCountWorksheet } from './cycle-count-worksheet'
@@ -68,9 +68,9 @@ export const Mutation = /* GraphQL */ `
68
68
  releaseGoodNos: [String!]
69
69
  ): Boolean @privilege(category: "worksheet_control", privilege: "mutation") @transaction
70
70
 
71
- fetchSellercraftAirwayBill (
72
- releaseGoodNo: String!
73
- ): AirwayBill @privilege(category: "worksheet_control", privilege: "mutation") @transaction
71
+ fetchSellercraftDocument (
72
+ releaseGoodId: String!
73
+ ): SellercraftDocument @privilege(category: "worksheet_control", privilege: "mutation") @transaction
74
74
 
75
75
  generateSortingWorksheet (
76
76
  worksheetNo: String!
@@ -628,7 +628,7 @@ export const Query = /* GraphQL */ `
628
628
 
629
629
  deliveryOrderByWorksheet (
630
630
  name: String!
631
- ): GoodsDeliveryNote @privilege(category: "worksheet", privilege: "query")
631
+ ): GoodsDeliveryNote @privilege(category: "worksheet", privilege: "query") @transaction
632
632
 
633
633
  fetchDeliveryOrderRO (
634
634
  name: String!
@@ -718,7 +718,7 @@ export const Query = /* GraphQL */ `
718
718
 
719
719
  export const Types = /* GraphQL */[
720
720
  Worksheet,
721
- AirwayBill,
721
+ SellercraftDocument,
722
722
  NewWorksheet,
723
723
  WorksheetPatch,
724
724
  WorksheetList,
@@ -0,0 +1,8 @@
1
+ import { gql } from 'apollo-server-koa'
2
+
3
+ export const SellercraftDocument = gql`
4
+ type SellercraftDocument {
5
+ airwayBill: String,
6
+ invoice: String
7
+ }
8
+ `
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchSellercraftAirwayBillResolver = void 0;
4
- const integration_sellercraft_1 = require("@things-factory/integration-sellercraft");
5
- const sales_base_1 = require("@things-factory/sales-base");
6
- const controllers_1 = require("../../../controllers");
7
- exports.fetchSellercraftAirwayBillResolver = {
8
- async fetchSellercraftAirwayBill(_, { releaseGoodNo }, context) {
9
- const { tx, domain, user } = context.state;
10
- let releaseGood = await tx
11
- .getRepository(sales_base_1.ReleaseGood)
12
- .findOne({ where: { domain, name: releaseGoodNo }, relations: ['bizplace', 'bizplace.domain'] });
13
- const sellercraft = await tx.getRepository(integration_sellercraft_1.Sellercraft).findOne({
14
- domain: releaseGood.bizplace.domain,
15
- status: integration_sellercraft_1.SellercraftStatus.ACTIVE
16
- });
17
- if (sellercraft && !(releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill)) {
18
- const sellercraftCtrl = new controllers_1.SellercraftController(tx, domain, user);
19
- await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood);
20
- }
21
- const airwayBill = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill;
22
- return { airwayBill };
23
- }
24
- };
25
- //# sourceMappingURL=fetch-sellercraft-airway-bill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-sellercraft-airway-bill.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet/fetch-sellercraft-airway-bill.ts"],"names":[],"mappings":";;;AAGA,qFAAwF;AACxF,2DAAwD;AAGxD,sDAA4D;AAE/C,QAAA,kCAAkC,GAAG;IAChD,KAAK,CAAC,0BAA0B,CAAC,CAAM,EAAE,EAAE,aAAa,EAAE,EAAE,OAAY;QACtE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAsD,OAAO,CAAC,KAAK,CAAA;QAC7F,IAAI,WAAW,GAAgB,MAAM,EAAE;aACpC,aAAa,CAAC,wBAAW,CAAC;aAC1B,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAA;QAElG,MAAM,WAAW,GAAgB,MAAM,EAAE,CAAC,aAAa,CAAC,qCAAW,CAAC,CAAC,OAAO,CAAC;YAC3E,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM;YACnC,MAAM,EAAE,2CAAiB,CAAC,MAAM;SACjC,CAAC,CAAA;QAEF,IAAI,WAAW,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAU,CAAA,EAAE;YAC3C,MAAM,eAAe,GAA0B,IAAI,mCAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;YAC1F,MAAM,eAAe,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;SACnE;QAED,MAAM,UAAU,GAAW,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAU,CAAA;QAClD,OAAO,EAAE,UAAU,EAAE,CAAA;IACvB,CAAC;CACF,CAAA"}
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AirwayBill = void 0;
4
- const apollo_server_koa_1 = require("apollo-server-koa");
5
- exports.AirwayBill = (0, apollo_server_koa_1.gql) `
6
- type AirwayBill {
7
- airwayBill: String
8
- }
9
- `;
10
- //# sourceMappingURL=airwaybill.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"airwaybill.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/airwaybill.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,UAAU,GAAG,IAAA,uBAAG,EAAA;;;;CAI5B,CAAA"}
@@ -1,30 +0,0 @@
1
- import { EntityManager } from 'typeorm'
2
-
3
- import { User } from '@things-factory/auth-base'
4
- import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
5
- import { ReleaseGood } from '@things-factory/sales-base'
6
- import { Domain } from '@things-factory/shell'
7
-
8
- import { SellercraftController } from '../../../controllers'
9
-
10
- export const fetchSellercraftAirwayBillResolver = {
11
- async fetchSellercraftAirwayBill(_: any, { releaseGoodNo }, context: any) {
12
- const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
13
- let releaseGood: ReleaseGood = await tx
14
- .getRepository(ReleaseGood)
15
- .findOne({ where: { domain, name: releaseGoodNo }, relations: ['bizplace', 'bizplace.domain'] })
16
-
17
- const sellercraft: Sellercraft = await tx.getRepository(Sellercraft).findOne({
18
- domain: releaseGood.bizplace.domain,
19
- status: SellercraftStatus.ACTIVE
20
- })
21
-
22
- if (sellercraft && !releaseGood?.airwayBill) {
23
- const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
24
- await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)
25
- }
26
-
27
- const airwayBill: string = releaseGood?.airwayBill
28
- return { airwayBill }
29
- }
30
- }
@@ -1,7 +0,0 @@
1
- import { gql } from 'apollo-server-koa'
2
-
3
- export const AirwayBill = gql`
4
- type AirwayBill {
5
- airwayBill: String
6
- }
7
- `