1+ const { chromium } = require ( "playwright" ) ;
2+ const nodemailer = require ( "nodemailer" ) ;
3+ const PDFDocument = require ( 'pdfkit' ) ;
4+
5+ const fs = require ( 'fs' ) ;
6+ const path = require ( 'path' ) ;
7+
8+ var htmlTemplate = path . join ( __dirname , 'template/index.html' ) ;
9+ var htmlToSend = fs . readFileSync ( htmlTemplate , 'utf8' ) . toString ( ) ;
10+
11+ module . exports = {
12+
13+ getAllResults : async ( students , exam_id ) => {
14+ let browser = await chromium . launch ( ) ;
15+ let page = await browser . newPage ( ) ;
16+
17+ await page . setViewportSize ( { width : 1000 , height : 850 } ) ;
18+ await page . goto ( "https://pareeksha.mgu.ac.in/Pareeksha/index.php/Public/PareekshaResultView_ctrl/index/3" ) ;
19+ // await page.goto("https://dsdc.mgu.ac.in/exQpMgmt/index.php/public/ResultView_ctrl/");
20+ await page . selectOption ( 'select#exam_id' , exam_id ) ;
21+
22+ console . log ( "\nStarting to take screenshots...\n" ) ;
23+
24+ for ( let i = 0 ; i < students . length ; i ++ ) {
25+
26+ await page . fill ( '#prn' , students [ i ] . prn ) ;
27+ await page . click ( 'button#btnresult' ) ;
28+
29+ await page . waitForSelector ( 'div#mgu_btech_contentholder table:nth-child(3)' , { visible : true } ) ;
30+ await page . screenshot ( {
31+ path : `results/${ students [ i ] . prn } .png` ,
32+ } ) ;
33+ console . log ( `Screenshot taken for ${ students [ i ] . name } ` ) ;
34+ }
35+
36+ await browser . close ( ) ;
37+ console . log ( "\nAll screenshots taken!\n" ) ;
38+ } ,
39+
40+
41+ generatePDFs : async ( students ) => {
42+ console . log ( "\nStarting to generate PDFs...\n" ) ;
43+ for ( let i = 0 ; i < students . length ; i ++ ) {
44+
45+ try {
46+ var password = module . exports . generateCustomPassword ( students [ i ] ) ;
47+ var doc = new PDFDocument ( {
48+ margin : 0 ,
49+ size : [ 850 , 850 ] ,
50+ info : {
51+ Title : 'MCA 3rd Semester Results' ,
52+ Author : 'Arjun Krishna' ,
53+
54+ } ,
55+ userPassword : password ,
56+ } ) ;
57+
58+ var stream = fs . createWriteStream ( `secure/${ students [ i ] . prn } .pdf` ) ;
59+ doc . pipe ( stream ) ;
60+ doc . image ( `results/${ students [ i ] . prn } .png` , 0 , 20 , { width : 850 , height : 850 } ) ;
61+ doc . end ( ) ;
62+ } catch ( error ) {
63+ console . log ( error ) ;
64+ }
65+
66+ console . log ( `PDF generated for ${ students [ i ] . name } ` ) ;
67+ }
68+ console . log ( "\nAll PDFs generated!\n" ) ;
69+ } ,
70+
71+
72+ sendOutEmails : async ( students ) => {
73+ console . log ( "\nStarting to send out emails...\n" ) ;
74+ for ( let i = 0 ; i < students . length ; i ++ ) {
75+ await module . exports . sendEmail ( {
76+ recipient : students [ i ] . email ,
77+ prn : students [ i ] . prn
78+ } ) ;
79+ console . log ( `\nEmail sent to ${ students [ i ] . name } \n` ) ;
80+ }
81+ console . log ( "\nAll emails sent!\n" ) ;
82+ } ,
83+
84+
85+ sendEmail : async ( details ) => {
86+
87+ var transporter = nodemailer . createTransport ( {
88+ service : 'gmail' ,
89+ auth : {
90+ user : process . env . EMAIL_USER ,
91+ pass : process . env . EMAIL_PASS
92+ }
93+ } ) ;
94+
95+ var mailOptions = {
96+ from : `"Result Notification" <${ process . env . EMAIL_USER } >` ,
97+ to : details . recipient ,
98+ subject : 'MCA 3rd Semester Results | Secure PDF Attached' ,
99+ html : htmlToSend ,
100+ attachments : [
101+ {
102+ filename : `${ details . prn } .pdf` ,
103+ path : `secure/${ details . prn } .pdf` ,
104+ contentType : 'application/pdf'
105+ }
106+ ] ,
107+ headers : { 'x-myheader' : 'test header' }
108+ } ;
109+
110+ transporter . sendMail ( mailOptions , ( error , info ) => {
111+ if ( error ) {
112+ console . log ( error ) ;
113+ } else {
114+ console . log ( 'Email sent: ' + info . response ) ;
115+ }
116+ } ) ;
117+
118+ } ,
119+
120+
121+ generateCustomPassword : ( details ) => {
122+ var name = details . name ;
123+ var birthdate = details . dob ;
124+ var password = name . substring ( 0 , 4 ) . toUpperCase ( ) + birthdate . substring ( 8 , 10 ) + birthdate . substring ( 5 , 7 ) ;
125+ return password ;
126+ }
127+
128+ } ;
0 commit comments