Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/Modules/Database/reports.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ import SwayamRegistrationsReport from "./reports/SwayamRegistrationsReport";
import SemesterRegistrationsReport from "./reports/SemesterRegistrationsReport";
import CreditsEarnedReport from "./reports/CreditsEarnedReport";

import BatchWiseStudentCountReport from "./reports/BatchWiseStudentCountReport";
import BranchWiseStudentCountReport from "./reports/BranchWiseStudentCountReport";

// One entry per report. Adding a report means adding an entry here; the list
// page and the report page both read from this.
export const DATABASE_REPORTS = [
Expand Down Expand Up @@ -60,6 +63,21 @@ export const DATABASE_REPORTS = [
filters: "Batch",
Component: CreditsEarnedReport,
},
{
id: "batch-wise-student-count",
title: "Batch-wise student count",
summary: "Male, female, and total candidate count for batches 2020 to 2026",
filters: "None",
Component: BatchWiseStudentCountReport,
},
{
id: "branch-wise-student-count",
title: "Branch-wise student count",
summary:
"Male, female, and total candidate count per discipline for batches 2020 to 2026",
filters: "None",
Component: BranchWiseStudentCountReport,
},
];

export const findReport = (id) =>
Expand Down
70 changes: 70 additions & 0 deletions src/Modules/Database/reports/BatchWiseStudentCountReport.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import { useState, useEffect } from "react";

import { Button, Group, Stack, Text } from "@mantine/core";
import { showNotification } from "@mantine/notifications";
import { IconSearch } from "@tabler/icons-react";
import axios from "axios";
import { databaseBatchWiseStudentCountRoute } from "../../../routes/academicRoutes";
import ReportTable from "../ReportTable";

const COLUMNS = [
{ key: "batch", label: "Batch" },
{ key: "male", label: "Male Candidates" },
{ key: "female", label: "Female Candidates" },
{ key: "total", label: "Grand Total" },
];

export default function BatchWiseStudentCountReport() {
const [result, setResult] = useState(null);
const [loading, setLoading] = useState(false);

const run = async () => {
setLoading(true);
try {
const token = localStorage.getItem("authToken");
const { data } = await axios.get(databaseBatchWiseStudentCountRoute, {
headers: token ? { Authorization: `Token ${token}` } : {},
});
setResult(data);
} catch (error) {
showNotification({
title: "Error",
message: error.response?.data?.detail || "Could not load the counts.",
color: "red",
});
} finally {
setLoading(false);
}
};

useEffect(() => {
run();
}, []);

return (
<Stack gap="md">
<Group align="flex-end" gap="md">
<Button
leftSection={<IconSearch size={16} />}
onClick={run}
loading={loading}
style={{ flexShrink: 0 }}
>
Refresh
</Button>
</Group>

{result ? (
<ReportTable
columns={COLUMNS}
rows={result.rows}
filename="batch_wise_student_count"
/>
) : (
<Text size="sm" c="dimmed">
Fetching data...
</Text>
)}
</Stack>
);
}
71 changes: 71 additions & 0 deletions src/Modules/Database/reports/BranchWiseStudentCountReport.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
import { useState, useEffect } from "react";

import { Button, Group, Stack, Text } from "@mantine/core";
import { showNotification } from "@mantine/notifications";
import { IconSearch } from "@tabler/icons-react";
import axios from "axios";
import { databaseBranchWiseStudentCountRoute } from "../../../routes/academicRoutes";
import ReportTable from "../ReportTable";

const COLUMNS = [
{ key: "batch", label: "Batch" },
{ key: "branch", label: "Branch / Discipline" },
{ key: "male", label: "Male Candidates" },
{ key: "female", label: "Female Candidates" },
{ key: "total", label: "Total Candidates" },
];

export default function BranchWiseStudentCountReport() {
const [result, setResult] = useState(null);
const [loading, setLoading] = useState(false);

const run = async () => {
setLoading(true);
try {
const token = localStorage.getItem("authToken");
const { data } = await axios.get(databaseBranchWiseStudentCountRoute, {
headers: token ? { Authorization: `Token ${token}` } : {},
});
setResult(data);
} catch (error) {
showNotification({
title: "Error",
message: error.response?.data?.detail || "Could not load the counts.",
color: "red",
});
} finally {
setLoading(false);
}
};

useEffect(() => {
run();
}, []);

return (
<Stack gap="md">
<Group align="flex-end" gap="md">
<Button
leftSection={<IconSearch size={16} />}
onClick={run}
loading={loading}
style={{ flexShrink: 0 }}
>
Refresh
</Button>
</Group>

{result ? (
<ReportTable
columns={COLUMNS}
rows={result.rows}
filename="branch_wise_student_count"
/>
) : (
<Text size="sm" c="dimmed">
Fetching data...
</Text>
)}
</Stack>
);
}
2 changes: 2 additions & 0 deletions src/routes/academicRoutes/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ export const databaseCourseRegistrationCountsRoute = `${host}/aims/api/database/
export const databaseSwayamRegistrationsRoute = `${host}/aims/api/database/swayam-registrations/`;
export const databaseSemesterRegistrationsRoute = `${host}/aims/api/database/semester-registrations/`;
export const databaseCreditsEarnedRoute = `${host}/aims/api/database/credits-earned/`;
export const databaseBatchWiseStudentCountRoute = `${host}/aims/api/database/batch-wise-student-count/`;
export const databaseBranchWiseStudentCountRoute = `${host}/aims/api/database/branch-wise-student-count/`;
export const academicProceduresFaculty = `${host}/academic-procedures/api/fac/academic_procedures_faculty`;
export const getAllCourses = `${host}/academic-procedures/api/acad/get_all_courses`;
export const generateprereport = `${host}/aims/api/generate_preregistration_report/`;
Expand Down