@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.
- package/dist-server/constants/release-good.js +5 -1
- package/dist-server/constants/release-good.js.map +1 -1
- package/dist-server/service/delivery-order/delivery-order-mutation.js +6 -15
- package/dist-server/service/delivery-order/delivery-order-mutation.js.map +1 -1
- package/dist-server/service/delivery-order/delivery-order-query.js +3 -0
- package/dist-server/service/delivery-order/delivery-order-query.js.map +1 -1
- package/dist-server/service/draft-release-good/draft-release-good-mutation.js +26 -19
- package/dist-server/service/draft-release-good/draft-release-good-mutation.js.map +1 -1
- package/dist-server/service/manifest/manifest-mutation.js +7 -3
- package/dist-server/service/manifest/manifest-mutation.js.map +1 -1
- package/dist-server/service/order-inventory/order-inventory-query.js +54 -27
- package/dist-server/service/order-inventory/order-inventory-query.js.map +1 -1
- package/dist-server/service/order-inventory/order-inventory.js +8 -2
- package/dist-server/service/order-inventory/order-inventory.js.map +1 -1
- package/dist-server/service/order-product/order-product-query.js +35 -4
- package/dist-server/service/order-product/order-product-query.js.map +1 -1
- package/dist-server/service/order-tote/order-tote.js +2 -1
- package/dist-server/service/order-tote/order-tote.js.map +1 -1
- package/dist-server/service/release-good/release-good-mutation.js +102 -37
- package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
- package/dist-server/service/release-good/release-good-query.js +80 -7
- package/dist-server/service/release-good/release-good-query.js.map +1 -1
- package/dist-server/service/release-good/release-good-types.js +41 -20
- package/dist-server/service/release-good/release-good-types.js.map +1 -1
- package/dist-server/service/release-good/release-good.js +25 -6
- package/dist-server/service/release-good/release-good.js.map +1 -1
- package/dist-server/service/shipping-order/shipping-order-types.js +21 -1
- package/dist-server/service/shipping-order/shipping-order-types.js.map +1 -1
- package/dist-server/service/shipping-order/shipping-order.js +22 -2
- package/dist-server/service/shipping-order/shipping-order.js.map +1 -1
- package/dist-server/utils/inventory-util.js +69 -30
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +6 -6
- package/server/constants/release-good.ts +6 -3
- package/server/service/delivery-order/delivery-order-mutation.ts +5 -11
- package/server/service/delivery-order/delivery-order-query.ts +19 -18
- package/server/service/draft-release-good/draft-release-good-mutation.ts +41 -22
- package/server/service/manifest/manifest-mutation.ts +10 -3
- package/server/service/order-inventory/order-inventory-query.ts +68 -36
- package/server/service/order-inventory/order-inventory.ts +8 -2
- package/server/service/order-product/order-product-query.ts +45 -8
- package/server/service/order-tote/order-tote.ts +13 -2
- package/server/service/release-good/release-good-mutation.ts +165 -50
- package/server/service/release-good/release-good-query.ts +126 -41
- package/server/service/release-good/release-good-types.ts +25 -6
- package/server/service/release-good/release-good.ts +24 -8
- package/server/service/shipping-order/shipping-order-types.ts +16 -1
- package/server/service/shipping-order/shipping-order.ts +18 -2
- 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(`
|
|
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:
|
|
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:
|
|
723
|
+
status: ORDER_PRODUCT_STATUS.ASSIGNED
|
|
714
724
|
}
|
|
715
725
|
|
|
716
726
|
newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)
|
|
717
727
|
|
|
718
|
-
|
|
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 (
|
|
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
|
-
|
|
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
|
-
...(
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
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
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
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
|
|
411
|
-
|
|
412
|
-
|
|
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
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
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
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
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
|
-
|
|
512
|
-
|
|
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
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
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
|
-
|
|
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
|
-
|
|
546
|
-
export class exportInformationPatch {
|
|
565
|
+
export class ExportInformationPatch {
|
|
547
566
|
@Field({ nullable: true })
|
|
548
567
|
id?: string
|
|
549
568
|
|