@syedahoorainali/giaic
Version:
A vibrant Command-Line Interface for managing student records, built with TypeScript.
66 lines (65 loc) • 2.8 kB
JavaScript
// @ts-nocheck
import chalk from 'chalk';
import inquirer from 'inquirer';
import { createSpinner } from "nanospinner";
import SearchList from 'inquirer-search-list';
import { sleep } from '../utils.js';
inquirer.registerPrompt('search-list', SearchList); // Registering 'SearchList' prompt type with inquirer
// Function to pay fees for a student
const payFees = async (students) => {
// Check if there are no students
if (students.length === 0) {
console.log(chalk.magentaBright('There are no candidates'));
return students;
}
// Prepare choices for selecting a student (concatenating roll number and name)
const studentsName = students.map(student => `${student.rollNo} ${student.name}`);
console.log('');
// Prompt the user to select a student to pay fees and confirm the action
const { student, confirm } = await inquirer.prompt([
{
message: "Enter student name or roll no:",
name: "student",
type: "search-list",
choices: studentsName,
},
{
message: 'Are you sure want to pay fees?',
name: 'confirm',
type: 'confirm',
default: true,
}
]);
// Extract the roll number from the selected student
const rollNo = student.slice(0, 5);
// Start spinner animation for processing the fee payment
const spinner = createSpinner(chalk.yellowBright("Paying fees...")).start();
await sleep(); // Simulate processing time
// If user cancels, display error message and return
if (!confirm) {
spinner.error({ text: chalk.redBright('Something went wrong') });
return students;
}
// Update student data based on fee payment status
const updatedStudents = students.filter(student => {
if (!rollNo === student.rollNo) {
return student; // If roll no doesn't match return
}
if (student.isPaid) {
spinner.warn({ text: chalk.yellowBright('You have already paid your fees') });
return student; // If fees is already paid return
}
if (student.balance < student.fees) {
spinner.error({ text: chalk.redBright('Insufficient balance') });
return student; // If balance is less than fees return
}
// Pay fees and update balance
student.balance -= student.fees;
student.isPaid = true;
// Display success message for fees paid
spinner.success({ text: chalk.greenBright(`Student with Roll No: ${student.rollNo} and Name: ${student.name} has been successfully paid their fees. Remaining balance: ${student.balance}`) });
return student;
});
return updatedStudents; // Return the updated student list
};
export default payFees;