@things-factory/operato-hub 4.3.604 → 4.3.607
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/email/send-emails.js +1 -0
- package/dist-server/graphql/resolvers/email/send-emails.js.map +1 -1
- package/dist-server/graphql/resolvers/reports/custom/posmy/custom-posmy-aging-report.js +131 -0
- package/dist-server/graphql/resolvers/reports/custom/posmy/custom-posmy-aging-report.js.map +1 -0
- 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/types/reports/custom/posmy/custom-posmy-aging-report-list.js +13 -0
- package/dist-server/graphql/types/reports/custom/posmy/custom-posmy-aging-report-list.js.map +1 -0
- package/dist-server/graphql/types/reports/custom/posmy/custom-posmy-aging-report.js +28 -0
- package/dist-server/graphql/types/reports/custom/posmy/custom-posmy-aging-report.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/package.json +5 -5
- package/server/graphql/resolvers/email/send-emails.ts +1 -0
- package/server/graphql/resolvers/reports/custom/posmy/custom-posmy-aging-report.ts +144 -0
- package/server/graphql/resolvers/reports/index.ts +3 -1
- package/server/graphql/types/reports/custom/posmy/custom-posmy-aging-report-list.ts +7 -0
- package/server/graphql/types/reports/custom/posmy/custom-posmy-aging-report.ts +22 -0
- package/server/graphql/types/reports/index.ts +6 -1
|
@@ -216,6 +216,7 @@ async function processEmailCronJob(email, fromDate, toDate) {
|
|
|
216
216
|
let modifiedContent = email.content.replace('{{companyName}}', bizplace.company.name);
|
|
217
217
|
let modifiedSubject = email.subject.replace('{{warehouseName}}', email.domain.name);
|
|
218
218
|
modifiedSubject = modifiedSubject.replace('{{reportDate}}', new Date().toLocaleDateString('en-GB'));
|
|
219
|
+
modifiedSubject = modifiedSubject.replace('{{companyName}}', bizplace.company.name);
|
|
219
220
|
let res = await (0, email_base_1.sendEmailSes)({
|
|
220
221
|
attachments,
|
|
221
222
|
subject: modifiedSubject,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-emails.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/email/send-emails.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"send-emails.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/email/send-emails.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.customPosmyAgingReport = void 0;
|
|
4
|
+
const biz_base_1 = require("@things-factory/biz-base");
|
|
5
|
+
exports.customPosmyAgingReport = {
|
|
6
|
+
async customPosmyAgingReport(_, params, context) {
|
|
7
|
+
try {
|
|
8
|
+
const { tx, domain } = context.state;
|
|
9
|
+
// Fetch all bizplace filters from params
|
|
10
|
+
let bizplaceFilters = params.filters.find(data => data.name === 'bizplace');
|
|
11
|
+
if (!bizplaceFilters || bizplaceFilters.length === 0)
|
|
12
|
+
throw 'Invalid input: At least one Bizplace filter is required';
|
|
13
|
+
// Query the database for matching Bizplaces to ensure they exist.value)
|
|
14
|
+
const bizplaces = await tx.getRepository(biz_base_1.Bizplace).findByIds(bizplaceFilters.value);
|
|
15
|
+
if (!bizplaces || bizplaces.length === 0)
|
|
16
|
+
throw 'Invalid input: None of the provided Bizplaces were found';
|
|
17
|
+
// Create temporary table for report
|
|
18
|
+
const result = await tx.query(`
|
|
19
|
+
SELECT
|
|
20
|
+
*,
|
|
21
|
+
CASE
|
|
22
|
+
WHEN "age_month" BETWEEN 1 AND 3 THEN '1-3'
|
|
23
|
+
WHEN "age_month" BETWEEN 3 AND 6 THEN '4-6'
|
|
24
|
+
WHEN "age_month" BETWEEN 6 AND 9 THEN '7-9'
|
|
25
|
+
WHEN "age_month" BETWEEN 9 AND 12 THEN '10-12'
|
|
26
|
+
WHEN "age_month" BETWEEN 12 AND 15 THEN '13-15'
|
|
27
|
+
WHEN "age_month" BETWEEN 15 AND 18 THEN '16-18'
|
|
28
|
+
WHEN "age_month" BETWEEN 18 AND 21 THEN '19-21'
|
|
29
|
+
ELSE '0'
|
|
30
|
+
END AS "range",
|
|
31
|
+
CASE
|
|
32
|
+
WHEN "expiry_date" < now() THEN true
|
|
33
|
+
ELSE false
|
|
34
|
+
END AS "isExpired"
|
|
35
|
+
from(
|
|
36
|
+
select
|
|
37
|
+
p.sku as "sku",
|
|
38
|
+
p.name as "product_name",
|
|
39
|
+
(new_invhist.qty-COALESCE(new_invhist.locked_qty,0)) as "qty",
|
|
40
|
+
new_invhist.batch_id as "batch_id",
|
|
41
|
+
(NOW()::DATE - new_invhist.created_at::DATE)::smallint AS "age_days",
|
|
42
|
+
EXTRACT(YEAR FROM age(NOW(), new_invhist.created_at)) * 12 + EXTRACT(MONTH FROM age(NOW(), new_invhist.created_at))::smallint AS "age_month",
|
|
43
|
+
new_invhist.created_at as "first_inbound_date" , l.name as "location",
|
|
44
|
+
CASE
|
|
45
|
+
WHEN l.type in('SHELF','STORAGE') THEN 'AVAILABLE' else l.type
|
|
46
|
+
END as "stock_status",
|
|
47
|
+
new_invhist.updated_at as "last_movement_time",
|
|
48
|
+
b.name as "company", coalesce(new_invhist.expiration_date,null) as "expiry_date"
|
|
49
|
+
from(
|
|
50
|
+
select
|
|
51
|
+
max(foo.created_at) as "created_at",
|
|
52
|
+
foo.id, foo.pallet_id, foo.batch_id, foo.carton_id, foo.updated_at, foo.product_id, foo.location_id, foo.qty, foo.locked_qty, foo.uom_value, foo.locked_uom_value, foo.bizplace_id, foo.expiration_date from(
|
|
53
|
+
select row_number() over(PARTITION by batch_id, id order by seq asc) as rn, *
|
|
54
|
+
from(
|
|
55
|
+
select
|
|
56
|
+
i.id , ih.created_at + interval '8 hours' as "created_at", ih.pallet_id, ih.batch_id, ih.carton_id, i.updated_at + interval '8 hours' as "updated_at", i.product_id, i.location_id, ih.seq , i.qty, i.locked_qty, i.uom_value, i.locked_uom_value , i.bizplace_id , i.expiration_date
|
|
57
|
+
from inventory_histories ih
|
|
58
|
+
inner join inventories i on i.id = ih.inventory_id
|
|
59
|
+
where i.status not in('MISSING','TERMINATED')
|
|
60
|
+
and i.domain_id = $1
|
|
61
|
+
and i.bizplace_id = $2
|
|
62
|
+
and (not ih.created_at >= now() - interval '30 minutes')
|
|
63
|
+
order by DATE(ih.created_at) ASC, ih.created_at ASC
|
|
64
|
+
)temp_inventory_histories order by id, seq)foo where rn = 1
|
|
65
|
+
group by
|
|
66
|
+
foo.id , foo.pallet_id, foo.batch_id, foo.carton_id, foo.updated_at, foo.product_id,
|
|
67
|
+
foo.location_id, foo.qty, foo.locked_qty, foo.uom_value, foo.locked_uom_value, foo.bizplace_id, foo.expiration_date
|
|
68
|
+
order by
|
|
69
|
+
foo.id)new_invhist
|
|
70
|
+
inner join products p on new_invhist.product_id = p.id
|
|
71
|
+
inner join locations l on l.id = new_invhist.location_id
|
|
72
|
+
inner join bizplaces b on b.id = new_invhist.bizplace_id
|
|
73
|
+
group by
|
|
74
|
+
p.sku, p.name, new_invhist.batch_id, new_invhist.qty, new_invhist.locked_qty,
|
|
75
|
+
new_invhist.created_at, "age_days", "age_month", l.type,
|
|
76
|
+
l.name, new_invhist.updated_at, b.name, new_invhist.id , new_invhist.expiration_date
|
|
77
|
+
)odd
|
|
78
|
+
ORDER BY
|
|
79
|
+
odd."company", odd."batch_id", odd."age_month", DATE(odd."first_inbound_date") ASC, odd."first_inbound_date" ASC, odd."sku"
|
|
80
|
+
`, [domain.id, bizplaceFilters.value]);
|
|
81
|
+
// Function to calculate days & months until expiry
|
|
82
|
+
const calculateExpiryDuration = (expiryDate) => {
|
|
83
|
+
if (!expiryDate)
|
|
84
|
+
return { expiryDays: null, expiryMonths: null };
|
|
85
|
+
const expiry = new Date(expiryDate);
|
|
86
|
+
const today = new Date();
|
|
87
|
+
const timeDiff = expiry.getTime() - today.getTime();
|
|
88
|
+
const expiryDays = Math.ceil(timeDiff / (1000 * 60 * 60 * 24)); // Convert ms to days
|
|
89
|
+
const expiryMonths = Math.floor(expiryDays / 30); // Approximate months
|
|
90
|
+
return { expiryDays, expiryMonths };
|
|
91
|
+
};
|
|
92
|
+
// Function to format timestamp as a readable string
|
|
93
|
+
const formatTimestamp = (timestamp) => new Date(timestamp).toLocaleString();
|
|
94
|
+
// Function to format expiry date (Only Date & Handle Null)
|
|
95
|
+
const formatExpiryDate = (expiryDate) => {
|
|
96
|
+
if (!expiryDate)
|
|
97
|
+
return ''; // Return blank if null (for Excel)
|
|
98
|
+
return new Date(expiryDate).toISOString().split('T')[0]; // Extract YYYY-MM-DD
|
|
99
|
+
};
|
|
100
|
+
// Map detailed results
|
|
101
|
+
let items = result.map(itm => {
|
|
102
|
+
const { expiryDays, expiryMonths } = calculateExpiryDuration(itm.expiry_date);
|
|
103
|
+
return {
|
|
104
|
+
productSku: itm.sku,
|
|
105
|
+
productName: itm.product_name,
|
|
106
|
+
qty: itm.qty,
|
|
107
|
+
batchId: itm.batch_id,
|
|
108
|
+
ageDays: itm.age_days,
|
|
109
|
+
ageMonth: itm.age_month,
|
|
110
|
+
firstInboundDate: formatTimestamp(itm.first_inbound_date),
|
|
111
|
+
lastMovementTime: formatTimestamp(itm.last_movement_time),
|
|
112
|
+
location: itm.location,
|
|
113
|
+
stockStatus: itm.stock_status,
|
|
114
|
+
company: itm.company,
|
|
115
|
+
expiryDate: formatExpiryDate(itm.expiry_date),
|
|
116
|
+
expiryDays,
|
|
117
|
+
expiryMonths,
|
|
118
|
+
range: itm.range,
|
|
119
|
+
isExpired: itm.isExpired ? 'true' : 'false'
|
|
120
|
+
};
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
items
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
throw error;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=custom-posmy-aging-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-posmy-aging-report.js","sourceRoot":"","sources":["../../../../../../server/graphql/resolvers/reports/custom/posmy/custom-posmy-aging-report.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,5 +10,6 @@ const asn_report_1 = require("./asn-report");
|
|
|
10
10
|
const admiral_asn_report_1 = require("./admiral-asn-report");
|
|
11
11
|
const receiving_report_1 = require("./receiving-report");
|
|
12
12
|
const export_report_1 = require("./export-report");
|
|
13
|
-
|
|
13
|
+
const custom_posmy_aging_report_1 = require("./custom/posmy/custom-posmy-aging-report");
|
|
14
|
+
exports.Query = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, inbound_order_details_report_1.inboundOrderDetailsReport), outbound_order_details_report_1.outboundOrderDetailsReport), shortage_report_1.shortageReport), custom_elccl_fn_dispatch_report_1.customElcclDispatchReport), aging_report_1.agingReport), asn_report_1.asnReport), admiral_asn_report_1.admiralAsnReport), custom_elccl_fn_dispatch_report_1.customElcclDispatchReport), receiving_report_1.receivingReport), export_report_1.exportReport), custom_posmy_aging_report_1.customPosmyAgingReport);
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/index.ts"],"names":[],"mappings":";;;AAAA,iFAA0E;AAC1E,mFAA4E;AAC5E,uDAAkD;AAClD,uFAA6E;AAC7E,iDAA4C;AAC5C,6CAAwC;AACxC,6DAAuD;AACvD,yDAAoD;AACpD,mDAA8C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/reports/index.ts"],"names":[],"mappings":";;;AAAA,iFAA0E;AAC1E,mFAA4E;AAC5E,uDAAkD;AAClD,uFAA6E;AAC7E,iDAA4C;AAC5C,6CAAwC;AACxC,6DAAuD;AACvD,yDAAoD;AACpD,mDAA8C;AAC9C,wFAAiF;AAEpE,QAAA,KAAK,iKACb,wDAAyB,GACzB,0DAA0B,GAC1B,gCAAc,GACd,2DAAyB,GACzB,0BAAW,GACX,sBAAS,GACT,qCAAgB,GAChB,2DAAyB,GACzB,kCAAe,GACf,4BAAY,GACZ,kDAAsB,EAC1B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CustomPosmyAgingReportList = void 0;
|
|
7
|
+
const graphql_tag_1 = __importDefault(require("graphql-tag"));
|
|
8
|
+
exports.CustomPosmyAgingReportList = (0, graphql_tag_1.default) `
|
|
9
|
+
type CustomPosmyAgingReportList {
|
|
10
|
+
items: [CustomPosmyAgingReport]
|
|
11
|
+
}
|
|
12
|
+
`;
|
|
13
|
+
//# sourceMappingURL=custom-posmy-aging-report-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-posmy-aging-report-list.js","sourceRoot":"","sources":["../../../../../../server/graphql/types/reports/custom/posmy/custom-posmy-aging-report-list.ts"],"names":[],"mappings":";;;;;;AAAA,8DAA6B;AAEhB,QAAA,0BAA0B,GAAG,IAAA,qBAAG,EAAA;;;;CAI5C,CAAA"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CustomPosmyAgingReport = void 0;
|
|
7
|
+
const graphql_tag_1 = __importDefault(require("graphql-tag"));
|
|
8
|
+
exports.CustomPosmyAgingReport = (0, graphql_tag_1.default) `
|
|
9
|
+
type CustomPosmyAgingReport {
|
|
10
|
+
productSku: String
|
|
11
|
+
productName: String
|
|
12
|
+
qty: Int
|
|
13
|
+
batchId: String
|
|
14
|
+
ageDays: Int
|
|
15
|
+
ageMonth: Int
|
|
16
|
+
firstInboundDate: String
|
|
17
|
+
lastMovementTime: String
|
|
18
|
+
location: String
|
|
19
|
+
stockStatus: String
|
|
20
|
+
company: String
|
|
21
|
+
expiryDate: String
|
|
22
|
+
expiryDays: Int
|
|
23
|
+
expiryMonths: Int
|
|
24
|
+
range: String
|
|
25
|
+
isExpired: String
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
//# sourceMappingURL=custom-posmy-aging-report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-posmy-aging-report.js","sourceRoot":"","sources":["../../../../../../server/graphql/types/reports/custom/posmy/custom-posmy-aging-report.ts"],"names":[],"mappings":";;;;;;AAAA,8DAA6B;AAEhB,QAAA,sBAAsB,GAAG,IAAA,qBAAG,EAAA;;;;;;;;;;;;;;;;;;;CAmBxC,CAAA"}
|
|
@@ -19,6 +19,8 @@ const receiving_report_1 = require("./receiving-report");
|
|
|
19
19
|
const receiving_report_list_1 = require("./receiving-report-list");
|
|
20
20
|
const export_report_1 = require("./export-report");
|
|
21
21
|
const export_report_list_1 = require("./export-report-list");
|
|
22
|
+
const custom_posmy_aging_report_1 = require("./custom/posmy/custom-posmy-aging-report");
|
|
23
|
+
const custom_posmy_aging_report_list_1 = require("./custom/posmy/custom-posmy-aging-report-list");
|
|
22
24
|
exports.Query = `
|
|
23
25
|
inboundOrderDetailsReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): InboundOrderDetailsReportList @transaction
|
|
24
26
|
outboundOrderDetailsReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): OutboundOrderDetailsReportList @transaction
|
|
@@ -29,6 +31,7 @@ exports.Query = `
|
|
|
29
31
|
admiralAsnReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): AdmiralAsnReportList @transaction
|
|
30
32
|
receivingReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): ReceivingReportList @transaction
|
|
31
33
|
exportReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): ExportReportList @transaction
|
|
34
|
+
customPosmyAgingReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): CustomPosmyAgingReportList @transaction
|
|
32
35
|
`;
|
|
33
36
|
exports.Types = [
|
|
34
37
|
inbound_order_details_report_1.InboundOrderDetailsReport,
|
|
@@ -48,6 +51,8 @@ exports.Types = [
|
|
|
48
51
|
admiral_asn_report_1.AdmiralAsnReport,
|
|
49
52
|
admiral_asn_report_list_1.AdmiralAsnReportList,
|
|
50
53
|
export_report_1.ExportReport,
|
|
51
|
-
export_report_list_1.ExportReportList
|
|
54
|
+
export_report_list_1.ExportReportList,
|
|
55
|
+
custom_posmy_aging_report_1.CustomPosmyAgingReport,
|
|
56
|
+
custom_posmy_aging_report_list_1.CustomPosmyAgingReportList
|
|
52
57
|
];
|
|
53
58
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/reports/index.ts"],"names":[],"mappings":";;;AAAA,iFAA0E;AAC1E,2FAAmF;AACnF,mFAA4E;AAC5E,6FAAqF;AACrF,iEAA2D;AAC3D,iEAAuD;AACvD,uFAA6E;AAC7E,iGAAsF;AACtF,iDAA4C;AAC5C,2DAAqD;AACrD,6CAAwC;AACxC,uDAAiD;AACjD,6DAAuD;AACvD,uEAAgE;AAChE,yDAAoD;AACpD,mEAA6D;AAC7D,mDAA8C;AAC9C,6DAAuD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../server/graphql/types/reports/index.ts"],"names":[],"mappings":";;;AAAA,iFAA0E;AAC1E,2FAAmF;AACnF,mFAA4E;AAC5E,6FAAqF;AACrF,iEAA2D;AAC3D,iEAAuD;AACvD,uFAA6E;AAC7E,iGAAsF;AACtF,iDAA4C;AAC5C,2DAAqD;AACrD,6CAAwC;AACxC,uDAAiD;AACjD,6DAAuD;AACvD,uEAAgE;AAChE,yDAAoD;AACpD,mEAA6D;AAC7D,mDAA8C;AAC9C,6DAAuD;AACvD,wFAAiF;AACjF,kGAA0F;AAE7E,QAAA,KAAK,GAAG;;;;;;;;;;;CAWpB,CAAA;AAEY,QAAA,KAAK,GAAG;IACnB,wDAAyB;IACzB,iEAA6B;IAC7B,0DAA0B;IAC1B,mEAA8B;IAC9B,qCAAc;IACd,yCAAkB;IAClB,2DAAyB;IACzB,oEAA6B;IAC7B,kCAAe;IACf,2CAAmB;IACnB,0BAAW;IACX,mCAAe;IACf,sBAAS;IACT,+BAAa;IACb,qCAAgB;IAChB,8CAAoB;IACpB,4BAAY;IACZ,qCAAgB;IAChB,kDAAsB;IACtB,2DAA0B;CAC3B,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@things-factory/operato-hub",
|
|
3
|
-
"version": "4.3.
|
|
3
|
+
"version": "4.3.607",
|
|
4
4
|
"main": "dist-server/index.js",
|
|
5
5
|
"browser": "client/index.js",
|
|
6
6
|
"things-factory": true,
|
|
@@ -90,9 +90,9 @@
|
|
|
90
90
|
"@things-factory/more-ui": "^4.3.591",
|
|
91
91
|
"@things-factory/notification": "^4.3.591",
|
|
92
92
|
"@things-factory/pdf": "^4.3.591",
|
|
93
|
-
"@things-factory/product-ui": "^4.3.
|
|
93
|
+
"@things-factory/product-ui": "^4.3.607",
|
|
94
94
|
"@things-factory/resource-ui": "^4.3.591",
|
|
95
|
-
"@things-factory/sales-base": "^4.3.
|
|
95
|
+
"@things-factory/sales-base": "^4.3.607",
|
|
96
96
|
"@things-factory/scene-data-transform": "^4.3.591",
|
|
97
97
|
"@things-factory/scene-excel": "^4.3.591",
|
|
98
98
|
"@things-factory/scene-firebase": "^4.3.591",
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
"@things-factory/system-ui": "^4.3.591",
|
|
110
110
|
"@things-factory/transport-base": "^4.3.595",
|
|
111
111
|
"@things-factory/warehouse-base": "^4.3.603",
|
|
112
|
-
"@things-factory/worksheet-base": "^4.3.
|
|
112
|
+
"@things-factory/worksheet-base": "^4.3.607",
|
|
113
113
|
"cron-parser": "^4.7.0",
|
|
114
114
|
"koa2-swagger-ui": "^5.0.2",
|
|
115
115
|
"swagger-jsdoc": "^5.0.0",
|
|
@@ -122,5 +122,5 @@
|
|
|
122
122
|
"resolutions": {
|
|
123
123
|
"core-js": "^3.16.0"
|
|
124
124
|
},
|
|
125
|
-
"gitHead": "
|
|
125
|
+
"gitHead": "897591abbc6716566a0f675b53fe5bc9d1025e76"
|
|
126
126
|
}
|
|
@@ -221,6 +221,7 @@ async function processEmailCronJob(email, fromDate, toDate) {
|
|
|
221
221
|
let modifiedContent = email.content.replace('{{companyName}}', bizplace.company.name)
|
|
222
222
|
let modifiedSubject = email.subject.replace('{{warehouseName}}', email.domain.name)
|
|
223
223
|
modifiedSubject = modifiedSubject.replace('{{reportDate}}', new Date().toLocaleDateString('en-GB'))
|
|
224
|
+
modifiedSubject = modifiedSubject.replace('{{companyName}}', bizplace.company.name)
|
|
224
225
|
|
|
225
226
|
let res = await sendEmailSes({
|
|
226
227
|
attachments,
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { EntityManager } from 'typeorm'
|
|
2
|
+
import { Domain } from '@things-factory/shell'
|
|
3
|
+
import { Bizplace } from '@things-factory/biz-base'
|
|
4
|
+
import { ListParam } from '@things-factory/shell'
|
|
5
|
+
|
|
6
|
+
export const customPosmyAgingReport = {
|
|
7
|
+
async customPosmyAgingReport(_: any, params: ListParam, context: any) {
|
|
8
|
+
try {
|
|
9
|
+
const { tx, domain }: { tx: EntityManager; domain: Domain } = context.state
|
|
10
|
+
|
|
11
|
+
// Fetch all bizplace filters from params
|
|
12
|
+
let bizplaceFilters = params.filters.find(data => data.name === 'bizplace')
|
|
13
|
+
|
|
14
|
+
if (!bizplaceFilters || bizplaceFilters.length === 0)
|
|
15
|
+
throw 'Invalid input: At least one Bizplace filter is required'
|
|
16
|
+
|
|
17
|
+
// Query the database for matching Bizplaces to ensure they exist.value)
|
|
18
|
+
const bizplaces: Bizplace[] = await tx.getRepository(Bizplace).findByIds(bizplaceFilters.value)
|
|
19
|
+
|
|
20
|
+
if (!bizplaces || bizplaces.length === 0) throw 'Invalid input: None of the provided Bizplaces were found'
|
|
21
|
+
|
|
22
|
+
// Create temporary table for report
|
|
23
|
+
const result: any = await tx.query(
|
|
24
|
+
`
|
|
25
|
+
SELECT
|
|
26
|
+
*,
|
|
27
|
+
CASE
|
|
28
|
+
WHEN "age_month" BETWEEN 1 AND 3 THEN '1-3'
|
|
29
|
+
WHEN "age_month" BETWEEN 3 AND 6 THEN '4-6'
|
|
30
|
+
WHEN "age_month" BETWEEN 6 AND 9 THEN '7-9'
|
|
31
|
+
WHEN "age_month" BETWEEN 9 AND 12 THEN '10-12'
|
|
32
|
+
WHEN "age_month" BETWEEN 12 AND 15 THEN '13-15'
|
|
33
|
+
WHEN "age_month" BETWEEN 15 AND 18 THEN '16-18'
|
|
34
|
+
WHEN "age_month" BETWEEN 18 AND 21 THEN '19-21'
|
|
35
|
+
ELSE '0'
|
|
36
|
+
END AS "range",
|
|
37
|
+
CASE
|
|
38
|
+
WHEN "expiry_date" < now() THEN true
|
|
39
|
+
ELSE false
|
|
40
|
+
END AS "isExpired"
|
|
41
|
+
from(
|
|
42
|
+
select
|
|
43
|
+
p.sku as "sku",
|
|
44
|
+
p.name as "product_name",
|
|
45
|
+
(new_invhist.qty-COALESCE(new_invhist.locked_qty,0)) as "qty",
|
|
46
|
+
new_invhist.batch_id as "batch_id",
|
|
47
|
+
(NOW()::DATE - new_invhist.created_at::DATE)::smallint AS "age_days",
|
|
48
|
+
EXTRACT(YEAR FROM age(NOW(), new_invhist.created_at)) * 12 + EXTRACT(MONTH FROM age(NOW(), new_invhist.created_at))::smallint AS "age_month",
|
|
49
|
+
new_invhist.created_at as "first_inbound_date" , l.name as "location",
|
|
50
|
+
CASE
|
|
51
|
+
WHEN l.type in('SHELF','STORAGE') THEN 'AVAILABLE' else l.type
|
|
52
|
+
END as "stock_status",
|
|
53
|
+
new_invhist.updated_at as "last_movement_time",
|
|
54
|
+
b.name as "company", coalesce(new_invhist.expiration_date,null) as "expiry_date"
|
|
55
|
+
from(
|
|
56
|
+
select
|
|
57
|
+
max(foo.created_at) as "created_at",
|
|
58
|
+
foo.id, foo.pallet_id, foo.batch_id, foo.carton_id, foo.updated_at, foo.product_id, foo.location_id, foo.qty, foo.locked_qty, foo.uom_value, foo.locked_uom_value, foo.bizplace_id, foo.expiration_date from(
|
|
59
|
+
select row_number() over(PARTITION by batch_id, id order by seq asc) as rn, *
|
|
60
|
+
from(
|
|
61
|
+
select
|
|
62
|
+
i.id , ih.created_at + interval '8 hours' as "created_at", ih.pallet_id, ih.batch_id, ih.carton_id, i.updated_at + interval '8 hours' as "updated_at", i.product_id, i.location_id, ih.seq , i.qty, i.locked_qty, i.uom_value, i.locked_uom_value , i.bizplace_id , i.expiration_date
|
|
63
|
+
from inventory_histories ih
|
|
64
|
+
inner join inventories i on i.id = ih.inventory_id
|
|
65
|
+
where i.status not in('MISSING','TERMINATED')
|
|
66
|
+
and i.domain_id = $1
|
|
67
|
+
and i.bizplace_id = $2
|
|
68
|
+
and (not ih.created_at >= now() - interval '30 minutes')
|
|
69
|
+
order by DATE(ih.created_at) ASC, ih.created_at ASC
|
|
70
|
+
)temp_inventory_histories order by id, seq)foo where rn = 1
|
|
71
|
+
group by
|
|
72
|
+
foo.id , foo.pallet_id, foo.batch_id, foo.carton_id, foo.updated_at, foo.product_id,
|
|
73
|
+
foo.location_id, foo.qty, foo.locked_qty, foo.uom_value, foo.locked_uom_value, foo.bizplace_id, foo.expiration_date
|
|
74
|
+
order by
|
|
75
|
+
foo.id)new_invhist
|
|
76
|
+
inner join products p on new_invhist.product_id = p.id
|
|
77
|
+
inner join locations l on l.id = new_invhist.location_id
|
|
78
|
+
inner join bizplaces b on b.id = new_invhist.bizplace_id
|
|
79
|
+
group by
|
|
80
|
+
p.sku, p.name, new_invhist.batch_id, new_invhist.qty, new_invhist.locked_qty,
|
|
81
|
+
new_invhist.created_at, "age_days", "age_month", l.type,
|
|
82
|
+
l.name, new_invhist.updated_at, b.name, new_invhist.id , new_invhist.expiration_date
|
|
83
|
+
)odd
|
|
84
|
+
ORDER BY
|
|
85
|
+
odd."company", odd."batch_id", odd."age_month", DATE(odd."first_inbound_date") ASC, odd."first_inbound_date" ASC, odd."sku"
|
|
86
|
+
`,
|
|
87
|
+
[domain.id, bizplaceFilters.value]
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
// Function to calculate days & months until expiry
|
|
91
|
+
const calculateExpiryDuration = (expiryDate: string | null) => {
|
|
92
|
+
if (!expiryDate) return { expiryDays: null, expiryMonths: null }
|
|
93
|
+
|
|
94
|
+
const expiry = new Date(expiryDate)
|
|
95
|
+
const today = new Date()
|
|
96
|
+
const timeDiff = expiry.getTime() - today.getTime()
|
|
97
|
+
|
|
98
|
+
const expiryDays = Math.ceil(timeDiff / (1000 * 60 * 60 * 24)) // Convert ms to days
|
|
99
|
+
const expiryMonths = Math.floor(expiryDays / 30) // Approximate months
|
|
100
|
+
|
|
101
|
+
return { expiryDays, expiryMonths }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Function to format timestamp as a readable string
|
|
105
|
+
const formatTimestamp = (timestamp: string) => new Date(timestamp).toLocaleString()
|
|
106
|
+
|
|
107
|
+
// Function to format expiry date (Only Date & Handle Null)
|
|
108
|
+
const formatExpiryDate = (expiryDate: string | null) => {
|
|
109
|
+
if (!expiryDate) return '' // Return blank if null (for Excel)
|
|
110
|
+
return new Date(expiryDate).toISOString().split('T')[0] // Extract YYYY-MM-DD
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Map detailed results
|
|
114
|
+
let items = result.map(itm => {
|
|
115
|
+
const { expiryDays, expiryMonths } = calculateExpiryDuration(itm.expiry_date)
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
productSku: itm.sku,
|
|
119
|
+
productName: itm.product_name,
|
|
120
|
+
qty: itm.qty,
|
|
121
|
+
batchId: itm.batch_id,
|
|
122
|
+
ageDays: itm.age_days,
|
|
123
|
+
ageMonth: itm.age_month,
|
|
124
|
+
firstInboundDate: formatTimestamp(itm.first_inbound_date),
|
|
125
|
+
lastMovementTime: formatTimestamp(itm.last_movement_time),
|
|
126
|
+
location: itm.location,
|
|
127
|
+
stockStatus: itm.stock_status,
|
|
128
|
+
company: itm.company,
|
|
129
|
+
expiryDate: formatExpiryDate(itm.expiry_date),
|
|
130
|
+
expiryDays,
|
|
131
|
+
expiryMonths,
|
|
132
|
+
range: itm.range,
|
|
133
|
+
isExpired: itm.isExpired ? 'true' : 'false'
|
|
134
|
+
}
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
return {
|
|
138
|
+
items
|
|
139
|
+
}
|
|
140
|
+
} catch (error) {
|
|
141
|
+
throw error
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -7,6 +7,7 @@ import { asnReport } from './asn-report'
|
|
|
7
7
|
import { admiralAsnReport } from './admiral-asn-report'
|
|
8
8
|
import { receivingReport } from './receiving-report'
|
|
9
9
|
import { exportReport } from './export-report'
|
|
10
|
+
import { customPosmyAgingReport } from './custom/posmy/custom-posmy-aging-report'
|
|
10
11
|
|
|
11
12
|
export const Query = {
|
|
12
13
|
...inboundOrderDetailsReport,
|
|
@@ -18,5 +19,6 @@ export const Query = {
|
|
|
18
19
|
...admiralAsnReport,
|
|
19
20
|
...customElcclDispatchReport,
|
|
20
21
|
...receivingReport,
|
|
21
|
-
...exportReport
|
|
22
|
+
...exportReport,
|
|
23
|
+
...customPosmyAgingReport
|
|
22
24
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import gql from 'graphql-tag'
|
|
2
|
+
|
|
3
|
+
export const CustomPosmyAgingReport = gql`
|
|
4
|
+
type CustomPosmyAgingReport {
|
|
5
|
+
productSku: String
|
|
6
|
+
productName: String
|
|
7
|
+
qty: Int
|
|
8
|
+
batchId: String
|
|
9
|
+
ageDays: Int
|
|
10
|
+
ageMonth: Int
|
|
11
|
+
firstInboundDate: String
|
|
12
|
+
lastMovementTime: String
|
|
13
|
+
location: String
|
|
14
|
+
stockStatus: String
|
|
15
|
+
company: String
|
|
16
|
+
expiryDate: String
|
|
17
|
+
expiryDays: Int
|
|
18
|
+
expiryMonths: Int
|
|
19
|
+
range: String
|
|
20
|
+
isExpired: String
|
|
21
|
+
}
|
|
22
|
+
`
|
|
@@ -16,6 +16,8 @@ import { ReceivingReport } from './receiving-report'
|
|
|
16
16
|
import { ReceivingReportList } from './receiving-report-list'
|
|
17
17
|
import { ExportReport } from './export-report'
|
|
18
18
|
import { ExportReportList } from './export-report-list'
|
|
19
|
+
import { CustomPosmyAgingReport } from './custom/posmy/custom-posmy-aging-report'
|
|
20
|
+
import { CustomPosmyAgingReportList } from './custom/posmy/custom-posmy-aging-report-list'
|
|
19
21
|
|
|
20
22
|
export const Query = `
|
|
21
23
|
inboundOrderDetailsReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): InboundOrderDetailsReportList @transaction
|
|
@@ -27,6 +29,7 @@ export const Query = `
|
|
|
27
29
|
admiralAsnReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): AdmiralAsnReportList @transaction
|
|
28
30
|
receivingReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): ReceivingReportList @transaction
|
|
29
31
|
exportReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): ExportReportList @transaction
|
|
32
|
+
customPosmyAgingReport(filters: [Filter!], pagination: Pagination, sortings: [Sorting!]): CustomPosmyAgingReportList @transaction
|
|
30
33
|
`
|
|
31
34
|
|
|
32
35
|
export const Types = [
|
|
@@ -47,5 +50,7 @@ export const Types = [
|
|
|
47
50
|
AdmiralAsnReport,
|
|
48
51
|
AdmiralAsnReportList,
|
|
49
52
|
ExportReport,
|
|
50
|
-
ExportReportList
|
|
53
|
+
ExportReportList,
|
|
54
|
+
CustomPosmyAgingReport,
|
|
55
|
+
CustomPosmyAgingReportList
|
|
51
56
|
]
|