@things-factory/sales-base 3.7.12 → 3.8.0
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/validation-error-code.js +2 -1
- package/dist-server/constants/validation-error-code.js.map +1 -1
- package/dist-server/entities/release-good.js +4 -0
- package/dist-server/entities/release-good.js.map +1 -1
- package/dist-server/graphql/resolvers/arrival-notice/update-arrival-notice-details.js +28 -0
- package/dist-server/graphql/resolvers/arrival-notice/update-arrival-notice-details.js.map +1 -0
- package/dist-server/graphql/resolvers/order-inventory/inventories-by-order.js +1 -1
- package/dist-server/graphql/resolvers/order-inventory/inventories-by-order.js.map +1 -1
- package/dist-server/graphql/resolvers/release-good/bulk-add-release-goods.js +213 -0
- package/dist-server/graphql/resolvers/release-good/bulk-add-release-goods.js.map +1 -0
- package/dist-server/graphql/resolvers/release-good/bulk-release-goods-available-items.js +163 -0
- package/dist-server/graphql/resolvers/release-good/bulk-release-goods-available-items.js.map +1 -0
- package/dist-server/graphql/resolvers/release-good/generate-release-good.js +2 -1
- package/dist-server/graphql/resolvers/release-good/generate-release-good.js.map +1 -1
- package/dist-server/graphql/resolvers/release-good/index.js +5 -3
- package/dist-server/graphql/resolvers/release-good/index.js.map +1 -1
- package/dist-server/graphql/resolvers/release-good/release-good-requests.js +17 -0
- package/dist-server/graphql/resolvers/release-good/release-good-requests.js.map +1 -1
- package/dist-server/graphql/resolvers/release-good/update-release-good-details.js +4 -5
- package/dist-server/graphql/resolvers/release-good/update-release-good-details.js.map +1 -1
- package/dist-server/graphql/resolvers/return-order/generate-return-order.js +2 -4
- package/dist-server/graphql/resolvers/return-order/generate-return-order.js.map +1 -1
- package/dist-server/graphql/types/order-inventory/order-inventory.js +1 -0
- package/dist-server/graphql/types/order-inventory/order-inventory.js.map +1 -1
- package/dist-server/graphql/types/others/inventory-product-group.js +1 -0
- package/dist-server/graphql/types/others/inventory-product-group.js.map +1 -1
- package/dist-server/graphql/types/release-good/index.js +14 -0
- package/dist-server/graphql/types/release-good/index.js.map +1 -1
- package/dist-server/graphql/types/release-good/new-raw-release-good.js +62 -0
- package/dist-server/graphql/types/release-good/new-raw-release-good.js.map +1 -0
- package/dist-server/graphql/types/release-good/raw-release-good.js +65 -0
- package/dist-server/graphql/types/release-good/raw-release-good.js.map +1 -0
- package/dist-server/graphql/types/release-good/release-good.js +1 -0
- package/dist-server/graphql/types/release-good/release-good.js.map +1 -1
- package/dist-server/utils/inventory-util.js +10 -1
- package/dist-server/utils/inventory-util.js.map +1 -1
- package/package.json +12 -12
- package/server/constants/validation-error-code.ts +3 -2
- package/server/entities/release-good.ts +3 -0
- package/server/graphql/resolvers/arrival-notice/update-arrival-notice-details.ts +32 -0
- package/server/graphql/resolvers/order-inventory/inventories-by-order.ts +1 -0
- package/server/graphql/resolvers/release-good/bulk-add-release-goods.ts +343 -0
- package/server/graphql/resolvers/release-good/bulk-release-goods-available-items.ts +207 -0
- package/server/graphql/resolvers/release-good/generate-release-good.ts +3 -2
- package/server/graphql/resolvers/release-good/index.ts +5 -1
- package/server/graphql/resolvers/release-good/release-good-requests.ts +23 -0
- package/server/graphql/resolvers/release-good/update-release-good-details.ts +8 -5
- package/server/graphql/resolvers/return-order/generate-return-order.ts +6 -6
- package/server/graphql/types/order-inventory/order-inventory.ts +1 -0
- package/server/graphql/types/others/inventory-product-group.ts +1 -0
- package/server/graphql/types/release-good/index.ts +14 -0
- package/server/graphql/types/release-good/new-raw-release-good.ts +56 -0
- package/server/graphql/types/release-good/raw-release-good.ts +59 -0
- package/server/graphql/types/release-good/release-good.ts +1 -0
- package/server/utils/inventory-util.ts +20 -8
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
|
|
1
3
|
import { Attachment, createAttachments } from '@things-factory/attachment-base'
|
|
2
4
|
import { User } from '@things-factory/auth-base'
|
|
3
|
-
import { Bizplace
|
|
5
|
+
import { Bizplace } from '@things-factory/biz-base'
|
|
4
6
|
import { Product } from '@things-factory/product-base'
|
|
5
7
|
import { Domain } from '@things-factory/shell'
|
|
6
8
|
import { Inventory } from '@things-factory/warehouse-base'
|
|
7
|
-
|
|
9
|
+
|
|
8
10
|
import { ORDER_STATUS } from '../../../constants'
|
|
9
11
|
import { ATTACHMENT_TYPE } from '../../../constants/attachment-type'
|
|
10
12
|
import { ORDER_INVENTORY_STATUS } from '../../../constants/order'
|
|
@@ -17,7 +19,6 @@ export const generateReturnOrder = {
|
|
|
17
19
|
|
|
18
20
|
const bizplace: Bizplace = await tx.getRepository(Bizplace).findOne(returnOrder.customerBizplaceId)
|
|
19
21
|
let orderInventories: OrderInventory[] = returnOrder.orderInventories
|
|
20
|
-
let foundInv = Inventory
|
|
21
22
|
|
|
22
23
|
let newReturnOrder: ReturnOrder = {
|
|
23
24
|
...returnOrder,
|
|
@@ -29,7 +30,7 @@ export const generateReturnOrder = {
|
|
|
29
30
|
updater: user
|
|
30
31
|
}
|
|
31
32
|
|
|
32
|
-
if (newReturnOrder.orderInventories[0].returnQty < 0) {
|
|
33
|
+
if (newReturnOrder.orderInventories[0].returnQty < 0) {
|
|
33
34
|
throw new Error('invalid return quantity')
|
|
34
35
|
}
|
|
35
36
|
|
|
@@ -47,8 +48,7 @@ export const generateReturnOrder = {
|
|
|
47
48
|
newOrderInv.updater = user
|
|
48
49
|
|
|
49
50
|
if (newOrderInv.inventory?.id) {
|
|
50
|
-
|
|
51
|
-
newOrderInv.inventory = foundInv
|
|
51
|
+
newOrderInv.inventory = await tx.getRepository(Inventory).findOne(newOrderInv.inventory?.id)
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
await tx.getRepository(OrderInventory).save(newOrderInv)
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { InventoryInfos } from './inventory-infos'
|
|
2
|
+
import { NewRawReleaseGood } from './new-raw-release-good'
|
|
2
3
|
import { NewReleaseGood } from './new-release-good'
|
|
4
|
+
import { RawReleaseGood } from './raw-release-good'
|
|
3
5
|
import { ReleasableInventory } from './releasable-inventory'
|
|
4
6
|
import { ReleasableInventoryList } from './releasable-inventory-list'
|
|
5
7
|
import { ReleaseGood } from './release-good'
|
|
@@ -9,6 +11,11 @@ import { ReleaseGoodPatch } from './release-good-patch'
|
|
|
9
11
|
import { ShippingOrderInfo } from './shipping-order-info'
|
|
10
12
|
|
|
11
13
|
export const Mutation = /* GraphQL */ `
|
|
14
|
+
bulkAddReleaseGoods (
|
|
15
|
+
rawReleaseGoods: [NewRawReleaseGood]
|
|
16
|
+
bizplaceId: String
|
|
17
|
+
): ReleaseGoodList @privilege(category: "order_customer", privilege: "mutation") @transaction
|
|
18
|
+
|
|
12
19
|
deleteReleaseGood (
|
|
13
20
|
name: String!
|
|
14
21
|
): Boolean @privilege(category: "order_customer", privilege: "mutation") @transaction
|
|
@@ -49,6 +56,11 @@ export const Mutation = /* GraphQL */ `
|
|
|
49
56
|
`
|
|
50
57
|
|
|
51
58
|
export const Query = /* GraphQL */ `
|
|
59
|
+
bulkReleaseGoodsAvailableItems (
|
|
60
|
+
rawReleaseGoods: [NewRawReleaseGood]
|
|
61
|
+
bizplaceId: String
|
|
62
|
+
): [RawReleaseGood] @privilege(category: "order_customer", privilege: "query") @transaction
|
|
63
|
+
|
|
52
64
|
releaseGoods (
|
|
53
65
|
filters: [Filter],
|
|
54
66
|
pagination: Pagination,
|
|
@@ -78,7 +90,9 @@ export const Query = /* GraphQL */ `
|
|
|
78
90
|
`
|
|
79
91
|
|
|
80
92
|
export const Types = [
|
|
93
|
+
RawReleaseGood,
|
|
81
94
|
ReleaseGood,
|
|
95
|
+
NewRawReleaseGood,
|
|
82
96
|
NewReleaseGood,
|
|
83
97
|
ReleaseGoodPatch,
|
|
84
98
|
ReleaseGoodList,
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import gql from 'graphql-tag'
|
|
2
|
+
|
|
3
|
+
export const NewRawReleaseGood = gql`
|
|
4
|
+
input NewRawReleaseGood {
|
|
5
|
+
name: String
|
|
6
|
+
releaseDate: String
|
|
7
|
+
type: String
|
|
8
|
+
collectionOrderNo: String
|
|
9
|
+
ownTransport: Boolean
|
|
10
|
+
crossDocking: Boolean
|
|
11
|
+
courierOption: Boolean
|
|
12
|
+
packingOption: Boolean
|
|
13
|
+
packageId: String
|
|
14
|
+
truckNo: String
|
|
15
|
+
refNo: String
|
|
16
|
+
refNo2: String
|
|
17
|
+
refNo3: String
|
|
18
|
+
pickupAddress: String
|
|
19
|
+
pickupTime: String
|
|
20
|
+
handoverType: String
|
|
21
|
+
dropoffAddress: String
|
|
22
|
+
marketplaceOrderStatus: String
|
|
23
|
+
billingAddress: String
|
|
24
|
+
deliveryAddress1: String
|
|
25
|
+
deliveryAddress2: String
|
|
26
|
+
deliveryAddress3: String
|
|
27
|
+
deliveryAddress4: String
|
|
28
|
+
deliveryAddress5: String
|
|
29
|
+
attentionTo: String
|
|
30
|
+
attentionCompany: String
|
|
31
|
+
city: String
|
|
32
|
+
state: String
|
|
33
|
+
postalCode: String
|
|
34
|
+
country: String
|
|
35
|
+
phone1: String
|
|
36
|
+
phone2: String
|
|
37
|
+
email: String
|
|
38
|
+
transporter: String
|
|
39
|
+
trackingNo: String
|
|
40
|
+
airwayBill: String
|
|
41
|
+
invoice: String
|
|
42
|
+
status: String
|
|
43
|
+
description: String
|
|
44
|
+
warehouseId: String #outletID
|
|
45
|
+
deliverTo: String
|
|
46
|
+
customerBizplaceId: String
|
|
47
|
+
partnerBizplaceId: String
|
|
48
|
+
batchId: String
|
|
49
|
+
packingType: String
|
|
50
|
+
packingSize: Int
|
|
51
|
+
uom: String
|
|
52
|
+
productId: String
|
|
53
|
+
sku: String
|
|
54
|
+
releaseQty: Int
|
|
55
|
+
}
|
|
56
|
+
`
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import gql from 'graphql-tag'
|
|
2
|
+
|
|
3
|
+
export const RawReleaseGood = gql`
|
|
4
|
+
type RawReleaseGood {
|
|
5
|
+
name: String
|
|
6
|
+
releaseDate: String
|
|
7
|
+
type: String
|
|
8
|
+
collectionOrderNo: String
|
|
9
|
+
ownTransport: Boolean
|
|
10
|
+
crossDocking: Boolean
|
|
11
|
+
courierOption: Boolean
|
|
12
|
+
packingOption: Boolean
|
|
13
|
+
packageId: String
|
|
14
|
+
truckNo: String
|
|
15
|
+
refNo: String
|
|
16
|
+
refNo2: String
|
|
17
|
+
refNo3: String
|
|
18
|
+
pickupAddress: String
|
|
19
|
+
pickupTime: String
|
|
20
|
+
handoverType: String
|
|
21
|
+
dropoffAddress: String
|
|
22
|
+
marketplaceOrderStatus: String
|
|
23
|
+
billingAddress: String
|
|
24
|
+
deliveryAddress1: String
|
|
25
|
+
deliveryAddress2: String
|
|
26
|
+
deliveryAddress3: String
|
|
27
|
+
deliveryAddress4: String
|
|
28
|
+
deliveryAddress5: String
|
|
29
|
+
attentionTo: String
|
|
30
|
+
attentionCompany: String
|
|
31
|
+
city: String
|
|
32
|
+
state: String
|
|
33
|
+
postalCode: String
|
|
34
|
+
country: String
|
|
35
|
+
phone1: String
|
|
36
|
+
phone2: String
|
|
37
|
+
email: String
|
|
38
|
+
transporter: String
|
|
39
|
+
trackingNo: String
|
|
40
|
+
airwayBill: String
|
|
41
|
+
invoice: String
|
|
42
|
+
status: String
|
|
43
|
+
description: String
|
|
44
|
+
warehouseId: String #outletID
|
|
45
|
+
deliverTo: String
|
|
46
|
+
customerBizplaceId: String
|
|
47
|
+
partnerBizplaceId: String
|
|
48
|
+
batchId: String
|
|
49
|
+
packingType: String
|
|
50
|
+
packingSize: Int
|
|
51
|
+
uom: String
|
|
52
|
+
productId: String
|
|
53
|
+
sku: String
|
|
54
|
+
releaseQty: Int
|
|
55
|
+
releaseUomValue: Float
|
|
56
|
+
assignedQty: Int
|
|
57
|
+
assignedUomValue: Float
|
|
58
|
+
}
|
|
59
|
+
`
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
InventoryNoGenerator,
|
|
12
12
|
Location,
|
|
13
13
|
LOCATION_STATUS,
|
|
14
|
+
LOCATION_TYPE,
|
|
14
15
|
Pallet
|
|
15
16
|
} from '@things-factory/warehouse-base'
|
|
16
17
|
|
|
@@ -99,6 +100,7 @@ export const InventoryUtil = {
|
|
|
99
100
|
i.uom AS "uom",
|
|
100
101
|
concat(p.name, ' (', p.description, ')') AS "productName",
|
|
101
102
|
coalesce(p.sku, '') AS "productSKU",
|
|
103
|
+
coalesce(p.brand, '') AS "productBrand",
|
|
102
104
|
p.id AS "productId",
|
|
103
105
|
SUM(COALESCE(i.qty, 0)) - SUM(COALESCE(i.locked_qty, 0)) - MAX(COALESCE(oi.release_qty, 0)) - MAX(COALESCE(bp.bundle_product_release_qty, 0)) AS "remainQty",
|
|
104
106
|
SUM(COALESCE(i.uom_value, 0)) - SUM(COALESCE(i.locked_uom_value, 0)) - MAX(COALESCE(oi.release_uom_value, 0)) - MAX(COALESCE(bp.bundle_product_release_uom_value, 0)) AS "remainUomValue",
|
|
@@ -108,6 +110,7 @@ export const InventoryUtil = {
|
|
|
108
110
|
inventories i
|
|
109
111
|
LEFT JOIN products p ON i.product_id = p.id
|
|
110
112
|
LEFT JOIN oi ON i.batch_id = oi.batch_id AND p.name = oi.product_name AND i.packing_type = oi.packing_type AND i.packing_size = oi.packing_size AND i.uom = oi.uom
|
|
113
|
+
LEFT JOIN locations l2 ON i.location_id = l2.id AND i.domain_id = l2.domain_id
|
|
111
114
|
LEFT JOIN (
|
|
112
115
|
SELECT pbs.product_id, SUM(pbs.bundle_qty * src.release_qty) AS bundle_product_release_qty, SUM(pbs.bundle_qty * src.release_uom_value) AS bundle_product_release_uom_value
|
|
113
116
|
FROM product_bundle_settings pbs
|
|
@@ -115,6 +118,7 @@ export const InventoryUtil = {
|
|
|
115
118
|
GROUP BY pbs.product_id
|
|
116
119
|
) bp on i.product_id = bp.product_id
|
|
117
120
|
WHERE i.domain_id = $1
|
|
121
|
+
AND l2.type NOT IN ('${LOCATION_TYPE.QUARANTINE}', '${LOCATION_TYPE.RESERVE}')
|
|
118
122
|
${productWhereClause}
|
|
119
123
|
GROUP BY
|
|
120
124
|
i.batch_id,
|
|
@@ -124,7 +128,7 @@ export const InventoryUtil = {
|
|
|
124
128
|
i.packing_size,
|
|
125
129
|
i.uom
|
|
126
130
|
UNION
|
|
127
|
-
SELECT 'BUNDLE' AS "batchId", null as "batchIdRef", packing_type, packing_size,'UNIT' AS "uom", name AS "productName", sku AS "productSKU", id AS "productId",
|
|
131
|
+
SELECT 'BUNDLE' AS "batchId", null as "batchIdRef", packing_type, packing_size,'UNIT' AS "uom", name AS "productName", sku AS "productSKU", 'brand' AS "productBrand", id AS "productId",
|
|
128
132
|
MIN(FLOOR(pbs."availableQty")) AS "remainQty",
|
|
129
133
|
MIN(FLOOR(pbs."availableUomValue")) AS "remainUomValue",
|
|
130
134
|
CONCAT(MIN(FLOOR(pbs."availableUomValue")),' UNIT') AS "remainUomValueWithUom",
|
|
@@ -336,6 +340,10 @@ async function getConditions(
|
|
|
336
340
|
whereClause += `AND LOWER("batchIdRef") LIKE '${value.toLowerCase()}'`
|
|
337
341
|
break
|
|
338
342
|
|
|
343
|
+
case 'productBrand':
|
|
344
|
+
whereClause += `AND LOWER("productBrand") LIKE '${value.toLowerCase()}'`
|
|
345
|
+
break
|
|
346
|
+
|
|
339
347
|
case 'productName':
|
|
340
348
|
const products: Product[] = await trxMgr.getRepository(Product).find({
|
|
341
349
|
select: ['id'],
|
|
@@ -417,22 +425,26 @@ async function getConditions(
|
|
|
417
425
|
whereClause += `AND LOWER("groupType") LIKE 'bundle'`
|
|
418
426
|
break
|
|
419
427
|
|
|
428
|
+
case 'hideBundle':
|
|
429
|
+
whereClause += `AND LOWER("groupType") LIKE 'single'`
|
|
430
|
+
break
|
|
431
|
+
|
|
420
432
|
case 'batch_product':
|
|
421
433
|
productWhereClause += `
|
|
422
434
|
AND (i.batch_id, p.id, i.packing_type) ${operator === 'in' ? 'IN' : 'NOT IN'} (${value
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
435
|
+
.map(
|
|
436
|
+
(v: { batchId: string; productId: string; packingType: string }) =>
|
|
437
|
+
`('${v.batchId}', '${v.productId}', '${v.packingType}')`
|
|
438
|
+
)
|
|
439
|
+
.join()})
|
|
428
440
|
`
|
|
429
441
|
break
|
|
430
442
|
|
|
431
443
|
case 'batch_bundle':
|
|
432
444
|
bundleWhereClause += `
|
|
433
445
|
${bundleWhereClause == '' ? 'WHERE' : 'AND'} pb.id ${operator === 'in' ? 'IN' : 'NOT IN'} (${value
|
|
434
|
-
|
|
435
|
-
|
|
446
|
+
.map((v: { productId: string }) => `('${v.productId}')`)
|
|
447
|
+
.join()})
|
|
436
448
|
`
|
|
437
449
|
break
|
|
438
450
|
}
|