This commit is contained in:
Harshitha Shetty
2025-01-27 01:31:20 +05:30
parent eb802a23a5
commit 81be9c352d
2 changed files with 131 additions and 82 deletions

View File

@@ -54,87 +54,136 @@ const CourseConsolidated = () => {
if (currentPage > 1) setCurrentPage((prevPage) => prevPage - 1);
};
const generateAppointmentPDF = (courseData, courseName) => {
console.log(courseData);
const doc = new jsPDF();
// Add Title
doc.setFontSize(16);
doc.text(`${courseName} - Appointment Order`, 105, 10, { align: "center" });
// Add the table for names and roles (Using courseData for this)
const table1Data = [
...(courseData.oralPracticalTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya Institute of Technology",
"Assessment Role",
"Contact Number",
]) || []),
...(courseData.reassessmentTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya Institute of Technology",
"Reassessment Role",
"Contact Number",
]) || []),
...(courseData.paperSettingTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya Institute of Technology",
"Paper Setter",
"Contact Number",
]) || []),
...(courseData.moderationTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya Institute of Technology",
"Moderator",
"Contact Number",
]) || []),
...(courseData.pwdPaperSettingTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya Institute of Technology",
"PwD Paper Setter",
"Contact Number",
]) || []),
];
autoTable(doc, {
head: [["Name", "Affiliation", "Appointment Role", "Contact No."]],
body: table1Data,
startY: 20,
theme: "grid",
});
// Add the descriptive paragraph
const text = `Dear all,\n\nYou have been appointed to jointly act as Paper Setters as mentioned against your name for the following Examination to be held at K. J. Somaiya Institute of Technology, Sion, Mumbai:`;
doc.setFontSize(12);
doc.text(text, 10, doc.previousAutoTable.finalY + 10);
// Add the exam details table using `courseData`
const table2Data = [
["Programme:", courseData.courseName],
["Exam Category:", "Regular Examination"],
["Exam Type:", courseData.examType],
["Exam Season:", "Second Half - Winter Examination 2023"],
["Number of Sets Required:", courseData.paperSettingTeachers.length],
["Year:", courseData.year],
["Semester:", courseData.semester],
["Course Name:", courseName],
["Course Code:", courseData.courseCode],
];
autoTable(doc, {
body: table2Data,
startY: doc.previousAutoTable.finalY + 30,
theme: "plain",
styles: { lineColor: [0, 0, 0], lineWidth: 0.1 },
});
// Save the PDF
doc.save(`${courseName} - AppointmentOrder.pdf`);
};
const generateAppointmentPDF = async (courseData, courseName) => {
const doc = new jsPDF();
const maroon = [128, 0, 0];
// College Logo
const logoUrl = "/logo.png"; // Ensure the logo is placed in the public folder
const logoWidth = 40;
const logoHeight = 40;
const logoX = 10;
const logoY = 10;
const loadImage = async (url) => {
const response = await fetch(url);
const blob = await response.blob();
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => resolve(reader.result);
reader.onerror = (error) => reject(error);
reader.readAsDataURL(blob);
});
};
try {
const logoBase64 = await loadImage(logoUrl);
doc.addImage(logoBase64, "PNG", logoX, logoY, logoWidth, logoHeight);
} catch (error) {
console.error("Failed to load logo:", error);
}
// Title Section
doc.setFont("times", "normal");
doc.setTextColor(0, 0, 0);
doc.setFontSize(12);
doc.text("Date: " + new Date().toLocaleDateString(), 150, 20);
doc.setFontSize(14);
doc.text("CONFIDENTIAL", 10, 60);
doc.setFontSize(16);
doc.text(
"LETTER OF APPOINTMENT AS QUESTION PAPER SETTER",
105,
70,
{ align: "center" }
);
// Appointment Table
const table1Data = [
...(courseData.oralPracticalTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya School of Engineering",
"Oral/Practical Teacher",
"Contact Number",
]) || []),
...(courseData.reassessmentTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya School of Engineering",
"Reassessment Teacher",
"Contact Number",
]) || []),
...(courseData.paperSettingTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya School of Engineering",
"Paper Setter",
"Contact Number",
]) || []),
...(courseData.moderationTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya School of Engineering",
"Moderator",
"Contact Number",
]) || []),
...(courseData.pwdPaperSettingTeachers?.map((teacher) => [
teacher,
"K. J. Somaiya School of Engineering",
"PwD Paper Setter",
"Contact Number",
]) || []),
];
autoTable(doc, {
head: [["Name", "Affiliation", "Appointment Role", "Email"]],
body: table1Data,
startY: 80,
theme: "grid",
headStyles: { fillColor: maroon, textColor: [255, 255, 255] },
styles: { textColor: [0, 0, 0] }, // Keep body text black
});
// Content Table
const detailsTableData = [
["Programme:", courseData.courseName],
["Exam Category:", "Regular Examination"],
["Exam Type:", courseData.examType],
["Exam Season:", "Second Half - Winter Examination 2023"],
["Number of Sets Required:", courseData.paperSettingTeachers.length],
["Year:", courseData.year],
["Semester:", courseData.semester],
["Course Name:", courseName],
["Course Code:", courseData.courseCode],
];
autoTable(doc, {
body: detailsTableData,
startY: doc.previousAutoTable.finalY + 10,
theme: "plain", // Plain table style
styles: { textColor: [0, 0, 0] },
});
// Footer Section
const footerY = doc.previousAutoTable.finalY + 10; // Dynamic Y-coordinate
doc.setFontSize(12);
doc.text("Dr. S. K. Ukarande", 10, footerY);
doc.text("Principal", 10, footerY + 5);
doc.text("K. J. Somaiya School of Engineering", 10, footerY + 10);
// Footer Contact Details
const footerContactY = footerY + 20;
doc.setFontSize(10);
doc.text(
"Somaiya Vidyavihar, Vidyavihar (East), Mumbai-400 022, India",
10,
footerContactY
);
doc.text("Telephone: (91-22) 44444400, 44444404", 10, footerContactY + 5);
doc.text("Email: principal.tech@somaiya.edu", 10, footerContactY + 10);
doc.text("Web: www.somaiya.edu/kjsieit", 10, footerContactY + 15);
// Save PDF
doc.save(`${courseName} - AppointmentOrder.pdf`);
};
return (
<div>
@@ -187,7 +236,7 @@ const CourseConsolidated = () => {
textDecoration: "none",
borderRadius: "5px",
}}
>
>
Download {courseName}'s Appointment Order
</button>
</div>