package kasse;

use template;

@ISA = qw ( template );


####################################################################
####         Konstruktor der Kassenklasse
####         Argumente  : -
####         Returnwert : -
####################################################################
sub init {
	my $that = shift;
	my $class = ref($that) || $that;
	my $self = template->init(@_);
	bless $self, $class;	
	$self->{template} = $self->{parent}->{template}+0;
	$self->{sprache}  = $self->{parent}->{sprache}+0;
	$self->loadtmp;
	return $self;
}


####################################################################
####         Schreibt ins Logfile
####         Argumente  : Emergency und Logtext
####         Returnwert : -
####################################################################
sub log {
	my $self = shift;
        my $emer = shift;
	my $TEXT = shift;
	$self->printlog($emer, "[Kasse] $TEXT");
}

####################################################################
####         Konstruktor der Kassenklasse
####         Argumente  : pin
####         Returnwert : Gesamtverdienst
####################################################################
sub kontostand {
	my $self = shift;
	my $pin=shift;
	if ($pin == 0) {$pin=$baseq::VARS{pin};}
	if ($pin==0) {$self->log(1,"Achtung keine Pin gefunden");}
	my $sql = "select sum(betrag) from kasse where pin=$pin";
	return $self->sqlselect($sql);
}

####################################################################
####        Kosten einer Umfrage
####         Argumente  : umfid
####         Returnwert : sum(betrag)
####################################################################
sub umfragekosten {
	my $self = shift;
	my $umfid =shift;
	my $sql="select sum(betrag) from kasse where umfid=$umfid";
	return $self->sqlselect($sql);
}

####################################################################
####         Kosten aller Umfragen
####         Argumente  : -
####         Returnwert : sum(betrag)
####################################################################
sub sumbetrag {
	my $self = shift;
	my $sql="select sum(betrag) from kasse";
	return $self->sqlselect($sql);
}

####################################################################
####         Kosten aller Umfragen + Kontostande mit Betrag "x"
####         Argumente  : -
####         Returnwert : sum(betrag); Tabelle
####################################################################
sub ingehtml {
	my $self = shift;
	my $ibetrag=$baseq::VARS{ibetrag};
	my ($day,$mon,$year) = (localtime(time))[3,4,5];
    	my $datum=$day.".".($mon+1).".".($year+1900);
	if ($ibetrag==0)	{$ibetrag=25;}
	my $summe=$self->sumbetrag;

	#das Datum 'manipulieren'
	my $HTML=$self->qfont("Kassenstand am 31.12.2016 ist: ").$self->qfont(($summe / 100)).
#	my $HTML=$self->qfont("Kassenstand am $datum ist: ").$self->qfont(($summe / 100)).
        #$self->qfont(" Euro&nbsp;/ ").$self->qfont(sprintf("%0.2f DM",($summe *0.0195583))).$self->qfont("<BR><BR>\n").
	 $self->qfont(" Euro&nbsp; ").$self->qfont("<BR><BR>\n").
		"Panelteilnehmer, deren Kontostand ".$self->TF("ibetrag",$ibetrag,5)." Euro &uuml;bersteigt.<BR><BR>\n".
		"<TABLE border=1>\n".$self->betragx($ibetrag)."</TABLE>\n<BR><BR>\n".
       "Auszahlung von Euro: ".$self->TF("iauszahl","",5)." an PIN: ".$self->TF("ipin","",5)."&nbsp;&nbsp;".$self->SM("ibut","BU27")."<BR><BR>\n".
	   "<HR>".$self->SM("ibut","BU47")."<BR>\n";
	return $HTML;
}

####################################################################
####         Auszahlung
####         Argumente  : Betrag der ausgezahlt wird, und Pin des Beguenstigten
####         Returnwert : -
####################################################################
sub auszahlung {
	my $self  = shift;
	my $iauszahl = shift()*-100;
	my $ipin = shift;
	$self->log(4,"Bezahle $iauszahl Eurocent an PIN:$ipin");
	if ($ipin ==0 || $iauszahl==0) {return;}
	my $sql = "select pin from kasse where pin=$ipin";
	my $erg=$self->sqlselect($sql);
	if (! defined $erg) {
			$self->{warntext}="Teilnehmer PIN $ipin existiert nicht , oder sein Kontostand = 0";
			return $self->{warntext};
			$self->exit;
	}
	
	$sql = "select sum(betrag) from kasse where pin=$ipin";
	my $sth=$self->sqlselect($sql);
	$self->log(2,"Kontostand $sth Eurocent; Teilnehmer PIN:$ipin");
	$self->log(2,"Wird ueberprueft: $sth < ( -1*$iauszahl)");
	$self->log(2,"Zum Auszahlen: $iauszahl Eurocent an PIN:$ipin");

	#if (((-1)*$sth) < ($iauszahl)) {
	#Das Problemm mit dem Betrag bei der Auszahlung

	my $pruefauszahl=-1*$iauszahl;
	$self->log(2,"Pruefung des Betrages fuer die Auszahlung. Betrag: $pruefauszahl");

	if ($sth < $pruefzahl) {
	    $self->log(2,"Pruefung des Betrages fuer die Auszahlung. Pruefung: $sth < $pruefauszahl");
	    $self->{warntext}=(-1*$iauszahl/100)." Euro an PIN: $ipin kann nicht ausbezahlt werden<BR>Kontostand ist ".( $sth/100)."  Euro";
	    return $self->{warntext};
	}
	else{
		$sql="insert into kasse values($ipin,0,$iauszahl,NULL)";
		$self->sqldo($sql);
		$self->{warntext}=(-1*$iauszahl/100)." Euro an PIN: $ipin ist ausgezahlt worden";
		return $self->{warntext};
		}
}	
####################################################################
####         Betrag für angeworbene Teilnehmer > X Euro
####         Argumente  : Betrag in Euro
####         Returnwert :  HTML liste der Benutzer
####################################################################
sub werbebetrag {
	my $self = shift;
	my $pin = shift;

		#Anzahl angeworbenen Teilnehmern ermitteln:
		my $sql="select count(pin) from benutzer where werbpin=$pin";
		my $countwerbpin= $self->sqlselect($sql);
		my $werbbetrag=$countwerbpin*1.5;
		return $countwerbpin,$werbbetrag;

}

####################################################################
####         Betrag > X Euro
####         Argumente  : Betrag in Euro
####         Returnwert :  HTML liste der Benutzer
####################################################################
sub betragx {
	my $self = shift;
	my $betrag=shift; 
	#my $HTML=$self->TR( [ "PIN","Anrede","Vorname","Nachname","Straße","PLZ","Stadt","Land","Zahlungsart","Bank","BLZ","Kontonummer","Betrag"] );
	#my $sql="select kasse.pin, anrede, vname, nname,strasse,plz, stadt,land, lohnart,bank,blz,kontonr, sum(betrag)/100 A ".
	#	" from benutzer left join kasse using(pin) group by kasse.pin having A>=$betrag";
	#+++++++++++++++++++++++++++++++++++++++
	# Original:

	#my $HTML=$self->TR( [ "PIN","Anrede","Vorname","Nachname","Straße","PLZ","Stadt","Land","Zahlungsart","Betrag"] );

	#my $sql="SELECT kasse.pin,benutzer.anrede, benutzer.vname, benutzer.nname,benutzer.strasse,benutzer.plz, benutzer.stadt,benutzer.land,".
	#" benutzer.lohnart, Sum(kasse.betrag)/100 Sum FROM benutzer LEFT JOIN kasse ON benutzer.pin = kasse.pin GROUP BY kasse.pin HAVING (Sum>=$betrag)";
	#+++++++++++++++++++++++++++++++++++++++++

	my $HTML=$self->TR( [ "PIN","Vorname","Nachname","Straße","PLZ","Stadt","Betrag"] );

	my $sql="SELECT kasse.pin, benutzer.vname, benutzer.nname,benutzer.strasse,benutzer.plz, benutzer.stadt, Sum(kasse.betrag)/100 Sum".
	" FROM benutzer LEFT JOIN kasse ON benutzer.pin = kasse.pin GROUP BY kasse.pin HAVING (Sum>=$betrag)";

	my $sth=$self->sqlprepare($sql);

    while (@X=$sth->fetchrow_array) {	
	
	# Für Original:
		#$X[1]=$baseq::HF[$X[1]];	
		#$X[7]=$baseq::LK[$X[7]];
		$HTML.=$self->TR(\@X);}
		return $HTML;
}

####################################################################
####         Wenn jemand bei einer Umfrage Geld auf sein Konto bekommt
####         Argumente  : pin, umfid , verdienter Betrag
####         Returnwert : sum(betrag)
####################################################################
sub haben {
	my $self  = shift;
	my $pin = shift;
	my $umfid = shift;
	my $geld = shift;
	my $sql2;
	my $sql1="select betrag from kasse where pin=$pin and umfid=$umfid";
	my $betrag=$self->sqlselect($sql1);
		if (!defined $betrag) {$sql2="insert into kasse values($pin, $umfid, $geld, NULL)";
			}else{
			 $sql2="update kasse set betrag=$geld where pin=$pin and umfid=$umfid";
		 }
	$self->sqldo($sql2);
	return
}

####################################################################
####         Wenn jemand für die Werbung Geld auf sein Konto bekommt
####         Argumente  : pin, Werbung-umfid=1 , verdienter Betrag- € 1.5
####         Returnwert : sum(betrag)
####################################################################
sub habenwerb {
	my $self  = shift;
	my $werbpin = shift;
	my $sql2;
	$self->log(4,"Kassenbestand wird aktualisiert - pin=$werbpin ".$werbpin);	
	my $sql1="select betrag from kasse where pin=$werbpin and umfid=1";
	#my $betragx=$self->sqlselect($sql1);
	#		if (!defined $betragx) {$sql2="insert into kasse values($werbpin, 1, 150, NULL)";
	#			}else{
	#			 $sql2="update kasse set betrag=($betragx+150) where pin=$werbpin and umfid=1";
	#		 }
        my $betragx=$self->sqlselect($sql1);
                        if (!defined $betragx) {$sql2="insert into kasse values($werbpin, 1, 0, NULL)";
                                }else{
                                 $sql2="update kasse set betrag=($betragx+0) where pin=$werbpin and umfid=1";
                         }


	$self->sqldo($sql2);
	return
}
####################################################################
####         Kontostand anzeigen und Ausgabe
####         Argumente  : pin
####         Returnwert : -
####################################################################
sub kontohtml {	
	my $self= shift;
	#my $knr = shift;
	my $pin = shift;
	my $pass = shift;
	
	my $sum=0;
	my $HTML;

########################## mit Subdir
	my ($countwerbpin,$werbbetrag)=$self->werbebetrag($pin);

		#Haben in der Kasse
		my $sql1="select betrag from kasse where pin=$pin and umfid=1";
		my $habenbetrag=$self->sqlselect($sql1);
		
		$self->log(4,"habenbetrag = ".$habenbetrag." sollbetrag = ".($werbbetrag*100));

		if ($habenbetrag != ($werbbetrag*100)) {
				$sql1= "update kasse set betrag=($werbbetrag*100) where umfid=1 and pin=$pin";
				$self->sqldo($sql1);
				$habenbetrag =$sollbetrag*100;
		}

		$self->log(4,"Entering: kasse: betragx-Allgemein $countwerbpin ".$countwerbpin." Werbebetrag ".$werbbetrag);
##########################

	
	my $sql1="select vname,nname from benutzer where pin=$pin";
	my @person=$self->sqlselect($sql1);
	$self->{warntext}="Kontostand: ".$person[0]." ".$person[1]."<BR>PIN: ". $pin;
						
	my $HTML="\n<TABLE BORDER='2'>\n".
	                    $self ->TR([ $self->sfont("Umfrage"),$self->sfont( "Datum"), $self->sfont("Betrag in EURO")],"align=\"center\"");
 
	my $sql2="SELECT umfragen.umfrage, kasse.changed, kasse.betrag FROM umfragen LEFT JOIN kasse ON umfragen.umfid = kasse.umfid WHERE pin=$pin order by kasse.changed";
	my $sth= $self->sqlprepare($sql2);
	while(@liste=$sth->fetchrow_array){

		$sum+=$liste[2];
		$liste[0]=$self->sfont($liste[0]);
		$liste[1]=$self->sfont($self->timestamp($liste[1]) );
		#$liste[2]=$self->rightsfont(sprintf("%0.2f",$liste[2]/100) );
		$liste[2]=$self->sfont(sprintf("%0.2f",$liste[2]/100) );
		$HTML.=$self->TR(\@liste,"bgcolor=\"#ffffff\"",["",""," align=\"right\""]);	
		#$HTML.=$self->TR(\@liste);	

	}
	#$HTML.="</TABLE><BR><BR><HR><BR>".$self->sfont("Gesamtbetrag = Saldo: ".sprintf("%0.2f",($countwerbpin*1.5+$sum/100))." EURO/ ".sprintf("%0.2f",($sum/51.129+$countwerbpin*1.5*1.95583))." DM")."<BR><BR>\n";
	$HTML.="</TABLE><BR><BR><HR><BR>".$self->sfont("Gesamtbetrag = Saldo: ".sprintf("%0.2f",$sum/100)." EURO ")."<BR><BR>\n";

	#$HTML.="<BR>\n<CENTER><TABLE BORDER='2'>\n".
#        $HTML.="<BR>\n<CENTER><FONT COLOR='#CC3300'>Zur Zeit zahlen wir keine Prämien für Werbung neuer Mitglieder aus.<BR>";
#040204        $HTML.="Bereits aufgelistete Prämien werden selbstverständlich ausbezahlt.</FONT><BR><BR>";
#040204        $HTML.="<TABLE BORDER='2'>\n".
#040204		$self ->TR([" ", $self->sfont("Anzahl angeworbener Teilnehmer"),$self->sfont("Betrag in EURO")],"align=\"center\"");
	#Original 
		#Anzahl angeworbenen Teilnehmern ermitteln:
		#my $sql="select count(pin) from benutzer where werbpin=$pin";
		#my $countwerbpin= $self->sqlselect($sql);

########################## mit Subdir
#		($countwerbpin,$werbbetrag)=$self->werbebetrag($pin);
#
#		#Haben in der Kasse
#		 $sql1="select betrag from kasse where pin=$werbpin and umfid=1";
#		my $habenbetrag=$self->sqlselect($sql1);
#		
#		$self->log(4,"habenbetrag = ".$habenbetrag." sollbetrag = ".($sollbetrag*100));
#
#		if ($habenbetrag != ($sollbetrag*100)) {
#				$sql1= "update kasse set betrag=($sollbetrag*100) where umfid=1 and pin=$werbpin";
#				$self->sqldo($sql1);
#				$habenbetrag =$sollbetrag*100;
#		
#}
#
#		$self->log(4,"Entering: kasse: betragx-Allgemein $countwerbpin ".$countwerbpin." Werbebetrag ".$werbbetrag);
##########################
#040204		$HTML.=$self->TR([$self->sfont("Werbeprämie"),$self->sfont($countwerbpin),$self->sfont("je 1.50")],"align=\"center\"");

#040204	$HTML.="</TABLE><BR><\CENTER>";

	#$HTML.="<A HREF='javascript:history.back();'>Zurück</A>";
	#$HTML.=$self->SM('but',"BU13")."\n";
    return $HTML;

 }
##################################################################

