@things-factory/sales-base 4.3.70 → 4.3.74

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 (89) hide show
  1. package/dist-server/constants/index.js +5 -1
  2. package/dist-server/constants/index.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/index.js +5 -1
  4. package/dist-server/controllers/ecommerce/index.js.map +1 -1
  5. package/dist-server/controllers/index.js +5 -1
  6. package/dist-server/controllers/index.js.map +1 -1
  7. package/dist-server/errors/index.js +5 -1
  8. package/dist-server/errors/index.js.map +1 -1
  9. package/dist-server/errors/validation-error.js +5 -1
  10. package/dist-server/errors/validation-error.js.map +1 -1
  11. package/dist-server/index.js +5 -1
  12. package/dist-server/index.js.map +1 -1
  13. package/dist-server/service/arrival-notice/index.js +5 -1
  14. package/dist-server/service/arrival-notice/index.js.map +1 -1
  15. package/dist-server/service/claim/index.js +5 -1
  16. package/dist-server/service/claim/index.js.map +1 -1
  17. package/dist-server/service/claim-detail/index.js +5 -1
  18. package/dist-server/service/claim-detail/index.js.map +1 -1
  19. package/dist-server/service/claim-order/index.js +5 -1
  20. package/dist-server/service/claim-order/index.js.map +1 -1
  21. package/dist-server/service/collection-order/index.js +5 -1
  22. package/dist-server/service/collection-order/index.js.map +1 -1
  23. package/dist-server/service/delivery-order/index.js +5 -1
  24. package/dist-server/service/delivery-order/index.js.map +1 -1
  25. package/dist-server/service/draft-release-good/draft-release-good-query.js +8 -10
  26. package/dist-server/service/draft-release-good/draft-release-good-query.js.map +1 -1
  27. package/dist-server/service/draft-release-good/index.js +5 -1
  28. package/dist-server/service/draft-release-good/index.js.map +1 -1
  29. package/dist-server/service/goods-receival-note/index.js +5 -1
  30. package/dist-server/service/goods-receival-note/index.js.map +1 -1
  31. package/dist-server/service/index.js +5 -1
  32. package/dist-server/service/index.js.map +1 -1
  33. package/dist-server/service/inventory-check/index.js +5 -1
  34. package/dist-server/service/inventory-check/index.js.map +1 -1
  35. package/dist-server/service/invoice/index.js +5 -1
  36. package/dist-server/service/invoice/index.js.map +1 -1
  37. package/dist-server/service/invoice-product/index.js +5 -1
  38. package/dist-server/service/invoice-product/index.js.map +1 -1
  39. package/dist-server/service/job-sheet/index.js +5 -1
  40. package/dist-server/service/job-sheet/index.js.map +1 -1
  41. package/dist-server/service/order-inventory/index.js +5 -1
  42. package/dist-server/service/order-inventory/index.js.map +1 -1
  43. package/dist-server/service/order-product/index.js +5 -1
  44. package/dist-server/service/order-product/index.js.map +1 -1
  45. package/dist-server/service/order-product/order-product.js +3 -0
  46. package/dist-server/service/order-product/order-product.js.map +1 -1
  47. package/dist-server/service/order-tote/index.js +5 -1
  48. package/dist-server/service/order-tote/index.js.map +1 -1
  49. package/dist-server/service/order-tote-item/index.js +5 -1
  50. package/dist-server/service/order-tote-item/index.js.map +1 -1
  51. package/dist-server/service/order-tote-seal/index.js +5 -1
  52. package/dist-server/service/order-tote-seal/index.js.map +1 -1
  53. package/dist-server/service/order-vas/index.js +5 -1
  54. package/dist-server/service/order-vas/index.js.map +1 -1
  55. package/dist-server/service/others/index.js +5 -1
  56. package/dist-server/service/others/index.js.map +1 -1
  57. package/dist-server/service/purchase-order/index.js +5 -1
  58. package/dist-server/service/purchase-order/index.js.map +1 -1
  59. package/dist-server/service/purchase-order-other-charge/index.js +5 -1
  60. package/dist-server/service/purchase-order-other-charge/index.js.map +1 -1
  61. package/dist-server/service/release-good/index.js +5 -1
  62. package/dist-server/service/release-good/index.js.map +1 -1
  63. package/dist-server/service/release-good/release-good-mutation.js +3 -1
  64. package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
  65. package/dist-server/service/release-good/release-good-query.js +109 -113
  66. package/dist-server/service/release-good/release-good-query.js.map +1 -1
  67. package/dist-server/service/retail-replenishment-order/index.js +5 -1
  68. package/dist-server/service/retail-replenishment-order/index.js.map +1 -1
  69. package/dist-server/service/return-order/index.js +5 -1
  70. package/dist-server/service/return-order/index.js.map +1 -1
  71. package/dist-server/service/reverse-kitting-order/index.js +5 -1
  72. package/dist-server/service/reverse-kitting-order/index.js.map +1 -1
  73. package/dist-server/service/reverse-kitting-order-inventory/index.js +5 -1
  74. package/dist-server/service/reverse-kitting-order-inventory/index.js.map +1 -1
  75. package/dist-server/service/shipping-order/index.js +5 -1
  76. package/dist-server/service/shipping-order/index.js.map +1 -1
  77. package/dist-server/service/transfer-order/index.js +5 -1
  78. package/dist-server/service/transfer-order/index.js.map +1 -1
  79. package/dist-server/service/vas/index.js +5 -1
  80. package/dist-server/service/vas/index.js.map +1 -1
  81. package/dist-server/service/vas-order/index.js +5 -1
  82. package/dist-server/service/vas-order/index.js.map +1 -1
  83. package/dist-server/utils/index.js +5 -1
  84. package/dist-server/utils/index.js.map +1 -1
  85. package/package.json +13 -13
  86. package/server/service/draft-release-good/draft-release-good-query.ts +8 -10
  87. package/server/service/order-product/order-product.ts +7 -0
  88. package/server/service/release-good/release-good-mutation.ts +3 -2
  89. package/server/service/release-good/release-good-query.ts +122 -136
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/sales-base",
3
- "version": "4.3.70",
3
+ "version": "4.3.74",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -24,17 +24,17 @@
24
24
  "migration:create": "node ../../node_modules/typeorm/cli.js migration:create -d ./server/migrations"
25
25
  },
26
26
  "dependencies": {
27
- "@things-factory/attachment-base": "^4.3.69",
28
- "@things-factory/auth-base": "^4.3.69",
29
- "@things-factory/biz-base": "^4.3.69",
30
- "@things-factory/code-base": "^4.3.69",
31
- "@things-factory/integration-sftp": "^4.3.69",
32
- "@things-factory/notification": "^4.3.69",
33
- "@things-factory/product-base": "^4.3.69",
34
- "@things-factory/setting-base": "^4.3.69",
35
- "@things-factory/shell": "^4.3.69",
36
- "@things-factory/transport-base": "^4.3.69",
37
- "@things-factory/warehouse-base": "^4.3.69"
27
+ "@things-factory/attachment-base": "^4.3.74",
28
+ "@things-factory/auth-base": "^4.3.74",
29
+ "@things-factory/biz-base": "^4.3.74",
30
+ "@things-factory/code-base": "^4.3.74",
31
+ "@things-factory/integration-sftp": "^4.3.74",
32
+ "@things-factory/notification": "^4.3.74",
33
+ "@things-factory/product-base": "^4.3.74",
34
+ "@things-factory/setting-base": "^4.3.74",
35
+ "@things-factory/shell": "^4.3.74",
36
+ "@things-factory/transport-base": "^4.3.74",
37
+ "@things-factory/warehouse-base": "^4.3.74"
38
38
  },
39
- "gitHead": "635bb41ac43a80787b3d21812a1f44156037a6c5"
39
+ "gitHead": "f9aee457ecca352c1b3ef6be1656ed73b98af038"
40
40
  }
@@ -109,18 +109,16 @@ export class DraftReleaseGoodQuery {
109
109
  tx.query(
110
110
  `
111
111
  create temp table temp_op_calculation on commit drop as (
112
- select drg1.id, sum(case when wboi."remainQty" >= op.release_qty then 0 else 1 end) as insufficient_count, count(*) as total_row
113
- from draft_release_goods drg1
112
+ SELECT drg1.id from draft_release_goods drg1
114
113
  left join order_products op on drg1.id = op.draft_release_good_id
115
- left join warehouse_bizplace_onhand_inventories wboi
116
- on (wboi."productId" = op.product_id or wboi."productBundleId" = op.product_id)
117
- and wboi."packingType" = op.packing_type
118
- and wboi."packingSize" = op.packing_size
119
- and wboi.uom = op.uom
114
+ where drg1.status ='DRAFT' AND drg1.domain_id = $1
115
+ AND NOT EXISTS (
116
+ SELECT * FROM warehouse_bizplace_onhand_inventories wboi
117
+ where (wboi."productId" = op.product_id or wboi."productBundleId" = op.product_id)
120
118
  and wboi."domainId" = op.domain_id
121
119
  and wboi."bizplaceId" = op.bizplace_id
122
- where op.domain_id = $1 and drg1.status ='DRAFT'
123
- group by drg1.id
120
+ AND wboi."remainQty" >= op.release_qty
121
+ ) GROUP BY drg1.id
124
122
  )
125
123
  `,
126
124
  [domain.id]
@@ -130,7 +128,7 @@ export class DraftReleaseGoodQuery {
130
128
  buildQuery(qb, params, context)
131
129
  qb.addSelect('COALESCE("cc".rank, 99999)', 'rank')
132
130
  qb.addSelect(
133
- `CASE WHEN "drg".status = 'DRAFT' and (tmp_calc.insufficient_count > 0 or tmp_calc.total_row = 0) then 'INSUFFICIENT' else "drg".status END`,
131
+ `CASE WHEN "drg".status = 'DRAFT' and tmp_calc.id IS NOT null then 'INSUFFICIENT' else "drg".status END`,
134
132
  'computed_status'
135
133
  )
136
134
  qb.leftJoin(`temp_op_calculation`, 'tmp_calc', 'tmp_calc.id = drg.id')
@@ -59,6 +59,13 @@ import { OrderInventory } from '../order-inventory/order-inventory'
59
59
  ],
60
60
  { unique: true }
61
61
  )
62
+ @Index(
63
+ 'ix_order-product_4',
64
+ (orderProduct: OrderProduct) => [
65
+ orderProduct.draftReleaseGood
66
+ ],
67
+ { unique: false }
68
+ )
62
69
  @ObjectType()
63
70
  export class OrderProduct {
64
71
  @PrimaryGeneratedColumn('uuid')
@@ -16,12 +16,13 @@ import { MarketplaceStore } from '@things-factory/integration-marketplace'
16
16
  import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
17
17
  import { Sftp } from '@things-factory/integration-sftp'
18
18
  import { MarketplaceOrder, MarketplaceProductVariation } from '@things-factory/marketplace-base'
19
- import { sendNotification } from '@things-factory/notification'
19
+ // import { sendNotification } from '@things-factory/notification'
20
20
  import { Product, ProductBundleSetting } from '@things-factory/product-base'
21
21
  import { PartnerSetting, Setting } from '@things-factory/setting-base'
22
22
  import { Domain } from '@things-factory/shell'
23
23
  import { Inventory } from '@things-factory/warehouse-base'
24
24
 
25
+ // import { NewOrderProduct } from '../order-product/order-product-types'
25
26
  import {
26
27
  ATTACHMENT_TYPE,
27
28
  ORDER_INVENTORY_STATUS,
@@ -48,7 +49,6 @@ import { ShippingOrderPatch } from '../shipping-order/shipping-order-types'
48
49
  import { Vas } from '../vas/vas'
49
50
  import { ReleaseGood } from './release-good'
50
51
  import { bulkReleaseGoodsAvailableItemsFunction } from './release-good-query'
51
- import { NewOrderProduct } from '../order-product/order-product-types'
52
52
 
53
53
  @Resolver(ReleaseGood)
54
54
  export class ReleaseGoodMutation {
@@ -1294,6 +1294,7 @@ export async function bulkGenerateReleaseGood(
1294
1294
  refNo3: releaseGood.refNo3,
1295
1295
  releaseDate: releaseGood.releaseDate,
1296
1296
  ownTransport: releaseGood?.ownTransport || false,
1297
+ orderMethod: ORDER_METHOD.SELECT_BY_PRODUCT,
1297
1298
  status: ORDER_STATUS.PENDING,
1298
1299
  creator: user,
1299
1300
  updater: user
@@ -1,11 +1,10 @@
1
- import orderBy from 'lodash/orderBy'
2
1
  import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
3
2
  import { EntityManager, getRepository, In, Repository, SelectQueryBuilder } from 'typeorm'
4
3
 
5
4
  import { Attachment } from '@things-factory/attachment-base'
6
5
  import { checkUserBelongsDomain, User } from '@things-factory/auth-base'
7
6
  import { Bizplace, getCompanyBizplace, getMyBizplace, getPermittedBizplaceIds } from '@things-factory/biz-base'
8
- import { Product } from '@things-factory/product-base'
7
+ import { logger } from '@things-factory/env'
9
8
  import { buildQuery, Domain, Filter, ListParam, Pagination, Sorting } from '@things-factory/shell'
10
9
  import { Inventory, LOCATION_TYPE } from '@things-factory/warehouse-base'
11
10
 
@@ -13,7 +12,7 @@ import { ATTACHMENT_TYPE, ORDER_INVENTORY_STATUS, ORDER_STATUS } from '../../con
13
12
  import { OrderInventory } from '../order-inventory/order-inventory'
14
13
  import { ShippingOrder } from '../shipping-order/shipping-order'
15
14
  import { ReleaseGood } from './release-good'
16
- import { InventoryInfos, NewReleaseGood, ReleasableInventoryList, ReleaseGoodList } from './release-good-types'
15
+ import { NewReleaseGood, ReleasableInventoryList, ReleaseGoodList } from './release-good-types'
17
16
 
18
17
  @Resolver(ReleaseGood)
19
18
  export class ReleaseGoodQuery {
@@ -166,56 +165,58 @@ export class ReleaseGoodQuery {
166
165
  @Arg('refNo', { nullable: true }) refNo?: string,
167
166
  @Arg('name', { nullable: true }) name?: string
168
167
  ): Promise<ReleaseGood> {
169
- const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state
170
- let param: any
171
-
172
- if (name) param = { domain, name }
173
- else param = { domain, refNo }
174
-
175
- const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
176
- where: { ...param },
177
- relations: [
178
- 'domain',
179
- 'bizplace',
180
- 'shippingOrder',
181
- 'arrivalNotice',
182
- 'orderProducts',
183
- 'orderProducts.product',
184
- 'orderInventories',
185
- 'orderInventories.inventory',
186
- 'orderInventories.product',
187
- 'orderInventories.inventory.product',
188
- 'orderInventories.inventory.location',
189
- 'orderVass',
190
- 'orderVass.vas',
191
- 'orderVass.targetProduct',
192
- 'orderVass.inventory',
193
- 'creator',
194
- 'updater',
195
- 'deliverTo'
196
- ]
197
- })
168
+ try {
169
+ const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state
170
+ let param: any
198
171
 
199
- if (releaseGood) {
200
- const roBizId: string = releaseGood.bizplace.id
201
- const shippingOrder: ShippingOrder = releaseGood.shippingOrder
202
- const foundAttachments: Attachment[] = await tx.getRepository(Attachment).find({
203
- where: {
204
- domain,
205
- refBy: releaseGood.id,
206
- category: ATTACHMENT_TYPE.DELIVERY_ORDER
207
- }
172
+ if (name) param = { domain, name }
173
+ else param = { domain, refNo }
174
+
175
+ const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
176
+ where: { ...param },
177
+ relations: [
178
+ 'domain',
179
+ 'bizplace',
180
+ 'shippingOrder',
181
+ 'arrivalNotice',
182
+ 'orderProducts',
183
+ 'orderProducts.product',
184
+ 'orderVass',
185
+ 'orderVass.vas',
186
+ 'orderVass.targetProduct',
187
+ 'orderVass.inventory',
188
+ 'creator',
189
+ 'updater'
190
+ ]
208
191
  })
209
192
 
210
- await prepOITempTable(domain, tx)
193
+ if (releaseGood) {
194
+ let oiQb: SelectQueryBuilder<OrderInventory> = tx
195
+ .getRepository(OrderInventory)
196
+ .createQueryBuilder('oi')
197
+ .leftJoinAndSelect('oi.inventory', 'inventory')
198
+ .leftJoinAndSelect('oi.product', 'product')
199
+ .leftJoinAndSelect('inventory.location', 'location')
200
+ .where('oi.domain_id = :domainId', { domainId: domain.id })
201
+ .andWhere('oi.release_good_id = :releaseGoodId', { releaseGoodId: releaseGood.id })
202
+ .andWhere('oi.status NOT IN (:...orderInventoryStatus)', {
203
+ orderInventoryStatus: [ORDER_INVENTORY_STATUS.COMPLETE_SPLIT, ORDER_INVENTORY_STATUS.REPLACED]
204
+ })
205
+ .orderBy('product.sku', 'ASC')
206
+
207
+ let orderInventories: OrderInventory[] = await oiQb.getMany()
211
208
 
212
- let invInfos = await Promise.all(
213
- releaseGood.orderInventories
214
- .filter(
215
- itm =>
216
- itm.status !== ORDER_INVENTORY_STATUS.COMPLETE_SPLIT && itm.status !== ORDER_INVENTORY_STATUS.REPLACED
217
- )
218
- .map(async (orderInv: OrderInventory) => {
209
+ const shippingOrder: ShippingOrder = releaseGood.shippingOrder
210
+ const foundAttachments: Attachment[] = await tx.getRepository(Attachment).find({
211
+ where: {
212
+ domain,
213
+ refBy: releaseGood.id,
214
+ category: ATTACHMENT_TYPE.DELIVERY_ORDER
215
+ }
216
+ })
217
+
218
+ let invInfos = await Promise.all(
219
+ orderInventories.map(async (orderInv: OrderInventory) => {
219
220
  if (orderInv?.inventory?.id) {
220
221
  const inventory: Inventory = orderInv.inventory
221
222
  return {
@@ -224,11 +225,11 @@ export class ReleaseGoodQuery {
224
225
  batchId: inventory.batchId,
225
226
  batchIdRef: inventory.batchIdRef,
226
227
  palletId: inventory.palletId,
227
- product: inventory.product,
228
- productIdRef: inventory.product.id,
229
- productName: `${inventory.product.name} (${inventory.product.description})`,
230
- packingType: inventory.packingType,
231
- packingSize: inventory.packingSize,
228
+ product: orderInv.product,
229
+ productIdRef: orderInv.product.id,
230
+ productName: `${orderInv.product.name} (${orderInv.product.description})`,
231
+ packingType: orderInv.packingType,
232
+ packingSize: orderInv.packingSize,
232
233
  location: inventory.location,
233
234
  qty: inventory.qty,
234
235
  lockedQty: inventory.lockedQty,
@@ -241,58 +242,31 @@ export class ReleaseGoodQuery {
241
242
  status: orderInv.status,
242
243
  refWorksheetId: orderInv.refWorksheetId
243
244
  }
244
- } else {
245
- const {
246
- batchId,
247
- batchIdRef,
248
- product,
249
- packingType,
250
- packingSize,
251
- releaseQty,
252
- releaseUomValue,
253
- refWorksheetId
254
- } = orderInv
255
- const { id: productIdRef, name: productName }: Product = product
256
- const { qty, uomValue, uom } = await getAvailableAmount(roBizId, productIdRef, batchId, packingType, tx)
257
-
258
- return {
259
- batchId,
260
- batchIdRef,
261
- productIdRef,
262
- product,
263
- productName,
264
- packingType,
265
- packingSize,
266
- qty,
267
- uom,
268
- uomValue,
269
- releaseQty,
270
- releaseUomValue,
271
- refWorksheetId
272
- }
273
245
  }
274
246
  })
275
- )
276
-
277
- const result = {
278
- ...releaseGood,
279
- attachment: foundAttachments,
280
- shippingOrderInfo: {
281
- containerNo: shippingOrder?.containerNo || '',
282
- containerSize: shippingOrder?.containerSize || '',
283
- containerLeavingDate: shippingOrder?.containerLeavingDate || '',
284
- containerArrivalDate: shippingOrder?.containerArrivalDate || '',
285
- containerClosureDate: shippingOrder?.containerClosureDate || '',
286
- shipName: shippingOrder?.shipName || '',
287
- remark: shippingOrder?.remark || '',
288
- remindContainerDeparture: shippingOrder?.remindContainerDeparture || null
289
- },
290
- inventoryInfos: orderBy<InventoryInfos>(invInfos, ['product.sku'], ['asc'])
291
- }
247
+ )
292
248
 
293
- dropOITempTable(domain, tx)
249
+ const result = {
250
+ ...releaseGood,
251
+ attachment: foundAttachments,
252
+ shippingOrderInfo: {
253
+ containerNo: shippingOrder?.containerNo || '',
254
+ containerSize: shippingOrder?.containerSize || '',
255
+ containerLeavingDate: shippingOrder?.containerLeavingDate || '',
256
+ containerArrivalDate: shippingOrder?.containerArrivalDate || '',
257
+ containerClosureDate: shippingOrder?.containerClosureDate || '',
258
+ shipName: shippingOrder?.shipName || '',
259
+ remark: shippingOrder?.remark || '',
260
+ remindContainerDeparture: shippingOrder?.remindContainerDeparture || null
261
+ },
262
+ inventoryInfos: invInfos
263
+ }
294
264
 
295
- return result
265
+ return result
266
+ }
267
+ } catch (error) {
268
+ logger.error(`release-good-query[releaseGoodDetail]: ${error}`)
269
+ throw new Error(error)
296
270
  }
297
271
  }
298
272
 
@@ -300,6 +274,7 @@ export class ReleaseGoodQuery {
300
274
  @Query(returns => ReleaseGoodList)
301
275
  async releaseGoodRequests(@Ctx() context: any, @Args() params: ListParam): Promise<ReleaseGoodList> {
302
276
  try {
277
+ console.time('t1')
303
278
  const { domain, user }: { domain: Domain; user: User } = context.state
304
279
 
305
280
  const statusFilter = params.filters.some(e => e.name === 'status')
@@ -310,6 +285,7 @@ export class ReleaseGoodQuery {
310
285
  const orderRemarkFilter = params.filters.find(param => param.name === 'orderRemark')
311
286
  const manifestedFilter = params.filters.find(param => param.name === 'manifested')
312
287
  const orderInfoFilter = params.filters.find(param => param.name === 'name')
288
+ const typeFilter = params.filters.find(param => param.name === 'type')?.value
313
289
 
314
290
  if (await checkUserBelongsDomain(domain, user)) {
315
291
  if (!statusFilter && !params.filters.some(e => e.name === 'name')) {
@@ -393,12 +369,16 @@ export class ReleaseGoodQuery {
393
369
  const fromDateParamIdx = params.filters.findIndex(param => param.name === 'fromDate')
394
370
  if (fromDateParamIdx >= 0) {
395
371
  let fromDateVal = new Date(params.filters[fromDateParamIdx].value)
372
+ let releaseDateFrom = params.filters.find(param => param.name === 'fromDate')?.value
396
373
  params.filters.splice(fromDateParamIdx, 1)
397
374
 
398
375
  params.filters.push({
399
- name: 'createdAt',
376
+ name: typeFilter == 'b2c' ? 'releaseDate' : 'createdAt',
400
377
  operator: 'gte',
401
- value: fromDateVal.toISOString(),
378
+ value:
379
+ typeFilter == 'b2c'
380
+ ? releaseDateFrom
381
+ : fromDateVal.toISOString(),
402
382
  relation: false
403
383
  })
404
384
  }
@@ -406,12 +386,16 @@ export class ReleaseGoodQuery {
406
386
  const toDateParamIdx = params.filters.findIndex(param => param.name === 'toDate')
407
387
  if (toDateParamIdx >= 0) {
408
388
  let toDateVal = new Date(params.filters[toDateParamIdx].value)
389
+ let releaseDateTo = params.filters.find(param => param.name === 'toDate')?.value
409
390
  params.filters.splice(toDateParamIdx, 1)
410
391
 
411
392
  params.filters.push({
412
- name: 'createdAt',
413
- operator: 'lt',
414
- value: new Date(toDateVal.setDate(toDateVal.getDate() + 1)).toISOString(),
393
+ name: typeFilter == 'b2c' ? 'releaseDate' : 'createdAt',
394
+ operator: typeFilter == 'b2c' ? 'lte' : 'lt',
395
+ value:
396
+ typeFilter == 'b2c'
397
+ ? releaseDateTo
398
+ : new Date(toDateVal.setDate(toDateVal.getDate() + 1)).toISOString(),
415
399
  relation: false
416
400
  })
417
401
  }
@@ -520,11 +504,10 @@ export class ReleaseGoodQuery {
520
504
  orderRemark: item?.remark ? true : false
521
505
  }
522
506
  })
523
-
524
- total = items.length
525
-
507
+ console.timeEnd('t1')
526
508
  return { items, total }
527
509
  } catch (error) {
510
+ logger.error(`release-good-query[releaseGoodRequests]: ${error}`)
528
511
  throw error
529
512
  }
530
513
  }
@@ -581,24 +564,27 @@ export class ReleaseGoodQuery {
581
564
  ${batchId ? `AND LOWER(${INV_ALIAS}.batch_id) LIKE '%${batchId.toLowerCase()}%'` : ''}
582
565
  ${packingType ? `AND LOWER(${INV_ALIAS}.packing_type) LIKE '%${packingType.toLowerCase()}%'` : ''}
583
566
  ${containerNo ? `AND LOWER(${GAN_ALIAS}.container_no) LIKE '%${containerNo.toLowerCase()}%'` : ''}
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
- } (
567
+ ${
568
+ product?.length > 0 && product[0]
569
+ ? `AND ${PROD_ALIAS}.id IN (${product.map((id: string) => `'${id}'`).join(', ')})`
570
+ : product[0] === null
571
+ ? `AND ${PROD_ALIAS}.id isnull`
572
+ : ''
573
+ }
574
+ ${
575
+ inventory?.length > 0
576
+ ? `
577
+ AND (${INV_ALIAS}.batch_id, ${PROD_ALIAS}.id) ${
578
+ filters.find((filter: { name: string; operator: string; value: any }) => filter.name === 'inventory')
579
+ .operator
580
+ } (
595
581
  ${inventory
596
- .map((inv: { batchId: string; productId: string }) => `('${inv.batchId}', '${inv.productId}')`)
597
- .join(', ')}
582
+ .map((inv: { batchId: string; productId: string }) => `('${inv.batchId}', '${inv.productId}')`)
583
+ .join(', ')}
598
584
  )
599
585
  `
600
- : ''
601
- }
586
+ : ''
587
+ }
602
588
  `
603
589
 
604
590
  // ${product?.length > 0 ? `AND ${PROD_ALIAS}.id IN (${product.map((id: string) => id ? `'${id}'` : null).join(', ')})` : ''}
@@ -678,7 +664,7 @@ export class ReleaseGoodQuery {
678
664
  async function prepOITempTable(domain: Domain, tx: EntityManager) {
679
665
  await tx.query(
680
666
  `
681
- CREATE TEMP TABLE oi AS (
667
+ CREATE TEMP TABLE oi ON COMMIT DROP AS (
682
668
  SELECT
683
669
  SUM(oi.release_qty) as release_qty,
684
670
  SUM(oi.release_uom_value) as release_uom_value,
@@ -953,16 +939,16 @@ function _extractData(rawData, validatedData) {
953
939
  !raw.productId || !raw.productDetailId
954
940
  ? 'inventory or product not found'
955
941
  : raw.releaseQty <= 0
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
- : ''
942
+ ? 'invalid release qty'
943
+ : raw.assignedQty < raw.releaseQty
944
+ ? 'insufficient stock'
945
+ : raw.releaseDate == ''
946
+ ? 'release date is empty'
947
+ : releaseDate < _getStdDateStr(new Date())
948
+ ? 'backdate is not allowed'
949
+ : !raw.refNo
950
+ ? 'ref no is empty'
951
+ : ''
966
952
  }
967
953
  })
968
954
  }