@things-factory/worksheet-base 5.0.13 → 5.0.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/dist-server/graphql/resolvers/worksheet/fetch-delivery-order-ro.js +169 -0
- package/dist-server/graphql/resolvers/worksheet/fetch-delivery-order-ro.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js +57 -0
- package/dist-server/graphql/resolvers/worksheet/fetch-sellercraft-document.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js +70 -0
- package/dist-server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.js.map +1 -0
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js +81 -0
- package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js.map +1 -0
- package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js +12 -0
- package/dist-server/graphql/types/worksheet/batch-pick-worksheet-info.js.map +1 -0
- package/dist-server/graphql/types/worksheet/delivery-order-ro.js +18 -0
- package/dist-server/graphql/types/worksheet/delivery-order-ro.js.map +1 -0
- package/dist-server/graphql/types/worksheet/sellercraft-document.js +11 -0
- package/dist-server/graphql/types/worksheet/sellercraft-document.js.map +1 -0
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +17 -17
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchDeliveryOrderROResolver = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const biz_base_1 = require("@things-factory/biz-base");
|
|
6
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
7
|
+
const shell_1 = require("@things-factory/shell");
|
|
8
|
+
const constants_1 = require("../../../constants");
|
|
9
|
+
const entities_1 = require("../../../entities");
|
|
10
|
+
const utils_1 = require("../../../utils");
|
|
11
|
+
exports.fetchDeliveryOrderROResolver = {
|
|
12
|
+
async fetchDeliveryOrderRO(_, { name }, context) {
|
|
13
|
+
const domain = await (0, typeorm_1.getRepository)(shell_1.Domain).findOne({
|
|
14
|
+
where: { id: context.state.domain.id }
|
|
15
|
+
});
|
|
16
|
+
const foundDO = await (0, typeorm_1.getRepository)(sales_base_1.DeliveryOrder).findOne({
|
|
17
|
+
where: { domain, name },
|
|
18
|
+
relations: [
|
|
19
|
+
'domain',
|
|
20
|
+
'bizplace',
|
|
21
|
+
'bizplace.company',
|
|
22
|
+
'bizplace.domain',
|
|
23
|
+
'transportDriver',
|
|
24
|
+
'transportVehicle',
|
|
25
|
+
'releaseGood',
|
|
26
|
+
'creator',
|
|
27
|
+
'updater'
|
|
28
|
+
]
|
|
29
|
+
});
|
|
30
|
+
const ownTransportFlag = foundDO.ownCollection;
|
|
31
|
+
let foundCP = null;
|
|
32
|
+
if (foundDO === null || foundDO === void 0 ? void 0 : foundDO.contactPointRefId) {
|
|
33
|
+
foundCP = await (0, typeorm_1.getRepository)(biz_base_1.ContactPoint).findOne({
|
|
34
|
+
where: { domain, id: foundDO.contactPointRefId }
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const foundRO = foundDO.releaseGood;
|
|
38
|
+
const partnerBiz = foundDO.bizplace; //customer bizplace
|
|
39
|
+
const ownRefNo = foundRO.refNo;
|
|
40
|
+
//find list of loaded inventory
|
|
41
|
+
const targetInventories = await (0, typeorm_1.getRepository)(sales_base_1.OrderInventory).find({
|
|
42
|
+
where: { domain, deliveryOrder: foundDO },
|
|
43
|
+
relations: ['inventory']
|
|
44
|
+
});
|
|
45
|
+
const orderInvIds = targetInventories.map((oi) => oi.id);
|
|
46
|
+
const foundWSD = await (0, typeorm_1.getRepository)(entities_1.WorksheetDetail).find({
|
|
47
|
+
where: {
|
|
48
|
+
domain,
|
|
49
|
+
targetInventory: (0, typeorm_1.In)(orderInvIds),
|
|
50
|
+
type: constants_1.WORKSHEET_TYPE.LOADING,
|
|
51
|
+
status: (0, typeorm_1.Equal)(constants_1.WORKSHEET_STATUS.DONE)
|
|
52
|
+
},
|
|
53
|
+
relations: [
|
|
54
|
+
'targetInventory',
|
|
55
|
+
'targetInventory.inventory',
|
|
56
|
+
'targetInventory.inventory.location',
|
|
57
|
+
'targetInventory.inventory.product',
|
|
58
|
+
'targetInventory.inventory.product.productDetails',
|
|
59
|
+
'targetInventory.inventory.reusablePallet',
|
|
60
|
+
'updater'
|
|
61
|
+
]
|
|
62
|
+
});
|
|
63
|
+
let foundDriver = null;
|
|
64
|
+
if (foundDO.status !== sales_base_1.ORDER_STATUS.READY_TO_DISPATCH) {
|
|
65
|
+
if ((foundDO === null || foundDO === void 0 ? void 0 : foundDO.ownCollection) && (foundDO === null || foundDO === void 0 ? void 0 : foundDO.otherDriver)) {
|
|
66
|
+
foundDriver = foundDO.otherDriver;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
foundDriver = foundDO.transportDriver.name;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
let productList = [];
|
|
73
|
+
productList = foundWSD
|
|
74
|
+
.map((wsd) => {
|
|
75
|
+
var _a, _b;
|
|
76
|
+
const targetInventory = wsd.targetInventory;
|
|
77
|
+
const inventory = targetInventory.inventory;
|
|
78
|
+
const productDetails = inventory.product.productDetails;
|
|
79
|
+
const matchedProductDetail = productDetails.find(productDetail => productDetail.packingType === inventory.packingType);
|
|
80
|
+
return {
|
|
81
|
+
product_name: `${inventory.product.name} (${inventory.product.description})`,
|
|
82
|
+
product_desc: `${((_a = inventory.product) === null || _a === void 0 ? void 0 : _a.description) || ''}`,
|
|
83
|
+
product_nameOnly: `${inventory.product.name}`,
|
|
84
|
+
product_sku: `${inventory.product.sku}`,
|
|
85
|
+
product_type: inventory.packingType,
|
|
86
|
+
product_size: matchedProductDetail ? matchedProductDetail.packingSize : inventory.packingSize,
|
|
87
|
+
product_batch: inventory.batchId,
|
|
88
|
+
product_batch_ref: inventory.batchIdRef,
|
|
89
|
+
product_qty: targetInventory.releaseQty,
|
|
90
|
+
product_weight: targetInventory.releaseWeight,
|
|
91
|
+
product_gross_weight: inventory.product.grossWeight,
|
|
92
|
+
product_uom_value: targetInventory.releaseUomValue,
|
|
93
|
+
product_uom: inventory.uom,
|
|
94
|
+
remark: targetInventory.remark,
|
|
95
|
+
inventory_remark: inventory.remark,
|
|
96
|
+
cross_docking: targetInventory.crossDocking,
|
|
97
|
+
pallet: (inventory === null || inventory === void 0 ? void 0 : inventory.reusablePallet) && ((_b = inventory === null || inventory === void 0 ? void 0 : inventory.reusablePallet) === null || _b === void 0 ? void 0 : _b.name) ? inventory.reusablePallet.name : ''
|
|
98
|
+
};
|
|
99
|
+
})
|
|
100
|
+
.reduce((newItem, item) => {
|
|
101
|
+
var foundItem = newItem.find(newItem => newItem.product_name === item.product_name &&
|
|
102
|
+
newItem.product_batch === item.product_batch &&
|
|
103
|
+
newItem.product_batch_ref === item.product_batch_ref &&
|
|
104
|
+
newItem.cross_docking === item.cross_docking &&
|
|
105
|
+
newItem.pallet === item.pallet);
|
|
106
|
+
if (!foundItem) {
|
|
107
|
+
foundItem = {
|
|
108
|
+
product_sku: item.product_sku,
|
|
109
|
+
product_name: item.product_name,
|
|
110
|
+
product_type: item.product_type,
|
|
111
|
+
product_size: item.product_size,
|
|
112
|
+
product_batch: item.product_batch,
|
|
113
|
+
product_batch_ref: item.product_batch_ref,
|
|
114
|
+
product_qty: item.product_qty,
|
|
115
|
+
product_weight: item.product_weight,
|
|
116
|
+
product_gross_weight: item.product_gross_weight,
|
|
117
|
+
product_uom_value: item.product_uom_value,
|
|
118
|
+
product_uom: item.product_uom,
|
|
119
|
+
product_desc: item.product_desc,
|
|
120
|
+
product_nameOnly: item.product_nameOnly,
|
|
121
|
+
remark: item.remark,
|
|
122
|
+
inventory_remark: item.inventory_remark,
|
|
123
|
+
palletQty: 1,
|
|
124
|
+
cross_docking: item.cross_docking,
|
|
125
|
+
pallet: item.pallet
|
|
126
|
+
};
|
|
127
|
+
newItem.push(foundItem);
|
|
128
|
+
return newItem;
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
return newItem.map(ni => {
|
|
132
|
+
if (ni.product_name === item.product_name &&
|
|
133
|
+
ni.product_batch === item.product_batch &&
|
|
134
|
+
ni.product_batch_ref === item.product_batch_ref &&
|
|
135
|
+
ni.cross_docking === item.cross_docking &&
|
|
136
|
+
ni.pallet === item.pallet) {
|
|
137
|
+
return Object.assign(Object.assign({}, ni), { palletQty: ni.palletQty + 1, product_qty: ni.product_qty + item.product_qty, product_weight: ni.product_weight + item.product_weight, product_uom_value: ni.product_uom_value + item.product_uom_value });
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
return ni;
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}, []);
|
|
145
|
+
const data = {
|
|
146
|
+
roNo: foundRO.name,
|
|
147
|
+
doNo: foundDO.name,
|
|
148
|
+
roRef: foundRO.refNo,
|
|
149
|
+
roRef2: foundRO.refNo2,
|
|
150
|
+
roRef3: foundRO.refNo3,
|
|
151
|
+
companyDomain: foundDO.bizplace.name,
|
|
152
|
+
recipientBiz: foundRO.attentionTo || '',
|
|
153
|
+
doDate: utils_1.DateTimeConverter.date(foundDO.createdAt),
|
|
154
|
+
productList: productList.map((prod, idx) => {
|
|
155
|
+
return {
|
|
156
|
+
batchNo: prod.product_batch,
|
|
157
|
+
sku: prod.product_sku,
|
|
158
|
+
name: prod.product_name,
|
|
159
|
+
type: prod.product_type,
|
|
160
|
+
loadedQty: prod.product_qty,
|
|
161
|
+
uom: prod.product_uom,
|
|
162
|
+
uomValue: `${Math.round(prod.product_uom_value * 100) / 100}`
|
|
163
|
+
};
|
|
164
|
+
})
|
|
165
|
+
};
|
|
166
|
+
return data;
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=fetch-delivery-order-ro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-delivery-order-ro.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet/fetch-delivery-order-ro.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash'\nimport FormData from 'form-data'\nimport fetch from 'node-fetch'\nimport { Equal, getRepository, In } from 'typeorm'\n\nimport { Partner } from '@things-factory/auth-base'\nimport { Bizplace, ContactPoint } from '@things-factory/biz-base'\nimport { DeliveryOrder, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory, Pallet } from '@things-factory/warehouse-base'\nimport { InventoryItem } from '@things-factory/warehouse-base'\nimport { TEMPLATE_TYPE, WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'\nimport { Worksheet, WorksheetDetail } from '../../../entities'\nimport { DateTimeConverter } from '../../../utils'\n\nexport const fetchDeliveryOrderROResolver = {\n async fetchDeliveryOrderRO(_: any, { name }, context: any) {\n const domain: Domain = await getRepository(Domain).findOne({\n where: { id: context.state.domain.id }\n })\n\n const foundDO: DeliveryOrder = await getRepository(DeliveryOrder).findOne({\n where: { domain, name },\n relations: [\n 'domain',\n 'bizplace',\n 'bizplace.company',\n 'bizplace.domain',\n 'transportDriver',\n 'transportVehicle',\n 'releaseGood',\n 'creator',\n 'updater'\n ]\n })\n\n const ownTransportFlag: Boolean = foundDO.ownCollection\n\n let foundCP: ContactPoint = null\n if (foundDO?.contactPointRefId) {\n foundCP = await getRepository(ContactPoint).findOne({\n where: { domain, id: foundDO.contactPointRefId }\n })\n }\n\n const foundRO: ReleaseGood = foundDO.releaseGood\n const partnerBiz: Bizplace = foundDO.bizplace //customer bizplace\n const ownRefNo = foundRO.refNo\n\n //find list of loaded inventory\n const targetInventories: OrderInventory[] = await getRepository(OrderInventory).find({\n where: { domain, deliveryOrder: foundDO },\n relations: ['inventory']\n })\n const orderInvIds: string[] = targetInventories.map((oi: any) => oi.id)\n\n const foundWSD: WorksheetDetail[] = await getRepository(WorksheetDetail).find({\n where: {\n domain,\n targetInventory: In(orderInvIds),\n type: WORKSHEET_TYPE.LOADING,\n status: Equal(WORKSHEET_STATUS.DONE)\n },\n relations: [\n 'targetInventory',\n 'targetInventory.inventory',\n 'targetInventory.inventory.location',\n 'targetInventory.inventory.product',\n 'targetInventory.inventory.product.productDetails',\n 'targetInventory.inventory.reusablePallet',\n 'updater'\n ]\n })\n\n let foundDriver: any = null\n if (foundDO.status !== ORDER_STATUS.READY_TO_DISPATCH) {\n if (foundDO?.ownCollection && foundDO?.otherDriver) {\n foundDriver = foundDO.otherDriver\n } else {\n foundDriver = foundDO.transportDriver.name\n }\n }\n\n let productList: any[] = []\n productList = foundWSD\n .map((wsd: WorksheetDetail) => {\n const targetInventory: OrderInventory = wsd.targetInventory\n const inventory: Inventory = targetInventory.inventory\n const productDetails: any[] = inventory.product.productDetails\n const matchedProductDetail: any = productDetails.find(\n productDetail => productDetail.packingType === inventory.packingType\n )\n return {\n product_name: `${inventory.product.name} (${inventory.product.description})`,\n product_desc: `${inventory.product?.description || ''}`,\n product_nameOnly: `${inventory.product.name}`,\n product_sku: `${inventory.product.sku}`,\n product_type: inventory.packingType,\n product_size: matchedProductDetail ? matchedProductDetail.packingSize : inventory.packingSize,\n product_batch: inventory.batchId,\n product_batch_ref: inventory.batchIdRef,\n product_qty: targetInventory.releaseQty,\n product_weight: targetInventory.releaseWeight,\n product_gross_weight: inventory.product.grossWeight,\n product_uom_value: targetInventory.releaseUomValue,\n product_uom: inventory.uom,\n remark: targetInventory.remark,\n inventory_remark: inventory.remark,\n cross_docking: targetInventory.crossDocking,\n pallet: inventory?.reusablePallet && inventory?.reusablePallet?.name ? inventory.reusablePallet.name : ''\n }\n })\n .reduce((newItem, item) => {\n var foundItem = newItem.find(\n newItem =>\n newItem.product_name === item.product_name &&\n newItem.product_batch === item.product_batch &&\n newItem.product_batch_ref === item.product_batch_ref &&\n newItem.cross_docking === item.cross_docking &&\n newItem.pallet === item.pallet\n )\n if (!foundItem) {\n foundItem = {\n product_sku: item.product_sku,\n product_name: item.product_name,\n product_type: item.product_type,\n product_size: item.product_size,\n product_batch: item.product_batch,\n product_batch_ref: item.product_batch_ref,\n product_qty: item.product_qty,\n product_weight: item.product_weight,\n product_gross_weight: item.product_gross_weight,\n product_uom_value: item.product_uom_value,\n product_uom: item.product_uom,\n product_desc: item.product_desc,\n product_nameOnly: item.product_nameOnly,\n remark: item.remark,\n inventory_remark: item.inventory_remark,\n palletQty: 1,\n cross_docking: item.cross_docking,\n pallet: item.pallet\n }\n\n newItem.push(foundItem)\n return newItem\n } else {\n return newItem.map(ni => {\n if (\n ni.product_name === item.product_name &&\n ni.product_batch === item.product_batch &&\n ni.product_batch_ref === item.product_batch_ref &&\n ni.cross_docking === item.cross_docking &&\n ni.pallet === item.pallet\n ) {\n return {\n ...ni,\n palletQty: ni.palletQty + 1,\n product_qty: ni.product_qty + item.product_qty,\n product_weight: ni.product_weight + item.product_weight,\n product_uom_value: ni.product_uom_value + item.product_uom_value\n }\n } else {\n return ni\n }\n })\n }\n }, [])\n\n const data = {\n roNo: foundRO.name,\n doNo: foundDO.name,\n roRef: foundRO.refNo,\n roRef2: foundRO.refNo2,\n roRef3: foundRO.refNo3,\n companyDomain: foundDO.bizplace.name,\n recipientBiz: foundRO.attentionTo || '',\n doDate: DateTimeConverter.date(foundDO.createdAt),\n productList: productList.map((prod: any, idx) => {\n return {\n batchNo: prod.product_batch,\n sku: prod.product_sku,\n name: prod.product_name,\n type: prod.product_type,\n loadedQty: prod.product_qty,\n uom: prod.product_uom,\n uomValue: `${Math.round(prod.product_uom_value * 100) / 100}`\n }\n })\n }\n\n return data\n }\n}\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fetchSellercraftDocumentResolver = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const integration_sellercraft_1 = require("@things-factory/integration-sellercraft");
|
|
6
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
7
|
+
const env_1 = require("@things-factory/env");
|
|
8
|
+
const controllers_1 = require("../../../controllers");
|
|
9
|
+
exports.fetchSellercraftDocumentResolver = {
|
|
10
|
+
async fetchSellercraftDocument(_, { releaseGoodId }, context) {
|
|
11
|
+
const { tx, domain, user } = context.state;
|
|
12
|
+
//find release goods base on id
|
|
13
|
+
let releaseGood = await (0, typeorm_1.getRepository)(sales_base_1.ReleaseGood).findOne({ where: { domain, id: releaseGoodId }, relations: ['bizplace', 'bizplace.domain'] });
|
|
14
|
+
//find user sellercraft data
|
|
15
|
+
const sellercraft = await (0, typeorm_1.getRepository)(integration_sellercraft_1.Sellercraft).findOne({
|
|
16
|
+
domain: releaseGood.bizplace.domain,
|
|
17
|
+
status: integration_sellercraft_1.SellercraftStatus.ACTIVE
|
|
18
|
+
});
|
|
19
|
+
// instantiate sellercraft controller
|
|
20
|
+
const sellercraftCtrl = new controllers_1.SellercraftController(tx, domain, user);
|
|
21
|
+
try {
|
|
22
|
+
// fetch document if not found
|
|
23
|
+
if (sellercraft && !(releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill)) {
|
|
24
|
+
try {
|
|
25
|
+
// try fetch order document / AWB
|
|
26
|
+
releaseGood = await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
try {
|
|
30
|
+
// retry initiate order document
|
|
31
|
+
await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
try {
|
|
35
|
+
// retry initiate order shipment / RTS
|
|
36
|
+
await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
throw new Error(`initiateOrderShipment: ${error}`);
|
|
40
|
+
}
|
|
41
|
+
throw new Error(`initiateOrderDocument: ${error}`);
|
|
42
|
+
}
|
|
43
|
+
throw new Error(`fetchOrderDocument: ${error}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const airwayBill = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.airwayBill;
|
|
47
|
+
const invoice = releaseGood === null || releaseGood === void 0 ? void 0 : releaseGood.invoice;
|
|
48
|
+
return { airwayBill, invoice };
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
// await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
|
|
52
|
+
env_1.logger.error(`packing-worksheet[getSellercraftDocument]:(data:${JSON.stringify({ sellercraft, releaseGood, domain, user })}) ${error} `);
|
|
53
|
+
throw new Error('Waiting for AWB from marketplace. Please retry in awhile');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=fetch-sellercraft-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-sellercraft-document.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet/fetch-sellercraft-document.ts"],"names":[],"mappings":";;;AAAA,qCAAsD;AAGtD,qFAAwF;AACxF,2DAAwD;AAExD,6CAA4C;AAE5C,sDAA4D;AAE/C,QAAA,gCAAgC,GAAG;IAC9C,KAAK,CAAC,wBAAwB,CAAC,CAAM,EAAE,EAAE,aAAa,EAAE,EAAE,OAAY;QACpE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAsD,OAAO,CAAC,KAAK,CAAA;QAE7F,+BAA+B;QAC/B,IAAI,WAAW,GAAgB,MAAM,IAAA,uBAAa,EAAC,wBAAW,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAA;QAE7J,6BAA6B;QAC7B,MAAM,WAAW,GAAgB,MAAM,IAAA,uBAAa,EAAC,qCAAW,CAAC,CAAC,OAAO,CAAC;YACxE,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,MAAM;YACnC,MAAM,EAAE,2CAAiB,CAAC,MAAM;SACjC,CAAC,CAAA;QAEF,qCAAqC;QACrC,MAAM,eAAe,GAA0B,IAAI,mCAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;QAE1F,IAAI;YACF,8BAA8B;YAC9B,IAAI,WAAW,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAU,CAAA,EAAE;gBAC3C,IAAI;oBACF,iCAAiC;oBACjC,WAAW,GAAG,MAAM,eAAe,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;iBACjF;gBAAC,OAAO,KAAK,EAAE;oBACd,IAAI;wBACF,gCAAgC;wBAChC,MAAM,eAAe,CAAC,qBAAqB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;qBACtE;oBAAC,OAAO,KAAK,EAAE;wBACd,IAAI;4BACF,sCAAsC;4BACtC,MAAM,eAAe,CAAC,qBAAqB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAA;yBACtE;wBAAC,OAAO,KAAK,EAAE;4BACd,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAA;yBACnD;wBACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAA;qBACnD;oBACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAA;iBAChD;aACF;YAED,MAAM,UAAU,GAAW,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,UAAU,CAAA;YAClD,MAAM,OAAO,GAAW,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,OAAO,CAAA;YAC5C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,CAAA;SAE/B;QAAC,OAAO,KAAK,EAAE;YACd,wEAAwE;YACxE,YAAM,CAAC,KAAK,CAAC,mDAAmD,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,CAAA;YAExI,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;SAC5E;IAEH,CAAC;CACF,CAAA","sourcesContent":["import { EntityManager, getRepository } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'\nimport { ReleaseGood } from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { logger } from '@things-factory/env'\n\nimport { SellercraftController } from '../../../controllers'\n\nexport const fetchSellercraftDocumentResolver = {\n async fetchSellercraftDocument(_: any, { releaseGoodId }, context: any) {\n const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state\n\n //find release goods base on id\n let releaseGood: ReleaseGood = await getRepository(ReleaseGood).findOne({ where: { domain, id: releaseGoodId }, relations: ['bizplace', 'bizplace.domain'] })\n\n //find user sellercraft data \n const sellercraft: Sellercraft = await getRepository(Sellercraft).findOne({\n domain: releaseGood.bizplace.domain,\n status: SellercraftStatus.ACTIVE\n })\n\n // instantiate sellercraft controller\n const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)\n\n try {\n // fetch document if not found\n if (sellercraft && !releaseGood?.airwayBill) {\n try {\n // try fetch order document / AWB\n releaseGood = await sellercraftCtrl.fetchOrderDocument(sellercraft, releaseGood)\n } catch (error) {\n try {\n // retry initiate order document\n await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)\n } catch (error) {\n try {\n // retry initiate order shipment / RTS\n await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)\n } catch (error) {\n throw new Error(`initiateOrderShipment: ${error}`)\n }\n throw new Error(`initiateOrderDocument: ${error}`)\n }\n throw new Error(`fetchOrderDocument: ${error}`)\n }\n }\n\n const airwayBill: string = releaseGood?.airwayBill\n const invoice: string = releaseGood?.invoice\n return { airwayBill, invoice }\n\n } catch (error) {\n // await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)\n logger.error(`packing-worksheet[getSellercraftDocument]:(data:${JSON.stringify({ sellercraft, releaseGood, domain, user })}) ${error} `)\n\n throw new Error('Waiting for AWB from marketplace. Please retry in awhile')\n }\n\n }\n}\n"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findSortingReleaseOrdersByTaskNoResolver = void 0;
|
|
4
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
5
|
+
const shell_1 = require("@things-factory/shell");
|
|
6
|
+
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
7
|
+
const constants_1 = require("../../../constants");
|
|
8
|
+
const entities_1 = require("../../../entities");
|
|
9
|
+
exports.findSortingReleaseOrdersByTaskNoResolver = {
|
|
10
|
+
async findSortingReleaseOrdersByTaskNo(_, { taskNo }, context) {
|
|
11
|
+
const { domain, tx } = context.state;
|
|
12
|
+
let task = await tx.getRepository(entities_1.Worksheet).findOne({
|
|
13
|
+
where: { taskNo, status: constants_1.WORKSHEET_STATUS.EXECUTING, type: constants_1.WORKSHEET_TYPE.SORTING }
|
|
14
|
+
});
|
|
15
|
+
// Find Task based on Bin
|
|
16
|
+
if (!task) {
|
|
17
|
+
const binLocation = await tx.getRepository(warehouse_base_1.Location).findOne({
|
|
18
|
+
where: { domain, name: taskNo }
|
|
19
|
+
});
|
|
20
|
+
const qb = tx
|
|
21
|
+
.getRepository(sales_base_1.OrderInventory)
|
|
22
|
+
.createQueryBuilder('orderInventory');
|
|
23
|
+
qb.innerJoinAndSelect('orderInventory.releaseGood', 'releaseGood')
|
|
24
|
+
.innerJoinAndSelect('worksheets', 'ws', `orderInventory.ref_worksheet_id = ws.id AND ws.type = 'BATCH_PICKING'`)
|
|
25
|
+
.innerJoinAndSelect('worksheets', 'ws2', `ws2.task_no = ws.task_no AND ws2.type = 'SORTING'`)
|
|
26
|
+
.innerJoinAndSelect('releaseGood.bizplace', 'bizplace')
|
|
27
|
+
.innerJoinAndSelect('bizplace.domain', 'domain')
|
|
28
|
+
.where('orderInventory.domain_id = :domainId', { domainId: domain.id })
|
|
29
|
+
.andWhere('orderInventory.status IN (:...orderInventoryStatus)', {
|
|
30
|
+
orderInventoryStatus: [sales_base_1.ORDER_INVENTORY_STATUS.SORTING]
|
|
31
|
+
})
|
|
32
|
+
.andWhere('orderInventory.bin_location_id = :locationId', { locationId: binLocation.id })
|
|
33
|
+
.andWhere('releaseGood.status = :status', { status: sales_base_1.ORDER_STATUS.SORTING });
|
|
34
|
+
const orderInventoryByBin = await qb.getRawOne();
|
|
35
|
+
if (orderInventoryByBin === null || orderInventoryByBin === void 0 ? void 0 : orderInventoryByBin.releaseGood_id) {
|
|
36
|
+
taskNo = orderInventoryByBin.ws_task_no;
|
|
37
|
+
task = await tx.getRepository(entities_1.Worksheet).findOne({
|
|
38
|
+
where: { taskNo, status: constants_1.WORKSHEET_STATUS.EXECUTING, type: constants_1.WORKSHEET_TYPE.SORTING }
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
throw new Error(`Bin do not have any batch picking order.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (!task)
|
|
46
|
+
throw new Error('Unable to find task no.');
|
|
47
|
+
const qb = tx
|
|
48
|
+
.getRepository(entities_1.Worksheet)
|
|
49
|
+
.createQueryBuilder('ws')
|
|
50
|
+
.select('rg.id as id')
|
|
51
|
+
.addSelect('rg.name as name')
|
|
52
|
+
.addSelect('rg.status as status')
|
|
53
|
+
.innerJoin(shell_1.Domain, 'domain', 'ws.domain_id = domain.id')
|
|
54
|
+
.innerJoin(entities_1.WorksheetDetail, 'wsd', 'ws.id = wsd.worksheet_id')
|
|
55
|
+
.innerJoin(sales_base_1.OrderInventory, 'oi', 'oi.id = wsd.target_inventory_id')
|
|
56
|
+
.innerJoin(sales_base_1.ReleaseGood, 'rg', 'rg.id = oi.release_good_id')
|
|
57
|
+
.where('domain.id = :domainId', { domainId: domain.id })
|
|
58
|
+
.andWhere('ws.taskNo = :taskNo', { taskNo: taskNo })
|
|
59
|
+
.andWhere('ws.type = :worksheetType', { worksheetType: constants_1.WORKSHEET_TYPE.SORTING })
|
|
60
|
+
.andWhere('ws.status = :worksheetStatus', { worksheetStatus: constants_1.WORKSHEET_STATUS.EXECUTING })
|
|
61
|
+
.andWhere('rg.status = :roStatus', { roStatus: sales_base_1.ORDER_STATUS.SORTING })
|
|
62
|
+
.groupBy('rg.id')
|
|
63
|
+
.addGroupBy('rg.name')
|
|
64
|
+
.addGroupBy('rg.status')
|
|
65
|
+
.orderBy('rg.createdAt', 'ASC');
|
|
66
|
+
const releaseGoods = await qb.getRawMany();
|
|
67
|
+
return { releaseGoods, taskNo };
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=find-sorting-release-orders-by-task-no.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-sorting-release-orders-by-task-no.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet/find-sorting-release-orders-by-task-no.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager, SelectQueryBuilder } from 'typeorm'\n\nimport {\n ORDER_INVENTORY_STATUS,\n ORDER_STATUS,\n OrderInventory as OrderInventoryEntity,\n ReleaseGood as ReleaseGoodEntity\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { Location } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'\nimport { Worksheet as WorksheetEntity, WorksheetDetail as WorksheetDetailEntity } from '../../../entities'\n\nexport const findSortingReleaseOrdersByTaskNoResolver = {\n async findSortingReleaseOrdersByTaskNo(_: any, { taskNo }, context: any) {\n const { domain, tx }: { domain: Domain; tx: EntityManager } = context.state\n let task = await tx.getRepository(WorksheetEntity).findOne({\n where: { taskNo, status: WORKSHEET_STATUS.EXECUTING, type: WORKSHEET_TYPE.SORTING }\n })\n\n // Find Task based on Bin\n if (!task) {\n const binLocation: Location = await tx.getRepository(Location).findOne({\n where: { domain, name: taskNo }\n })\n\n const qb: SelectQueryBuilder<OrderInventoryEntity> = tx\n .getRepository(OrderInventoryEntity)\n .createQueryBuilder('orderInventory')\n\n qb.innerJoinAndSelect('orderInventory.releaseGood', 'releaseGood')\n .innerJoinAndSelect('worksheets', 'ws', `orderInventory.ref_worksheet_id = ws.id AND ws.type = 'BATCH_PICKING'`)\n .innerJoinAndSelect('worksheets', 'ws2', `ws2.task_no = ws.task_no AND ws2.type = 'SORTING'`)\n .innerJoinAndSelect('releaseGood.bizplace', 'bizplace')\n .innerJoinAndSelect('bizplace.domain', 'domain')\n .where('orderInventory.domain_id = :domainId', { domainId: domain.id })\n .andWhere('orderInventory.status IN (:...orderInventoryStatus)', {\n orderInventoryStatus: [ORDER_INVENTORY_STATUS.SORTING]\n })\n .andWhere('orderInventory.bin_location_id = :locationId', { locationId: binLocation.id })\n .andWhere('releaseGood.status = :status', { status: ORDER_STATUS.SORTING })\n\n const orderInventoryByBin = await qb.getRawOne()\n if (orderInventoryByBin?.releaseGood_id) {\n taskNo = orderInventoryByBin.ws_task_no\n task = await tx.getRepository(WorksheetEntity).findOne({\n where: { taskNo, status: WORKSHEET_STATUS.EXECUTING, type: WORKSHEET_TYPE.SORTING }\n })\n } else {\n throw new Error(`Bin do not have any batch picking order.`)\n }\n }\n\n if (!task) throw new Error('Unable to find task no.')\n\n const qb: SelectQueryBuilder<WorksheetEntity> = tx\n .getRepository(WorksheetEntity)\n .createQueryBuilder('ws')\n .select('rg.id as id')\n .addSelect('rg.name as name')\n .addSelect('rg.status as status')\n .innerJoin(Domain, 'domain', 'ws.domain_id = domain.id')\n .innerJoin(WorksheetDetailEntity, 'wsd', 'ws.id = wsd.worksheet_id')\n .innerJoin(OrderInventoryEntity, 'oi', 'oi.id = wsd.target_inventory_id')\n .innerJoin(ReleaseGoodEntity, 'rg', 'rg.id = oi.release_good_id')\n .where('domain.id = :domainId', { domainId: domain.id })\n .andWhere('ws.taskNo = :taskNo', { taskNo: taskNo })\n .andWhere('ws.type = :worksheetType', { worksheetType: WORKSHEET_TYPE.SORTING })\n .andWhere('ws.status = :worksheetStatus', { worksheetStatus: WORKSHEET_STATUS.EXECUTING })\n .andWhere('rg.status = :roStatus', { roStatus: ORDER_STATUS.SORTING })\n .groupBy('rg.id')\n .addGroupBy('rg.name')\n .addGroupBy('rg.status')\n .orderBy('rg.createdAt', 'ASC')\n\n const releaseGoods: ReleaseGoodEntity[] = await qb.getRawMany()\n return { releaseGoods, taskNo }\n }\n}"]}
|
package/dist-server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.regenerateReleaseGoodWorksheetDetails = exports.regenerateReleaseGoodWorksheetDetailsResolver = void 0;
|
|
4
|
+
const product_base_1 = require("@things-factory/product-base");
|
|
5
|
+
const sales_base_1 = require("@things-factory/sales-base");
|
|
6
|
+
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
7
|
+
const constants_1 = require("../../../constants");
|
|
8
|
+
const entities_1 = require("../../../entities");
|
|
9
|
+
const utils_1 = require("../../../utils");
|
|
10
|
+
exports.regenerateReleaseGoodWorksheetDetailsResolver = {
|
|
11
|
+
async regenerateReleaseGoodWorksheetDetails(_, { worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails }, context) {
|
|
12
|
+
const { tx, domain, user } = context.state;
|
|
13
|
+
return await regenerateReleaseGoodWorksheetDetails(tx, domain, user, worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
async function regenerateReleaseGoodWorksheetDetails(tx, domain, user, worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails) {
|
|
17
|
+
// 1. Remove prev worksheet details if it's exists
|
|
18
|
+
const worksheet = await tx.getRepository(entities_1.Worksheet).findOne({
|
|
19
|
+
where: { name: worksheetNo, domain },
|
|
20
|
+
relations: [
|
|
21
|
+
'bizplace',
|
|
22
|
+
'releaseGood',
|
|
23
|
+
'worksheetDetails',
|
|
24
|
+
'worksheetDetails.targetInventory',
|
|
25
|
+
'worksheetDetails.targetInventory.inventory',
|
|
26
|
+
'worksheetDetails.targetInventory.product',
|
|
27
|
+
'worksheetDetails.targetInventory.releaseGood',
|
|
28
|
+
'worksheetDetails.targetInventory.orderProduct',
|
|
29
|
+
'worksheetDetails.targetInventory.bizplace'
|
|
30
|
+
]
|
|
31
|
+
});
|
|
32
|
+
const prevWSDs = worksheet.worksheetDetails.filter((wsd) => {
|
|
33
|
+
const targetInv = wsd.targetInventory;
|
|
34
|
+
if (targetInv.orderProductId === orderProductId)
|
|
35
|
+
return wsd.id;
|
|
36
|
+
});
|
|
37
|
+
// TODO: Update prev inventory locked qty and delete order inventories
|
|
38
|
+
if (prevWSDs === null || prevWSDs === void 0 ? void 0 : prevWSDs.length) {
|
|
39
|
+
const wsdIds = prevWSDs.map((wsd) => wsd.id);
|
|
40
|
+
const prevOrderInvIds = prevWSDs.map((wsd) => wsd.targetInventory.id);
|
|
41
|
+
const prevOrderInventories = prevWSDs.map((wsd) => wsd.targetInventory);
|
|
42
|
+
await Promise.all(prevOrderInventories.map(async (prevOI) => {
|
|
43
|
+
if (prevOI === null || prevOI === void 0 ? void 0 : prevOI.inventory) {
|
|
44
|
+
await tx.getRepository(warehouse_base_1.Inventory).update({ id: prevOI.inventory.id }, {
|
|
45
|
+
lockedQty: prevOI.inventory.lockedQty - prevOI.releaseQty,
|
|
46
|
+
lockedUomValue: prevOI.inventory.lockedUomValue - prevOI.releaseUomValue
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}));
|
|
50
|
+
await tx.getRepository(entities_1.WorksheetDetail).delete(wsdIds);
|
|
51
|
+
await tx.getRepository(sales_base_1.OrderInventory).delete(prevOrderInvIds);
|
|
52
|
+
}
|
|
53
|
+
await Promise.all(worksheetDetails.map(async (wsd) => {
|
|
54
|
+
// 2. Create order inventory
|
|
55
|
+
let targetInventory = wsd.targetInventory;
|
|
56
|
+
const inventory = await tx.getRepository(warehouse_base_1.Inventory).findOne(targetInventory.inventory.id);
|
|
57
|
+
let targetProduct = await tx
|
|
58
|
+
.getRepository(sales_base_1.OrderProduct)
|
|
59
|
+
.findOne({ where: { id: wsd.targetProduct.id }, relations: ['releaseGood'] });
|
|
60
|
+
targetInventory = await tx.getRepository(sales_base_1.OrderInventory).save(Object.assign(Object.assign({}, targetInventory), { domain, bizplace: worksheet.bizplace, name: sales_base_1.OrderNoGenerator.orderInventory(), releaseGood: worksheet.type == constants_1.WORKSHEET_TYPE.BATCH_PICKING ? targetProduct.releaseGood : worksheet.releaseGood, inventory, batchId: inventory.batchId, batchIdRef: inventory.batchIdRef, status: sales_base_1.ORDER_INVENTORY_STATUS.READY_TO_PICK, product: await tx.getRepository(product_base_1.Product).findOne(productId), packingType,
|
|
61
|
+
packingSize, orderProduct: targetProduct, refWorksheetId: worksheet.type == constants_1.WORKSHEET_TYPE.BATCH_PICKING ? worksheet.id : null, creator: user, updater: user }));
|
|
62
|
+
const currentLockedQty = inventory.lockedQty;
|
|
63
|
+
const currentLockedUomValue = inventory.lockedUomValue;
|
|
64
|
+
await tx.getRepository(warehouse_base_1.Inventory).save(Object.assign(Object.assign({}, targetInventory.inventory), { lockedQty: Boolean(currentLockedQty)
|
|
65
|
+
? targetInventory.releaseQty + currentLockedQty
|
|
66
|
+
: targetInventory.releaseQty, lockedUomValue: Boolean(currentLockedUomValue)
|
|
67
|
+
? targetInventory.releaseUomValue + currentLockedUomValue
|
|
68
|
+
: targetInventory.releaseUomValue, updater: user }));
|
|
69
|
+
// update order product status to ASSIGNED
|
|
70
|
+
await tx
|
|
71
|
+
.getRepository(sales_base_1.OrderProduct)
|
|
72
|
+
.update({ id: targetProduct.id }, { status: sales_base_1.ORDER_PRODUCT_STATUS.ASSIGNED, updater: user });
|
|
73
|
+
// 3. Create worksheet details
|
|
74
|
+
await tx.getRepository(entities_1.WorksheetDetail).save(Object.assign(Object.assign({}, wsd), { domain, bizplace: worksheet.bizplace, worksheet, name: worksheet.type == constants_1.WORKSHEET_TYPE.BATCH_PICKING
|
|
75
|
+
? utils_1.WorksheetNoGenerator.batchPickingDetail()
|
|
76
|
+
: utils_1.WorksheetNoGenerator.pickingDetail(), targetProduct,
|
|
77
|
+
targetInventory, type: worksheet.type == constants_1.WORKSHEET_TYPE.BATCH_PICKING ? constants_1.WORKSHEET_TYPE.BATCH_PICKING : constants_1.WORKSHEET_TYPE.PICKING, status: constants_1.WORKSHEET_STATUS.DEACTIVATED, creator: user, updater: user }));
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
exports.regenerateReleaseGoodWorksheetDetails = regenerateReleaseGoodWorksheetDetails;
|
|
81
|
+
//# sourceMappingURL=regenerate-release-good-worksheet-details.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regenerate-release-good-worksheet-details.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet-detail/regenerate-release-good-worksheet-details.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Product } from '@things-factory/product-base'\nimport {\n ORDER_INVENTORY_STATUS,\n ORDER_PRODUCT_STATUS,\n OrderInventory,\n OrderNoGenerator,\n OrderProduct\n} from '@things-factory/sales-base'\nimport { Domain } from '@things-factory/shell'\nimport { Inventory } from '@things-factory/warehouse-base'\n\nimport { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../constants'\nimport { Worksheet, WorksheetDetail } from '../../../entities'\nimport { WorksheetNoGenerator } from '../../../utils'\n\nexport const regenerateReleaseGoodWorksheetDetailsResolver = {\n async regenerateReleaseGoodWorksheetDetails(\n _: any,\n { worksheetNo, batchId, productId, packingType, packingSize, orderProductId, worksheetDetails },\n context: any\n ): Promise<void> {\n const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state\n return await regenerateReleaseGoodWorksheetDetails(\n tx,\n domain,\n user,\n worksheetNo,\n batchId,\n productId,\n packingType,\n packingSize,\n orderProductId,\n worksheetDetails\n )\n }\n}\n\nexport async function regenerateReleaseGoodWorksheetDetails(\n tx: EntityManager,\n domain: Domain,\n user: User,\n worksheetNo: string,\n batchId: string,\n productId: string,\n packingType: string,\n packingSize: number,\n orderProductId: string,\n worksheetDetails: Partial<WorksheetDetail>[]\n): Promise<void> {\n // 1. Remove prev worksheet details if it's exists\n const worksheet: Worksheet = await tx.getRepository(Worksheet).findOne({\n where: { name: worksheetNo, domain },\n relations: [\n 'bizplace',\n 'releaseGood',\n 'worksheetDetails',\n 'worksheetDetails.targetInventory',\n 'worksheetDetails.targetInventory.inventory',\n 'worksheetDetails.targetInventory.product',\n 'worksheetDetails.targetInventory.releaseGood',\n 'worksheetDetails.targetInventory.orderProduct',\n 'worksheetDetails.targetInventory.bizplace'\n ]\n })\n\n const prevWSDs: WorksheetDetail[] = worksheet.worksheetDetails.filter((wsd: WorksheetDetail) => {\n const targetInv: OrderInventory = wsd.targetInventory\n if (targetInv.orderProductId === orderProductId) return wsd.id\n })\n\n // TODO: Update prev inventory locked qty and delete order inventories\n if (prevWSDs?.length) {\n const wsdIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.id)\n const prevOrderInvIds: string[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.targetInventory.id)\n const prevOrderInventories: OrderInventory[] = prevWSDs.map((wsd: WorksheetDetail) => wsd.targetInventory)\n await Promise.all(\n prevOrderInventories.map(async prevOI => {\n if (prevOI?.inventory) {\n await tx.getRepository(Inventory).update(\n { id: prevOI.inventory.id },\n {\n lockedQty: prevOI.inventory.lockedQty - prevOI.releaseQty,\n lockedUomValue: prevOI.inventory.lockedUomValue - prevOI.releaseUomValue\n }\n )\n }\n })\n )\n\n await tx.getRepository(WorksheetDetail).delete(wsdIds)\n await tx.getRepository(OrderInventory).delete(prevOrderInvIds)\n }\n\n await Promise.all(\n worksheetDetails.map(async (wsd: WorksheetDetail) => {\n // 2. Create order inventory\n let targetInventory: OrderInventory = wsd.targetInventory\n const inventory: Inventory = await tx.getRepository(Inventory).findOne(targetInventory.inventory.id)\n\n let targetProduct: OrderProduct = await tx\n .getRepository(OrderProduct)\n .findOne({ where: { id: wsd.targetProduct.id }, relations: ['releaseGood'] })\n\n targetInventory = await tx.getRepository(OrderInventory).save({\n ...targetInventory,\n domain,\n bizplace: worksheet.bizplace,\n name: OrderNoGenerator.orderInventory(),\n releaseGood: worksheet.type == WORKSHEET_TYPE.BATCH_PICKING ? targetProduct.releaseGood : worksheet.releaseGood,\n inventory,\n batchId: inventory.batchId,\n batchIdRef: inventory.batchIdRef,\n status: ORDER_INVENTORY_STATUS.READY_TO_PICK,\n product: await tx.getRepository(Product).findOne(productId),\n packingType,\n packingSize,\n orderProduct: targetProduct,\n refWorksheetId: worksheet.type == WORKSHEET_TYPE.BATCH_PICKING ? worksheet.id : null,\n creator: user,\n updater: user\n })\n\n const currentLockedQty: any = inventory.lockedQty\n const currentLockedUomValue: any = inventory.lockedUomValue\n\n await tx.getRepository(Inventory).save({\n ...targetInventory.inventory,\n lockedQty: Boolean(currentLockedQty)\n ? targetInventory.releaseQty + currentLockedQty\n : targetInventory.releaseQty,\n lockedUomValue: Boolean(currentLockedUomValue)\n ? targetInventory.releaseUomValue + currentLockedUomValue\n : targetInventory.releaseUomValue,\n updater: user\n })\n\n // update order product status to ASSIGNED\n await tx\n .getRepository(OrderProduct)\n .update({ id: targetProduct.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: user })\n\n // 3. Create worksheet details\n await tx.getRepository(WorksheetDetail).save({\n ...wsd,\n domain,\n bizplace: worksheet.bizplace,\n worksheet,\n name:\n worksheet.type == WORKSHEET_TYPE.BATCH_PICKING\n ? WorksheetNoGenerator.batchPickingDetail()\n : WorksheetNoGenerator.pickingDetail(),\n targetProduct,\n targetInventory,\n type: worksheet.type == WORKSHEET_TYPE.BATCH_PICKING ? WORKSHEET_TYPE.BATCH_PICKING : WORKSHEET_TYPE.PICKING,\n status: WORKSHEET_STATUS.DEACTIVATED,\n creator: user,\n updater: user\n })\n })\n )\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GenerateBatchPickInfo = void 0;
|
|
4
|
+
const apollo_server_koa_1 = require("apollo-server-koa");
|
|
5
|
+
exports.GenerateBatchPickInfo = (0, apollo_server_koa_1.gql) `
|
|
6
|
+
input GenerateBatchPickInfo {
|
|
7
|
+
releaseGoodNo: String
|
|
8
|
+
bizplaceId: String
|
|
9
|
+
bizplaceName: String
|
|
10
|
+
}
|
|
11
|
+
`;
|
|
12
|
+
//# sourceMappingURL=batch-pick-worksheet-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-pick-worksheet-info.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/batch-pick-worksheet-info.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,qBAAqB,GAAG,IAAA,uBAAG,EAAA;;;;;;CAMvC,CAAA","sourcesContent":["import { gql } from 'apollo-server-koa'\n\nexport const GenerateBatchPickInfo = gql`\n input GenerateBatchPickInfo {\n releaseGoodNo: String\n bizplaceId: String\n bizplaceName: String\n }\n`"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeliveryOrderRO = void 0;
|
|
4
|
+
const apollo_server_koa_1 = require("apollo-server-koa");
|
|
5
|
+
exports.DeliveryOrderRO = (0, apollo_server_koa_1.gql) `
|
|
6
|
+
type DeliveryOrderRO {
|
|
7
|
+
roNo: String
|
|
8
|
+
doNo: String
|
|
9
|
+
roRef: String
|
|
10
|
+
roRef2: String
|
|
11
|
+
roRef3: String
|
|
12
|
+
companyDomain: String
|
|
13
|
+
recipientBiz: String
|
|
14
|
+
doDate: String
|
|
15
|
+
productList:[Product]
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
18
|
+
//# sourceMappingURL=delivery-order-ro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-order-ro.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/delivery-order-ro.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,eAAe,GAAG,IAAA,uBAAG,EAAA;;;;;;;;;;;;CAYjC,CAAA","sourcesContent":["import { gql } from 'apollo-server-koa'\n\nexport const DeliveryOrderRO = gql`\n type DeliveryOrderRO {\n roNo: String\n doNo: String\n roRef: String\n roRef2: String\n roRef3: String\n companyDomain: String\n recipientBiz: String\n doDate: String\n productList:[Product]\n }\n`\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SellercraftDocument = void 0;
|
|
4
|
+
const apollo_server_koa_1 = require("apollo-server-koa");
|
|
5
|
+
exports.SellercraftDocument = (0, apollo_server_koa_1.gql) `
|
|
6
|
+
type SellercraftDocument {
|
|
7
|
+
airwayBill: String,
|
|
8
|
+
invoice: String
|
|
9
|
+
}
|
|
10
|
+
`;
|
|
11
|
+
//# sourceMappingURL=sellercraft-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sellercraft-document.js","sourceRoot":"","sources":["../../../../server/graphql/types/worksheet/sellercraft-document.ts"],"names":[],"mappings":";;;AAAA,yDAAuC;AAE1B,QAAA,mBAAmB,GAAG,IAAA,uBAAG,EAAA;;;;;CAKrC,CAAA","sourcesContent":["import { gql } from 'apollo-server-koa'\n\nexport const SellercraftDocument = gql`\n type SellercraftDocument {\n airwayBill: String,\n invoice: String\n }\n`\n"]}
|