@things-factory/operato-wms 5.0.13 → 6.0.0-alpha.1
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/client/pages/bulk-operation/bulk-operation.js +96 -8
- package/client/pages/bulk-operation/validate-gan-popup.js +37 -27
- package/client/pages/bulk-operation/validate-ro-popup.js +40 -0
- package/client/pages/components/select-inventory-popup.js +633 -0
- package/client/pages/constants/order.js +2 -1
- package/client/pages/inbound/pallet-label-popup.js +2 -0
- package/client/pages/inbound/select-product-batch.js +7 -1
- package/client/pages/inbound/undo-unload-popup.js +37 -21
- package/client/pages/inbound/unload-product.js +147 -59
- package/client/pages/inbound/worksheet-putaway.js +1 -1
- package/client/pages/inbound/worksheet-unloading.js +11 -7
- package/client/pages/inventory/inventory-adjustment.js +261 -238
- package/client/pages/inventory/inventory-by-product-detail.js +99 -92
- package/client/pages/inventory/inventory-by-product.js +170 -68
- package/client/pages/inventory/onhand-inventory.js +10 -12
- package/client/pages/inventory/serial-number-list-popup.js +36 -5
- package/client/pages/inventory-check/inspecting-product.js +1 -1
- package/client/pages/manifest/create-loading-manifest.js +47 -22
- package/client/pages/manifest/dispatcher-verification-popup.js +24 -13
- package/client/pages/manifest/loading-manifest-detail.js +311 -46
- package/client/pages/manifest/loading-manifest-list.js +86 -13
- package/client/pages/order/arrival-notice/arrival-notice-detail.js +305 -52
- package/client/pages/order/arrival-notice/arrival-notice-list.js +20 -1
- package/client/pages/order/arrival-notice/create-arrival-notice.js +2 -2
- package/client/pages/order/goods-received-note/received-note-detail.js +187 -15
- package/client/pages/order/release-order/b2b/b2b-order-list.js +76 -80
- package/client/pages/order/release-order/b2c/b2c-order-requests.js +148 -123
- package/client/pages/order/release-order/batch-picking-popup.js +11 -0
- package/client/pages/order/release-order/create-release-order.js +762 -250
- package/client/pages/order/release-order/release-extra-product-popup.js +10 -3
- package/client/pages/order/release-order/release-order-detail.js +897 -215
- package/client/pages/order/transport-order/delivery-note-popup.js +1050 -107
- package/client/pages/order/transport-order/print-delivery-note.js +214 -33
- package/client/pages/order/transport-order/upload-delivery-note.js +6 -4
- package/client/pages/order/transport-order/view-delivery-note.js +0 -1
- package/client/pages/outbound/generate-worksheet-popup.js +374 -0
- package/client/pages/outbound/inventory-reassign-popup.js +1097 -0
- package/client/pages/outbound/loading-product.js +88 -78
- package/client/pages/outbound/merged-outbound-worksheet.js +1 -1
- package/client/pages/outbound/packing-product.js +193 -82
- package/client/pages/outbound/packing-worksheet-list.js +10 -9
- package/client/pages/outbound/picking-product.js +979 -905
- package/client/pages/outbound/route-label-popup.js +283 -191
- package/client/pages/outbound/serial-number-popup.js +1 -0
- package/client/pages/outbound/sorting-product.js +12 -12
- package/client/pages/outbound/worksheet-batch-picking.js +39 -5
- package/client/pages/outbound/worksheet-packing.js +17 -4
- package/client/pages/outbound/worksheet-picking.js +45 -6
- package/client/pages/report/inbound-serial-number-report.js +86 -9
- package/client/pages/report/inventory-report.js +10 -0
- package/client/pages/report/inventory-summary-report.js +28 -19
- package/client/pages/report/outbound-order-details-report.js +204 -43
- package/client/pages/report/outbound-serial-number-report.js +87 -9
- package/client/pages/report/release-inventory-report.js +503 -0
- package/client/route.js +5 -0
- package/client/util/index.js +2 -0
- package/client/util/page-settings.js +43 -0
- package/client/util/toast.js +10 -0
- package/dist-server/graphql/resolvers/board-setting/board-settings.js +3 -3
- package/dist-server/graphql/resolvers/board-setting/board-settings.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js +2 -2
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js +2 -2
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js +9 -10
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js +2 -2
- package/dist-server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js +6 -4
- package/dist-server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.js.map +1 -1
- package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js +6 -4
- package/dist-server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js +21 -10
- package/dist-server/graphql/resolvers/dashboard/arrival-notices-by-status.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js +1 -2
- package/dist-server/graphql/resolvers/dashboard/collection-orders-by-status.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js +1 -2
- package/dist-server/graphql/resolvers/dashboard/delivery-orders-by-status.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/index.js +2 -1
- package/dist-server/graphql/resolvers/dashboard/index.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js +17 -1
- package/dist-server/graphql/resolvers/dashboard/inventory-expiry-monitor.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js +113 -75
- package/dist-server/graphql/resolvers/dashboard/outbound-order-by-status.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js +21 -10
- package/dist-server/graphql/resolvers/dashboard/release-goods-by-status.js.map +1 -1
- package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js +56 -0
- package/dist-server/graphql/resolvers/dashboard/unit-inbounded-outbounded.js.map +1 -0
- package/dist-server/graphql/resolvers/index.js +5 -4
- package/dist-server/graphql/resolvers/index.js.map +1 -1
- package/dist-server/graphql/resolvers/inventory-comparison/inventory-comparison-list.js.map +1 -1
- package/dist-server/graphql/resolvers/opa-menu/opa-menus.js +8 -7
- package/dist-server/graphql/resolvers/opa-menu/opa-menus.js.map +1 -1
- package/dist-server/graphql/resolvers/{extra → other}/add-release-good-products.js +59 -8
- package/dist-server/graphql/resolvers/other/add-release-good-products.js.map +1 -0
- package/dist-server/graphql/resolvers/{extra → other}/index.js +3 -1
- package/dist-server/graphql/resolvers/other/index.js.map +1 -0
- package/dist-server/graphql/resolvers/other/page-settings.js +87 -0
- package/dist-server/graphql/resolvers/other/page-settings.js.map +1 -0
- package/dist-server/graphql/resolvers/reports/costing-report.js +4 -4
- package/dist-server/graphql/resolvers/reports/costing-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js +3 -3
- package/dist-server/graphql/resolvers/reports/inbound-order-details-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js +36 -7
- package/dist-server/graphql/resolvers/reports/inbound-serial-number-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/index.js +2 -1
- package/dist-server/graphql/resolvers/reports/index.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js +69 -30
- package/dist-server/graphql/resolvers/reports/outbound-order-details-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js +36 -11
- package/dist-server/graphql/resolvers/reports/outbound-serial-number-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/product-label-report.js +3 -3
- package/dist-server/graphql/resolvers/reports/product-label-report.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/release-inventory-report.js +180 -0
- package/dist-server/graphql/resolvers/reports/release-inventory-report.js.map +1 -0
- package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js +2 -2
- package/dist-server/graphql/resolvers/shipping-provider/shipping-providers.js.map +1 -1
- package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js +1 -1
- package/dist-server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.js.map +1 -1
- package/dist-server/graphql/types/dashboard/index.js +1 -0
- package/dist-server/graphql/types/dashboard/index.js.map +1 -1
- package/dist-server/graphql/types/index.js +7 -2
- package/dist-server/graphql/types/index.js.map +1 -1
- package/dist-server/graphql/types/other/index.js +19 -0
- package/dist-server/graphql/types/other/index.js.map +1 -0
- package/dist-server/graphql/types/other/page-setting.js +34 -0
- package/dist-server/graphql/types/other/page-setting.js.map +1 -0
- package/dist-server/graphql/types/reports/index.js +6 -1
- package/dist-server/graphql/types/reports/index.js.map +1 -1
- package/dist-server/graphql/types/reports/outbound-order-details-report.js +17 -1
- package/dist-server/graphql/types/reports/outbound-order-details-report.js.map +1 -1
- package/dist-server/graphql/types/reports/release-inventory-report-list.js +12 -0
- package/dist-server/graphql/types/reports/release-inventory-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/release-inventory-report.js +27 -0
- package/dist-server/graphql/types/reports/release-inventory-report.js.map +1 -0
- package/dist-server/migrations/1568858861188-SeedSetting.js +5 -6
- package/dist-server/migrations/1568858861188-SeedSetting.js.map +1 -1
- package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js +1 -1
- package/dist-server/migrations/1623308919899-SeedLocationRecommendSetting.js.map +1 -1
- package/dist-server/migrations/1623381200659-SeedStoringRule.js +1 -1
- package/dist-server/migrations/1623381200659-SeedStoringRule.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/dist-server/utils/report-query-util.js +5 -2
- package/dist-server/utils/report-query-util.js.map +1 -1
- package/helps/release-note.ko.md +8 -20
- package/helps/release-note.md +8 -20
- package/helps/release-note.ms.md +8 -20
- package/helps/release-note.zh.md +8 -20
- package/package.json +42 -42
- package/server/graphql/resolvers/board-setting/board-settings.ts +4 -6
- package/server/graphql/resolvers/custom/elccl/elccl-daily-collection-report.ts +4 -5
- package/server/graphql/resolvers/custom/elccl/elccl-daily-order-inventory-report.ts +9 -10
- package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-pallet-detail-report.ts +4 -5
- package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-report.ts +17 -19
- package/server/graphql/resolvers/custom/elccl/elccl-inventory-history-summary-report.ts +10 -8
- package/server/graphql/resolvers/custom/elccl/elccl-onhand-inventory-counter.ts +9 -9
- package/server/graphql/resolvers/custom/kimeda/kimeda-onhand-inventory-counter.ts +9 -9
- package/server/graphql/resolvers/dashboard/arrival-notices-by-status.ts +23 -14
- package/server/graphql/resolvers/dashboard/collection-orders-by-status.ts +4 -5
- package/server/graphql/resolvers/dashboard/delivery-orders-by-status.ts +4 -5
- package/server/graphql/resolvers/dashboard/index.ts +3 -1
- package/server/graphql/resolvers/dashboard/inventory-expiry-monitor.ts +18 -6
- package/server/graphql/resolvers/dashboard/outbound-order-by-status.ts +114 -81
- package/server/graphql/resolvers/dashboard/release-goods-by-status.ts +23 -14
- package/server/graphql/resolvers/dashboard/unit-inbounded-outbounded.ts +61 -0
- package/server/graphql/resolvers/index.ts +5 -4
- package/server/graphql/resolvers/inventory-comparison/inventory-comparison-list.ts +11 -9
- package/server/graphql/resolvers/opa-menu/opa-menus.ts +7 -6
- package/server/graphql/resolvers/{extra → other}/add-release-good-products.ts +73 -12
- package/server/graphql/resolvers/other/index.ts +10 -0
- package/server/graphql/resolvers/other/page-settings.ts +105 -0
- package/server/graphql/resolvers/reports/costing-report.ts +8 -10
- package/server/graphql/resolvers/reports/inbound-order-details-report.ts +7 -9
- package/server/graphql/resolvers/reports/inbound-serial-number-report.ts +41 -13
- package/server/graphql/resolvers/reports/index.ts +3 -1
- package/server/graphql/resolvers/reports/outbound-order-details-report.ts +76 -38
- package/server/graphql/resolvers/reports/outbound-serial-number-report.ts +42 -18
- package/server/graphql/resolvers/reports/product-label-report.ts +4 -6
- package/server/graphql/resolvers/reports/release-inventory-report.ts +201 -0
- package/server/graphql/resolvers/shipping-provider/shipping-providers.ts +3 -5
- package/server/graphql/resolvers/warehouse-inventory-adjustment/warehouse-intentory-adjustment.ts +10 -10
- package/server/graphql/types/dashboard/index.ts +1 -0
- package/server/graphql/types/index.ts +8 -2
- package/server/graphql/types/other/index.ts +19 -0
- package/server/graphql/types/other/page-setting.ts +33 -0
- package/server/graphql/types/reports/index.ts +6 -1
- package/server/graphql/types/reports/outbound-order-details-report.ts +17 -1
- package/server/graphql/types/reports/release-inventory-report-list.ts +8 -0
- package/server/graphql/types/reports/release-inventory-report.ts +23 -0
- package/server/migrations/1568858861188-SeedSetting.ts +4 -4
- package/server/migrations/1623308919899-SeedLocationRecommendSetting.ts +3 -2
- package/server/migrations/1623381200659-SeedStoringRule.ts +3 -2
- package/server/utils/report-query-util.ts +5 -2
- package/things-factory.config.js +4 -0
- package/translations/en.json +148 -27
- package/translations/ko.json +185 -105
- package/translations/ms.json +183 -98
- package/translations/zh.json +197 -112
- package/dist-server/graphql/resolvers/extra/add-release-good-products.js.map +0 -1
- package/dist-server/graphql/resolvers/extra/index.js.map +0 -1
- package/dist-server/graphql/types/extra/index.js +0 -11
- package/dist-server/graphql/types/extra/index.js.map +0 -1
- package/server/graphql/resolvers/extra/index.ts +0 -5
- package/server/graphql/types/extra/index.ts +0 -7
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addReleaseGoodProducts = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
4
5
|
const product_base_1 = require("@things-factory/product-base");
|
|
5
6
|
const sales_base_1 = require("@things-factory/sales-base");
|
|
6
7
|
const warehouse_base_1 = require("@things-factory/warehouse-base");
|
|
@@ -11,8 +12,8 @@ exports.addReleaseGoodProducts = {
|
|
|
11
12
|
try {
|
|
12
13
|
const { tx, user, domain } = context.state;
|
|
13
14
|
let releaseGood = await tx.getRepository(sales_base_1.ReleaseGood).findOne({
|
|
14
|
-
where: { domain, name: name },
|
|
15
|
-
relations: ['bizplace']
|
|
15
|
+
where: { domain: { id: domain.id }, name: name },
|
|
16
|
+
relations: ['bizplace', 'orderProducts']
|
|
16
17
|
});
|
|
17
18
|
const bizplace = releaseGood.bizplace;
|
|
18
19
|
let pickingWorksheet = await tx.getRepository(worksheet_base_1.Worksheet).findOne({
|
|
@@ -28,10 +29,10 @@ exports.addReleaseGoodProducts = {
|
|
|
28
29
|
curOrderInv.domain = domain;
|
|
29
30
|
curOrderInv.bizplace = bizplace;
|
|
30
31
|
curOrderInv.releaseGood = releaseGood;
|
|
31
|
-
curOrderInv.product = await tx.getRepository(product_base_1.Product).
|
|
32
|
+
curOrderInv.product = await tx.getRepository(product_base_1.Product).findOneBy({ id: oi.product.id });
|
|
32
33
|
let existingOrderInv;
|
|
33
34
|
if ((_a = curOrderInv === null || curOrderInv === void 0 ? void 0 : curOrderInv.inventory) === null || _a === void 0 ? void 0 : _a.id) {
|
|
34
|
-
const foundInv = await tx.getRepository(warehouse_base_1.Inventory).
|
|
35
|
+
const foundInv = await tx.getRepository(warehouse_base_1.Inventory).findOneBy({ id: curOrderInv.inventory.id });
|
|
35
36
|
curOrderInv.inventory = foundInv;
|
|
36
37
|
existingOrderInv = await tx.getRepository(sales_base_1.OrderInventory).findOne({
|
|
37
38
|
where: {
|
|
@@ -131,15 +132,26 @@ exports.addReleaseGoodProducts = {
|
|
|
131
132
|
newOrderInv.status = pickingWorksheet ? sales_base_1.ORDER_INVENTORY_STATUS.PICKING : sales_base_1.ORDER_INVENTORY_STATUS.PENDING;
|
|
132
133
|
newOrderInv.name = sales_base_1.OrderNoGenerator.orderInventory();
|
|
133
134
|
newOrderInv.releaseGood = releaseGood;
|
|
134
|
-
newOrderInv.product = await tx.getRepository(product_base_1.Product).
|
|
135
|
+
newOrderInv.product = await tx.getRepository(product_base_1.Product).findOneBy({ id: oi.product.id });
|
|
135
136
|
newOrderInv.creator = user;
|
|
136
137
|
newOrderInv.updater = user;
|
|
137
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
|
+
});
|
|
138
148
|
// check if it is release by inventory (has inventory value) or product
|
|
139
149
|
if ((_b = newOrderInv.inventory) === null || _b === void 0 ? void 0 : _b.id) {
|
|
140
150
|
// if release by inventory, then quantity and uomValue values are updated
|
|
141
|
-
const foundInv = await tx.getRepository(warehouse_base_1.Inventory).
|
|
151
|
+
const foundInv = await tx.getRepository(warehouse_base_1.Inventory).findOneBy({ id: newOrderInv.inventory.id });
|
|
142
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;
|
|
143
155
|
// check for existing released OrderInventory specifying product, batchId, packingType, and inventory
|
|
144
156
|
existingOrderInv = await tx.getRepository(sales_base_1.OrderInventory).findOne({
|
|
145
157
|
where: {
|
|
@@ -155,7 +167,9 @@ exports.addReleaseGoodProducts = {
|
|
|
155
167
|
foundInv.updater = user;
|
|
156
168
|
let newOrderProduct = Object.assign(new sales_base_1.OrderProduct(), newOrderInv);
|
|
157
169
|
newOrderProduct = Object.assign(Object.assign({}, newOrderProduct), { packQty: 0, actualPackQty: 0, palletQty: 0, actualPalletQty: 0, status: sales_base_1.ORDER_PRODUCT_STATUS.ASSIGNED });
|
|
158
|
-
|
|
170
|
+
if (!existingOrderProduct)
|
|
171
|
+
newOrderProduct = await tx.getRepository(sales_base_1.OrderProduct).save(newOrderProduct);
|
|
172
|
+
newOrderInv.orderProduct = existingOrderProduct ? existingOrderProduct : newOrderProduct;
|
|
159
173
|
await tx.getRepository(warehouse_base_1.Inventory).save(foundInv);
|
|
160
174
|
}
|
|
161
175
|
else {
|
|
@@ -188,7 +202,7 @@ exports.addReleaseGoodProducts = {
|
|
|
188
202
|
}
|
|
189
203
|
});
|
|
190
204
|
if (existingWorksheetDetail) {
|
|
191
|
-
existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
|
|
205
|
+
existingWorksheetDetail = Object.assign(Object.assign({}, existingWorksheetDetail), { targetProduct: newOrderInv.orderProduct, status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
|
|
192
206
|
await tx.getRepository(worksheet_base_1.WorksheetDetail).save(existingWorksheetDetail);
|
|
193
207
|
}
|
|
194
208
|
}
|
|
@@ -201,11 +215,14 @@ exports.addReleaseGoodProducts = {
|
|
|
201
215
|
savedOrderInv.releaseQty = newOrderInv.releaseQty;
|
|
202
216
|
savedOrderInv.releaseUomValue = newOrderInv.releaseUomValue;
|
|
203
217
|
savedOrderInv.batchId = newOrderInv.batchId;
|
|
218
|
+
savedOrderInv.batchIdRef = newOrderInv.batchIdRef;
|
|
204
219
|
savedOrderInv.packingType = newOrderInv.packingType;
|
|
220
|
+
savedOrderInv.uom = newOrderInv.uom;
|
|
205
221
|
savedOrderInv.product = newOrderInv.product;
|
|
206
222
|
savedOrderInv.inventory = newOrderInv.inventory;
|
|
207
223
|
savedOrderInv.status = newOrderInv.status;
|
|
208
224
|
savedOrderInv.releaseGood = newOrderInv.releaseGood;
|
|
225
|
+
savedOrderInv.orderProduct = newOrderInv.orderProduct;
|
|
209
226
|
savedOrderInv.bizplace = newOrderInv.bizplace;
|
|
210
227
|
savedOrderInv.domain = domain;
|
|
211
228
|
savedOrderInv.creator = user;
|
|
@@ -231,6 +248,40 @@ exports.addReleaseGoodProducts = {
|
|
|
231
248
|
loadingWorksheet = Object.assign(Object.assign({}, loadingWorksheet), { status: worksheet_base_1.WORKSHEET_STATUS.DEACTIVATED });
|
|
232
249
|
await tx.getRepository(worksheet_base_1.Worksheet).save(loadingWorksheet);
|
|
233
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
|
+
}));
|
|
234
285
|
}
|
|
235
286
|
catch (error) {
|
|
236
287
|
throw error;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-release-good-products.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/other/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"]}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Mutation = void 0;
|
|
3
|
+
exports.Mutation = exports.Query = void 0;
|
|
4
4
|
const add_release_good_products_1 = require("./add-release-good-products");
|
|
5
|
+
const page_settings_1 = require("./page-settings");
|
|
6
|
+
exports.Query = Object.assign({}, page_settings_1.pageSettings);
|
|
5
7
|
exports.Mutation = Object.assign({}, add_release_good_products_1.addReleaseGoodProducts);
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/other/index.ts"],"names":[],"mappings":";;;AAAA,2EAAoE;AACpE,mDAA8C;AAEjC,QAAA,KAAK,qBACX,4BAAY,EAClB;AAEY,QAAA,QAAQ,qBACd,kDAAsB,EAC5B","sourcesContent":["import { addReleaseGoodProducts } from './add-release-good-products'\nimport { pageSettings } from './page-settings'\n\nexport const Query = {\n ...pageSettings\n}\n\nexport const Mutation = {\n ...addReleaseGoodProducts\n}\n"]}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pageSettings = void 0;
|
|
4
|
+
const typeorm_1 = require("typeorm");
|
|
5
|
+
const shell_1 = require("@things-factory/shell");
|
|
6
|
+
const biz_base_1 = require("@things-factory/biz-base");
|
|
7
|
+
const code_base_1 = require("@things-factory/code-base");
|
|
8
|
+
exports.pageSettings = {
|
|
9
|
+
async pageSettings(_, { codes, partners }, context) {
|
|
10
|
+
const { domain, user, tx } = context.state;
|
|
11
|
+
try {
|
|
12
|
+
let promiseTask = [];
|
|
13
|
+
if (codes) {
|
|
14
|
+
promiseTask.push(queryCommonCode(codes, domain, tx, context));
|
|
15
|
+
}
|
|
16
|
+
if (partners) {
|
|
17
|
+
promiseTask.push(queryPartners(partners, domain, tx, context));
|
|
18
|
+
}
|
|
19
|
+
return await Promise.all(promiseTask);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
throw error;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
async function queryCommonCode(codes, domain, tx, context) {
|
|
27
|
+
const codeQb = tx.getRepository(code_base_1.CommonCode).createQueryBuilder('cc');
|
|
28
|
+
(0, shell_1.buildQuery)(codeQb, { filters: codes }, context);
|
|
29
|
+
codes = (await codeQb
|
|
30
|
+
.leftJoinAndSelect('cc.details', 'ccdet')
|
|
31
|
+
.orderBy('cc.name')
|
|
32
|
+
.addOrderBy('ccdet.rank')
|
|
33
|
+
.addOrderBy('ccdet.name')
|
|
34
|
+
.getMany()).map((cc) => {
|
|
35
|
+
return {
|
|
36
|
+
id: cc.id,
|
|
37
|
+
name: cc.name,
|
|
38
|
+
description: cc.description,
|
|
39
|
+
settingDetails: cc.details.map(det => {
|
|
40
|
+
return {
|
|
41
|
+
id: det.id,
|
|
42
|
+
name: det.name,
|
|
43
|
+
description: det.description,
|
|
44
|
+
rank: det.rank
|
|
45
|
+
};
|
|
46
|
+
})
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
return {
|
|
50
|
+
type: 'code',
|
|
51
|
+
details: codes
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async function queryPartners(partners, domain, tx, context) {
|
|
55
|
+
var _a;
|
|
56
|
+
let partnersBizplaceIds = [];
|
|
57
|
+
let bizplaceIndex = (_a = partners.filters) === null || _a === void 0 ? void 0 : _a.findIndex(x => x.name === 'bizplace');
|
|
58
|
+
if (bizplaceIndex && bizplaceIndex > -1) {
|
|
59
|
+
partnersBizplaceIds = partners.filters
|
|
60
|
+
.filter(x => x.name === 'bizplace')
|
|
61
|
+
.map(item => {
|
|
62
|
+
return item.value;
|
|
63
|
+
});
|
|
64
|
+
partners.filters.splice(bizplaceIndex, 1);
|
|
65
|
+
}
|
|
66
|
+
const convertedParams = (0, shell_1.convertListParams)({ filters: partners });
|
|
67
|
+
if (!(partnersBizplaceIds.length > 0)) {
|
|
68
|
+
const partnersBizplaces = await (0, biz_base_1.getPartnersBizplaces)(context.state.domain, context.state.user);
|
|
69
|
+
partnersBizplaceIds = partnersBizplaces.map((bizplace) => bizplace.id || null);
|
|
70
|
+
convertedParams.where.id = (0, typeorm_1.In)(partnersBizplaceIds);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
convertedParams.where.id = (0, typeorm_1.In)(partnersBizplaceIds);
|
|
74
|
+
}
|
|
75
|
+
partners = ((await tx.getRepository(biz_base_1.Bizplace).find(Object.assign(Object.assign({}, convertedParams), { relations: ['domain', 'company', 'users', 'creator', 'updater'] }))).map((biz) => {
|
|
76
|
+
return {
|
|
77
|
+
id: biz.id,
|
|
78
|
+
name: biz.name,
|
|
79
|
+
description: biz.description,
|
|
80
|
+
};
|
|
81
|
+
}));
|
|
82
|
+
return {
|
|
83
|
+
type: 'partner',
|
|
84
|
+
details: partners
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=page-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-settings.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/other/page-settings.ts"],"names":[],"mappings":"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","sourcesContent":["import { getRepository, EntityManager, In } from 'typeorm'\n\nimport { Sequence, SEQUENCE_TYPE } from '@things-factory/id-rule-base'\nimport { buildQuery, Domain, ListParam, convertListParams } from '@things-factory/shell'\nimport { User } from '@things-factory/auth-base'\nimport {\n getMyBizplace,\n getPartnerBizplaceIds,\n getPartnersBizplaces,\n getPartnersCompanyBizplaces,\n getPermittedBizplaceIds,\n Bizplace\n} from '@things-factory/biz-base'\n\nimport { CommonCode as CommonCodeEntity, CommonCodeDetail as CommonCodeDetailEntity } from '@things-factory/code-base'\n\nexport const pageSettings = {\n async pageSettings(_: any, { codes, partners }, context: any) {\n const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state\n try {\n let promiseTask = []\n if (codes) {\n promiseTask.push(queryCommonCode(codes, domain, tx, context))\n }\n\n if (partners) {\n promiseTask.push(queryPartners(partners, domain, tx, context))\n }\n\n return await Promise.all(promiseTask)\n } catch (error) {\n throw error\n }\n }\n}\n\nasync function queryCommonCode(codes, domain, tx, context) {\n const codeQb = tx.getRepository(CommonCodeEntity).createQueryBuilder('cc')\n buildQuery(codeQb, { filters: codes }, context)\n\n codes = (await codeQb\n .leftJoinAndSelect('cc.details', 'ccdet')\n .orderBy('cc.name')\n .addOrderBy('ccdet.rank')\n .addOrderBy('ccdet.name')\n .getMany()).map((cc: CommonCodeEntity) => {\n return {\n id: cc.id,\n name: cc.name,\n description: cc.description,\n settingDetails: cc.details.map(det => {\n return {\n id: det.id,\n name: det.name,\n description: det.description,\n rank: det.rank\n }\n })\n }\n })\n\n return {\n type: 'code',\n details: codes\n }\n}\n\nasync function queryPartners(partners, domain, tx, context) {\n let partnersBizplaceIds = []\n let bizplaceIndex: any = partners.filters?.findIndex(x => x.name === 'bizplace')\n if (bizplaceIndex && bizplaceIndex > -1) {\n partnersBizplaceIds = partners.filters\n .filter(x => x.name === 'bizplace')\n .map(item => {\n return item.value\n })\n partners.filters.splice(bizplaceIndex, 1)\n }\n\n const convertedParams = convertListParams({ filters: partners })\n\n if (!(partnersBizplaceIds.length > 0)) {\n const partnersBizplaces: Bizplace[] = await getPartnersBizplaces(context.state.domain, context.state.user)\n partnersBizplaceIds = partnersBizplaces.map((bizplace: Bizplace) => bizplace.id || null)\n convertedParams.where.id = In(partnersBizplaceIds)\n } else {\n convertedParams.where.id = In(partnersBizplaceIds)\n }\n\n partners = ((await tx.getRepository(Bizplace).find({\n ...convertedParams,\n relations: ['domain', 'company', 'users', 'creator', 'updater']\n })).map((biz: Bizplace) => {\n return {\n id: biz.id,\n name: biz.name,\n description: biz.description,\n }\n }))\n\n return {\n type: 'partner',\n details: partners\n }\n}"]}
|
|
@@ -13,10 +13,10 @@ exports.costingReport = {
|
|
|
13
13
|
let fromDate = params.filters.find(data => data.name === 'fromDate');
|
|
14
14
|
let toDate = params.filters.find(data => data.name === 'toDate');
|
|
15
15
|
if (userFilter) {
|
|
16
|
-
const user = await tx.getRepository(auth_base_1.User).findOne({
|
|
16
|
+
const user = (await tx.getRepository(auth_base_1.User).findOne({
|
|
17
17
|
where: { id: userFilter.value },
|
|
18
18
|
relations: ['bizplaces']
|
|
19
|
-
});
|
|
19
|
+
}));
|
|
20
20
|
const bizplace = user.bizplaces[0];
|
|
21
21
|
if (!bizplace)
|
|
22
22
|
throw 'Invalid input';
|
|
@@ -27,7 +27,7 @@ exports.costingReport = {
|
|
|
27
27
|
}
|
|
28
28
|
if (!bizplaceFilter || !fromDate || !toDate)
|
|
29
29
|
throw 'Invalid input';
|
|
30
|
-
const bizplace = await tx.getRepository(biz_base_1.Bizplace).
|
|
30
|
+
const bizplace = await tx.getRepository(biz_base_1.Bizplace).findOneBy({
|
|
31
31
|
id: bizplaceFilter.value
|
|
32
32
|
});
|
|
33
33
|
await (0, utils_1.rawProductsQuery)(tx, params, bizplace);
|
|
@@ -81,7 +81,7 @@ exports.costingReport = {
|
|
|
81
81
|
WITH RECURSIVE cte_forwarded_cost as (
|
|
82
82
|
select src.domain_id, src.bizplace_id, src.product_id, src.packing_type, src.packing_size, src.uom, TO_DATE(src.created_year_month,'YYYY-MM')::timestamp as running_year_month,
|
|
83
83
|
sum(src.qty) as qty, sum(src.total_cost)/ sum(src.qty) as monthly_avg_cost,
|
|
84
|
-
coalesce(
|
|
84
|
+
coalesce(sum(src.qty)) as closing_qty from (
|
|
85
85
|
select distinct on (pallet_id)
|
|
86
86
|
ih.domain_id, ih.bizplace_id, ih.pallet_id, ih.unit_cost, (ih.unit_cost * (ih.opening_qty + ih.qty)) as total_cost, ih.status, ih.transaction_type, ih.product_id, ih.packing_type, ih.packing_size, coalesce(ih.uom, pd.uom) as uom,
|
|
87
87
|
ih.created_at, to_char(ih.created_at, 'YYYY-MM') as created_year_month,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"costing-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/costing-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const costingReport = {\n async costingReport(_: any, params: ListParam, context: any) {\n try {\n const { tx }: { tx: EntityManager } = context.state\n let bizplaceFilter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n\n if (userFilter) {\n const user: User = await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOne({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n await tx.query(\n `\n create temp table tmp_outbound_ord on commit drop as (\n select p.sku, rih.domain_id, rih.bizplace_id, rih.product_id, rih.packing_type, rih.packing_size, coalesce(rih.uom, pd.uom, pd2.uom) as uom, \n sum(rih.qty) as total_picked_qty, sum(rih.uom_value) as total_picked_uom_value\n from reduced_inventory_histories rih \n inner join inventories inv on inv.domain_id = rih.domain_id and inv.pallet_id = rih.pallet_id\n left join product_details pd on pd.product_id = rih.product_id and pd.packing_type = rih.packing_type and pd.packing_size = rih.packing_size\n left join product_details pd2 on pd2.product_id = rih.product_id and pd2.is_default = true\n left join products p on p.id = rih.product_id \n where rih.domain_id = $1\n and inv.bizplace_id = $2\n and rih.created_at >= $3 and rih.created_at <= $4\n and rih.transaction_type = 'PICKING'\n group by p.sku, rih.domain_id, rih.bizplace_id, rih.product_id, rih.packing_type, rih.packing_size, coalesce(rih.uom, pd.uom, pd2.uom)\n );\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]\n )\n\n await tx.query(\n `\n create temp table tmp_stored_inv on commit drop as (\n select src2.sku, src2.domain_id, src2.bizplace_id, src2.pallet_id, src2.product_id, src2.packing_type, src2.packing_size, src2.uom, \n to_char(src2.created_at, 'YYYY-MM') as created_year_month, sum(closing_qty) as closing_qty from (\n select distinct on (rih.pallet_id) p.sku, rih.domain_id, rih.bizplace_id, rih.pallet_id, rih.product_id, rih.packing_type, rih.packing_size, \n coalesce(rih.uom, pd.uom, pd2.uom) as uom, \n rih.created_at, rih.transaction_type, rih.status, rih.opening_qty + rih.qty as closing_qty\n from reduced_inventory_histories rih \n inner join inventories i on i.domain_id = rih.domain_id and i.pallet_id = rih.pallet_id \n left join product_details pd on pd.product_id = rih.product_id and pd.packing_type = rih.packing_type and pd.packing_size = rih.packing_size\n left join product_details pd2 on pd2.product_id = rih.product_id and pd2.is_default = true\n left join products p on p.id = rih.product_id \n where rih.domain_id = $1 \n and i.bizplace_id = $2 \n and rih.created_at <= $3\n order by rih.pallet_id, rih.seq desc\n ) src2 where src2.status <> 'TERMINATED'\n and exists (\n select * from tmp_outbound_ord outboundOrd\n where outboundOrd.domain_id = src2.domain_id\n and outboundOrd.bizplace_id = src2.bizplace_id \n and outboundOrd.product_id = src2.product_id \n and outboundOrd.packing_type = src2.packing_type\n and outboundOrd.packing_size = src2.packing_size\n and outboundOrd.uom = src2.uom\n )\n group by src2.sku, src2.domain_id, src2.bizplace_id, src2.pallet_id, src2.product_id, src2.packing_type, src2.packing_size, src2.uom, to_char(src2.created_at, 'YYYY-MM')\n );\n `,\n [context.state.domain.id, bizplace.id, toDate.value]\n )\n\n await tx.query(\n `\n create temp table temp_costing_report on commit drop as (\n WITH RECURSIVE cte_forwarded_cost as (\n select src.domain_id, src.bizplace_id, src.product_id, src.packing_type, src.packing_size, src.uom, TO_DATE(src.created_year_month,'YYYY-MM')::timestamp as running_year_month,\n sum(src.qty) as qty, sum(src.total_cost)/ sum(src.qty) as monthly_avg_cost, \n coalesce((select sum(closing_qty) from tmp_stored_inv st where st.domain_id = src.domain_id and st.bizplace_id = src.bizplace_id and st.product_id = src.product_id\tand st.packing_type = src.packing_type and st.packing_size = src.packing_size\tand st.uom = src.uom and st.created_year_month = src.created_year_month),sum(src.qty)) as closing_qty from (\n select distinct on (pallet_id) \n ih.domain_id, ih.bizplace_id, ih.pallet_id, ih.unit_cost, (ih.unit_cost * (ih.opening_qty + ih.qty)) as total_cost, ih.status, ih.transaction_type, ih.product_id, ih.packing_type, ih.packing_size, coalesce(ih.uom, pd.uom) as uom, \n ih.created_at, to_char(ih.created_at, 'YYYY-MM') as created_year_month,\n ih.opening_qty, \n ih.qty as transaction_qty, \n ih.opening_qty + ih.qty as qty, \n ih.opening_uom_value, \n ih.uom_value as transaction_uom_value, \n ih.opening_uom_value + ih.uom_value as uom_value\n from reduced_inventory_histories ih \n inner join inventories i on i.domain_id = ih.domain_id and i.pallet_id = ih.pallet_id \n left join product_details pd on pd.product_id = ih.product_id and pd.packing_type = ih.packing_type and pd.packing_size = ih.packing_size\n where ih.domain_id = $1 \n and i.bizplace_id = $2 \n and ih.created_at <= $3 and ih.unit_cost is not null\n and exists (\n select * from tmp_outbound_ord outboundOrd\n where outboundOrd.domain_id = ih.domain_id\n and outboundOrd.bizplace_id = ih.bizplace_id \n and outboundOrd.product_id = ih.product_id \n and outboundOrd.packing_type = ih.packing_type\n and outboundOrd.packing_size = ih.packing_size\n and outboundOrd.uom = ih.uom\n )\n order by ih.pallet_id, ih.seq\n ) src\n group by src.domain_id, src.bizplace_id, src.product_id, src.packing_type, src.packing_size, src.uom, src.created_year_month\n union all\n select dt1.domain_id, dt1.bizplace_id, dt1.product_id, dt1.packing_type, dt1.packing_size, dt1.uom, \n dt1.running_year_month + interval '1 month' as running_year_month, dt1.qty, dt1.monthly_avg_cost, dt1.closing_qty \n from cte_forwarded_cost dt1\n where dt1.running_year_month + interval '1 month' < $3\n ) select fc.*, -outboundord.total_picked_qty as \"qty\", -outboundord.total_picked_uom_value as \"uom_value\", (-outboundord.total_picked_qty * fc.weighted_avg_unit_cost) as \"total_cost\" from (\n select p.sku as \"product_sku\", p.\"name\" as \"product_name\", p.description as \"product_description\", p.\"type\" as \"product_type\",\n fc.domain_id, fc.bizplace_id, fc.product_id, fc.packing_type, fc.packing_size, fc.uom, fc.running_year_month,\n ROUND(cast(sum(fc.monthly_avg_cost * fc.closing_qty) / sum(fc.qty) as numeric),2) as \"weighted_avg_unit_cost\" \n from cte_forwarded_cost fc\n left join products p on p.id = fc.product_id \n where running_year_month = to_date(to_char($3::date, 'YYYY-MM'),'YYYY-MM')::timestamp\n group by p.sku, p.\"name\", p.description, p.\"type\", fc.domain_id, fc.bizplace_id, fc.product_id, fc.packing_type, fc.packing_size, fc.uom, fc.running_year_month\n ) fc \n left join tmp_outbound_ord outboundord on outboundord.domain_id = fc.domain_id\n and outboundord.bizplace_id = fc.bizplace_id \n and outboundord.product_id = fc.product_id \n and outboundord.packing_type = fc.packing_type\n and outboundord.packing_size = fc.packing_size\n and outboundord.uom = fc.uom\n );\n `,\n [context.state.domain.id, bizplace.id, toDate.value]\n )\n\n const total: any = await tx.query(`\n select count(*) from temp_costing_report\n `)\n\n const result: any = await tx.query(\n `\n select * from temp_costing_report\n offset $1 limit $2\n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n let items = result.map(itm => {\n let data = {\n bizplace: {\n description: bizplace.description,\n name: bizplace.name\n },\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type\n },\n qty: itm.qty,\n uom: itm.uom,\n uomValue: itm.uom_value,\n weightedAvgUnitCost: itm.weighted_avg_unit_cost,\n totalCost: itm.total_cost\n }\n\n return data\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"costing-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/costing-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Filter, ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const costingReport = {\n async costingReport(_: any, params: ListParam, context: ResolverContext) {\n try {\n const { tx } = context.state\n let bizplaceFilter: Filter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n\n if (userFilter) {\n const user = (await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })) as User & { bizplaces: Bizplace[] }\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOneBy({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n await tx.query(\n `\n create temp table tmp_outbound_ord on commit drop as (\n select p.sku, rih.domain_id, rih.bizplace_id, rih.product_id, rih.packing_type, rih.packing_size, coalesce(rih.uom, pd.uom, pd2.uom) as uom, \n sum(rih.qty) as total_picked_qty, sum(rih.uom_value) as total_picked_uom_value\n from reduced_inventory_histories rih \n inner join inventories inv on inv.domain_id = rih.domain_id and inv.pallet_id = rih.pallet_id\n left join product_details pd on pd.product_id = rih.product_id and pd.packing_type = rih.packing_type and pd.packing_size = rih.packing_size\n left join product_details pd2 on pd2.product_id = rih.product_id and pd2.is_default = true\n left join products p on p.id = rih.product_id \n where rih.domain_id = $1\n and inv.bizplace_id = $2\n and rih.created_at >= $3 and rih.created_at <= $4\n and rih.transaction_type = 'PICKING'\n group by p.sku, rih.domain_id, rih.bizplace_id, rih.product_id, rih.packing_type, rih.packing_size, coalesce(rih.uom, pd.uom, pd2.uom)\n );\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]\n )\n\n await tx.query(\n `\n create temp table tmp_stored_inv on commit drop as (\n select src2.sku, src2.domain_id, src2.bizplace_id, src2.pallet_id, src2.product_id, src2.packing_type, src2.packing_size, src2.uom, \n to_char(src2.created_at, 'YYYY-MM') as created_year_month, sum(closing_qty) as closing_qty from (\n select distinct on (rih.pallet_id) p.sku, rih.domain_id, rih.bizplace_id, rih.pallet_id, rih.product_id, rih.packing_type, rih.packing_size, \n coalesce(rih.uom, pd.uom, pd2.uom) as uom, \n rih.created_at, rih.transaction_type, rih.status, rih.opening_qty + rih.qty as closing_qty\n from reduced_inventory_histories rih \n inner join inventories i on i.domain_id = rih.domain_id and i.pallet_id = rih.pallet_id \n left join product_details pd on pd.product_id = rih.product_id and pd.packing_type = rih.packing_type and pd.packing_size = rih.packing_size\n left join product_details pd2 on pd2.product_id = rih.product_id and pd2.is_default = true\n left join products p on p.id = rih.product_id \n where rih.domain_id = $1 \n and i.bizplace_id = $2 \n and rih.created_at <= $3\n order by rih.pallet_id, rih.seq desc\n ) src2 where src2.status <> 'TERMINATED'\n and exists (\n select * from tmp_outbound_ord outboundOrd\n where outboundOrd.domain_id = src2.domain_id\n and outboundOrd.bizplace_id = src2.bizplace_id \n and outboundOrd.product_id = src2.product_id \n and outboundOrd.packing_type = src2.packing_type\n and outboundOrd.packing_size = src2.packing_size\n and outboundOrd.uom = src2.uom\n )\n group by src2.sku, src2.domain_id, src2.bizplace_id, src2.pallet_id, src2.product_id, src2.packing_type, src2.packing_size, src2.uom, to_char(src2.created_at, 'YYYY-MM')\n );\n `,\n [context.state.domain.id, bizplace.id, toDate.value]\n )\n\n await tx.query(\n `\n create temp table temp_costing_report on commit drop as (\n WITH RECURSIVE cte_forwarded_cost as (\n select src.domain_id, src.bizplace_id, src.product_id, src.packing_type, src.packing_size, src.uom, TO_DATE(src.created_year_month,'YYYY-MM')::timestamp as running_year_month,\n sum(src.qty) as qty, sum(src.total_cost)/ sum(src.qty) as monthly_avg_cost, \n coalesce(sum(src.qty)) as closing_qty from (\n select distinct on (pallet_id) \n ih.domain_id, ih.bizplace_id, ih.pallet_id, ih.unit_cost, (ih.unit_cost * (ih.opening_qty + ih.qty)) as total_cost, ih.status, ih.transaction_type, ih.product_id, ih.packing_type, ih.packing_size, coalesce(ih.uom, pd.uom) as uom, \n ih.created_at, to_char(ih.created_at, 'YYYY-MM') as created_year_month,\n ih.opening_qty, \n ih.qty as transaction_qty, \n ih.opening_qty + ih.qty as qty, \n ih.opening_uom_value, \n ih.uom_value as transaction_uom_value, \n ih.opening_uom_value + ih.uom_value as uom_value\n from reduced_inventory_histories ih \n inner join inventories i on i.domain_id = ih.domain_id and i.pallet_id = ih.pallet_id \n left join product_details pd on pd.product_id = ih.product_id and pd.packing_type = ih.packing_type and pd.packing_size = ih.packing_size\n where ih.domain_id = $1 \n and i.bizplace_id = $2 \n and ih.created_at <= $3 and ih.unit_cost is not null\n and exists (\n select * from tmp_outbound_ord outboundOrd\n where outboundOrd.domain_id = ih.domain_id\n and outboundOrd.bizplace_id = ih.bizplace_id \n and outboundOrd.product_id = ih.product_id \n and outboundOrd.packing_type = ih.packing_type\n and outboundOrd.packing_size = ih.packing_size\n and outboundOrd.uom = ih.uom\n )\n order by ih.pallet_id, ih.seq\n ) src\n group by src.domain_id, src.bizplace_id, src.product_id, src.packing_type, src.packing_size, src.uom, src.created_year_month\n union all\n select dt1.domain_id, dt1.bizplace_id, dt1.product_id, dt1.packing_type, dt1.packing_size, dt1.uom, \n dt1.running_year_month + interval '1 month' as running_year_month, dt1.qty, dt1.monthly_avg_cost, dt1.closing_qty \n from cte_forwarded_cost dt1\n where dt1.running_year_month + interval '1 month' < $3\n ) select fc.*, -outboundord.total_picked_qty as \"qty\", -outboundord.total_picked_uom_value as \"uom_value\", (-outboundord.total_picked_qty * fc.weighted_avg_unit_cost) as \"total_cost\" from (\n select p.sku as \"product_sku\", p.\"name\" as \"product_name\", p.description as \"product_description\", p.\"type\" as \"product_type\",\n fc.domain_id, fc.bizplace_id, fc.product_id, fc.packing_type, fc.packing_size, fc.uom, fc.running_year_month,\n ROUND(cast(sum(fc.monthly_avg_cost * fc.closing_qty) / sum(fc.qty) as numeric),2) as \"weighted_avg_unit_cost\" \n from cte_forwarded_cost fc\n left join products p on p.id = fc.product_id \n where running_year_month = to_date(to_char($3::date, 'YYYY-MM'),'YYYY-MM')::timestamp\n group by p.sku, p.\"name\", p.description, p.\"type\", fc.domain_id, fc.bizplace_id, fc.product_id, fc.packing_type, fc.packing_size, fc.uom, fc.running_year_month\n ) fc \n left join tmp_outbound_ord outboundord on outboundord.domain_id = fc.domain_id\n and outboundord.bizplace_id = fc.bizplace_id \n and outboundord.product_id = fc.product_id \n and outboundord.packing_type = fc.packing_type\n and outboundord.packing_size = fc.packing_size\n and outboundord.uom = fc.uom\n );\n `,\n [context.state.domain.id, bizplace.id, toDate.value]\n )\n\n const total: any = await tx.query(`\n select count(*) from temp_costing_report\n `)\n\n const result: any = await tx.query(\n `\n select * from temp_costing_report\n offset $1 limit $2\n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n let items = result.map(itm => {\n let data = {\n bizplace: {\n description: bizplace.description,\n name: bizplace.name\n },\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type\n },\n qty: itm.qty,\n uom: itm.uom,\n uomValue: itm.uom_value,\n weightedAvgUnitCost: itm.weighted_avg_unit_cost,\n totalCost: itm.total_cost\n }\n\n return data\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
@@ -17,10 +17,10 @@ exports.inboundOrderDetailsReport = {
|
|
|
17
17
|
let poNo = params.filters.find(data => data.name === 'poNo');
|
|
18
18
|
let doNo = params.filters.find(data => data.name === 'doNo');
|
|
19
19
|
if (userFilter) {
|
|
20
|
-
const user = await tx.getRepository(auth_base_1.User).findOne({
|
|
20
|
+
const user = (await tx.getRepository(auth_base_1.User).findOne({
|
|
21
21
|
where: { id: userFilter.value },
|
|
22
22
|
relations: ['bizplaces']
|
|
23
|
-
});
|
|
23
|
+
}));
|
|
24
24
|
const bizplace = user.bizplaces[0];
|
|
25
25
|
if (!bizplace)
|
|
26
26
|
throw 'Invalid input';
|
|
@@ -31,7 +31,7 @@ exports.inboundOrderDetailsReport = {
|
|
|
31
31
|
}
|
|
32
32
|
if (!bizplaceFilter || !fromDate || !toDate)
|
|
33
33
|
throw 'Invalid input';
|
|
34
|
-
const bizplace = await tx.getRepository(biz_base_1.Bizplace).
|
|
34
|
+
const bizplace = await tx.getRepository(biz_base_1.Bizplace).findOneBy({
|
|
35
35
|
id: bizplaceFilter.value
|
|
36
36
|
});
|
|
37
37
|
await (0, utils_1.rawProductsQuery)(tx, params, bizplace);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inbound-order-details-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/inbound-order-details-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { EntityManager } from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const inboundOrderDetailsReport = {\n async inboundOrderDetailsReport(_: any, params: ListParam, context: any) {\n try {\n const { tx }: { tx: EntityManager } = context.state\n let bizplaceFilter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n let ganNo = params.filters.find(data => data.name === 'ganNo')\n let grnNo = params.filters.find(data => data.name === 'grnNo')\n let poNo = params.filters.find(data => data.name === 'poNo')\n let doNo = params.filters.find(data => data.name === 'doNo')\n\n if (userFilter) {\n const user: User = await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOne({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n let extraQueryFilters = ''\n if (ganNo) {\n extraQueryFilters = `${extraQueryFilters} and gan_no like '%${ganNo.value}%' `\n }\n if (grnNo) {\n extraQueryFilters = `${extraQueryFilters} and grn_no like '%${grnNo.value}%' `\n }\n if (poNo) {\n extraQueryFilters = `${extraQueryFilters} and purchase_order_name like '%${poNo.value}%' `\n }\n if (doNo) {\n extraQueryFilters = `${extraQueryFilters} and delivery_order_no like '%${doNo.value}%' `\n }\n\n await tx.query(\n `\n create temp table temp_inbound_order_report on commit drop as (\n select * from (\n select b2.id as \"bizplace_id\", b2.name as \"bizplace_name\", b2.description as \"bizplace_description\", \n grn.name as \"grn_no\", \n an.name as \"gan_no\", an.ref_no as \"ref_no_1\", an.ref_no_2 as \"ref_no_2\", an.ref_no_3 as \"ref_no_3\",\n an.loose_item, an.import_cargo, an.container_no, an.container_size, an.own_transport, \n u.name as \"accepted_by\", an.accepted_at,\n an.created_at as \"order_created_at\",\n w.started_at as \"unload_start\", w.ended_at as \"unload_complete\",\n w2.started_at as \"putaway_start\", w2.ended_at as \"putaway_complete\",\n an.delivery_order_no,\n cp.id as \"supplier_id\",\n cp.company_name as \"supplier_name\",\n po.id as \"purchase_order_id\",\n po.name as \"purchase_order_name\",\n row_number() over(partition by an.name order by an.name, p.sku, ih.batch_id) as \"order_line_item\",\n p.id as \"product_id\", p.sku as \"product_sku\", p.name as \"product_name\", p.description as \"product_description\", p.type as \"product_type\",\n ih.packing_type as \"pack_type\", op.packing_size as \"pack_size\",\n ih.qty, ih.uom_value, ih.uom, ih.pallet_id, ih.carton_id, ih.batch_id, ih.batch_id_ref,\n i.expiration_date, i.manufacture_date,\n ih.unit_cost,\n ih.created_at as \"unloaded_at\",u2.name as \"unloaded_by\", \n ih2.created_at as \"putaway_at\", u3.name as \"putaway_by\",\n coalesce((select volume from product_details pd where pd.product_id = i.product_id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_volume,\n coalesce((select nett_weight from product_details pd where pd.product_id = i.product_id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_nett_weight,\n coalesce((select gross_weight from product_details pd where pd.product_id = i.product_id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_gross_weight,\n coalesce((select weight_unit from product_details pd where pd.product_id = i.product_id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n order by created_at desc\n fetch first 1 rows only),'') as weight_unit\n from (\n select * from arrival_notices \n where domain_id = $1 and bizplace_id = $2 and status ='DONE'\n and created_at >= $3 and created_at <= $4) an \n left join goods_receival_notes grn on grn.arrival_notice_id = an.id\n left join purchase_orders po on po.id = an.purchase_order_id \n left join contact_points cp on cp.id = po.supplier_id\n inner join bizplaces b2 on b2.id = an.bizplace_id \n left join users u on u.id = an.accepted_by_id \n inner join order_inventories oi on oi.arrival_notice_id = an.id\n inner join inventories i on i.id = oi.inventory_id\n left join worksheets w on w.arrival_notice_id = an.id and w.\"type\" ='UNLOADING'\n inner join reduced_inventory_histories ih on ih.inventory_id = oi.inventory_id and ih.transaction_type ='UNLOADING' and ih.ref_order_id = an.id::varchar\n left join users u2 on u2.id = ih.creator_id\n left join worksheets w2 on w2.arrival_notice_id = an.id and w2.\"type\" ='PUTAWAY'\n inner join reduced_inventory_histories ih2 on ih2.inventory_id = oi.inventory_id and ih2.transaction_type ='PUTAWAY' and ih2.ref_order_id = an.id::varchar\n left join users u3 on u3.id = ih2.creator_id\n inner join temp_products p on p.id = ih.product_id \n inner join order_products op on op.arrival_notice_id = an.id and op.actual_pack_qty is not null and op.product_id = ih.product_id and \n op.batch_id = ih.batch_id and op.packing_type = ih.packing_type\n order by an.name, p.sku, ih.batch_id\n ) src\n where 1=1\n ${extraQueryFilters}\n )\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]\n )\n\n const total: any = await tx.query(`\n select count(*) from temp_inbound_order_report\n `)\n\n const result: any = await tx.query(\n `\n select *, \n round((qty * unit_volume)::numeric ,4) as total_volume, \n round((qty * unit_nett_weight)::numeric ,4) as total_unit_nett_weight, \n round((qty * unit_gross_weight)::numeric ,4) as total_unit_gross_weight \n from temp_inbound_order_report\n offset $1 limit $2\n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n let items = result.map(itm => {\n let data = {\n bizplace: {\n description: itm.bizplace_description,\n name: itm.bizplace_name\n },\n grnNo: itm.grn_no,\n ganNo: itm.gan_no,\n deliveryOrderNo: itm.delivery_order_no,\n refNo1: itm.ref_no_1,\n refNo2: itm.ref_no_2,\n refNo3: itm.ref_no_3,\n looseItem: itm.loose_item,\n importCargo: itm.import_cargo,\n containerNo: itm.container_no,\n containerSize: itm.container_size,\n ownTransport: itm.own_transport,\n acceptedBy: itm.accepted_by,\n acceptedAt: itm.accepted_at,\n orderCreatedAt: itm.order_created_at,\n unloadStart: itm.unload_start,\n unloadComplete: itm.unload_complete,\n putawayStart: itm.putaway_start,\n putawayComplete: itm.putaway_complete,\n orderLineItem: itm.order_line_item,\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type\n },\n purchaseOrderId: itm.purchase_order_id,\n purchaseOrderNo: itm.purchase_order_name,\n packType: itm.pack_type,\n packSize: itm.pack_size,\n qty: itm.qty,\n uomValue: itm.uom_value,\n uom: itm.uom,\n unitVolume: itm.unit_volume,\n unitCost: itm.unit_cost,\n totalVolume: itm.total_volume,\n unitNettWeight: itm.unit_nett_weight,\n totalUnitNettWeight: itm.total_unit_nett_weight,\n unitGrossWeight: itm.unit_gross_weight,\n totalUnitGrossWeight: itm.total_unit_gross_weight,\n weightUnit: itm.weight_unit,\n palletId: itm.pallet_id,\n cartonId: itm.carton_id,\n batchId: itm.batch_id,\n batchIdRef: itm.batch_id_ref,\n expirationDate: itm.expiration_date,\n manufactureDate: itm.manufacture_date,\n unloadedAt: itm.unloaded_at,\n unloadedBy: itm.unloaded_by,\n putawayAt: itm.putaway_at,\n putawayBy: itm.putaway_by\n }\n\n if (itm.supplier_id) {\n data['supplier'] = {\n id: itm.supplier_id,\n name: itm.supplier_name\n }\n }\n\n return data\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"inbound-order-details-report.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/inbound-order-details-report.ts"],"names":[],"mappings":"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","sourcesContent":["import { User } from '@things-factory/auth-base'\nimport { Bizplace } from '@things-factory/biz-base'\nimport { Filter, ListParam } from '@things-factory/shell'\n\nimport { rawProductsQuery } from '../../../utils'\n\nexport const inboundOrderDetailsReport = {\n async inboundOrderDetailsReport(_: any, params: ListParam, context: ResolverContext) {\n try {\n const { tx } = context.state\n let bizplaceFilter: Filter = { name: '', operator: '', value: '' }\n let userFilter = params.filters.find(data => data.name === 'user')\n let fromDate = params.filters.find(data => data.name === 'fromDate')\n let toDate = params.filters.find(data => data.name === 'toDate')\n let ganNo = params.filters.find(data => data.name === 'ganNo')\n let grnNo = params.filters.find(data => data.name === 'grnNo')\n let poNo = params.filters.find(data => data.name === 'poNo')\n let doNo = params.filters.find(data => data.name === 'doNo')\n\n if (userFilter) {\n const user = (await tx.getRepository(User).findOne({\n where: { id: userFilter.value },\n relations: ['bizplaces']\n })) as User & { bizplaces: Bizplace[] }\n\n const bizplace: Bizplace = user.bizplaces[0]\n\n if (!bizplace) throw 'Invalid input'\n\n bizplaceFilter = { name: 'bizplace', operator: 'eq', value: bizplace.id }\n } else {\n bizplaceFilter = params.filters.find(data => data.name === 'bizplace')\n }\n\n if (!bizplaceFilter || !fromDate || !toDate) throw 'Invalid input'\n\n const bizplace: Bizplace = await tx.getRepository(Bizplace).findOneBy({\n id: bizplaceFilter.value\n })\n\n await rawProductsQuery(tx, params, bizplace)\n\n let extraQueryFilters = ''\n if (ganNo) {\n extraQueryFilters = `${extraQueryFilters} and gan_no like '%${ganNo.value}%' `\n }\n if (grnNo) {\n extraQueryFilters = `${extraQueryFilters} and grn_no like '%${grnNo.value}%' `\n }\n if (poNo) {\n extraQueryFilters = `${extraQueryFilters} and purchase_order_name like '%${poNo.value}%' `\n }\n if (doNo) {\n extraQueryFilters = `${extraQueryFilters} and delivery_order_no like '%${doNo.value}%' `\n }\n\n await tx.query(\n `\n create temp table temp_inbound_order_report on commit drop as (\n select * from (\n select b2.id as \"bizplace_id\", b2.name as \"bizplace_name\", b2.description as \"bizplace_description\", \n grn.name as \"grn_no\", \n an.name as \"gan_no\", an.ref_no as \"ref_no_1\", an.ref_no_2 as \"ref_no_2\", an.ref_no_3 as \"ref_no_3\",\n an.loose_item, an.import_cargo, an.container_no, an.container_size, an.own_transport, \n u.name as \"accepted_by\", an.accepted_at,\n an.created_at as \"order_created_at\",\n w.started_at as \"unload_start\", w.ended_at as \"unload_complete\",\n w2.started_at as \"putaway_start\", w2.ended_at as \"putaway_complete\",\n an.delivery_order_no,\n cp.id as \"supplier_id\",\n cp.company_name as \"supplier_name\",\n po.id as \"purchase_order_id\",\n po.name as \"purchase_order_name\",\n row_number() over(partition by an.name order by an.name, p.sku, ih.batch_id) as \"order_line_item\",\n p.id as \"product_id\", p.sku as \"product_sku\", p.name as \"product_name\", p.description as \"product_description\", p.type as \"product_type\",\n ih.packing_type as \"pack_type\", op.packing_size as \"pack_size\",\n ih.qty, ih.uom_value, ih.uom, ih.pallet_id, ih.carton_id, ih.batch_id, ih.batch_id_ref,\n i.expiration_date, i.manufacture_date,\n ih.unit_cost,\n ih.created_at as \"unloaded_at\",u2.name as \"unloaded_by\", \n ih2.created_at as \"putaway_at\", u3.name as \"putaway_by\",\n coalesce((select volume from product_details pd where pd.product_id = i.product_id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_volume,\n coalesce((select nett_weight from product_details pd where pd.product_id = i.product_id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_nett_weight,\n coalesce((select gross_weight from product_details pd where pd.product_id = i.product_id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n order by created_at desc\n fetch first 1 rows only),0) as unit_gross_weight,\n coalesce((select weight_unit from product_details pd where pd.product_id = i.product_id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size \n order by created_at desc\n fetch first 1 rows only),'') as weight_unit\n from (\n select * from arrival_notices \n where domain_id = $1 and bizplace_id = $2 and status ='DONE'\n and created_at >= $3 and created_at <= $4) an \n left join goods_receival_notes grn on grn.arrival_notice_id = an.id\n left join purchase_orders po on po.id = an.purchase_order_id \n left join contact_points cp on cp.id = po.supplier_id\n inner join bizplaces b2 on b2.id = an.bizplace_id \n left join users u on u.id = an.accepted_by_id \n inner join order_inventories oi on oi.arrival_notice_id = an.id\n inner join inventories i on i.id = oi.inventory_id\n left join worksheets w on w.arrival_notice_id = an.id and w.\"type\" ='UNLOADING'\n inner join reduced_inventory_histories ih on ih.inventory_id = oi.inventory_id and ih.transaction_type ='UNLOADING' and ih.ref_order_id = an.id::varchar\n left join users u2 on u2.id = ih.creator_id\n left join worksheets w2 on w2.arrival_notice_id = an.id and w2.\"type\" ='PUTAWAY'\n inner join reduced_inventory_histories ih2 on ih2.inventory_id = oi.inventory_id and ih2.transaction_type ='PUTAWAY' and ih2.ref_order_id = an.id::varchar\n left join users u3 on u3.id = ih2.creator_id\n inner join temp_products p on p.id = ih.product_id \n inner join order_products op on op.arrival_notice_id = an.id and op.actual_pack_qty is not null and op.product_id = ih.product_id and \n op.batch_id = ih.batch_id and op.packing_type = ih.packing_type\n order by an.name, p.sku, ih.batch_id\n ) src\n where 1=1\n ${extraQueryFilters}\n )\n `,\n [context.state.domain.id, bizplace.id, fromDate.value, toDate.value]\n )\n\n const total: any = await tx.query(`\n select count(*) from temp_inbound_order_report\n `)\n\n const result: any = await tx.query(\n `\n select *, \n round((qty * unit_volume)::numeric ,4) as total_volume, \n round((qty * unit_nett_weight)::numeric ,4) as total_unit_nett_weight, \n round((qty * unit_gross_weight)::numeric ,4) as total_unit_gross_weight \n from temp_inbound_order_report\n offset $1 limit $2\n `,\n [(params.pagination.page - 1) * params.pagination.limit, params.pagination.limit]\n )\n\n let items = result.map(itm => {\n let data = {\n bizplace: {\n description: itm.bizplace_description,\n name: itm.bizplace_name\n },\n grnNo: itm.grn_no,\n ganNo: itm.gan_no,\n deliveryOrderNo: itm.delivery_order_no,\n refNo1: itm.ref_no_1,\n refNo2: itm.ref_no_2,\n refNo3: itm.ref_no_3,\n looseItem: itm.loose_item,\n importCargo: itm.import_cargo,\n containerNo: itm.container_no,\n containerSize: itm.container_size,\n ownTransport: itm.own_transport,\n acceptedBy: itm.accepted_by,\n acceptedAt: itm.accepted_at,\n orderCreatedAt: itm.order_created_at,\n unloadStart: itm.unload_start,\n unloadComplete: itm.unload_complete,\n putawayStart: itm.putaway_start,\n putawayComplete: itm.putaway_complete,\n orderLineItem: itm.order_line_item,\n product: {\n id: itm.product_id,\n sku: itm.product_sku,\n name: itm.product_name,\n description: itm.product_description,\n type: itm.product_type\n },\n purchaseOrderId: itm.purchase_order_id,\n purchaseOrderNo: itm.purchase_order_name,\n packType: itm.pack_type,\n packSize: itm.pack_size,\n qty: itm.qty,\n uomValue: itm.uom_value,\n uom: itm.uom,\n unitVolume: itm.unit_volume,\n unitCost: itm.unit_cost,\n totalVolume: itm.total_volume,\n unitNettWeight: itm.unit_nett_weight,\n totalUnitNettWeight: itm.total_unit_nett_weight,\n unitGrossWeight: itm.unit_gross_weight,\n totalUnitGrossWeight: itm.total_unit_gross_weight,\n weightUnit: itm.weight_unit,\n palletId: itm.pallet_id,\n cartonId: itm.carton_id,\n batchId: itm.batch_id,\n batchIdRef: itm.batch_id_ref,\n expirationDate: itm.expiration_date,\n manufactureDate: itm.manufacture_date,\n unloadedAt: itm.unloaded_at,\n unloadedBy: itm.unloaded_by,\n putawayAt: itm.putaway_at,\n putawayBy: itm.putaway_by\n }\n\n if (itm.supplier_id) {\n data['supplier'] = {\n id: itm.supplier_id,\n name: itm.supplier_name\n }\n }\n\n return data\n })\n\n return {\n items,\n total: total[0].count\n }\n } catch (error) {\n throw error\n }\n }\n}\n"]}
|
|
@@ -12,12 +12,16 @@ exports.inboundSerialNumberReport = {
|
|
|
12
12
|
let userFilter = params.filters.find(data => data.name === 'user');
|
|
13
13
|
let fromDate = params.filters.find(data => data.name === 'fromDate');
|
|
14
14
|
let toDate = params.filters.find(data => data.name === 'toDate');
|
|
15
|
-
let
|
|
15
|
+
let orderNo = params.filters.find(data => data.name === 'orderNo');
|
|
16
|
+
let ref = params.filters.find(data => data.name === 'ref');
|
|
17
|
+
let palletId = params.filters.find(data => data.name === 'palletId');
|
|
18
|
+
let cartonId = params.filters.find(data => data.name === 'cartonId');
|
|
19
|
+
let serialNumber = params.filters.find(data => data.name === 'serialNumber');
|
|
16
20
|
if (userFilter) {
|
|
17
|
-
const user = await tx.getRepository(auth_base_1.User).findOne({
|
|
21
|
+
const user = (await tx.getRepository(auth_base_1.User).findOne({
|
|
18
22
|
where: { id: userFilter.value },
|
|
19
23
|
relations: ['bizplaces']
|
|
20
|
-
});
|
|
24
|
+
}));
|
|
21
25
|
const bizplace = user.bizplaces[0];
|
|
22
26
|
if (!bizplace)
|
|
23
27
|
throw 'Invalid input';
|
|
@@ -28,13 +32,37 @@ exports.inboundSerialNumberReport = {
|
|
|
28
32
|
}
|
|
29
33
|
if (!bizplaceFilter || !fromDate || !toDate)
|
|
30
34
|
throw 'Invalid input';
|
|
31
|
-
const bizplace = await tx.getRepository(biz_base_1.Bizplace).
|
|
35
|
+
const bizplace = await tx.getRepository(biz_base_1.Bizplace).findOneBy({
|
|
32
36
|
id: bizplaceFilter.value
|
|
33
37
|
});
|
|
34
38
|
await (0, utils_1.rawProductsQuery)(tx, params, bizplace);
|
|
35
39
|
let extraQueryFilters = '';
|
|
36
|
-
if (
|
|
37
|
-
extraQueryFilters = `${extraQueryFilters} and order_no like '%${
|
|
40
|
+
if (orderNo) {
|
|
41
|
+
extraQueryFilters = `${extraQueryFilters} and order_no like '%${orderNo.value}%' `;
|
|
42
|
+
}
|
|
43
|
+
if (palletId) {
|
|
44
|
+
extraQueryFilters = `${extraQueryFilters} and pallet_id like '%${palletId.value}%' `;
|
|
45
|
+
}
|
|
46
|
+
if (cartonId) {
|
|
47
|
+
extraQueryFilters = `${extraQueryFilters} and carton_id like '%${cartonId.value}%' `;
|
|
48
|
+
}
|
|
49
|
+
if (serialNumber) {
|
|
50
|
+
extraQueryFilters = `${extraQueryFilters} and serial_number like '%${serialNumber.value}%' `;
|
|
51
|
+
}
|
|
52
|
+
let refNoQueryFilter = '';
|
|
53
|
+
if (ref) {
|
|
54
|
+
let refValue = ref.value
|
|
55
|
+
.toLowerCase()
|
|
56
|
+
.split(',')
|
|
57
|
+
.map(ref => {
|
|
58
|
+
return "'%" + ref.trim().replace(/'/g, "''") + "%'";
|
|
59
|
+
})
|
|
60
|
+
.join(',');
|
|
61
|
+
refNoQueryFilter = `AND (
|
|
62
|
+
Lower(an.ref_no) LIKE ANY(ARRAY[${refValue}])
|
|
63
|
+
OR Lower(an.ref_no_2) LIKE ANY(ARRAY[${refValue}])
|
|
64
|
+
OR Lower(an.ref_no_3) LIKE ANY(ARRAY[${refValue}])
|
|
65
|
+
)`;
|
|
38
66
|
}
|
|
39
67
|
await tx.query(`
|
|
40
68
|
create temp table temp_inbound_serial_number_report on commit drop as (
|
|
@@ -50,13 +78,14 @@ exports.inboundSerialNumberReport = {
|
|
|
50
78
|
coalesce(w.started_at,ii.created_at) as "etd"
|
|
51
79
|
from inventory_items ii
|
|
52
80
|
inner join inventories i on i.id = ii.inventory_id
|
|
53
|
-
inner join
|
|
81
|
+
inner join temp_products p on p.id = i.product_id
|
|
54
82
|
left join product_details pd on pd.product_id = p.id and pd.packing_type = i.packing_type and pd.packing_size = i.packing_size
|
|
55
83
|
left join arrival_notices an on an.id = ii.inbound_order_id::uuid
|
|
56
84
|
left join worksheets w on w.arrival_notice_id = an.id and w.type = 'UNLOADING'
|
|
57
85
|
where
|
|
58
86
|
i.domain_id = $1 and i.bizplace_id = $2
|
|
59
87
|
and coalesce(w.started_at, ii.created_at) between $3 and $4
|
|
88
|
+
${refNoQueryFilter}
|
|
60
89
|
order by coalesce(w.started_at, ii.created_at), p.sku
|
|
61
90
|
) src
|
|
62
91
|
where 1=1
|