@things-factory/worksheet-base 4.3.186 → 4.3.187

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 (109) hide show
  1. package/dist-server/constants/worksheet.js +3 -1
  2. package/dist-server/constants/worksheet.js.map +1 -1
  3. package/dist-server/controllers/index.js +1 -0
  4. package/dist-server/controllers/index.js.map +1 -1
  5. package/dist-server/controllers/outbound/picking-worksheet-controller.js +6 -2
  6. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/replenishment/index.js +18 -0
  8. package/dist-server/controllers/replenishment/index.js.map +1 -0
  9. package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js +455 -0
  10. package/dist-server/controllers/replenishment/replenishment-worksheet-controller.js.map +1 -0
  11. package/dist-server/controllers/worksheet-controller.js +32 -9
  12. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  13. package/dist-server/entities/index.js +10 -2
  14. package/dist-server/entities/index.js.map +1 -1
  15. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +15 -1
  16. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -1
  17. package/dist-server/entities/warehouse-inventory-assignment-ranking.js +37 -0
  18. package/dist-server/entities/warehouse-inventory-assignment-ranking.js.map +1 -0
  19. package/dist-server/entities/worksheet.js +13 -9
  20. package/dist-server/entities/worksheet.js.map +1 -1
  21. package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js +57 -0
  22. package/dist-server/graphql/resolvers/worksheet/cancel-replenishment.js.map +1 -0
  23. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js +7 -1
  24. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  25. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js +19 -0
  26. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.js.map +1 -0
  27. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js +2 -1
  28. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js.map +1 -1
  29. package/dist-server/graphql/resolvers/worksheet/index.js +5 -2
  30. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  31. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +3 -1
  32. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  33. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +284 -270
  34. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  35. package/dist-server/graphql/resolvers/worksheet/picking/index.js +2 -1
  36. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  37. package/dist-server/graphql/resolvers/worksheet/picking/replenishment-picking.js +12 -0
  38. package/dist-server/graphql/resolvers/worksheet/picking/replenishment-picking.js.map +1 -0
  39. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +142 -78
  40. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  41. package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js +16 -0
  42. package/dist-server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.js.map +1 -0
  43. package/dist-server/graphql/resolvers/worksheet/putaway/index.js +4 -1
  44. package/dist-server/graphql/resolvers/worksheet/putaway/index.js.map +1 -1
  45. package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js +15 -0
  46. package/dist-server/graphql/resolvers/worksheet/putaway/replenishment-putaway.js.map +1 -0
  47. package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js +16 -0
  48. package/dist-server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.js.map +1 -0
  49. package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js +81 -0
  50. package/dist-server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.js.map +1 -0
  51. package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js +17 -0
  52. package/dist-server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.js.map +1 -0
  53. package/dist-server/graphql/resolvers/worksheet/replenishment/index.js +6 -0
  54. package/dist-server/graphql/resolvers/worksheet/replenishment/index.js.map +1 -0
  55. package/dist-server/graphql/resolvers/worksheet/worksheet.js +1 -0
  56. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  57. package/dist-server/graphql/resolvers/worksheet/worksheets.js +28 -2
  58. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  59. package/dist-server/graphql/types/worksheet/index.js +42 -1
  60. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  61. package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js +11 -0
  62. package/dist-server/graphql/types/worksheet/replenish-inventory-patch.js.map +1 -0
  63. package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
  64. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  65. package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
  66. package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
  67. package/dist-server/utils/inventory-util.js +2 -0
  68. package/dist-server/utils/inventory-util.js.map +1 -1
  69. package/dist-server/utils/worksheet-no-generator.js +21 -1
  70. package/dist-server/utils/worksheet-no-generator.js.map +1 -1
  71. package/dist-server/utils/worksheet-util.js +3 -0
  72. package/dist-server/utils/worksheet-util.js.map +1 -1
  73. package/package.json +5 -5
  74. package/server/constants/worksheet.ts +3 -1
  75. package/server/controllers/index.ts +1 -1
  76. package/server/controllers/outbound/picking-worksheet-controller.ts +12 -3
  77. package/server/controllers/replenishment/index.ts +1 -0
  78. package/server/controllers/replenishment/replenishment-worksheet-controller.ts +632 -0
  79. package/server/controllers/worksheet-controller.ts +47 -13
  80. package/server/entities/index.ts +15 -2
  81. package/server/entities/warehouse-bizplace-onhand-inventory.ts +13 -1
  82. package/server/entities/warehouse-inventory-assignment-ranking.ts +19 -0
  83. package/server/entities/worksheet.ts +5 -1
  84. package/server/graphql/resolvers/worksheet/cancel-replenishment.ts +69 -0
  85. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +6 -1
  86. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-replenishement-worksheet.ts +30 -0
  87. package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +3 -1
  88. package/server/graphql/resolvers/worksheet/index.ts +8 -2
  89. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +4 -2
  90. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +342 -310
  91. package/server/graphql/resolvers/worksheet/picking/index.ts +3 -1
  92. package/server/graphql/resolvers/worksheet/picking/replenishment-picking.ts +27 -0
  93. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +177 -95
  94. package/server/graphql/resolvers/worksheet/putaway/complete-replenishment-putaway.ts +25 -0
  95. package/server/graphql/resolvers/worksheet/putaway/index.ts +7 -1
  96. package/server/graphql/resolvers/worksheet/putaway/replenishment-putaway.ts +23 -0
  97. package/server/graphql/resolvers/worksheet/putaway/undo-replenishment-putaway.ts +22 -0
  98. package/server/graphql/resolvers/worksheet/putaway-replenishment-worksheet.ts +95 -0
  99. package/server/graphql/resolvers/worksheet/replenishment/activate-picking-replenishment.ts +26 -0
  100. package/server/graphql/resolvers/worksheet/replenishment/index.ts +5 -0
  101. package/server/graphql/resolvers/worksheet/worksheet.ts +1 -0
  102. package/server/graphql/resolvers/worksheet/worksheets.ts +38 -3
  103. package/server/graphql/types/worksheet/index.ts +42 -1
  104. package/server/graphql/types/worksheet/replenish-inventory-patch.ts +8 -0
  105. package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
  106. package/server/graphql/types/worksheet/worksheet.ts +1 -0
  107. package/server/utils/inventory-util.ts +3 -0
  108. package/server/utils/worksheet-no-generator.ts +29 -1
  109. package/server/utils/worksheet-util.ts +4 -2
@@ -39,6 +39,7 @@ exports.completePickingResolver = {
39
39
  async function completePicking(tx, domain, user, releaseGoodNo) {
40
40
  var _a, _b, _c, _d;
41
41
  const pickingWSCtrl = new controllers_1.PickingWorksheetController(tx, domain, user);
42
+ const replenishmentPickingWSCtrl = new controllers_1.ReplenishmentWorksheetController(tx, domain, user);
42
43
  let releaseGood = await tx.getRepository(sales_base_1.ReleaseGood).findOne({
43
44
  where: { domain, name: releaseGoodNo },
44
45
  relations: [
@@ -59,319 +60,332 @@ async function completePicking(tx, domain, user, releaseGoodNo) {
59
60
  'updater'
60
61
  ]
61
62
  });
62
- const worksheet = await pickingWSCtrl.findWorksheetByRefOrder(releaseGood, constants_1.WORKSHEET_TYPE.PICKING, [
63
- 'worksheetDetails',
64
- 'worksheetDetails.targetInventory',
65
- 'worksheetDetails.targetInventory.inventory'
66
- ]);
67
- const warehouseContactPoint = await tx.getRepository(biz_base_1.ContactPoint).findOne({
68
- where: {
69
- domain,
70
- type: 'WAREHOUSE'
71
- }
72
- });
73
- const worksheetDetails = worksheet.worksheetDetails;
74
- const targetInventories = worksheetDetails.map((wsd) => wsd.targetInventory);
75
- const inventories = targetInventories.map((ti) => ti.inventory);
76
- const pickedTargetInventories = targetInventories.filter(targetInventory => targetInventory.status === sales_base_1.ORDER_INVENTORY_STATUS.PICKED);
77
- let foundObsoleteInventories = await pickingWSCtrl.completePicking(releaseGood, worksheet, inventories);
78
- if (foundObsoleteInventories === null || foundObsoleteInventories === void 0 ? void 0 : foundObsoleteInventories.type) {
79
- const orderSource = releaseGood.source;
80
- switch (orderSource) {
81
- case auth_base_1.ApplicationType.SELLERCRAFT:
82
- const sellercraft = await tx
83
- .getRepository(integration_sellercraft_1.Sellercraft)
84
- .findOne({ domain: releaseGood.bizplace.domain, status: integration_sellercraft_1.SellercraftStatus.ACTIVE });
85
- if (sellercraft) {
86
- const initSCOrderShipment = async (sellercraft) => {
87
- await (0, typeorm_1.getManager)().transaction(async (txMgr) => {
88
- var _a;
89
- const sellercraftCtrl = new controllers_1.SellercraftController(txMgr, domain, user);
90
- if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length) && !(releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.marketPackCallSuccess)) {
91
- const orderProducts = await txMgr.getRepository(sales_base_1.OrderProduct).find({
92
- where: { releaseGood },
93
- relations: ['product', 'product.productDetails']
63
+ if (releaseGood) {
64
+ const worksheet = await pickingWSCtrl.findWorksheetByRefOrder(releaseGood, constants_1.WORKSHEET_TYPE.PICKING, [
65
+ 'worksheetDetails',
66
+ 'worksheetDetails.targetInventory',
67
+ 'worksheetDetails.targetInventory.inventory'
68
+ ]);
69
+ const warehouseContactPoint = await tx.getRepository(biz_base_1.ContactPoint).findOne({
70
+ where: {
71
+ domain,
72
+ type: 'WAREHOUSE'
73
+ }
74
+ });
75
+ const worksheetDetails = worksheet.worksheetDetails;
76
+ const targetInventories = worksheetDetails.map((wsd) => wsd.targetInventory);
77
+ const inventories = targetInventories.map((ti) => ti.inventory);
78
+ const pickedTargetInventories = targetInventories.filter(targetInventory => targetInventory.status === sales_base_1.ORDER_INVENTORY_STATUS.PICKED);
79
+ let foundObsoleteInventories = await pickingWSCtrl.completePicking(releaseGood, worksheet, inventories);
80
+ if (foundObsoleteInventories === null || foundObsoleteInventories === void 0 ? void 0 : foundObsoleteInventories.type) {
81
+ const orderSource = releaseGood.source;
82
+ switch (orderSource) {
83
+ case auth_base_1.ApplicationType.SELLERCRAFT:
84
+ const sellercraft = await tx
85
+ .getRepository(integration_sellercraft_1.Sellercraft)
86
+ .findOne({ domain: releaseGood.bizplace.domain, status: integration_sellercraft_1.SellercraftStatus.ACTIVE });
87
+ if (sellercraft) {
88
+ const initSCOrderShipment = async (sellercraft) => {
89
+ await (0, typeorm_1.getManager)().transaction(async (txMgr) => {
90
+ var _a;
91
+ const sellercraftCtrl = new controllers_1.SellercraftController(txMgr, domain, user);
92
+ if (!((_a = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _a === void 0 ? void 0 : _a.length) && !(releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.marketPackCallSuccess)) {
93
+ const orderProducts = await txMgr.getRepository(sales_base_1.OrderProduct).find({
94
+ where: { releaseGood },
95
+ relations: ['product', 'product.productDetails']
96
+ });
97
+ await sellercraftCtrl.packOrder(sellercraft, Object.assign(Object.assign({}, releaseGood), { orderProducts }));
98
+ }
99
+ const rtsTriggerLevel = await txMgr.getRepository(setting_base_1.Setting).findOne({
100
+ where: { domain, category: 'id-rule', name: 'rts-trigger-level' }
94
101
  });
95
- await sellercraftCtrl.packOrder(sellercraft, Object.assign(Object.assign({}, releaseGood), { orderProducts }));
96
- }
97
- const rtsTriggerLevel = await txMgr.getRepository(setting_base_1.Setting).findOne({
98
- where: { domain, category: 'id-rule', name: 'rts-trigger-level' }
102
+ if (rtsTriggerLevel && parseInt((rtsTriggerLevel === null || rtsTriggerLevel === void 0 ? void 0 : rtsTriggerLevel.value) || 0) == 1) {
103
+ await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood);
104
+ }
99
105
  });
100
- if (rtsTriggerLevel && parseInt((rtsTriggerLevel === null || rtsTriggerLevel === void 0 ? void 0 : rtsTriggerLevel.value) || 0) == 1) {
101
- await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood);
102
- }
103
- });
104
- };
105
- // asynchronouly call to initiate sellercraft order shipment/ RTS
106
- initSCOrderShipment(sellercraft);
107
- }
108
- break;
109
- case auth_base_1.ApplicationType.MMS:
110
- const companyDomain = releaseGood.bizplace.company.domain;
111
- let marketplaceOrder = await tx.getRepository(marketplace_base_1.MarketplaceOrder).findOne({
112
- where: { orderNo: releaseGood.refNo, domain: companyDomain },
113
- relations: [
114
- 'marketplaceStore',
115
- 'marketplaceStore.marketplaceDistributors',
116
- 'marketplaceOrderItems',
117
- 'marketplaceOrderItems.marketplaceOrderShippingItems',
118
- 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
119
- ]
120
- });
121
- if (marketplaceOrder) {
122
- const ecommerceCtrl = new ecommerce_1.EcommerceController(tx, domain, user);
123
- const marketplaceStore = marketplaceOrder.marketplaceStore;
124
- let eTraxOption;
125
- if (marketplaceStore === null || marketplaceStore === void 0 ? void 0 : marketplaceStore.isAutoUpdateShipment) {
126
- await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, sales_base_1.ORDER_STATUS.PACKING);
127
- await ecommerceCtrl.createOrderShip(releaseGood, marketplaceStore, marketplaceOrder, companyDomain);
128
- }
129
- if (!marketplaceOrder) {
130
- throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue');
131
- }
132
- eTraxOption = marketplaceOrder === null || marketplaceOrder === void 0 ? void 0 : marketplaceOrder.marketplaceStore.eTrax;
133
- // if eTrax option is true
134
- if (eTraxOption) {
135
- const marketplaceOrderItems = marketplaceOrder.marketplaceOrderItems;
136
- // access every marketplaceOrderItems for shipping information you need
137
- // trigger the controller from integration-lmd that trigger the API, build the parameters needed
138
- // for etrax didn't support multi awb per order
139
- const marketplaceOrderShippingItems = marketplaceOrderItems[0].marketplaceOrderShippingItems;
140
- const marketplaceOrderShipping = marketplaceOrderShippingItems[0].marketplaceOrderShipping;
141
- const lmd = await tx.getRepository(integration_lmd_1.LastMileDelivery).findOne({
142
- where: {
143
- domain,
144
- platform: 'eTrax'
145
- }
146
- });
147
- //Get which transporter to use
148
- const marketplaceTransporter = await tx
149
- .getRepository(integration_marketplace_1.MarketplaceTransporter)
150
- .findOne({
151
- where: { marketplaceStore: marketplaceOrder.marketplaceStore },
152
- relations: ['pickupTransporter', 'deliveryTransporter']
153
- });
154
- const resp = await integration_lmd_1.LastMileAPI.createShipmentRequest(lmd, {
155
- orderNo: marketplaceOrder.orderNo,
156
- clientId: lmd.clientId,
157
- clientType: lmd.clientType,
158
- clientName: lmd.clientName,
159
- transporterId: marketplaceTransporter.pickupTransporter.transporterId,
160
- pickupName: warehouseContactPoint.name,
161
- pickupAddress1: warehouseContactPoint.address,
162
- pickupAddress2: warehouseContactPoint.address2,
163
- pickupPostcode: warehouseContactPoint.postCode,
164
- pickupState: warehouseContactPoint.state,
165
- pickupCity: warehouseContactPoint.city,
166
- pickupPhone: warehouseContactPoint.phone,
167
- pickupEmail: warehouseContactPoint.email,
168
- name: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.attentionTo) ? marketplaceOrderShipping.attentionTo.trim() : '',
169
- address1: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.address1) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.address1.trim() : '-',
170
- address2: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.address2) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.address2.trim() : '-',
171
- postCode: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.postCode) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.postCode.trim() : '',
172
- city: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.city) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.city.trim() : '',
173
- state: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.state) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.state.trim() : '',
174
- phone: marketplaceOrderShipping.phone1 || '',
175
- email: marketplaceOrderShipping.email || '',
176
- attentionTo: marketplaceOrderShipping.attentionTo,
177
- quantity: marketplaceOrderItems.length
178
- });
179
- const delay = (ms) => {
180
- return new Promise(resolve => setTimeout(resolve, ms));
181
106
  };
182
- if (resp.Status === 'SUCCESS') {
183
- //Success
184
- let awbObtained = false;
185
- let retry = 0;
186
- while (!awbObtained) {
187
- const marketplaceOrder2 = await tx.getRepository(marketplace_base_1.MarketplaceOrder).findOne({
188
- where: { releaseOrderId: releaseGood.id },
189
- relations: [
190
- 'marketplaceStore',
191
- 'marketplaceOrderItems',
192
- 'marketplaceOrderItems.marketplaceOrderShippingItems',
193
- 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
194
- ]
195
- });
196
- const orderShipping = marketplaceOrder2.marketplaceOrderItems[0].marketplaceOrderShippingItems[0].marketplaceOrderShipping;
197
- if (orderShipping === null || orderShipping === void 0 ? void 0 : orderShipping.airwayBill) {
198
- awbObtained = true;
107
+ // asynchronouly call to initiate sellercraft order shipment/ RTS
108
+ initSCOrderShipment(sellercraft);
109
+ }
110
+ break;
111
+ case auth_base_1.ApplicationType.MMS:
112
+ const companyDomain = releaseGood.bizplace.company.domain;
113
+ let marketplaceOrder = await tx.getRepository(marketplace_base_1.MarketplaceOrder).findOne({
114
+ where: { orderNo: releaseGood.refNo, domain: companyDomain },
115
+ relations: [
116
+ 'marketplaceStore',
117
+ 'marketplaceStore.marketplaceDistributors',
118
+ 'marketplaceOrderItems',
119
+ 'marketplaceOrderItems.marketplaceOrderShippingItems',
120
+ 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
121
+ ]
122
+ });
123
+ if (marketplaceOrder) {
124
+ const ecommerceCtrl = new ecommerce_1.EcommerceController(tx, domain, user);
125
+ const marketplaceStore = marketplaceOrder.marketplaceStore;
126
+ let eTraxOption;
127
+ if (marketplaceStore === null || marketplaceStore === void 0 ? void 0 : marketplaceStore.isAutoUpdateShipment) {
128
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, sales_base_1.ORDER_STATUS.PACKING);
129
+ await ecommerceCtrl.createOrderShip(releaseGood, marketplaceStore, marketplaceOrder, companyDomain);
130
+ }
131
+ if (!marketplaceOrder) {
132
+ throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue');
133
+ }
134
+ eTraxOption = marketplaceOrder === null || marketplaceOrder === void 0 ? void 0 : marketplaceOrder.marketplaceStore.eTrax;
135
+ // if eTrax option is true
136
+ if (eTraxOption) {
137
+ const marketplaceOrderItems = marketplaceOrder.marketplaceOrderItems;
138
+ // access every marketplaceOrderItems for shipping information you need
139
+ // trigger the controller from integration-lmd that trigger the API, build the parameters needed
140
+ // for etrax didn't support multi awb per order
141
+ const marketplaceOrderShippingItems = marketplaceOrderItems[0].marketplaceOrderShippingItems;
142
+ const marketplaceOrderShipping = marketplaceOrderShippingItems[0].marketplaceOrderShipping;
143
+ const lmd = await tx.getRepository(integration_lmd_1.LastMileDelivery).findOne({
144
+ where: {
145
+ domain,
146
+ platform: 'eTrax'
199
147
  }
200
- await delay(5000);
201
- //Timeout after 15sec
202
- if (++retry > 3) {
203
- break;
148
+ });
149
+ //Get which transporter to use
150
+ const marketplaceTransporter = await tx
151
+ .getRepository(integration_marketplace_1.MarketplaceTransporter)
152
+ .findOne({
153
+ where: { marketplaceStore: marketplaceOrder.marketplaceStore },
154
+ relations: ['pickupTransporter', 'deliveryTransporter']
155
+ });
156
+ const resp = await integration_lmd_1.LastMileAPI.createShipmentRequest(lmd, {
157
+ orderNo: marketplaceOrder.orderNo,
158
+ clientId: lmd.clientId,
159
+ clientType: lmd.clientType,
160
+ clientName: lmd.clientName,
161
+ transporterId: marketplaceTransporter.pickupTransporter.transporterId,
162
+ pickupName: warehouseContactPoint.name,
163
+ pickupAddress1: warehouseContactPoint.address,
164
+ pickupAddress2: warehouseContactPoint.address2,
165
+ pickupPostcode: warehouseContactPoint.postCode,
166
+ pickupState: warehouseContactPoint.state,
167
+ pickupCity: warehouseContactPoint.city,
168
+ pickupPhone: warehouseContactPoint.phone,
169
+ pickupEmail: warehouseContactPoint.email,
170
+ name: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.attentionTo) ? marketplaceOrderShipping.attentionTo.trim() : '',
171
+ address1: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.address1) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.address1.trim() : '-',
172
+ address2: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.address2) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.address2.trim() : '-',
173
+ postCode: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.postCode) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.postCode.trim() : '',
174
+ city: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.city) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.city.trim() : '',
175
+ state: (marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.state) ? marketplaceOrderShipping === null || marketplaceOrderShipping === void 0 ? void 0 : marketplaceOrderShipping.state.trim() : '',
176
+ phone: marketplaceOrderShipping.phone1 || '',
177
+ email: marketplaceOrderShipping.email || '',
178
+ attentionTo: marketplaceOrderShipping.attentionTo,
179
+ quantity: marketplaceOrderItems.length
180
+ });
181
+ const delay = (ms) => {
182
+ return new Promise(resolve => setTimeout(resolve, ms));
183
+ };
184
+ if (resp.Status === 'SUCCESS') {
185
+ //Success
186
+ let awbObtained = false;
187
+ let retry = 0;
188
+ while (!awbObtained) {
189
+ const marketplaceOrder2 = await tx.getRepository(marketplace_base_1.MarketplaceOrder).findOne({
190
+ where: { releaseOrderId: releaseGood.id },
191
+ relations: [
192
+ 'marketplaceStore',
193
+ 'marketplaceOrderItems',
194
+ 'marketplaceOrderItems.marketplaceOrderShippingItems',
195
+ 'marketplaceOrderItems.marketplaceOrderShippingItems.marketplaceOrderShipping'
196
+ ]
197
+ });
198
+ const orderShipping = marketplaceOrder2.marketplaceOrderItems[0].marketplaceOrderShippingItems[0].marketplaceOrderShipping;
199
+ if (orderShipping === null || orderShipping === void 0 ? void 0 : orderShipping.airwayBill) {
200
+ awbObtained = true;
201
+ }
202
+ await delay(5000);
203
+ //Timeout after 15sec
204
+ if (++retry > 3) {
205
+ break;
206
+ }
204
207
  }
205
208
  }
209
+ else {
210
+ if ((resp === null || resp === void 0 ? void 0 : resp.AWBurl) && (resp === null || resp === void 0 ? void 0 : resp.TrackingNo))
211
+ await tx
212
+ .getRepository(marketplace_base_1.MarketplaceOrderShipping)
213
+ .update({ id: marketplaceOrderShipping.id }, { airwayBill: resp.AWBurl, trackingNo: resp.TrackingNo });
214
+ else
215
+ throw resp;
216
+ }
206
217
  }
207
- else {
208
- if ((resp === null || resp === void 0 ? void 0 : resp.AWBurl) && (resp === null || resp === void 0 ? void 0 : resp.TrackingNo))
209
- await tx
210
- .getRepository(marketplace_base_1.MarketplaceOrderShipping)
211
- .update({ id: marketplaceOrderShipping.id }, { airwayBill: resp.AWBurl, trackingNo: resp.TrackingNo });
212
- else
213
- throw resp;
214
- }
218
+ await ecommerceCtrl.createOrderPackage(tx, marketplaceOrder, companyDomain, marketplaceStore, releaseGood);
215
219
  }
216
- releaseGood = await ecommerceCtrl.createOrderPackage(tx, marketplaceOrder, companyDomain, marketplaceStore, releaseGood);
217
- }
218
- break;
219
- default:
220
- let orderPackage = {
221
- name: sales_base_1.OrderNoGenerator.orderPackage(),
222
- packageId: null,
223
- trackingNo: null,
224
- transporter: null,
225
- airwayBill: null,
226
- status: sales_base_1.ORDER_STATUS.PROCESSING,
227
- releaseGood,
228
- domain: releaseGood.domain,
229
- bizplace: releaseGood.bizplace,
230
- creator: releaseGood.creator,
231
- updater: releaseGood.updater
232
- };
233
- let savedOrderPackage = await tx.getRepository(sales_base_1.OrderPackage).save(orderPackage);
234
- const orderPackageItems = releaseGood.orderProducts.map(op => {
235
- return {
236
- name: sales_base_1.OrderNoGenerator.orderPackageItem(),
237
- orderProduct: op,
220
+ break;
221
+ default:
222
+ let orderPackage = {
223
+ name: sales_base_1.OrderNoGenerator.orderPackage(),
224
+ packageId: null,
225
+ trackingNo: null,
226
+ transporter: null,
227
+ airwayBill: null,
238
228
  status: sales_base_1.ORDER_STATUS.PROCESSING,
239
- releaseQty: op.releaseQty,
240
- orderPackage: savedOrderPackage,
229
+ releaseGood,
241
230
  domain: releaseGood.domain,
242
231
  bizplace: releaseGood.bizplace,
243
232
  creator: releaseGood.creator,
244
233
  updater: releaseGood.updater
245
234
  };
246
- });
247
- await tx.getRepository(sales_base_1.OrderPackageItem).save(orderPackageItems);
248
- orderPackage.orderPackageItems = orderPackageItems;
249
- releaseGood.orderPackages = [orderPackage];
250
- break;
251
- }
252
- const account = await tx
253
- .getRepository(integration_accounting_1.Account)
254
- .findOne({ where: { domain: releaseGood.bizplace.domain, status: 'active' }, relations: ['domain'] });
255
- // Xilnex Create Sales Order and Post Sales Order to Sales Invoice
256
- const createSalesOrder = async (account, tx) => {
257
- if (account) {
258
- if (account.platform == 'xilnex') {
259
- let integrationInfo = {
260
- xilnex: {
261
- accountId: account.accountId,
262
- startTime: new Date()
263
- }
264
- };
265
- try {
266
- const salesOrder = await integration_accounting_1.AccountingAPI.createSalesOrder(account, {
267
- releaseGood,
268
- orderProducts: releaseGood.orderProducts
269
- });
270
- if (salesOrder) {
271
- integrationInfo.xilnex = Object.assign(Object.assign({}, integrationInfo.xilnex), { salesOrderId: salesOrder.id, endTime: new Date() });
272
- try {
273
- const salesInvoice = await integration_accounting_1.AccountingAPI.postSalesOrderToSalesInvoice(account, {
274
- orderId: (salesOrder === null || salesOrder === void 0 ? void 0 : salesOrder.id) || null
275
- });
276
- if (salesInvoice) {
277
- integrationInfo.xilnex = Object.assign(Object.assign({}, integrationInfo.xilnex), { salesInvoiceId: salesInvoice.salesId, endTime: new Date() });
278
- const salesOrderItems = salesInvoice.sale.items;
279
- await Promise.all(releaseGood.orderProducts.map(async (op) => {
280
- const matchedProduct = salesOrderItems.find(soi => soi.itemId == op.productDetail.refCode);
281
- if (matchedProduct) {
282
- await tx.getRepository(sales_base_1.OrderProduct).update({ id: op.id }, { refItemId: matchedProduct.id });
283
- }
284
- }));
235
+ let savedOrderPackage = await tx.getRepository(sales_base_1.OrderPackage).save(orderPackage);
236
+ const orderPackageItems = releaseGood.orderProducts.map(op => {
237
+ return {
238
+ name: sales_base_1.OrderNoGenerator.orderPackageItem(),
239
+ orderProduct: op,
240
+ status: sales_base_1.ORDER_STATUS.PROCESSING,
241
+ releaseQty: op.releaseQty,
242
+ orderPackage: savedOrderPackage,
243
+ domain: releaseGood.domain,
244
+ bizplace: releaseGood.bizplace,
245
+ creator: releaseGood.creator,
246
+ updater: releaseGood.updater
247
+ };
248
+ });
249
+ await tx.getRepository(sales_base_1.OrderPackageItem).save(orderPackageItems);
250
+ orderPackage.orderPackageItems = orderPackageItems;
251
+ releaseGood.orderPackages = [orderPackage];
252
+ break;
253
+ }
254
+ const account = await tx
255
+ .getRepository(integration_accounting_1.Account)
256
+ .findOne({ where: { domain: releaseGood.bizplace.domain, status: 'active' }, relations: ['domain'] });
257
+ // Xilnex Create Sales Order and Post Sales Order to Sales Invoice
258
+ const createSalesOrder = async (account, tx) => {
259
+ if (account) {
260
+ if (account.platform == 'xilnex') {
261
+ let integrationInfo = {
262
+ xilnex: {
263
+ accountId: account.accountId,
264
+ startTime: new Date()
265
+ }
266
+ };
267
+ try {
268
+ const salesOrder = await integration_accounting_1.AccountingAPI.createSalesOrder(account, {
269
+ releaseGood,
270
+ orderProducts: releaseGood.orderProducts
271
+ });
272
+ if (salesOrder) {
273
+ integrationInfo.xilnex = Object.assign(Object.assign({}, integrationInfo.xilnex), { salesOrderId: salesOrder.id, endTime: new Date() });
274
+ try {
275
+ const salesInvoice = await integration_accounting_1.AccountingAPI.postSalesOrderToSalesInvoice(account, {
276
+ orderId: (salesOrder === null || salesOrder === void 0 ? void 0 : salesOrder.id) || null
277
+ });
278
+ if (salesInvoice) {
279
+ integrationInfo.xilnex = Object.assign(Object.assign({}, integrationInfo.xilnex), { salesInvoiceId: salesInvoice.salesId, endTime: new Date() });
280
+ const salesOrderItems = salesInvoice.sale.items;
281
+ await Promise.all(releaseGood.orderProducts.map(async (op) => {
282
+ const matchedProduct = salesOrderItems.find(soi => soi.itemId == op.productDetail.refCode);
283
+ if (matchedProduct) {
284
+ await tx.getRepository(sales_base_1.OrderProduct).update({ id: op.id }, { refItemId: matchedProduct.id });
285
+ }
286
+ }));
287
+ await tx
288
+ .getRepository(sales_base_1.ReleaseGood)
289
+ .update({ id: releaseGood.id }, { collectionOrderNo: salesInvoice.salesId, integrationInfo, updater: releaseGood.updater });
290
+ }
291
+ }
292
+ catch (error) {
293
+ integrationInfo.xilnex = Object.assign(Object.assign({}, integrationInfo.xilnex), { endTime: new Date() });
285
294
  await tx
286
295
  .getRepository(sales_base_1.ReleaseGood)
287
- .update({ id: releaseGood.id }, { collectionOrderNo: salesInvoice.salesId, integrationInfo, updater: releaseGood.updater });
296
+ .update({ id: releaseGood.id }, { integrationInfo, integrationFail: true, updater: releaseGood.updater });
297
+ env_1.logger.error(`complete-picking[createSalesInvoice][${releaseGood.refNo}]: ${error}`);
288
298
  }
289
299
  }
290
- catch (error) {
291
- integrationInfo.xilnex = Object.assign(Object.assign({}, integrationInfo.xilnex), { endTime: new Date() });
292
- await tx
293
- .getRepository(sales_base_1.ReleaseGood)
294
- .update({ id: releaseGood.id }, { integrationInfo, integrationFail: true, updater: releaseGood.updater });
295
- env_1.logger.error(`complete-picking[createSalesInvoice][${releaseGood.refNo}]: ${error}`);
296
- }
297
300
  }
298
- }
299
- catch (error) {
300
- integrationInfo.xilnex = Object.assign(Object.assign({}, integrationInfo.xilnex), { endTime: new Date() });
301
- await tx
302
- .getRepository(sales_base_1.ReleaseGood)
303
- .update({ id: releaseGood.id }, { integrationInfo, integrationFail: true, updater: releaseGood.updater });
304
- env_1.logger.error(`complete-picking[createSalesOrder][${releaseGood.refNo}]: ${error}`);
301
+ catch (error) {
302
+ integrationInfo.xilnex = Object.assign(Object.assign({}, integrationInfo.xilnex), { endTime: new Date() });
303
+ await tx
304
+ .getRepository(sales_base_1.ReleaseGood)
305
+ .update({ id: releaseGood.id }, { integrationInfo, integrationFail: true, updater: releaseGood.updater });
306
+ env_1.logger.error(`complete-picking[createSalesOrder][${releaseGood.refNo}]: ${error}`);
307
+ }
305
308
  }
306
309
  }
310
+ };
311
+ if (releaseGood.type == 'b2c') {
312
+ await createSalesOrder(account, tx);
307
313
  }
308
- };
309
- if (releaseGood.type == 'b2c') {
310
- await createSalesOrder(account, tx);
311
- }
312
- if (releaseGood.packingOption) {
313
- const packingWSCtrl = new controllers_1.PackingWorksheetController(tx, domain, user);
314
- await packingWSCtrl.generatePackingWorksheet(releaseGoodNo);
315
- }
316
- else {
317
- // Find Existing Loading Worksheet if any
318
- let existLoadingWorksheet = await tx.getRepository(entities_1.Worksheet).findOne({
319
- where: {
320
- releaseGood,
321
- type: constants_1.WORKSHEET_TYPE.LOADING,
322
- status: constants_1.WORKSHEET_STATUS.DEACTIVATED
314
+ if (releaseGood.packingOption) {
315
+ const packingWSCtrl = new controllers_1.PackingWorksheetController(tx, domain, user);
316
+ await packingWSCtrl.generatePackingWorksheet(releaseGoodNo);
317
+ }
318
+ else {
319
+ // Find Existing Loading Worksheet if any
320
+ let existLoadingWorksheet = await tx.getRepository(entities_1.Worksheet).findOne({
321
+ where: {
322
+ releaseGood,
323
+ type: constants_1.WORKSHEET_TYPE.LOADING,
324
+ status: constants_1.WORKSHEET_STATUS.DEACTIVATED
325
+ }
326
+ });
327
+ if (!existLoadingWorksheet && !releaseGood.courierOption && !releaseGood.packingOption) {
328
+ if (pickedTargetInventories.length > 0) {
329
+ const loadingWSCtrl = new controllers_1.LoadingWorksheetController(tx, domain, user);
330
+ let loadingWorksheet = await loadingWSCtrl.generateLoadingWorksheet(releaseGoodNo, pickedTargetInventories);
331
+ if (!((_a = loadingWorksheet.worksheetDetails) === null || _a === void 0 ? void 0 : _a.length)) {
332
+ loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id);
333
+ }
334
+ const loadingWorksheetDetails = loadingWorksheet.worksheetDetails;
335
+ await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails);
336
+ }
323
337
  }
324
- });
325
- if (!existLoadingWorksheet && !releaseGood.courierOption && !releaseGood.packingOption) {
326
- if (pickedTargetInventories.length > 0) {
338
+ else {
327
339
  const loadingWSCtrl = new controllers_1.LoadingWorksheetController(tx, domain, user);
328
- let loadingWorksheet = await loadingWSCtrl.generateLoadingWorksheet(releaseGoodNo, pickedTargetInventories);
329
- if (!((_a = loadingWorksheet.worksheetDetails) === null || _a === void 0 ? void 0 : _a.length)) {
340
+ let loadingWorksheet = await loadingWSCtrl.updateLoadingWorksheet(releaseGoodNo, pickedTargetInventories, existLoadingWorksheet);
341
+ if (!((_b = loadingWorksheet.worksheetDetails) === null || _b === void 0 ? void 0 : _b.length)) {
330
342
  loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id);
331
343
  }
332
344
  const loadingWorksheetDetails = loadingWorksheet.worksheetDetails;
333
345
  await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails);
334
346
  }
335
347
  }
336
- else {
337
- const loadingWSCtrl = new controllers_1.LoadingWorksheetController(tx, domain, user);
338
- let loadingWorksheet = await loadingWSCtrl.updateLoadingWorksheet(releaseGoodNo, pickedTargetInventories, existLoadingWorksheet);
339
- if (!((_b = loadingWorksheet.worksheetDetails) === null || _b === void 0 ? void 0 : _b.length)) {
340
- loadingWorksheet = await pickingWSCtrl.findWorksheetById(loadingWorksheet.id);
341
- }
342
- const loadingWorksheetDetails = loadingWorksheet.worksheetDetails;
343
- await loadingWSCtrl.activateLoading(loadingWorksheet.name, loadingWorksheetDetails);
348
+ // trigger LMD API to create parcel
349
+ if (((_c = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _c === void 0 ? void 0 : _c.length) &&
350
+ releaseGood.lmdOption &&
351
+ releaseGood.lastMileDelivery &&
352
+ ((_d = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _d === void 0 ? void 0 : _d.some(op => op.parcelId == null))) {
353
+ await (0, utils_1.createLmdParcel)([releaseGood], tx);
344
354
  }
355
+ //
345
356
  }
346
- // trigger LMD API to create parcel
347
- if (((_c = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _c === void 0 ? void 0 : _c.length) && releaseGood.lmdOption && releaseGood.lastMileDelivery && ((_d = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.orderPackages) === null || _d === void 0 ? void 0 : _d.some(op => op.parcelId == null))) {
348
- await (0, utils_1.createLmdParcel)([releaseGood], tx);
349
- }
350
- //
351
- }
352
- else {
353
- //update inventories obsolete to true
354
- await tx.getRepository(warehouse_base_1.Inventory).update({ id: (0, typeorm_1.In)(foundObsoleteInventories) }, { obsolete: true });
355
- foundObsoleteInventories = foundObsoleteInventories
356
- .map(inv => {
357
- return "'" + inv.trim() + "'";
358
- })
359
- .join(',');
360
- //update any orders that is assigned with obsolete inventories
361
- await tx.getRepository(sales_base_1.ReleaseGood).query(`
357
+ else {
358
+ //update inventories obsolete to true
359
+ await tx.getRepository(warehouse_base_1.Inventory).update({ id: (0, typeorm_1.In)(foundObsoleteInventories) }, { obsolete: true });
360
+ foundObsoleteInventories = foundObsoleteInventories
361
+ .map(inv => {
362
+ return "'" + inv.trim() + "'";
363
+ })
364
+ .join(',');
365
+ //update any orders that is assigned with obsolete inventories
366
+ await tx.getRepository(sales_base_1.ReleaseGood).query(`
362
367
  update release_goods rg set status = 'OBSOLETE'
363
368
  from order_inventories oi
364
369
  where oi.release_good_id = rg.id
365
370
  and oi.inventory_id in (${foundObsoleteInventories})
366
371
  and rg.status in ('PICKING', 'PENDING_WORKSHEET', 'READY_TO_PICK')`);
367
- await tx.getRepository(entities_1.Worksheet).query(`
372
+ await tx.getRepository(entities_1.Worksheet).query(`
368
373
  update worksheets w set status = 'DEACTIVATED', updater_id = '${user.id}', assignee_id = null
369
374
  from worksheet_details wd
370
375
  inner join order_inventories oi on oi.id = wd.target_inventory_id
371
376
  where wd.worksheet_id = w.id
372
377
  and oi.inventory_id in (${foundObsoleteInventories})
373
378
  `);
374
- return true;
379
+ return true;
380
+ }
381
+ }
382
+ else {
383
+ let replenishment = await tx.getRepository(sales_base_1.Replenishment).findOne({
384
+ where: { domain, name: releaseGoodNo }
385
+ });
386
+ const worksheet = await pickingWSCtrl.findWorksheetByRefOrder(replenishment, constants_1.WORKSHEET_TYPE.PICKING_REPLENISHMENT, ['worksheetDetails', 'worksheetDetails.targetInventory', 'worksheetDetails.targetInventory.inventory']);
387
+ await replenishmentPickingWSCtrl.completeReplenishmentPicking(replenishment, worksheet);
388
+ await replenishmentPickingWSCtrl.generatePutawayReplenishmentWorksheet(releaseGoodNo);
375
389
  }
376
390
  }
377
391
  exports.completePicking = completePicking;