package umfrage;

use frage;
use grafik;
use kasse;
#use strict;

@ISA = qw ( template );


####################################################################
####         Konstruktor der Umfragenklasse
####         Argumente  : -
####         Returnwert : -
####################################################################
sub init {
	my $that = shift;
	my $class = ref($that) || $that;
	my $self = template->init(@_);
	bless $self, $class;	
	$self->{name}     = "Neue Umfrage";
	$self->{usepanel} = 0;
	$self->{template} = $self->{parent}->{template}+0;
	$self->{knr} 	  = $self->{parent}->{knr}+0;
	$self->{showstat} = 0;	
	$self->{sprache}  = 0;	
        $self->{exiturl}  = "http://www.prorata.de";	
        $self->{beginn}   = '2000-01-01';
	$self->{ende}	  = '2000-01-01';
        $self->{ppf}	  = 100;
        $self->{firstfid} = 1;
	$self->{uspringen} = 1;
	$self->{maxuser}  = 100;
	return $self;
}

####################################################################
####         Laden der Umfrage aus der DB
####         Argumente  : -
####         Returnwert : -
####################################################################
sub load {
	my $self = shift;
        $self->log(4,"Entering: umfrage:load");
	my $sql = "select umfrage, usepanel, template, knr, showstat , beginn, ende, ppf, stface, stsize, stcolor, exiturl, name, pass, ".
		  "sprache, firstfid, uspringen, maxuser from umfragen where umfid=$self->{id}";
	($self->{name}, $self->{usepanel}, $self->{template}, $self->{knr},
	 $self->{showstat},$self->{beginn},$self->{ende},$self->{ppf}, $f,$s,$c, $self->{exiturl},
	 $self->{uname}, $self->{upass}, $self->{sprache}, $self->{firstfid}, $self->{uspringen},
	 $self->{maxuser} ) = $self->sqlselect($sql);
	if (! defined $self->{knr}) {$self->log(2,"Umfrage ist nicht vorhanden"); return;}
	$baseq::VARS{umfid}=$self->{id};		# Umfid setzen
	$self->loadtmp();    	                	# Template laden
        $self->loadsprache($self->{sprache});                             # Sprache laden
	$self->{stface}=$f; $self->{stsize}=$s; $self->{stcolor}=$c;
	return $self;
}

####################################################################
####         Ermittelt eine neue umfid und speichert sich
####         Argumente  : -
####         Returnwert : -
####################################################################
sub new {
	my $self = shift;
    $self->log(4,"Entering: umfrage:new");
	my $sql1 = "select max(umfid) from umfragen";
	($self->{id}) = ($self->sqlselect($sql1))+1;
    my $sql2 = "insert into umfragen set umfrage='$self->{name}', umfid=$self->{id}, usepanel=$self->{usepanel}, template=$self->{template}, ".
               "knr=$self->{knr}, showstat=$self->{showstat}, beginn='$self->{beginn}', ende='$self->{ende}', ppf=$self->{ppf}, ".
		   "stface='$self->{stface}', stsize='$self->{stsize}', stcolor='$self->{stcolor}', exiturl='$self->{exiturl}', ".
		   "name='$self->{uname}', pass='$self->{upass}', ".
		   "sprache=$self->{sprache}, firstfid=$self->{firstfid}, uspringen=$self->{uspringen}, maxuser=$self->{maxuser}";
	$self->sqldo($sql2);
    $baseq::VARS{umfid}=$self->{id}		# Umfid setzen
}

####################################################################
####         Speichert sich mit Update
####         Argumente  : -
####         Returnwert : -
####################################################################
sub store {
	my $self = shift;
        $self->log(4,"Entering: umfrage:store");
	my $sql = "update umfragen set umfrage='$self->{name}', usepanel=$self->{usepanel}, ".
		  "template=$self->{template}, knr=$self->{knr}, ".
		  "showstat=$self->{showstat}, beginn='$self->{beginn}', ".
      		  "ende='$self->{ende}', ppf=$self->{ppf}, ".
		  "stface='$self->{stface}', stsize='$self->{stsize}', stcolor='$self->{stcolor}', ".
	 	  "name='$self->{uname}', pass='$self->{upass}', exiturl='$self->{exiturl}', sprache=$self->{sprache}, ".
		  "firstfid=$self->{firstfid}, uspringen=$self->{uspringen}, maxuser=$self->{maxuser} where umfid=$self->{id}";
	$self->sqldo($sql);
	return;
}

####################################################################
####         Löscht sich und alle seine Fragen aus der DB,
####	     wenn die Umfrage noch nicht beantwortet wurde	
####         Argumente  : -
####         Returnwert : 1 bei Misserfolg
####################################################################
sub delete {
	my $self = shift;
        $self->log(4,"Entering: umfrage:delete");
	my $inhalt=$self->sqldo("select pin from ergebnis where umfid=$self->{id}");
        if ($inhalt > 0) {return 1;}
	my $sql  = "delete from umfragen where umfid=$self->{id}";
	$self->sqldo($sql);
	my $f;
	my $y=$self->loadfragen;
	while ($f=shift @$y) {$f->delete}
	$self->{id} = undef;
	return 0;
}

####################################################################
####         Schreibt ins Logfile
####         Argumente  : Emergency und Logtext
####         Returnwert : -
####################################################################
sub log {
	my ($self, $emer, $TEXT) = @_;
	$self->printlog($emer, "U[$self->{id}/./.] $TEXT");
}

####################################################################
####         Frage zur Umfrage laden
####         Argumente  : -
####         Returnwert : Zeiger auf Fragenarry
####################################################################
sub loadfragen {
	my $self = shift;
        $self->log(4,"Entering: umfrage:loadfragen");
	my $sql = "select max(fid) from fragen where umfid=$self->{id}";
	my $max = $self->sqlselect($sql);
        my @y=(); my $x=0; my $f;
	for ( $x=1; $x<=$max; $x++) {
	   $f = frage->init($self,$x);
   	   if ($f->load()) { push (@y, $f);}        #existierende Fragen ins Array packen
	}
	return \@y;
}

####################################################################
####         liest die Antworten ein
####         Argumente  : -
####         Returnwert : -
####################################################################
sub enterant {
	my $self = shift;
	my $f;
        $self->log(4,"Entering: umfrage:enterant");
	my @RE=("",$self->trans("WA1"),$self->trans("WA2"),"");
	my $x=0;
	$self->log(4,"Entering 'enterant' Umfid=$baseq::VARS{umfid} Pin=$baseq::VARS{pin} Fid=$baseq::VARS{fid}");
        # Wenn beendet werden soll : Redirect !
	if ($baseq::VARS{lbut} eq $self->trans("BU11")) {$self->redirect;}

	# Anmeldedaten übernehmen
        if ($baseq::VARS{lbut} eq $self->trans("BU12")) {
		$baseq::VARS{pin}=$baseq::VARS{apin};
		$baseq::VARS{pass}=crypt($baseq::VARS{apass}, "xy");
	}
	$self->log(4,"fid am Anfang=$baseq::VARS{fid}");
	# Pin überprüfen und nötigenfalls erfragen
	if ($baseq::VARS{pin} eq ""){
		if ($self->{usepanel}==0) {$baseq::VARS{pin}=$self->newpin;}	
		else {$self->login();$self->exit;}
	}

        # Passwortüberprüfung
	if ($self->{usepanel}==1) {my $RET = $self->checkpass($baseq::VARS{pin}, $baseq::VARS{pass});
	        if ($RET == 3) { $self->pstatistik;$self->exit;}
		if ($RET != 0) { $self->{warntext}=$RE[$RET]; $self->login();$self->exit; }
        }

	# Ist der Fragebogen aktiv ??
	if ($self->checkdate) {
	        $self->{warntext}=$self->trans("WA11");$self->login();
 		$self->log(1,"Fragebogen nicht aktiv");
	}
	$self->log(4,"FID=$baseq::VARS{fid}");
	# Wenn VARS{fid} nicht definiert ist muß die erste Frage genommen werden
	if ( $baseq::VARS{fid} <1 ) {
		$self->log(4,"Keine fid, lade firstfid");
		$baseq::VARS{fid}=$self->{firstfid};
		$f = frage->init($self,$baseq::VARS{fid}); $f->load();
		$f=$f->nextfrage($baseq::VARS{pin},1);
	}
	else {$f = frage->init($self,$baseq::VARS{fid}); $f=$f->load(); } # sonst jetzt anliegende Frage laden....

        if (! defined $f) { $self->umfende; $self->exit;}
	
	# Wenn gespeichert werden soll
	if ($baseq::VARS{but} eq $self->trans("BU25")) {
	   if ($f->enterant == 0) {$self->{warntext}=$self->trans("WA4");}
	   $self->log(4,"Proband speichert");
	   $f = $f->nextfrage($baseq::VARS{pin});
	}

	# Wenn übersprungen werden soll
	if ($baseq::VARS{but} eq $self->trans("BU3")) {
	   $f = $f->nextfrage($baseq::VARS{pin});
	   $self->log(4,"Proband Überspringt");
	   $self->{warntext}=$self->trans("WA6");
	}

	# Wenn abgebrochen werden soll
	if ($baseq::VARS{but} eq $self->trans("BU2")) {
	   $self->log(4,"Proband Unterbricht");
	   $self->{warntext}=$self->trans("WA7");
	   undef $f;
	}
        	

   # Standardmäßig die neue Frage anzeigen !
   if (defined $f) { $baseq::VARS{fid}=$f->{id};}
   if (! defined $f) {$self->umfende;}
   else {$f->htmlfra;}

}     	


####################################################################
####         Laeutet das Ende der Umfrage ein......
####         Argumente  : -
####         Returnwert : -
####################################################################
sub umfende {	
	my $self= shift;
	my ( $HTML, $TITLE );
        $self->log(4,"Entering: umfrage:umfende");
	$TITLE=$self->trans("TI5");
	if ($self->{usepanel}==1) {
		my $verd=$self->verdient($baseq::VARS{pin});
		if ($verd == 0){$self->{warntext}=$self->trans("WA9c")}
		else{ $self->{warntext}=$self->trans("WA9a")." ".$verd." ".$self->trans("WA9b")."<br>".$self->trans("WA9d")};
	    my $kasse=kasse->init($self);
		$kasse->haben($baseq::VARS{pin}, $self->{id}, $verd*100);
	}
        else {$self->{warntext}=$self->trans("WA10");}
	
	$self->sqldo("delete from ergebnis where umfid=$self->{id} and pin=$baseq::TESTPIN");
    if ($self->{showstat} !=0) {$self->pstatistik;$self->exit;}
	else {
	   $HTML=$self->SM('lbut',"BU11")."\n";
       $self->printhtml($TITLE,$HTML);
	}
}

####################################################################
####         Listet alle Fragen zu dieser Umfrage auf zur Bearbeitung
####		durch den Kunden
####         Argumente  : -
####         Returnwert : -
####################################################################
sub fragenliste {
	my $self = shift;
        $self->log(4,"Entering: umfrage:fragenliste");
  	my $f; my $fl=$self->loadfragen;
  	my $TITLE=$self->trans("TI7");
   	my $HTML=$self->sfont($self->trans("HI43")." ".$self->{firstfid})."<BR>\n<TABLE>\n";
   	while ($f = shift @$fl) { $HTML.=$f->fragenliste; }
	$HTML.="</TABLE><BR>\n".
   	$self->SMrow( ["but","but","but","but","kbut","but","but"] , ["BU6","BU8","BU10","BU5","BU13","BU11","BU24"] );

        $self->{helpkontext}="fragenliste";
        $self->printhtml($TITLE, $HTML);
}

####################################################################
####         Gibt sich und die Antworten zur Bearbeitung durch den
####		Kunden aus
####         Argumente  : -
####         Returnwert : HTML-string
####################################################################
sub htmlumfrage {
    my $self = shift;
    $self->log(4,"Entering: umfrage:htmlumfrage");
    my $kasse=kasse->init($self);
    my $umfk=$kasse->umfragekosten($self->{id});
    my ( $up, $ss, $htemp, $ntemp );
    my @datetext=($self->trans("HI2"),$self->trans("HI3"),$self->trans("HI4"), $self->trans("HI4a"));
    my $TITLE=$self->trans("TI9")." ".$self->{id};
    $self->{warntext}=$self->trans("TI9")." ".$self->{id};
    $self->{buttonwidth}=18;
	my $HTML=$self->sfont($self->trans("HI6"))."\n".$self->TF("umfrage",$self->{name},80)."<BR>\n".
             $self->sfont($self->trans("HI7"))."\n".$self->TF("exiturl",$self->{exiturl},80)."<BR><BR>\n".
	"<TABLE cellspacing=8>\n".
    	$self->TR([
    	    $self->CB("usepanel", 1, $self->{usepanel}).
	    $self->sfont($self->trans("HI8")),
    	    $self->sfont($self->trans("HI9")),
	    $self->TF("beginn",$self->{beginn}),
	    $self->sfont($self->trans("HI10")),
	    $self->DDfface("stface",$self->{stface})  ]) .
	$self->TR([
	    $self->CB("showstat", 1, $self->{showstat} ).
            $self->sfont($self->trans("HI11")."&nbsp;&nbsp;"),
    	    $self->sfont($self->trans("HI5")),
	    $self->TF("ende",$self->{ende})."&nbsp;&nbsp;",   	
	    $self->sfont($self->trans("HI12")),
            $self->TF("stsize",$self->{stsize},10) ])  .
	$self->TR([
	    $self->DDtemp("template",$self->{template},0) ,
    	    $self->sfont($self->trans("HI13")),
	    $self->TF("ppf",$self->{ppf}),
	    $self->sfont($self->trans("HI14")),
            $self->DDfcolor("stcolor",$self->{stcolor})  ]) .
	"</TABLE>\n<HR>\n".
	$self->sfont($self->trans("HI15").$self->TF("uname",$self->{uname}).$self->trans("HI16").
	                $self->TF("upass",$self->{upass}).$self->trans("HI17")."<HR>\n").
	$self->sfont($datetext[$self->checkdate()].
	sprintf("&nbsp;&nbsp;&nbsp;Panelistenkosten: %0.2f Euro bzw. %0.2f DM",$umfk/100,$umfk*0.0195583 )).
	"<HR>\n".
        "<TABLE>\n".
	$self->TR([ $self->sfont($self->trans("HI17a")), $self->DDsprache('sprache',$self->{sprache}) ]).
	$self->TR([ $self->sfont($self->trans("HI17b")), $self->TF("firstfid",$self->{firstfid},5) ]).
	$self->TR([ $self->sfont($self->trans("HI17c")),
		    $self->DD('uspringen',[1,0],$self->{uspringen},{"1" => "Anzeigen","0"=>"Verstecken"}) ]).
	$self->TR([ $self->sfont($self->trans("HI17d")), $self->TF("maxuser",$self->{maxuser},5) ]).	
	"</TABLE>\n<BR>\n".
   	$self->SMrow( ["but","but","but","kbut"] , ["BU9","BU5","BU4","BU13"] ).
	$self->SMrow( ["but","but","but","but"] , ["BU11","BU24","BU26","BU28"] );

    $self->{helpkontext}="umfrage";
    $self->printhtml($TITLE, $HTML);
}

####################################################################
####         Bearbeitet die Eingabe der Frage durch den Kunden
####         Argumente  : -
####         Returnwert : -
####################################################################
sub getbearb {
	my $self = shift;
	my ( $f, $TITLE, $x );
    $self->log(4,"Entering: umfrage:getbearb");	
	
	# Wenn VARS{fid} nicht definiert ist wird eine Fragenliste ausgegeben
	#if ( (! defined $baseq::VARS{fid}) ) {
	#   $self->htmlumfrage;
	#}
        $self->log(4,"SPRACHE: $self->{sprache} -- $baseq::VARS{sprache} BU9=".$self->trans("BU9")." but=".$baseq::VARS{but} );
	# Hilfe anzeigen !?
	if ($baseq::VARS{but} eq $self->trans("BU24")) {
		$self->hilfe;
	}


	# Wenn gespeichert werden soll
	if ($baseq::VARS{but} eq $self->trans("BU1")) {
	  $self->log(4,"Kunde speichert");
	  $f = frage->init($self,$baseq::VARS{fid});  #  jetzt anliegende Frage laden....
	  $f->load();
	  if (! defined $f){$self->htmlumfrage;}
	  $f->getbearb;
	  $self->{warntext}=$self->trans("WA14");
	  $f->htmlbearb;
	}

	# Wenn die Frage gelöscht werden soll
	elsif ($baseq::VARS{but} eq $self->trans("BU8")) {
  	  $self->log(4,"Kunde löscht");
	  if ($baseq::VARS{radio} ne "") {$baseq::VARS{fid}=$baseq::VARS{radio};}
	  if ($baseq::VARS{fid} > 0) {
	    $f = frage->init($self,$baseq::VARS{fid});  #  jetzt anliegende Frage laden....
	    $f=$f->load();
	    if (defined $f) {$x=$f->delete;}
	    $baseq::VARS{fid}=0;
	    $self->{warntext}=$x;
	  }
	  else {
	    $self->{warntext}=$self->trans("WA16");
	  }
	  $self->fragenliste();
	}

	# Wenn eine neue Frage erstellt werden soll
	elsif ($baseq::VARS{but} eq $self->trans("BU5")) {
           $self->log(4,"Kunde erstellt neue Frage");
	   $f=frage->init($self,$baseq::VARS{fid});
	   $f->new();
	   $baseq::VARS{fid}=$f->{id};
	   $self->{warntext}=$self->trans("WA17");
	   $f->htmlbearb;
	}

	#Wenn aus der Liste bearbeitet werden soll
	elsif ($baseq::VARS{but} eq $self->trans("BU6")) {
	  $self->log(4,"Kunde bearbeitet Frage");
	  if ($baseq::VARS{radio} < 1) {
	     $self->{warntext}=$self->trans("WA16");
	     $self->fragenliste;
	  }
	  else {
	     $f=frage->init($self,$baseq::VARS{radio});
	     $f=$f->load();
	     $baseq::VARS{fid}=$f->{id};
	     $self->{warntext}=$self->trans("WA18");
	     $f->htmlbearb;
	  }
	} 	
    
	# Wenn die Liste angezeigt werden soll.....
	elsif ($baseq::VARS{but} eq $self->trans("BU4")) {
	     $self->log(4,"Kunde sieht Liste der Fragen");
	     $self->{warntext}=$self->trans("WA19");
             $baseq::VARS{fid}=0;
             $self->fragenliste;
    }

    # Wenn die Fragen angeglichen werden sollen !
	elsif ($baseq::VARS{but} eq $self->trans("BU26")) {
	     $self->log(4,"Kunde gleicht die Fragen an");
	     $self->{warntext}=$self->trans("WA19");
             my $y=$self->loadfragen;
             foreach $f (@$y) {$f->settext};
             $self->fragenliste;
    }

    # Wenn die Umfrage gespeichert werden soll.....
	elsif ($baseq::VARS{but} eq $self->trans("BU9")) { $self->getumfbearb; $self->log(4,"Kunde speichert Umfrage");}

    # Wenn die Umfrage angezeigt werden soll.....
	elsif ($baseq::VARS{but} eq $self->trans("BU10")) { $self->htmlumfrage; $self->log(4,"Kunde sieht Umfrage");}

	# Wenn die Umfrage angezeigt werden soll.....
	elsif ($baseq::VARS{but} eq $self->trans("BU28")) { 
		$self->log(4,"Kunde Kopiert neue Umfrage");
		my $frag=$self->loadfragen; 
		$self->{name} .= "  (Kopie)";
		$self->new;
		foreach $f (@$frag) {$f->{umfid}=$self->{id}; $f->new;}
		$self->htmlumfrage;	
	}
	
	# Beenden mit Redirect....
	elsif ($baseq::VARS{but} eq $self->trans("BU11")) { $self->redirect;}
	
	# Wenn alles andere versagt.....   :-)
	else { $self->htmlumfrage; $self->log(4,"Kein Button gedrückt, Kunde sieht Umfrage"); }

}

####################################################################
####         nimmt die Änderungen aus dem Formular an
####         Argumente  : Zeiger auf Variablen
####         Returnwert : -
####################################################################
sub getumfbearb {
	my $self = shift;
        $self->log(4,"Entering: umfrage:getumfbearb");
	$self->{name}=$self->fclean($baseq::VARS{umfrage});
	$self->{template}=$baseq::VARS{template}+0;	
	$self->{usepanel}=$baseq::VARS{usepanel}+0;	
	$self->{showstat}=$baseq::VARS{showstat}+0;	
	$self->{beginn}=$self->fclean($baseq::VARS{beginn});
	$self->{ende}=$self->fclean($baseq::VARS{ende});
	$self->{ppf}=$baseq::VARS{ppf}+0;
	$self->{stface}=$self->fclean($baseq::VARS{stface});	
	$self->{stsize}=$self->fclean($baseq::VARS{stsize});	
	$self->{stcolor}=$self->fclean($baseq::VARS{stcolor});	
	$self->{exiturl}=$self->fclean($baseq::VARS{exiturl});	
        $self->{uname}=$self->fclean($baseq::VARS{uname});	
	$self->{upass}=$self->fclean($baseq::VARS{upass});	
	$self->{sprache}=$baseq::VARS{sprache}+0;	
	$self->{firstfid}=$baseq::VARS{firstfid}+0;
	$self->{uspringen}=$baseq::VARS{uspringen}+0;
        $self->{maxuser}=$baseq::VARS{maxuser}+0;
	$self->store;
        $self->load;
	$self->htmlumfrage;
}


####################################################################
####         Liefert den Preis für die Beantwortung !
####         Argumente  : -
####         Returnwert : Betrag in Pfennigen
####################################################################
sub verdient {
	my $self = shift;
	my $pin = shift;
    my ($f, $x);
	$self->log(4,"Entering: umfrage:verdient");
	if ($pin==0) {$self->log(1, "umfrage->verdient : PIN wurde nicht übergeben !"); }
	foreach $f (@{$self->loadfragen}) {$x+=$f->verdient($pin);}
	return sprintf("%0.2f",$x*$self->{ppf}/100);#/
	
}

####################################################################
####         Gibt die Statistik für die Umfrage aus
####         Argumente  : -
####         Returnwert : -
####################################################################
sub htmlgrafik {
	my $self = shift;
        $self->log(4,"Entering: umfrage:htmlgrafik");
	$self->{FL}=$self->loadfragen;
	my @tdiff; my @FL=@{ $self->{FL} };
	my $HTML=""; my $minpin; my $maxpin; my $pin; my $changed; my @max; my @min;
	my $f;my $maxdiff=0; my $mindiff=50000000000000;
	my $pins=$self->sqldo("select distinct(pin) from ergebnis where umfid=$self->{id}")+0;

	my $sth=$self->sqlprepare("select pin, min(changed), max(changed) from ergebnis where umfid=$self->{id} group by pin");
	while ( ($pin,$min,$max)=$sth->fetchrow_array) {
		@tdiff=$self->timediff($min, $max);
	        if ($tdiff[0]>$maxdiff) {$maxpin=$pin; $maxdiff=$tdiff[0]; $maxdiffpin=$self->duration($min, $max); }
	        if ($tdiff[0]<$mindiff && $max - $min !=0 ) {$minpin=$pin; $mindiff=$tdiff[0]; $mindiffpin=$self->duration($min, $max); }
		$self->log(4,join(" - ",@tdiff));
	}

	$mindate=$self->sqlselect("select min(changed) from ergebnis where umfid=$self->{id}");
	$maxdate=$self->sqlselect("select max(changed) from ergebnis where umfid=$self->{id}");
	$HTML.="<TABLE>".
		$self->TR([ $self->sfont("Erste Antwort:"),$self->sfont($self->timestamp($mindate)) ]).
		$self->TR([ $self->sfont("Letzte Antwort:"),$self->sfont($self->timestamp($maxdate)) ]).
		$self->TR([ $self->sfont("Zeitraum:"),$self->sfont($self->duration($mindate, $maxdate)) ]).
		$self->TR([ $self->sfont("Teilnehmer:"),$self->sfont($pins) ]).
		$self->TR([ $self->sfont("Min. Teilnahmezeit:"),$self->sfont($mindiffpin) ]).
		$self->TR([ $self->sfont("Max. Teilnahmezeit:"),$self->sfont($maxdiffpin) ]).
	"</TABLE>";
		$self->log(4,"Min: ". $mindiffpin );
		$self->log(4,"Max: ". $maxdiffpin );
	my @L1;
	foreach $f (@FL) {
	push (@L1, $f->anzahlstr);
	}
	my $filename=$baseq::UMFIMG."U".$self->{id}."FRAGEN".$pins.".gif";
	if ($pins>0) {
	  grafik::paint("VL",$baseq::PATH.$filename,25,\@L1,5,$pins);
	  $HTML.=$self->IMG($filename);
	}
	$HTML.="<HR>\n";
	if ($self->{knr}==4) {$HTML.=$self->otto;}
	foreach $f  ( @FL) {
	$HTML.=$f->htmlgrafik;
	}
	return $HTML
}

sub kstatistik {
	$self=shift;
	$HTML=$self->htmlgrafik;
	$self->printhtml($self->trans("TI4"),$HTML.$self->SM('kbut',"BU13") )
}

sub pstatistik {
	$self=shift;
	$HTML=$self->htmlgrafik;
	$self->printhtml($self->trans("TI4"),$HTML.$self->SM('lbut',"BU11") )
}

####################################################################
####         Gibt die otto Statistik für die Umfrage aus
####         Argumente  : -
####         Returnwert : -
####################################################################
sub otto {
	my $self = shift;
    $self->log(4,"Entering: umfrage:otto");
    my $SQL1 = "select  hermes.depot from benutzer ".
               "left join hermes on hermes.plz=benutzer.plz left join umfidpin on umfidpin.pin=benutzer.pin where umfidpin.umfid=$self->{id}";
    my $SQL3 = "select distinct depot,ort,gebiet from hermes order by id";
    my $SQL4 = "select distinct pin from ergebnis where umfid=$self->{id}";
	my $rows = $self->sqldo($SQL4);
    my ($HTML, $pin, $plz, $depot, @adepot, @xdepot, @aleit, @xleit, $x, $leit, @proz, @Lleit, @Ldepot, @aids, $aid);
    my $file2=$baseq::UMFIMG."U".$self->{id}."O2T".$rows.".gif";
    my $sth=$self->sqlprepare("select distinct aid,antwort from antworten where umfid=$self->{id} and fid=1");
	while (($aid,$atext)=$sth->fetchrow_array) {push @aids, $aid; $atext=~/,\s*([0-9\.]+)\.\d{4}$/; push @antworts, $1}

	$sth=$self->sqlprepare($SQL1);
	while ( ($depot)=$sth->fetchrow_array) {	$adepot[$depot]++;  	}
	$sth->finish;

	foreach $aid (@aids) {	
          my $SQL2 = "select distinct ergebnis.pin ,benutzer.plz, hermes.depot from ergebnis ".
		   "left join benutzer on benutzer.pin=ergebnis.pin ".
		   "left join hermes on hermes.plz=benutzer.plz where ergebnis.umfid=$self->{id} and ergebnis.fid=1 and ergebnis.aid=$aid";
          $sth=$self->sqlprepare($SQL2);
	      while ( ($pin,$plz,$depot)=$sth->fetchrow_array) {	$xdepot[$aid][$depot]++; }
	      $sth->finish;
	}
  
	$HTML.=$self->qfont("Aufteilung der Zulieferung nach Tagen und Depots")."<BR><BR>\n";
	$HTML.="<TABLE border=1>\n".$self->TR(["Dep","Name","Geb.","n","ges", @antworts]);
	$sth=$self->sqlprepare($SQL3);
	while ( ($x,$xa,$xb)=$sth->fetchrow_array) {
    	  @xdepotaid=(); $ges=0;
	      foreach $aid (@aids) {
		      if ($xdepot[$aid][$x] eq "") {$xdepot[$aid][$x]="&nbsp;";}
		      push @xdepotaid, $xdepot[$aid][$x];
			  $ges+=$xdepot[$aid][$x];		      
		  }
		  unshift @xdepotaid, $ges;	
          if ($x<10) {$x="0".$x;}
		  if ($adepot[$x]<10){$adepot[$x]="0".$adepot[$x];}	
		  if ($adepot[$x]==0){$adepot[$x]="0";}
		  push @Ldepot,"$ges Depot[$x] ($adepot[$x])"; 
          $HTML.=$self->TR(["[$x]",$xa,$xb,$adepot[$x],@xdepotaid ]);
	}
   	$Y=open (FILE, "<$baseq::PATH.$file2"); close FILE;
	$self->log(4,"$baseq::PATH.$file2".join(" - ",@Ldepot) );
	if (! $Y) {grafik::paint("VL",$baseq::PATH.$file2, 25,\@Ldepot,0,100,0,1);}

        $HTML.="</TABLE>\n<HR>\n".$self->IMG($file2)."\n<HR>\n";

	######################################## 5.7 ) Pin, Depot,Einz,mehrfam Datum, Zuste	
	my $titel="R&uuml;ckmeldung der Panelteilnehmer";
	my $HTMLX=$self->qfont($titel)."<BR>\n<TABLE border=1>\n";
	$HTMLX.=$self->TR(["PIN","Depot","R&uuml;ckmeldung am","Katalogankunft","Wohnart"]);
	my $SQL="select ergebnis.pin, hermes.depot, ergebnis.changed, ergebnis.aid from ergebnis left join benutzer on ergebnis.pin=benutzer.pin left join hermes on hermes.plz=benutzer.plz where umfid=$self->{id} and fid<3 order by ergebnis.pin, ergebnis.fid";
	my $sth=$self->sqlprepare($SQL);
	my $oldpin=0;
	foreach $f (@{$self->{FL}}) {
		if ($f->{id}==1) {@F1A=$f->antwortarray}
		if ($f->{id}==2) {@F2A=$f->antwortarray}
	}
	while (@L=$sth->fetchrow_array) {
		my $pin=$L[0];
		if ($pin==$oldpin) {
			push (@Lout, @F2A[$L[3]] ) ;
			$HTMLX.=$self->TR(\@Lout);
		}
		else { 
			@Lout=@L; 
			$Lout[2]=$self->timestamp($Lout[2]);
			$Lout[3]=@F1A[$Lout[3]];
			$oldpin=$pin;
		}
	}
        $HTMLX.="</TABLE>\n";
	my $filename=$baseq::UMFIMG."U".$self->{id}."OTTO-TAB".$sth->rows.".html";
	$self->log(4,"OTTO-Schreckliche Tabelle: ".$baseq::PATH.$filename);
	$self->printhtml($titel,$HTMLX,$baseq::PATH.$filename);
	$HTML.=$self->AH($filename,$self->qfont($titel))."<HR>\n";
	return $HTML;

}

####################################################################
####         Selektiert eine neue PIN für Panellose Umfragen
####         Argumente  : -
####         Returnwert : Neue Pin
####################################################################
sub newpin {
	my $self = shift;
        $self->log(4,"Entering: umfrage:newpin");
        my ($a,$b,$c,$d)=$ENV{REMOTE_ADDR}=~/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/;
	my $avgpin=$self->sqlselect("select avg(pin) from ergebnis where umfid=$self->{id}");
	$avgpin=~s/\..*$//;
	my $resu=$avgpin+$a+$b+$c+$d;
	$self->log(4,"AveragePIN: $avgpin+$a+$b+$c+$d=$resu");
	while ($self->sqlselect("select pin from ergebnis where umfid=$self->{id} and pin=$resu")>0) {$resu++;}
	$self->log(4,$baseq::VARS{fid});
	$baseq::VARS{fid}=$self->{firstfid};
	return $resu;
}

####################################################################
####         Überprüft den Umfragenzeitraum
####         Argumente  : -
####         Returnwert : 0=aktuell, 1=noch nicht aktiv, 2=vorbei
####################################################################
sub checkdate {
      my $self = shift;
      $self->log(4,"Entering: umfrage:checkdate");
      my $date = $self->sqlselect("select NOW() from umfragen");
      my $user = $self->sqldo("select distinct pin from ergebnis where umfid=$self->{id}");
      if ( ($baseq::VARS{fid} < 1) or ($baseq::VARS{fid} == $self->{firstfid}) ) {$user++}
      my $ret=0;
      $self->log(4,"Datum=$date");
      if ($date gt $self->{ende}) {$ret=2;}
      if ($date lt $self->{beginn}) {$ret=1;}
      if ($user > $self->{maxuser}) {$ret=3;}
      return $ret;
}
