@things-factory/operato-wms 6.0.0-alpha.12 → 6.0.0-alpha.14
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/config.development.js +73 -0
- package/config.production.js +113 -0
- package/dist-server/graphql/resolvers/extra/add-release-good-products.js +291 -0
- package/dist-server/graphql/resolvers/extra/add-release-good-products.js.map +1 -0
- package/dist-server/graphql/resolvers/extra/index.js +6 -0
- package/dist-server/graphql/resolvers/extra/index.js.map +1 -0
- package/dist-server/graphql/types/extra/index.js +11 -0
- package/dist-server/graphql/types/extra/index.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +39 -39
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
useVirtualHostBasedDomain: false,
|
|
3
|
+
ormconfig: {
|
|
4
|
+
name: 'default',
|
|
5
|
+
type: 'postgres',
|
|
6
|
+
host: 'operato-instance-1.cijhm4n1hbst.ap-southeast-1.rds.amazonaws.com',
|
|
7
|
+
database: 'operato',
|
|
8
|
+
username: 'operato',
|
|
9
|
+
password: 'abcd1234',
|
|
10
|
+
port: 55432,
|
|
11
|
+
synchronize: false,
|
|
12
|
+
logging: true
|
|
13
|
+
},
|
|
14
|
+
reportApiUrl: 'http://localhost:8090/rest/report/show_html',
|
|
15
|
+
storage: {
|
|
16
|
+
type: 's3',
|
|
17
|
+
accessKeyId: 'AKIAUQEOPWEJCDH6AR5H',
|
|
18
|
+
secretAccessKey: 'AuDAgmODf9EJNB24OveRhTSLV/OJy6IFFoRxe8k2',
|
|
19
|
+
bucketName: 'opa-one'
|
|
20
|
+
},
|
|
21
|
+
port: 3000,
|
|
22
|
+
uploads: 'uploads',
|
|
23
|
+
attachmentsPath: 'attachments',
|
|
24
|
+
SECRET: '0xD58F835B69D207A76CC5F84a70a1D0d4C79dfC95',
|
|
25
|
+
logger: {
|
|
26
|
+
file: {
|
|
27
|
+
filename: 'logs/application-%DATE%.log',
|
|
28
|
+
datePattern: 'YYYY-MM-DD-HH',
|
|
29
|
+
zippedArchive: true,
|
|
30
|
+
maxSize: '200m',
|
|
31
|
+
maxFiles: '1m',
|
|
32
|
+
level: 'info'
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
email: {
|
|
37
|
+
host: 'smtp.office365.com',
|
|
38
|
+
port: 587,
|
|
39
|
+
secure: false, // true for 465, false for other ports
|
|
40
|
+
auth: {
|
|
41
|
+
user: 'no-reply@hatiolab.com', // generated ethereal user
|
|
42
|
+
pass: 'h@ti0LAB1008' // generated ethereal password
|
|
43
|
+
},
|
|
44
|
+
secureConnection: false,
|
|
45
|
+
tls: {
|
|
46
|
+
ciphers: 'SSLv3'
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
notification: {
|
|
51
|
+
fcm: {
|
|
52
|
+
serviceAccount: {
|
|
53
|
+
project_id: 'operato',
|
|
54
|
+
private_key:
|
|
55
|
+
'-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDYNOfyNjPMSeG9\nzU1qs0cpVK5cVfadcUaw5g+hkQZMOMlAA7uqW2eX4vkayj7MzbYUayH+sei8044Q\nJIyl6f26dNX1VT3UgTmSmCS0v48EBEZHCgusrUGFjduLRN6OS6uvrXW1xKA18k9q\nai1C2EHCXF2AE4PTvf239RC1UIOnVePcMtT7rMTdHRO4s8OKVuSDbzIt8k1cV3Zt\nES0YsJlkELqBisYpV//2/ZSILTt39J9JzrVef03X9kkoo9p+YnNyy6tWsfQPfgJO\nybiRGBNxiyJ/E2pxRo/WqU0go9OzYJlGaSUrUx09heNiRD1b0MAOmyPDJz/6AaTk\nkU/A+kLzAgMBAAECggEADQ5s2gtR53VSujk1V/Xe8e0Di99DwaWUj5w6YhcK7/wX\nPdQRN4Fw6RLeLjL7xeG/rCNSwzm6hKSrQJL5zLnWW7XbMdyQRk6jdmnVAEv3zACi\nFH9+eFK3e+Q214XfgWz/v4p/FZdRLCYni5VBNHcwyWxLLS/V1ynzB3KM1sDiTRmI\npcT7+uTtwrKgJq64sXtFE2pYrFxDdCiyqzkhv/2ed4YIowAjpKBbbcCDKeVxVkoz\nC1P4PAzs9EeUuKSWYrWaUjN17lqtRlYeT1ylR1PIJuWqd4cKfgoEgz+lHwRPDCEX\nAYbk3nofiJIPBhSfCHrXS755wK48mY8vMwFdfCPJeQKBgQDsz4tjYTHdat5A25n5\nekwMxZwFQ5OvMV4eulwZUDMypTAYSz1iB6sDlgwKDm5omZIfuneqCEIvrqxV/kx3\n5wV/DANHO3hYxdp/NV7rM23xmqlaKZhHQbDono1Fm/LP6DEmJiD7N2eFKsXYcPpR\nSAIdCv0X3zkDQ4zRi51yJlCXzQKBgQDpufJBxCoXngiQJ2j14lWVAeOOdQ6zh5Ip\nBcDwF0X67cNSN3Wl40bS4yLFdolhEAyj5m0WPuYYXpjzhHhZ0W3V3ItdBkrmwIvy\nWOWu26qN0ZbwxVS2qVpHuj6iHWJKHuDZZUkFtJg3BeeBSOUHSA8TvjnA0xd83xeb\n8ZJasWoFvwKBgQDFs/gQ/gIdcq0exLfluh5nw0qgcmyHpNWJHdjqITS9IX/nqFkU\n0IYLtmdStf2jQiLmbkydHcvz9wZVvLqml67VBHhwLcwpgPULoskd34/4V0Dvzy4c\nv1Esw8H5zVqIDLeLu+VpFjZMzQrjyl6RIWbyTExEc84rVWfpQYAu3qIGOQKBgAFr\nXatEk7TdAtRNSPflTfu/rTAaSeKROjQBkvBiU8x4US1YpOBDBxUUyAtG8wKh5FHC\nfnsaGq+fM3KXJVv2R6J62mXQOfg4xyDLpWlwcBK4aSBBMoiBcsjouqSlZQlqMpdf\nZBgixqHe6U8BsFJg/6ZxC0y+e3AIss4Bo4/lb+1lAoGAFOexvaBh21K6W3inmRW4\nLlkVYJaBJ20OwokXg5aXjBiHxqmk7VLAuFbkpb5LOKH2xPILRQ0OEkn51yVymS3T\n9lLpHOFTQXt5tF2/F7NW7kaQJNlLr/h5jPi3O9XHeFmuaN2z150ZB6zzgjeGKzr8\ni+1fgTsRfDtNw8xkSH9qL1Y=\n-----END PRIVATE KEY-----\n',
|
|
56
|
+
client_email: 'firebase-adminsdk-xmm2e@operato.iam.gserviceaccount.com'
|
|
57
|
+
},
|
|
58
|
+
appConfig: {
|
|
59
|
+
apiKey: 'AIzaSyDdTM2BTLHSt2LNS0G5QB8G0i4KBXFiG7U',
|
|
60
|
+
projectId: 'operato',
|
|
61
|
+
messagingSenderId: 79537064975,
|
|
62
|
+
appId: '1:79537064975:web:32f53119e9c8c6ee2a277a'
|
|
63
|
+
},
|
|
64
|
+
serverKey:
|
|
65
|
+
'AAAAEoTHTA8:APA91bGwt-4HT82Dfwf_VwbQaKT0_qHd0Y3tuW41udjWz5Lz0Ko0mEMD6WbHHSILvQpa6yuoGGKCMsrU7VW2qWRrUm3CYpyG9oSwshNm1tIhljAnOuUfwHCoawbVLwf9qlWpHt4dwCoc'
|
|
66
|
+
},
|
|
67
|
+
vapidKey: {
|
|
68
|
+
subject: 'mailto:heartyoh@hatiolab.com',
|
|
69
|
+
publicKey: 'BAkVkITsCXBIsYL1yeaBmx5_dn57we-ZXMjirPPHzC2dan82cdEnAio_53PQ-1_w3ykWCBPrrFAWQ_d9N4cFF0o',
|
|
70
|
+
privateKey: '4pmlt3Wk019u7nqU3Q_oGZE6LbUDjjf8DpmAcn9-iss'
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
useVirtualHostBasedDomain: false,
|
|
3
|
+
|
|
4
|
+
ormconfig: {
|
|
5
|
+
name: 'default',
|
|
6
|
+
|
|
7
|
+
type: 'postgres',
|
|
8
|
+
|
|
9
|
+
host: 'operato-instance-1.cijhm4n1hbst.ap-southeast-1.rds.amazonaws.com',
|
|
10
|
+
|
|
11
|
+
database: 'operato',
|
|
12
|
+
|
|
13
|
+
username: 'operato',
|
|
14
|
+
|
|
15
|
+
password: 'abcd1234',
|
|
16
|
+
|
|
17
|
+
port: 55432,
|
|
18
|
+
|
|
19
|
+
synchronize: false,
|
|
20
|
+
|
|
21
|
+
logging: true
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
reportApiUrl: 'http://localhost:8090/rest/report/show_html',
|
|
25
|
+
|
|
26
|
+
storage: {
|
|
27
|
+
type: 's3',
|
|
28
|
+
|
|
29
|
+
accessKeyId: 'AKIAUQEOPWEJCDH6AR5H',
|
|
30
|
+
|
|
31
|
+
secretAccessKey: 'AuDAgmODf9EJNB24OveRhTSLV/OJy6IFFoRxe8k2',
|
|
32
|
+
|
|
33
|
+
bucketName: 'opa-one'
|
|
34
|
+
},
|
|
35
|
+
|
|
36
|
+
port: 3000,
|
|
37
|
+
|
|
38
|
+
uploads: 'uploads',
|
|
39
|
+
|
|
40
|
+
attachmentsPath: 'attachments',
|
|
41
|
+
|
|
42
|
+
SECRET: '0xD58F835B69D207A76CC5F84a70a1D0d4C79dfC95',
|
|
43
|
+
|
|
44
|
+
logger: {
|
|
45
|
+
file: {
|
|
46
|
+
filename: 'logs/application-%DATE%.log',
|
|
47
|
+
|
|
48
|
+
datePattern: 'YYYY-MM-DD-HH',
|
|
49
|
+
|
|
50
|
+
zippedArchive: true,
|
|
51
|
+
|
|
52
|
+
maxSize: '200m',
|
|
53
|
+
|
|
54
|
+
maxFiles: '1m',
|
|
55
|
+
|
|
56
|
+
level: 'info'
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
email: {
|
|
61
|
+
host: 'smtp.office365.com',
|
|
62
|
+
|
|
63
|
+
port: 587,
|
|
64
|
+
|
|
65
|
+
secure: false, // true for 465, false for other ports
|
|
66
|
+
|
|
67
|
+
auth: {
|
|
68
|
+
user: 'no-reply@hatiolab.com', // generated ethereal user
|
|
69
|
+
|
|
70
|
+
pass: 'h@ti0LAB1008' // generated ethereal password
|
|
71
|
+
},
|
|
72
|
+
|
|
73
|
+
secureConnection: false,
|
|
74
|
+
|
|
75
|
+
tls: {
|
|
76
|
+
ciphers: 'SSLv3'
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
notification: {
|
|
81
|
+
fcm: {
|
|
82
|
+
serviceAccount: {
|
|
83
|
+
project_id: 'operato',
|
|
84
|
+
|
|
85
|
+
private_key:
|
|
86
|
+
'-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDYNOfyNjPMSeG9\nzU1qs0cpVK5cVfadcUaw5g+hkQZMOMlAA7uqW2eX4vkayj7MzbYUayH+sei8044Q\nJIyl6f26dNX1VT3UgTmSmCS0v48EBEZHCgusrUGFjduLRN6OS6uvrXW1xKA18k9q\nai1C2EHCXF2AE4PTvf239RC1UIOnVePcMtT7rMTdHRO4s8OKVuSDbzIt8k1cV3Zt\nES0YsJlkELqBisYpV//2/ZSILTt39J9JzrVef03X9kkoo9p+YnNyy6tWsfQPfgJO\nybiRGBNxiyJ/E2pxRo/WqU0go9OzYJlGaSUrUx09heNiRD1b0MAOmyPDJz/6AaTk\nkU/A+kLzAgMBAAECggEADQ5s2gtR53VSujk1V/Xe8e0Di99DwaWUj5w6YhcK7/wX\nPdQRN4Fw6RLeLjL7xeG/rCNSwzm6hKSrQJL5zLnWW7XbMdyQRk6jdmnVAEv3zACi\nFH9+eFK3e+Q214XfgWz/v4p/FZdRLCYni5VBNHcwyWxLLS/V1ynzB3KM1sDiTRmI\npcT7+uTtwrKgJq64sXtFE2pYrFxDdCiyqzkhv/2ed4YIowAjpKBbbcCDKeVxVkoz\nC1P4PAzs9EeUuKSWYrWaUjN17lqtRlYeT1ylR1PIJuWqd4cKfgoEgz+lHwRPDCEX\nAYbk3nofiJIPBhSfCHrXS755wK48mY8vMwFdfCPJeQKBgQDsz4tjYTHdat5A25n5\nekwMxZwFQ5OvMV4eulwZUDMypTAYSz1iB6sDlgwKDm5omZIfuneqCEIvrqxV/kx3\n5wV/DANHO3hYxdp/NV7rM23xmqlaKZhHQbDono1Fm/LP6DEmJiD7N2eFKsXYcPpR\nSAIdCv0X3zkDQ4zRi51yJlCXzQKBgQDpufJBxCoXngiQJ2j14lWVAeOOdQ6zh5Ip\nBcDwF0X67cNSN3Wl40bS4yLFdolhEAyj5m0WPuYYXpjzhHhZ0W3V3ItdBkrmwIvy\nWOWu26qN0ZbwxVS2qVpHuj6iHWJKHuDZZUkFtJg3BeeBSOUHSA8TvjnA0xd83xeb\n8ZJasWoFvwKBgQDFs/gQ/gIdcq0exLfluh5nw0qgcmyHpNWJHdjqITS9IX/nqFkU\n0IYLtmdStf2jQiLmbkydHcvz9wZVvLqml67VBHhwLcwpgPULoskd34/4V0Dvzy4c\nv1Esw8H5zVqIDLeLu+VpFjZMzQrjyl6RIWbyTExEc84rVWfpQYAu3qIGOQKBgAFr\nXatEk7TdAtRNSPflTfu/rTAaSeKROjQBkvBiU8x4US1YpOBDBxUUyAtG8wKh5FHC\nfnsaGq+fM3KXJVv2R6J62mXQOfg4xyDLpWlwcBK4aSBBMoiBcsjouqSlZQlqMpdf\nZBgixqHe6U8BsFJg/6ZxC0y+e3AIss4Bo4/lb+1lAoGAFOexvaBh21K6W3inmRW4\nLlkVYJaBJ20OwokXg5aXjBiHxqmk7VLAuFbkpb5LOKH2xPILRQ0OEkn51yVymS3T\n9lLpHOFTQXt5tF2/F7NW7kaQJNlLr/h5jPi3O9XHeFmuaN2z150ZB6zzgjeGKzr8\ni+1fgTsRfDtNw8xkSH9qL1Y=\n-----END PRIVATE KEY-----\n',
|
|
87
|
+
|
|
88
|
+
client_email: 'firebase-adminsdk-xmm2e@operato.iam.gserviceaccount.com'
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
appConfig: {
|
|
92
|
+
apiKey: 'AIzaSyDdTM2BTLHSt2LNS0G5QB8G0i4KBXFiG7U',
|
|
93
|
+
|
|
94
|
+
projectId: 'operato',
|
|
95
|
+
|
|
96
|
+
messagingSenderId: 79537064975,
|
|
97
|
+
|
|
98
|
+
appId: '1:79537064975:web:32f53119e9c8c6ee2a277a'
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
serverKey:
|
|
102
|
+
'AAAAEoTHTA8:APA91bGwt-4HT82Dfwf_VwbQaKT0_qHd0Y3tuW41udjWz5Lz0Ko0mEMD6WbHHSILvQpa6yuoGGKCMsrU7VW2qWRrUm3CYpyG9oSwshNm1tIhljAnOuUfwHCoawbVLwf9qlWpHt4dwCoc'
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
vapidKey: {
|
|
106
|
+
subject: 'mailto:heartyoh@hatiolab.com',
|
|
107
|
+
|
|
108
|
+
publicKey: 'BAkVkITsCXBIsYL1yeaBmx5_dn57we-ZXMjirPPHzC2dan82cdEnAio_53PQ-1_w3ykWCBPrrFAWQ_d9N4cFF0o',
|
|
109
|
+
|
|
110
|
+
privateKey: '4pmlt3Wk019u7nqU3Q_oGZE6LbUDjjf8DpmAcn9-iss'
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addReleaseGoodProducts = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const product_base_1 = require("@things-factory/product-base");
|
|
6
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
7
|
+
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
8
|
+
const worksheet_base_1 = require("@things-factory/worksheet-base");
|
|
9
|
+
exports.addReleaseGoodProducts = {
|
|
10
|
+
async addReleaseGoodProducts(_, { name, orderInventories, existingOrderInventories }, context) {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
try {
|
|
13
|
+
const { tx, user, domain } = context.state;
|
|
14
|
+
let releaseGood = await tx.getRepository(sales_base_1.ReleaseGood).findOne({
|
|
15
|
+
where: { domain: { id: domain.id }, name: name },
|
|
16
|
+
relations: ['bizplace', 'orderProducts']
|
|
17
|
+
});
|
|
18
|
+
const bizplace = releaseGood.bizplace;
|
|
19
|
+
let pickingWorksheet = await tx.getRepository(worksheet_base_1.Worksheet).findOne({
|
|
20
|
+
where: { releaseGood, type: worksheet_base_1.WORKSHEET_TYPE.PICKING }
|
|
21
|
+
});
|
|
22
|
+
let loadingWorksheet = await tx.getRepository(worksheet_base_1.Worksheet).findOne({
|
|
23
|
+
where: { releaseGood, type: worksheet_base_1.WORKSHEET_TYPE.LOADING }
|
|
24
|
+
});
|
|
25
|
+
if (existingOrderInventories) {
|
|
26
|
+
for (let oi of existingOrderInventories) {
|
|
27
|
+
// map input to OrderInventory Object
|
|
28
|
+
let curOrderInv = Object.assign({}, oi);
|
|
29
|
+
curOrderInv.domain = domain;
|
|
30
|
+
curOrderInv.bizplace = bizplace;
|
|
31
|
+
curOrderInv.releaseGood = releaseGood;
|
|
32
|
+
curOrderInv.product = await tx.getRepository(product_base_1.Product).findOneBy({ id: oi.product.id });
|
|
33
|
+
let existingOrderInv;
|
|
34
|
+
if ((_a = curOrderInv === null || curOrderInv === void 0 ? void 0 : curOrderInv.inventory) === null || _a === void 0 ? void 0 : _a.id) {
|
|
35
|
+
const foundInv = await tx.getRepository(warehouse_base_1.Inventory).findOneBy({ id: curOrderInv.inventory.id });
|
|
36
|
+
curOrderInv.inventory = foundInv;
|
|
37
|
+
existingOrderInv = await tx.getRepository(sales_base_1.OrderInventory).findOne({
|
|
38
|
+
where: {
|
|
39
|
+
releaseGood,
|
|
40
|
+
product: curOrderInv.product,
|
|
41
|
+
batchId: curOrderInv.batchId,
|
|
42
|
+
packingType: curOrderInv.packingType,
|
|
43
|
+
inventory: foundInv
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
if (foundInv && foundInv.lockedQty == 0) {
|
|
47
|
+
foundInv.qty += Number(existingOrderInv.releaseQty);
|
|
48
|
+
foundInv.uomValue += Number(existingOrderInv.releaseUomValue);
|
|
49
|
+
foundInv.lockedQty = Number(existingOrderInv.releaseQty);
|
|
50
|
+
foundInv.lockedUomValue = Number(existingOrderInv.releaseUomValue);
|
|
51
|
+
}
|
|
52
|
+
if (curOrderInv.releaseQty < existingOrderInv.pickedQty) {
|
|
53
|
+
throw new Error(`${curOrderInv.inventory.palletId} has already picked ${existingOrderInv.pickedQty}`);
|
|
54
|
+
}
|
|
55
|
+
if (curOrderInv.releaseQty === 0) {
|
|
56
|
+
foundInv.lockedQty = Number(foundInv.lockedQty) - Number(existingOrderInv.releaseQty);
|
|
57
|
+
foundInv.lockedUomValue = Number(foundInv.lockedUomValue) - Number(existingOrderInv.releaseUomValue);
|
|
58
|
+
await tx.getRepository(warehouse_base_1.Inventory).save(foundInv);
|
|
59
|
+
if (existingOrderInv) {
|
|
60
|
+
// if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated
|
|
61
|
+
curOrderInv = Object.assign(Object.assign({}, existingOrderInv), { releaseQty: curOrderInv.releaseQty, releaseUomValue: curOrderInv.releaseUomValue, lockedUomValue: curOrderInv.lockedUomValue, status: sales_base_1.ORDER_INVENTORY_STATUS.CANCELLED });
|
|
62
|
+
let existingWorksheetDetail = await tx.getRepository(worksheet_base_1.WorksheetDetail).findOne({
|
|
63
|
+
where: {
|
|
64
|
+
worksheet: pickingWorksheet,
|
|
65
|
+
type: worksheet_base_1.WORKSHEET_TYPE.PICKING,
|
|
66
|
+
targetInventory: curOrderInv
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { status: worksheet_base_1.WORKSHEET_STATUS.CANCELLED });
|
|
70
|
+
await tx.getRepository(worksheet_base_1.WorksheetDetail).save(existingWorksheetDetail);
|
|
71
|
+
await tx.getRepository(sales_base_1.OrderInventory).save(curOrderInv);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else if (curOrderInv.releaseQty == existingOrderInv.pickedQty) {
|
|
75
|
+
curOrderInv = Object.assign(Object.assign({}, existingOrderInv), { releaseQty: curOrderInv.releaseQty, releaseUomValue: curOrderInv.releaseUomValue, lockedUomValue: curOrderInv.lockedUomValue, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKED });
|
|
76
|
+
let existingWorksheetDetail = await tx.getRepository(worksheet_base_1.WorksheetDetail).findOne({
|
|
77
|
+
where: {
|
|
78
|
+
targetInventory: curOrderInv
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { status: worksheet_base_1.WORKSHEET_STATUS.PICKED });
|
|
82
|
+
await tx.getRepository(worksheet_base_1.WorksheetDetail).save(existingWorksheetDetail);
|
|
83
|
+
await tx.getRepository(sales_base_1.OrderInventory).save(curOrderInv);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
foundInv.updater = user;
|
|
87
|
+
foundInv.lockedQty =
|
|
88
|
+
foundInv.lockedQty - Number(existingOrderInv.releaseQty) + Number(curOrderInv.releaseQty);
|
|
89
|
+
foundInv.lockedUomValue =
|
|
90
|
+
foundInv.lockedUomValue - Number(existingOrderInv.releaseUomValue) + Number(curOrderInv.releaseUomValue);
|
|
91
|
+
await tx.getRepository(warehouse_base_1.Inventory).save(foundInv);
|
|
92
|
+
if (existingOrderInv) {
|
|
93
|
+
// if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated
|
|
94
|
+
curOrderInv = Object.assign(Object.assign({}, existingOrderInv), { releaseQty: curOrderInv.releaseQty, releaseUomValue: curOrderInv.releaseUomValue, status: sales_base_1.ORDER_INVENTORY_STATUS.PICKING });
|
|
95
|
+
let existingWorksheetDetail = await tx.getRepository(worksheet_base_1.WorksheetDetail).findOne({
|
|
96
|
+
where: {
|
|
97
|
+
worksheet: pickingWorksheet,
|
|
98
|
+
type: worksheet_base_1.WORKSHEET_TYPE.PICKING,
|
|
99
|
+
targetInventory: existingOrderInv
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
if (existingWorksheetDetail) {
|
|
103
|
+
if (curOrderInv.releaseQty != existingOrderInv.releaseQty) {
|
|
104
|
+
existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
|
|
105
|
+
await tx.getRepository(worksheet_base_1.WorksheetDetail).save(existingWorksheetDetail);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
await tx.getRepository(sales_base_1.OrderInventory).save(curOrderInv);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (pickingWorksheet) {
|
|
112
|
+
// if has picking worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation
|
|
113
|
+
pickingWorksheet = Object.assign(Object.assign({}, pickingWorksheet), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
|
|
114
|
+
await tx.getRepository(worksheet_base_1.Worksheet).save(pickingWorksheet);
|
|
115
|
+
}
|
|
116
|
+
if (loadingWorksheet) {
|
|
117
|
+
// if has loading worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation
|
|
118
|
+
loadingWorksheet = Object.assign(Object.assign({}, loadingWorksheet), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
|
|
119
|
+
await tx.getRepository(worksheet_base_1.Worksheet).save(loadingWorksheet);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (orderInventories) {
|
|
125
|
+
for (let oi of orderInventories) {
|
|
126
|
+
// map input to OrderInventory Object
|
|
127
|
+
let newOrderInv = Object.assign({}, oi);
|
|
128
|
+
newOrderInv.domain = domain;
|
|
129
|
+
newOrderInv.bizplace = bizplace;
|
|
130
|
+
newOrderInv.batchId = oi.batchId;
|
|
131
|
+
newOrderInv.packingType = oi.packingType;
|
|
132
|
+
newOrderInv.status = pickingWorksheet ? sales_base_1.ORDER_INVENTORY_STATUS.PICKING : sales_base_1.ORDER_INVENTORY_STATUS.PENDING;
|
|
133
|
+
newOrderInv.name = sales_base_1.OrderNoGenerator.orderInventory();
|
|
134
|
+
newOrderInv.releaseGood = releaseGood;
|
|
135
|
+
newOrderInv.product = await tx.getRepository(product_base_1.Product).findOneBy({ id: oi.product.id });
|
|
136
|
+
newOrderInv.creator = user;
|
|
137
|
+
newOrderInv.updater = user;
|
|
138
|
+
let existingOrderInv;
|
|
139
|
+
let existingOrderProduct = await tx.getRepository(sales_base_1.OrderProduct).findOne({
|
|
140
|
+
where: {
|
|
141
|
+
domain: { id: domain.id },
|
|
142
|
+
releaseGood: { id: releaseGood.id },
|
|
143
|
+
batchId: oi.batchId,
|
|
144
|
+
packingType: oi.packingType,
|
|
145
|
+
product: { id: newOrderInv.product.id }
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
// check if it is release by inventory (has inventory value) or product
|
|
149
|
+
if ((_b = newOrderInv.inventory) === null || _b === void 0 ? void 0 : _b.id) {
|
|
150
|
+
// if release by inventory, then quantity and uomValue values are updated
|
|
151
|
+
const foundInv = await tx.getRepository(warehouse_base_1.Inventory).findOneBy({ id: newOrderInv.inventory.id });
|
|
152
|
+
newOrderInv.inventory = foundInv;
|
|
153
|
+
newOrderInv.uom = (oi === null || oi === void 0 ? void 0 : oi.uom) || foundInv.uom;
|
|
154
|
+
newOrderInv.batchIdRef = (oi === null || oi === void 0 ? void 0 : oi.batchIdRef) || foundInv.batchIdRef;
|
|
155
|
+
// check for existing released OrderInventory specifying product, batchId, packingType, and inventory
|
|
156
|
+
existingOrderInv = await tx.getRepository(sales_base_1.OrderInventory).findOne({
|
|
157
|
+
where: {
|
|
158
|
+
releaseGood,
|
|
159
|
+
product: newOrderInv.product,
|
|
160
|
+
batchId: newOrderInv.batchId,
|
|
161
|
+
packingType: newOrderInv.packingType,
|
|
162
|
+
inventory: foundInv
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
foundInv.lockedQty = Number(foundInv.lockedQty) + newOrderInv.releaseQty;
|
|
166
|
+
foundInv.lockedUomValue = Number(foundInv.lockedUomValue) + newOrderInv.releaseUomValue;
|
|
167
|
+
foundInv.updater = user;
|
|
168
|
+
let newOrderProduct = Object.assign(new sales_base_1.OrderProduct(), newOrderInv);
|
|
169
|
+
newOrderProduct = Object.assign(Object.assign({}, newOrderProduct), { packQty: 0, actualPackQty: 0, palletQty: 0, actualPalletQty: 0, status: sales_base_1.ORDER_PRODUCT_STATUS.ASSIGNED });
|
|
170
|
+
if (!existingOrderProduct)
|
|
171
|
+
newOrderProduct = await tx.getRepository(sales_base_1.OrderProduct).save(newOrderProduct);
|
|
172
|
+
newOrderInv.orderProduct = existingOrderProduct ? existingOrderProduct : newOrderProduct;
|
|
173
|
+
await tx.getRepository(warehouse_base_1.Inventory).save(foundInv);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
// check for existing released OrderInventory specifying product, batchId and packingType
|
|
177
|
+
existingOrderInv = await tx.getRepository(sales_base_1.OrderInventory).findOne({
|
|
178
|
+
where: {
|
|
179
|
+
releaseGood,
|
|
180
|
+
product: newOrderInv.product,
|
|
181
|
+
batchId: newOrderInv.batchId,
|
|
182
|
+
packingType: newOrderInv.packingType
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (existingOrderInv) {
|
|
187
|
+
// if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated
|
|
188
|
+
newOrderInv = Object.assign(Object.assign({}, existingOrderInv), { releaseQty: existingOrderInv.status === sales_base_1.ORDER_INVENTORY_STATUS.REPLACED
|
|
189
|
+
? newOrderInv.releaseQty
|
|
190
|
+
: existingOrderInv.releaseQty + newOrderInv.releaseQty, releaseUomValue: sales_base_1.ORDER_INVENTORY_STATUS.REPLACED
|
|
191
|
+
? newOrderInv.releaseUomValue
|
|
192
|
+
: existingOrderInv.releaseUomValue + newOrderInv.releaseUomValue, status: existingOrderInv.status === sales_base_1.ORDER_INVENTORY_STATUS.CANCELLED
|
|
193
|
+
? pickingWorksheet
|
|
194
|
+
? sales_base_1.ORDER_INVENTORY_STATUS.PICKING
|
|
195
|
+
: sales_base_1.ORDER_INVENTORY_STATUS.PENDING
|
|
196
|
+
: existingOrderInv.status });
|
|
197
|
+
let existingWorksheetDetail = await tx.getRepository(worksheet_base_1.WorksheetDetail).findOne({
|
|
198
|
+
where: {
|
|
199
|
+
worksheet: pickingWorksheet,
|
|
200
|
+
type: worksheet_base_1.WORKSHEET_TYPE.PICKING,
|
|
201
|
+
targetInventory: existingOrderInv
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
if (existingWorksheetDetail) {
|
|
205
|
+
existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { targetProduct: newOrderInv.orderProduct, status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
|
|
206
|
+
await tx.getRepository(worksheet_base_1.WorksheetDetail).save(existingWorksheetDetail);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (pickingWorksheet) {
|
|
210
|
+
// if has picking worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation
|
|
211
|
+
pickingWorksheet = Object.assign(Object.assign({}, pickingWorksheet), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
|
|
212
|
+
let savedOrderInv = new sales_base_1.OrderInventory();
|
|
213
|
+
savedOrderInv.name = newOrderInv.name;
|
|
214
|
+
savedOrderInv.type = newOrderInv.type;
|
|
215
|
+
savedOrderInv.releaseQty = newOrderInv.releaseQty;
|
|
216
|
+
savedOrderInv.releaseUomValue = newOrderInv.releaseUomValue;
|
|
217
|
+
savedOrderInv.batchId = newOrderInv.batchId;
|
|
218
|
+
savedOrderInv.batchIdRef = newOrderInv.batchIdRef;
|
|
219
|
+
savedOrderInv.packingType = newOrderInv.packingType;
|
|
220
|
+
savedOrderInv.uom = newOrderInv.uom;
|
|
221
|
+
savedOrderInv.product = newOrderInv.product;
|
|
222
|
+
savedOrderInv.inventory = newOrderInv.inventory;
|
|
223
|
+
savedOrderInv.status = newOrderInv.status;
|
|
224
|
+
savedOrderInv.releaseGood = newOrderInv.releaseGood;
|
|
225
|
+
savedOrderInv.orderProduct = newOrderInv.orderProduct;
|
|
226
|
+
savedOrderInv.bizplace = newOrderInv.bizplace;
|
|
227
|
+
savedOrderInv.domain = domain;
|
|
228
|
+
savedOrderInv.creator = user;
|
|
229
|
+
savedOrderInv.updater = user;
|
|
230
|
+
if (newOrderInv === null || newOrderInv === void 0 ? void 0 : newOrderInv.id) {
|
|
231
|
+
// newOrderInv will have id if it was updated from existingOrderInv
|
|
232
|
+
// this solution will remove ix_order-inventory_0 unique error
|
|
233
|
+
// ** please revise this resolver in future. looks like there's few
|
|
234
|
+
// things that can refactor
|
|
235
|
+
savedOrderInv.id = newOrderInv.id;
|
|
236
|
+
}
|
|
237
|
+
savedOrderInv = await tx.getRepository(sales_base_1.OrderInventory).save(savedOrderInv);
|
|
238
|
+
if (!existingOrderInv && pickingWorksheet) {
|
|
239
|
+
// if this is a new orderInventory and has existing worksheet then generate a new worksheet detail for it
|
|
240
|
+
await (0, worksheet_base_1.generatePickingWorksheetDetail)(tx, domain, user, pickingWorksheet, savedOrderInv);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
await tx.getRepository(worksheet_base_1.Worksheet).save(pickingWorksheet);
|
|
245
|
+
}
|
|
246
|
+
if (loadingWorksheet) {
|
|
247
|
+
// if has loading worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation
|
|
248
|
+
loadingWorksheet = Object.assign(Object.assign({}, loadingWorksheet), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
|
|
249
|
+
await tx.getRepository(worksheet_base_1.Worksheet).save(loadingWorksheet);
|
|
250
|
+
}
|
|
251
|
+
// Update Order Product Release Qty
|
|
252
|
+
let rgOrderProducts = await tx
|
|
253
|
+
.getRepository(sales_base_1.OrderProduct)
|
|
254
|
+
.find({ where: { domain: { id: domain.id }, releaseGood } });
|
|
255
|
+
await Promise.all(rgOrderProducts.map(async (op) => {
|
|
256
|
+
const orderInventories = await tx.getRepository(sales_base_1.OrderInventory).find({
|
|
257
|
+
where: {
|
|
258
|
+
domain: { id: domain.id },
|
|
259
|
+
releaseGood: { id: releaseGood.id },
|
|
260
|
+
orderProduct: { id: op.id },
|
|
261
|
+
status: (0, typeorm_1.Not)((0, typeorm_1.In)([
|
|
262
|
+
sales_base_1.ORDER_INVENTORY_STATUS.TERMINATED,
|
|
263
|
+
sales_base_1.ORDER_INVENTORY_STATUS.CANCELLED,
|
|
264
|
+
sales_base_1.ORDER_INVENTORY_STATUS.PENDING_CANCEL
|
|
265
|
+
]))
|
|
266
|
+
}
|
|
267
|
+
});
|
|
268
|
+
let totalReleaseQty = orderInventories.reduce((total, currentValue) => {
|
|
269
|
+
total += currentValue.releaseQty;
|
|
270
|
+
return total;
|
|
271
|
+
}, 0);
|
|
272
|
+
let totalReleaseUomValue = orderInventories.reduce((total, currentValue) => {
|
|
273
|
+
total += currentValue.releaseUomValue;
|
|
274
|
+
return total;
|
|
275
|
+
}, 0);
|
|
276
|
+
let updateOPInfo = {
|
|
277
|
+
releaseQty: totalReleaseQty,
|
|
278
|
+
releaseUomValue: totalReleaseUomValue
|
|
279
|
+
};
|
|
280
|
+
if (totalReleaseQty <= 0) {
|
|
281
|
+
updateOPInfo.status = sales_base_1.ORDER_PRODUCT_STATUS.TERMINATED;
|
|
282
|
+
}
|
|
283
|
+
await tx.getRepository(sales_base_1.OrderProduct).update({ id: op.id }, updateOPInfo);
|
|
284
|
+
}));
|
|
285
|
+
}
|
|
286
|
+
catch (error) {
|
|
287
|
+
throw error;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
//# sourceMappingURL=add-release-good-products.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-release-good-products.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/extra/add-release-good-products.ts"],"names":[],"mappings":"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","sourcesContent":["import { In, Not } from 'typeorm'\n\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Product } from '@things-factory/product-base'\nimport {\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n OrderInventory,\n OrderNoGenerator,\n OrderProduct,\n ReleaseGood\n} from '@things-factory/sales-base'\nimport { Inventory } from '@things-factory/warehouse-base'\nimport {\n generatePickingWorksheetDetail,\n Worksheet,\n WORKSHEET_STATUS,\n WORKSHEET_TYPE,\n WorksheetDetail\n} from '@things-factory/worksheet-base'\n\nexport const addReleaseGoodProducts = {\n async addReleaseGoodProducts(_: any, { name, orderInventories, existingOrderInventories }, context: ResolverContext) {\n try {\n const { tx, user, domain } = context.state\n\n let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({\n where: { domain: { id: domain.id }, name: name },\n relations: ['bizplace', 'orderProducts']\n })\n\n const bizplace: Bizplace = releaseGood.bizplace\n\n let pickingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({\n where: { releaseGood, type: WORKSHEET_TYPE.PICKING }\n })\n\n let loadingWorksheet: Worksheet = await tx.getRepository(Worksheet).findOne({\n where: { releaseGood, type: WORKSHEET_TYPE.LOADING }\n })\n\n if (existingOrderInventories) {\n for (let oi of existingOrderInventories) {\n // map input to OrderInventory Object\n let curOrderInv: OrderInventory = Object.assign({}, oi)\n curOrderInv.domain = domain\n curOrderInv.bizplace = bizplace\n curOrderInv.releaseGood = releaseGood\n curOrderInv.product = await tx.getRepository(Product).findOneBy({ id: oi.product.id })\n\n let existingOrderInv: OrderInventory\n\n if (curOrderInv?.inventory?.id) {\n const foundInv: Inventory = await tx.getRepository(Inventory).findOneBy({ id: curOrderInv.inventory.id })\n curOrderInv.inventory = foundInv\n\n existingOrderInv = await tx.getRepository(OrderInventory).findOne({\n where: {\n releaseGood,\n product: curOrderInv.product,\n batchId: curOrderInv.batchId,\n packingType: curOrderInv.packingType,\n inventory: foundInv\n }\n })\n\n if (foundInv && foundInv.lockedQty == 0) {\n foundInv.qty += Number(existingOrderInv.releaseQty)\n foundInv.uomValue += Number(existingOrderInv.releaseUomValue)\n foundInv.lockedQty = Number(existingOrderInv.releaseQty)\n foundInv.lockedUomValue = Number(existingOrderInv.releaseUomValue)\n }\n\n if (curOrderInv.releaseQty < existingOrderInv.pickedQty) {\n throw new Error(`${curOrderInv.inventory.palletId} has already picked ${existingOrderInv.pickedQty}`)\n }\n\n if (curOrderInv.releaseQty === 0) {\n foundInv.lockedQty = Number(foundInv.lockedQty) - Number(existingOrderInv.releaseQty)\n foundInv.lockedUomValue = Number(foundInv.lockedUomValue) - Number(existingOrderInv.releaseUomValue)\n\n await tx.getRepository(Inventory).save(foundInv)\n\n if (existingOrderInv) {\n // if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated\n curOrderInv = {\n ...existingOrderInv,\n releaseQty: curOrderInv.releaseQty,\n releaseUomValue: curOrderInv.releaseUomValue,\n lockedUomValue: curOrderInv.lockedUomValue,\n status: ORDER_INVENTORY_STATUS.CANCELLED\n }\n\n let existingWorksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({\n where: {\n worksheet: pickingWorksheet,\n type: WORKSHEET_TYPE.PICKING,\n targetInventory: curOrderInv\n }\n })\n\n existingWorksheetDetail = {\n ...existingWorksheetDetail,\n status: WORKSHEET_STATUS.CANCELLED\n }\n await tx.getRepository(WorksheetDetail).save(existingWorksheetDetail)\n await tx.getRepository(OrderInventory).save(curOrderInv)\n }\n } else if (curOrderInv.releaseQty == existingOrderInv.pickedQty) {\n curOrderInv = {\n ...existingOrderInv,\n releaseQty: curOrderInv.releaseQty,\n releaseUomValue: curOrderInv.releaseUomValue,\n lockedUomValue: curOrderInv.lockedUomValue,\n status: ORDER_INVENTORY_STATUS.PICKED\n }\n\n let existingWorksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({\n where: {\n targetInventory: curOrderInv\n }\n })\n\n existingWorksheetDetail = {\n ...existingWorksheetDetail,\n status: WORKSHEET_STATUS.PICKED\n }\n\n await tx.getRepository(WorksheetDetail).save(existingWorksheetDetail)\n await tx.getRepository(OrderInventory).save(curOrderInv)\n } else {\n foundInv.updater = user\n foundInv.lockedQty =\n foundInv.lockedQty - Number(existingOrderInv.releaseQty) + Number(curOrderInv.releaseQty)\n foundInv.lockedUomValue =\n foundInv.lockedUomValue - Number(existingOrderInv.releaseUomValue) + Number(curOrderInv.releaseUomValue)\n\n await tx.getRepository(Inventory).save(foundInv)\n\n if (existingOrderInv) {\n // if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated\n curOrderInv = {\n ...existingOrderInv,\n releaseQty: curOrderInv.releaseQty,\n releaseUomValue: curOrderInv.releaseUomValue,\n status: ORDER_INVENTORY_STATUS.PICKING\n }\n\n let existingWorksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({\n where: {\n worksheet: pickingWorksheet,\n type: WORKSHEET_TYPE.PICKING,\n targetInventory: existingOrderInv\n }\n })\n\n if (existingWorksheetDetail) {\n if (curOrderInv.releaseQty != existingOrderInv.releaseQty) {\n existingWorksheetDetail = {\n ...existingWorksheetDetail,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n await tx.getRepository(WorksheetDetail).save(existingWorksheetDetail)\n }\n }\n\n await tx.getRepository(OrderInventory).save(curOrderInv)\n }\n }\n\n if (pickingWorksheet) {\n // if has picking worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation\n pickingWorksheet = {\n ...pickingWorksheet,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n await tx.getRepository(Worksheet).save(pickingWorksheet)\n }\n\n if (loadingWorksheet) {\n // if has loading worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation\n loadingWorksheet = {\n ...loadingWorksheet,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n await tx.getRepository(Worksheet).save(loadingWorksheet)\n }\n }\n }\n }\n\n if (orderInventories) {\n for (let oi of orderInventories) {\n // map input to OrderInventory Object\n let newOrderInv: OrderInventory = Object.assign({}, oi)\n newOrderInv.domain = domain\n newOrderInv.bizplace = bizplace\n newOrderInv.batchId = oi.batchId\n newOrderInv.packingType = oi.packingType\n newOrderInv.status = pickingWorksheet ? ORDER_INVENTORY_STATUS.PICKING : ORDER_INVENTORY_STATUS.PENDING\n newOrderInv.name = OrderNoGenerator.orderInventory()\n newOrderInv.releaseGood = releaseGood\n newOrderInv.product = await tx.getRepository(Product).findOneBy({ id: oi.product.id })\n newOrderInv.creator = user\n newOrderInv.updater = user\n\n let existingOrderInv: OrderInventory\n\n let existingOrderProduct: OrderProduct = await tx.getRepository(OrderProduct).findOne({\n where: {\n domain: { id: domain.id },\n releaseGood: { id: releaseGood.id },\n batchId: oi.batchId,\n packingType: oi.packingType,\n product: { id: newOrderInv.product.id }\n }\n })\n\n // check if it is release by inventory (has inventory value) or product\n if (newOrderInv.inventory?.id) {\n // if release by inventory, then quantity and uomValue values are updated\n const foundInv: Inventory = await tx.getRepository(Inventory).findOneBy({ id: newOrderInv.inventory.id })\n newOrderInv.inventory = foundInv\n newOrderInv.uom = oi?.uom || foundInv.uom\n newOrderInv.batchIdRef = oi?.batchIdRef || foundInv.batchIdRef\n\n // check for existing released OrderInventory specifying product, batchId, packingType, and inventory\n existingOrderInv = await tx.getRepository(OrderInventory).findOne({\n where: {\n releaseGood,\n product: newOrderInv.product,\n batchId: newOrderInv.batchId,\n packingType: newOrderInv.packingType,\n inventory: foundInv\n }\n })\n\n foundInv.lockedQty = Number(foundInv.lockedQty) + newOrderInv.releaseQty\n foundInv.lockedUomValue = Number(foundInv.lockedUomValue) + newOrderInv.releaseUomValue\n foundInv.updater = user\n\n let newOrderProduct: OrderProduct = Object.assign(new OrderProduct(), newOrderInv)\n newOrderProduct = {\n ...newOrderProduct,\n packQty: 0,\n actualPackQty: 0,\n palletQty: 0,\n actualPalletQty: 0,\n status: ORDER_PRODUCT_STATUS.ASSIGNED\n }\n\n if (!existingOrderProduct) newOrderProduct = await tx.getRepository(OrderProduct).save(newOrderProduct)\n\n newOrderInv.orderProduct = existingOrderProduct ? existingOrderProduct : newOrderProduct\n\n await tx.getRepository(Inventory).save(foundInv)\n } else {\n // check for existing released OrderInventory specifying product, batchId and packingType\n existingOrderInv = await tx.getRepository(OrderInventory).findOne({\n where: {\n releaseGood,\n product: newOrderInv.product,\n batchId: newOrderInv.batchId,\n packingType: newOrderInv.packingType\n }\n })\n }\n\n if (existingOrderInv) {\n // if found existing OrderInventory and worksheetDetail then qty, uomValue, and status are updated\n newOrderInv = {\n ...existingOrderInv,\n releaseQty:\n existingOrderInv.status === ORDER_INVENTORY_STATUS.REPLACED\n ? newOrderInv.releaseQty\n : existingOrderInv.releaseQty + newOrderInv.releaseQty,\n releaseUomValue: ORDER_INVENTORY_STATUS.REPLACED\n ? newOrderInv.releaseUomValue\n : existingOrderInv.releaseUomValue + newOrderInv.releaseUomValue,\n status:\n existingOrderInv.status === ORDER_INVENTORY_STATUS.CANCELLED\n ? pickingWorksheet\n ? ORDER_INVENTORY_STATUS.PICKING\n : ORDER_INVENTORY_STATUS.PENDING\n : existingOrderInv.status\n }\n\n let existingWorksheetDetail: WorksheetDetail = await tx.getRepository(WorksheetDetail).findOne({\n where: {\n worksheet: pickingWorksheet,\n type: WORKSHEET_TYPE.PICKING,\n targetInventory: existingOrderInv\n }\n })\n\n if (existingWorksheetDetail) {\n existingWorksheetDetail = {\n ...existingWorksheetDetail,\n targetProduct: newOrderInv.orderProduct,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n await tx.getRepository(WorksheetDetail).save(existingWorksheetDetail)\n }\n }\n\n if (pickingWorksheet) {\n // if has picking worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation\n pickingWorksheet = {\n ...pickingWorksheet,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n let savedOrderInv: OrderInventory = new OrderInventory()\n savedOrderInv.name = newOrderInv.name\n savedOrderInv.type = newOrderInv.type\n savedOrderInv.releaseQty = newOrderInv.releaseQty\n savedOrderInv.releaseUomValue = newOrderInv.releaseUomValue\n savedOrderInv.batchId = newOrderInv.batchId\n savedOrderInv.batchIdRef = newOrderInv.batchIdRef\n savedOrderInv.packingType = newOrderInv.packingType\n savedOrderInv.uom = newOrderInv.uom\n savedOrderInv.product = newOrderInv.product\n savedOrderInv.inventory = newOrderInv.inventory\n savedOrderInv.status = newOrderInv.status\n savedOrderInv.releaseGood = newOrderInv.releaseGood\n savedOrderInv.orderProduct = newOrderInv.orderProduct\n savedOrderInv.bizplace = newOrderInv.bizplace\n savedOrderInv.domain = domain\n savedOrderInv.creator = user\n savedOrderInv.updater = user\n\n if (newOrderInv?.id) {\n // newOrderInv will have id if it was updated from existingOrderInv\n // this solution will remove ix_order-inventory_0 unique error\n // ** please revise this resolver in future. looks like there's few\n // things that can refactor\n savedOrderInv.id = newOrderInv.id\n }\n\n savedOrderInv = await tx.getRepository(OrderInventory).save(savedOrderInv)\n\n if (!existingOrderInv && pickingWorksheet) {\n // if this is a new orderInventory and has existing worksheet then generate a new worksheet detail for it\n await generatePickingWorksheetDetail(tx, domain, user, pickingWorksheet, savedOrderInv)\n }\n }\n }\n\n await tx.getRepository(Worksheet).save(pickingWorksheet)\n }\n\n if (loadingWorksheet) {\n // if has loading worksheet, status will be deactivated to prevent any action from warehouse operator until office admin has confirmation\n loadingWorksheet = {\n ...loadingWorksheet,\n status: WORKSHEET_STATUS.DEACTIVATED\n }\n\n await tx.getRepository(Worksheet).save(loadingWorksheet)\n }\n\n // Update Order Product Release Qty\n let rgOrderProducts: OrderProduct[] = await tx\n .getRepository(OrderProduct)\n .find({ where: { domain: { id: domain.id }, releaseGood } })\n\n await Promise.all(\n rgOrderProducts.map(async op => {\n const orderInventories: OrderInventory[] = await tx.getRepository(OrderInventory).find({\n where: {\n domain: { id: domain.id },\n releaseGood: { id: releaseGood.id },\n orderProduct: { id: op.id },\n status: Not(\n In([\n ORDER_INVENTORY_STATUS.TERMINATED,\n ORDER_INVENTORY_STATUS.CANCELLED,\n ORDER_INVENTORY_STATUS.PENDING_CANCEL\n ])\n )\n }\n })\n\n let totalReleaseQty: number = orderInventories.reduce((total, currentValue) => {\n total += currentValue.releaseQty\n return total\n }, 0)\n\n let totalReleaseUomValue: number = orderInventories.reduce((total, currentValue) => {\n total += currentValue.releaseUomValue\n return total\n }, 0)\n\n let updateOPInfo: any = {\n releaseQty: totalReleaseQty,\n releaseUomValue: totalReleaseUomValue\n }\n\n if (totalReleaseQty <= 0) {\n updateOPInfo.status = ORDER_PRODUCT_STATUS.TERMINATED\n }\n\n await tx.getRepository(OrderProduct).update({ id: op.id }, updateOPInfo)\n })\n )\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Mutation = void 0;
|
|
4
|
+
const add_release_good_products_1 = require("./add-release-good-products");
|
|
5
|
+
exports.Mutation = Object.assign({}, add_release_good_products_1.addReleaseGoodProducts);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/extra/index.ts"],"names":[],"mappings":";;;AAAA,2EAAoE;AAEvD,QAAA,QAAQ,qBAChB,kDAAsB,EAC1B","sourcesContent":["import { addReleaseGoodProducts } from './add-release-good-products'\n\nexport const Mutation = {\n ...addReleaseGoodProducts\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Mutation = void 0;
|
|
4
|
+
exports.Mutation = `
|
|
5
|
+
addReleaseGoodProducts (
|
|
6
|
+
name: String!
|
|
7
|
+
orderInventories: [NewOrderInventory]
|
|
8
|
+
existingOrderInventories: [NewOrderInventory]
|
|
9
|
+
): Boolean @privilege(category: "order_customer", privilege: "mutation") @transaction
|
|
10
|
+
`;
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/extra/index.ts"],"names":[],"mappings":";;;AAAa,QAAA,QAAQ,GAAiB;;;;;;CAMrC,CAAA","sourcesContent":["export const Mutation = /* GraphQL */ `\n addReleaseGoodProducts (\n name: String!\n orderInventories: [NewOrderInventory]\n existingOrderInventories: [NewOrderInventory]\n ): Boolean @privilege(category: \"order_customer\", privilege: \"mutation\") @transaction\n`\n"]}
|