set scan off set echo on -- Created for Loyola Marymount University -- By Robert M. Nitsos -- 05-OCT-2004 -- -- This package creates Banner Web pages that display: -- Photo Class Roster - A class roster with OneCard photos displayed for -- Faculty users. User can also download text data to a tab-delimited -- file. -- create or replace package lmubwgkpics is procedure LMUPhotoRoster (term IN STVTERM.STVTERM_CODE%TYPE DEFAULT NULL, crn in sfrstcr.sfrstcr_crn%type default null, display_email IN VARCHAR2 DEFAULT NULL, error_mess in varchar2 default null); procedure LMUDLPhotoRoster (term IN STVTERM.STVTERM_CODE%TYPE DEFAULT NULL, crn in sfrstcr.sfrstcr_crn%type default null); END lmubwgkpics; / show errors CREATE OR REPLACE PACKAGE BODY lmubwgkpics AS /* Global type and variable declarations for package */ pidm spriden.spriden_pidm%TYPE; hold_term stvterm.stvterm_code%TYPE; hold_crn sirasgn.sirasgn_crn%TYPE; course_rec bwlkilib.get_course_info_c%ROWTYPE; /****************************** LMU Photo Class Roster ***********************/ procedure LMUPhotoRoster (term IN STVTERM.STVTERM_CODE%TYPE DEFAULT NULL, crn in sfrstcr.sfrstcr_crn%type default null, display_email IN VARCHAR2 DEFAULT NULL, error_mess in varchar2 default null) is curr_release varchar2(10) := '6.2'; msg varchar2(255); term_rec stvterm%rowtype; rcount number; term_description stvterm%ROWTYPE; update_ind VARCHAR2 (1); student_name VARCHAR2 (132); confid_info VARCHAR2 (120); dead_info VARCHAR2 (120); crnmsg VARCHAR2 (255); sdax_emailopt gtvsdax.gtvsdax_external_code%TYPE; sdax_emaildel gtvsdax.gtvsdax_external_code%TYPE; -- email goremal.goremal_email_address%TYPE; email_list_included NUMBER := 0; email_list_total NUMBER := 0; to_value VARCHAR2 (32000); /* Cursor for information that is to be displayed */ cursor student_list is select stvterm_code term_code, stvterm_desc term_desc, sfrstcr_crn crn, ssbsect_subj_code subj, ssbsect_crse_numb crs, ssbsect_seq_numb sec, nvl(ssbsect_crse_title, c1.scbcrse_title) title, sfrstcr_pidm pidm, spriden_id id, spriden_last_name||', '||spriden_first_name||' '||spriden_mi name, goremal_email_address email, 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, stvterm_code) class, sfrstcr_credit_hr cr_hr, sfrstcr_gmod_code gmod, stvgmod_desc grade_mode, sfrstcr_rsts_code rsts, stvrsts_desc reg_status, sfrstcr_rsts_date rsts_date, sfrstcr_reg_seq reg_seq from stvterm, sfrstcr, stvrsts, ssbsect, scbcrse c1, spriden, spbpers, sgbstdn a, stvlevl, stvmajr, stvgmod, goremal where stvterm_code = hold_term and sfrstcr_term_code = stvterm_code and sfrstcr_crn = hold_crn and sfrstcr_crn = ssbsect_crn and sfrstcr_term_code = ssbsect_term_code and ssbsect_subj_code = c1.scbcrse_subj_code and ssbsect_crse_numb = c1.scbcrse_crse_numb and c1.scbcrse_eff_term = (select max(c2.scbcrse_eff_term) from scbcrse c2 where c2.scbcrse_eff_term <= ssbsect_term_code and c2.scbcrse_subj_code = c1.scbcrse_subj_code and c2.scbcrse_crse_numb = c1.scbcrse_crse_numb) and sfrstcr_rsts_code = stvrsts_code(+) and sfrstcr_gmod_code = stvgmod_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(+) and sfrstcr_pidm = goremal_pidm(+) and goremal_preferred_ind(+) = 'Y' and goremal_status_ind(+) = 'A' order by name; slist student_list%rowtype; begin /* check for valid user and define roles */ IF NOT twbkwbis.F_ValidUser(pidm) THEN return; END IF; sdax_emailopt := NVL (bwcklibs.F_GetGtvsdaxRule ('EMAILOPT', 'FACWEB'), 'BCC'); sdax_emaildel := NVL (bwcklibs.F_GetGtvsdaxRule ('EMAILDEL', 'FACWEB'), ','); /* Check routine for term parameter, select term parameter from the General */ /* table gorwprm. */ /* If value not set then term value chosen from Select Term page */ /* (P_FacSelTerm and stored in local variable hold_term. */ IF term IS NULL THEN hold_term := twbkwbis.f_getparam (pidm, 'TERM'); ELSE twbkwbis.p_setparam (pidm, 'TERM', term); hold_term := term; END IF; /* make sure a term has been selected and not invalid value */ IF hold_term IS NULL THEN bwlkostm.p_facselterm(pidm, calling_proc_name => 'lmubwgkpics.LMUPhotoRoster'); RETURN; END IF; /* If crn has not been passed as a param, then try to get */ /* it from the general table, gorwprm */ IF CRN IS NULL THEN hold_crn := twbkwbis.F_GetParam (pidm, 'CRN'); update_ind := twbkwbis.F_GetParam (pidm, 'CRNPRIV'); /* Otherwise, store the value of the param in GORWPRM */ ELSE twbkwbis.P_SetParam (pidm, 'CRN', CRN); hold_crn := CRN; END IF; /* Make sure a CRN has been selected */ IF hold_crn IS NULL THEN TWBKWBIS.P_SetParam (pidm, 'PROC_NAME', 'lmubwgkpics.LMUPhotoRoster'); TWBKWBIS.P_SetParam (pidm, 'PROC_NAME2', 'lmubwgkpics.LMUPhotoRoster'); bwlkocrn.P_FacCrnSel ( hold_term, 'lmubwgkpics.LMUPhotoRoster', 'lmubwgkpics.LMUPhotoRoster' ); RETURN; END IF; /* set paramater to indicate we are a faculty user */ twbkwbis.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 BWLKILIB.F_ValidFac(hold_term, pidm) THEN twbkwbis.P_OpenDoc('lmubwgkpics.LMUPhotoRoster',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(twbklibs.twgbwrul_rec.twgbwrul_error_gif); HTP.bold(msg); HTP.para; twbkwbis.P_CloseDoc(curr_release); RETURN; END IF; /* get term description */ OPEN stkterm.stvtermc (hold_term); /* find the term description */ FETCH stkterm.stvtermc INTO term_description; CLOSE stkterm.stvtermc; /* Check to see if class list display is available for this term */ IF NOT bwlkilib.f_claslst (hold_term) THEN twbkfrmt.p_paragraph (1); twbkfrmt.p_printmessage ( g$_nls.get ( 'BWLKFCW1-0700', 'SQL', 'Class List Display is not available for %01%.', term_description.stvterm_desc), 'ERROR'); twbkfrmt.p_paragraph (1); twbkwbis.p_closedoc (curr_release); RETURN; END IF; to_value := null; /* Get data from SSBSECT using get_course_info_c cursor */ OPEN bwlkilib.get_course_info_c (hold_term, hold_crn); FETCH bwlkilib.get_course_info_c INTO course_rec; CLOSE bwlkilib.get_course_info_c; /* Open Cursor */ open student_list; fetch student_list into slist; if student_list%notfound then /* No Data Found */ twbkwbis.P_OpenDoc('lmubwgkpics.LMUPhotoRoster',header_text=>'*** No Registrations Exist ***'); twbkwbis.P_DispInfo('lmubwgkpics.LMUPhotoRoster','NO_REG'); /* Display Course Information */ bwlkfrmt.p_course_info ( hold_term, hold_crn, twbkfrmt.f_encodeurl ( twbkwbis.f_cgibin || 'bwckctlg.p_disp_listcrse' || '?term_in=' || twbkfrmt.f_encode (hold_term) || '&subj_in=' || twbkfrmt.f_encode (course_rec.ssbsect_subj_code) || '&crse_in=' || twbkfrmt.f_encode (course_rec.ssbsect_crse_numb) || '&schd_in=' || twbkfrmt.f_encode (course_rec.ssbsect_schd_code))); twbkfrmt.p_tablerowopen; twbkfrmt.p_tabledatalabel(g$_nls.get('BWLKFCW1-0000', 'SQL', 'Duration:')); twbkfrmt.p_tabledata ( TO_CHAR ( course_rec.ssbsect_ptrm_start_date, twbklibs.twgbwrul_rec.twgbwrul_date_fmt ) || ' - ' || TO_CHAR ( course_rec.ssbsect_ptrm_end_date, twbklibs.twgbwrul_rec.twgbwrul_date_fmt ) ); twbkfrmt.p_tablerowclose; twbkfrmt.p_tableclose; twbkfrmt.p_printtext (crnmsg); HTP.br; bwlkfrmt.p_enroll_count (hold_term, hold_crn); HTP.br; else /* Display Roster */ rcount := 0; LOOP if rcount > 0 then fetch student_list into slist; end if; EXIT WHEN student_list%notfound; if rcount = 0 then /* Open Page */ twbkwbis.P_OpenDoc('lmubwgkpics.LMUPhotoRoster'); twbkwbis.P_DispInfo('lmubwgkpics.LMUPhotoRoster', 'GENERAL'); twbkwbis.P_DispInfo('lmubwgkpics.LMUPhotoRoster', 'CONFID'); twbkwbis.P_DispInfo('lmubwgkpics.LMUPhotoRoster', 'ADDRESS'); /* Display Course Information */ bwlkfrmt.p_course_info ( hold_term, hold_crn, twbkfrmt.f_encodeurl ( twbkwbis.f_cgibin || 'bwckctlg.p_disp_listcrse' || '?term_in=' || twbkfrmt.f_encode (hold_term) || '&subj_in=' || twbkfrmt.f_encode (course_rec.ssbsect_subj_code) || '&crse_in=' || twbkfrmt.f_encode (course_rec.ssbsect_crse_numb) || '&schd_in=' || twbkfrmt.f_encode (course_rec.ssbsect_schd_code))); twbkfrmt.p_tablerowopen; twbkfrmt.p_tabledatalabel(g$_nls.get('BWLKFCW1-0000', 'SQL', 'Duration:')); twbkfrmt.p_tabledata ( TO_CHAR ( course_rec.ssbsect_ptrm_start_date, twbklibs.twgbwrul_rec.twgbwrul_date_fmt ) || ' - ' || TO_CHAR ( course_rec.ssbsect_ptrm_end_date, twbklibs.twgbwrul_rec.twgbwrul_date_fmt ) ); twbkfrmt.p_tablerowclose; twbkfrmt.p_tableclose; twbkfrmt.p_printtext (crnmsg); HTP.br; bwlkfrmt.p_enroll_count (hold_term, hold_crn); HTP.br; /* Display Link to Download Data */ twbkwbis.P_DispInfo('lmubwgkpics.LMUPhotoRoster', 'DOWNLOAD'); HTP.formOpen(twbklibs.twgbwrul_rec.twgbwrul_cgibin_dir||'/'||'lmubwgkpics.LMUDLPhotoRoster'); HTP.formHidden('term', hold_term); HTP.formHidden('crn', hold_crn); HTP.formsubmit(NULL,'DOWNLOAD DATA'); HTP.formClose; /* Open Table and Create Headers */ twgkfrmt.P_TableOpen('DATADISPLAY'); twgkfrmt.P_TableRowOpen('left'); twgkfrmt.P_TableDataLabel('Photo',calign=>'center'); twgkfrmt.P_TableDataLabel('ID',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('Grade Mode',calign=>'center'); twgkfrmt.P_TableDataLabel('Status',calign=>'center'); twgkfrmt.P_TableDataLabel('Status Date',calign=>'center'); twgkfrmt.P_TableDataLabel('Reg Seq',calign=>'center'); twgkfrmt.P_TableDataLabel(null,calign=>'center'); twgkfrmt.P_TableRowClose; end if; /* Format Student Name */ student_name := f_format_name (slist.pidm, 'LFMI'); confid_info := ''; confid_info := bwcklibs.F_ConfidStudInfo_L (slist.pidm); dead_info := ''; dead_info := bwlkilib.f_checkdeadind (slist.pidm); twgkfrmt.P_TableRowOpen('left'); htp.print(''); twgkfrmt.P_TableData(slist.id); /* Create link to address, if valid */ IF dead_info IS NULL THEN IF twbkwbis.f_validlink ('bwlkosad.P_FacSelectAtypView') THEN twgkfrmt.p_tabledata ( twgkfrmt.f_printanchor ( twbkwbis.f_cgibin || 'bwlkosad.P_FacSelectAtypView' || '?stupidm=' || slist.pidm || '&term=' || hold_term, ctext => student_name) || ' ' || confid_info); ELSE -- Person is deceased twgkfrmt.p_tabledata (twgkfrmt.F_PrintBold(student_name || ' ' || confid_info)); END IF; ELSE -- Person is deceased twgkfrmt.p_tabledata (twgkfrmt.F_PrintBold(student_name || ' ' || confid_info || dead_info)); END IF; twgkfrmt.P_TableData(slist.levl); twgkfrmt.P_TableData(slist.class); twgkfrmt.P_TableData(slist.major1); twgkfrmt.P_TableData(slist.cr_hr); twgkfrmt.P_TableData(slist.grade_mode); twgkfrmt.P_TableData(slist.reg_status); twgkfrmt.P_TableData(slist.rsts_date); twgkfrmt.P_TableData(slist.reg_seq); -- -- New Email Display. -- twgkfrmt.p_tabledata (twbkfrmt.f_printtext(bwckfrmt.f_disp_instr_email_icon (slist.pidm), class_in => 'fieldmediumtext')); -- twgkfrmt.P_TableRowClose; IF slist.email IS NOT NULL THEN email_list_total := email_list_total + 1; END IF; IF NVL(LENGTH(to_value),0) + NVL(LENGTH(slist.email),0) + 3 < 32000 THEN IF slist.email IS NOT NULL THEN email_list_included := email_list_included + 1; IF to_value IS NOT NULL THEN to_value := to_value || sdax_emaildel; END IF; to_value := to_value || slist.email; END IF; END IF; rcount := rcount + 1; END LOOP; twgkfrmt.P_TableClose; end if; close student_list; twbkfrmt.p_paragraph (1); /* Display Link to Email Class if Valid */ -- IF to_value IS NOT NULL THEN -- to_value := '"' || to_value || '"'; -- bwlkilib.P_EmailList(to_value, g$_nls.get('BWLKFCW1-0780', 'SQL', 'Email class')); -- twbkfrmt.p_paragraph (1); -- END IF; IF (to_value IS NOT NULL AND sdax_emailopt <> 'NONE') THEN IF email_list_total > email_list_included THEN twbkfrmt.P_PrintMessage (g$_nls.get ('BWLKFCW1-0491','SQL','Please note: due to size constraints, only the first %01% of %02%'|| ' email addresses are included on the email advisees list.', email_list_included, email_list_total), 'WARNING'); END IF; IF (sdax_emailopt = 'PAGE' AND display_email IS NULL) THEN HTP.formOpen (twbkwbis.f_cgibin || 'bwlkfcwl.P_FacClaListSum'); HTP.formHidden ('display_email', 'PAGE'); HTP.formSubmit (NULL,g$_nls.get ('BWLKFCW1-0778', 'SQL', 'Display Email List')); HTP.formClose; -- ELSIF (sdax_emailopt = 'PAGE' AND display_email = 'PAGE') THEN -- -- Determine length of email text area -- twbkfrmt.p_formlabel (g$_nls.get ('BWLKFCW1-0779','SQL','Class List Email Listing'), idname => 'email_id'); -- HTP.br; -- -- textarea_length := ROUND (LENGTH (to_value) / 70) + 1; -- -- IF NVL (textarea_length, '0') < 3 THEN -- textarea_length := 3; -- END IF; -- -- HTP.formtextareaopen2 ('email_in', textarea_length, '70', cattributes => 'ID = "email_id"'); -- twbkfrmt.p_printtext (to_value); -- HTP.formtextareaclose; ELSE bwlkilib.P_EmailList (to_value_in => to_value, link_msg_in => 'Email class', email_type_in => sdax_emailopt); END IF; twbkfrmt.p_paragraph (1); END IF; twbkwbis.P_DispInfo('lmubwgkpics.LMUPhotoRoster','FOOTER'); bwckfrmt.p_disp_back_anchor; twbkwbis.P_CloseDoc(curr_release); end LMUPhotoRoster; procedure LMUDLPhotoRoster (term IN STVTERM.STVTERM_CODE%TYPE DEFAULT NULL, crn in sfrstcr.sfrstcr_crn%type default null) is rcount number; cursor student_list is select stvterm_code term_code, stvterm_desc term_desc, sfrstcr_crn crn, ssbsect_subj_code subj, ssbsect_crse_numb crs, ssbsect_seq_numb sec, nvl(ssbsect_crse_title, c1.scbcrse_title) title, spriden_id id, decode(nvl(spbpers_confid_ind, 'N'), 'Y', '***CONFIDENTIAL***', null) confid, spriden_last_name||', '||spriden_first_name||' '||spriden_mi name, spriden_last_name lname, spriden_first_name fname, spriden_mi mi, a1.spraddr_street_line1 street1, a1.spraddr_street_line2 street2, a1.spraddr_street_line3 street3, a1.spraddr_city city, a1.spraddr_stat_code state, a1.spraddr_zip zip, a1n.stvnatn_nation nation, decode(t1.sprtele_phone_area, null, null, t1.sprtele_phone_area||'-'||substr(t1.sprtele_phone_number, 1, 3)||'-'||substr(t1.sprtele_phone_number, 4, 4)) phone, goremal_email_address email, 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, stvterm_code) class, sfrstcr_credit_hr cr_hr, sfrstcr_gmod_code gmod, stvgmod_desc grade_mode, sfrstcr_rsts_code rsts, stvrsts_desc reg_status, sfrstcr_rsts_date rsts_date, sfrstcr_reg_seq reg_seq from stvterm, sfrstcr, stvrsts, ssbsect, scbcrse c1, spriden, spbpers, sgbstdn a, stvlevl, stvmajr, stvgmod, goremal, spraddr a1, stvnatn a1n, sprtele t1 where stvterm_code = term and sfrstcr_term_code = stvterm_code and sfrstcr_crn = crn and sfrstcr_crn = ssbsect_crn and sfrstcr_term_code = ssbsect_term_code and ssbsect_subj_code = c1.scbcrse_subj_code and ssbsect_crse_numb = c1.scbcrse_crse_numb and c1.scbcrse_eff_term = (select max(c2.scbcrse_eff_term) from scbcrse c2 where c2.scbcrse_eff_term <= ssbsect_term_code and c2.scbcrse_subj_code = c1.scbcrse_subj_code and c2.scbcrse_crse_numb = c1.scbcrse_crse_numb) and sfrstcr_rsts_code = stvrsts_code(+) and sfrstcr_gmod_code = stvgmod_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(+) and a1.rowid(+)=f_get_address_rowid(sfrstcr_pidm, 'STDNADDR', 'A', sysdate, 1, 'S', null) and a1.spraddr_natn_code=a1n.stvnatn_code(+) and t1.rowid(+)=f_get_address_telephone_rowid(sfrstcr_pidm, 'STDNADDR', 'A', sysdate, 1, 'S', null) and sfrstcr_pidm = goremal_pidm(+) and goremal_preferred_ind(+) = 'Y' and goremal_status_ind(+) = 'A' order by name; slist student_list%rowtype; begin owa_util.mime_header('application/vnd.ms-excel'); htp.tableopen; htp.tablerowopen; htp.tableheader('ID'); htp.tableheader('CONF'); htp.tableheader('Last Name'); htp.tableheader('First Name'); htp.tableheader('MI'); htp.tableheader('Level'); htp.tableheader('Class'); htp.tableheader('Major'); htp.tableheader('Credits'); htp.tableheader('Grade Mode'); htp.tableheader('Status'); htp.tableheader('Status Date'); htp.tableheader('Req Seq'); htp.tableheader('Street1'); htp.tableheader('Street2'); htp.tableheader('Street3'); htp.tableheader('City'); htp.tableheader('State'); htp.tableheader('Zip'); htp.tableheader('Nation'); htp.tableheader('Phone'); htp.tableheader('Email'); htp.tablerowclose; FOR slist IN student_list LOOP htp.tablerowopen; htp.tabledata(slist.id); htp.tabledata(slist.confid); htp.tabledata(slist.lname); htp.tabledata(slist.fname); htp.tabledata(slist.mi); htp.tabledata(slist.levl); htp.tabledata(slist.class); htp.tabledata(slist.major1); htp.tabledata(slist.cr_hr); htp.tabledata(slist.grade_mode); htp.tabledata(slist.reg_status); htp.tabledata(slist.rsts_date); htp.tabledata(slist.reg_seq); htp.tabledata(slist.street1); htp.tabledata(slist.street2); htp.tabledata(slist.street3); htp.tabledata(slist.city); htp.tabledata(slist.state); htp.tabledata(slist.zip); htp.tabledata(slist.nation); htp.tabledata(slist.phone); htp.tabledata(slist.email); htp.tablerowclose; END LOOP; htp.tableclose; end LMUDLPhotoRoster; end lmubwgkpics; / show errors whenever sqlerror continue; drop public synonym lmubwgkpics; whenever sqlerror exit rollback; create public synonym lmubwgkpics for lmubwgkpics; grant execute on lmubwgkpics to WWW_USER; set scan on