/[vdw]/trunk/WOU_SIS_Util.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Annotation of /trunk/WOU_SIS_Util.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (hide annotations)
Sun Feb 6 05:28:38 2005 UTC (19 years, 3 months ago) by dpavlin
File size: 11556 byte(s)
initial import into svn

1 dpavlin 1 package WOU_SIS_Util;
2    
3     # Banner SIS Utilities
4     #
5     # Subs in this package that use DBI expect to be passed a database handle
6     # ($dbh) that has been granted the appropriate roles by WOU_Secure.pm.
7     #
8     # Jeremy Hickerson, 3/15/2002
9    
10     use strict;
11    
12     BEGIN {
13     use Exporter ();
14     use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
15    
16     # set the version for version checking
17     $VERSION = 1.00;
18     @ISA = qw(Exporter);
19     @EXPORT = qw(&xtvxxxx_desc &pass_cobol_params &db_login
20     &already_sent_letter &term_acyr &ahist_level &term_last_year
21     &date_last_year &state_name &like2re &ssn2pidm &vnum2pidm
22     &next_fall);
23     %EXPORT_TAGS = ( ); # eg: TAG => [ qw!name1 name2! ],
24     @EXPORT_OK = qw( );
25    
26     ( grep /gen\$com/i, @INC ) || unshift @INC, "gen\$com";
27     }
28    
29     use vars @EXPORT_OK;
30     use subs qw(xtvxxxx_desc pass_cobol_params db_login already_sent_letter
31     term_acyr ahist_level term_last_year date_last_year state_name like2re
32     ssn2pidm vnum2pidm next_fall);
33     use DBI;
34     use WOU_Secure;
35    
36    
37     # ============================================================================
38     # Package-Level Stuff
39     # ============================================================================
40    
41     my (%glbh_sth_xtvxxxx_desc, @row);
42    
43     my %glb_prepared_sql; # Hash that holds $sth's for prepared sql;
44     # helps performance. Entries are of the form:
45     # ( "sth_qry_acyr" => $sth_qry_acyr, ... )
46    
47     my ($sth_qry_acyr, $sth_qry_state_name, $sth_qry_ssn2pidm1, $sth_qry_ssn2pidm2,
48     $sth_qry_vnum2pidm);
49    
50    
51     # ============================================================================
52     # Routines
53     # ============================================================================
54    
55     # better (for performance) to make xtvxxxx_desc lookups available as separate
56     # routines rather than joining them in to sgbstdn, etc. Calling program
57     # can call them on (probably) smaller population.
58     sub xtvxxxx_desc {
59     my ($dbh, $tbl_name, $code) = @_;
60    
61     # make sure below only executes once per package instance per tbl_name
62     if (! exists $glbh_sth_xtvxxxx_desc{$tbl_name} ) {
63     $glbh_sth_xtvxxxx_desc{$tbl_name} = $dbh->prepare(
64     "select $tbl_name" . "_desc " .
65     "from $tbl_name where $tbl_name" . "_code = '$code'");
66     }
67    
68     ($glbh_sth_xtvxxxx_desc{$tbl_name} )->execute;
69    
70     @row = ($glbh_sth_xtvxxxx_desc{$tbl_name} )->fetchrow_array;
71    
72     if (@row) { return $row[0] }
73    
74     return "Unknown"; # fall-through, code not in xtvxxxx
75     }
76    
77    
78     sub pass_cobol_params {
79     my ($program, $uid, $passwd, $one_up_no, $rh_parms) = @_;
80    
81     my ($job, $parm_no, $parm_name);
82    
83     my $dbh = db_login($uid, $passwd, $program);
84    
85     $job = sis_object($program);
86    
87     my $sth_ins_gjbprun = $dbh->prepare( q{
88     insert into gjbprun(gjbprun_job,
89     gjbprun_one_up_no,
90     gjbprun_number,
91     gjbprun_activity_date,
92     gjbprun_value)
93     values( upper(?),
94     ?,
95     ?,
96     sysdate,
97     ? ) } );
98    
99     my $sth_ins_gjbprun_dyn = $dbh->prepare( q{
100     insert into gjbprun(gjbprun_job,
101     gjbprun_one_up_no,
102     gjbprun_number,
103     gjbprun_activity_date,
104     gjbprun_label,
105     gjbprun_value)
106     values( upper(?),
107     ?,
108     ?,
109     sysdate,
110     ?,
111     ? ) } );
112    
113     # put program params in gjbprun table
114     foreach $parm_no ( keys %{$rh_parms} ) {
115     if ($parm_no ne "88") {
116     $sth_ins_gjbprun->execute($job, $one_up_no, $parm_no,
117     $rh_parms->{$parm_no} );
118     }
119     else { # "dynamic" params
120     foreach $parm_name (keys %{$rh_parms->{$parm_no} } ) {
121     $sth_ins_gjbprun_dyn->execute(
122     $job, $one_up_no, $parm_no, $parm_name,
123     $rh_parms->{$parm_no}->{$parm_name} );
124     }
125     }
126     }
127    
128     $dbh->disconnect;
129     }
130    
131    
132     sub db_login {
133     my ($uid, $passwd, $program, $rh_params) = @_;
134    
135     my $dbh = DBI->connect("dbi:Oracle:", $uid, $passwd, $rh_params)
136     or die "$!: Can't connect to DB";
137    
138     # convert VMS full path of this file to SIS Object
139     my $sis_object = sis_object($program);
140    
141     # set security role for user in SIS Database
142     if (! gwrsecp($dbh, $sis_object) ) {
143     $dbh->disconnect;
144     die "$!: User $uid not allowed to run $sis_object";
145     }
146     return $dbh;
147     }
148    
149    
150     sub already_sent_letter {
151    
152     my ($dbh, $pidm, $term, $module, $sys_ind, $letr, $update_mail) = @_;
153    
154     my ($date_printed, $rowid);
155    
156     $update_mail = defined($update_mail) ? uc($update_mail) : "U";
157     # default is "Update"
158    
159     my $sql_qry_gurmail =
160     "select gurmail_date_printed, \
161     gurmail.rowid \
162     from gurmail \
163     where gurmail_pidm = $pidm and \
164     gurmail_term_code = '$term' and \
165     gurmail_module_code = '$module' and \
166     gurmail_system_ind = '$sys_ind' and \
167     gurmail_letr_code = '$letr'\n"; # jhjh
168    
169     my $sth_qry_gurmail = $dbh->prepare($sql_qry_gurmail);
170    
171     $sth_qry_gurmail->execute;
172    
173     my @row = $sth_qry_gurmail->fetchrow_array;
174    
175     if (@row) {
176     ($date_printed, $rowid) = @row;
177     if ($date_printed) { # already sent letter
178     return 1;
179     }
180     else {
181     if ($update_mail ne "A") { # if not "Audit" mode
182     $dbh->do("update gurmail \
183     set gurmail_date_printed = sysdate \
184     where gurmail.rowid = '$rowid'");
185     }
186     return 0;
187     }
188     }
189    
190     else {
191     if ($update_mail ne "A") { # if not "Audit" mode
192     # create gurmail record for new letter
193     $dbh->do( "\
194     INSERT INTO GURMAIL ( GURMAIL_PIDM, \
195     gurmail_term_code, \
196     gurmail_module_code, \
197     GURMAIL_SYSTEM_IND, \
198     GURMAIL_LETR_CODE, \
199     GURMAIL_DATE_INIT, \
200     GURMAIL_USER, \
201     GURMAIL_PUB_GEN, \
202     GURMAIL_ORIG_IND, \
203     GURMAIL_ACTIVITY_DATE, \
204     gurmail_date_printed) \
205     \
206     values ( $pidm, \
207     '$term', \
208     '$module', \
209     '$sys_ind', \
210     '$letr', \
211     TO_DATE(TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS'), \
212     'DD-MON-YYYY HH24:MI:SS'), \
213     USER, \
214     'G', \
215     'S', \
216     SYSDATE, \
217     sysdate)" );
218     }
219    
220     return 0;
221     }
222     }
223    
224    
225     sub term_acyr {
226     my ($dbh, $term) = @_;
227    
228     my ($acyr, @row);
229    
230     # for performance we will only prepare repeated sql once
231     if (exists $glb_prepared_sql{"sth_qry_acyr"} ) {
232     $sth_qry_acyr = $glb_prepared_sql{"sth_qry_acyr"};
233     }
234     else {
235     $sth_qry_acyr = $dbh->prepare( q{
236     select stvacyr_desc from stvacyr where stvacyr_code = ?} );
237    
238     $glb_prepared_sql{"sth_qry_acyr"} = $sth_qry_acyr;
239     }
240    
241     if (defined($term) ) {
242     $acyr = substr( substr($term, 0, 4), 2, 2);
243     $acyr .= sprintf("%.2i", $acyr + 1);
244    
245     $sth_qry_acyr->execute($acyr);
246     @row = $sth_qry_acyr->fetchrow_array;
247    
248     if (@row) {
249     return $row[0];
250     } # otherwise fall-through
251     }
252    
253     return "Unknown"; # fall-through
254     }
255    
256    
257     sub term_last_year{
258     my $term = shift;
259    
260     return (substr($term, 0, 4) - 1) . substr($term, 4, 2);
261    
262     }
263    
264    
265     sub date_last_year{
266     my $date = shift;
267     # date must be formatted mm/dd/yyyy, output will be in same format
268    
269     return substr($date, 0, 6) . (substr($date, 6, 4) - 1);
270    
271     }
272    
273    
274     sub ahist_level {
275    
276     my $level = shift;
277    
278     $level =~ s/NG|PB/GR/ || $level =~ s/PN|NU|NA/UG/;
279    
280     return $level;
281     }
282    
283    
284     sub state_name{
285     my ($dbh, $stat_code) = @_;
286    
287     my ($state_name);
288    
289     # for performance we will only prepare repeated sql once
290     if (exists $glb_prepared_sql{"sth_qry_state_name"} ) {
291     $sth_qry_state_name = $glb_prepared_sql{"sth_qry_state_name"};
292     }
293     else {
294     $sth_qry_state_name = $dbh->prepare( q{
295     select stvstat_desc from stvstat where stvstat_code = ? } );
296    
297     $glb_prepared_sql{"sth_qry_state_name"} = $sth_qry_state_name;
298     }
299    
300     $sth_qry_state_name->execute($stat_code);
301    
302     ($state_name) = $sth_qry_state_name->fetchrow_array;
303    
304     return $state_name ? $state_name : "";
305     }
306    
307    
308     sub like2re {
309    
310     my ($str, $word, $negative);
311     $negative = 0;
312    
313     # stop on LIKE for LIKE/NOT LIKE
314     while ( ($word = shift) !~ /^like$/i ) {
315     if ($word =~ /^not$/i) {
316     $negative = 1;
317     }
318     else { $str .= $word . "," } # replace whitespace w/ comma's just like the
319     # parser does
320     }
321     $str .= $word . ","; # add LIKE to $str
322    
323     $word = shift; # $word now holds the SQL LIKE expression
324    
325    
326     # if LIKE expr contains SQL % wildcard, then turn into perl reg exp
327     if ( $word =~ /'(.*%.*)'/i ) {
328    
329     $word = $1;
330     $str =~ s/like,$/=~,/i;
331    
332     $negative && ( $str =~ s/=~/!~/ );
333    
334     $word =~ s/^([^%])/\^$1/;
335     $word =~ s/([^%])$/$1\$/;
336     $word =~ s/%/\.\*/g;
337     $word = "/" . $word . "/";
338    
339     }
340    
341     # otherwise turn like into "=" ( we will turn "=" into "eq" in get_data(),
342     # this sub is used by the obj_srvr yacc parser)
343     else {
344     $str =~ s/like,$/=,/i;
345     }
346    
347     $str .= $word;
348    
349     return $str;
350    
351     }
352    
353    
354     sub ssn2pidm {
355    
356     my ($dbh, $ssn) = @_;
357    
358     my $pidm;
359    
360     # for performance we will only prepare repeated sql once
361     if (exists $glb_prepared_sql{"sth_qry_ssn2pidm1"} ) {
362     $sth_qry_ssn2pidm1 = $glb_prepared_sql{"sth_qry_ssn2pidm1"};
363     $sth_qry_ssn2pidm2 = $glb_prepared_sql{"sth_qry_ssn2pidm2"};
364     }
365     else {
366     $sth_qry_ssn2pidm1 = $dbh->prepare( q{
367     select spbpers_pidm
368     from spbpers
369     where spbpers_ssn = ? } );
370    
371     $glb_prepared_sql{"sth_qry_ssn2pidm1"} = $sth_qry_ssn2pidm1;
372    
373    
374     $sth_qry_ssn2pidm2 = $dbh->prepare( q{
375     select spriden_pidm
376     from spriden
377     where spriden_id = ? and
378     spriden_change_ind = 'I' } );
379    
380     $glb_prepared_sql{"sth_qry_ssn2pidm2"} = $sth_qry_ssn2pidm2;
381     }
382    
383     $sth_qry_ssn2pidm1->execute($ssn);
384    
385     ($pidm) = $sth_qry_ssn2pidm1->fetchrow_array;
386    
387     if ( !defined($pidm) ) {
388    
389     $sth_qry_ssn2pidm2->execute($ssn);
390    
391     ($pidm) = $sth_qry_ssn2pidm2->fetchrow_array;
392     }
393    
394     return $pidm;
395     }
396    
397    
398     sub vnum2pidm {
399    
400     my ($dbh, $vnum) = @_;
401    
402     my $pidm;
403    
404     # for performance we will only prepare repeated sql once
405     if (exists $glb_prepared_sql{"sth_qry_vnum2pidm"} ) {
406     $sth_qry_vnum2pidm = $glb_prepared_sql{"sth_qry_vnum2pidm"};
407     }
408     else {
409     $sth_qry_vnum2pidm = $dbh->prepare( q{
410     select spriden_pidm
411     from spriden
412     where spriden_id = ? and
413     spriden_change_ind is null } );
414    
415     $glb_prepared_sql{"sth_qry_vnum2pidm"} = $sth_qry_vnum2pidm;
416     }
417    
418     $sth_qry_vnum2pidm->execute($vnum);
419    
420     ($pidm) = $sth_qry_vnum2pidm->fetchrow_array;
421    
422     return $pidm;
423     }
424    
425    
426     sub next_fall {
427    
428     my $term = shift;
429    
430     # return next fall from any term during the year
431     return substr($term + 100, 0, 4) . "01";
432     }
433    
434     # ============================================================================
435     # Subroutines
436     # ============================================================================
437    
438     return 1;
439    
440    

  ViewVC Help
Powered by ViewVC 1.1.26