#!/usr/bin/perl -w-
#
# Copyright (C) 1999 Klaus Werner <kwerner@ash.ks.he.schule.de>
#
# Setze alle wichtigen Variablen
#
$GLOBALLOG="/var/log/globalcosts";
$ABRECH="/var/log/abrechnung";
$ABNEU="/var/log/abneu";
$TEMPLOG="/tmp/brief";
$PPPUSER="/var/lock/online.user";
$LOGPPP="/var/log/log.ppp";
$CONTIMEFILE="/var/log/connect.time";
$MODUS=$ARGV[0];
$MAIL="";
$MAIL=$ARGV[1];

#
# $USER ist der Verursacher des Anrufes, im Zweifel 
# der aus der ersten Zeile von /var/log/abrechnung
#
open ABRECH,$ABRECH;
chomp($DEFUSER=<ABRECH>);
close ABRECH;
if (open PPPUSER,$PPPUSER ) {
  chomp($USER=<PPPUSER>);
  close PPPUSER;
  #  if (not getpwnam($USER)) { $USER=$DEFUSER; }
} else {
  $USER=$DEFUSER;
}

# Dauer und Kosten des letzten abgehenden Rufs mit ISDNREP

if ( "$MODUS" eq "1" or "$MODUS" eq "5" ) {
# MODUS PPP, also leider kein ISDNREP verwendbar!
	# also aus /tmp/connect.time berechnen
	# die Datei enthalt ( 3 Zeilen) der Form
	# 
	# t-online
	# Wed Feb 11 17:41:53 MET 1998
	# Wed Feb 11 17:42:09 MET 1998
	#
	# Verbindungsdauer und Gebuehren
	# Vorgabe:
	#  t-online    1 Pf pro 10 sec
	#  winshuttle  7 Pf pro 60 sec
	#  anpassen fr eigene Provider  (siehe unten) !!

	# wenn unten kein Providereintrag folgt, 
        # dann die Vorgaben von t-online nutzen

        # Laenge einer Einheit in Sekunden
        $EINHL=60;
        # Kosten fuer eine solche Einheit in der Waehrung
	$EINHP=0.03;
        # Fester Grundpreis pro Verbindung
        $VERBP=0.00;
	$CURRENCY="DM";
	
	$i=0;
	open CONTIME,$CONTIMEFILE;
	while (<CONTIME>) {
           $i++;
	   if ($i eq 1) {
                chomp($PROV=$_);

                if( "$PROV" eq "t-online" )  { $EINHL=60; $EINHP=0.03; $VERBP=0.00 };
          	if( "$PROV" eq "winshuttle") { $EINHL=60; $EINHP=0.07; $VERBP=0.00 };
    	   	
#
# hier fr eigenen Provider passend ergaenzen!!!!!
# in der Form
# if ( "$PROV" eq "<providereintrag aus ip-up>") { $EINHL=??; $EINHP=??.?; $VERBP=??.? };  
#

        	}   
	   else {
	        @f= split(' ');
		if ($i eq 2) { @alt=split(":",$f[3]) };
           	if ($i eq 3) { @neu=split(":",$f[3]) };
	        }
           } 
        close(CONTIME);
        $STUNDENL=(int($neu[0])-int($alt[0]));
        $MINUTENL=(int($neu[1])-int($alt[1]));
        if ( $MINUTENL < 0 ) { 
	   $MINUTENL=$MINUTENL+60; 
	   $STUNDENL=$STUNDENL-1 
	   }; 
        $SECL=(int($neu[2])-int($alt[2]));
        if ( $SECL < 0 ) { 
	    $SECL=$SECL+60; 
	    $MINUTENL=$MINUTENL-1;
	    if ( $MINUTENL < 0 ) { 
	        $MINUTENL=$MINUTENL+60; 
	        $STUNDENL=$STUNDENL-1 
	        }; 
            };
	$DAUERL=$STUNDENL*3600+$MINUTENL*60+$SECL ;
        $KOSTENL=(int($DAUERL/$EINHL)+1)*$EINHP+$VERBP;
	$WEG="naeherungsweise aus der Onlinezeit";
	}
else    { 
# Modus 2,3,4 : ISDNREP verwendbar!
	$ISDNREP=`/usr/bin/isdnrep -hvos%D%U |tail -1`;
        if ( $ISDNREP eq "") { $ISDNREP="0:0:0 0.00 DM"; };

	@LOCAL=split(' ',$ISDNREP);
	
	# LOCAL[0]  : Dauer in hh:mm:ss
	# LOCAL[1]  : Kosten in Dezimal 5,43
	# LOCAL[2]  : Waehrungseinheit

	($STUNDENL,$MINUTENL,$SECL)=split(':',$LOCAL[0]);
	$DAUERL=$STUNDENL*3600+$MINUTENL*60+$SECL;
	$LOCAL[1]=~ s/,/./;
	$KOSTENL=$LOCAL[1];
        $CURRENCY=$LOCAL[2];
	$WEG="aus den Daten von ISDNLOG";
	};

#
# Update globale Kosten
#

open GLOBAL,$GLOBALLOG;
$DAUERG=<GLOBAL>+$DAUERL;
$KOSTENG=<GLOBAL>+$KOSTENL;
$DAUERGG=<GLOBAL>+ $DAUERL;
$KOSTENGG=<GLOBAL>+$KOSTENL;
$BEGINGG=<GLOBAL>;
close GLOBAL;

open GLOBAL,">$GLOBALLOG";
print GLOBAL $DAUERG,"\n",$KOSTENG,"\n",$DAUERGG,"\n",$KOSTENGG,"\n",$BEGINGG;
close GLOBAL;

#
# Update Abrechnungsliste
#
open ABRECH; 
open ABNEU,">$ABNEU";
$OK=0;
while (<ABRECH>) {
 if ( $_ eq "$USER\n" ) { 
   print ABNEU $_; 
   $DAUERA=<ABRECH>+$DAUERL;
   print ABNEU $DAUERA,"\n";
   $KOSTENA=<ABRECH>+$KOSTENL;
   print ABNEU $KOSTENA,"\n";
   $DAUERAK=<ABRECH>+$DAUERL;
   print ABNEU $DAUERAK,"\n";
   $KOSTENAK=<ABRECH>+$KOSTENL;
   print ABNEU $KOSTENAK,"\n";
   
   $OK=1;
   } 
 else { print ABNEU $_; };
 } ;
if ( $OK eq 0 ) { print ABNEU $USER,"\n";
  print ABNEU $DAUERL,"\n";
  print ABNEU $KOSTENL,"\n";
  $DAUERAK=$DAUERL;
  $KOSTENAK=$KOSTENL;
  print ABNEU $DAUERAK,"\n";
  print ABNEU $KOSTENAK,"\n";
  }
close ABRECH;
close ABNEU;
rename $ABNEU,$ABRECH;
chmod 0644, $ABRECH;

if ( "$MAIL" eq "mail" ) {
    #
    # Schreibe dem Verursacher einen Brief.
    #

    $VBDATEN=`cat /var/log/connect.time`;
    open TEMP,">$TEMPLOG";
    $STUNDENG=int $DAUERG/3600;
    $DAUERG=$DAUERG-3600*$STUNDENG;
    $MINUTENG=int $DAUERG/60;
    $SECG=$DAUERG-60*$MINUTENG;
    
    $STUNDENAK=int $DAUERAK/3600;
    $DAUERAK=$DAUERAK-3600*$STUNDENAK;
    $MINUTENAK=int $DAUERAK/60;
    $SECAK=$DAUERAK-60*$MINUTENAK;
    
    print TEMP "From: Kostenkontrolle\n";
    print TEMP "Subject: Kosten der ONLINE-Verbindung\n\n";
    print TEMP "User: $USER\n";
    print TEMP "Verbindungsdaten:\n";
    print TEMP $VBDATEN;
    print TEMP "\nSie waren ",$STUNDENL," Stunden, ",$MINUTENL," Minuten und ",$SECL;
    print TEMP " Sekunden ONLINE.\n";
    print TEMP "Das hat ",$KOSTENL," ",$CURRENCY," gekostet.\n";
    print TEMP "Dies wurde $WEG ermittelt.\n";
    print TEMP "\n--------\n";
    print TEMP "Ihre gesamte bisherige Onlinezeit hat sich damit auf\n";
    print TEMP $STUNDENAK," Stunden, ",$MINUTENAK," Minuten und ",$SECAK," Sekunden erhoeht.\n";
    print TEMP "Die Gesamtkosten dafuer betragen ",$KOSTENAK," ",$CURRENCY,".\n";	
    $ufound=0;
    open EINZAHL,"/var/log/einzahlung";
    while (<EINZAHL>) {
	chomp( $datsatz=$_ );
        @daten=split(' ',$datsatz);
        if ( $USER eq $daten[0] ) {
             $ufound=1;
             if ( $daten[1] eq "" ) {
		$ufound=0;
                }
             if ( $ufound eq 1 ) {
             	$guthaben=$daten[1] - $KOSTENAK;
                print TEMP "Bei einer Gesamteinzahlung von ",$daten[1]," ",$CURRENCY,"\n";
                print TEMP "steht Ihr Gebuehrenkonto demzufolge bei "; 
	     	printf TEMP "%+#6.2f",$guthaben;
                print TEMP " ",$CURRENCY,".\n";
                } 
	   }
        }
    close EINZAHL;	
    $x=`grep ^$USER /var/lib/online/kostenview`;
    chomp($x);
    if ( "$x" eq "$USER" ) {
       print TEMP "\n------------\n";
       print TEMP "Insgesamt war der Rechner seit Monatsbeginn\n";
       print TEMP $STUNDENG," Stunden, ",$MINUTENG," Minuten und ",$SECG," Sekunden ONLINE.\n";
       print TEMP "Das hat ",$KOSTENG," ",$CURRENCY," gekostet.\n";
       print TEMP "Die Gesamtkosten seit ",$BEGINGG," betragen ",$KOSTENGG," ",$CURRENCY,".\n";
       }
    close TEMP;
    if ( $USER eq $DEFUSER ) { `cat $TEMPLOG | /usr/sbin/sendmail $DEFUSER`; 
    } else {
       `cat $TEMPLOG | /usr/sbin/sendmail $USER $DEFUSER`;
    }
    `rm $TEMPLOG`;
}

#
# Eintrag in /var/log/log.ppp

open PPPLOG,">>$LOGPPP";
print PPPLOG "Dauer: ",$STUNDENL,"h ",$MINUTENL,"min ",$SECL,"sec,   Verbindungskosten: ";
print PPPLOG $KOSTENL," ",$CURRENCY,"\n";
close PPPLOG;
