/* ******************************************************************************* */ /* Copyright 2021 Ellucian Company L.P. and its affiliates. */ /* ******************************************************************************* */ /*TMCI18N BEGIN HEADER*/ #if !defined( tmBundle_EXISTS ) /* No Initialisation Required */ #include "tmcilib.h" static struct TMBundle tmBundle = {"shrdegs.pc",NULL,NULL,NULL,NULL}; #define tmBundle_EXISTS #endif /*TMCI18N END HEADER*/ /* AUDIT_TRAIL_MSGKEY_UPDATE -- PROJECT : MSGKEY -- MODULE : SHRDEGS -- SOURCE : enUS -- TARGET : I18N -- DATE : Mon Jan 14 14:58:58 2013 -- MSGSIGN : #c28406e5e6262d35 END AUDIT_TRAIL_MSGKEY_UPDATE */ /* AUDIT_TRAIL_TM63 -- TranMan 6.3 -- PROJECT : HEGDE_I18N -- MODULE : SHRDEGS -- SOURCE : enUS -- TARGET : I18N -- DATE : Fri Jul 27 07:40:45 2007 END AUDIT_TRAIL_TM63 */ /******************************************************************************/ /* SHRDEGS.PC - translated from SHRDEGS.RPT on 16-Jun-1993 09:23:26 */ /* Translation by SCTCCONV, Version 1.0.2 */ /* */ /* COPYRIGHT..: Copyright 2021 Ellucian Company L.P. and its affiliates. */ /******************************************************************************/ #include "guarpfe.h" EXEC SQL INCLUDE guaorac.c; /* SHRDEGS.RPT */ /* */ /* Degree Status Update Report */ /* */ /* AUDIT TRAIL: 1.11 */ /* 1. New report. RL 08/31/92 */ /* */ /* AUDIT TRAIL: 2.0 */ /* 1. Added logic to RPT for use of Population Selection. DGA 04/19/93 */ /* 2. Update columns in insert to SGBSTDN PJL 12/15/93 */ /* 3. Corrected PL/SQL errors; use sessionid instead of */ /* USERENV(SESSIONID). RL 01/10/94 */ /* 4. Update columns in insert to SGBSTDN (grad mod) TW 01/31/94 */ /* */ /* AUDIT TRAIL: 2.0.3 */ /* 1. Update columns in insert to SGBSTDN PJL 05/31/94 */ /* */ /* AUDIT TRAIL: 2.1 */ /* 1. Removed table owners. RL 11/14/94 */ /* 2. Corrected Population Selection logic. DGA 12/05/94 */ /* */ /* AUDIT TRAIL: 2.X Supplemental JWM 12/12/94 */ /* 1. Program modified by cfix.c to remedy mostly Pro*C related problems: */ /* split SQL concatenations joined, colons added to FETCH targets, */ /* file extensions added to SQL INCLUDEs, 'static' modifier removed from */ /* indicator variables, new logic to hadle CLOSE_CURSOR was added to SQL */ /* function wrappers, and object owner references were removed as part of */ /* BANNER2.1. (Not all changes necessarily apply.) */ /* */ /* AUDIT TRAIL: 2.1.5 */ /* 1. Modify Report Control Information header to include BW 01/19/95 */ /* Release Number BW 01/19/95 */ /* 2. Modify SYSDATE or sysdate to include century in the BW 01/19/95 */ /* heading of the report BW 01/19/95 */ /* 3. Update inserts to sgbstdn to take care of columns added CE 10/24/95 */ /* for degree audit mods. */ /* AUDIT TRAIL: 4.0 */ /* 1. Expanded Campus field 3more char as a part of conv'n4.0 PS 10/01/98 */ /* */ /* AUDIT TRAIL: 5.2 */ /* 1. Defect 62289. JC 05/10/01 */ /* Problem..When running in either Audit or Update mode, get */ /* ORA-01480: trailing null missing from STR bind value. */ /* Fix......In function 'main', under label 'ask_campus', wrong */ /* variable name used in string copy. Changed third line */ /* of code under label as follows: */ /* OLD - strcpy(parm_to_cap,ask_grad_year_var) */ /* NEW - strcpy(parm_to_cap,ask_campus_var) */ /* */ /* AUDIT TRAIL: 5.5 */ /* 1. VPD Initiative - eliminate implicit inserts CLF 06/20/02 */ /* */ /* AUDIT TRAIL: 7.0 */ /*1. APIs DRA 29MAR2004 */ /* Replace commits with call to gb_common.p_commit(). */ /*2. Concurrent Curricula MAH 4/13/04 */ /* replace locks, updates and inserts with calls to api */ /* Execute learner and outcome curricula conversion before the locks */ /* lock_shrdgmr to use sb_learneroutcome.p_lock */ /* lock_sgbstdn to use sb_learner.p_lock */ /* Remove checks around the locks to execute only at start of process */ /* Add term_sturec, sgbstdn_rowid, shrdgmr_rowid variables for API */ /* processing */ /* insert_sgbstdn to open sb_learner_ref to insert using sb_learner */ /* p_create. Backfill curr data after insert. */ /* update_sgbstdn to use sb_learner.p_update to update */ /* update_shrdgmr to use sb_learneroutcome.p_update */ /* AUDIT TRAIL: 7.1 */ /* 1. Defect 100823 - Assignment of the current ind., or selection */ /* of current curriculum for an sgbstdn */ /* Problm: If user admits for 200520, then does a quick admit */ /* for term 200443, it appears that the 200443 term is current */ /* for the 200520 sgbstdn record. */ /* Solution: Pass the p_create_sovlcur the sgbstdn term code eff, not */ /* the end term. The process soklcur.f_find_max_seqno will find the */ /* curriculum with terms between the eff and end term. It was finding */ /* all curriculum with terms less then the end term. */ /* 2. Defect 103104 MH 4/15/05 */ /* Problem: copy of learner data does not blank out the acad standing */ /* overrides, causing conflicting term data and the API to abend. */ /* Solution: do not include the previous terms acad standing override */ /* values when creating new general learner data */ /* AUDIT TRAIL: 7.3 */ /* 1. 2/9/06 MAH Concurrent Curricula - Call the procedure from soklcur */ /* to push the learner curriculum to the new csts for the new stst code */ /* 2 Close cursors left open; change postora to api_postora after api calls */ /* AUDIT TRAIL : 8.0 (I18N) Description: Internationalization Unicode Conversion */ /* AUDIT TRAIL: 8.5.6 */ /* 1. Defect 1-ACXL1D PL 10/23/2012 */ /* Problem: SHRDEGS creates AWARDED Field of Study record on incorrect */ /* SGASTDN Curriculum */ /* Fix: Moved the call to soklcur.p_push_learner_curriculum to the */ /* update_shrdgmr method using the degree term to access the correct */ /* learner curriculum for the degree. This is only called if the user */ /* has selected to update the student status. Removed the call to */ /* soklcur.p_push_learner_curriculum from update_sgbstdn and */ /* insert_sgbstdn, as the push now occurs from the degree update logic. */ /* Added signficant logic to insert_sgbstdn to create the matching */ /* curriculum records for the new sgbstdn. */ /* AUDIT TRAIL: 8.21 */ /* 1. Defect CR-000146088 AS 11/02/2020 */ /* When SHRDEGS updates student status to a new status, it creates a new */ /* SORLCUR for the term entered in parm 16. The insert curriculum process */ /* is not updating the sorlcur_term_code_end on the student previous */ /* curriculum with the correct end term, creating a gap in curriculum records*/ /* Solution: Modified update_shrdgmr. /* AUDIT TRAIL END */ /* ************************************************************************* */ /* */ /* Parameters: */ /* RPT_ONE_UP_NO - Sequence number used as the key to GJBPRUN */ /* to retrieve the parameters for a given run. */ /* APPLICATION - Population Selection application code. */ /* SELECTION - Population Selection selection Identifier. */ /* CREATOR - Population Selection creator ID. */ /* RPT_TERM - Report term to print in headings */ /* RPT_MODE - Report run mode (A=Audit, U=Update) */ /* OLD_DEGS_CODE - Current degree status code */ /* NEW_DEGS_CODE - New degree status code */ /* GRAD_TERM - Graduation term */ /* GRAD_YEAR - Graduation year */ /* GRAD_STAT - Graduation status */ /* DEGREE_CODE - Degree code */ /* CAMPUS - Campus of degree */ /* DEGREE_LEVEL - Level of degree */ /* STDNT_STATUS - New student status code */ /* STDNT_TERM - Effective term of new student status */ /* RPT_LINE_COUNT - Maximum number of lines per page. */ /* */ /* Tables: */ /* */ /* GLBEXTR - Population Selection Extract Table */ /* GJBJOBS - Report/Process Definition Table */ /* GJBPDEF - Jobs Parameter Definition Table */ /* GJBPRUN - Process Run Parameter Table */ /* GUBINST - Installation Description Table */ /* SGBSTDN - Student Table */ /* SHRDGMR - Degree Table */ /* SPRCOLR - Person Collector Table */ /* SPRIDEN - Person ID Table */ /* STVDEGS - Degree Status Code Validation Table */ /* STVSTST - Student Status Code Validation Table */ /* STVTERM - Term Code Validation Table */ /* */ /* Views: NONE */ /* ******************************************************************* */ /* Parameter variables */ /* ******************************************************************* */ EXEC SQL BEGIN DECLARE SECTION; static TMCHAR rptname[11]={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(ask_one_up_no)={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(rpt_one_up_no)={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(ask_line_count_var)={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_rpt_term[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR rpt_term[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_rpt_mode[2]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR rpt_mode[2]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_old_degs_code_var[3]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR old_degs_code[3]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_new_degs_code_var[3]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR new_degs_code[3]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_grad_term_var[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR grad_term[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR grad_term_ind[2]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR grad_term_all_ind[2]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_grad_year_var[5]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR grad_year[5]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_grad_stat_var[4]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR grad_stat[4]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_degree_code_var[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR degree_code[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR degree_code_ind[2]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR degree_code_all_ind[2]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_campus_var[4]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR campus[4]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_degree_level_var[3]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR degree_level[3]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR degree_level_ind[2]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR degree_level_all_ind[2]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_stdnt_status_var[3]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR stdnt_status[3]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_stdnt_term_var[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR stdnt_term[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_ps_selection_var[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ps_selection[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_ps_application_var[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ps_application[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ask_ps_creator_var[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR ps_creator[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR shrdgmr_rowid[19]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR sgbstdn_rowid[19]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR term_sturec[7]={0}/*TMCI18N CHANGED FROM ""*/; /* ******************************************************************* */ /* Standard variables */ /* ******************************************************************* */ static BANNUMSTR(count)={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR date[12]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR installation[31]={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(linelimit)={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(lineno)={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(one)={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(pageno)={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR parm_error[2]={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(parm_no)={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR rpt_optional_ind[2]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR time_var[12]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR title_var[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR valid_ind[2]={0}/*TMCI18N CHANGED FROM ""*/; /* ******************************************************************* */ /* Application variables (alpha order) */ /* ******************************************************************* */ static TMCHAR acyr_code[5]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR camp_code[4]={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(chkpnt_cnt)={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(chkpnt_limit)={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR degc_code[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR eff_term[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR max_effective_term[7]={0}; static TMCHAR grst_code[4]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR levl_code[3]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR new_degs_desc[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR old_degs_desc[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR parm_to_cap[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR person_id[10]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR person_name[31]={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(pidm)={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(ps_parm_count)={0}/*TMCI18N CHANGED FROM ""*/; static BANNUMSTR(seq_no)={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR sessionid[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR stdnt_status_desc[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR subtitle[133]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR term_code_grad[7]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR upper_parm[31]={0}/*TMCI18N CHANGED FROM ""*/; static TMCHAR insert_ind[2]={0}; int j=0; /* Shared indicator variables for SELECTs */ short Ind_01; short Ind_02; short Ind_03; short Ind_04; short Ind_05; short Ind_06; short Ind_07; short Ind_08; short Ind_09; short Ind_10; short Ind_11; short Ind_12; EXEC SQL END DECLARE SECTION; /* Local prototypes */ static int validate_one_up_no(int mode); static int sel_optional_ind(int mode); static int read_line_count(int mode); static void del_parms(void); static void get_sessionid(void); static int read_ps_application(int mode); static int read_ps_selection(int mode); static int read_ps_creator(int mode); static int read_rpt_term(int mode); static int read_rpt_mode(int mode); static int read_old_degs_code(int mode); static int read_new_degs_code(int mode); static int read_grad_term(int mode); static int read_grad_year(int mode); static int read_grad_stat(int mode); static int read_degree_code(int mode); static int read_campus(int mode); static int read_degree_level(int mode); static int read_stdnt_status(int mode); static int read_stdnt_term(int mode); static void insert_grad_term(void); static void insert_degree_code(void); static void insert_degree_level(void); static void lockcolr(void); static void inscolr_grad_term(void); static void inscolr_degree_code(void); static void inscolr_degree_level(void); static int get_grad_term(int mode); static int get_degree_code(int mode); static int get_degree_level(int mode); static void delcolr(void); static int check_old_degs_code(int mode); static int check_new_degs_code(int mode); static int check_stdnt_status(int mode); static int check_stdnt_term(int mode); static void lock_shrdgmr(void); static void lock_sgbstdn(void); static int seldate(int mode); static int selinst(int mode); static int seltitle(int mode); static int selmacro(int mode); static int selmacro_ps(int mode); static int convert_uppercase(int mode); static void update_shrdgmr(void); static void find_eff_term(TMCHAR parm_term_code[7]); static void insert_sgbstdn(void); static void update_sgbstdn(void); static int get_old_degs_desc(int mode); static int get_new_degs_desc(int mode); static void get_subtitle(void); static int get_degree_subtitle(int mode); static int get_stdnt_status_desc(int mode); static int get_student_subtitle(int mode); static void retrieve_parms(void); static void head(void); static void header(void); static void sub_header(void); static void body(void); static void foot(void); static void print_grad_term(void); static void print_degree_code(void); static void print_degree_level(void); int main(int argc,TMCHAR *argv[]) { /* switch to turn on the sql_trace option */ extern short sqltrace_flag; rptopen(user_pass,argc,argv); login(); if ( sqltrace_flag ) EXEC SQL ALTER SESSION SET SQL_TRACE TRUE; /* ******************************************************************* */ /* Initialize variables */ /* ******************************************************************* */ tmstrcpy(count,_TMC("0")); tmstrcpy(linelimit,_TMC("55")); tmstrcpy(one,_TMC("1")); tmstrcpy(pageno,_TMC("0")); tmstrcpy(rptname,_TMC("SHRDEGS")); tmstrcpy(parm_error,_TMC("N")); sysdate(time_var,ORA_NLS_TIME_FORMAT); tmstrcpy(chkpnt_cnt,_TMC("0")); tmstrcpy(chkpnt_limit,_TMC("100")); tmstrcpy(grad_term_ind,_TMC("N")); tmstrcpy(grad_term_all_ind,_TMC("N")); tmstrcpy(degree_code_ind,_TMC("N")); tmstrcpy(degree_code_all_ind,_TMC("N")); tmstrcpy(degree_level_ind,_TMC("N")); tmstrcpy(degree_level_all_ind,_TMC("N")); /* ******************************************************************* */ /* Table definitions */ /* ******************************************************************* */ /* Table 1 page definition */ /* Table 2 1-24 Date and time */ /* 51-81 Installation/Title */ /* 123-132 Page/SQL*Report program name */ /* Table 3 subheader and data */ table(T_DEFINE,1,1,132,NULL); table(T_DEFINE,2,1,24,51,81,123,132,NULL); table(T_DEFINE,3,1,9,12,41,44,49,52,57,60,64,67,75,79,87,91,101,NULL); table(T_BEGIN,1); /* Macros which need to be executed one time per program execution */ get_sessionid(); seldate(FIRST_ROW); selinst(FIRST_ROW); seltitle(FIRST_ROW); /* Standard Ask */ input(ask_one_up_no,TM_NLS_Get("0000","RUN SEQUENCE NUMBER: "),26,NUM); if ( !*ask_one_up_no ) goto ask_parms; tmstrcpy(rpt_one_up_no,ask_one_up_no); tmstrcpy(valid_ind,_TMC("N")); validate_one_up_no(FIRST_ROW); if ( compare(valid_ind,_TMC("Y"),EQS) ) goto retrieve_parms_lbl; goto no_parms; retrieve_parms_lbl: tmstrcpy(ps_parm_count,_TMC("0")); retrieve_parms(); /***** API Replaced EXEC SQL COMMIT; POSTORA; */ EXEC SQL EXECUTE BEGIN gb_common.p_commit(); END; END-EXEC; POSTORA; /* If new student status is present but new effective term is not, halt job */ if ( !*stdnt_status ) goto end_parms; if ( !*stdnt_term ) goto missing_parms; goto end_parms; ask_parms: tmstrcpy(ps_parm_count,_TMC("0")); input(ask_ps_application_var,TM_NLS_Get("0001","APPLICATION CODE: "),30,ALPHA); if ( !*ask_ps_application_var ) goto opt_ps_application; tmstrcpy(parm_to_cap,ask_ps_application_var); convert_uppercase(FIRST_ROW); tmstrcpy(ps_application,upper_parm); add(ps_parm_count,ps_parm_count,_TMC("1")); goto ask_ps_selection; opt_ps_application: tmprintf(&tmBundle, TM_NLS_Get("0002","JOB CONTINUING WITHOUT POPULATION SELECTION.\n")); tmprintf(&tmBundle, _TMC(" \n")); goto ask_report_term; ask_ps_selection: input(ask_ps_selection_var,TM_NLS_Get("0003","SELECTION IDENTIFIER: "),30,ALPHA); if ( !*ask_ps_selection_var ) goto opt_ps_selection; tmstrcpy(parm_to_cap,ask_ps_selection_var); convert_uppercase(FIRST_ROW); tmstrcpy(ps_selection,upper_parm); add(ps_parm_count,ps_parm_count,_TMC("1")); goto ask_ps_creator; opt_ps_selection: tmstrcpy(parm_no,_TMC("02")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto ask_ps_creator; goto missing_parms; ask_ps_creator: input(ask_ps_creator_var,TM_NLS_Get("0004","CREATOR ID: "),30,ALPHA); if ( !*ask_ps_creator_var ) goto opt_ps_creator; tmstrcpy(parm_to_cap,ask_ps_creator_var); convert_uppercase(FIRST_ROW); tmstrcpy(ps_creator,upper_parm); add(ps_parm_count,ps_parm_count,_TMC("1")); goto check_ps_parms; opt_ps_creator: tmstrcpy(parm_no,_TMC("03")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto check_ps_parms; goto missing_parms; check_ps_parms: EXEC SQL SELECT 'X' INTO :DUMMY FROM DUAL WHERE TO_NUMBER(:ps_parm_count)='0'; POSTORA; if ( ROWS_FOUND ) goto ask_report_term; EXEC SQL SELECT 'X' INTO :DUMMY FROM DUAL WHERE TO_NUMBER(:ps_parm_count)='3'; POSTORA; if ( ROWS_FOUND ) goto ask_report_term; goto ps_parm_error; /* ******************************************************************* */ /* Ask for parameters */ /* ******************************************************************* */ ask_report_term: input(ask_rpt_term,TM_NLS_Get("0005","REPORT TERM: "),6,ALPHA); if ( !*ask_rpt_term ) goto opt_rpt_term; tmstrcpy(parm_to_cap,ask_rpt_term); convert_uppercase(FIRST_ROW); tmstrcpy(rpt_term,upper_parm); goto ask_report_mode; opt_rpt_term: tmstrcpy(parm_no,_TMC("04")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto ask_report_mode; goto missing_parms; ask_report_mode: input(ask_rpt_mode,TM_NLS_Get("0006","REPORT MODE: A(UDIT) OR U(PDATE): "),1,ALPHA); if ( !*ask_rpt_mode ) goto opt_rpt_mode; tmstrcpy(parm_to_cap,ask_rpt_mode); convert_uppercase(FIRST_ROW); substr(ask_rpt_mode,upper_parm,0,1); if ( compare(ask_rpt_mode,_TMC("A"),EQS) ) goto set_rpt_mode; if ( compare(ask_rpt_mode,_TMC("U"),EQS) ) goto set_rpt_mode; tmprintf(&tmBundle, TM_NLS_Get("0007","INVALID MODE\n")); goto ask_report_mode; set_rpt_mode: tmstrcpy(rpt_mode,ask_rpt_mode); goto ask_old_degs_code; opt_rpt_mode: tmstrcpy(rpt_mode,_TMC("A")); ask_old_degs_code: input(ask_old_degs_code_var,TM_NLS_Get("0008","CURRENT DEGREE STATUS: "),2,ALPHA); if ( !*ask_old_degs_code_var ) goto opt_old_degs_code; tmstrcpy(parm_to_cap,ask_old_degs_code_var); convert_uppercase(FIRST_ROW); tmstrcpy(ask_old_degs_code_var,upper_parm); tmstrcpy(valid_ind,_TMC("N")); check_old_degs_code(FIRST_ROW); if ( compare(valid_ind,_TMC("Y"),EQS) ) goto equal_old_degs_code; tmprintf(&tmBundle, TM_NLS_Get("0009","INVALID DEGREE STATUS\n")); goto ask_old_degs_code; equal_old_degs_code: tmstrcpy(old_degs_code,ask_old_degs_code_var); goto ask_new_degs_code; opt_old_degs_code: tmstrcpy(parm_no,_TMC("06")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto ask_new_degs_code; goto missing_parms; ask_new_degs_code: input(ask_new_degs_code_var,TM_NLS_Get("0010","NEW DEGREE STATUS: "),2,ALPHA); if ( !*ask_new_degs_code_var ) goto opt_new_degs_code; tmstrcpy(parm_to_cap,ask_new_degs_code_var); convert_uppercase(FIRST_ROW); tmstrcpy(ask_new_degs_code_var,upper_parm); tmstrcpy(valid_ind,_TMC("N")); check_new_degs_code(FIRST_ROW); if ( compare(valid_ind,_TMC("Y"),EQS) ) goto equal_new_degs_code; tmprintf(&tmBundle, TM_NLS_Get("0011","INVALID DEGREE STATUS\n")); goto ask_new_degs_code; equal_new_degs_code: tmstrcpy(new_degs_code,ask_new_degs_code_var); goto ask_grad_term; opt_new_degs_code: tmstrcpy(parm_no,_TMC("07")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto ask_grad_term; goto missing_parms; ask_grad_term: input(ask_grad_term_var,TM_NLS_Get("0012","GRADUATION TERM CODE: "),6,ALPHA); if ( !*ask_grad_term_var ) goto opt_grad_term; tmstrcpy(parm_to_cap,ask_grad_term_var); convert_uppercase(FIRST_ROW); tmstrcpy(grad_term,upper_parm); tmstrcpy(grad_term_ind,_TMC("Y")); lockcolr(); inscolr_grad_term(); goto ask_grad_term; opt_grad_term: if ( compare(grad_term_ind,_TMC("Y"),EQS) ) goto ask_grad_year; tmstrcpy(parm_no,_TMC("08")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto set_all_grad_term; goto missing_parms; set_all_grad_term: tmstrcpy(grad_term_all_ind,_TMC("Y")); ask_grad_year: input(ask_grad_year_var,TM_NLS_Get("0013","GRADUATION YEAR: "),4,ALPHA); if ( !*ask_grad_year_var ) goto opt_grad_year; tmstrcpy(grad_year,ask_grad_year_var); goto ask_grad_stat; opt_grad_year: tmstrcpy(parm_no,_TMC("09")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto ask_grad_stat; goto missing_parms; ask_grad_stat: input(ask_grad_stat_var,TM_NLS_Get("0014","GRADUATION STATUS: "),3,ALPHA); if ( !*ask_grad_stat_var ) goto opt_grad_stat; tmstrcpy(parm_to_cap,ask_grad_stat_var); convert_uppercase(FIRST_ROW); tmstrcpy(grad_stat,upper_parm); goto ask_degree_code; opt_grad_stat: tmstrcpy(parm_no,_TMC("10")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto ask_degree_code; goto missing_parms; ask_degree_code: input(ask_degree_code_var,TM_NLS_Get("0015","DEGREE CODE: "),6,ALPHA); if ( !*ask_degree_code_var ) goto opt_degree_code; tmstrcpy(parm_to_cap,ask_degree_code_var); convert_uppercase(FIRST_ROW); tmstrcpy(degree_code,upper_parm); tmstrcpy(degree_code_ind,_TMC("Y")); lockcolr(); inscolr_degree_code(); goto ask_degree_code; opt_degree_code: if ( compare(degree_code_ind,_TMC("Y"),EQS) ) goto ask_campus; tmstrcpy(parm_no,_TMC("11")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto set_all_degree_code; goto missing_parms; set_all_degree_code: tmstrcpy(degree_code_all_ind,_TMC("Y")); ask_campus: input(ask_campus_var,TM_NLS_Get("0016","CAMPUS: "),3,ALPHA); if ( !*ask_campus_var ) goto opt_campus; tmstrcpy(parm_to_cap,ask_campus_var); convert_uppercase(FIRST_ROW); tmstrcpy(campus,upper_parm); goto ask_degree_level; opt_campus: tmstrcpy(parm_no,_TMC("12")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto ask_degree_level; goto missing_parms; ask_degree_level: input(ask_degree_level_var,TM_NLS_Get("0017","LEVEL: "),2,ALPHA); if ( !*ask_degree_level_var ) goto opt_degree_level; tmstrcpy(parm_to_cap,ask_degree_level_var); convert_uppercase(FIRST_ROW); tmstrcpy(degree_level,upper_parm); tmstrcpy(degree_level_ind,_TMC("Y")); lockcolr(); inscolr_degree_level(); goto ask_degree_level; opt_degree_level: if ( compare(degree_level_ind,_TMC("Y"),EQS) ) goto ask_stdnt_status; tmstrcpy(parm_no,_TMC("13")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto set_all_degree_level; goto missing_parms; set_all_degree_level: tmstrcpy(degree_level_all_ind,_TMC("Y")); ask_stdnt_status: input(ask_stdnt_status_var,TM_NLS_Get("0018","NEW STDNT STATUS: "),2,ALPHA); if ( !*ask_stdnt_status_var ) goto opt_stdnt_status; tmstrcpy(parm_to_cap,ask_stdnt_status_var); convert_uppercase(FIRST_ROW); tmstrcpy(ask_stdnt_status_var,upper_parm); tmstrcpy(valid_ind,_TMC("N")); check_stdnt_status(FIRST_ROW); if ( compare(valid_ind,_TMC("Y"),EQS) ) goto equal_stdnt_status; tmprintf(&tmBundle, TM_NLS_Get("0019","INVALID STUDENT STATUS\n")); goto ask_stdnt_status; equal_stdnt_status: tmstrcpy(stdnt_status,ask_stdnt_status_var); goto ask_stdnt_term; opt_stdnt_status: tmstrcpy(parm_no,_TMC("14")); sel_optional_ind(FIRST_ROW); if ( compare(rpt_optional_ind,_TMC("O"),EQS) ) goto ask_line_count; goto missing_parms; ask_stdnt_term: input(ask_stdnt_term_var,TM_NLS_Get("0020","NEW EFFECTIVE TERM: "),6,ALPHA); if ( !*ask_stdnt_term_var ) goto opt_stdnt_term; tmstrcpy(parm_to_cap,ask_stdnt_term_var); convert_uppercase(FIRST_ROW); tmstrcpy(ask_stdnt_term_var,upper_parm); tmstrcpy(valid_ind,_TMC("N")); check_stdnt_term(FIRST_ROW); if ( compare(valid_ind,_TMC("Y"),EQS) ) goto equal_stdnt_term; tmprintf(&tmBundle, TM_NLS_Get("0021","INVALID EFFECTIVE TERM\n")); goto ask_stdnt_term; equal_stdnt_term: tmstrcpy(stdnt_term,ask_stdnt_term_var); goto ask_line_count; opt_stdnt_term: if ( !*stdnt_status ) goto ask_line_count; goto missing_parms; /* Ask Line Count */ ask_line_count: input(ask_line_count_var,TM_NLS_Get("0022","NUMBER OF LINES PRINTED PER PAGE [55]: "),26,NUM); if ( !*ask_line_count_var ) goto init_line_count; tmstrcpy(linelimit,ask_line_count_var); goto end_parms; init_line_count: tmstrcpy(linelimit,_TMC("55")); goto end_parms; /* *** Error Messages */ ps_parm_error: tmstrcpy(parm_error,_TMC("P")); tmprintf(&tmBundle, TM_NLS_Get("0023","Population selection parmameter(s) missing, aborting job\n")); goto end_of_job; missing_parms: tmstrcpy(parm_error,_TMC("M")); tmprintf(&tmBundle, TM_NLS_Get("0024","Required parameter is missing, aborting job\n")); goto end_of_job; no_parms: tmstrcpy(parm_error,_TMC("I")); tmprintf(&tmBundle, TM_NLS_Get("0025","Parameter sequence number is invalid, aborting job\n")); goto end_of_job; end_parms: get_old_degs_desc(FIRST_ROW); get_old_degs_desc(CLOSE_CURSOR); get_new_degs_desc(FIRST_ROW); get_new_degs_desc(CLOSE_CURSOR); get_subtitle(); /* Execute main select macro for this SQL*Report */ EXEC SQL SELECT 'X' INTO :DUMMY FROM DUAL WHERE TO_NUMBER(:ps_parm_count) = '3'; POSTORA; if ( ROWS_FOUND ) goto ps_select; report(selmacro,body,head,NULL); goto end_of_job; ps_select: report(selmacro_ps,body,head,NULL); end_of_job: foot(); table(T_END); lockcolr(); delcolr(); /***** API Replaced EXEC SQL COMMIT; POSTORA; */ EXEC SQL EXECUTE BEGIN gb_common.p_commit(); END; END-EXEC; POSTORA; exit2os(EXIT_SUCCESS); return EXIT_SUCCESS; } /* ******************************************************************* */ /* Standard parameter related select macros */ /* ******************************************************************* */ /* Parameter sequence number validation */ static int validate_one_up_no(int mode) { EXEC SQL DECLARE cursor_001 CURSOR FOR SELECT 'Y' FROM GJBPRUN WHERE GJBPRUN_JOB = :rptname AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_001; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_001; POSTORA; } EXEC SQL FETCH cursor_001 INTO :valid_ind:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *valid_ind='\0'; return FALSE; } return TRUE; } /* Retrieve mandatory/optional indicator for Parm */ static int sel_optional_ind(int mode) { EXEC SQL DECLARE cursor_002 CURSOR FOR SELECT GJBPDEF_OPTIONAL_IND FROM GJBPDEF WHERE GJBPDEF_JOB = :rptname AND GJBPDEF_NUMBER = TO_NUMBER(:parm_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_002; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_002; POSTORA; } EXEC SQL FETCH cursor_002 INTO :rpt_optional_ind:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *rpt_optional_ind='\0'; return FALSE; } return TRUE; } /* Retrieve line count Parm */ static int read_line_count(int mode) { EXEC SQL DECLARE cursor_003 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = :rptname AND GJBPRUN_NUMBER = '99' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_003; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_003; POSTORA; } EXEC SQL FETCH cursor_003 INTO :linelimit:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *linelimit='\0'; return FALSE; } return TRUE; } /* Delete parameter table records */ static void del_parms(void) { EXEC SQL DELETE GJBPRUN WHERE GJBPRUN_JOB = :rptname AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); POSTORA; } static void get_sessionid(void) { EXEC SQL SELECT USERENV('SESSIONID') INTO :sessionid FROM DUAL; POSTORA; } /* ******************************************************************* */ /* Application specific parameter select macros */ /* ******************************************************************* */ static int read_ps_application(int mode) { EXEC SQL DECLARE cursor_004 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '01' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_004; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_004; POSTORA; } EXEC SQL FETCH cursor_004 INTO :ps_application:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *ps_application='\0'; return FALSE; } return TRUE; } static int read_ps_selection(int mode) { EXEC SQL DECLARE cursor_005 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '02' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_005; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_005; POSTORA; } EXEC SQL FETCH cursor_005 INTO :ps_selection:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *ps_selection='\0'; return FALSE; } return TRUE; } static int read_ps_creator(int mode) { EXEC SQL DECLARE cursor_006 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '03' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_006; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_006; POSTORA; } EXEC SQL FETCH cursor_006 INTO :ps_creator:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *ps_creator='\0'; return FALSE; } return TRUE; } static int read_rpt_term(int mode) { EXEC SQL DECLARE cursor_007 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '04' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_007; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_007; POSTORA; } EXEC SQL FETCH cursor_007 INTO :rpt_term:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *rpt_term='\0'; return FALSE; } return TRUE; } static int read_rpt_mode(int mode) { EXEC SQL DECLARE cursor_008 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '05' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_008; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_008; POSTORA; } EXEC SQL FETCH cursor_008 INTO :rpt_mode:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *rpt_mode='\0'; return FALSE; } return TRUE; } static int read_old_degs_code(int mode) { EXEC SQL DECLARE cursor_009 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '06' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_009; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_009; POSTORA; } EXEC SQL FETCH cursor_009 INTO :old_degs_code:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *old_degs_code='\0'; return FALSE; } return TRUE; } static int read_new_degs_code(int mode) { EXEC SQL DECLARE cursor_010 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '07' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_010; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_010; POSTORA; } EXEC SQL FETCH cursor_010 INTO :new_degs_code:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *new_degs_code='\0'; return FALSE; } return TRUE; } static int read_grad_term(int mode) { EXEC SQL DECLARE cursor_011 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '08' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_011; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_011; POSTORA; } EXEC SQL FETCH cursor_011 INTO :grad_term:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *grad_term='\0'; return FALSE; } return TRUE; } static int read_grad_year(int mode) { EXEC SQL DECLARE cursor_012 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '09' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_012; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_012; POSTORA; } EXEC SQL FETCH cursor_012 INTO :grad_year:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *grad_year='\0'; return FALSE; } return TRUE; } static int read_grad_stat(int mode) { EXEC SQL DECLARE cursor_013 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '10' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_013; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_013; POSTORA; } EXEC SQL FETCH cursor_013 INTO :grad_stat:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *grad_stat='\0'; return FALSE; } return TRUE; } static int read_degree_code(int mode) { EXEC SQL DECLARE cursor_014 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '11' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_014; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_014; POSTORA; } EXEC SQL FETCH cursor_014 INTO :degree_code:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *degree_code='\0'; return FALSE; } return TRUE; } static int read_campus(int mode) { EXEC SQL DECLARE cursor_015 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '12' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_015; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_015; POSTORA; } EXEC SQL FETCH cursor_015 INTO :campus:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *campus='\0'; return FALSE; } return TRUE; } static int read_degree_level(int mode) { EXEC SQL DECLARE cursor_016 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '13' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_016; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_016; POSTORA; } EXEC SQL FETCH cursor_016 INTO :degree_level:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *degree_level='\0'; return FALSE; } return TRUE; } static int read_stdnt_status(int mode) { EXEC SQL DECLARE cursor_017 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '14' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_017; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_017; POSTORA; } EXEC SQL FETCH cursor_017 INTO :stdnt_status:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *stdnt_status='\0'; return FALSE; } return TRUE; } static int read_stdnt_term(int mode) { EXEC SQL DECLARE cursor_018 CURSOR FOR SELECT GJBPRUN_VALUE FROM GJBPRUN WHERE GJBPRUN_JOB = UPPER(:rptname) AND GJBPRUN_NUMBER = '15' AND GJBPRUN_ONE_UP_NO = TO_NUMBER(:rpt_one_up_no); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_018; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_018; POSTORA; } EXEC SQL FETCH cursor_018 INTO :stdnt_term:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *stdnt_term='\0'; return FALSE; } return TRUE; } /* Insert job submission parameters into collector table */ static void insert_grad_term(void) { if ( !*grad_term ) goto set_all_grad_term; if ( compare(grad_term_all_ind,_TMC("Y"),EQS) ) return; tmstrcpy(grad_term_ind,_TMC("Y")); lockcolr(); inscolr_grad_term(); return; set_all_grad_term: if ( compare(grad_term_ind,_TMC("Y"),EQS) ) return; tmstrcpy(grad_term_all_ind,_TMC("Y")); } static void insert_degree_code(void) { if ( !*degree_code ) goto set_all_degree_code; if ( compare(degree_code_all_ind,_TMC("Y"),EQS) ) return; tmstrcpy(degree_code_ind,_TMC("Y")); lockcolr(); inscolr_degree_code(); return; set_all_degree_code: if ( compare(degree_code_ind,_TMC("Y"),EQS) ) return; tmstrcpy(degree_code_all_ind,_TMC("Y")); } static void insert_degree_level(void) { if ( !*degree_level ) goto set_all_degree_level; if ( compare(degree_level_all_ind,_TMC("Y"),EQS) ) return; tmstrcpy(degree_level_ind,_TMC("Y")); lockcolr(); inscolr_degree_level(); return; set_all_degree_level: if ( compare(degree_level_ind,_TMC("Y"),EQS) ) return; tmstrcpy(degree_level_all_ind,_TMC("Y")); } static void lockcolr(void) { EXEC SQL LOCK TABLE SPRCOLR IN SHARE UPDATE MODE; POSTORA; } static void inscolr_grad_term(void) { EXEC SQL INSERT INTO SPRCOLR (sprcolr_sessionid, sprcolr_type, sprcolr_value_date, sprcolr_value_atyp, sprcolr_activity_date, sprcolr_job, sprcolr_parm_number) VALUES (:sessionid,'T',SYSDATE,:grad_term,SYSDATE,'SHRDEGS',''); POSTORA; } static void inscolr_degree_code(void) { EXEC SQL INSERT INTO SPRCOLR (sprcolr_sessionid, sprcolr_type, sprcolr_value_date, sprcolr_value_atyp, sprcolr_activity_date, sprcolr_job, sprcolr_parm_number) VALUES (:sessionid,'D',SYSDATE,:degree_code,SYSDATE,'SHRDEGS',''); POSTORA; } static void inscolr_degree_level(void) { EXEC SQL INSERT INTO SPRCOLR (sprcolr_sessionid, sprcolr_type, sprcolr_value_date, sprcolr_value_atyp, sprcolr_activity_date, sprcolr_job, sprcolr_parm_number) VALUES (:sessionid,'L',SYSDATE,:degree_level,SYSDATE,'SHRDEGS',''); POSTORA; } static int get_grad_term(int mode) { EXEC SQL DECLARE cursor_019 CURSOR FOR SELECT SPRCOLR_VALUE_ATYP FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid AND SPRCOLR_TYPE = 'T' ORDER BY SUBSTR(SPRCOLR_VALUE_ATYP,1,6); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_019; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_019; POSTORA; } EXEC SQL FETCH cursor_019 INTO :grad_term:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *grad_term='\0'; return FALSE; } return TRUE; } static int get_degree_code(int mode) { EXEC SQL DECLARE cursor_020 CURSOR FOR SELECT SPRCOLR_VALUE_ATYP FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid AND SPRCOLR_TYPE = 'D' ORDER BY SUBSTR(SPRCOLR_VALUE_ATYP,1,6); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_020; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_020; POSTORA; } EXEC SQL FETCH cursor_020 INTO :degree_code:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *degree_code='\0'; return FALSE; } return TRUE; } static int get_degree_level(int mode) { EXEC SQL DECLARE cursor_021 CURSOR FOR SELECT SPRCOLR_VALUE_ATYP FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid AND SPRCOLR_TYPE = 'L' ORDER BY SUBSTR(SPRCOLR_VALUE_ATYP,1,2); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_021; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_021; POSTORA; } EXEC SQL FETCH cursor_021 INTO :degree_level:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *degree_level='\0'; return FALSE; } return TRUE; } static void delcolr(void) { EXEC SQL DELETE FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid; POSTORA; } static int check_old_degs_code(int mode) { EXEC SQL DECLARE cursor_022 CURSOR FOR SELECT 'Y' FROM STVDEGS WHERE :ask_old_degs_code_var = STVDEGS_CODE; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_022; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_022; POSTORA; } EXEC SQL FETCH cursor_022 INTO :valid_ind:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *valid_ind='\0'; return FALSE; } return TRUE; } static int check_new_degs_code(int mode) { EXEC SQL DECLARE cursor_023 CURSOR FOR SELECT 'Y' FROM STVDEGS WHERE :ask_new_degs_code_var = STVDEGS_CODE; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_023; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_023; POSTORA; } EXEC SQL FETCH cursor_023 INTO :valid_ind:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *valid_ind='\0'; return FALSE; } return TRUE; } static int check_stdnt_status(int mode) { EXEC SQL DECLARE cursor_024 CURSOR FOR SELECT 'Y' FROM STVSTST WHERE :ask_stdnt_status_var = STVSTST_CODE; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_024; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_024; POSTORA; } EXEC SQL FETCH cursor_024 INTO :valid_ind:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *valid_ind='\0'; return FALSE; } return TRUE; } static int check_stdnt_term(int mode) { EXEC SQL DECLARE cursor_025 CURSOR FOR SELECT 'Y' FROM STVTERM WHERE :ask_stdnt_term_var = STVTERM_CODE; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_025; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_025; POSTORA; } EXEC SQL FETCH cursor_025 INTO :valid_ind:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *valid_ind='\0'; return FALSE; } return TRUE; } static void lock_shrdgmr(void) { EXEC SQL EXECUTE BEGIN SB_LEARNEROUTCOME.P_LOCK( p_PIDM =>:pidm, p_SEQ_NO =>:seq_no, p_ROWID_INOUT =>:shrdgmr_rowid); END; END-EXEC; POSTORA; } static void lock_sgbstdn(void) { EXEC SQL EXECUTE BEGIN SB_LEARNER.P_LOCK( p_PIDM =>:pidm, p_TERM_CODE_EFF =>:eff_term, p_ROWID_INOUT =>:sgbstdn_rowid); END; END-EXEC; POSTORA; } /* ******************************************************************* */ /* Standard select macros */ /* ******************************************************************* */ /* Get current date */ static int seldate(int mode) { EXEC SQL DECLARE cursor_026 CURSOR FOR SELECT TO_CHAR(SYSDATE,G$_DATE.GET_NLS_DATE_FORMAT) FROM DUAL; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_026; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_026; POSTORA; } EXEC SQL FETCH cursor_026 INTO :date:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *date='\0'; return FALSE; } return TRUE; } /* Get installation name from installation table */ static int selinst(int mode) { EXEC SQL DECLARE cursor_027 CURSOR FOR SELECT GUBINST_NAME FROM GUBINST; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_027; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_027; POSTORA; } EXEC SQL FETCH cursor_027 INTO :installation:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *installation='\0'; return FALSE; } return TRUE; } /* Get title of report from report table */ static int seltitle(int mode) { EXEC SQL DECLARE cursor_028 CURSOR FOR SELECT GJBJOBS_TITLE FROM GJBJOBS WHERE GJBJOBS_NAME = UPPER(:rptname); if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_028; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_028; POSTORA; } EXEC SQL FETCH cursor_028 INTO :title_var:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *title_var='\0'; return FALSE; } return TRUE; } /* ******************************************************************* */ /* Application related select macros */ /* ******************************************************************* */ /* Macro WITHOUT Population Selection which is used in report statement */ /* to drive report. */ static int selmacro(int mode) { EXEC SQL DECLARE cursor_029 CURSOR FOR SELECT SPRIDEN_PIDM, SPRIDEN_ID, SPRIDEN_LAST_NAME || ', ' || SPRIDEN_FIRST_NAME || ' ' || SPRIDEN_MI, SHRDGMR_SEQ_NO, SHRDGMR_DEGC_CODE, SHRDGMR_CAMP_CODE, SHRDGMR_LEVL_CODE, SHRDGMR_TERM_CODE_GRAD, SHRDGMR_ACYR_CODE, SHRDGMR_GRST_CODE, SHRDGMR_TERM_CODE_STUREC, shrdgmr.rowid FROM SPRIDEN, SHRDGMR WHERE SPRIDEN_CHANGE_IND IS NULL AND SPRIDEN_PIDM = SHRDGMR_PIDM AND SHRDGMR_DEGS_CODE = :old_degs_code AND (SHRDGMR_CAMP_CODE = :campus OR :campus IS NULL) AND (SHRDGMR_LEVL_CODE IN (SELECT COALESCE(SUBSTR(SPRCOLR_VALUE_ATYP,1,2),'#') FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid AND SPRCOLR_TYPE = 'L') OR :degree_level_all_ind = 'Y') AND (SHRDGMR_DEGC_CODE IN (SELECT COALESCE(SUBSTR(SPRCOLR_VALUE_ATYP,1,6),'#') FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid AND SPRCOLR_TYPE = 'D') OR :degree_code_all_ind = 'Y') AND (SHRDGMR_GRST_CODE = :grad_stat OR :grad_stat IS NULL) AND (SHRDGMR_ACYR_CODE = :grad_year OR :grad_year IS NULL) AND (SHRDGMR_TERM_CODE_GRAD IN (SELECT COALESCE(SUBSTR(SPRCOLR_VALUE_ATYP,1,6),'#') FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid AND SPRCOLR_TYPE = 'T') OR :grad_term_all_ind = 'Y') ORDER BY SPRIDEN_LAST_NAME, SPRIDEN_FIRST_NAME, SPRIDEN_MI, SPRIDEN_ID; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_029; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_029; POSTORA; } EXEC SQL FETCH cursor_029 INTO :pidm:Ind_01, :person_id:Ind_02, :person_name:Ind_03, :seq_no:Ind_04, :degc_code:Ind_05, :camp_code:Ind_06, :levl_code:Ind_07, :term_code_grad:Ind_08, :acyr_code:Ind_09, :grst_code:Ind_10, :term_sturec:Ind_11, :shrdgmr_rowid:Ind_12; POSTORA; if ( NO_ROWS_FOUND ) { *pidm='\0'; *person_id='\0'; *person_name='\0'; *seq_no='\0'; *degc_code='\0'; *camp_code='\0'; *levl_code='\0'; *term_code_grad='\0'; *acyr_code='\0'; *grst_code='\0'; *term_sturec='\0'; *shrdgmr_rowid='\0'; return FALSE; } return TRUE; } /* Macro WITH Population Selection which is used in report statement */ /* to drive report. */ static int selmacro_ps(int mode) { EXEC SQL DECLARE cursor_030 CURSOR FOR SELECT SPRIDEN_PIDM, SPRIDEN_ID, SPRIDEN_LAST_NAME || ', ' || SPRIDEN_FIRST_NAME || ' ' || SPRIDEN_MI, SHRDGMR_SEQ_NO, SHRDGMR_DEGC_CODE, SHRDGMR_CAMP_CODE, SHRDGMR_LEVL_CODE, SHRDGMR_TERM_CODE_GRAD, SHRDGMR_ACYR_CODE, SHRDGMR_GRST_CODE, SHRDGMR_TERM_CODE_STUREC, shrdgmr.rowid FROM SPRIDEN, SHRDGMR WHERE SPRIDEN_CHANGE_IND IS NULL AND (SPRIDEN_PIDM IN (SELECT TO_NUMBER(GLBEXTR_KEY) FROM GLBEXTR WHERE GLBEXTR_APPLICATION = UPPER(:ps_application) AND GLBEXTR_SELECTION = UPPER(:ps_selection) AND GLBEXTR_CREATOR_ID = UPPER(:ps_creator) AND GLBEXTR_USER_ID = gb_common.f_sct_user) OR :ps_application IS NULL) AND SPRIDEN_PIDM = SHRDGMR_PIDM AND SHRDGMR_DEGS_CODE = :old_degs_code AND (SHRDGMR_CAMP_CODE = :campus OR :campus IS NULL) AND (SHRDGMR_LEVL_CODE IN (SELECT COALESCE(SUBSTR(SPRCOLR_VALUE_ATYP,1,2),'#') FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid AND SPRCOLR_TYPE = 'L') OR :degree_level_all_ind = 'Y') AND (SHRDGMR_DEGC_CODE IN (SELECT COALESCE(SUBSTR(SPRCOLR_VALUE_ATYP,1,6),'#') FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid AND SPRCOLR_TYPE = 'D') OR :degree_code_all_ind = 'Y') AND (SHRDGMR_GRST_CODE = :grad_stat OR :grad_stat IS NULL) AND (SHRDGMR_ACYR_CODE = :grad_year OR :grad_year IS NULL) AND (SHRDGMR_TERM_CODE_GRAD IN (SELECT COALESCE(SUBSTR(SPRCOLR_VALUE_ATYP,1,6),'#') FROM SPRCOLR WHERE SPRCOLR_SESSIONID = :sessionid AND SPRCOLR_TYPE = 'T') OR :grad_term_all_ind = 'Y') ORDER BY SPRIDEN_LAST_NAME, SPRIDEN_FIRST_NAME, SPRIDEN_MI, SPRIDEN_ID; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_030; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_030; POSTORA; } EXEC SQL FETCH cursor_030 INTO :pidm:Ind_01, :person_id:Ind_02, :person_name:Ind_03, :seq_no:Ind_04, :degc_code:Ind_05, :camp_code:Ind_06, :levl_code:Ind_07, :term_code_grad:Ind_08, :acyr_code:Ind_09, :grst_code:Ind_10, :term_sturec:Ind_11, :shrdgmr_rowid:Ind_12; POSTORA; if ( NO_ROWS_FOUND ) { *pidm='\0'; *person_id='\0'; *person_name='\0'; *seq_no='\0'; *degc_code='\0'; *camp_code='\0'; *levl_code='\0'; *term_code_grad='\0'; *acyr_code='\0'; *grst_code='\0'; *term_sturec='\0'; *shrdgmr_rowid='\0'; return FALSE; } return TRUE; } static int convert_uppercase(int mode) { EXEC SQL DECLARE cursor_031 CURSOR FOR SELECT UPPER(:parm_to_cap) FROM DUAL; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_031; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_031; POSTORA; } EXEC SQL FETCH cursor_031 INTO :upper_parm:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *upper_parm='\0'; EXEC SQL CLOSE cursor_031; POSTORA; return FALSE; } EXEC SQL CLOSE cursor_031; POSTORA; return TRUE; } static void update_shrdgmr(void) { if(*stdnt_status) { find_eff_term(term_sturec); if ( compare(eff_term,stdnt_term,EQS) ) { tmstrcpy(insert_ind,_TMC("N")); } else { tmstrcpy(insert_ind,_TMC("Y")); } } EXEC SQL EXECUTE DECLARE lv_learner_cur sb_learner.learner_ref; lv_learner_rec sb_learner.learner_rec; BEGIN if :insert_ind = 'Y' THEN lv_learner_cur := sb_learner.f_query_one(:pidm, :eff_term); fetch lv_learner_cur into lv_learner_rec; sb_learner.P_CREATE( p_PIDM =>:pidm, p_TERM_CODE_EFF =>:term_sturec, p_STST_CODE =>lv_learner_rec.r_stst_code, p_STYP_CODE =>lv_learner_rec.r_STYP_CODE, p_EXP_GRAD_DATE =>lv_learner_rec.r_EXP_GRAD_DATE, p_FULL_PART_IND =>lv_learner_rec.r_FULL_PART_IND, p_SESS_CODE =>lv_learner_rec.r_SESS_CODE, p_RESD_CODE =>lv_learner_rec.r_RESD_CODE, p_ORSN_CODE =>lv_learner_rec.r_ORSN_CODE, p_PRAC_CODE =>lv_learner_rec.r_PRAC_CODE, p_ADVR_PIDM =>lv_learner_rec.r_ADVR_PIDM, p_GRAD_CREDIT_APPR_IND =>lv_learner_rec.r_GRAD_CREDIT_APPR_IND, p_CAPL_CODE =>lv_learner_rec.r_CAPL_CODE, p_LEAV_CODE =>lv_learner_rec.r_LEAV_CODE, p_LEAV_FROM_DATE =>lv_learner_rec.r_LEAV_FROM_DATE, p_LEAV_TO_DATE =>lv_learner_rec.r_LEAV_TO_DATE, p_ASTD_CODE =>'', p_TERM_CODE_ASTD =>'', p_RATE_CODE =>lv_learner_rec.r_RATE_CODE, p_EDLV_CODE =>lv_learner_rec.r_EDLV_CODE, p_INCM_CODE =>lv_learner_rec.r_INCM_CODE, p_EMEX_CODE =>lv_learner_rec.r_EMEX_CODE, p_APRN_CODE =>lv_learner_rec.r_APRN_CODE, p_TRCN_CODE =>lv_learner_rec.r_TRCN_CODE, p_GAIN_CODE =>lv_learner_rec.r_GAIN_CODE, p_VOED_CODE =>lv_learner_rec.r_VOED_CODE, p_BLCK_CODE =>lv_learner_rec.r_BLCK_CODE, p_TERM_CODE_GRAD =>lv_learner_rec.r_TERM_CODE_GRAD, p_ACYR_CODE =>lv_learner_rec.r_ACYR_CODE, p_SITE_CODE =>lv_learner_rec.r_SITE_CODE, p_EGOL_CODE =>lv_learner_rec.r_EGOL_CODE, p_DEGC_CODE_DUAL =>lv_learner_rec.r_DEGC_CODE_DUAL, p_LEVL_CODE_DUAL =>lv_learner_rec.r_LEVL_CODE_DUAL, p_DEPT_CODE_DUAL =>lv_learner_rec.r_DEPT_CODE_DUAL, p_COLL_CODE_DUAL =>lv_learner_rec.r_COLL_CODE_DUAL, p_MAJR_CODE_DUAL =>lv_learner_rec.r_MAJR_CODE_DUAL, p_BSKL_CODE =>lv_learner_rec.r_BSKL_CODE, p_DATA_ORIGIN => gb_common.DATA_ORIGIN, p_USER_ID => gb_common.f_sct_user, p_SCPC_CODE => lv_learner_rec.r_SCPC_CODE, p_ROWID_OUT => :sgbstdn_rowid ) ; close lv_learner_cur; END IF; Sb_learneroutcome.p_update ( P_PIDM => :pidm, P_SEQ_NO => :seq_no, P_DEGS_CODE => :new_degs_code, P_USER_ID => gb_common.f_sct_user , P_DATA_ORIGIN => gb_common.DATA_ORIGIN, P_ROWID => :shrdgmr_rowid ); soklcur.p_push_degree_curriculum( p_pidm => :pidm, p_term_code => :term_sturec , p_keyseqno => :seq_no, p_degs_code => :new_degs_code ) ; /* 8.5.6 */ IF :stdnt_status is NOT NULL THEN soklcur.p_create_sotvcur(p_pidm => :pidm, p_term_code => :term_sturec, p_lmod_code => sb_curriculum_str.f_learner); soklcur.p_push_learner_curriculum(p_pidm => :pidm, p_term_code => :term_sturec, p_stst_code => :stdnt_status); END IF; soklcur.p_backload_curr(sb_curriculum_str.f_learner, :term_sturec, 99, :pidm); END; END-EXEC; if (POSTORA_API) { tmprintf (&tmBundle, TM_NLS_Get("0026","Update of SHRDGMR for ID: {0} may not have been sucessfull.\n"),person_id); tmfflush(tmstdout); tmprintf(&tmBundle, TM_NLS_Get("0027"," API generated errors: ")); for(j = 0; j < api_error_count; j++) tmprintf(&tmBundle, _TMC("{0} "), api_error_list[j]); tmprintf(&tmBundle, _TMC("\n")); tmfflush(tmstdout); } } static void find_eff_term(TMCHAR parm_term_code[7]) { EXEC SQL DECLARE cursor_032 CURSOR FOR SELECT SGBSTDN_TERM_CODE_EFF, sgbstdn.rowid FROM SGBSTDN where SGBSTDN_PIDM = TO_NUMBER(:pidm) and SGBSTDN_TERM_CODE_EFF = ( select max(x.sgbstdn_term_code_eff) from sgbstdn x where x.sgbstdn_pidm = to_number(:pidm) and x.sgbstdn_term_code_eff <= :parm_term_code ); EXEC SQL OPEN cursor_032; POSTORA; EXEC SQL FETCH cursor_032 INTO :eff_term:Ind_01, :sgbstdn_rowid:Ind_02; POSTORA; if ( NO_ROWS_FOUND ) { *eff_term='\0'; *sgbstdn_rowid='\0'; } EXEC SQL CLOSE cursor_032; POSTORA; } /* Create SGBSTDN record for new effective term */ static void insert_sgbstdn(void) { EXEC SQL EXECUTE DECLARE lv_learner_rec sb_learner.learner_rec; lv_learner_cur sb_learner.learner_ref; /* 8.5.6 */ lv_curriculum_rec sb_curriculum.curriculum_rec; lv_curric_ref sb_curriculum.curriculum_ref; Lv_fieldofstudy_rec sb_fieldofstudy.fieldofstudy_rec; Lv_fieldofstudy_cur sb_fieldofstudy.fieldofstudy_ref; lfos_rowid VARCHAR2(18); lv_lcur_seqno sorlcur.sorlcur_seqno%type; lfos_seqno sorlfos.sorlfos_seqno%type; severity_level VARCHAR2(1) := NULL; curr_err NUMBER := NULL; BEGIN lv_learner_cur := sb_learner.f_query_one(:pidm, :eff_term); fetch lv_learner_cur into lv_learner_rec; sb_learner.P_CREATE( p_PIDM =>:pidm, p_TERM_CODE_EFF =>:stdnt_term, p_STST_CODE =>:stdnt_status, p_STYP_CODE =>lv_learner_rec.r_STYP_CODE, p_EXP_GRAD_DATE =>lv_learner_rec.r_EXP_GRAD_DATE, p_FULL_PART_IND =>lv_learner_rec.r_FULL_PART_IND, p_SESS_CODE =>lv_learner_rec.r_SESS_CODE, p_RESD_CODE =>lv_learner_rec.r_RESD_CODE, p_ORSN_CODE =>lv_learner_rec.r_ORSN_CODE, p_PRAC_CODE =>lv_learner_rec.r_PRAC_CODE, p_ADVR_PIDM =>lv_learner_rec.r_ADVR_PIDM, p_GRAD_CREDIT_APPR_IND =>lv_learner_rec.r_GRAD_CREDIT_APPR_IND, p_CAPL_CODE =>lv_learner_rec.r_CAPL_CODE, p_LEAV_CODE =>lv_learner_rec.r_LEAV_CODE, p_LEAV_FROM_DATE =>lv_learner_rec.r_LEAV_FROM_DATE, p_LEAV_TO_DATE =>lv_learner_rec.r_LEAV_TO_DATE, p_ASTD_CODE =>'', p_TERM_CODE_ASTD =>'', p_RATE_CODE =>lv_learner_rec.r_RATE_CODE, p_EDLV_CODE =>lv_learner_rec.r_EDLV_CODE, p_INCM_CODE =>lv_learner_rec.r_INCM_CODE, p_EMEX_CODE =>lv_learner_rec.r_EMEX_CODE, p_APRN_CODE =>lv_learner_rec.r_APRN_CODE, p_TRCN_CODE =>lv_learner_rec.r_TRCN_CODE, p_GAIN_CODE =>lv_learner_rec.r_GAIN_CODE, p_VOED_CODE =>lv_learner_rec.r_VOED_CODE, p_BLCK_CODE =>lv_learner_rec.r_BLCK_CODE, p_TERM_CODE_GRAD =>lv_learner_rec.r_TERM_CODE_GRAD, p_ACYR_CODE =>lv_learner_rec.r_ACYR_CODE, p_SITE_CODE =>lv_learner_rec.r_SITE_CODE, p_EGOL_CODE =>lv_learner_rec.r_EGOL_CODE, p_DEGC_CODE_DUAL =>lv_learner_rec.r_DEGC_CODE_DUAL, p_LEVL_CODE_DUAL =>lv_learner_rec.r_LEVL_CODE_DUAL, p_DEPT_CODE_DUAL =>lv_learner_rec.r_DEPT_CODE_DUAL, p_COLL_CODE_DUAL =>lv_learner_rec.r_COLL_CODE_DUAL, p_MAJR_CODE_DUAL =>lv_learner_rec.r_MAJR_CODE_DUAL, p_BSKL_CODE =>lv_learner_rec.r_BSKL_CODE, p_DATA_ORIGIN => gb_common.DATA_ORIGIN, p_USER_ID => gb_common.f_sct_user, p_SCPC_CODE => lv_learner_rec.r_SCPC_CODE, p_ROWID_OUT => :sgbstdn_rowid ) ; close lv_learner_cur; /* 8.5.6 */ lv_curric_ref := sb_curriculum.f_query_current (p_pidm => :pidm, p_lmod_code => sb_curriculum_str.f_learner, p_term_code => :stdnt_term, p_active_ind => 'Y', p_eff_term => :stdnt_term, p_keyseqno => 99); LOOP fetch lv_curric_ref into lv_curriculum_rec; exit when lv_curric_ref%notfound; if lv_curriculum_rec.r_term_code = :stdnt_term then goto curric_done; end if; SB_CURRICULUM.P_CREATE(P_PIDM => :pidm, P_SEQNO => NULL, P_LMOD_CODE => sb_curriculum_str.f_learner, P_TERM_CODE => :stdnt_term, P_KEY_SEQNO => 99, P_PRIORITY_NO => lv_curriculum_rec.r_priority_no, P_ROLL_IND => lv_curriculum_rec.r_roll_ind, P_CACT_CODE => '', P_USER_ID => gb_common.f_sct_user, P_DATA_ORIGIN => gb_common.data_origin, P_LEVL_CODE => lv_curriculum_rec.r_levl_code, P_COLL_CODE => lv_curriculum_rec.r_coll_code, P_DEGC_CODE => lv_curriculum_rec.r_degc_code, P_TERM_CODE_CTLG => lv_curriculum_rec.r_term_code_ctlg, P_CAMP_CODE => lv_curriculum_rec.r_camp_code, P_PROGRAM => lv_curriculum_rec.r_program, P_TERM_CODE_MATRIC => lv_curriculum_rec.r_term_code_matric, P_TERM_CODE_ADMIT => lv_curriculum_rec.r_term_code_admit, P_ADMT_CODE => lv_curriculum_rec.r_admt_code, P_CURR_RULE => lv_curriculum_rec.r_curr_rule, P_site_code => lv_curriculum_rec.r_site_code, P_rate_code => lv_curriculum_rec.r_rate_code, P_leav_code => lv_curriculum_rec.r_leav_code, P_leav_from_date => lv_curriculum_rec.r_leav_from_date, P_leav_to_date => lv_curriculum_rec.r_leav_to_date, P_acyr_code => lv_curriculum_rec.r_acyr_code, P_term_code_grad => lv_curriculum_rec.r_term_code_grad, P_exp_grad_date => lv_curriculum_rec.r_exp_grad_date, P_styp_code => lv_curriculum_rec.r_styp_code, P_appl_key_seqno => null, P_appl_seqno => null, p_rolled_seqno => null, P_ROWID_OUT => lfos_rowid, P_CURR_ERROR_OUT => curr_err, p_seqno_out => lv_lcur_seqno, P_override_severity => 'N', p_severity_out => severity_level); lv_fieldofstudy_cur := sb_fieldofstudy.f_query_current (p_pidm => :pidm, p_lcur_seqno => lv_curriculum_rec.r_seqno, p_active_ind => 'Y'); LOOP FETCH lv_fieldofstudy_cur INTO lv_fieldofstudy_rec; EXIT WHEN lv_fieldofstudy_cur%NOTFOUND ; SB_FIELDOFSTUDY.P_CREATE(P_PIDM => :pidm, P_LCUR_SEQNO => lv_lcur_seqno, P_SEQNO => NULL, P_LFST_CODE => lv_fieldofstudy_rec.r_lfst_code, P_TERM_CODE => :stdnt_term, P_PRIORITY_NO => lv_fieldofstudy_rec.r_priority_no, P_CSTS_CODE => '', P_CACT_CODE => '', P_DATA_ORIGIN => gb_common.data_origin, P_USER_ID => gb_common.f_sct_user, P_MAJR_CODE => lv_fieldofstudy_rec.r_majr_code, P_DEPT_CODE => lv_fieldofstudy_rec.r_dept_code, P_TERM_CODE_CTLG => lv_fieldofstudy_rec.r_term_code_ctlg, P_LFOS_RULE => lv_fieldofstudy_rec.r_lfos_rule, P_CONC_ATTACH_RULE => lv_fieldofstudy_rec.r_conc_attach_rule, p_rolled_seqno => null, p_term_code_end => lv_fieldofstudy_rec.r_term_code_end, p_start_date => lv_fieldofstudy_rec.r_start_date, p_end_date => lv_fieldofstudy_rec.r_end_date, p_tmst_code => lv_fieldofstudy_rec.r_tmst_code, p_majr_code_attach => lv_fieldofstudy_rec.r_majr_code_attach, P_ROWID_OUT => lfos_rowid, P_CURR_ERROR_OUT => curr_err, P_override_severity => 'N', p_severity_out => severity_level, p_lfos_seqno_out => lfos_seqno); END LOOP; CLOSE lv_fieldofstudy_cur; <> null; END LOOP; close lv_curric_ref; soklcur.p_create_sotvcur(p_pidm => :pidm, p_term_code => :stdnt_term, p_lmod_code => sb_curriculum_str.f_learner); /* 8.5.6 */ /* soklcur.p_push_learner_curriculum(p_pidm => :pidm, p_term_code => :stdnt_term, p_stst_code => :stdnt_status); */ soklcur.p_backload_curr(sb_curriculum_str.f_learner, :stdnt_term, 99, :pidm); END; END-EXEC; if (POSTORA_API) { tmprintf (&tmBundle, TM_NLS_Get("0028","Insert of SGBSTDN for ID: {0} may not have been sucessfull.\n"),person_id); tmfflush(tmstdout); tmprintf(&tmBundle, TM_NLS_Get("0029"," API generated errors: ")); for(j = 0; j < api_error_count; j++) tmprintf(&tmBundle, _TMC("{0} "), api_error_list[j]); tmprintf(&tmBundle, _TMC("\n")); tmfflush(tmstdout); } } /* Update student status for effective term = parameter term */ static void update_sgbstdn(void) { EXEC SQL EXECUTE BEGIN sb_learner.p_update ( P_PIDM => :pidm, P_TERM_CODE_EFF => :eff_term, P_STST_CODE => :stdnt_status, P_USER_ID => gb_common.f_sct_user, P_DATA_ORIGIN => gb_common.DATA_ORIGIN, P_ROWID => :sgbstdn_rowid); /* 8.5.6 */ /* soklcur.p_create_sotvcur(p_pidm => :pidm, p_term_code => :stdnt_term, p_lmod_code => sb_curriculum_str.f_learner); soklcur.p_push_learner_curriculum(p_pidm => :pidm, p_term_code => :stdnt_term, p_stst_code => :stdnt_status); */ soklcur.p_backload_curr(sb_curriculum_str.f_learner, :stdnt_term, 99, :pidm); END; END-EXEC; if (POSTORA_API) { tmprintf (&tmBundle, TM_NLS_Get("0030","Update of SGBSTDN for ID: {0} may not have been sucessfull.\n"),person_id); tmfflush(tmstdout); tmprintf(&tmBundle, TM_NLS_Get("0031"," API generated errors: ")); for(j = 0; j < api_error_count; j++) tmprintf(&tmBundle, _TMC("{0} "), api_error_list[j]); tmprintf(&tmBundle, _TMC("\n")); tmfflush(tmstdout); } } static int get_old_degs_desc(int mode) { EXEC SQL DECLARE cursor_033 CURSOR FOR SELECT STVDEGS_DESC FROM STVDEGS WHERE :old_degs_code = STVDEGS_CODE; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_033; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_033; POSTORA; } EXEC SQL FETCH cursor_033 INTO :old_degs_desc:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *old_degs_desc='\0'; return FALSE; } return TRUE; } static int get_new_degs_desc(int mode) { EXEC SQL DECLARE cursor_034 CURSOR FOR SELECT STVDEGS_DESC FROM STVDEGS WHERE :new_degs_code = STVDEGS_CODE; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_034; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_034; POSTORA; } EXEC SQL FETCH cursor_034 INTO :new_degs_desc:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *new_degs_desc='\0'; return FALSE; } return TRUE; } static void get_subtitle(void) { get_degree_subtitle(FIRST_ROW); get_degree_subtitle(CLOSE_CURSOR); if ( !*stdnt_status ) return; get_stdnt_status_desc(FIRST_ROW); get_stdnt_status_desc(CLOSE_CURSOR); get_student_subtitle(FIRST_ROW); get_student_subtitle(CLOSE_CURSOR); } static int get_degree_subtitle(int mode) { EXEC SQL DECLARE cursor_035 CURSOR FOR SELECT DECODE(:rpt_mode,'A','AUDIT','U','UPDATE') || ' MODE - ' || 'FROM: ' || :old_degs_desc || ' TO: ' || :new_degs_desc FROM DUAL; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_035; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_035; POSTORA; } EXEC SQL FETCH cursor_035 INTO :subtitle:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *subtitle='\0'; return FALSE; } return TRUE; } static int get_stdnt_status_desc(int mode) { EXEC SQL DECLARE cursor_036 CURSOR FOR SELECT STVSTST_DESC FROM STVSTST WHERE :stdnt_status = STVSTST_CODE; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_036; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_036; POSTORA; } EXEC SQL FETCH cursor_036 INTO :stdnt_status_desc:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *stdnt_status_desc='\0'; return FALSE; } return TRUE; } static int get_student_subtitle(int mode) { EXEC SQL DECLARE cursor_037 CURSOR FOR SELECT :subtitle || '; STUDENT TO: ' || :stdnt_status_desc FROM DUAL; if ( mode==CLOSE_CURSOR ) { EXEC SQL CLOSE cursor_037; POSTORA; return TRUE; } if ( mode==FIRST_ROW ) { EXEC SQL OPEN cursor_037; POSTORA; } EXEC SQL FETCH cursor_037 INTO :subtitle:Ind_01; POSTORA; if ( NO_ROWS_FOUND ) { *subtitle='\0'; return FALSE; } return TRUE; } /* ******************************************************************* */ /* Procedural macros */ /* ******************************************************************* */ /* Parameter value reads */ static void retrieve_parms(void) { read_ps_application(FIRST_ROW); read_ps_application(CLOSE_CURSOR); if ( *ps_application ) add(ps_parm_count,ps_parm_count,_TMC("1")); tmstrcpy(parm_to_cap,ps_application); convert_uppercase(FIRST_ROW); tmstrcpy(ps_application,upper_parm); read_ps_selection(FIRST_ROW); read_ps_selection(CLOSE_CURSOR); if ( *ps_application ) add(ps_parm_count,ps_parm_count,_TMC("1")); tmstrcpy(parm_to_cap,ps_selection); convert_uppercase(FIRST_ROW); tmstrcpy(ps_selection,upper_parm); read_ps_creator(FIRST_ROW); read_ps_creator(CLOSE_CURSOR); if ( *ps_creator ) add(ps_parm_count,ps_parm_count,_TMC("1")); tmstrcpy(parm_to_cap,ps_creator); convert_uppercase(FIRST_ROW); tmstrcpy(ps_creator,upper_parm); read_rpt_term(FIRST_ROW); read_rpt_mode(FIRST_ROW); read_old_degs_code(FIRST_ROW); read_new_degs_code(FIRST_ROW); report(read_grad_term,insert_grad_term,NULL,NULL); read_grad_year(FIRST_ROW); read_grad_stat(FIRST_ROW); report(read_degree_code,insert_degree_code,NULL,NULL); read_campus(FIRST_ROW); report(read_degree_level,insert_degree_level,NULL,NULL); read_stdnt_status(FIRST_ROW); read_stdnt_term(FIRST_ROW); read_line_count(FIRST_ROW); if ( *linelimit ) goto del_parms_lbl; tmstrcpy(linelimit,_TMC("55")); del_parms_lbl: del_parms(); } /* Head macro executes after the first row is read. The heading information */ /* is printed and then the first row is processed. */ static void head(void) { header(); sub_header(); body(); } /* Heading information */ static void header(void) { table(T_BEGIN,2); prtstr(date); prtstr(time_var); newcol(); setmode(M_CENTER); prtstr(installation); newcol(); prtstr(TM_NLS_Get("0032","PAGE")); add(pageno,pageno,one); prtnum(pageno,_TMC("99999")); newcol(); prtstr(rpt_term); newcol(); setmode(M_CENTER); prtstr(title_var); newcol(); prtstr(rptname); table(T_END); table(T_BEGIN,1); setmode(M_CENTER); prtstr(subtitle); skipline(1); table(T_END); /* Set line number equal to number of lines in heading */ tmstrcpy(lineno,_TMC("4")); } static void sub_header(void) { table(T_BEGIN,3); setmode(M_CENTER); prtstr(TM_NLS_Get("0033","ID")); newcol(); setmode(M_CENTER); prtstr(TM_NLS_Get("0034","NAME")); newcol(); prtstr(TM_NLS_Get("0035","DEGREE")); newcol(); prtstr(TM_NLS_Get("0036","CAMPUS")); newcol(); prtstr(TM_NLS_Get("0037","LEVEL")); newcol(); prtstr(TM_NLS_Get("0038","GRAD TERM")); newcol(); prtstr(TM_NLS_Get("0039","GRAD YEAR")); newcol(); prtstr(TM_NLS_Get("0040","GRAD STATUS")); table(T_END); } /* Print body of report */ static void body(void) { add(lineno,lineno,one); add(count,count,one); if ( compare(lineno,linelimit,LT) ) goto samepage; newpage(); header(); sub_header(); add(lineno,lineno,one); samepage: table(T_BEGIN,3); prtstr(person_id); newcol(); prtstr(person_name); newcol(); prtstr(degc_code); newcol(); setmode(M_CENTER); prtstr(camp_code); newcol(); setmode(M_CENTER); prtstr(levl_code); newcol(); setmode(M_CENTER); prtstr(term_code_grad); newcol(); setmode(M_CENTER); prtstr(acyr_code); newcol(); setmode(M_CENTER); prtstr(grst_code); table(T_END); /* Do not perform updates if audit mode. */ /* Lock tables first time and after commit. */ if ( compare(rpt_mode,_TMC("A"),EQS) ) return; add(chkpnt_cnt,chkpnt_cnt,_TMC("1")); /* convert the curriculum rows before processing person */ exec sql execute declare learner_conversion varchar2(1) := ''; outcome_conversion varchar2(1) := ''; begin learner_conversion := soklcur.f_convert_learner(:pidm); outcome_conversion := soklcur.f_convert_outcome(:pidm); if learner_conversion = 'Y' or outcome_conversion = 'Y' then gb_common.p_commit(); end if; end; end-exec; POSTORA; /* if ( compare(chkpnt_cnt,"1",NE) ) goto update_degree; */ /* api locks for the specific shrdgmr row being updated */ lock_shrdgmr(); /* update_degree: */ tmfflush(tmstdout); update_shrdgmr(); tmfflush(tmstdout); if ( !*stdnt_status ) goto commit_recs; tmstrcpy(eff_term,_TMC("")); find_eff_term(stdnt_term); tmfflush(tmstdout); /*if ( compare(chkpnt_cnt,"1",NE) ) goto update_student; */ /* api locks for the specific sgbstdn row being updated */ lock_sgbstdn(); /*update_student:*/ if ( compare(eff_term,stdnt_term,EQS) ) goto update_rec; insert_sgbstdn(); goto commit_recs; update_rec: update_sgbstdn(); commit_recs: if ( compare(chkpnt_cnt,chkpnt_limit,LT) ) return; /***** API Replaced EXEC SQL COMMIT; POSTORA; */ EXEC SQL EXECUTE BEGIN gb_common.p_commit(); END; END-EXEC; POSTORA; tmstrcpy(chkpnt_cnt,_TMC("0")); } /* ******************************************************************* */ /* Print foot of report after all rows have been processed. */ /* Foot should contain at least all user defined parameters */ /* and a count of processed records. */ /* ******************************************************************* */ static void foot(void) { newpage(); header(); setmode(M_CENTER); prtstr(TM_NLS_Get("0041","* * * REPORT CONTROL INFORMATION -")); prtstr(rptname); prtstr(TM_NLS_Get("0042","- Release 8.21 * * *")); setmode(M_NORMAL); skipline(1); prtstr(TM_NLS_Get("0043","RPTNAME:")); prtstr(rptname); newline(); skipline(1); if ( !*ps_application ) goto popsel_not_used; prtstr(TM_NLS_Get("0044","APPLICATION CODE:")); prtstr(ps_application); newline(); prtstr(TM_NLS_Get("0045","SELECTION IDENTIFIER:")); prtstr(ps_selection); newline(); prtstr(TM_NLS_Get("0046","CREATOR ID:")); prtstr(ps_creator); newline(); goto parm4; popsel_not_used: prtstr(TM_NLS_Get("0047","*** POPULATION SELECTION WAS NOT USED ***")); newline(); skipline(1); parm4: prtstr(TM_NLS_Get("0048","AUDIT OR UPDATE MODE :")); prtstr(rpt_mode); newline(); prtstr(TM_NLS_Get("0049","CURRENT DEGREE STATUS:")); prtstr(old_degs_code); newline(); prtstr(TM_NLS_Get("0050","NEW DEGREE STATUS\\ \\ \\ \\ :")); prtstr(new_degs_code); newline(); prtstr(TM_NLS_Get("0051","GRADUATION TERM\\ \\ :")); report(get_grad_term,print_grad_term,NULL,NULL); newline(); prtstr(TM_NLS_Get("0052","GRADUATION YEAR\\ \\ :")); prtstr(grad_year); newline(); prtstr(TM_NLS_Get("0053","GRADUATION STATUS:")); prtstr(grad_stat); newline(); prtstr(TM_NLS_Get("0054","DEGREE CODE\\ \\ :")); report(get_degree_code,print_degree_code,NULL,NULL); newline(); prtstr(TM_NLS_Get("0055","DEGREE CAMPUS:")); prtstr(campus); newline(); prtstr(TM_NLS_Get("0056","DEGREE LEVEL :")); report(get_degree_level,print_degree_level,NULL,NULL); newline(); prtstr(TM_NLS_Get("0057","NEW STUDENT STATUS:")); prtstr(stdnt_status); newline(); prtstr(TM_NLS_Get("0058","STATUS EFFECTIVE TERM:")); prtstr(stdnt_term); newline(); /* Check for errors */ if ( compare(parm_error,_TMC("N"),EQS) ) goto foot_done; if ( compare(parm_error,_TMC("I"),EQS) ) goto invalid_one_up; if ( compare(parm_error,_TMC("P"),EQS) ) goto ps_error; /* FYI - &PARM_ERROR = 'M' */ prtstr(TM_NLS_Get("0059","Required parameter")); prtnum(parm_no,_TMC("99")); prtstr(TM_NLS_Get("0060","is missing, aborting job")); newline(); skipline(1); goto foot_done; invalid_one_up: prtstr(TM_NLS_Get("0061","Parameter sequence number")); prtnum(rpt_one_up_no,_TMC("99999999")); prtstr(TM_NLS_Get("0062","is invalid, aborting job")); newline(); skipline(1); goto foot_done; ps_error: prtstr(TM_NLS_Get("0063","Population selection parmameter(s) missing, aborting job")); newline(); skipline(1); foot_done: prtstr(TM_NLS_Get("0064","RECORD COUNT:")); prtnum(count,_TMC("9999990")); } static void print_grad_term(void) { prtstr(grad_term); } static void print_degree_code(void) { prtstr(degree_code); } static void print_degree_level(void) { prtstr(degree_level); }