#!/usr/local/bin/perl # # Produce Yahrzeit Letters # open (STDIN,"/dev/null"); $dbg++; $BIN="/archive/misc/yi/yahrzeit/bin"; $OUTDIR="/archive/misc/yi/tmp"; system("rm $OUTDIR/yi_*.ps"); $month = shift (@ARGV); $month =~ s/[+]/ /; if ($dbg) { open (STDERR,">/tmp/yahrdbg.log"); print STDERR "yahrltrs: $month\n"; } open (RPTOUT, ">$OUTDIR/summary"); # # Connect to database # $driver = "mysql"; $dsn = "DBI:$driver:database=yidata;host=192.168.64.2;port=3306"; $dbh = DBI->connect($dsn, "yiadmin", "yipass"); $drh = DBI->install_driver("mysql"); require "getopts.pl"; require "fmtsub"; use DBI; $seq="aa01"; @hebrew_months= ("Nisan","Iyar","Sivan","Tammuz","Av","Elul","Tishri", "Heshvan","Kislev","Teveth","Shevat","Adar I","Adar II"); foreach (@hebrew_months) { push (@hmos,"\L$_"); } foreach (@hmos) { $mo++; if ("\L$month" eq substr($_,0,length($month))) { $heb_month=$hebrew_months[$mo-1]; $mno=$mo; last; } } unless ($mno) { print "Bad paramater : $month\n"; exit; } $sth = $dbh->prepare( $sql = 'SELECT y_notify_name, y_rel, y_rel_name, ' . 'y_dt_dy, y_dt_mo, y_dt_yr , ' . 'addr_street, addr_city, addr_prov, addr_postcd ' . "FROM identity as i, yz WHERE y_dt_mo like \'$month%\' and " . 'yz.serial=i.serial order by y_dt_mo, y_dt_dy '); if ($dbg) { print STDERR $sql,"\n"; } $sth->execute; @flds = split(" ","membername relation relationname y_dt_dy y_dt_mo y_dt_yr addr_street addr_city addr_prov addr_postcd"); while (my $ref = $sth->fetchrow_arrayref) { @data=(); $i =0; print STDERR "\n-----------\n" if $dbg1; for $fld(@flds) { $key{$fld} = $$ref[$i++]; print STDERR "$fld : $key{$fld}\n" if $dbg1; } $postcd = substr($key{addr_postcd},0,3)." ".substr($key{addr_postcd},3); $key{memberaddr}=$key{addr_street}."\n".$key{addr_city}.", ". $key{addr_prov}."\n".$postcd."\n"; $key{yahrhebdate}= $key{y_dt_dy}." ".$key{y_dt_mo}; if (defined(y_dt_yr)) { $key{yahrhebdate}.= " ".$key{y_dt_yr}; } delete($key{y_dt_dy}); delete($key{y_dt_mo}); delete($key{y_dt_yr}); delete($key{addr_street}); delete($key{addr_city}); delete($key{addr_prov}); delete($key{addr_postcd}); $yy=0; ($yd,$ym)=split(/[ \t]+/,$key{"yahrhebdate"},2); if($ym =~ /\s*(\d+)$/) { $yy =$1; } $ym =~ s/\s*(\d+)$//; $tmo=$mo=0; foreach (@hmos) { $mo++; if ("\L$ym" eq substr($_,0,length($ym))) { $tmo=$mo; last; } } if ($tmo) { if ($dbg) {print STDERR $key{membername}, ": $tmo \n"}; if (! $yy && ( ($tmo == 12 && $ym eq "Adar") #ambiguous ADAR || (($tmo == 8 || $tmo == 9) && ($yd == 30)))) { print "Ambiguous date: $yd $ym for $key{membername}\n"; } else { $yy = $yy ? $yy : "5759"; # default to non leap year if ( $tmo == $mno || ($tmo == 13 && $mno ==12) ) { @result=`cd $BIN; test.cl "( $tmo $yd $yy )" 2>> /tmp/test.err`; ($engdate,$shab,$date2,$shab2) = @result; if ($dbg) { print STDERR "( $tmo $yd $yy )","\n"; print STDERR join("",@result),"\n"; } chop($engdate); $engdate=~ s/,.*//; chop($shab); $key{var0}=0; if ($date2) { chop($date2); chop($shab2); $date2=~ s/,.*//; $key{"yahrdate2"}=makeprintable($date2); $key{var0}=1; $key{yahrshab2}= " and ".$shab2; } $key{yahrengdate}=makeprintable($engdate); $key{yahrshab}= $shab; $t=$key{relation}; $key{relation}= "\L$t"; $relationname = $key{relationname}; $relation = $key{relation}; $relation = "\u$relation"; $membername = $key{membername}; $hebd = $key{yahrhebdate}; $engd = $engdate; $engd =~ s/,.*//; $key{var1}=1; if ($shab =~ /NIL/) { $shab = "Yom Tov"; $key{yahrshab}= $shab; $key{var1}=0; if ( $tmo == 7 ) { $key{note1} = "At your request a `kail male rachamim' prayer may be recited on the shabbos before Yom Kippur."; } elsif ( $tmo == 1 ) { $key{note1} = "At your request a `kail male rachamim' prayer may be recited on the shabbos before the start of the month of Nissan." ; } } $shab =~ s/Shabbos //; $shab =~ s/Parashas //; &form_letter("$OUTDIR/yi_yl_".$seq++,"-mm"); &form_letter("$OUTDIR/yi_env_".$seq++,"","-ttempl.env"); write(RPTOUT); if($key{var0}) { $relationname= $relation= $membername= $hebd= $engd= $shab =""; $shab=$shab2; $engd=$date2; $shab =~ s/Shabbos //; $shab =~ s/Parashas //; write(RPTOUT); } } %key=(); %relation=(); @mydata=(); } } else { print STDERR "Unrecognized month $ym for $key{membername}\n"; } $have_data=0; @mydata = (); } $sth->finish; sub makeprintable { my $date=shift; ($date=~m/(\d+)/); my $day=$1; $spec = "st" if ($day == 1); $spec = "nd" if ($day == 2); $spec = "rd" if ($day == 3); $spec = "th" if ($day > 3); return ($date.$spec); } sub form_letter { my $file=shift; my $macro=shift; my $param = shift; @data=(); while (($key,$data) = each %key) { push(@data,":$key: $data\n"); } @tmpl=@tmpl1; open (OUT,">$file.dat") || die "opening $file.dat"; print OUT @data; close OUT; system("cd $BIN/..; fmt $param -o $file.t $file.dat"); system("psprt $macro $file.t"); unlink ("$file.t"); unlink ("$file.dat"); system ("mv $file.t.ps $file.ps"); # system ("mylp $file.ps"); # unlink "$file.ps"; } #system ("a2ps -np -w $OUTDIR/summary | mylp"); #print "End processing month #$mno $month

\n"; print "

\n";
close (RPTOUT); open (RPTOUT, "$OUTDIR/summary");
while (){
	print;
}
print"
\n"; close(STDOUT); exit; format RPTOUT_TOP = @<<<<<<<<<<<<<<<<<<<<<<<<<<<< Yahrzeits for @<<<<<<<<<<<<< `date +'%B %e, %Y'`,$heb_month Name Relation Person observing Dates Shabbos ================================================================================================================ . format RPTOUT = @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<@<<<<<<<<<<<<<<@<<<<<<<<<<<<<< $relationname, $relation, $membername, $hebd, $engd,$shab .