Revise QR code generation library, enhance POS flow, and update Edge Gateway management views and tests
This commit is contained in:
@@ -3320,7 +3320,9 @@ function ensureEdgeGatewayHardwareFixture(edgeGatewayFixture) {
|
||||
}
|
||||
|
||||
function buildEdgeGatewayHardwareBindingsIndex(edgeGatewayFixture, departmentId) {
|
||||
const gateways = edgeGatewayFixture.gateways.filter((gateway) => Number(gateway.department_id) === Number(departmentId));
|
||||
const gateways = edgeGatewayFixture.gateways.filter(
|
||||
(gateway) => Number(gateway.department_id) === Number(departmentId)
|
||||
);
|
||||
const bindingsByRelayId = {};
|
||||
|
||||
gateways.forEach((gateway) => {
|
||||
@@ -3420,8 +3422,7 @@ function buildEdgeGatewayHardwareDepartmentWorkspace(edgeGatewayFixture, departm
|
||||
required: requiredRelayCount,
|
||||
bound: boundRelayCount,
|
||||
missing: Math.max(0, requiredRelayCount - boundRelayCount),
|
||||
state:
|
||||
requiredRelayCount === 0 ? "NOT_REQUIRED" : boundRelayCount === requiredRelayCount ? "READY" : "MISSING",
|
||||
state: requiredRelayCount === 0 ? "NOT_REQUIRED" : boundRelayCount === requiredRelayCount ? "READY" : "MISSING",
|
||||
},
|
||||
links: {
|
||||
legacy: `/superuser/department/lanes/${lane.id}`,
|
||||
@@ -3478,7 +3479,10 @@ function buildEdgeGatewayHardwareDepartmentWorkspace(edgeGatewayFixture, departm
|
||||
const scansByScannerId = {};
|
||||
(hardware.scans || [])
|
||||
.filter((scan) => Number(scan.department_id) === Number(departmentId))
|
||||
.sort((left, right) => new Date(String(right.created_at || 0)).getTime() - new Date(String(left.created_at || 0)).getTime())
|
||||
.sort(
|
||||
(left, right) =>
|
||||
new Date(String(right.created_at || 0)).getTime() - new Date(String(left.created_at || 0)).getTime()
|
||||
)
|
||||
.forEach((scan) => {
|
||||
const scannerId = Number(scan.plate_scanner_id || 0);
|
||||
if (!scansByScannerId[scannerId]) {
|
||||
@@ -3514,11 +3518,19 @@ function buildEdgeGatewayHardwareDepartmentWorkspace(edgeGatewayFixture, departm
|
||||
});
|
||||
|
||||
const issues = [];
|
||||
const onlineGatewayCount = gatewayPayloads.filter((gateway) => String(gateway?.status || "").toUpperCase() === "ONLINE").length;
|
||||
const transportMode = String(gatewayPayloads[0]?.department_transport_mode || gateways[0]?.department_transport_mode || "cloud");
|
||||
const onlineGatewayCount = gatewayPayloads.filter(
|
||||
(gateway) => String(gateway?.status || "").toUpperCase() === "ONLINE"
|
||||
).length;
|
||||
const transportMode = String(
|
||||
gatewayPayloads[0]?.department_transport_mode || gateways[0]?.department_transport_mode || "cloud"
|
||||
);
|
||||
|
||||
if (gatewayPayloads.length === 0) {
|
||||
issues.push({ severity: "danger", code: "NO_GATEWAY", message: "No edge gateway has been claimed for this department." });
|
||||
issues.push({
|
||||
severity: "danger",
|
||||
code: "NO_GATEWAY",
|
||||
message: "No edge gateway has been claimed for this department.",
|
||||
});
|
||||
} else if (transportMode === "gateway" && onlineGatewayCount === 0) {
|
||||
issues.push({
|
||||
severity: "danger",
|
||||
@@ -3663,17 +3675,17 @@ function buildEdgeGatewayHardwareDepartmentWorkspace(edgeGatewayFixture, departm
|
||||
});
|
||||
|
||||
const primaryGateway = gatewayPayloads.find((gateway) => gateway?.is_primary) || gatewayPayloads[0] || null;
|
||||
const recentScanAt = scanners
|
||||
.map((scanner) => scanner?.recent_scan_at)
|
||||
.filter(Boolean)
|
||||
.sort((left, right) => new Date(String(right || 0)).getTime() - new Date(String(left || 0)).getTime())[0] || null;
|
||||
const recentScanAt =
|
||||
scanners
|
||||
.map((scanner) => scanner?.recent_scan_at)
|
||||
.filter(Boolean)
|
||||
.sort((left, right) => new Date(String(right || 0)).getTime() - new Date(String(left || 0)).getTime())[0] || null;
|
||||
|
||||
const health =
|
||||
issues.some((issue) => issue.severity === "danger")
|
||||
? "AT_RISK"
|
||||
: issues.length > 0
|
||||
? "PARTIAL"
|
||||
: "READY";
|
||||
const health = issues.some((issue) => issue.severity === "danger")
|
||||
? "AT_RISK"
|
||||
: issues.length > 0
|
||||
? "PARTIAL"
|
||||
: "READY";
|
||||
|
||||
const summary = {
|
||||
department_id: department.id,
|
||||
@@ -3820,7 +3832,9 @@ async function handleEdgeGatewayRoute({ route, request, parsedUrl, pathname, met
|
||||
if (edgeGatewayWorkspaceDepartmentsPattern.test(pathname) && method === "GET") {
|
||||
const hardware = ensureEdgeGatewayHardwareFixture(edgeGatewayFixture);
|
||||
const summaries = (hardware?.departments || [])
|
||||
.map((department) => buildEdgeGatewayHardwareDepartmentWorkspace(edgeGatewayFixture, department.id, false)?.summary)
|
||||
.map(
|
||||
(department) => buildEdgeGatewayHardwareDepartmentWorkspace(edgeGatewayFixture, department.id, false)?.summary
|
||||
)
|
||||
.filter(Boolean)
|
||||
.sort((left, right) => Number(left?.order_priority || 0) - Number(right?.order_priority || 0));
|
||||
await route.fulfill(json({ data: summaries }));
|
||||
@@ -3837,7 +3851,11 @@ async function handleEdgeGatewayRoute({ route, request, parsedUrl, pathname, met
|
||||
if (numberPlateScannersPattern.test(pathname) && method === "GET") {
|
||||
const hardware = ensureEdgeGatewayHardwareFixture(edgeGatewayFixture);
|
||||
const rows = cloneJson(hardware?.scanners || []);
|
||||
const paginated = paginateRows(rows, parsedUrl.searchParams.get("page") || 1, parsedUrl.searchParams.get("limit") || 10);
|
||||
const paginated = paginateRows(
|
||||
rows,
|
||||
parsedUrl.searchParams.get("page") || 1,
|
||||
parsedUrl.searchParams.get("limit") || 10
|
||||
);
|
||||
await route.fulfill(
|
||||
json({
|
||||
success: true,
|
||||
|
||||
Reference in New Issue
Block a user