#!/usr/local/bin/perl
#
# Produce Yahrzeit Letters
#
open (STDIN,"/dev/null");
#$dbg++;
$BASE="/disk1/data/yi-drupal/yahrzeit";
$BIN=$BASE."/bin";
$OUTDIR="/var/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=localhost;port=3306";
#$dsn = "DBI:$driver:database=yidata;host=192.168.64.3;port=3306";
if (!defined($dbh = DBI->connect($dsn, "yiadmin", "yipass"))) {
print "Failed to connect to database";
exit 1;
}
$drh = DBI->install_driver("mysql");
push(@INC,$BASE);
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 parameter : $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; $BIN/test.cl "( $tmo $yd $yy )" 2>> /tmp/test.err`;
($engdate,$shab,$date2,$shab2) = @result;
if (0) { # send some debug output to browser
print "test.cl \"( $tmo $yd $yy )\"
";
foreach $fl(@result) {print $fl,"
"}
}
if ($dbg) {
print STDERR "( $tmo $yd $yy )","\n";
print STDERR join("",@result),"\n";
}
chop($engdate);
$engdate=~ s/(.*,.*),.*/$1/;
print STDERR "date2: $engdate\n";
chop($shab);
$key{var0}=0;
if ($date2) {
chop($date2);
chop($shab2);
print STDERR "date2: $date2\n";
$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};
$hebd =~ s/ \d.*$//;
( $engd = $engdate ) =~ s/(...)[^ ]+ (...)[^ ]+ (.*)/$1, $2. $3/;
$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 //;
# print "form_letter(\"$OUTDIR/yi_yl_\".$seq++,\"-mm\")
";
form_letter("$OUTDIR/yi_yl_".$seq++,"-mm");
form_letter("$OUTDIR/yi_env_".$seq++,"-L","-ttempl.env");
write(RPTOUT);
if($key{var0}) {
$relationname= $relation= $membername= $hebd= $engd= $shab ="";
$shab=$shab2;
( $engd = $date2 ) =~ s/(...)[^ ]+ (...)[^ ]+ (.*)/$1, $2. $3/;
$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;
print STDERR "Date: $date\n";
($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;
# print "system(\"cd $BIN/..; $BIN/fmt $param -o $file.t $file.dat\")
";
system("cd $BIN/..; /archive/misc/yi/yahrzeit/bin/fmt $param -o $file.t $file.dat");
system("$BIN/psprt $macro $file.t");
unlink ("$file.t");
unlink ("$file.dat");
system ("mv $file.t.ps $file.ps");
}
#print "End processing month #$mno $month
\n"; print "
\n"; close (RPTOUT); open (RPTOUT, "$OUTDIR/summary"); while (\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 .){ print; } print"