@things-factory/sales-base 4.0.28 → 4.0.32
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/arrival-notice/arrival-notice-mutation.js +2 -2
- package/dist-server/service/arrival-notice/arrival-notice-mutation.js.map +1 -1
- package/dist-server/service/arrival-notice/arrival-notice-query.js +26 -17
- package/dist-server/service/arrival-notice/arrival-notice-query.js.map +1 -1
- package/dist-server/service/arrival-notice/arrival-notice-types.js +5 -1
- package/dist-server/service/arrival-notice/arrival-notice-types.js.map +1 -1
- package/dist-server/service/arrival-notice/arrival-notice.js +1 -1
- package/dist-server/service/arrival-notice/arrival-notice.js.map +1 -1
- package/dist-server/service/order-inventory/order-inventory.js +24 -0
- package/dist-server/service/order-inventory/order-inventory.js.map +1 -1
- package/dist-server/service/others/other-query.js +5 -8
- package/dist-server/service/others/other-query.js.map +1 -1
- package/dist-server/service/purchase-order/purchase-order-mutation.js +1 -1
- package/dist-server/service/purchase-order/purchase-order-mutation.js.map +1 -1
- package/dist-server/service/release-good/release-good-query.js +16 -11
- package/dist-server/service/release-good/release-good-query.js.map +1 -1
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.js +5 -4
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-mutation.js.map +1 -1
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.js +1 -2
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-query.js.map +1 -1
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.js +1 -1
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order-type.js.map +1 -1
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order.js +51 -4
- package/dist-server/service/reverse-kitting-order/reverse-kitting-order.js.map +1 -1
- package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.js +9 -1
- package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.js.map +1 -1
- package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js +35 -3
- package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js.map +1 -1
- package/package.json +12 -12
- package/server/service/arrival-notice/arrival-notice-mutation.ts +1 -1
- package/server/service/arrival-notice/arrival-notice-query.ts +28 -17
- package/server/service/arrival-notice/arrival-notice-types.ts +4 -1
- package/server/service/arrival-notice/arrival-notice.ts +1 -1
- package/server/service/order-inventory/order-inventory.ts +18 -0
- package/server/service/others/other-query.ts +5 -16
- package/server/service/purchase-order/purchase-order-mutation.ts +1 -1
- package/server/service/release-good/release-good-query.ts +18 -12
- package/server/service/reverse-kitting-order/reverse-kitting-order-mutation.ts +2 -1
- package/server/service/reverse-kitting-order/reverse-kitting-order-query.ts +1 -2
- package/server/service/reverse-kitting-order/reverse-kitting-order-type.ts +2 -2
- package/server/service/reverse-kitting-order/reverse-kitting-order.ts +39 -3
- package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.ts +7 -1
- package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.ts +25 -0
package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js
CHANGED
|
@@ -8,7 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
-
var _a, _b, _c, _d, _e;
|
|
11
|
+
var _a, _b, _c, _d, _e, _f;
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
13
|
exports.ReverseKittingOrderInventory = void 0;
|
|
14
14
|
const type_graphql_1 = require("type-graphql");
|
|
@@ -17,6 +17,8 @@ const auth_base_1 = require("@things-factory/auth-base");
|
|
|
17
17
|
const biz_base_1 = require("@things-factory/biz-base");
|
|
18
18
|
const shell_1 = require("@things-factory/shell");
|
|
19
19
|
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
20
|
+
const product_base_1 = require("@things-factory/product-base");
|
|
21
|
+
const vas_1 = require("../vas/vas");
|
|
20
22
|
const reverse_kitting_order_1 = require("../reverse-kitting-order/reverse-kitting-order");
|
|
21
23
|
let ReverseKittingOrderInventory = class ReverseKittingOrderInventory {
|
|
22
24
|
};
|
|
@@ -100,6 +102,36 @@ __decorate([
|
|
|
100
102
|
(0, type_graphql_1.Field)(),
|
|
101
103
|
__metadata("design:type", String)
|
|
102
104
|
], ReverseKittingOrderInventory.prototype, "status", void 0);
|
|
105
|
+
__decorate([
|
|
106
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
107
|
+
__metadata("design:type", String)
|
|
108
|
+
], ReverseKittingOrderInventory.prototype, "targetType", void 0);
|
|
109
|
+
__decorate([
|
|
110
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
111
|
+
__metadata("design:type", String)
|
|
112
|
+
], ReverseKittingOrderInventory.prototype, "targetBatchId", void 0);
|
|
113
|
+
__decorate([
|
|
114
|
+
(0, typeorm_1.ManyToOne)(type => product_base_1.Product, { nullable: true }),
|
|
115
|
+
(0, type_graphql_1.Field)(type => product_base_1.Product, { nullable: true }),
|
|
116
|
+
__metadata("design:type", typeof (_d = typeof product_base_1.Product !== "undefined" && product_base_1.Product) === "function" ? _d : Object)
|
|
117
|
+
], ReverseKittingOrderInventory.prototype, "targetProduct", void 0);
|
|
118
|
+
__decorate([
|
|
119
|
+
(0, typeorm_1.ManyToOne)(type => vas_1.Vas, { nullable: true }),
|
|
120
|
+
(0, type_graphql_1.Field)(type => vas_1.Vas, { nullable: true }),
|
|
121
|
+
__metadata("design:type", vas_1.Vas)
|
|
122
|
+
], ReverseKittingOrderInventory.prototype, "vas", void 0);
|
|
123
|
+
__decorate([
|
|
124
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
125
|
+
__metadata("design:type", String)
|
|
126
|
+
], ReverseKittingOrderInventory.prototype, "otherTarget", void 0);
|
|
127
|
+
__decorate([
|
|
128
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
129
|
+
__metadata("design:type", String)
|
|
130
|
+
], ReverseKittingOrderInventory.prototype, "description", void 0);
|
|
131
|
+
__decorate([
|
|
132
|
+
(0, type_graphql_1.Field)({ nullable: true }),
|
|
133
|
+
__metadata("design:type", String)
|
|
134
|
+
], ReverseKittingOrderInventory.prototype, "issue", void 0);
|
|
103
135
|
__decorate([
|
|
104
136
|
(0, typeorm_1.CreateDateColumn)(),
|
|
105
137
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
@@ -113,7 +145,7 @@ __decorate([
|
|
|
113
145
|
__decorate([
|
|
114
146
|
(0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
|
|
115
147
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
116
|
-
__metadata("design:type", typeof (
|
|
148
|
+
__metadata("design:type", typeof (_e = typeof auth_base_1.User !== "undefined" && auth_base_1.User) === "function" ? _e : Object)
|
|
117
149
|
], ReverseKittingOrderInventory.prototype, "creator", void 0);
|
|
118
150
|
__decorate([
|
|
119
151
|
(0, typeorm_1.RelationId)((reverseKittingOrderInventory) => reverseKittingOrderInventory.creator),
|
|
@@ -122,7 +154,7 @@ __decorate([
|
|
|
122
154
|
__decorate([
|
|
123
155
|
(0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
|
|
124
156
|
(0, type_graphql_1.Field)({ nullable: true }),
|
|
125
|
-
__metadata("design:type", typeof (
|
|
157
|
+
__metadata("design:type", typeof (_f = typeof auth_base_1.User !== "undefined" && auth_base_1.User) === "function" ? _f : Object)
|
|
126
158
|
], ReverseKittingOrderInventory.prototype, "updater", void 0);
|
|
127
159
|
__decorate([
|
|
128
160
|
(0, typeorm_1.RelationId)((reverseKittingOrderInventory) => reverseKittingOrderInventory.creator),
|
package/dist-server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reverse-kitting-order-inventory.js","sourceRoot":"","sources":["../../../server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,+CAAoD;AACpD,qCASgB;AAEhB,yDAAgD;AAChD,uDAAmD;AACnD,iDAA8C;AAC9C,mEAA0D;
|
|
1
|
+
{"version":3,"file":"reverse-kitting-order-inventory.js","sourceRoot":"","sources":["../../../server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/sales-base",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.32",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -24,16 +24,16 @@
|
|
|
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.0.
|
|
28
|
-
"@things-factory/auth-base": "^4.0.
|
|
29
|
-
"@things-factory/biz-base": "^4.0.
|
|
30
|
-
"@things-factory/code-base": "^4.0.
|
|
31
|
-
"@things-factory/notification": "^4.0.
|
|
32
|
-
"@things-factory/product-base": "^4.0.
|
|
33
|
-
"@things-factory/setting-base": "^4.0.
|
|
34
|
-
"@things-factory/shell": "^4.0.
|
|
35
|
-
"@things-factory/transport-base": "^4.0.
|
|
36
|
-
"@things-factory/warehouse-base": "^4.0.
|
|
27
|
+
"@things-factory/attachment-base": "^4.0.32",
|
|
28
|
+
"@things-factory/auth-base": "^4.0.32",
|
|
29
|
+
"@things-factory/biz-base": "^4.0.32",
|
|
30
|
+
"@things-factory/code-base": "^4.0.32",
|
|
31
|
+
"@things-factory/notification": "^4.0.32",
|
|
32
|
+
"@things-factory/product-base": "^4.0.32",
|
|
33
|
+
"@things-factory/setting-base": "^4.0.32",
|
|
34
|
+
"@things-factory/shell": "^4.0.32",
|
|
35
|
+
"@things-factory/transport-base": "^4.0.32",
|
|
36
|
+
"@things-factory/warehouse-base": "^4.0.32"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "a1a16e7d4531ae3ff035295fc7bf05bf0d3153a7"
|
|
39
39
|
}
|
|
@@ -440,7 +440,7 @@ export async function generateArrivalNoticeFunction(
|
|
|
440
440
|
|
|
441
441
|
const settingRepo: Repository<Setting> = tx?.getRepository(Setting) || getRepository(Setting)
|
|
442
442
|
|
|
443
|
-
if (arrivalNotice.
|
|
443
|
+
if (arrivalNotice.bizplace) myBizplace = arrivalNotice.bizplace
|
|
444
444
|
else if (arrivalNotice.customerBizplaceId) {
|
|
445
445
|
const permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)
|
|
446
446
|
let foundPermittedBizplace: Bizplace = permittedBizplaces.find(biz => biz.id == arrivalNotice.customerBizplaceId)
|
|
@@ -441,18 +441,21 @@ export async function validateBulkArrivalNoticesFunction(
|
|
|
441
441
|
tp.pack_qty,
|
|
442
442
|
pd.uom_value,
|
|
443
443
|
pd.uom,
|
|
444
|
-
CONCAT(COALESCE(ROUND(pd.uom_value :: numeric, 2), 0) * tp.pack_qty, ' ', pd.uom) AS total_uom_value,
|
|
444
|
+
CONCAT(COALESCE(ROUND(pd.uom_value :: numeric, 2), 0) * COALESCE(tp.pack_qty, 0), ' ', pd.uom) AS total_uom_value,
|
|
445
445
|
tp.pallet_qty,
|
|
446
446
|
tp.unit_price,
|
|
447
447
|
tp.manufacture_year,
|
|
448
|
-
CASE WHEN an.id NOTNULL THEN CONCAT('duplicated with ', an.name)
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
448
|
+
CASE WHEN an.id NOTNULL THEN CONCAT('duplicated with ', an.name)
|
|
449
|
+
WHEN pr.id ISNULL OR pd.id ISNULL OR tp.sku ISNULL THEN 'product not found'
|
|
450
|
+
WHEN tp.pack_qty ISNULL OR tp.pack_qty <= 0 THEN 'invalid pack qty'
|
|
451
|
+
WHEN tp.batch_id ISNULL THEN 'batch no. is required'
|
|
452
|
+
WHEN tp.ref_no ISNULL OR tp.ref_no = '' THEN 'ref no. is required'
|
|
453
|
+
WHEN tp.eta_date ISNULL OR tp.eta_date = '' THEN 'eta date is required'
|
|
454
|
+
WHEN tp.eta_date::date < now()::date THEN 'backdate is not allowed'
|
|
455
|
+
WHEN tp.container_no NOTNULL AND tp.container_size ISNULL OR tp.container_no ISNULL AND tp.container_size NOTNULL THEN 'incomplete container information'
|
|
456
|
+
WHEN tp.unit_price < 0 THEN 'invalid unit price'
|
|
457
|
+
WHEN tp.pallet_qty < 0 THEN 'invalid pallet qty'
|
|
458
|
+
ELSE '' END AS errorMsg
|
|
456
459
|
FROM
|
|
457
460
|
temp_order_products tp
|
|
458
461
|
LEFT JOIN arrival_notices an ON tp.ref_no = an.ref_no
|
|
@@ -465,13 +468,15 @@ export async function validateBulkArrivalNoticesFunction(
|
|
|
465
468
|
AND CASE WHEN tp.container_size NOTNULL THEN tp.container_size = an.container_size ELSE 1 = 1 END
|
|
466
469
|
AND CASE WHEN tp.loose_item NOTNULL THEN tp.loose_item = an.loose_item ELSE 1 = 1 END
|
|
467
470
|
AND CASE WHEN tp.import_cargo NOTNULL THEN tp.import_cargo = an.import_cargo ELSE 1 = 1 END
|
|
468
|
-
LEFT JOIN products pr ON pr.sku = tp.sku
|
|
469
|
-
LEFT JOIN product_details pd ON pr.id = pd.product_id
|
|
470
|
-
AND CASE WHEN tp.packing_type NOTNULL
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
471
|
+
LEFT JOIN products pr ON LOWER(pr.sku) = LOWER(tp.sku)
|
|
472
|
+
LEFT JOIN product_details pd ON pr.id = pd.product_id
|
|
473
|
+
AND CASE WHEN tp.packing_type NOTNULL AND tp.packing_size NOTNULL AND tp.uom NOTNULL
|
|
474
|
+
THEN pd.packing_type = tp.packing_type AND pd.packing_size = tp.packing_size AND pd.uom = tp.uom
|
|
475
|
+
WHEN tp.packing_type NOTNULL AND tp.packing_size NOTNULL AND tp.uom ISNULL
|
|
476
|
+
THEN pd.packing_type = tp.packing_type AND pd.packing_size = tp.packing_size AND pd.is_default IS TRUE
|
|
477
|
+
WHEN tp.packing_type ISNULL AND tp.packing_size ISNULL AND tp.uom NOTNULL
|
|
478
|
+
THEN pd.uom = tp.uom AND pd.is_default IS TRUE ELSE pd.is_default IS TRUE
|
|
479
|
+
END
|
|
475
480
|
WHERE
|
|
476
481
|
pr.bizplace_id = $1
|
|
477
482
|
|
|
@@ -482,6 +487,12 @@ export async function validateBulkArrivalNoticesFunction(
|
|
|
482
487
|
await trxMgr.query('DROP TABLE temp_order_products')
|
|
483
488
|
|
|
484
489
|
return validatedItems.map(item => {
|
|
490
|
+
let manufactureYear = item.manufacture_year
|
|
491
|
+
|
|
492
|
+
const regExp = /^(181[2-9]|18[2-9]\d|19\d\d|2\d{3}|30[0-3]\d|304[0-8])$/
|
|
493
|
+
|
|
494
|
+
if (manufactureYear && !regExp.test(manufactureYear) && !item.errorMsg) item.errorMsg = 'invalid manufacture year'
|
|
495
|
+
|
|
485
496
|
return {
|
|
486
497
|
refNo: item.ref_no,
|
|
487
498
|
refNo2: item.ref_no_2,
|
|
@@ -508,7 +519,7 @@ export async function validateBulkArrivalNoticesFunction(
|
|
|
508
519
|
palletQty: item.pallet_qty,
|
|
509
520
|
unitPrice: item.unit_price,
|
|
510
521
|
manufactureYear: item.manufacture_year,
|
|
511
|
-
|
|
522
|
+
errorMsg: item.errorMsg
|
|
512
523
|
}
|
|
513
524
|
})
|
|
514
525
|
}
|
|
@@ -121,6 +121,9 @@ export class NewArrivalNotice {
|
|
|
121
121
|
|
|
122
122
|
@Field(type => Int, { nullable: true })
|
|
123
123
|
manufactureYear?: number
|
|
124
|
+
|
|
125
|
+
@Field({ nullable: true })
|
|
126
|
+
errorMsg: string
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
@InputType()
|
|
@@ -288,5 +291,5 @@ export class RawArrivalNotice {
|
|
|
288
291
|
manufactureYear?: number
|
|
289
292
|
|
|
290
293
|
@Field({ nullable: true })
|
|
291
|
-
|
|
294
|
+
errorMsg?: string
|
|
292
295
|
}
|
|
@@ -145,7 +145,7 @@ export class ArrivalNotice {
|
|
|
145
145
|
|
|
146
146
|
@OneToOne(type => PurchaseOrder, { nullable: true })
|
|
147
147
|
@JoinColumn()
|
|
148
|
-
@Field(type =>
|
|
148
|
+
@Field(type => PurchaseOrder, { nullable: true })
|
|
149
149
|
purchaseOrder: PurchaseOrder
|
|
150
150
|
|
|
151
151
|
@CreateDateColumn()
|
|
@@ -256,6 +256,9 @@ export class OrderInventory {
|
|
|
256
256
|
@Field({ nullable: true })
|
|
257
257
|
productName: string
|
|
258
258
|
|
|
259
|
+
@Field({ nullable: true })
|
|
260
|
+
productSKU: string
|
|
261
|
+
|
|
259
262
|
@Field({ nullable: true })
|
|
260
263
|
productBrand: string
|
|
261
264
|
|
|
@@ -303,6 +306,21 @@ export class OrderInventory {
|
|
|
303
306
|
@Field({ nullable: true })
|
|
304
307
|
status: string
|
|
305
308
|
|
|
309
|
+
@Field({ nullable: true })
|
|
310
|
+
remainQty: number
|
|
311
|
+
|
|
312
|
+
@Field({ nullable: true })
|
|
313
|
+
remainUomValue: string
|
|
314
|
+
|
|
315
|
+
@Field({ nullable: true })
|
|
316
|
+
remainUomValueWithUom: string
|
|
317
|
+
|
|
318
|
+
@Field({ nullable: true })
|
|
319
|
+
isError: boolean
|
|
320
|
+
|
|
321
|
+
@Field({ nullable: true })
|
|
322
|
+
groupType: string
|
|
323
|
+
|
|
306
324
|
@CreateDateColumn()
|
|
307
325
|
@Field()
|
|
308
326
|
createdAt: Date
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import orderBy from 'lodash/orderBy'
|
|
2
|
-
import { Arg, Ctx, Directive, Query, Resolver } from 'type-graphql'
|
|
2
|
+
import { Arg, Args, Ctx, Directive, Query, Resolver } from 'type-graphql'
|
|
3
3
|
import { EntityManager } from 'typeorm'
|
|
4
4
|
|
|
5
5
|
import { User } from '@things-factory/auth-base'
|
|
6
6
|
import { Bizplace, getPermittedBizplaces } from '@things-factory/biz-base'
|
|
7
7
|
import { Product, ProductDetail } from '@things-factory/product-base'
|
|
8
|
-
import { Domain,
|
|
8
|
+
import { Domain, ListParam } from '@things-factory/shell'
|
|
9
9
|
|
|
10
10
|
import { InventoryProductGroupList, NewOrderInventory, NewOrderProduct, OrderInventory, OrderProduct } from '../'
|
|
11
11
|
import { InventoryUtil } from '../../utils'
|
|
@@ -15,13 +15,7 @@ export class OtherQuery {
|
|
|
15
15
|
@Directive('@privilege(category: "inventory", privilege: "query")')
|
|
16
16
|
@Directive('@transaction')
|
|
17
17
|
@Query(returns => InventoryProductGroupList)
|
|
18
|
-
async inventoryProductGroup(
|
|
19
|
-
@Ctx() context: any,
|
|
20
|
-
@Arg('filters', type => [Filter], { nullable: true }) filters?: Filter[],
|
|
21
|
-
@Arg('pagination', type => Pagination, { nullable: true }) pagination?: Pagination,
|
|
22
|
-
@Arg('sortings', type => [Sorting], { nullable: true }) sortings?: Sorting[],
|
|
23
|
-
@Arg('locationSortingRules', type => [Sorting], { nullable: true }) locationSortingRules?: Sorting[]
|
|
24
|
-
): Promise<InventoryProductGroupList> {
|
|
18
|
+
async inventoryProductGroup(@Ctx() context: any, @Args() params: ListParam): Promise<InventoryProductGroupList> {
|
|
25
19
|
const {
|
|
26
20
|
domain,
|
|
27
21
|
user,
|
|
@@ -31,7 +25,7 @@ export class OtherQuery {
|
|
|
31
25
|
|
|
32
26
|
let permittedBizplaces: Bizplace[] = await getPermittedBizplaces(domain, user)
|
|
33
27
|
|
|
34
|
-
let bizplaceId: any = filters.find(filter => filter.name === 'bizplace_id').value
|
|
28
|
+
let bizplaceId: any = params.filters.find(filter => filter.name === 'bizplace_id').value
|
|
35
29
|
let foundPermittedBizplace: Bizplace
|
|
36
30
|
let companyBizplace: Bizplace
|
|
37
31
|
|
|
@@ -52,12 +46,7 @@ export class OtherQuery {
|
|
|
52
46
|
const bizplaces: Bizplace[] = [foundPermittedBizplace, companyBizplace]
|
|
53
47
|
if (bizplace) bizplaces.push(bizplace)
|
|
54
48
|
|
|
55
|
-
const { items, total } = await InventoryUtil.bizplaceInventoryProductGroup(
|
|
56
|
-
bizplaces,
|
|
57
|
-
{ filters, pagination, sortings },
|
|
58
|
-
context,
|
|
59
|
-
tx
|
|
60
|
-
)
|
|
49
|
+
const { items, total } = await InventoryUtil.bizplaceInventoryProductGroup(bizplaces, params, context, tx)
|
|
61
50
|
|
|
62
51
|
return { items, total }
|
|
63
52
|
}
|
|
@@ -40,7 +40,7 @@ export class PurchaseOrderMutation {
|
|
|
40
40
|
async upsertPurchaseOrder(
|
|
41
41
|
@Ctx() context: any,
|
|
42
42
|
@Arg('purchaseOrder', type => PurchaseOrderPatch) purchaseOrder: PurchaseOrderPatch,
|
|
43
|
-
@Arg('file', type => GraphQLUpload, { nullable: true }) file?: FileUpload
|
|
43
|
+
@Arg('file', type => [GraphQLUpload], { nullable: true }) file?: FileUpload
|
|
44
44
|
): Promise<PurchaseOrder> {
|
|
45
45
|
try {
|
|
46
46
|
const { tx }: { tx: EntityManager } = context.state
|
|
@@ -3,7 +3,7 @@ import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from
|
|
|
3
3
|
import { EntityManager, getRepository, In, Repository, SelectQueryBuilder } from 'typeorm'
|
|
4
4
|
|
|
5
5
|
import { Attachment } from '@things-factory/attachment-base'
|
|
6
|
-
import { User } from '@things-factory/auth-base'
|
|
6
|
+
import { checkUserBelongsDomain, User } from '@things-factory/auth-base'
|
|
7
7
|
import { Bizplace, getCompanyBizplace, getMyBizplace, getPermittedBizplaceIds } from '@things-factory/biz-base'
|
|
8
8
|
import { Product } from '@things-factory/product-base'
|
|
9
9
|
import { buildQuery, Domain, Filter, ListParam, Pagination, Sorting } from '@things-factory/shell'
|
|
@@ -209,6 +209,8 @@ export class ReleaseGoodQuery {
|
|
|
209
209
|
packingSize: inventory.packingSize,
|
|
210
210
|
location: inventory.location,
|
|
211
211
|
qty: inventory.qty,
|
|
212
|
+
lockedQty: inventory.lockedQty,
|
|
213
|
+
lockedUomValue: inventory.lockedUomValue,
|
|
212
214
|
uom: inventory.uom,
|
|
213
215
|
uomValue: inventory.uomValue,
|
|
214
216
|
releaseQty: orderInv.releaseQty,
|
|
@@ -265,13 +267,15 @@ export class ReleaseGoodQuery {
|
|
|
265
267
|
const statusFilter = params.filters.some(e => e.name === 'status')
|
|
266
268
|
const bizplaceFilter = params.filters.find(param => param.name === 'bizplaceId')
|
|
267
269
|
|
|
268
|
-
if (
|
|
269
|
-
params.filters.
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
270
|
+
if (await checkUserBelongsDomain(domain, user)) {
|
|
271
|
+
if (!statusFilter && !params.filters.some(e => e.name === 'name')) {
|
|
272
|
+
params.filters.push({
|
|
273
|
+
name: 'status',
|
|
274
|
+
operator: 'notin',
|
|
275
|
+
value: [ORDER_STATUS.PENDING, ORDER_STATUS.EDITING, ''],
|
|
276
|
+
relation: false
|
|
277
|
+
})
|
|
278
|
+
}
|
|
275
279
|
}
|
|
276
280
|
|
|
277
281
|
if (!bizplaceFilter) {
|
|
@@ -628,7 +632,7 @@ export async function bulkReleaseGoodsAvailableItemsFunction(
|
|
|
628
632
|
CASE WHEN js.packing_type NOTNULL AND js.packing_size NOTNULL THEN js.packing_size ELSE pd.packing_size END,
|
|
629
633
|
CASE WHEN js.uom NOTNULL THEN js.uom ELSE pd.uom END
|
|
630
634
|
FROM JSON_POPULATE_RECORDSET(NULL::raw_release_goods, $1) js
|
|
631
|
-
LEFT JOIN products p ON js.sku = p.sku AND p.bizplace_id = $2
|
|
635
|
+
LEFT JOIN products p ON LOWER(js.sku) = LOWER(p.sku) AND p.bizplace_id = $2
|
|
632
636
|
LEFT JOIN product_details pd ON p.id = pd.product_id
|
|
633
637
|
AND CASE WHEN js.packing_type NOTNULL AND js.packing_size NOTNULL AND js.uom NOTNULL
|
|
634
638
|
THEN pd.packing_type = js.packing_type AND pd.packing_size = js.packing_size AND pd.uom = js.uom
|
|
@@ -689,6 +693,8 @@ export async function bulkReleaseGoodsAvailableItemsFunction(
|
|
|
689
693
|
[domain.id, bizplaceId, LOCATION_TYPE.QUARANTINE, LOCATION_TYPE.RESERVE]
|
|
690
694
|
)
|
|
691
695
|
|
|
696
|
+
await tx.query(`DROP TABLE raw_release_goods`)
|
|
697
|
+
|
|
692
698
|
availableItems = availableItems.map(item => {
|
|
693
699
|
return {
|
|
694
700
|
productId: item.product_id,
|
|
@@ -697,7 +703,7 @@ export async function bulkReleaseGoodsAvailableItemsFunction(
|
|
|
697
703
|
sku: item.sku,
|
|
698
704
|
batchId: item.batch_id,
|
|
699
705
|
packingType: item.packing_type,
|
|
700
|
-
packingSize: item.packing_size,
|
|
706
|
+
packingSize: Number(item.packing_size || 0),
|
|
701
707
|
uom: item.uom,
|
|
702
708
|
remainQty: item.remain_qty,
|
|
703
709
|
remainUomValue: item.remain_uom_value
|
|
@@ -725,7 +731,7 @@ function _extractData(rawData, validatedData) {
|
|
|
725
731
|
a = JSON.stringify(Object.fromEntries(Object.entries(a).sort()))
|
|
726
732
|
b = JSON.stringify(Object.fromEntries(Object.entries(b).sort()))
|
|
727
733
|
|
|
728
|
-
return val.sku == raw.sku && a === b
|
|
734
|
+
return val.sku.toLowerCase() == raw.sku.toLowerCase() && a === b
|
|
729
735
|
})
|
|
730
736
|
|
|
731
737
|
let releaseUomValue = 0
|
|
@@ -773,7 +779,7 @@ function _extractData(rawData, validatedData) {
|
|
|
773
779
|
releaseUomValue,
|
|
774
780
|
errorMsg:
|
|
775
781
|
!raw.productId || !raw.productDetailId
|
|
776
|
-
? 'product not found'
|
|
782
|
+
? 'inventory or product not found'
|
|
777
783
|
: raw.releaseQty <= 0
|
|
778
784
|
? 'invalid release qty'
|
|
779
785
|
: raw.assignedQty < raw.releaseQty
|
|
@@ -10,12 +10,13 @@ import {
|
|
|
10
10
|
InventoryHistory,
|
|
11
11
|
InventoryNoGenerator,
|
|
12
12
|
InventoryPatch,
|
|
13
|
-
InventoryUtil,
|
|
14
13
|
Location,
|
|
15
14
|
LOCATION_TYPE,
|
|
16
15
|
Warehouse
|
|
17
16
|
} from '@things-factory/warehouse-base'
|
|
18
17
|
|
|
18
|
+
import { InventoryUtil } from '../../utils'
|
|
19
|
+
|
|
19
20
|
import { ORDER_STATUS, ORDER_TYPES, ORDER_VAS_STATUS } from '../../constants'
|
|
20
21
|
import { OrderNoGenerator } from '../../utils/order-no-generator'
|
|
21
22
|
import { ReverseKittingOrderInventory } from '../reverse-kitting-order-inventory/reverse-kitting-order-inventory'
|
|
@@ -34,14 +34,13 @@ export class ReverseKittingOrderQuery {
|
|
|
34
34
|
'reverseKittingOrderInventories.inventory.product',
|
|
35
35
|
'reverseKittingOrderInventories.inventory.location',
|
|
36
36
|
'reverseKittingOrderInventories.inventory.warehouse',
|
|
37
|
-
'reverseKittingOrderInventories.targetProduct',
|
|
38
37
|
'creator',
|
|
39
38
|
'updater'
|
|
40
39
|
]
|
|
41
40
|
})
|
|
42
41
|
}
|
|
43
42
|
|
|
44
|
-
@Query(returns => ReverseKittingOrder, { description: 'To fetch a ReverseKittingOrder' })
|
|
43
|
+
@Query(returns => [ReverseKittingOrder], { description: 'To fetch a ReverseKittingOrder' })
|
|
45
44
|
async reverseKittingInventories(
|
|
46
45
|
@Arg('reverseKittingOIName') reverseKittingOIName: string,
|
|
47
46
|
@Arg('productDetailId') productDetailId: string,
|
|
@@ -13,8 +13,8 @@ import { ReverseKittingOrder } from './reverse-kitting-order'
|
|
|
13
13
|
|
|
14
14
|
@InputType()
|
|
15
15
|
export class NewReverseKittingOrder {
|
|
16
|
-
@Field()
|
|
17
|
-
name
|
|
16
|
+
@Field({ nullable: true })
|
|
17
|
+
name?: string
|
|
18
18
|
|
|
19
19
|
@Field({ nullable: true })
|
|
20
20
|
customerBizplaceId?: string
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Field, ID, ObjectType } from 'type-graphql'
|
|
1
|
+
import { Field, ID, ObjectType, Float, Int } from 'type-graphql'
|
|
2
2
|
import {
|
|
3
3
|
Column,
|
|
4
4
|
CreateDateColumn,
|
|
@@ -14,6 +14,8 @@ import {
|
|
|
14
14
|
import { User } from '@things-factory/auth-base'
|
|
15
15
|
import { Bizplace } from '@things-factory/biz-base'
|
|
16
16
|
import { Domain } from '@things-factory/shell'
|
|
17
|
+
import { Location } from '@things-factory/warehouse-base'
|
|
18
|
+
import { Product } from '@things-factory/product-base'
|
|
17
19
|
|
|
18
20
|
import { ReverseKittingOrderInventory } from '../reverse-kitting-order-inventory/reverse-kitting-order-inventory'
|
|
19
21
|
|
|
@@ -37,6 +39,7 @@ export class ReverseKittingOrder {
|
|
|
37
39
|
domainId?: string
|
|
38
40
|
|
|
39
41
|
@ManyToOne(type => Bizplace)
|
|
42
|
+
@Field(type => Bizplace, { nullable: true })
|
|
40
43
|
bizplace: Bizplace
|
|
41
44
|
|
|
42
45
|
@RelationId((reverseKittingOrder: ReverseKittingOrder) => reverseKittingOrder.bizplace)
|
|
@@ -57,9 +60,42 @@ export class ReverseKittingOrder {
|
|
|
57
60
|
@Field({ nullable: true })
|
|
58
61
|
remark?: string
|
|
59
62
|
|
|
60
|
-
@Column({ nullable: true })
|
|
61
63
|
@Field({ nullable: true })
|
|
62
|
-
|
|
64
|
+
batchId?: string
|
|
65
|
+
|
|
66
|
+
@Field({ nullable: true })
|
|
67
|
+
packingType?: string
|
|
68
|
+
|
|
69
|
+
@Field(type => Float, { nullable: true })
|
|
70
|
+
packingSize?: number
|
|
71
|
+
|
|
72
|
+
@Column()
|
|
73
|
+
@Field({ nullable: true })
|
|
74
|
+
status?: string
|
|
75
|
+
|
|
76
|
+
@Field({ nullable: true })
|
|
77
|
+
batchIdRef?: string
|
|
78
|
+
|
|
79
|
+
@Field({ nullable: true })
|
|
80
|
+
palletId?: string
|
|
81
|
+
|
|
82
|
+
@Field({ nullable: true })
|
|
83
|
+
cartonId?: string
|
|
84
|
+
|
|
85
|
+
@Field(type => Int, { nullable: true })
|
|
86
|
+
qty?: number
|
|
87
|
+
|
|
88
|
+
@Field({ nullable: true })
|
|
89
|
+
expirationDate?: string
|
|
90
|
+
|
|
91
|
+
@Field(type => Location, { nullable: true })
|
|
92
|
+
location?: Location
|
|
93
|
+
|
|
94
|
+
@Field(type => Product, { nullable: true })
|
|
95
|
+
product?: Product
|
|
96
|
+
|
|
97
|
+
@Field({ nullable: true })
|
|
98
|
+
productDetailId?: string
|
|
63
99
|
|
|
64
100
|
@CreateDateColumn()
|
|
65
101
|
@Field({ nullable: true })
|
package/server/service/reverse-kitting-order-inventory/reverse-kitting-order-inventory-type.ts
CHANGED
|
@@ -27,7 +27,13 @@ export class NewReverseKittingOrderInventory {
|
|
|
27
27
|
@Field(type => Float, { nullable: true })
|
|
28
28
|
uomValue?: number
|
|
29
29
|
|
|
30
|
-
@Field(
|
|
30
|
+
@Field({ nullable: true })
|
|
31
|
+
productName?: string
|
|
32
|
+
|
|
33
|
+
@Field({ nullable: true })
|
|
34
|
+
packingType?: string
|
|
35
|
+
|
|
36
|
+
@Field(type => ObjectRef, { nullable: true })
|
|
31
37
|
reverseKittingOrder?: ObjectRef
|
|
32
38
|
|
|
33
39
|
@Field(type => ObjectRef)
|
|
@@ -14,6 +14,8 @@ import { User } from '@things-factory/auth-base'
|
|
|
14
14
|
import { Bizplace } from '@things-factory/biz-base'
|
|
15
15
|
import { Domain } from '@things-factory/shell'
|
|
16
16
|
import { Inventory } from '@things-factory/warehouse-base'
|
|
17
|
+
import { Product } from '@things-factory/product-base'
|
|
18
|
+
import { Vas } from '../vas/vas'
|
|
17
19
|
|
|
18
20
|
import { ReverseKittingOrder } from '../reverse-kitting-order/reverse-kitting-order'
|
|
19
21
|
|
|
@@ -93,6 +95,29 @@ export class ReverseKittingOrderInventory {
|
|
|
93
95
|
@Field()
|
|
94
96
|
status: string
|
|
95
97
|
|
|
98
|
+
@Field({ nullable: true })
|
|
99
|
+
targetType?: string
|
|
100
|
+
|
|
101
|
+
@Field({ nullable: true })
|
|
102
|
+
targetBatchId?: string
|
|
103
|
+
|
|
104
|
+
@ManyToOne(type => Product, { nullable: true })
|
|
105
|
+
@Field(type => Product, { nullable: true })
|
|
106
|
+
targetProduct?: Product
|
|
107
|
+
|
|
108
|
+
@ManyToOne(type => Vas, { nullable: true })
|
|
109
|
+
@Field(type => Vas, { nullable: true })
|
|
110
|
+
vas?: Vas
|
|
111
|
+
|
|
112
|
+
@Field({ nullable: true })
|
|
113
|
+
otherTarget?: string
|
|
114
|
+
|
|
115
|
+
@Field({ nullable: true })
|
|
116
|
+
description?: string
|
|
117
|
+
|
|
118
|
+
@Field({ nullable: true })
|
|
119
|
+
issue?: string
|
|
120
|
+
|
|
96
121
|
@CreateDateColumn()
|
|
97
122
|
@Field({ nullable: true })
|
|
98
123
|
createdAt?: Date
|