use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_printer);
use Dbase::Globals qw(get_descr get_kunde is_dienst name_kunde timerange
	name_dienst);
use Dbase::Help qw(DoSelect);

# Flag:
# 1 auch alte Einträge
# 2 auch Einträge ohne bzw. mit Kunde
sub list_tarifaccts($;$$) {
	my($id,$kn,$flag) = @_;
	my $ks = "";
	my $ks_ = "where";
	$id = get_kunde($id,1);
	$flag=0 unless defined $flag;

	unless($flag & 1) {
		$ks .= " $ks_ ( tarifacct.ende is NULL or tarifacct.ende > UNIX_TIMESTAMP(NOW()) )";
		$ks_ = "and";
	}
	if($id) {
		if($flag & 2) {
			$ks .= " $ks_ ( tarifacct.kunde is null or tarifacct.kunde = $id or tarifacct.dkunde = $id )";
		} else {
			$ks .= " $ks_ ( tarifacct.kunde = $id or tarifacct.dkunde = $id )";
		}
		$ks_ = "and";
	} else {
		unless ($flag & 2) {
			$ks .= " $ks_ tarifacct.kunde is null";
			$ks_ = "and";
		}
	}
	my $hdr;
	line_printer;

	my $hinweis = "\nRegeln bei anderen Kunden, die auf diesen Kunden zeigen:\n";

	my $res = DoSelect {
		my($tari,$ki,$name,$dienst,$ziel,$quelle,$faktor,$beginn,$ende,$direkt,$ddienst,$dkunde) = @_;
		$name = "-" unless defined $name;
		my($d,$z);
		if($dienst) {
			$d = name_dienst $dienst;
			if (defined $ziel) {
				if(is_dienst($dienst,"nic")) {
					$z = get_descr('acctinfo',$ziel);
				} else {
					$z  = get_descr($d,$ziel);
				}
				$z = get_descr('ziel',$ziel) if not defined $z;
				$z = "?" if not defined $z;
			} else {
				$z = "*";
			}
		} else {
			$d = "*";
			if( defined $ziel && $ziel > 0 ) {
				$z = get_descr("ziel",$ziel);
				$z = "?" if not defined $z;
			} else {
				$z = "*";
			}
		}
		if($quelle) {
			$quelle = get_descr("quelle",$quelle);
			$quelle = "?" if $quelle eq "";
		} else {
			$quelle = "*";
		}

		if($ddienst) {
			$ddienst = "Ziel:".name_dienst($ddienst)." ";
		} else {
			$ddienst = "";
		}
		if($dkunde and $dkunde != $id) {
			$dkunde = "Kunde:".name_kunde($dkunde)." ";
		} else {
			$dkunde = "";
		}

		print $Db::pr_fh "    Nr Faktor Tarif            Dienst    Ziel      Quelle\n" unless $hdr++;

		if($ki and $id and $ki != $id) {
			print $Db::pr_fh $hinweis if defined $hinweis;
			undef $hinweis;
			$dkunde .= "von Kunde:".name_kunde($ki)." ";
		}

		goto out unless
		printf $Db::pr_fh "%1s%1s%4d %6.2f %-16s %-9s %-9s %-9s %s\n", ($id == $ki) ? " " : ".",$direkt,$tari,$faktor/100,$name,$d,$z,$quelle,(($id==0 and $ki != 0) ? "#$ki ":"").$dkunde.$ddienst.timerange($beginn,$ende);
	} <<1 . ( defined $id && <<2 ) . <<3 or print "(leer)\n";
	SELECT    tarifacct.id,
	          tarifacct.kunde,
	          tarifname.name,
	          tarifacct.dienst,
	          tarifacct.ziel,
	          tarifacct.quelle,
                  tarifacct.faktor,
                  tarifacct.beginn,
                  tarifacct.ende,
                  tarifacct.direkt,
                  tarifacct.ddienst,
                  tarifacct.dkunde
	FROM      tarifacct
	LEFT JOIN tarifname ON tarifname.id = tarifacct.tarifname
	$ks
	ORDER BY
1
	          tarifacct.kunde IS NULL OR tarifacct.kunde = $id DESC,
2
	          tarifacct.id, tarifacct.kunde
3

out:
	$res;
}

1;
