set scan off set echo on -- Created for Loyola Marymount University -- By Robert M. Nitsos -- 26-AUG-2002 -- -- This package creates a Banner Web page that displays Class Roster information in the -- Faculty Module. The is also alble to download the information into an Excel spreadsheet -- (tab-delimited file). -- create or replace package lmuhwskclst is procedure LMUClassRoster (term IN STVTERM.STVTERM_CODE%TYPE DEFAULT NULL, crn in sfrstcr.sfrstcr_crn%type default null, subj in ssbsect.ssbsect_subj_code%type default null, crs in ssbsect.ssbsect_crse_numb%type default null, sec in ssbsect.ssbsect_seq_numb%type default null, firsttime in varchar2 default 'Y', error_mess in varchar2 default null); procedure LMUDownloadCList (term in stvterm.stvterm_code%type default null, crn in sfrstcr.sfrstcr_crn%type default null); END lmuhwskclst; / show errors CREATE OR REPLACE PACKAGE BODY lmuhwskclst AS /* Global type and variable declarations for package */ pidm spriden.spriden_pidm%TYPE; row_count NUMBER; /****************************** LMU Show Class Counts ***********************/ procedure LMUClassRoster (term IN STVTERM.STVTERM_CODE%TYPE DEFAULT NULL, crn in sfrstcr.sfrstcr_crn%type default null, subj in ssbsect.ssbsect_subj_code%type default null, crs in ssbsect.ssbsect_crse_numb%type default null, sec in ssbsect.ssbsect_seq_numb%type default null, firsttime in varchar2 default 'Y', error_mess in varchar2 default null) is curr_release varchar2(10) := '4.4'; hold_term stvterm.stvterm_code%TYPE; hold_crn sfrstcr.sfrstcr_crn%TYPE; confid_msg varchar2(30) default null; msg varchar2(255); curSUBJ ssbsect.ssbsect_subj_code%type default null; curCRS ssbsect.ssbsect_crse_numb%type default null; curSEC ssbsect.ssbsect_seq_numb%type default null; strSUBJ ssbsect.ssbsect_subj_code%type default null; strCRS ssbsect.ssbsect_crse_numb%type default null; strSEC ssbsect.ssbsect_seq_numb%type default null; strTITLE scbcrse.scbcrse_title%type default null; strCourseInfo varchar2(120); rcount number; /* Get Subject Codes for Drop-Down List */ cursor subjinfo is select distinct ssbsect_subj_code subj, stvsubj_desc subject from ssbsect, stvsubj where ssbsect_term_code = hold_term and ssbsect_ssts_code <> 'C' and ssbsect_subj_code = stvsubj_code(+) order by subject; /* Get Student Information for Course */ cursor student_list is select distinct spriden_id id, decode(nvl(spbpers_confid_ind, 'N'), 'Y', '***CONFIDENTIAL***', null) confid, spriden_last_name||', '||spriden_first_name||' '||spriden_mi name, a.sgbstdn_levl_code levl, stvlevl_desc s_level, a.sgbstdn_majr_code_1 majr1, stvmajr_desc major1, f_class_calc_fnc(a.sgbstdn_pidm, a.sgbstdn_levl_code, hold_term) class, sfrstcr_credit_hr cr_hr, sfrstcr_rsts_code rsts, stvrsts_desc reg_status, sfrstcr_rsts_date rsts_date, sfrstcr_reg_seq reg_seq from sfrstcr, stvrsts, spriden, spbpers, sgbstdn a, stvlevl, stvmajr where sfrstcr_term_code = hold_term and sfrstcr_crn = hold_crn and sfrstcr_rsts_code = stvrsts_code and stvrsts_incl_sect_enrl = 'Y' and sfrstcr_pidm = spriden_pidm and spriden_change_ind is null and sfrstcr_pidm = spbpers_pidm and sfrstcr_pidm = a.sgbstdn_pidm and a.sgbstdn_term_code_eff= (select max(b.sgbstdn_term_code_eff) from sgbstdn b where b.sgbstdn_term_code_eff <= sfrstcr_term_code and a.sgbstdn_pidm = b.sgbstdn_pidm) and a.sgbstdn_levl_code = stvlevl_code(+) and a.sgbstdn_majr_code_1 = stvmajr_code(+) order by name; begin IF NOT twgkwbis.F_ValidUser(pidm) THEN return; END IF; /* If you came from the menu, try to select the term from the */ /* general table, gorwprm, by using F_GetParam. */ IF TERM IS NULL THEN hold_term := TWGKWBIS.F_GetParam(pidm,'TERM'); /* otherwise, you came from P_FacSelTerm, and need to write */ /* the param to the gorwprm table and set your local, hold_term */ ELSE TWGKWBIS.P_SetParam(pidm,'TERM',term); hold_term := term; END IF; /* Make sure a term has been selected */ IF hold_term is null THEN hwskostm.P_ADVSelTerm(calling_proc_name=> 'lmuhwskclst.LMUClassRoster'); RETURN; END IF; /* set paramater to indicate we are a faculty user */ twgkwbis.P_SetParam(pidm,'STUFAC_IND','FAC'); /* If the user is not a valid faculty member for the selected */ /* term, print a message, close the page, and exit. */ IF NOT HWSKILIB.F_ValidFac(hold_term,pidm) THEN twgkwbis.P_OpenDoc('lmuhwskclst.LMUClassRoster',header_text=> '*** Invalid Faculty ID ***'); msg := 'You must be a valid faculty member for the selected term'|| ' to access this page.'; HTP.hr; twgkfrmt.P_PrintImage(twgklibs.twgbwrul_rec.twgbwrul_error_gif); HTP.bold(msg); HTP.para; TWGKWBIS.P_CloseDoc(curr_release); RETURN; END IF; if firsttime <> 'Y' then /* Get CRN */ curSUBJ := ltrim(rtrim(subj)); curCRS := ltrim(rtrim(crs)); curSEC := ltrim(rtrim(sec)); if crn is null then begin select ssbsect_crn into hold_crn from ssbsect where ssbsect_term_code = hold_term and ssbsect_subj_code = curSUBJ and ssbsect_crse_numb = curCRS and ssbsect_seq_numb = curSEC; exception when others then hold_crn := null; end; else hold_crn := crn; end if; if hold_crn is null then rcount := 0; else /* Check to see if there are any records to display */ begin select count(*) into rcount from sfrstcr, stvrsts where sfrstcr_term_code = hold_term and sfrstcr_crn = hold_crn and sfrstcr_rsts_code=stvrsts_code and stvrsts_incl_sect_enrl='Y'; exception when others then rcount := 0; end; end if; if rcount <> 0 then /* Get Course Info */ begin select ssbsect_subj_code, ssbsect_crse_numb, ssbsect_seq_numb, decode(ssbsect_crse_title, '', a.scbcrse_title, ssbsect_crse_title) into strSUBJ, strCRS, strSEC, strTITLE from ssbsect, scbcrse a where ssbsect_term_code = hold_term and ssbsect_crn = hold_crn and ssbsect_subj_code = a.scbcrse_subj_code and ssbsect_crse_numb = a.scbcrse_crse_numb and a.scbcrse_eff_term = (select max(b.scbcrse_eff_term) from scbcrse b where b.scbcrse_eff_term <= ssbsect_term_code and a.scbcrse_subj_code = b.scbcrse_subj_code and a.scbcrse_crse_numb = b.scbcrse_crse_numb); exception when others then strSUBJ := null; strCRS := null; strSEC := null; strTITLE := null; end; if strSUBJ is null then strCourseInfo := 'Unknown Course ('||hold_crn||')'; else strCourseInfo := strSUBJ||' '||strCRS||' '||strSEC||' '||strTITLE||' ('||hold_crn||')'; end if; /* Open Document */ twgkwbis.P_OpenDoc('lmuhwskclst.LMUClassRoster',header_text=>'For: '||strCourseInfo); /* You can enter info text for DEFAULT if you want to display any additional information */ twgkwbis.P_DispInfo('lmuhwskclst.LMUClassRoster','DEFAULT'); /* Display Error Message, If Any */ if error_mess is not null then htp.nl; htp.p('Error: '||error_mess||'
'); end if; htp.nl; /* Create Link to Download Roster */ htp.anchor(twgklibs.twgbwrul_rec.twgbwrul_cgibin_dir || '/lmuhwskclst.LMUDownloadCList'|| '?term=' || hold_term|| '&crn=' ||hold_crn, 'DOWNLOAD CLASS ROSTER'); htp.nl; /* Display Records */ rcount:=0; for mystuff in student_list loop if rcount=0 then twgkfrmt.P_TableOpen('DATADISPLAY'); twgkfrmt.P_TableRowOpen('left'); twgkfrmt.P_TableDataLabel('ID',calign=>'center'); twgkfrmt.P_TableDataLabel('CONFIDENTIAL',calign=>'center'); twgkfrmt.P_TableDataLabel('NAME',calign=>'center'); twgkfrmt.P_TableDataLabel('LEVEL',calign=>'center'); twgkfrmt.P_TableDataLabel('CLASS',calign=>'center'); twgkfrmt.P_TableDataLabel('MAJOR',calign=>'center'); twgkfrmt.P_TableDataLabel('CREDITS',calign=>'center'); twgkfrmt.P_TableDataLabel('STATUS',calign=>'center'); twgkfrmt.P_TableDataLabel('STATUS DATE',calign=>'center'); twgkfrmt.P_TableDataLabel('REG SEQ',calign=>'center'); twgkfrmt.P_TableRowClose; rcount:=1; end if; twgkfrmt.P_TableRowOpen('left'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.id),calign=>'center'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.confid),calign=>'center'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.name),calign=>'left'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.s_level),calign=>'left'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.class),calign=>'center'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.major1),calign=>'center'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.cr_hr),calign=>'center'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.reg_status),calign=>'left'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.rsts_date),calign=>'left'); twgkfrmt.P_TableData(twgkfrmt.F_PrintBold(mystuff.reg_seq),calign=>'center'); twgkfrmt.P_TableRowClose; end loop; twgkfrmt.P_TableClose; else /* No Records to Display */ if hold_crn is null then twgkwbis.P_OpenDoc('lmuhwskclst.LMUClassRoster',header_text=> ' *** Invalid CRN or SUBJ/CRS/SEC ***'); /* Be sure to enter appropriate info text in Web Tailor for INV_CRN */ twgkwbis.P_DispInfo('lmuhwskclst.LMUClassRoster','INV_CRN'); else twgkwbis.P_OpenDoc('lmuhwskclst.LMUClassRoster',header_text=> '*** No Students Enrolled in Course ***'); /* Be sure to enter appropriate info text in Web Tailor for NO_STUDENTS */ twgkwbis.P_DispInfo('lmuhwskclst.LMUClassRoster','NO_STUDENTS'); end if; end if; else /* First Time in Form, Do not load data */ twgkwbis.P_OpenDoc('lmuhwskclst.LMUClassRoster'); /* You can enter info text for DEFAULT if you want to display any additional information */ twgkwbis.P_DispInfo('lmuhwskclst.LMUClassRoster','DEFAULT'); end if; htp.nl; /* Enter Search Instruction in SRCHINST info text */ twgkwbis.P_DispInfo('lmuhwskclst.LMUClassRoster','SRCHINST'); htp.nl; /* show search boxes */ HTP.formOpen(twgklibs.twgbwrul_rec.twgbwrul_cgibin_dir|| '/'||'lmuhwskclst.LMUClassRoster'); HTP.formHidden('term',hold_term); HTP.formHidden('firsttime','N'); /* HTP.formHidden('error_mess', null); */ twgkfrmt.P_TableOpen('DATADISPLAY'); twgkfrmt.P_TableRowOpen('left'); twgkfrmt.P_TableDataLabel('Enter CRN:',calign=>'left'); twgkfrmt.P_TableData(htf.formText('crn', '5', '5', crn)); twgkfrmt.P_TableRowClose; twgkfrmt.P_TableRowOpen('left'); twgkfrmt.P_TableDataLabel('or',calign=>'center',ccolspan=>'2'); twgkfrmt.P_TableRowClose; twgkfrmt.P_TableRowOpen('left'); twgkfrmt.P_TableDataLabel('Select Subject:',calign=>'left'); /* Fill Drop-Down List with Subjects */ row_count := 0; FOR subj_rec in subjinfo LOOP IF subjinfo%rowcount = 1 THEN twgkfrmt.p_tabledataopen; HTP.formSelectOpen('subj',NULL,1); /* HTP.P(twgkwbis.F_formSelectOption(null, null,'SELECTED')); */ END IF; IF subj IS NOT NULL AND subj_rec.subj = subj THEN HTP.P(twgkwbis.F_formSelectOption(subj_rec.subject||' ('||subj_rec.subj||')', subj_rec.subj,'SELECTED')); ELSE HTP.P(twgkwbis.F_formSelectOption(subj_rec.subject||' ('||subj_rec.subj||')', subj_rec.subj)); END IF; row_count := subjinfo%rowcount; END LOOP; IF row_count <> 0 THEN HTP.formSelectClose; END IF; twgkfrmt.P_TableRowClose; twgkfrmt.P_TableRowOpen('left'); twgkfrmt.P_TableDataLabel('Enter Course Number: ',calign=>'left'); twgkfrmt.P_TableData(htf.formText('crs', '5', '5', crs)); twgkfrmt.P_TableRowClose; twgkfrmt.P_TableRowOpen('left'); twgkfrmt.P_TableDataLabel('Enter Section Number: ',calign=>'left'); twgkfrmt.P_TableData(htf.formText('sec', '3', '3', sec)); twgkfrmt.P_TableRowClose; twgkfrmt.P_TableClose; htp.nl; htp.formSubmit(null, 'Get Roster'); HTP.formClose; htp.nl; twgkwbis.P_CloseDoc(curr_release); end LMUClassRoster; procedure LMUDownloadCList (term in stvterm.stvterm_code%type default null, crn in sfrstcr.sfrstcr_crn%type default null) is mytab varchar2(1); cursor dlclasslist is select sfrstcr_term_code term, sfrstcr_crn crn, ssbsect_subj_code subj, ssbsect_crse_numb crs, ssbsect_seq_numb sec, spriden_id id, spriden_last_name lname, spriden_first_name fname, spriden_mi mi, decode(nvl(spbpers_confid_ind, 'N'), 'Y', '***Confidential***', null) confid, a.sgbstdn_levl_code levl, f_class_calc_fnc(a.sgbstdn_pidm, a.sgbstdn_levl_code, sfrstcr_term_code) class, stvcoll_desc college, a.sgbstdn_majr_code_1 major1, a.sgbstdn_majr_code_conc_1 conc1, a.sgbstdn_majr_code_conc_1_2 conc1_2, a.sgbstdn_majr_code_minr_1 minor1, a.sgbstdn_majr_code_minr_1_2 minor1_2, a.sgbstdn_majr_code_2 major2, a.sgbstdn_majr_code_conc_2 conc2, a.sgbstdn_majr_code_conc_2_2 conc2_2, a.sgbstdn_majr_code_minr_2 minor2, a.sgbstdn_majr_code_minr_2_2 minor2_2, decode(cm.spraddr_street_line1, '', decode(ma.spraddr_street_line1, '', pr.spraddr_street_line1, ma.spraddr_street_line1), cm.spraddr_street_line1) street1, decode(cm.spraddr_street_line1, '', decode(ma.spraddr_street_line1, '', pr.spraddr_street_line2, ma.spraddr_street_line2), cm.spraddr_street_line2) street2, decode(cm.spraddr_street_line1, '', decode(ma.spraddr_street_line1, '', pr.spraddr_street_line3, ma.spraddr_street_line3), cm.spraddr_street_line3) street3, decode(cm.spraddr_street_line1, '', decode(ma.spraddr_street_line1, '', pr.spraddr_city, ma.spraddr_city), cm.spraddr_city) city, decode(cm.spraddr_street_line1, '', decode(ma.spraddr_street_line1, '', pr.spraddr_stat_code, ma.spraddr_stat_code), cm.spraddr_stat_code) state, decode(cm.spraddr_street_line1, '', decode(ma.spraddr_street_line1, '', pr.spraddr_zip, ma.spraddr_zip), cm.spraddr_zip) zip, decode(cm.spraddr_street_line1, '', decode(ma.spraddr_street_line1, '', pn.stvnatn_nation, mn.stvnatn_nation), cn.stvnatn_nation) nation, decode(ct.sprtele_phone_area, '', decode(mt.sprtele_phone_area, '', pt.sprtele_phone_area||'-'||substr(pt.sprtele_phone_number, 1, 3)||'-'||substr(pt.sprtele_phone_number, 4, 4), mt.sprtele_phone_area||'-'||substr(mt.sprtele_phone_number, 1, 3)||'-'||substr(mt.sprtele_phone_number, 4, 4)), ct.sprtele_phone_area||'-'||substr(ct.sprtele_phone_number, 1, 3)||'-'||substr(ct.sprtele_phone_number, 4, 4)) phone, goremal_email_address email, stvrsts_desc reg_status, sfrstcr_rsts_date rsts_date, sfrstcr_credit_hr credits, stvgmod_desc grade_mode, sfrstcr_grde_code_mid mtg, sfrstcr_grde_code grade, sfrstcr_reg_seq reg_seq from sfrstcr, ssbsect, spriden, spbpers, sgbstdn a, stvcoll, spraddr cm, stvnatn cn, sprtele ct, spraddr ma, stvnatn mn, sprtele mt, spraddr pr, stvnatn pn, sprtele pt, goremal, stvrsts, stvgmod where sfrstcr_term_code = term and sfrstcr_crn = crn and sfrstcr_rsts_code = stvrsts_code and stvrsts_incl_sect_enrl = 'Y' and sfrstcr_crn = ssbsect_crn and sfrstcr_term_code = ssbsect_term_code and sfrstcr_pidm = spriden_pidm and spriden_change_ind is null and sfrstcr_pidm = spbpers_pidm and sfrstcr_pidm = a.sgbstdn_pidm and a.sgbstdn_term_code_eff= (select max(b.sgbstdn_term_code_eff) from sgbstdn b where b.sgbstdn_term_code_eff <= sfrstcr_term_code and a.sgbstdn_pidm = b.sgbstdn_pidm) and a.sgbstdn_coll_code_1 = stvcoll_code(+) and sfrstcr_pidm=cm.spraddr_pidm(+) and cm.spraddr_atyp_code(+) = 'IM' and cm.spraddr_status_ind(+) is null and cm.spraddr_natn_code = cn.stvnatn_code(+) and cm.spraddr_pidm = ct.sprtele_pidm(+) and cm.spraddr_atyp_code = ct.sprtele_atyp_code(+) and cm.spraddr_seqno = ct.sprtele_addr_seqno(+) and ct.sprtele_tele_code(+) = 'IM' and ct.sprtele_status_ind(+) is null and ct.sprtele_primary_ind(+) = 'Y' and sfrstcr_pidm=ma.spraddr_pidm(+) and ma.spraddr_atyp_code(+) = 'MA' and ma.spraddr_status_ind(+) is null and ma.spraddr_natn_code = mn.stvnatn_code(+) and ma.spraddr_pidm = mt.sprtele_pidm(+) and ma.spraddr_atyp_code = mt.sprtele_atyp_code(+) and ma.spraddr_seqno = mt.sprtele_addr_seqno(+) and mt.sprtele_tele_code(+) = 'MA' and mt.sprtele_status_ind(+) is null and mt.sprtele_primary_ind(+) = 'Y' and sfrstcr_pidm=pr.spraddr_pidm(+) and pr.spraddr_atyp_code(+) = 'PR' and pr.spraddr_status_ind(+) is null and pr.spraddr_natn_code = pn.stvnatn_code(+) and pr.spraddr_pidm = pt.sprtele_pidm(+) and pr.spraddr_atyp_code = pt.sprtele_atyp_code(+) and pr.spraddr_seqno = pt.sprtele_addr_seqno(+) and pt.sprtele_tele_code(+) = 'PR' and pt.sprtele_status_ind(+) is null and pt.sprtele_primary_ind(+) = 'Y' and sfrstcr_pidm = goremal_pidm(+) and goremal_preferred_ind(+) = 'Y' and sfrstcr_gmod_code = stvgmod_code(+) order by lname, fname, mi; begin mytab:=' '; owa_util.mime_header('application/vnd.ms-excel'); owa_util.http_header_close; htp.print('TERM'||mytab||'CRN'||mytab||'SUBJ'||mytab||'CRS'||mytab||'SEC'||mytab||'ID'||mytab||'CONFID'||mytab||'LNAME'||mytab|| 'FNAME'||mytab||'MI'||mytab||'LEVL'||mytab||'CLASS'||mytab||'COLLEGE'||mytab||'MAJOR1'||mytab||'CONC1'||mytab||'CONC1_2'||mytab|| 'MINOR1'||mytab||'MINOR1_2'||mytab||'MAJOR2'||mytab||'CONC2'||mytab||'CONC2_2'||mytab||'MINOR2'||mytab||'MINOR2_2'||mytab|| 'STREET1'||mytab||'STREET2'||mytab||'STREET3'||mytab||'CITY'||mytab||'STATE'||mytab||'ZIP'||mytab||'NATION'||mytab|| 'PHONE'||mytab||'EMAIL'||mytab||'REGISTRATION STATUS'||mytab||'STATUS DATE'||mytab||'CREDITS'||mytab||'GRADE MODE'||mytab|| 'MID TERM GRADE'||mytab||'FINAL GRADE'||mytab||'REG SEQUENCE'); FOR mystuff in dlclasslist LOOP htp.print(mystuff.term||mytab||mystuff.crn||mytab||mystuff.subj||mytab||mystuff.crs||mytab||mystuff.sec||mytab|| ''''||mystuff.id||mytab||mystuff.confid||mytab||mystuff.lname||mytab||mystuff.fname||mytab|| mystuff.mi||mytab||mystuff.levl||mytab||mystuff.class||mytab||mystuff.college||mytab||mystuff.major1||mytab||mystuff.conc1||mytab|| mystuff.conc1_2||mytab||mystuff.minor1||mytab||mystuff.minor1_2||mytab||mystuff.major2||mytab||mystuff.conc2||mytab|| mystuff.conc2_2||mytab||mystuff.minor2||mytab||mystuff.minor2_2||mytab||mystuff.street1||mytab||mystuff.street2||mytab|| mystuff.street3||mytab||mystuff.city||mytab||mystuff.state||mytab||mystuff.zip||mytab||mystuff.nation||mytab||mystuff.phone||mytab|| mystuff.email||mytab||mystuff.reg_status||mytab||mystuff.rsts_date||mytab||mystuff.credits||mytab||mystuff.grade_mode||mytab||mystuff.mtg||mytab|| mystuff.grade||mytab||mystuff.reg_seq); END LOOP; end LMUDownloadCList; end lmuhwskclst; / show errors whenever sqlerror continue; drop public synonym lmuhwskclst; whenever sqlerror exit rollback; create public synonym lmuhwskclst for lmuhwskclst; grant execute on lmuhwskclst to public; set scan on