@things-factory/sales-base 4.3.60 → 4.3.64

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 (49) hide show
  1. package/dist-server/constants/release-good.js +5 -1
  2. package/dist-server/constants/release-good.js.map +1 -1
  3. package/dist-server/service/delivery-order/delivery-order-mutation.js +6 -15
  4. package/dist-server/service/delivery-order/delivery-order-mutation.js.map +1 -1
  5. package/dist-server/service/delivery-order/delivery-order-query.js +3 -0
  6. package/dist-server/service/delivery-order/delivery-order-query.js.map +1 -1
  7. package/dist-server/service/draft-release-good/draft-release-good-mutation.js +26 -19
  8. package/dist-server/service/draft-release-good/draft-release-good-mutation.js.map +1 -1
  9. package/dist-server/service/manifest/manifest-mutation.js +7 -3
  10. package/dist-server/service/manifest/manifest-mutation.js.map +1 -1
  11. package/dist-server/service/order-inventory/order-inventory-query.js +54 -27
  12. package/dist-server/service/order-inventory/order-inventory-query.js.map +1 -1
  13. package/dist-server/service/order-inventory/order-inventory.js +8 -2
  14. package/dist-server/service/order-inventory/order-inventory.js.map +1 -1
  15. package/dist-server/service/order-product/order-product-query.js +35 -4
  16. package/dist-server/service/order-product/order-product-query.js.map +1 -1
  17. package/dist-server/service/order-tote/order-tote.js +2 -1
  18. package/dist-server/service/order-tote/order-tote.js.map +1 -1
  19. package/dist-server/service/release-good/release-good-mutation.js +102 -37
  20. package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
  21. package/dist-server/service/release-good/release-good-query.js +80 -7
  22. package/dist-server/service/release-good/release-good-query.js.map +1 -1
  23. package/dist-server/service/release-good/release-good-types.js +41 -20
  24. package/dist-server/service/release-good/release-good-types.js.map +1 -1
  25. package/dist-server/service/release-good/release-good.js +25 -6
  26. package/dist-server/service/release-good/release-good.js.map +1 -1
  27. package/dist-server/service/shipping-order/shipping-order-types.js +21 -1
  28. package/dist-server/service/shipping-order/shipping-order-types.js.map +1 -1
  29. package/dist-server/service/shipping-order/shipping-order.js +22 -2
  30. package/dist-server/service/shipping-order/shipping-order.js.map +1 -1
  31. package/dist-server/utils/inventory-util.js +69 -30
  32. package/dist-server/utils/inventory-util.js.map +1 -1
  33. package/package.json +6 -6
  34. package/server/constants/release-good.ts +6 -3
  35. package/server/service/delivery-order/delivery-order-mutation.ts +5 -11
  36. package/server/service/delivery-order/delivery-order-query.ts +19 -18
  37. package/server/service/draft-release-good/draft-release-good-mutation.ts +41 -22
  38. package/server/service/manifest/manifest-mutation.ts +10 -3
  39. package/server/service/order-inventory/order-inventory-query.ts +68 -36
  40. package/server/service/order-inventory/order-inventory.ts +8 -2
  41. package/server/service/order-product/order-product-query.ts +45 -8
  42. package/server/service/order-tote/order-tote.ts +13 -2
  43. package/server/service/release-good/release-good-mutation.ts +165 -50
  44. package/server/service/release-good/release-good-query.ts +126 -41
  45. package/server/service/release-good/release-good-types.ts +25 -6
  46. package/server/service/release-good/release-good.ts +24 -8
  47. package/server/service/shipping-order/shipping-order-types.ts +16 -1
  48. package/server/service/shipping-order/shipping-order.ts +18 -2
  49. package/server/utils/inventory-util.ts +107 -54
@@ -25,6 +25,7 @@ import { Inventory } from '@things-factory/warehouse-base'
25
25
  import {
26
26
  ATTACHMENT_TYPE,
27
27
  ORDER_INVENTORY_STATUS,
28
+ ORDER_METHOD,
28
29
  ORDER_NUMBER_RULE_TYPE,
29
30
  ORDER_NUMBER_SETTING_KEY,
30
31
  ORDER_PRODUCT_STATUS,
@@ -47,6 +48,7 @@ import { ShippingOrderPatch } from '../shipping-order/shipping-order-types'
47
48
  import { Vas } from '../vas/vas'
48
49
  import { ReleaseGood } from './release-good'
49
50
  import { bulkReleaseGoodsAvailableItemsFunction } from './release-good-query'
51
+ import { NewOrderProduct } from '../order-product/order-product-types'
50
52
 
51
53
  @Resolver(ReleaseGood)
52
54
  export class ReleaseGoodMutation {
@@ -134,7 +136,7 @@ export class ReleaseGoodMutation {
134
136
  context,
135
137
  tx
136
138
  )
137
- } catch (error) {}
139
+ } catch (error) { }
138
140
 
139
141
  if (errorsCaught.length)
140
142
  throw new ValidationError({
@@ -211,6 +213,12 @@ export class ReleaseGoodMutation {
211
213
  }
212
214
 
213
215
  // case to update existing shippingOrder
216
+ if (shippingOrder !== null) {
217
+ shippingOrder.remark = shippingOrder.exportRemark
218
+ shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate)
219
+ delete shippingOrder.exportRemark
220
+ }
221
+
214
222
  if (foundReleaseGood.shippingOrder && shippingOrder) {
215
223
  await tx.getRepository(ShippingOrder).update(foundReleaseGood.shippingOrder.id, shippingOrder)
216
224
  }
@@ -345,7 +353,7 @@ export async function deleteReleaseGood(tx: EntityManager, name: string, user: U
345
353
  ]
346
354
  })
347
355
 
348
- if (!foundReleaseOrder) throw new Error(`Arrival notice doesn't exists.`)
356
+ if (!foundReleaseOrder) throw new Error(`Release order doesn't exists.`)
349
357
  const foundOIs: OrderInventory[] = foundReleaseOrder.orderInventories
350
358
  const foundOVs: OrderVas[] = foundReleaseOrder.orderVass
351
359
  const foundSO: ShippingOrder = foundReleaseOrder.shippingOrder
@@ -417,7 +425,7 @@ export async function deleteReleaseGood(tx: EntityManager, name: string, user: U
417
425
  export async function generateReleaseGoodFunction(
418
426
  _: any,
419
427
  releaseGood: any,
420
- shippingOrder: any,
428
+ shippingOrder: ShippingOrderPatch,
421
429
  shippingOrderInfo: any,
422
430
  attachments: FileUpload[],
423
431
  context: any,
@@ -434,6 +442,7 @@ export async function generateReleaseGoodFunction(
434
442
 
435
443
  let bizplace: Bizplace
436
444
  let warehouseDomain: Domain = domain
445
+ let finalOrderInventories: OrderInventory[] = []
437
446
 
438
447
  /** Validate user permitted Bizplace */
439
448
  if (releaseGood.warehouseId) {
@@ -530,6 +539,12 @@ export async function generateReleaseGoodFunction(
530
539
 
531
540
  /** Generate Shipping Order */
532
541
  if (shippingOrder) {
542
+ shippingOrder.remark = shippingOrder.exportRemark
543
+ if (shippingOrder.containerClosureDate !== undefined) {
544
+ shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate)
545
+ }
546
+ delete shippingOrder.exportRemark
547
+
533
548
  const createdSO: ShippingOrder = await tx.getRepository(ShippingOrder).save({
534
549
  ...shippingOrder,
535
550
  name: OrderNoGenerator.shippingOrder(),
@@ -564,6 +579,7 @@ export async function generateReleaseGoodFunction(
564
579
  exportOption: releaseGood.exportOption,
565
580
  ownTransport: releaseGood.ownTransport,
566
581
  packingOption: releaseGood.packingOption,
582
+ recall: releaseGood.recall,
567
583
  marketplaceOrderStatus: releaseGood?.marketplaceOrderStatus || null,
568
584
  billingAddress:
569
585
  releaseGood.type == 'b2c' ? releaseGood?.billingAddress || null : shippingOrderInfo.billingAddress || null,
@@ -605,6 +621,11 @@ export async function generateReleaseGoodFunction(
605
621
  bundleInfo: releaseGood?.bundleInfo || [],
606
622
  orderInventories: releaseGood.orderInventories,
607
623
  type: releaseGood?.type ? releaseGood.type : 'b2b',
624
+ orderMethod: releaseGood?.orderMethod
625
+ ? releaseGood.orderMethod
626
+ : releaseGood.orderInventories[0]?.inventory?.id
627
+ ? ORDER_METHOD.SELECT_BY_PALLET
628
+ : ORDER_METHOD.SELECT_BY_PRODUCT,
608
629
  status: ORDER_STATUS.PENDING,
609
630
  packageId: releaseGood?.packageId,
610
631
  storeName: releaseGood?.storeName,
@@ -692,17 +713,6 @@ export async function generateReleaseGoodFunction(
692
713
  updater: user
693
714
  }
694
715
 
695
- if (newOrderInv.inventory?.id) {
696
- const foundInv: Inventory = await tx.getRepository(Inventory).findOne(newOrderInv.inventory.id)
697
- newOrderInv.inventory = foundInv
698
-
699
- foundInv.lockedQty = Number(foundInv.lockedQty) + newOrderInv.releaseQty
700
- foundInv.lockedUomValue = Number(foundInv.lockedUomValue) + newOrderInv.releaseUomValue
701
- foundInv.updater = user
702
-
703
- await tx.getRepository(Inventory).save(foundInv)
704
- }
705
-
706
716
  let newOrderProduct: OrderProduct = Object.assign(new OrderProduct(), newOrderInv)
707
717
  newOrderProduct = {
708
718
  ...newOrderProduct,
@@ -710,12 +720,74 @@ export async function generateReleaseGoodFunction(
710
720
  actualPackQty: 0,
711
721
  palletQty: 0,
712
722
  actualPalletQty: 0,
713
- status: newOrderInv.inventory?.id ? ORDER_PRODUCT_STATUS.ASSIGNED : ORDER_PRODUCT_STATUS.PENDING_ASSIGN
723
+ status: ORDER_PRODUCT_STATUS.ASSIGNED
714
724
  }
715
725
 
716
726
  newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)
717
727
 
718
- await tx.getRepository(OrderInventory).save({ ...newOrderInv, orderProduct: newOrderProduct })
728
+ if (newOrderInv.inventory?.id) {
729
+ const foundInv: Inventory = await tx.getRepository(Inventory).findOne(newOrderInv.inventory.id)
730
+ newOrderInv.inventory = foundInv
731
+ newOrderInv.orderProduct = newOrderProduct
732
+
733
+ finalOrderInventories.push(newOrderInv)
734
+ } else {
735
+ // Preassign Inventories
736
+ const inventoryAssignmentSetting: Setting = await tx.getRepository(Setting).findOne({
737
+ where: { domain, name: 'rule-for-inventory-assignment' }
738
+ })
739
+
740
+ let locationSortingRules = []
741
+ if (inventoryAssignmentSetting) {
742
+ let locationSetting = JSON.parse(inventoryAssignmentSetting.value)
743
+ for (const key in locationSetting) {
744
+ locationSortingRules.push({ name: key, desc: locationSetting[key] == 'ASC' ? false : true })
745
+ }
746
+ }
747
+
748
+ let assignedOrderInventories: OrderInventory[] = await InventoryUtil.autoAssignInventoryForRelease(
749
+ newOrderInv.product,
750
+ oi,
751
+ oi.packingType,
752
+ locationSortingRules,
753
+ bizplace,
754
+ warehouseDomain,
755
+ tx,
756
+ oi.batchId
757
+ )
758
+
759
+ assignedOrderInventories = assignedOrderInventories.map(aoi => {
760
+ return {
761
+ ...aoi,
762
+ orderProduct: newOrderProduct
763
+ }
764
+ })
765
+
766
+ finalOrderInventories.push(...assignedOrderInventories)
767
+ }
768
+ }
769
+
770
+ for (let oi of finalOrderInventories) {
771
+ let generatedOI: OrderInventory = Object.assign(new OrderInventory(), oi)
772
+ generatedOI = {
773
+ ...generatedOI,
774
+ domain: warehouseDomain,
775
+ bizplace,
776
+ status: ORDER_INVENTORY_STATUS.PENDING,
777
+ name: OrderNoGenerator.orderInventory(),
778
+ releaseGood: newReleaseGood,
779
+ creator: user,
780
+ updater: user
781
+ }
782
+
783
+ await tx.getRepository(OrderInventory).save({ ...generatedOI })
784
+
785
+ // update inventory locked qty and uom value
786
+ await tx.getRepository(Inventory).update(oi.inventory.id, {
787
+ lockedQty: (oi.inventory?.lockedQty || 0) + generatedOI.releaseQty,
788
+ lockedUomValue: (oi.inventory?.lockedUomValue || 0) + generatedOI.releaseUomValue,
789
+ updater: user
790
+ })
719
791
  }
720
792
 
721
793
  if (orderVass?.length) {
@@ -821,7 +893,10 @@ export async function confirmReleaseGood(name: string, context: any, tx?: Entity
821
893
  })
822
894
 
823
895
  if (foundReleaseGood.type == 'b2c') {
824
- if (!sellercraft) {
896
+ if (sellercraft) {
897
+ const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
898
+ foundReleaseGood = await sellercraftCtrl.packOrder(sellercraft, { ...foundReleaseGood, orderProducts: foundOPs })
899
+ } else {
825
900
  // find for any existing marketplace store connections
826
901
  let marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
827
902
  where: { domain: companyDomain, status: 'ACTIVE' },
@@ -1172,11 +1247,11 @@ export async function bulkGenerateReleaseGood(
1172
1247
  roNoSetting: any,
1173
1248
  domain: Domain,
1174
1249
  user: User,
1175
- tx?: EntityManager
1250
+ tx?: EntityManager,
1176
1251
  ): Promise<ReleaseGood> {
1177
1252
  try {
1178
1253
  let warehouseDomain: Domain = domain
1179
- let { orderInventories } = releaseGood
1254
+ let { orderInventories, shippingOrder } = releaseGood
1180
1255
 
1181
1256
  let bizplace: Bizplace = await tx.getRepository(Bizplace).findOne(bizplaceId)
1182
1257
 
@@ -1212,7 +1287,30 @@ export async function bulkGenerateReleaseGood(
1212
1287
  }
1213
1288
 
1214
1289
  newReleaseGood = await tx.getRepository(ReleaseGood).save(newReleaseGood)
1215
- let finalOrderInventories: OrderInventory[] = []
1290
+
1291
+
1292
+ /** Generate Shipping Order */
1293
+ if (shippingOrder) {
1294
+ shippingOrder.remark = shippingOrder.exportRemark
1295
+ if (shippingOrder.containerClosureDate !== undefined) {
1296
+ shippingOrder.containerClosureDateTime = new Date(shippingOrder.containerClosureDate)
1297
+ }
1298
+ delete shippingOrder.exportRemark
1299
+
1300
+ const createdSO: ShippingOrder = await tx.getRepository(ShippingOrder).save({
1301
+ ...shippingOrder,
1302
+ name: OrderNoGenerator.shippingOrder(),
1303
+ domain,
1304
+ bizplace,
1305
+ status: ORDER_STATUS.PENDING,
1306
+ creator: user,
1307
+ updater: user
1308
+ })
1309
+
1310
+ newReleaseGood.shippingOrder = createdSO
1311
+ }
1312
+
1313
+ let finalOrderInventories: Partial<OrderInventory>[] = []
1216
1314
 
1217
1315
  // pre assign inventory to orderInventories
1218
1316
  for (let oi of orderInventories) {
@@ -1230,16 +1328,23 @@ export async function bulkGenerateReleaseGood(
1230
1328
 
1231
1329
  const product: Product = await tx.getRepository(Product).findOne(oi.productId)
1232
1330
 
1331
+ let assignedResult = await InventoryUtil.autoAssignInventoryForRelease(
1332
+ product,
1333
+ oi,
1334
+ oi.packingType,
1335
+ locationSortingRules,
1336
+ bizplace,
1337
+ warehouseDomain,
1338
+ tx
1339
+ )
1340
+
1233
1341
  finalOrderInventories.push(
1234
- ...(await InventoryUtil.autoAssignInventoryForRelease(
1235
- product,
1236
- oi,
1237
- oi.packingType,
1238
- locationSortingRules,
1239
- bizplace,
1240
- warehouseDomain,
1241
- tx
1242
- ))
1342
+ ...assignedResult.map(itm => {
1343
+ return {
1344
+ ...itm,
1345
+ orderProduct: oi?.orderProduct
1346
+ }
1347
+ })
1243
1348
  )
1244
1349
  }
1245
1350
 
@@ -1256,28 +1361,38 @@ export async function bulkGenerateReleaseGood(
1256
1361
  updater: user
1257
1362
  }
1258
1363
 
1259
- let newOrderProduct: Partial<OrderProduct> = {
1260
- name: generatedOI.name,
1261
- product: generatedOI.product,
1262
- batchId: generatedOI.batchId,
1263
- packingType: generatedOI.packingType,
1264
- packingSize: generatedOI.packingSize,
1265
- uom: generatedOI.uom,
1266
- domain: warehouseDomain,
1267
- bizplace,
1268
- releaseQty: generatedOI.releaseQty,
1269
- releaseUomValue: generatedOI.releaseUomValue,
1270
- packQty: 0,
1271
- actualPackQty: 0,
1272
- palletQty: 0,
1273
- actualPalletQty: 0,
1274
- status: ORDER_PRODUCT_STATUS.PENDING_ASSIGN,
1275
- releaseGood: newReleaseGood,
1276
- creator: user,
1277
- updater: user
1278
- }
1364
+ let newOrderProduct: Partial<OrderProduct>
1365
+ if (!oi?.orderProduct) {
1366
+ newOrderProduct = {
1367
+ name: generatedOI.name,
1368
+ product: generatedOI.product,
1369
+ batchId: generatedOI.batchId,
1370
+ packingType: generatedOI.packingType,
1371
+ packingSize: generatedOI.packingSize,
1372
+ uom: generatedOI.uom,
1373
+ domain: warehouseDomain,
1374
+ bizplace,
1375
+ releaseQty: generatedOI.releaseQty,
1376
+ releaseUomValue: generatedOI.releaseUomValue,
1377
+ packQty: 0,
1378
+ actualPackQty: 0,
1379
+ palletQty: 0,
1380
+ actualPalletQty: 0,
1381
+ status: ORDER_PRODUCT_STATUS.ASSIGNED,
1382
+ releaseGood: newReleaseGood,
1383
+ creator: user,
1384
+ updater: user
1385
+ }
1279
1386
 
1280
- newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)
1387
+ newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)
1388
+ } else {
1389
+ newOrderProduct = await tx.getRepository(OrderProduct).save({
1390
+ ...oi.orderProduct,
1391
+ totalUomValue: `${oi.orderProduct.releaseUomValue} ${oi.orderProduct.uom}`,
1392
+ status: ORDER_PRODUCT_STATUS.ASSIGNED,
1393
+ updater: user
1394
+ })
1395
+ }
1281
1396
 
1282
1397
  await tx.getRepository(OrderInventory).save({ ...generatedOI, orderProduct: newOrderProduct })
1283
1398
 
@@ -179,6 +179,8 @@ export class ReleaseGoodQuery {
179
179
  'bizplace',
180
180
  'shippingOrder',
181
181
  'arrivalNotice',
182
+ 'orderProducts',
183
+ 'orderProducts.product',
182
184
  'orderInventories',
183
185
  'orderInventories.inventory',
184
186
  'orderInventories.product',
@@ -236,10 +238,20 @@ export class ReleaseGoodQuery {
236
238
  invStatus: inventory.status,
237
239
  releaseQty: orderInv.releaseQty,
238
240
  releaseUomValue: orderInv.releaseUomValue,
239
- status: orderInv.status
241
+ status: orderInv.status,
242
+ refWorksheetId: orderInv.refWorksheetId
240
243
  }
241
244
  } else {
242
- const { batchId, batchIdRef, product, packingType, packingSize, releaseQty, releaseUomValue } = orderInv
245
+ const {
246
+ batchId,
247
+ batchIdRef,
248
+ product,
249
+ packingType,
250
+ packingSize,
251
+ releaseQty,
252
+ releaseUomValue,
253
+ refWorksheetId
254
+ } = orderInv
243
255
  const { id: productIdRef, name: productName }: Product = product
244
256
  const { qty, uomValue, uom } = await getAvailableAmount(roBizId, productIdRef, batchId, packingType, tx)
245
257
 
@@ -255,7 +267,8 @@ export class ReleaseGoodQuery {
255
267
  uom,
256
268
  uomValue,
257
269
  releaseQty,
258
- releaseUomValue
270
+ releaseUomValue,
271
+ refWorksheetId
259
272
  }
260
273
  }
261
274
  })
@@ -266,9 +279,13 @@ export class ReleaseGoodQuery {
266
279
  attachment: foundAttachments,
267
280
  shippingOrderInfo: {
268
281
  containerNo: shippingOrder?.containerNo || '',
282
+ containerSize: shippingOrder?.containerSize || '',
269
283
  containerLeavingDate: shippingOrder?.containerLeavingDate || '',
270
284
  containerArrivalDate: shippingOrder?.containerArrivalDate || '',
271
- shipName: shippingOrder?.shipName || ''
285
+ containerClosureDate: shippingOrder?.containerClosureDate || '',
286
+ shipName: shippingOrder?.shipName || '',
287
+ remark: shippingOrder?.remark || '',
288
+ remindContainerDeparture: shippingOrder?.remindContainerDeparture || null
272
289
  },
273
290
  inventoryInfos: orderBy<InventoryInfos>(invInfos, ['product.sku'], ['asc'])
274
291
  }
@@ -291,6 +308,8 @@ export class ReleaseGoodQuery {
291
308
  const skuFilter = params.filters.find(param => param.name === 'sku')
292
309
  const routeId = params.filters.find(param => param.name === 'routeId')
293
310
  const orderRemarkFilter = params.filters.find(param => param.name === 'orderRemark')
311
+ const manifestedFilter = params.filters.find(param => param.name === 'manifested')
312
+ const orderInfoFilter = params.filters.find(param => param.name === 'name')
294
313
 
295
314
  if (await checkUserBelongsDomain(domain, user)) {
296
315
  if (!statusFilter && !params.filters.some(e => e.name === 'name')) {
@@ -316,6 +335,10 @@ export class ReleaseGoodQuery {
316
335
  params.filters = params.filters.filter(param => param.name !== 'sku')
317
336
  }
318
337
 
338
+ if (orderInfoFilter) {
339
+ params.filters = params.filters.filter(param => param.name !== 'name')
340
+ }
341
+
319
342
  if (routeId) {
320
343
  if (routeId.value == true) {
321
344
  params.filters.find(param => param.name === 'routeId').value = 'null'
@@ -346,6 +369,27 @@ export class ReleaseGoodQuery {
346
369
  }
347
370
  }
348
371
 
372
+ if (manifestedFilter) {
373
+ const manifestedIdx = params.filters.findIndex(param => param.name === 'manifested')
374
+ if (manifestedFilter.value == true) {
375
+ params.filters.splice(manifestedIdx, 1)
376
+ params.filters.push({
377
+ name: 'manifestId',
378
+ operator: 'is_not_null',
379
+ value: null,
380
+ relation: false
381
+ })
382
+ } else {
383
+ params.filters.splice(manifestedIdx, 1)
384
+ params.filters.push({
385
+ name: 'manifestId',
386
+ operator: 'is_null',
387
+ value: null,
388
+ relation: false
389
+ })
390
+ }
391
+ }
392
+
349
393
  const fromDateParamIdx = params.filters.findIndex(param => param.name === 'fromDate')
350
394
  if (fromDateParamIdx >= 0) {
351
395
  let fromDateVal = new Date(params.filters[fromDateParamIdx].value)
@@ -401,18 +445,56 @@ export class ReleaseGoodQuery {
401
445
  )
402
446
 
403
447
  if (skuFilter) {
448
+ let removeSymbol = skuFilter.value
449
+ .split('')
450
+ .filter(res => res !== '%')
451
+ .join('')
452
+
453
+ let products = removeSymbol
454
+ .toLowerCase()
455
+ .split(',')
456
+ .map(prod => {
457
+ return "'%" + prod.trim().replace(/'/g, "''") + "%'"
458
+ })
459
+ .join(',')
460
+
404
461
  qb.andWhere(
405
462
  `
406
463
  exists (select * from order_inventories oi
407
464
  inner join products p on oi.product_id = p.id
408
465
  inner join inventories i on i.product_id = p.id
409
466
  where oi.release_good_id = rg.id
410
- and lower(p.sku) like :sku)
411
- `,
412
- { sku: skuFilter.value.toLowerCase() }
467
+ and (lower(p.sku) like any(array[${products}])
468
+ or lower(p.brand_sku) like any(array[${products}])
469
+ or lower(p.name) like any(array[${products}])
470
+ or lower(p.description) like any(array[${products}]))
471
+ )
472
+ `
413
473
  )
414
474
  }
415
475
 
476
+ if (orderInfoFilter) {
477
+ let removeSymbol = orderInfoFilter.value
478
+ .split('')
479
+ .filter(res => res !== '%')
480
+ .join('')
481
+
482
+ let orderInfos = removeSymbol
483
+ .toLowerCase()
484
+ .split(',')
485
+ .map(prod => {
486
+ return "'%" + prod.trim().replace(/'/g, "''") + "%'"
487
+ })
488
+ .join(',')
489
+
490
+ qb.andWhere(`(
491
+ lower(rg.name) like any(array[${orderInfos}])
492
+ or lower(rg.ref_no) like any(array[${orderInfos}])
493
+ or lower(rg.ref_no_2) like any(array[${orderInfos}])
494
+ or lower(rg.ref_no_3) like any(array[${orderInfos}])
495
+ )`)
496
+ }
497
+
416
498
  const arrChildSortData = ['bizplace', 'creator']
417
499
  const sort = (params.sortings || []).reduce(
418
500
  (acc, sort) => ({
@@ -428,12 +510,18 @@ export class ReleaseGoodQuery {
428
510
 
429
511
  let [items, total] = await qb.getManyAndCount()
430
512
 
431
- items = items.map(item => {
432
- return {
433
- ...item,
434
- orderRemark: item?.remark ? true : false
435
- }
436
- })
513
+ items = items
514
+ .filter(item => {
515
+ return item.domainId === domain.id
516
+ })
517
+ .map(item => {
518
+ return {
519
+ ...item,
520
+ orderRemark: item?.remark ? true : false
521
+ }
522
+ })
523
+
524
+ total = items.length
437
525
 
438
526
  return { items, total }
439
527
  } catch (error) {
@@ -493,27 +581,24 @@ export class ReleaseGoodQuery {
493
581
  ${batchId ? `AND LOWER(${INV_ALIAS}.batch_id) LIKE '%${batchId.toLowerCase()}%'` : ''}
494
582
  ${packingType ? `AND LOWER(${INV_ALIAS}.packing_type) LIKE '%${packingType.toLowerCase()}%'` : ''}
495
583
  ${containerNo ? `AND LOWER(${GAN_ALIAS}.container_no) LIKE '%${containerNo.toLowerCase()}%'` : ''}
496
- ${
497
- product?.length > 0 && product[0]
498
- ? `AND ${PROD_ALIAS}.id IN (${product.map((id: string) => `'${id}'`).join(', ')})`
499
- : product[0] === null
500
- ? `AND ${PROD_ALIAS}.id isnull`
501
- : ''
502
- }
503
- ${
504
- inventory?.length > 0
505
- ? `
506
- AND (${INV_ALIAS}.batch_id, ${PROD_ALIAS}.id) ${
507
- filters.find((filter: { name: string; operator: string; value: any }) => filter.name === 'inventory')
508
- .operator
509
- } (
584
+ ${product?.length > 0 && product[0]
585
+ ? `AND ${PROD_ALIAS}.id IN (${product.map((id: string) => `'${id}'`).join(', ')})`
586
+ : product[0] === null
587
+ ? `AND ${PROD_ALIAS}.id isnull`
588
+ : ''
589
+ }
590
+ ${inventory?.length > 0
591
+ ? `
592
+ AND (${INV_ALIAS}.batch_id, ${PROD_ALIAS}.id) ${filters.find((filter: { name: string; operator: string; value: any }) => filter.name === 'inventory')
593
+ .operator
594
+ } (
510
595
  ${inventory
511
- .map((inv: { batchId: string; productId: string }) => `('${inv.batchId}', '${inv.productId}')`)
512
- .join(', ')}
596
+ .map((inv: { batchId: string; productId: string }) => `('${inv.batchId}', '${inv.productId}')`)
597
+ .join(', ')}
513
598
  )
514
599
  `
515
- : ''
516
- }
600
+ : ''
601
+ }
517
602
  `
518
603
 
519
604
  // ${product?.length > 0 ? `AND ${PROD_ALIAS}.id IN (${product.map((id: string) => id ? `'${id}'` : null).join(', ')})` : ''}
@@ -868,16 +953,16 @@ function _extractData(rawData, validatedData) {
868
953
  !raw.productId || !raw.productDetailId
869
954
  ? 'inventory or product not found'
870
955
  : raw.releaseQty <= 0
871
- ? 'invalid release qty'
872
- : raw.assignedQty < raw.releaseQty
873
- ? 'insufficient stock'
874
- : raw.releaseDate == ''
875
- ? 'release date is empty'
876
- : releaseDate < _getStdDateStr(new Date())
877
- ? 'backdate is not allowed'
878
- : !raw.refNo
879
- ? 'ref no is empty'
880
- : ''
956
+ ? 'invalid release qty'
957
+ : raw.assignedQty < raw.releaseQty
958
+ ? 'insufficient stock'
959
+ : raw.releaseDate == ''
960
+ ? 'release date is empty'
961
+ : releaseDate < _getStdDateStr(new Date())
962
+ ? 'backdate is not allowed'
963
+ : !raw.refNo
964
+ ? 'ref no is empty'
965
+ : ''
881
966
  }
882
967
  })
883
968
  }
@@ -127,6 +127,9 @@ export class InventoryInfos {
127
127
 
128
128
  @Field({ nullable: true })
129
129
  lockedUomValue?: number
130
+
131
+ @Field({ nullable: true })
132
+ refWorksheetId?: string
130
133
  }
131
134
 
132
135
  @ObjectType()
@@ -137,12 +140,18 @@ export class ShippingOrderInfo {
137
140
  @Field({ nullable: true })
138
141
  containerNo?: string
139
142
 
143
+ @Field({ nullable: true })
144
+ containerSize?: string
145
+
140
146
  @Field({ nullable: true })
141
147
  containerLeavingDate?: string
142
148
 
143
149
  @Field({ nullable: true })
144
150
  containerArrivalDate?: string
145
151
 
152
+ @Field({ nullable: true })
153
+ containerClosureDate?: string
154
+
146
155
  @Field({ nullable: true })
147
156
  containerLeavingDateTime?: string
148
157
 
@@ -151,6 +160,12 @@ export class ShippingOrderInfo {
151
160
 
152
161
  @Field({ nullable: true })
153
162
  shipName?: string
163
+
164
+ @Field({ nullable: true })
165
+ remark?: string
166
+
167
+ @Field({ nullable: true })
168
+ remindContainerDeparture: boolean
154
169
  }
155
170
 
156
171
  @InputType()
@@ -168,7 +183,9 @@ export class NewReleaseGood {
168
183
  type: string
169
184
 
170
185
  @Field({ nullable: true })
171
- releaseDateTime: string
186
+ orderMethod: string
187
+
188
+
172
189
 
173
190
  @Field({ nullable: true })
174
191
  collectionOrderNo: string
@@ -371,6 +388,9 @@ export class NewReleaseGood {
371
388
 
372
389
  @Field({ nullable: true })
373
390
  billingState: string
391
+
392
+ @Field({ nullable: true })
393
+ recall: boolean
374
394
  }
375
395
 
376
396
  @InputType()
@@ -384,9 +404,6 @@ export class ReleaseGoodPatch {
384
404
  @Field({ nullable: true })
385
405
  releaseDate: string
386
406
 
387
- @Field({ nullable: true })
388
- releaseDateTime: string
389
-
390
407
  @Field({ nullable: true })
391
408
  collectionOrderNo: string
392
409
 
@@ -399,6 +416,9 @@ export class ReleaseGoodPatch {
399
416
  @Field({ nullable: true })
400
417
  type: string
401
418
 
419
+ @Field({ nullable: true })
420
+ orderMethod: string
421
+
402
422
  @Field({ nullable: true })
403
423
  truckNo: string
404
424
 
@@ -542,8 +562,7 @@ export class ReleaseGoodPatch {
542
562
  }
543
563
 
544
564
  @InputType()
545
- //** Comment: @Oscar, this class name title is not conform to the naming convention set, kindly change. */
546
- export class exportInformationPatch {
565
+ export class ExportInformationPatch {
547
566
  @Field({ nullable: true })
548
567
  id?: string
549
568