@things-factory/worksheet-base 4.0.36 → 4.0.40

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 (45) hide show
  1. package/dist-server/constants/template.js +1 -0
  2. package/dist-server/constants/template.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/sellercraft-controller.js +32 -1
  4. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js +1 -1
  6. package/dist-server/controllers/inbound/unloading-returning-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +16 -12
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +2 -0
  10. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  11. package/dist-server/controllers/render-grn.js +1 -0
  12. package/dist-server/controllers/render-grn.js.map +1 -1
  13. package/dist-server/controllers/render-invoices.js +138 -0
  14. package/dist-server/controllers/render-invoices.js.map +1 -0
  15. package/dist-server/controllers/render-ro-do.js +5 -1
  16. package/dist-server/controllers/render-ro-do.js.map +1 -1
  17. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +5 -2
  18. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
  19. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +2 -2
  20. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  21. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +10 -1
  22. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  23. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +90 -76
  24. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  25. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.js.map +1 -1
  26. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +2 -1
  27. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
  28. package/dist-server/routes.js +8 -0
  29. package/dist-server/routes.js.map +1 -1
  30. package/package.json +17 -17
  31. package/server/constants/template.ts +1 -0
  32. package/server/controllers/ecommerce/sellercraft-controller.ts +37 -1
  33. package/server/controllers/inbound/unloading-returning-worksheet-controller.ts +1 -1
  34. package/server/controllers/inbound/unloading-worksheet-controller.ts +21 -14
  35. package/server/controllers/outbound/sorting-worksheet-controller.ts +1 -0
  36. package/server/controllers/render-grn.ts +1 -0
  37. package/server/controllers/render-invoices.ts +154 -0
  38. package/server/controllers/render-ro-do.ts +6 -1
  39. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +11 -6
  40. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +2 -2
  41. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +12 -1
  42. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +96 -79
  43. package/server/graphql/resolvers/worksheet/unloading/complete-unloading-partially.ts +1 -1
  44. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +2 -2
  45. package/server/routes.ts +11 -0
@@ -55,7 +55,10 @@ export async function completePicking(
55
55
  'bizplace.company.domain',
56
56
  'orderInventories',
57
57
  'orderInventories.inventory',
58
- 'orderInventories.product'
58
+ 'orderInventories.product',
59
+ 'orderProducts',
60
+ 'orderProducts.product',
61
+ 'orderProducts.product.productDetails'
59
62
  ]
60
63
  })
61
64
 
@@ -86,6 +89,11 @@ export async function completePicking(
86
89
 
87
90
  if (sellercraft) {
88
91
  const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
92
+
93
+ if (!releaseGood?.packageId) {
94
+ releaseGood = await sellercraftCtrl.packOrder(sellercraft, releaseGood)
95
+ }
96
+
89
97
  releaseGood = await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
90
98
  await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
91
99
  } else {
@@ -94,91 +102,100 @@ export async function completePicking(
94
102
  where: { orderNo: releaseGood.refNo, domain: companyDomain },
95
103
  relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
96
104
  })
97
- const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
98
- let eTraxOption: boolean
99
105
 
100
- if (marketplaceStore.isAutoUpdateShipment) {
101
- const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
102
- await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
103
- }
106
+ if (marketplaceOrder) {
107
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
108
+ let eTraxOption: boolean
104
109
 
105
- if (!marketplaceOrder)
106
- throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue')
107
- eTraxOption = marketplaceOrder?.marketplaceStore.eTrax
108
-
109
- // if eTrax option is true
110
- if (eTraxOption) {
111
- const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
112
-
113
- // access every marketplaceOrderItems for shipping information you need
114
- // trigger the controller from integration-lmd that trigger the API, build the parameters needed
115
- // for etrax didn't support multi awb per order
116
- const marketplaceOrderShipping: MarketplaceOrderShipping = marketplaceOrderItems[0].marketplaceOrderShipping
117
- const lmd: LastMileDelivery = await tx.getRepository(LastMileDelivery).findOne({
118
- where: {
119
- domain,
120
- platform: 'eTrax'
121
- }
122
- })
123
-
124
- //Get which transporter to use
125
- const marketplaceTransporter: MarketplaceTransporter = await tx.getRepository(MarketplaceTransporter).findOne({
126
- where: { marketplaceStore: marketplaceOrder.marketplaceStore },
127
- relations: ['pickupTransporter', 'deliveryTransporter']
128
- })
129
-
130
- const resp = await LastMileAPI.createShipmentRequest(lmd, {
131
- orderNo: marketplaceOrder.orderNo,
132
- clientId: lmd.clientId,
133
- clientType: lmd.clientType,
134
- clientName: lmd.clientName,
135
- transporterId: marketplaceTransporter.pickupTransporter.transporterId,
136
- pickupName: warehouseContactPoint.name,
137
- pickupAddress1: warehouseContactPoint.address,
138
- pickupAddress2: warehouseContactPoint.address2,
139
- pickupPostcode: warehouseContactPoint.postCode,
140
- pickupState: warehouseContactPoint.state,
141
- pickupCity: warehouseContactPoint.city,
142
- pickupPhone: warehouseContactPoint.phone,
143
- pickupEmail: warehouseContactPoint.email,
144
- name: marketplaceOrderShipping?.attentionTo ? marketplaceOrderShipping.attentionTo.trim() : '',
145
- address1: marketplaceOrderShipping?.address1 ? marketplaceOrderShipping?.address1.trim() : '-',
146
- address2: marketplaceOrderShipping?.address2 ? marketplaceOrderShipping?.address2.trim() : '-',
147
- postCode: marketplaceOrderShipping?.postCode ? marketplaceOrderShipping?.postCode.trim() : '',
148
- city: marketplaceOrderShipping?.city ? marketplaceOrderShipping?.city.trim() : '',
149
- state: marketplaceOrderShipping?.state ? marketplaceOrderShipping?.state.trim() : '',
150
- phone: marketplaceOrderShipping.phone1 || '',
151
- email: marketplaceOrderShipping.email || '',
152
- attentionTo: marketplaceOrderShipping.attentionTo,
153
- quantity: marketplaceOrderItems.length
154
- })
155
-
156
- const delay = (ms: number) => {
157
- return new Promise(resolve => setTimeout(resolve, ms))
110
+ if (marketplaceStore.isAutoUpdateShipment) {
111
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
112
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PACKING)
158
113
  }
159
114
 
160
- if (resp.Status === 'SUCCESS') {
161
- //Success
162
- let awbObtained = false
163
- let retry = 0
164
- while (!awbObtained) {
165
- const marketplaceOrder2: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
166
- where: { releaseOrderId: releaseGood.id },
167
- relations: ['marketplaceStore', 'marketplaceOrderItems', 'marketplaceOrderItems.marketplaceOrderShipping']
168
- })
169
- const orderShipping = marketplaceOrder2.marketplaceOrderItems[0].marketplaceOrderShipping
170
- if (orderShipping?.airwayBill) {
171
- awbObtained = true
115
+ if (!marketplaceOrder)
116
+ throw new Error('Failed to find ecommerce order, kindly contact our support team regarding this issue')
117
+ eTraxOption = marketplaceOrder?.marketplaceStore.eTrax
118
+
119
+ // if eTrax option is true
120
+ if (eTraxOption) {
121
+ const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
122
+
123
+ // access every marketplaceOrderItems for shipping information you need
124
+ // trigger the controller from integration-lmd that trigger the API, build the parameters needed
125
+ // for etrax didn't support multi awb per order
126
+ const marketplaceOrderShipping: MarketplaceOrderShipping = marketplaceOrderItems[0].marketplaceOrderShipping
127
+ const lmd: LastMileDelivery = await tx.getRepository(LastMileDelivery).findOne({
128
+ where: {
129
+ domain,
130
+ platform: 'eTrax'
172
131
  }
173
- await delay(5000)
174
- //Timeout after 15sec
175
- if (++retry > 3) {
176
- break
132
+ })
133
+
134
+ //Get which transporter to use
135
+ const marketplaceTransporter: MarketplaceTransporter = await tx
136
+ .getRepository(MarketplaceTransporter)
137
+ .findOne({
138
+ where: { marketplaceStore: marketplaceOrder.marketplaceStore },
139
+ relations: ['pickupTransporter', 'deliveryTransporter']
140
+ })
141
+
142
+ const resp = await LastMileAPI.createShipmentRequest(lmd, {
143
+ orderNo: marketplaceOrder.orderNo,
144
+ clientId: lmd.clientId,
145
+ clientType: lmd.clientType,
146
+ clientName: lmd.clientName,
147
+ transporterId: marketplaceTransporter.pickupTransporter.transporterId,
148
+ pickupName: warehouseContactPoint.name,
149
+ pickupAddress1: warehouseContactPoint.address,
150
+ pickupAddress2: warehouseContactPoint.address2,
151
+ pickupPostcode: warehouseContactPoint.postCode,
152
+ pickupState: warehouseContactPoint.state,
153
+ pickupCity: warehouseContactPoint.city,
154
+ pickupPhone: warehouseContactPoint.phone,
155
+ pickupEmail: warehouseContactPoint.email,
156
+ name: marketplaceOrderShipping?.attentionTo ? marketplaceOrderShipping.attentionTo.trim() : '',
157
+ address1: marketplaceOrderShipping?.address1 ? marketplaceOrderShipping?.address1.trim() : '-',
158
+ address2: marketplaceOrderShipping?.address2 ? marketplaceOrderShipping?.address2.trim() : '-',
159
+ postCode: marketplaceOrderShipping?.postCode ? marketplaceOrderShipping?.postCode.trim() : '',
160
+ city: marketplaceOrderShipping?.city ? marketplaceOrderShipping?.city.trim() : '',
161
+ state: marketplaceOrderShipping?.state ? marketplaceOrderShipping?.state.trim() : '',
162
+ phone: marketplaceOrderShipping.phone1 || '',
163
+ email: marketplaceOrderShipping.email || '',
164
+ attentionTo: marketplaceOrderShipping.attentionTo,
165
+ quantity: marketplaceOrderItems.length
166
+ })
167
+
168
+ const delay = (ms: number) => {
169
+ return new Promise(resolve => setTimeout(resolve, ms))
170
+ }
171
+
172
+ if (resp.Status === 'SUCCESS') {
173
+ //Success
174
+ let awbObtained = false
175
+ let retry = 0
176
+ while (!awbObtained) {
177
+ const marketplaceOrder2: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
178
+ where: { releaseOrderId: releaseGood.id },
179
+ relations: [
180
+ 'marketplaceStore',
181
+ 'marketplaceOrderItems',
182
+ 'marketplaceOrderItems.marketplaceOrderShipping'
183
+ ]
184
+ })
185
+ const orderShipping = marketplaceOrder2.marketplaceOrderItems[0].marketplaceOrderShipping
186
+ if (orderShipping?.airwayBill) {
187
+ awbObtained = true
188
+ }
189
+ await delay(5000)
190
+ //Timeout after 15sec
191
+ if (++retry > 3) {
192
+ break
193
+ }
177
194
  }
195
+ } else {
196
+ throw resp
197
+ //Failed
178
198
  }
179
- } else {
180
- throw resp
181
- //Failed
182
199
  }
183
200
  }
184
201
  }
@@ -16,7 +16,7 @@ export async function completeUnloadingPartially(
16
16
  domain: Domain,
17
17
  user: User,
18
18
  arrivalNoticeNo: string,
19
- unloadingWorksheetDetail: Partial<WorksheetDetail>
19
+ unloadingWorksheetDetail: Partial<WorksheetDetail>[]
20
20
  ): Promise<void> {
21
21
  const worksheetController: UnloadingWorksheetController = new UnloadingWorksheetController(tx, domain, user)
22
22
  await worksheetController.completeUnloadingPartially(arrivalNoticeNo, unloadingWorksheetDetail)
@@ -1,4 +1,4 @@
1
- import { EntityManager } from 'typeorm'
1
+ import { EntityManager, In } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
4
  import { Bizplace } from '@things-factory/biz-base'
@@ -37,7 +37,7 @@ export const completeUnloadingResolver = {
37
37
  let putawayWorksheet: Worksheet
38
38
 
39
39
  const inventories: Inventory[] = await tx.getRepository(Inventory).find({
40
- where: { domain, refOrderId: arrivalNotice.id, status: INVENTORY_STATUS.UNLOADED }
40
+ where: { domain, refOrderId: arrivalNotice.id, status: In([INVENTORY_STATUS.UNLOADED, INVENTORY_STATUS.CHECKED]) }
41
41
  })
42
42
 
43
43
  // search for any active marketplace connection
package/server/routes.ts CHANGED
@@ -8,6 +8,7 @@ import { renderOrientageDO } from './controllers/render-orientage-do'
8
8
  import { renderOrientageGRN } from './controllers/render-orientage-grn'
9
9
  import { renderRODO } from './controllers/render-ro-do'
10
10
  import { renderSeebuuGRN } from './controllers/render-seebuu-grn'
11
+ import { renderInvoices } from './controllers/render-invoices'
11
12
 
12
13
  process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
13
14
  routes.get('/view_document_ro_do/:doNo', async (context, next) => {
@@ -49,4 +50,14 @@ process.on('bootstrap-module-domain-private-route' as any, (app, routes) => {
49
50
  routes.get('/view_manifest/:manifestNo', async (context, next) => {
50
51
  context.body = await renderManifest(context.params, context)
51
52
  })
53
+
54
+ routes.post('/view_invoices/:timezoneOffSet', async (context, next) => {
55
+ let req = context.request.body || {}
56
+ let timezoneOffSet = context.params.timezoneOffSet || 0
57
+
58
+ let data = await renderInvoices({ req, timezoneOffSet }, context)
59
+
60
+ context.type = 'application/json'
61
+ context.body = data
62
+ })
52
63
  })