@things-factory/sales-base 4.0.38 → 4.0.42

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 (97) hide show
  1. package/dist-server/controllers/ecommerce/sellercraft-controller.js +4 -3
  2. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  3. package/dist-server/service/arrival-notice/arrival-notice-mutation.js +42 -35
  4. package/dist-server/service/arrival-notice/arrival-notice-mutation.js.map +1 -1
  5. package/dist-server/service/arrival-notice/arrival-notice-query.js +91 -79
  6. package/dist-server/service/arrival-notice/arrival-notice-query.js.map +1 -1
  7. package/dist-server/service/arrival-notice/arrival-notice-types.js +8 -0
  8. package/dist-server/service/arrival-notice/arrival-notice-types.js.map +1 -1
  9. package/dist-server/service/arrival-notice/arrival-notice.js +20 -15
  10. package/dist-server/service/arrival-notice/arrival-notice.js.map +1 -1
  11. package/dist-server/service/delivery-order/delivery-order-mutation.js +28 -26
  12. package/dist-server/service/delivery-order/delivery-order-mutation.js.map +1 -1
  13. package/dist-server/service/delivery-order/delivery-order-query.js +14 -14
  14. package/dist-server/service/delivery-order/delivery-order-query.js.map +1 -1
  15. package/dist-server/service/delivery-order/delivery-order-summary-report.js +145 -0
  16. package/dist-server/service/delivery-order/delivery-order-summary-report.js.map +1 -0
  17. package/dist-server/service/delivery-order/delivery-order.js +16 -13
  18. package/dist-server/service/delivery-order/delivery-order.js.map +1 -1
  19. package/dist-server/service/delivery-order/index.js +3 -1
  20. package/dist-server/service/delivery-order/index.js.map +1 -1
  21. package/dist-server/service/index.js +12 -4
  22. package/dist-server/service/index.js.map +1 -1
  23. package/dist-server/service/invoice/invoice-mutation.js +21 -3
  24. package/dist-server/service/invoice/invoice-mutation.js.map +1 -1
  25. package/dist-server/service/invoice/invoice-query.js +5 -7
  26. package/dist-server/service/invoice/invoice-query.js.map +1 -1
  27. package/dist-server/service/invoice/invoice-types.js +302 -20
  28. package/dist-server/service/invoice/invoice-types.js.map +1 -1
  29. package/dist-server/service/invoice/invoice.js +190 -26
  30. package/dist-server/service/invoice/invoice.js.map +1 -1
  31. package/dist-server/service/invoice-product/index.js +21 -0
  32. package/dist-server/service/invoice-product/index.js.map +1 -0
  33. package/dist-server/service/invoice-product/invoice-product-mutation.js +70 -0
  34. package/dist-server/service/invoice-product/invoice-product-mutation.js.map +1 -0
  35. package/dist-server/service/invoice-product/invoice-product-query.js +95 -0
  36. package/dist-server/service/invoice-product/invoice-product-query.js.map +1 -0
  37. package/dist-server/service/invoice-product/invoice-product-types.js +125 -0
  38. package/dist-server/service/invoice-product/invoice-product-types.js.map +1 -0
  39. package/dist-server/service/invoice-product/invoice-product.js +117 -0
  40. package/dist-server/service/invoice-product/invoice-product.js.map +1 -0
  41. package/dist-server/service/order-inventory/order-inventory-query.js +9 -7
  42. package/dist-server/service/order-inventory/order-inventory-query.js.map +1 -1
  43. package/dist-server/service/order-inventory/order-inventory.js +31 -25
  44. package/dist-server/service/order-inventory/order-inventory.js.map +1 -1
  45. package/dist-server/service/order-product/order-product.js +26 -21
  46. package/dist-server/service/order-product/order-product.js.map +1 -1
  47. package/dist-server/service/order-vas/order-vas.js +34 -27
  48. package/dist-server/service/order-vas/order-vas.js.map +1 -1
  49. package/dist-server/service/others/other-query.js +4 -2
  50. package/dist-server/service/others/other-query.js.map +1 -1
  51. package/dist-server/service/others/other-types.js +42 -0
  52. package/dist-server/service/others/other-types.js.map +1 -1
  53. package/dist-server/service/purchase-order/purchase-order-mutation.js +23 -36
  54. package/dist-server/service/purchase-order/purchase-order-mutation.js.map +1 -1
  55. package/dist-server/service/release-good/release-good-mutation.js +84 -82
  56. package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
  57. package/dist-server/service/release-good/release-good-query.js +7 -9
  58. package/dist-server/service/release-good/release-good-query.js.map +1 -1
  59. package/dist-server/service/release-good/release-good.js +2 -0
  60. package/dist-server/service/release-good/release-good.js.map +1 -1
  61. package/dist-server/service/return-order/return-order-mutation.js +3 -3
  62. package/dist-server/service/return-order/return-order-mutation.js.map +1 -1
  63. package/dist-server/utils/order-no-generator.js +7 -0
  64. package/dist-server/utils/order-no-generator.js.map +1 -1
  65. package/package.json +12 -12
  66. package/server/controllers/ecommerce/sellercraft-controller.ts +2 -1
  67. package/server/service/arrival-notice/arrival-notice-mutation.ts +11 -15
  68. package/server/service/arrival-notice/arrival-notice-query.ts +94 -78
  69. package/server/service/arrival-notice/arrival-notice-types.ts +6 -0
  70. package/server/service/arrival-notice/arrival-notice.ts +6 -1
  71. package/server/service/delivery-order/delivery-order-mutation.ts +4 -8
  72. package/server/service/delivery-order/delivery-order-query.ts +4 -4
  73. package/server/service/delivery-order/delivery-order-summary-report.ts +152 -0
  74. package/server/service/delivery-order/delivery-order.ts +4 -1
  75. package/server/service/delivery-order/index.ts +3 -1
  76. package/server/service/index.ts +20 -12
  77. package/server/service/invoice/invoice-mutation.ts +45 -7
  78. package/server/service/invoice/invoice-query.ts +6 -6
  79. package/server/service/invoice/invoice-types.ts +231 -18
  80. package/server/service/invoice/invoice.ts +154 -20
  81. package/server/service/invoice-product/index.ts +9 -0
  82. package/server/service/invoice-product/invoice-product-mutation.ts +54 -0
  83. package/server/service/invoice-product/invoice-product-query.ts +55 -0
  84. package/server/service/invoice-product/invoice-product-types.ts +80 -0
  85. package/server/service/invoice-product/invoice-product.ts +93 -0
  86. package/server/service/order-inventory/order-inventory-query.ts +3 -1
  87. package/server/service/order-inventory/order-inventory.ts +11 -13
  88. package/server/service/order-product/order-product.ts +13 -13
  89. package/server/service/order-vas/order-vas.ts +15 -15
  90. package/server/service/others/other-query.ts +9 -15
  91. package/server/service/others/other-types.ts +31 -0
  92. package/server/service/purchase-order/purchase-order-mutation.ts +19 -21
  93. package/server/service/release-good/release-good-mutation.ts +64 -58
  94. package/server/service/release-good/release-good-query.ts +5 -12
  95. package/server/service/release-good/release-good.ts +2 -0
  96. package/server/service/return-order/return-order-mutation.ts +5 -4
  97. package/server/utils/order-no-generator.ts +11 -0
@@ -21,17 +21,6 @@ import { PartnerSetting, Setting } from '@things-factory/setting-base'
21
21
  import { Domain } from '@things-factory/shell'
22
22
  import { Inventory } from '@things-factory/warehouse-base'
23
23
 
24
- import {
25
- ArrivalNotice,
26
- NewReleaseGood,
27
- OrderInventory,
28
- OrderProduct,
29
- OrderVas,
30
- ReleaseGoodPatch,
31
- ShippingOrder,
32
- ShippingOrderPatch,
33
- Vas
34
- } from '../'
35
24
  import {
36
25
  ATTACHMENT_TYPE,
37
26
  ORDER_INVENTORY_STATUS,
@@ -46,7 +35,15 @@ import {
46
35
  import { EcommerceController, SellercraftController } from '../../controllers'
47
36
  import { ValidationError } from '../../errors'
48
37
  import { InventoryUtil, OrderNoGenerator } from '../../utils'
38
+ import { ArrivalNotice } from '../arrival-notice/arrival-notice'
49
39
  import { confirmArrivalNoticeFunction, deleteArrivalNotice } from '../arrival-notice/arrival-notice-mutation'
40
+ import { OrderInventory } from '../order-inventory/order-inventory'
41
+ import { OrderProduct } from '../order-product/order-product'
42
+ import { OrderVas } from '../order-vas/order-vas'
43
+ import { NewReleaseGood, ReleaseGoodPatch } from '../release-good/release-good-types'
44
+ import { ShippingOrder } from '../shipping-order/shipping-order'
45
+ import { ShippingOrderPatch } from '../shipping-order/shipping-order-types'
46
+ import { Vas } from '../vas/vas'
50
47
  import { ReleaseGood } from './release-good'
51
48
  import { bulkReleaseGoodsAvailableItemsFunction } from './release-good-query'
52
49
 
@@ -76,7 +73,7 @@ export class ReleaseGoodMutation {
76
73
 
77
74
  let releaseGoods: Partial<ReleaseGood[]> = extractRawReleaseGoods(rawReleaseGoods)
78
75
 
79
- let errorsFound: any[] = []
76
+ let errorsCaught: any[] = []
80
77
  for (let i = 0, l = releaseGoods.length; i < l; i++) {
81
78
  // generate release good by group to avoid duplication
82
79
  // if this function is called simultaneously by different users
@@ -90,7 +87,7 @@ export class ReleaseGoodMutation {
90
87
  domain
91
88
  }
92
89
  })
93
- if (existingReleaseGood) throw new Error('release good order is already exist in the system')
90
+ if (existingReleaseGood) throw new Error('this order is already exist in the system')
94
91
 
95
92
  let availableItems: any[] = await bulkReleaseGoodsAvailableItemsFunction(
96
93
  [...releaseGoods[i].orderInventories],
@@ -119,25 +116,30 @@ export class ReleaseGoodMutation {
119
116
 
120
117
  createdReleaseGoods.push(createdReleaseGood)
121
118
  })
122
- } catch (e) {
123
- errorsFound.push(e)
119
+ } catch (error) {
120
+ let rawReleaseGoods = formRawReleaseGoods(releaseGoods[i], error.message)
121
+ errorsCaught.push(...rawReleaseGoods)
124
122
  }
125
123
  }
126
124
 
127
125
  let confirmedReleaseGoods: ReleaseGood[] = []
128
- try {
129
- confirmedReleaseGoods = await bulkConfirmReleaseGoods(
130
- createdReleaseGoods.map(rg => rg.name),
131
- domain,
132
- user,
133
- context,
134
- tx
135
- )
136
- } catch (e) {
137
- errorsFound.push(e)
138
- }
139
126
 
140
- // if (errorsFound.length) { then ?? }
127
+ if (createdReleaseGoods.length)
128
+ try {
129
+ confirmedReleaseGoods = await bulkConfirmReleaseGoods(
130
+ createdReleaseGoods.map(rg => rg.name),
131
+ domain,
132
+ user,
133
+ context,
134
+ tx
135
+ )
136
+ } catch (error) {}
137
+
138
+ if (errorsCaught.length)
139
+ throw new ValidationError({
140
+ ...ValidationError.ERROR_CODES.INVALID_DATA_FOUND,
141
+ detail: { data: JSON.stringify(errorsCaught) }
142
+ })
141
143
 
142
144
  return confirmedReleaseGoods
143
145
  }
@@ -815,11 +817,9 @@ export async function confirmReleaseGood(name: string, context: any, tx?: Entity
815
817
  if (foundMarketplaceProductVariations) {
816
818
  await Promise.all(
817
819
  foundMarketplaceProductVariations.map(async variation => {
818
- if (variation.marketplaceProduct.marketplaceStore.id != matchedMarketplaceStore.id) {
819
- variation.reserveQty -= oi.releaseQty
820
+ variation.reserveQty -= oi.releaseQty
820
821
 
821
- await tx.getRepository(MarketplaceProductVariation).save(variation)
822
- }
822
+ await tx.getRepository(MarketplaceProductVariation).save(variation)
823
823
  })
824
824
  )
825
825
  }
@@ -1252,29 +1252,15 @@ export async function bulkConfirmReleaseGoods(
1252
1252
  ): Promise<ReleaseGood[]> {
1253
1253
  let foundReleaseGoods: ReleaseGood[] = await tx.getRepository(ReleaseGood).find({
1254
1254
  where: { name: In(releaseGoodsNo), status: ORDER_STATUS.PENDING },
1255
- relations: [
1256
- 'domain',
1257
- 'bizplace',
1258
- 'bizplace.domain',
1259
- 'bizplace.company',
1260
- 'bizplace.company.domain',
1261
- 'orderProducts',
1262
- 'orderProducts.product',
1263
- 'orderInventories',
1264
- 'orderInventories.product',
1265
- 'orderVass'
1266
- ]
1255
+ relations: ['bizplace']
1267
1256
  })
1268
1257
 
1269
1258
  if (!foundReleaseGoods.length) throw new Error(`release good order doesn't exists.`)
1270
1259
  let customerBizplace: Bizplace = foundReleaseGoods[0].bizplace
1271
1260
 
1272
- let foundOrderInventories: OrderInventory[] = foundReleaseGoods
1273
- .map((releaseGood: ReleaseGood) => releaseGood.orderInventories)
1274
- .reduce((orderInventories, currOIs) => {
1275
- orderInventories.push(...currOIs)
1276
- return orderInventories
1277
- }, [])
1261
+ let foundOrderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({
1262
+ where: { domain, releaseGood: In(foundReleaseGoods.map((rg: ReleaseGood) => rg.id)) }
1263
+ })
1278
1264
 
1279
1265
  await tx
1280
1266
  .getRepository(ReleaseGood)
@@ -1307,7 +1293,7 @@ export async function bulkConfirmReleaseGoods(
1307
1293
  // send notification to Office Admin Users
1308
1294
  if (users?.length) {
1309
1295
  const receivers: any[] = users.map(user => user.id)
1310
- const msg = {
1296
+ const message = {
1311
1297
  title: `New Release Order from ${customerBizplace.name}`,
1312
1298
  body: `New incoming bulk release orders are pending for receiving`,
1313
1299
  url: context.header.referer,
@@ -1315,18 +1301,21 @@ export async function bulkConfirmReleaseGoods(
1315
1301
  }
1316
1302
  await sendNotification({
1317
1303
  receivers,
1318
- message: { ...msg }
1304
+ message
1319
1305
  })
1320
1306
  }
1321
1307
  }
1322
1308
 
1323
- return foundReleaseGoods.map((releaseGood: ReleaseGood) => {
1324
- return {
1325
- ...releaseGood,
1326
- status: ORDER_STATUS.PENDING_RECEIVE,
1327
- updater: user
1328
- }
1329
- })
1309
+ return Promise.all(
1310
+ foundReleaseGoods.map(async (releaseGood: ReleaseGood) => {
1311
+ return {
1312
+ ...releaseGood,
1313
+ orderInventories: await tx.getRepository(OrderInventory).find({ where: releaseGood }),
1314
+ status: ORDER_STATUS.PENDING_RECEIVE,
1315
+ updater: user
1316
+ }
1317
+ })
1318
+ )
1330
1319
  }
1331
1320
 
1332
1321
  function extractRawReleaseGoods(rawReleaseGoods): Partial<ReleaseGood[]> {
@@ -1413,3 +1402,20 @@ function extractRawReleaseGoods(rawReleaseGoods): Partial<ReleaseGood[]> {
1413
1402
  return releaseGoods
1414
1403
  }, [])
1415
1404
  }
1405
+
1406
+ function formRawReleaseGoods(releaseGood, errorMsg) {
1407
+ let rawReleaseGoods = []
1408
+ for (let i = 0, l = releaseGood.orderInventories.length; i < l; i++) {
1409
+ let rawReleaseGood = {
1410
+ ...releaseGood,
1411
+ ...releaseGood.orderInventories[i],
1412
+ errorMsg
1413
+ }
1414
+
1415
+ delete rawReleaseGood.orderInventories
1416
+ delete rawReleaseGood.product
1417
+
1418
+ rawReleaseGoods.push(rawReleaseGood)
1419
+ }
1420
+ return rawReleaseGoods
1421
+ }
@@ -9,16 +9,11 @@ import { Product } from '@things-factory/product-base'
9
9
  import { buildQuery, Domain, Filter, ListParam, Pagination, Sorting } from '@things-factory/shell'
10
10
  import { Inventory, LOCATION_TYPE } from '@things-factory/warehouse-base'
11
11
 
12
- import {
13
- InventoryInfos,
14
- NewReleaseGood,
15
- OrderInventory,
16
- ReleasableInventoryList,
17
- ReleaseGoodList,
18
- ShippingOrder
19
- } from '../'
20
12
  import { ATTACHMENT_TYPE, ORDER_INVENTORY_STATUS, ORDER_STATUS } from '../../constants'
13
+ import { OrderInventory } from '../order-inventory/order-inventory'
14
+ import { ShippingOrder } from '../shipping-order/shipping-order'
21
15
  import { ReleaseGood } from './release-good'
16
+ import { InventoryInfos, NewReleaseGood, ReleasableInventoryList, ReleaseGoodList } from './release-good-types'
22
17
 
23
18
  @Resolver(ReleaseGood)
24
19
  export class ReleaseGoodQuery {
@@ -648,7 +643,7 @@ export async function bulkReleaseGoodsAvailableItemsFunction(
648
643
  let availableItems = await tx.query(
649
644
  `
650
645
  WITH inv AS (
651
- SELECT i.product_id, foo.product_detail_id, foo.sku, foo.product_info, i.batch_id, i.packing_type, i.packing_size, i.uom,
646
+ SELECT i.product_id, foo.product_detail_id, foo.sku, foo.product_info, i.packing_type, i.packing_size, i.uom,
652
647
  SUM(i.qty - COALESCE(i.locked_qty, 0)) - COALESCE(
653
648
  (
654
649
  SELECT SUM(oi.release_qty) FROM order_inventories oi
@@ -686,7 +681,7 @@ export async function bulkReleaseGoodsAvailableItemsFunction(
686
681
  AND i.domain_id = $1
687
682
  AND i.bizplace_id = $2
688
683
  WHERE l.type NOT IN ($3, $4)
689
- GROUP BY i.product_id, foo.product_detail_id, foo.sku,foo.product_info, i.batch_id, i.packing_type, i.packing_size, i.uom
684
+ GROUP BY i.product_id, foo.product_detail_id, foo.sku,foo.product_info, i.packing_type, i.packing_size, i.uom
690
685
  ORDER BY foo.sku, remain_qty
691
686
  ) SELECT * FROM inv WHERE remain_qty > 0
692
687
  `,
@@ -701,7 +696,6 @@ export async function bulkReleaseGoodsAvailableItemsFunction(
701
696
  productDetailId: item.product_detail_id,
702
697
  productInfo: item.product_info,
703
698
  sku: item.sku,
704
- batchId: item.batch_id,
705
699
  packingType: item.packing_type,
706
700
  packingSize: Number(item.packing_size || 0),
707
701
  uom: item.uom,
@@ -766,7 +760,6 @@ function _extractData(rawData, validatedData) {
766
760
  raw.packingType = validatedData[idx].packingType
767
761
  raw.packingSize = validatedData[idx].packingSize
768
762
  raw.uom = validatedData[idx].uom
769
- raw.batchId = validatedData[idx].batchId
770
763
  } else {
771
764
  raw.assignedQty = 0
772
765
  raw.assignedUomValue = 0
@@ -45,6 +45,8 @@ export enum DispatchmentStatus {
45
45
  }
46
46
  @Entity()
47
47
  @Index('ix_release-good_0', (releaseGood: ReleaseGood) => [releaseGood.domain, releaseGood.name], { unique: true })
48
+ @Index('ix_release-good_1', (releaseGood: ReleaseGood) => [releaseGood.domain, releaseGood.refNo])
49
+ @Index('ix_release-good_2', (releaseGood: ReleaseGood) => [releaseGood.domain, releaseGood.refNo2])
48
50
  @ObjectType()
49
51
  export class ReleaseGood {
50
52
  @PrimaryGeneratedColumn('uuid')
@@ -1,3 +1,7 @@
1
+ import { FileUpload, GraphQLUpload } from 'graphql-upload'
2
+ import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
3
+ import { EntityManager, In } from 'typeorm'
4
+
1
5
  import { Attachment, createAttachments } from '@things-factory/attachment-base'
2
6
  import { Role, User } from '@things-factory/auth-base'
3
7
  import { Bizplace, getDomainUsers } from '@things-factory/biz-base'
@@ -5,10 +9,7 @@ import { sendNotification } from '@things-factory/notification'
5
9
  import { Product } from '@things-factory/product-base'
6
10
  import { Domain } from '@things-factory/shell'
7
11
  import { Inventory } from '@things-factory/warehouse-base'
8
- import { FileUpload, GraphQLUpload } from 'graphql-upload'
9
- import { TransferOrderMutation } from 'server'
10
- import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
11
- import { EntityManager, In } from 'typeorm'
12
+
12
13
  import { NewOrderInventory, NewReturnOrder, OrderInventory, OrderVas, ReturnOrderPatch } from '../'
13
14
  import { ATTACHMENT_TYPE, ORDER_INVENTORY_STATUS, ORDER_STATUS, ORDER_VAS_STATUS } from '../../constants'
14
15
  import { OrderNoGenerator } from '../../utils'
@@ -58,6 +58,10 @@ export class OrderNoGenerator {
58
58
  return `OP-${uuid()}`
59
59
  }
60
60
 
61
+ static invoiceProduct() {
62
+ return `IP-${uuid()}`
63
+ }
64
+
61
65
  static orderVas() {
62
66
  return `OV-${uuid()}`
63
67
  }
@@ -121,4 +125,11 @@ export class OrderNoGenerator {
121
125
  currentDate.getMonth() + 1
122
126
  }${currentDate.getDate()}${currentDate.getHours()}${currentDate.getMinutes()}${currentDate.getSeconds()}${currentDate.getMilliseconds()}`
123
127
  }
128
+
129
+ static invoice() {
130
+ const currentDate = new Date()
131
+ return `INV-${currentDate.getFullYear()}${
132
+ currentDate.getMonth() + 1
133
+ }${currentDate.getDate()}${currentDate.getHours()}${currentDate.getMinutes()}${currentDate.getSeconds()}${currentDate.getMilliseconds()}`
134
+ }
124
135
  }