#!/usr/bin/perl

#
# $Id: list-papers.pl,v 1.13 1997/02/27 16:25:20 steinhau Exp $
# $Source: /local/web/PSESCAPE-97/perl/RCS/list-papers.pl,v $
#
#
# Author: Steinar Hauan <steinhau@pvv.org>
#

$ENV{'PATH'}    = '/bin:/usr/bin';
$ENV{'IFS'}     = '';
$ENV{'SHELL'}   = '/bin/sh';
            
unshift (@INC,'/local/web/PSESCAPE-97/perl');
require "defines.pl";
require "utils.pl";
require "getopts.pl";

$review = "$ARTICLE_DIR/papers.review";
open(REV,"$review") || die "(FATAL) opening review file ($!)";

undef %data;
while(<REV>)
{
    chop;
    next if ( /^(\s+)$/ );
    ($who,$email,$reflist) = split;
    for $ref (sort split(/,/,$reflist))
    { 
        if ( $data{$ref} eq '' )
        {
            $data{$ref} = "$who";
        } else {
            $data{$ref} .= ", $who";
        }
    }
}

&Separator;
print "\nPSE-97: ACCEPTED PAPERS\n\n";
&Separator;

(%papers) = &GetPaperList;

# reception statistics
$TOT = 0; # index to total number in this category
$ELE = 1; # index to electronic copies
$PAP = 2; # index to paper copies
$ADD = 3; # index to add to 'possible accept'
@rstats = ( 0,0,0,0,0,0 ); # initialize


$statstring = "";
$antall = $session = 0;
for $ref (sort keys %papers)
{
    if ( ($sn = ($ref - $ref % 1000)/1000) > $session )
    {
	if ( $session > 0 )
	{
	    $statstring .= &ReportStatistics($session,@rstats);
	    @rstats = ( 0,0,0,0,0,0 ); # reinitialize	    
	}
	$session = $sn;
	$sname = &GetListItem($session-1,@SESSIONS);
	&Separator;
	print "SESSION: $sname\n";
	&Separator;	
    }
    &WriteRef($ref,$data{$ref});
    $antall++;
}
$statstring .= &ReportStatistics($session,@rstats);
print "$statstring";

exit 0;

sub ReportStatistics
{
    local($num,@stats) = @_;
    local($str) = "\nRECEPTION STATISTICS - session $num\n";

    local($tot) = $stats[$TOT] + $stats[$TOT+$ADD];
    local($ele) = $stats[$ELE] + $stats[$ELE+$ADD];
    local($pap) = $stats[$PAP] + $stats[$PAP+$ADD];

    $str .= "Abstract total     : $tot\n";
    $str .= "  abstract accept  : $stats[$TOT]\n";
    $str .= "  abstract possible: $stats[$TOT+$ADD]\n";
    $str .= "Electronic papers  : $ele\n";
    $str .= "  abstract accept  : $stats[$ELE]\n";
    $str .= "  abstract possible: $stats[$ELE+$ADD]\n";
    $str .= "Hard-copy papers   : $pap\n";
    $str .= "  abstract accept  : $stats[$PAP]\n";
    $str .= "  abstract possible: $stats[$PAP+$ADD]\n";

    local($totfrac) = sprintf("%.1f",
			      100*($ele+$pap)/($tot));
    local($accfrac) = sprintf("%.1f",
			      100*($stats[$ELE]+$stats[$PAP])/
			      ($stats[$TOT]));
    local($posfrac) = sprintf("%.1f",
			      100*($stats[$ELE+$ADD]+$stats[$PAP+$ADD])/
			      ($stats[$TOT+$ADD]));

    $str .= "Total reception    : $totfrac\%\n";
    $str .= "  abstract accept  : $accfrac\%\n";
    $str .= "  abstract possible: $posfrac\%\n";

    $str .= "\n";

    return ($str);
}
sub WriteRef
{
    local($gref,$reviewers) = @_;
    local($dir) = &Num2Dir($gref);

    $actrl = "$dir/abstract.ps\@control";
    $pctrl = "$dir/paper.ps\@control";
    if ( ! -f $actrl )
    {
        print STDERR "(FATAL) Ref $gref contains no data\n";
        return;
    }
    local($err,%adata) = &ReadConfig($actrl);
    local($areview) = $adata{'review'};
    local($preview) = "NONE";
    local($email,$fax,$phone) = "";

    # statistics variables
    local($add,$ind) = 0;
    if ( $areview eq "possibly accept" )
    { 
	$add = $ADD; 
    } else {
	$add = 0;
    }

    if ( -f $pctrl )
    {

	if ( -f "$dir/final.ps" )
	{
	    $status = "final electronic copy verified";
	    $ind = $ELE;
	} elsif ( -f "$dir/final.ps\@control" )
	{
	    $status = "final paper copy verified";
	    $ind = $PAP;
	} elsif ( -f "$dir/paper.ps" )
	{
	    $status = "electronic copy, first version";
	    $ind = $ELE;
	} else {
	    $status = "paper copy, first version";
	    $ind = $PAP;
	}
        local(%pdata) = &ReadPaperConfig($pctrl);

	$preview = $pdata{'review'};
        $auth  = &FormatStr($pdata{'authors'},50,16);
        $title = &FormatStr($pdata{'title'},50,16);
	$adr   = &FormatStr($pdata{'adress'},50,16);
	$cont  = "$pdata{'firstname'} $pdata{'lastname'}";
	$email = $pdata{'email'};
	$fax   = $pdata{'fax'};
	$phone = $pdata{'phone'};
	$aff   = $pdata{'affiliation'};
    } else {
        $status = "paper NOT received";
        $auth  = &FormatStr($adata{'authors'},50,16);
        $title = &FormatStr($adata{'title'},50,16);
	$adr   = &FormatStr($adata{'adress'},50,16);
	$cont  = "$adata{'firstname'} $adata{'lastname'}";
    }
    
    $rstats[$add]      += 1;  # add 1 to total
    if ( $ind > 0 )
    {
	$rstats[$add+$ind] += 1;  # add 1 to this category
    }
    
    # from 20.dec - don't print info about non-existing papers
    return unless ( -f $pctrl );

    # from 9.jan - don't print info about rejected papers
    return unless ( $preview eq 'accept' );

    # from 9.jan - abstract review no longer interesting
    # print "REF: $gref (abstract review: '$areview')\n";

    print "REF: $gref\n";
    
    # formatting changes from Sigurd
    # - change titles to lowercase (NOT done!!)
    # - remove 'and' in authors
    $auth  =~ s/ and /, /g;

    # formatting change from Sigurd (01/18/97)
    # add fax, phone and email to output

    print "\tTitle  : $title\n";
    print "\tAuthors: $auth\n";
    print "\tAffil. : $aff\n";
    print "\tContact: $cont\n";
    print "\tAdress : $adr\n";
    print "\tEmail  : $email\n";
    print "\tFax    : $fax\n";
    print "\tPhone  : $phone\n";
    print "\tStatus : $status\n";
    if ( $reviewers ne '' )
    {
	print "\tReview : $reviewers\n";
    } else {
	print "\tReview : not specified\n";
    }
}

sub Separator
{
    for ( $i=0; $i<80; $i++ ){  print "="; }
    print "\n";
}

