@things-factory/sales-base 4.3.769 → 4.3.771
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/service/draft-release-good/draft-release-good-create.js +138 -139
- package/dist-server/service/draft-release-good/draft-release-good-create.js.map +1 -1
- package/dist-server/service/index.js +16 -2
- package/dist-server/service/index.js.map +1 -1
- package/dist-server/service/loading-package-items/index.js +9 -0
- package/dist-server/service/loading-package-items/index.js.map +1 -0
- package/dist-server/service/loading-package-items/loading-package-items-mutation.js +120 -0
- package/dist-server/service/loading-package-items/loading-package-items-mutation.js.map +1 -0
- package/dist-server/service/loading-package-items/loading-package-items-query.js +87 -0
- package/dist-server/service/loading-package-items/loading-package-items-query.js.map +1 -0
- package/dist-server/service/loading-package-items/loading-package-items-type.js +77 -0
- package/dist-server/service/loading-package-items/loading-package-items-type.js.map +1 -0
- package/dist-server/service/loading-package-items/loading-package-items.js +173 -0
- package/dist-server/service/loading-package-items/loading-package-items.js.map +1 -0
- package/dist-server/service/loading-packages/index.js +9 -0
- package/dist-server/service/loading-packages/index.js.map +1 -0
- package/dist-server/service/loading-packages/loading-packages-mutation.js +151 -0
- package/dist-server/service/loading-packages/loading-packages-mutation.js.map +1 -0
- package/dist-server/service/loading-packages/loading-packages-query.js +316 -0
- package/dist-server/service/loading-packages/loading-packages-query.js.map +1 -0
- package/dist-server/service/loading-packages/loading-packages-type.js +77 -0
- package/dist-server/service/loading-packages/loading-packages-type.js.map +1 -0
- package/dist-server/service/loading-packages/loading-packages.js +138 -0
- package/dist-server/service/loading-packages/loading-packages.js.map +1 -0
- package/dist-server/service/order-inventory/order-inventory.js +1 -0
- package/dist-server/service/order-inventory/order-inventory.js.map +1 -1
- package/dist-server/service/release-good/release-good-mutation.js +48 -15
- package/dist-server/service/release-good/release-good-mutation.js.map +1 -1
- package/dist-server/service/release-good/release-good-query.js +61 -3
- package/dist-server/service/release-good/release-good-query.js.map +1 -1
- package/dist-server/service/release-good/release-good-types.js +15 -1
- package/dist-server/service/release-good/release-good-types.js.map +1 -1
- package/dist-server/service/release-good/release-good.js +4 -0
- package/dist-server/service/release-good/release-good.js.map +1 -1
- package/dist-server/utils/inventory-util.js +6 -2
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/dist-server/utils/order-no-generator.js +8 -0
- package/dist-server/utils/order-no-generator.js.map +1 -1
- package/package.json +8 -8
- package/server/service/draft-release-good/draft-release-good-create.ts +201 -206
- package/server/service/index.ts +16 -2
- package/server/service/loading-package-items/index.ts +6 -0
- package/server/service/loading-package-items/loading-package-items-mutation.ts +112 -0
- package/server/service/loading-package-items/loading-package-items-query.ts +43 -0
- package/server/service/loading-package-items/loading-package-items-type.ts +45 -0
- package/server/service/loading-package-items/loading-package-items.ts +140 -0
- package/server/service/loading-packages/index.ts +6 -0
- package/server/service/loading-packages/loading-packages-mutation.ts +150 -0
- package/server/service/loading-packages/loading-packages-query.ts +272 -0
- package/server/service/loading-packages/loading-packages-type.ts +45 -0
- package/server/service/loading-packages/loading-packages.ts +110 -0
- package/server/service/order-inventory/order-inventory.ts +1 -0
- package/server/service/release-good/release-good-mutation.ts +49 -21
- package/server/service/release-good/release-good-query.ts +103 -36
- package/server/service/release-good/release-good-types.ts +9 -0
- package/server/service/release-good/release-good.ts +5 -1
- package/server/utils/inventory-util.ts +7 -2
- package/server/utils/order-no-generator.ts +12 -0
|
@@ -8,6 +8,7 @@ import { logger } from '@things-factory/env'
|
|
|
8
8
|
import { buildQuery, Domain, Filter, ListParam, Pagination, Sorting } from '@things-factory/shell'
|
|
9
9
|
import { Inventory, LOCATION_TYPE } from '@things-factory/warehouse-base'
|
|
10
10
|
|
|
11
|
+
// import { Worksheet, WORKSHEET_TYPE, WORKSHEET_STATUS } from '@things-factory/worksheet-base'
|
|
11
12
|
import { ATTACHMENT_TYPE, ORDER_INVENTORY_STATUS, ORDER_STATUS, ORDER_VAS_STATUS } from '../../constants'
|
|
12
13
|
import { convertExcelDateToISO } from '../../utils/datetime-util'
|
|
13
14
|
import { OrderInventory } from '../order-inventory/order-inventory'
|
|
@@ -657,6 +658,61 @@ export class ReleaseGoodQuery {
|
|
|
657
658
|
|
|
658
659
|
let [items, total] = await qb.getManyAndCount()
|
|
659
660
|
|
|
661
|
+
const releaseGoodIds = items.map(item => item.id)
|
|
662
|
+
|
|
663
|
+
// Original entity-based approach (requires @things-factory/worksheet-base dependency)
|
|
664
|
+
// const allWorksheetsRaw: any[] = releaseGoodIds.length > 0
|
|
665
|
+
// ? await getRepository(Worksheet)
|
|
666
|
+
// .createQueryBuilder('ws')
|
|
667
|
+
// .leftJoin('ws.releaseGood', 'rg')
|
|
668
|
+
// .where('ws.domain_id = :domainId', { domainId: domain.id })
|
|
669
|
+
// .andWhere('rg.id IN (:...releaseGoodIds)', { releaseGoodIds })
|
|
670
|
+
// .select([
|
|
671
|
+
// 'ws.id as id',
|
|
672
|
+
// 'ws.type as type',
|
|
673
|
+
// 'ws.status as status',
|
|
674
|
+
// 'ws.name as name',
|
|
675
|
+
// 'ws.updated_at as updated_at',
|
|
676
|
+
// 'rg.id as releaseGoodId'
|
|
677
|
+
// ])
|
|
678
|
+
// .orderBy('ws.updated_at', 'DESC')
|
|
679
|
+
// .getRawMany()
|
|
680
|
+
// : []
|
|
681
|
+
|
|
682
|
+
// Direct table query (no dependency needed)
|
|
683
|
+
const allWorksheetsRaw: any[] = releaseGoodIds.length > 0
|
|
684
|
+
? await getRepository(ReleaseGood).query(
|
|
685
|
+
`
|
|
686
|
+
SELECT
|
|
687
|
+
ws.id as id,
|
|
688
|
+
ws.type as type,
|
|
689
|
+
ws.status as status,
|
|
690
|
+
ws.name as name,
|
|
691
|
+
ws.updated_at as updated_at,
|
|
692
|
+
rg.id as "releaseGoodId"
|
|
693
|
+
FROM worksheets ws
|
|
694
|
+
LEFT JOIN release_goods rg ON ws.release_good_id = rg.id
|
|
695
|
+
WHERE ws.domain_id = $1 AND rg.id = ANY($2)
|
|
696
|
+
ORDER BY ws.updated_at DESC
|
|
697
|
+
`,
|
|
698
|
+
[domain.id, releaseGoodIds]
|
|
699
|
+
)
|
|
700
|
+
: []
|
|
701
|
+
|
|
702
|
+
const worksheetMap = new Map<string, { id: string; type: string; status: string; name: string }>()
|
|
703
|
+
for (const ws of allWorksheetsRaw) {
|
|
704
|
+
const releaseGoodId = ws.releaseGoodId
|
|
705
|
+
const key = `${releaseGoodId}_${ws.type}`
|
|
706
|
+
if (!worksheetMap.has(key)) {
|
|
707
|
+
worksheetMap.set(key, {
|
|
708
|
+
id: ws.id,
|
|
709
|
+
type: ws.type,
|
|
710
|
+
status: ws.status,
|
|
711
|
+
name: ws.name
|
|
712
|
+
})
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
|
|
660
716
|
items = await Promise.all(
|
|
661
717
|
items
|
|
662
718
|
.filter(item => {
|
|
@@ -667,43 +723,53 @@ export class ReleaseGoodQuery {
|
|
|
667
723
|
where: { releaseGood: item, domain, bizplace: item.bizplace }
|
|
668
724
|
})
|
|
669
725
|
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
}
|
|
726
|
+
let newPlatformCode
|
|
727
|
+
|
|
728
|
+
if (item.platformCode) {
|
|
729
|
+
if (item.platformCode == 'LZD') {
|
|
730
|
+
newPlatformCode = 'Lazada'
|
|
731
|
+
} else if (item.platformCode == 'SHP') {
|
|
732
|
+
newPlatformCode = 'Shopee'
|
|
733
|
+
} else if (item.platformCode == 'TTK') {
|
|
734
|
+
newPlatformCode = 'Tiktok'
|
|
735
|
+
} else if (item.platformCode == 'SPF') {
|
|
736
|
+
newPlatformCode = 'Shopify'
|
|
682
737
|
}
|
|
738
|
+
}
|
|
683
739
|
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
740
|
+
if (
|
|
741
|
+
item.lastMileDelivery &&
|
|
742
|
+
item.lastMileDelivery.isTms &&
|
|
743
|
+
item.lastMileDelivery.platform === 'VERSA_FLEET'
|
|
744
|
+
) {
|
|
745
|
+
item.refNo2 = item.vehicleNo ? item.vehicleNo : item.refNo2
|
|
746
|
+
}
|
|
691
747
|
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
748
|
+
const worksheetStatus = (item.status === 'PROCESSING' || item.status === 'PARTIAL_PROCESSING') ? 'LOADING' : item.status
|
|
749
|
+
const worksheetKey = `${item.id}_${worksheetStatus}`
|
|
750
|
+
const worksheet = worksheetMap.get(worksheetKey) || null
|
|
751
|
+
|
|
752
|
+
return {
|
|
753
|
+
...item,
|
|
754
|
+
platformCode: newPlatformCode ? newPlatformCode : item.platformCode,
|
|
755
|
+
transporter: orderPackages?.length
|
|
756
|
+
? [
|
|
757
|
+
...new Set(
|
|
758
|
+
orderPackages.map(op => {
|
|
759
|
+
return op.transporter
|
|
760
|
+
})
|
|
761
|
+
)
|
|
762
|
+
].join(', ')
|
|
763
|
+
: null,
|
|
764
|
+
orderRemark: item?.remark ? true : false,
|
|
765
|
+
activeWorksheet: worksheet
|
|
766
|
+
? {
|
|
767
|
+
type: worksheet.type,
|
|
768
|
+
status: worksheet.status
|
|
769
|
+
}
|
|
770
|
+
: null
|
|
771
|
+
}
|
|
772
|
+
})
|
|
707
773
|
)
|
|
708
774
|
console.timeEnd('t1')
|
|
709
775
|
return { items, total }
|
|
@@ -1067,7 +1133,7 @@ export async function bulkReleaseGoodsAvailableItemsFunction(
|
|
|
1067
1133
|
AND i.uom = foo.uom
|
|
1068
1134
|
AND i.domain_id = $1
|
|
1069
1135
|
AND i.bizplace_id = $2
|
|
1070
|
-
WHERE l.type NOT IN ($3, $4)
|
|
1136
|
+
WHERE l.type NOT IN ($3, $4, $8)
|
|
1071
1137
|
AND i.status = 'STORED'
|
|
1072
1138
|
AND i.obsolete = false
|
|
1073
1139
|
AND i.transfer_qty <= 0
|
|
@@ -1100,7 +1166,8 @@ export async function bulkReleaseGoodsAvailableItemsFunction(
|
|
|
1100
1166
|
LOCATION_TYPE.RESERVE,
|
|
1101
1167
|
uniqueWarehouseCodes.length === 1 ? uniqueWarehouseCodes[0] : null,
|
|
1102
1168
|
uniqueBatchIds.length === 1 ? uniqueBatchIds[0] : null,
|
|
1103
|
-
releaseShelfLifeOverride
|
|
1169
|
+
releaseShelfLifeOverride,
|
|
1170
|
+
LOCATION_TYPE.DAMAGE
|
|
1104
1171
|
]
|
|
1105
1172
|
)
|
|
1106
1173
|
|
|
@@ -184,6 +184,15 @@ export class ItemCounts {
|
|
|
184
184
|
pending: number
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
+
@ObjectType()
|
|
188
|
+
export class WorksheetBasicInfo {
|
|
189
|
+
@Field({ nullable: true })
|
|
190
|
+
type?: string
|
|
191
|
+
|
|
192
|
+
@Field({ nullable: true })
|
|
193
|
+
status?: string
|
|
194
|
+
}
|
|
195
|
+
|
|
187
196
|
@ObjectType()
|
|
188
197
|
export class TabCountItem {
|
|
189
198
|
@Field()
|
|
@@ -35,7 +35,8 @@ import {
|
|
|
35
35
|
ShippingOrder,
|
|
36
36
|
ShippingOrderInfo,
|
|
37
37
|
ItemCounts,
|
|
38
|
-
TabCounts
|
|
38
|
+
TabCounts,
|
|
39
|
+
WorksheetBasicInfo
|
|
39
40
|
} from '../'
|
|
40
41
|
import { ReleaseOrderType } from '../../constants'
|
|
41
42
|
|
|
@@ -678,4 +679,7 @@ export class ReleaseGood {
|
|
|
678
679
|
|
|
679
680
|
@Field(() => TabCounts, { nullable: true })
|
|
680
681
|
tabCounts: TabCounts
|
|
682
|
+
|
|
683
|
+
@Field(() => WorksheetBasicInfo, { nullable: true })
|
|
684
|
+
activeWorksheet?: WorksheetBasicInfo
|
|
681
685
|
}
|
|
@@ -949,7 +949,7 @@ export const InventoryUtil = {
|
|
|
949
949
|
|
|
950
950
|
let locationTypes = [LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE]
|
|
951
951
|
|
|
952
|
-
if (recall
|
|
952
|
+
if (recall !== true) {
|
|
953
953
|
locationTypes.push(LOCATION_TYPE.DAMAGE)
|
|
954
954
|
}
|
|
955
955
|
|
|
@@ -1413,7 +1413,8 @@ export function _composeTargetInventories(
|
|
|
1413
1413
|
|
|
1414
1414
|
let orderInventories: Partial<OrderInventory[]> = []
|
|
1415
1415
|
let idx = 0
|
|
1416
|
-
|
|
1416
|
+
const EPSILON = 1e-6
|
|
1417
|
+
while (compReleaseQty + EPSILON < record.releaseQty && idx < inventories.length) {
|
|
1417
1418
|
const inventory = inventories[idx]
|
|
1418
1419
|
const {
|
|
1419
1420
|
packingType,
|
|
@@ -1466,5 +1467,9 @@ export function _composeTargetInventories(
|
|
|
1466
1467
|
idx++
|
|
1467
1468
|
}
|
|
1468
1469
|
|
|
1470
|
+
if (orderInventories.length === 0) {
|
|
1471
|
+
throw new Error(`no inventories could be allocated for ${product?.sku}`)
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1469
1474
|
return orderInventories
|
|
1470
1475
|
}
|
|
@@ -78,6 +78,18 @@ export class OrderNoGenerator {
|
|
|
78
78
|
return `OPKI-${uuidv4()}`
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
static loadingPackage() {
|
|
82
|
+
const currentDate = new Date()
|
|
83
|
+
const randomString = Math.random().toString(36).slice(2, 5)
|
|
84
|
+
return `LPK${currentDate.getFullYear()}${
|
|
85
|
+
currentDate.getMonth() + 1
|
|
86
|
+
}${currentDate.getDate()}${currentDate.getHours()}${currentDate.getMinutes()}${currentDate.getSeconds()}${currentDate.getMilliseconds()}${randomString}`
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
static loadingPackageItem() {
|
|
90
|
+
return `LPKI-${uuidv4()}`
|
|
91
|
+
}
|
|
92
|
+
|
|
81
93
|
static invoiceProduct() {
|
|
82
94
|
return `IP-${uuidv4()}`
|
|
83
95
|
}
|