#! /usr/bin/perl # Copyright 2001-2007 Leslie Richardson # This file is part of Open Admin for Schools. # Open Admin for Schools is free software; you can redistribute it # and/or modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. my %lex = ('Report' => 'Report', 'Main' => 'Main', 'Transcript' => 'Transcript', 'Edit Transcripts' => 'Edit Transcripts', 'Transcripts Report' => 'Transcripts Report', 'Transcripts' => 'Transcripts', 'Transcript of Marks' => 'Transcript of Marks', 'No Quality Score for' => 'No Quality Score for', 'Report Card' => 'Report Card', 'Term' => 'Term', 'Credits Earned' => 'Credits Earned', 'Credits Attempted' => 'Credits Attempted', 'Reqd' => 'Reqd', 'Earned' => 'Earned', 'Total' => 'Total', 'Approved by' => 'Approved by', 'Transcript is official when sealed' => 'Transcript is official when sealed', 'Phone' => 'Phone', 'Fax' => 'Fax', 'Requirements Complete' => 'Requirements Complete', 'Printed' => 'Printed', 'No Records Found' => 'No Records Found', 'No Records Selected' => 'No Records Selected', 'Entry Error' => 'Entry Error', 'No Student(s) Found' => 'No Student(s) Found', 'Graduation~Requirements' => 'Graduation~Requirements', 'Semester GPA' => 'Semester GPA', 'Cum GPA' => 'Cum GPA', 'Diploma Awarded on' => 'Diploma Awarded on', 'View/Download' => 'View/Download', 'View Log File' => 'View Log File', 'Year End Attendance' => 'Year End Attendance', 'Grade' => 'Grade', 'Homeroom' => 'Homeroom', 'DOB' => 'DOB', 'Lastname/Lastname,Firstname/Initials/StudentNumber' => 'Lastname/Lastname,Firstname/Initials/StudentNumber', 'Select Student' => 'Select Student', 'Select Group' => 'Select Group', 'Continue' => 'Continue', 'Code' => 'Code', 'Subject' => 'Subject', 'Credit' => 'Credit', 'Credits' => 'Credits', 'Mark' => 'Mark', 'GPA' => 'GPA', 'Area' => 'Area', ); my $self = 'rpttranscript.pl'; #my $failletter = 'F'; # Failing Letter... no credit for course. # my $passletter = 'P'; use DBI; use CGI; my @month = ('January','February','March','April','May','June','July', 'August','September','October','November','December'); my @dow = ('Sunday','Monday','Tuesday','Wednesday','Thursday', 'Friday','Saturday'); my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $iddst) = localtime(time); $year = $year + 1900; my $currdate = "$dow[$wday], $month[$mon] $mday, $year"; # Read config variables require "../../etc/admin.conf" || die "Cannot read admin.conf!"; require "../../etc/transcript.conf" || die "Cannot read transcript.conf!"; my $shortname = "transcript$$"; my $filename = "$shortname.tex"; my $logfile = "pdflog$$.txt"; my $dsn = "DBI:$dbtype:dbname=$dbase"; my $dbh = DBI->connect($dsn,$user,$password); my @month = ('','January','February','March','April','May','June','July', 'August','September','October','November','December'); my $q = new CGI; print $q->header; my %arr = $q->Vars; if (not $arr{startflag} ) { $offset = 2; } elsif ( $arr{startflag} == 1 ) { $offset = 1; } print "$doctype\n". $lex{'Transcript'}. ' '. $lex{Report}. " \n"; print "\n"; print "$chartype\n\n"; print "[ ". $lex{Main}. " |\n"; print "". $lex{'Report Card'}. " ]\n"; print " ". $lex{'Edit Transcripts'}. "\n"; if (not $arr{startflag} ) { showStartPage(); } elsif ( $arr{startflag} == 1 ) { delete $arr{startflag}; processSearch(); } elsif ( $arr{startflag} == 2 ) { delete $arr{startflag}; printTranscriptsHTML(); printTranscriptsPDF(); } #---------------- sub showStartPage { #---------------- # print sortorder and selection input form. print "

". $lex{'Transcripts Report'}. "

\n"; print "
\n"; print "\n"; print "
"; print $lex{'Lastname/Lastname,Firstname/Initials/StudentNumber'}. "
\n"; print "\n"; print "
\n"; print "
"; print "\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; exit; } #---------------- sub processSearch { #---------------- # Passed: student, group, select #foreach my $key (keys %arr ) { print "K:$key V:$arr{$key}
\n"; } my @students; if ( $arr{student} ) { # We are looking for a single student... my $student = $arr{student}; # Setup the Search if ($student =~ /\d+/) { # we have a student number push @students, $student; } else { # we have words hopefully with a comma my ($lastname,$firstname) = split /\,/, $student; $firstname =~ s/^\s*//; $lastname =~ s/^\s*//; if ($lastname and $firstname){ # both entered. $sth = $dbh->prepare("select studnum from tscriptident where lastname = ? and firstname = ?"); $sth->execute( $lastname, $firstname ); } elsif ($lastname and not $firstname){ # only lastname (no comma) if (length($lastname) == 2){ # search by initials: fi, li. my $fi = substr($lastname,0,1). '%'; my $li = substr($lastname,1,1). '%'; $sth = $dbh->prepare("select studnum from tscriptident where lastname $sql{like} ? and firstname $sql{like} ?"); $sth->execute( $li, $fi ); } else { $sth = $dbh->prepare("select studnum from tscriptident where lastname = ? order by firstname"); $sth->execute( $lastname ); } } else { # print an error.... print '

'. $lex{'Entry Error'}. ': '. $lex{'No Student(s) Found'}.".

\n"; print "\n"; exit; } } # Last Else if ( $sth ) { # if text we should have a statement handle (sth) if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; } $rows = $sth->rows; if ($rows < 1) { print '

'. $lex{'No Student(s) Found'}. ".

\n"; print "\n"; exit; } while ( my $studnum = $sth->fetchrow ) { push @students, $studnum; } } } elsif ( $arr{groupvalue} ) { # We have a group selected. my $select; if ( $arr{groupname} eq $lex{Grade} ) { $select = 'where grade = ?'; } elsif ( $arr{groupname} eq $lex{Homeroom} ) { $select = 'where homeroom = ?'; } else { print $lex{'No Records Selected'}; print "\n"; exit; } $sth = $dbh->prepare("select studnum from tscriptident $select order by lastname, firstname"); $sth->execute( $arr{groupvalue} ); if ($DBI::errstr){ print $DBI::errstr; die $DBI::errstr; } while ( my $studnum = $sth->fetchrow ) { push @students, $studnum; } } if (not @students) { print $lex{'No Records Found'}; print "\n"; exit; } # Now print the next level form... print "
\n"; print "\n"; print "\n"; # display found students, if any... $sth1 = $dbh->prepare("select lastname, firstname from tscriptident where studnum = ?"); my $checked; if ( $arr{groupvalue} ) { # check group by default only. $checked = 'checked'; } foreach my $studnum (@students) { $sth1->execute($studnum); my ($lastname, $firstname) = $sth1->fetchrow; print ""; print ""; print ""; print "\n"; } print "\n"; print "\n"; exit; } #----------------------- sub printTranscriptsHTML { #----------------------- #foreach my $key (keys %arr ) { print "K:$key V:$arr{$key}
\n"; } if ( not %arr ){ print '

'. $lex{'No Records Found'}. ".

\n"; print "\n"; halt; } my $sth = $dbh->prepare("select id, subjectcode, subjecttext, subjectarea, score_mark, score_letter, score_diff, schoolyear, credit, term, term_desc from tscriptdata where studnum = ? order by schoolyear, term, subjecttext"); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } my $sth1 = $dbh->prepare("select lastname, firstname, birthdate from tscriptident where studnum = ?"); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } # Main Loop - once for each student. foreach my $studnum ( keys %arr ) { my ($totalCredits, $totalGPQuality, $totalGPCredits); # totalCredits include Pass/Fail Subjects # process transcript data $sth->execute( $studnum ); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } # Fetch Student's Info $sth1->execute( $studnum ); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } my ($lastname, $firstname, $birthdate) = $sth1->fetchrow; print "

$firstname $lastname ($studnum) - $birthdate

\n"; my $currdesc = -1; my $prevdesc; # Outer Table print "
$firstname $lastname ($studnum)
\n"; print "\n\n"; } else { print "\n\n"; } print "
\n"; # Inner Table print "\n"; print "\n"; my $first = 1; my $colcounter = 1; my ( $semesterGPCredits, $semesterGPQuality, $semesterAttempts, $semesterCredits ); # Loop through all transcript records. while ( my ( $id, $subjectcode, $subjecttext, $subjectarea, $score_mark, $score_letter, $score_diff, $schoolyear, $credit, $term, $term_desc ) = $sth->fetchrow ) { $prevdesc = $currdesc; $currdesc = $term_desc; if ( $currdesc ne $prevdesc ) { if (not $first ) { my ($gpa, $cumgpa); if ($semesterGPCredits) { $gpa = sprintf("%4.4f", $semesterGPQuality / $semesterGPCredits ); } else { $gpa = 0; } if ( $totalGPCredits ) { $cumgpa = sprintf("%4.4f", $totalGPQuality / $totalGPCredits ); } else { $cumgpa = 0; } my $gpa = sprintf("%4.4f", $gpa ); my $cumgpa = sprintf("%4.4f", $cumgpa ); print ""; print "\n"; $semesterAttempts = sprintf("%3.2f", $semesterAttempts); # attempted $semesterCredits = sprintf("%3.2f", $semesterCredits); # earned print ""; print "\n"; print "
". $lex{Code}. "". $lex{Subject}. "". $lex{Area}; print "". $lex{Credit}. "". $lex{Grade}. "
". $lex{'Semester GPA'}. ": $gpa\n"; print $lex{'Cum GPA'}. ": $cumgpa
". $lex{'Credits Attempted'}. " $semesterAttempts\n"; print $lex{'Credits Earned'}. " $semesterCredits
\n"; if ( $colcounter % 2 ) { print "\n\n
\n"; # new cell... } else { print "\n\n
\n"; # new row } $colcounter++; $semesterGPQuality = 0; $semesterGPCredits = 0; $semesterCredits = 0; $semesterAttempts = 0; print "\n"; print "\n"; } else { $first = 0; } print "
"; print "$schoolyear - ". $lex{Term}. " $term - $currdesc
\n"; } my $quality; # letterToQual hash in transcript.conf; add up quality scores and credit counts. # Check for missing Quality value in transcript.conf if ( ( not defined $letterToQual{ $score_letter } ) and ($score_letter ne $passletter ) ) { # Any unknown characters have _no_ effect; such as W/P, W/F (Withdraw Pass/Withdraw Fail) #print $lex{'No Quality Score for'}. " $score_letter
\n"; $credit = 0; } else { # calc stuff... $quality = $letterToQual{ $score_letter } + $score_diff; $semesterGPQuality += $quality * $credit; $totalGPQuality += $quality * $credit; $semesterAttempts += $credit; if ( $score_letter ne $failletter ) { $semesterCredits += $credit; $totalCredits += $credit; # If not a fail and also not a pass/fail course if ( $score_letter ne $passletter ) { $totalGPCredits += $credit; $semesterGPCredits += $credit; } } } $credit = sprintf("%3.2f", $credit); print ""; print "\n"; } # Print the last GPA value... if (not $first ) { my ($gpa, $cumgpa); if ($semesterGPCredits) { $gpa = sprintf("%4.4f", $semesterGPQuality / $semesterGPCredits ); } else { $gpa = 0; } if ( $totalGPCredits ) { $cumgpa = sprintf("%4.4f", $totalGPQuality / $totalGPCredits ); } else { $cumgpa = 0; } $gpa = sprintf("%3.2f", $gpa ); $cumgpa = sprintf("%3.2f", $cumgpa ); print ""; print "\n"; $semesterAttempts = sprintf("%3.2f", $semesterAttempts); # attempted $semesterCredits = sprintf("%3.2f", $semesterCredits); # earned print ""; print "\n"; $semesterGPQuality = 0; $semesterGPCredits = 0; $semesterCredits = 0; $semesterAttempts = 0; } print "
". $lex{Code}. "". $lex{Subject}. "". $lex{Area}. ""; print $lex{Credit}. "". $lex{Grade}. "
$subjectcode$subjecttext$subjectarea$credit$score_letter ($quality)
". $lex{'Semester GPA'}. ": $gpa\n"; print $lex{'Cum GPA'}. ": $cumgpa
". $lex{'Credits Attempted'}. " $semesterAttempts\n"; print $lex{'Credits Earned'}. " $semesterCredits
\n"; # finish off last inner table. # Finish off outer table. print "\n"; if ( $colcounter % 2 ) { print "\n
\n"; } # End of Main Student Loop print "

\n"; } #-------------- sub prTexHeader { #-------------- print TEX "\\documentclass[10pt,letterpaper]{article}\n"; print TEX "\\usepackage{ array, colortbl, multicol, helvet, pifont, fancyhdr}\n"; print TEX "\\setlength{\\textwidth}{8in}\n \\setlength{\\textheight}{10in}\n"; print TEX "\\setlength{\\hoffset}{-0.7in}\n\\setlength{\\voffset}{-1.5in}\n"; print TEX "\\setlength{\\evensidemargin}{0in}\n\\setlength{\\oddsidemargin}{0in}\n"; #print TEX "\\setlength{\\extrarowheight}{2pt}\n print TEX "\\setlength{\\parindent}{0pt}\n"; print TEX "\\renewcommand{\\familydefault}{\\sfdefault}\n"; print TEX "\\pagestyle{fancy}\n \\rfoot{". $lex{Printed}. ": $currdate }\n"; print TEX "\\cfoot{ }\n"; print TEX "\\begin{document}\n"; } #---------------------- sub printTranscriptsPDF { #---------------------- #foreach my $key (keys %arr ) { print "K:$key V:$arr{$key}
\n"; } my $pagecount = 1; if ( not %arr ){ print '

'. $lex{'No Records Found'}. ".

\n"; print "\n"; halt; } # Setup Tex File open(TEX,">$filename") || die "Cannot open tex file"; prTexHeader(); # print TeX file header defaults. # Setup selects for transcript data and student name my $sth = $dbh->prepare("select id, subjectcode, subjecttext, score_mark, score_letter, score_diff, schoolyear, credit, term, term_desc from tscriptdata where studnum = ? order by schoolyear, term, subjecttext"); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } # Get Student Name my $sth1 = $dbh->prepare("select lastname, firstname, middlename, birthdate from tscriptident where studnum = ?"); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } # Main Loop - once for each student. foreach my $studnum ( keys %arr ) { my ($totalCredits, $totalGPQuality, $totalGPCredits); # totalCredits include Pass/Fail Subjects # process transcript data $sth->execute( $studnum ); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } # Fetch Student's Info $sth1->execute($studnum); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } my ( $lastname, $firstname, $middlename, $birthdate ) = $sth1->fetchrow; if ( $pagecount != 1 ) { # start a new page. print TEX "\\newpage\n"; } # Print School Info print TEX "{\\Large $schoolname} \\hfill {\\Large "; print TEX $lex{'Transcript of Marks'}. "} \\hfill ". $lex{Phone}. " $schoolphone \n\n"; print TEX "$schooladdr1 $schooladdr2 $schoolcity, $schoolprov \\hfill ". $lex{Fax}. " $schoolfax \n\n"; print TEX "\n\\bigskip\n\n"; # Print Student Info print TEX "{\\Large\\bf $firstname $lastname} "; #($studnum) "; print TEX "{\\quad\\it ". $lex{DOB}. ":} $birthdate \n\n"; print TEX "\\begin{tabular}[t]{|p{2.75in}|p{2.75in}|}\\hline\n"; my $currdesc = -1; my $prevdesc; my $first = 1; my $colcounter = 1; my $colorcounter = 1; my ( $semesterGPCredits, $semesterGPQuality, $semesterAttempts, $semesterCredits ); # Loop through all transcript records. while ( my ( $id, $subjectcode, $subjecttext, $score_mark, $score_letter, $score_diff, $schoolyear, $credit, $term, $term_desc ) = $sth->fetchrow ) { $subjecttext =~ s/&/\\&/g; $subjecttext =~ s/#/\\#/g; $prevdesc = $currdesc; $currdesc = $term_desc; if ( $currdesc ne $prevdesc ) { if ( not $first ) { my ($gpa, $cumgpa); if ($semesterGPCredits) { $gpa = sprintf("%4.4f", $semesterGPQuality / $semesterGPCredits ); } else { $gpa = 0; } if ( $totalGPCredits ) { $cumgpa = sprintf("%4.4f", $totalGPQuality / $totalGPCredits ); } else { $cumgpa = 0; } $gpa = sprintf("%3.2f", $gpa ); $cumgpa = sprintf("%3.2f", $cumgpa ); print TEX " \\multicolumn{4}{\@{}l}{\\rule{0pt}{12pt}\\it\\small "; print TEX $lex{'Semester GPA'}. ": {\\bf $gpa} \\quad "; print TEX $lex{'Cum GPA'}. ": {\\bf $cumgpa}}\\\\\n"; $semesterAttempts = sprintf("%3.2f", $semesterAttempts); # attempted $semesterCredits = sprintf("%3.2f", $semesterCredits); # earned print TEX " \\multicolumn{4}{\@{}l}{\\it\\small ". $lex{'Credits Attempted'}; print TEX ": {\\bf $semesterAttempts} \\quad "; print TEX $lex{'Credits Earned'}. ": {\\bf $semesterCredits} }\\\\\n"; $semesterGPQuality = 0; $semesterGPCredits = 0; $semesterCredits = 0; $semesterAttempts = 0; print TEX "\\end{tabular}\n"; if ( $colcounter % 2 ) { print TEX " & \n"; } else { print TEX " \\\\ \\hline\n"; } $colcounter++; $colorcounter = 1; } else { $first = 0; } # first 2 columns layout. print TEX "\\begin{tabular}[t]{\@{\\hspace{1pt}}p{0.60in}\@{\\hspace{1pt}}p{1.45in}"; # last 2 columns print TEX "\@{\\hspace{1pt}}p{0.35in}\@{\\hspace{1pt}}p{0.20in}}\n"; print TEX "\\multicolumn{4}{l}{\\rule{0pt}{12pt}\\bf $schoolyear - $currdesc}\\\\\n"; print TEX "\\multicolumn{4}{\@{}l}{\\it\\small\ " . $lex{Code}. " \\hspace{0.5in} ". $lex{Subject}; print TEX " \\hspace{0.7in} ". $lex{Credit}. " ". $lex{Grade}. "}\\\\ \n"; } # letterToQual hash in transcript.conf; add up quality scores and credit counts. # Check for missing Quality value in transcript.conf if (not defined $letterToQual{ $score_letter } and $score_letter ne $passletter ) { # Any unknown letter scores have _no_effect; W/P - Withdraw Pass / Withdraw Fail #print $lex{'No Quality Score for'}. " $score_letter
\n"; $credit = 0; } else { my $quality = $letterToQual{ $score_letter } + $score_diff; # score difficulty; from record. $semesterGPQuality += $quality * $credit; $totalGPQuality += $quality * $credit; $semesterAttempts += $credit; if ( $score_letter ne $failletter ) { $semesterCredits += $credit; $totalCredits += $credit; # If not a fail and also not a pass/fail course if ( $score_letter ne $passletter ) { $totalGPCredits += $credit; $semesterGPCredits += $credit; } } } $credit = sprintf("%3.2f", $credit); if ($colorcounter % 2) { print TEX "\\rowcolor[gray]{0.93}\n"; } $colorcounter ++; print TEX "\\small $subjectcode& \\raggedright\\small $subjecttext & "; print TEX "\\small $credit & \\small $score_letter \\\\ \n"; } # Print the last GPA value... if (not $first ) { my ($gpa, $cumgpa); if ($semesterGPCredits) { $gpa = sprintf("%4.4f", $semesterGPQuality / $semesterGPCredits ); } else { $gpa = 0; } if ( $totalGPCredits ) { $cumgpa = sprintf("%4.4f", $totalGPQuality / $totalGPCredits ); } else { $cumgpa = 0; } $gpa = sprintf("%3.2f", $gpa ); $cumgpa = sprintf("%3.2f", $cumgpa ); print TEX " \\multicolumn{4}{\@{}l}{\\rule{0pt}{12pt}\\it\\small "; print TEX $lex{'Semester GPA'}. ": {\\bf $gpa} \\quad "; print TEX $lex{'Cum GPA'}. ": {\\bf $cumgpa}}\\\\\n"; $semesterAttempts = sprintf("%3.2f", $semesterAttempts); # attempted $semesterCredits = sprintf("%3.2f", $semesterCredits); # earned print TEX " \\multicolumn{4}{\@{}l}{\\it\\small ". $lex{'Credits Attempted'}; print TEX ": {\\bf $semesterAttempts} \\quad "; print TEX $lex{'Credits Earned'}. ": {\\bf $semesterCredits} }\\\\\n"; print TEX "\\end{tabular}\n"; $semesterGPQuality = 0; $semesterGPCredits = 0; $semesterCredits = 0; $semesterAttempts = 0; } if ($colcounter % 2) { print TEX " & \n"; } print TEX "\\\\ \\hline\\end{tabular}\n"; print TEX "\\raggedbottom\\parbox[t]{2in}{\\vspace{0.3in}{\\bf\\small\\quad "; print TEX $lex{'Graduation~Requirements'}. "\n\n"; print TEX "\\begin{tabular}{r\@{ \\hspace{4pt} }r\@{ \\hspace{4pt} }r\@{ \\hspace{2pt} }l}\n"; print TEX "\\it\\bf\\small ". $lex{'Subject'}. q{ }. $lex{'Area'}. "& \\it\\bf\\small "; print TEX $lex{Reqd}. "& \\it\\bf\\small ". $lex{Earned}. "& \\\\ \\hline \n"; my $requiredTotal; my $earnedTotal; my $sth4 = $dbh->prepare("select id, score_letter, credit from tscriptdata where studnum = ? and subjectarea = ?"); foreach my $key (sort keys %gradRequirements ) { if ( $gradRequirements{$key} ) { # Any 0 credit elective is supressed... # Find courses for this subject area. $sth4->execute($studnum, $key); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } my $creditTotal = 0; # total credits for this area. while (my ( $id, $scoreletter, $credit ) = $sth4->fetchrow ) { if ( $scoreletter ne $failletter ) { $creditTotal += $credit; } } $earnedTotal += $creditTotal; $requiredTotal += $gradRequirements{$key}; print TEX "\\it\\small $key & \\it\\small ". sprintf( "%3.2f", $gradRequirements{$key} ); print TEX "&\\it\\small ". sprintf("%3.2f",$creditTotal); if ( $creditTotal >= $gradRequirements{$key} ) { print TEX "& \\ding{52} "; } else { print TEX "& "; } print TEX "\\\\ \n\n"; } } print TEX "\\hline\n"; # put in line separator between these 2 sections. # Now do the zero credit versions... normally only 'Other'. foreach my $key (sort keys %gradRequirements ) { if (not $gradRequirements{$key} ) { # Any 0 credit elective # Find courses for this subject area. $sth4->execute($studnum, $key); if ($DBI::errstr) { print $DBI::errstr; die $DBI::errstr; } my $creditTotal = 0; # total credits for this area. while (my ( $id, $scoreletter, $credit ) = $sth4->fetchrow ) { if ( $scoreletter ne $failletter ) { $creditTotal += $credit; } } $earnedTotal += $creditTotal; $requiredTotal += $gradRequirements{$key}; print TEX "\\it\\small $key & \\it\\small ". sprintf( "%3.2f", $gradRequirements{$key} ); print TEX "&\\it\\small ". sprintf("%3.2f",$creditTotal). " \\\\ \n\n"; # print TEX "\\it\\small $key & \\it\\small ". sprintf( "%3.2f", $gradRequirements{$key} ); # print TEX "&\\it\\small \\\\ \n\n"; } } print TEX "\\hline\n"; print TEX "\\it\\scriptsize ". $lex{Total}. "& \\it\\scriptsize ". sprintf("%3.2f", $requiredTotal); print TEX "&\\it\\scriptsize ". sprintf("%3.2f", $earnedTotal). " \\\\ \n\n"; print TEX "\\end{tabular}} \n\n"; print TEX "\\begin{center}\\it\\footnotesize \\ding{52} = ". $lex{'Requirements Complete'}. "\n\n"; print TEX "{\\tiny $section1}\n"; print TEX "\\end{center}\n"; print TEX "\\vspace{0.5in}\n"; print TEX "\\quad\\underline{\\hspace{2in}}\n\n"; print TEX "\\quad\\small ". $lex{'Diploma Awarded on'}. "\n\n"; print TEX "\\vspace{0.3in}\n"; print TEX "\\quad\\underline{\\hspace{2in}}\n\n\\quad\\small ". $lex{'Approved by'}. "\n\n"; print TEX "\\vspace{0.5in} ". $lex{'Transcript is official when sealed'}. "\n\n"; print TEX "}\n"; # end of the right side... $pagecount++; } # End of Main Student Loop print TEX "\\end{document}\n"; close TEX; system("$pdflatex $filename >$logfile"); system("mv $shortname.pdf $downloaddir"); system("mv $logfile $downloaddir"); system("rm -f $shortname.*"); print "

\n"; print $lex{'View/Download'}. ' '. $lex{'Transcripts'}; print "

\n[ ". $lex{Main}. " |\n"; print "". $lex{'View Log File'}; print " ]"; print "\n"; exit; }