=head4 list_stunden_ueber

C<list_stunden_ueber( Person [ Prompt [ Flag ]] )>

Listet alle anstehenden Überstunden einer Person auf.

Flag=1: zeige an, wenn ein Wert begrenzt wird.

=cut

use utf8;
use warnings; no warnings "redefine";
use strict;

use Loader qw(line_printer);
use Dbase::Help qw(DoSelect DoFn isodate DoTime);
use Dbase::Globals qw(iso_intervall kpersinfo mpersinfo);

sub list_stunden_ueber($;$$) {
	my($pid,$kn,$flag) = @_;
	$flag=0 unless defined $flag;
	my $hdr=0;
	line_printer;

	printf $Db::pr_fh <<END,mpersinfo($pid,1),scalar isodate(DoTime());
*** Arbeitszeitkonto: %s, Stand %s

END


	my($thism,$minm,$sum, $maxdges,$ueber) = DoFn("select letzter,anfangsmonat,anfangsueber, ueberstundenlimit,ueberstunde from perso where person=$pid");

	if(not defined $minm) {
		$minm = DoFn("select min(monat) from persomonat where person=$pid and diff != 0") ;

		my ($j,$m,undef) = isodate(DoTime());
		$m -= 6; if($m <= 0) { $m += 12; $j--; }
		my $sixm = 100*$j+$m;

		$minm = $sixm if not $minm or $minm > $sixm;
	}
	$sum=0 unless defined $sum;
	my $usum=$sum;
	$minm = "and monat >= $minm";
	$thism = "and monat <= $thism" if $thism;
	my $did = DoSelect {
		my($mon,$dif,$lim) = @_;
		unless($hdr++) {
			print $Db::pr_fh "Monat   Differenz\n";
			print $Db::pr_fh "*Start  ".iso_intervall($sum,4)."\n" if $sum;
		}
		my $rs = "";
		$usum += $dif;
		my $pdif = $dif;
		$lim = $maxdges unless defined $lim;

		$sum += $dif;
		if(defined $lim and $sum > $lim) {
			$rs .= " / ".iso_intervall($sum-$lim,4) if $flag&1;
			$sum = $lim;
		}

		printf $Db::pr_fh "%4d-%02d %s%s\n",int($mon/100),$mon%100, iso_intervall($pdif,4), $rs;
	} "select monat,diff,ueberstundenlimit from persomonat where person=$pid $minm $thism order by monat";

	if($did) {
		print <<_;
=======================
_
		printf $Db::pr_fh <<_, iso_intervall($sum,4);
aktuell %s (hier berechnet)
_
#		printf $Db::pr_fh <<_, iso_intervall($ueber,4);
#aktuell %s (laut DB)
#_
#		printf $Db::pr_fh <<_, iso_intervall($usum,4) if $usum != $sum;
#       (%s ohne Begrenzungen)
#_
	} else {
		print $Db::pr_fh "Keine Stundendifferenzen erfasst!\n";
		print $Db::pr_fh "(Anfangsdifferenz: ".iso_intervall($sum,4).")\n" if $sum;
	}

	my($u,$ru) = DoFn("select urlaub,resturlaub from perso where person=$pid");
	printf $Db::pr_fh "Urlaub: %5.1f    (Resturlaub)\n", $ru/3600/24 if $ru;
	printf $Db::pr_fh "Urlaub: %5.1f    (dieses Jahr)\n", $u/3600/24;


}

1;
