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);
use noris::Table;

my $gen_table = sub {
	my ($t) = @_;
	$t->drucken() if $t;
	$t = noris::Table->new();
	$t->titel(
		{ name => 'Nr',     format => '%-6s'  },
		{ name => 'Faktor', format => '%9s'   },
		{ name => 'Tarif',  format => '%-16s' },
		{ name => 'Dienst', format => '%-9s'  },
		{ name => 'Ziel',   format => '%-9s'  },
		{ name => 'Quelle', format => '%-9s'  },
		{ name => ' ',      format => '%s'    },
	);
	return $t;
};

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

	unless($flag & 1) {
		push @where, '( tarifacct.ende is NULL or tarifacct.ende > UNIX_TIMESTAMP(NOW()) )';
	}
	if($id) {
		if($flag & 2) {
			push @where, "( tarifacct.kunde is null or tarifacct.kunde = $id or tarifacct.dkunde = $id )";
		} else {
			push @where, "( tarifacct.kunde = $id or tarifacct.dkunde = $id )";
		}
	} else {
		unless ($flag & 2) {
			push @where, "tarifacct.kunde is null";
		}
	}

	line_printer;

	my $hinweis = "\nRegeln bei anderen Kunden, die auf diesen Kunden zeigen:\n";
	my $t = $gen_table->();
	my $where = @where > 0 && "\n WHERE     " . join "\n   AND ", @where;
	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 = "";
		}

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

		#goto out unless
		$t->daten(
			sprintf( "%1s%1s%4d", ( $ki and $id and $id == $ki ) ? " " : ".", $direkt, $tari ),
			sprintf( "%6.2f", $faktor / 100 ),
			$name, $d, $z, $quelle,
			( ( $ki and $id and $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
	$where
	ORDER BY
1
	          tarifacct.kunde IS NULL OR tarifacct.kunde = $id DESC,
2
	          tarifacct.id, tarifacct.kunde
3

out:
	$t->drucken();
	$res;
}

1;
