=head4 list_stunden_hotline

C<list_stunden_hotline( [Person] [kunde] [Beginn] [Ende] [Flags] )>

Listet alle Hotline-Stundeneinträge einer Person und/oder eines Kunden in
einem bestimmten Zeitraum auf. Alle C<undef>-Parameter (außer den Flags
*g*) werden abgefragt.

Soll die Liste für alle Personen bzw. Kunden erstellt werden, ist "-"
zu übergeben.

Flag=1: line_printer() nicht aufrufen, da Teil einer anderen Ausgabe.

Flag=2: Personenname als Teil der Überschrift ausgeben

Flag=4: Spaltenüberschrift nicht ausdrucken

Die Überschrift ist in $Loader::list_stunden_hotline::HDR.

=cut

use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw( check_perm check_vorgesetzter current_user
               edit_kunden edit_personen edit_tickets
               line_in line_printer
	       select_date );
use Dbase::Globals qw(
	content
	iso_intervall
	ist_unterkunde
	kpersinfo
	name_kunde
	no_crlf
	stunden_bereich
  );
use Dbase::Help qw(DoFn DoSelect isotime);
use Fehler qw(problem warnung);

our $HDR = <<_;
 #     ID Kunde       Ticket Start            Dauer Art         Text
_

sub list_stunden_hotline(;$$$$$) {
	my($pid,$kid,$beginn,$ende,$flags) = @_;
	$flags = 0 unless defined $flags;

	unless(defined $pid) {
		$pid = edit_personen(1,1+4,"Hotlineliste:");
		return undef unless defined $pid;
	}
	$pid = undef if $pid eq "-";

	unless(defined $kid) {
		$kid = edit_kunden(1+4,"Hotlineliste:");
		return undef unless defined $kid;
	}
	$kid = undef if $kid eq "-";

	# Darf der das?
	my $ok = check_perm("perso",1);
	$ok ||= (defined $pid and $pid == current_user());
	$ok ||= (defined $kid and not ist_unterkunde($kid));
	$ok ||= check_vorgesetzter( undef, $pid ) if $pid;
	return problem "Du darfst diese Stunden nicht ansehen (kein perso-Flag)."
		unless $ok;

	unless(defined $beginn) {
		$beginn = select_date(0,"Zeitraum von",undef,qw(= heute));
		return undef unless defined $beginn;
	}
	unless(defined $ende) {
		$ende = select_date(16,"Zeitraum bis",undef,qw(= heute));
		return undef unless defined $ende;
	}
	$beginn = select_date(1|2048) if $beginn eq "=";
	$ende = select_date(32|2048) if $ende eq "=";

	line_printer unless $flags&1;

	my($hdr, $res);
	my $fnr = 0;
	my $paus;
	my $opid = 0;
	my $end = 0;

	$res = stunden_bereich($pid,$kid,$beginn,$ende,4|32, sub {
		my $subid = pop @_;
		my (
			$sid,  $beg,  $dau,  $person, $kunde, $faktor,
			$text, $tick, undef, undef,   $art,
		) = @_;
		if(not defined $sid) {
			$paus = $dau;
			return;
		}

		print $Db::pr_fh $HDR unless $flags&4 or $hdr++;
		print $Db::pr_fh "\n*** ".kpersinfo($pid)."\n"
			if $flags&2 and $pid != $opid;

		(my $begs = isotime $beg,2) =~ s/\s+\+.*//;

		$fnr=0 if $pid != $opid;
		my $fns = "";
		my $fnt = "";

		if((defined $paus or $end==$beg) and $pid==$opid) {
			if($paus) {
				$paus /= 60;
				$fnt = " (+$paus)";
			}
		} else {
			$fns = ++$fnr;
		}

		$art =~ s/^Hotline-//i;
		printf $Db::pr_fh "%2s %6d %-10s %7d %-10s %-5s %-11s %s%s\n",
			$fns, $sid, name_kunde($kunde) || '-', $tick || 0, 
			$begs, iso_intervall($dau,4), $art, no_crlf($text), $fnt
			or goto out;

		$paus = undef;
		$end = $beg+$dau;
		$opid = $pid;
	});

out:
	$res;
}

1;
