@things-factory/operato-hub 4.3.605 → 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.
@@ -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":";;;AAEA,uDAAmD;AAGtC,QAAA,sBAAsB,GAAG;IACpC,KAAK,CAAC,sBAAsB,CAAC,CAAM,EAAE,MAAiB,EAAE,OAAY;QAClE,IAAI;YACF,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAA0C,OAAO,CAAC,KAAK,CAAA;YAE3E,yCAAyC;YACzC,IAAI,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAA;YAE3E,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC;gBAClD,MAAM,yDAAyD,CAAA;YAEjE,wEAAwE;YACxE,MAAM,SAAS,GAAe,MAAM,EAAE,CAAC,aAAa,CAAC,mBAAQ,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;YAE/F,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,0DAA0D,CAAA;YAE1G,oCAAoC;YACpC,MAAM,MAAM,GAAQ,MAAM,EAAE,CAAC,KAAK,CAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SA8DC,EACD,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,CAAC,KAAK,CAAC,CACnC,CAAA;YAED,mDAAmD;YACnD,MAAM,uBAAuB,GAAG,CAAC,UAAyB,EAAE,EAAE;gBAC5D,IAAI,CAAC,UAAU;oBAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAA;gBAEhE,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAA;gBACnC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;gBACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;gBAEnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA,CAAC,qBAAqB;gBACpF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAA,CAAC,qBAAqB;gBAEtE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA;YACrC,CAAC,CAAA;YAED,oDAAoD;YACpD,MAAM,eAAe,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAA;YAEnF,2DAA2D;YAC3D,MAAM,gBAAgB,GAAG,CAAC,UAAyB,EAAE,EAAE;gBACrD,IAAI,CAAC,UAAU;oBAAE,OAAO,EAAE,CAAA,CAAC,mCAAmC;gBAC9D,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,qBAAqB;YAC/E,CAAC,CAAA;YAED,uBAAuB;YACvB,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC3B,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBAE7E,OAAO;oBACL,UAAU,EAAE,GAAG,CAAC,GAAG;oBACnB,WAAW,EAAE,GAAG,CAAC,YAAY;oBAC7B,GAAG,EAAE,GAAG,CAAC,GAAG;oBACZ,OAAO,EAAE,GAAG,CAAC,QAAQ;oBACrB,OAAO,EAAE,GAAG,CAAC,QAAQ;oBACrB,QAAQ,EAAE,GAAG,CAAC,SAAS;oBACvB,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC;oBACzD,gBAAgB,EAAE,eAAe,CAAC,GAAG,CAAC,kBAAkB,CAAC;oBACzD,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,WAAW,EAAE,GAAG,CAAC,YAAY;oBAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,UAAU,EAAE,gBAAgB,CAAC,GAAG,CAAC,WAAW,CAAC;oBAC7C,UAAU;oBACV,YAAY;oBACZ,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;iBAC5C,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,OAAO;gBACL,KAAK;aACN,CAAA;SACF;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,KAAK,CAAA;SACZ;IACH,CAAC;CACF,CAAA"}
@@ -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
- exports.Query = 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);
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;AAEjC,QAAA,KAAK,mJACb,wDAAyB,GACzB,0DAA0B,GAC1B,gCAAc,GACd,2DAAyB,GACzB,0BAAW,GACX,sBAAS,GACT,qCAAgB,GAChB,2DAAyB,GACzB,kCAAe,GACf,4BAAY,EAChB"}
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;AAE1C,QAAA,KAAK,GAAG;;;;;;;;;;CAUpB,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;CACjB,CAAA"}
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.605",
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.598",
93
+ "@things-factory/product-ui": "^4.3.607",
94
94
  "@things-factory/resource-ui": "^4.3.591",
95
- "@things-factory/sales-base": "^4.3.605",
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.605",
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": "0c511bca865233bf36555c124e7053285ef18ddd"
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,7 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const CustomPosmyAgingReportList = gql`
4
+ type CustomPosmyAgingReportList {
5
+ items: [CustomPosmyAgingReport]
6
+ }
7
+ `
@@ -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
  ]