# 2: nur aktuelle general-Einträge
# 4: nur aktuelle Einträge
#    (auch automatisch, wenn einzelne Listen abgefragt werden)

use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_printer edit_kunden );
use Dbase::Globals qw(get_kunde find_dienst in_euro name_kunde rund
	name_dienst);
use Dbase::Help qw(DoFn DoSelect isotime qquote);
use Cf qw($EURO);
use Fehler qw(problem);

sub lts_euro($) {
	my($e)=@_;
	return undef unless defined $e;
	return 0 if $e == 0;
	return 10*rund($e/$EURO/10);
}

sub list_tarife($;$$$) {
	my($tkid,$kn,$flag,$dienst) = @_;
	$flag=0 unless defined $flag;

	my($kla1,$kla2,$kla3) = ("","","");
	if($flag & 2) { # nur general-Tarife
		my $dg = find_dienst "general";
		$kla2.=" and tarif.dienst = $dg" if defined $dg;
	} else {
		$kla2 = "";
	}
	$kla2 .= " and tarif.klasse=$tkid" if $tkid;
	if(defined $dienst) {
		my $dien = $dienst =~ /^\d+\z/ ? $dienst : find_dienst $dienst;
		return problem "Dienst '$dienst' nicht gefunden" unless defined $dien;
		$kla2 .= " and tarif.dienst=$dien";
	}
	if($flag & (2|4)) {
		$kla3 = " desc";
	} else {
		$kla3 = " ";
	}

	line_printer;

	# print "select tarif.id,tarifname.name,tarif.dienst, tarif.intval,tarif.frei,tarif.festpreis,tarif.preis,tarif.skala,tarif.unitpreis,tarif.beginn,tarif.info,tarif.mini,tarif.unitmini,tarif.fkonto,tarif.vkonto from tarif,tarifklasse,tarifname $kla1 where tarifname.id=tarifklasse.tarifname and tarifklasse.id=tarif.klasse $kla2 order by tarifname.name,beginn $kla3,unitmini,mini,tarif.id";
	my @dl; # angedruckte Dienste
	my $lname="";
	my $hdr;
	my $res = DoSelect {
		my($id,$name,$dienst,$intval,$frei,$festpreis,$preis,$skala,$unitpreis,$beginn,$info,$mini,$unitmini,$fkonto,$vkonto,$kid) = @_;

		print $Db::pr_fh <<'_' unless $hdr++;
                                  Byte/     EUR/     EUR/     EUR/      EUR
  ID K Name            Dienst     Block    Block    Paket   Bestlg     frei
  \\                                    minBlock minPaket    Kfest     Kvar
_

		if($flag & 2) {
			return if defined $lname and $lname eq $name;
			$lname = $name;
		}
		if($flag & 4) {
			@dl=() if $lname ne $name;
			$lname = $name;
			return if defined $dl[$dienst] and $dl[$dienst] != $beginn;
			$dl[$dienst] = $beginn;
		}

		unless(in_euro($beginn)) {
			$preis = lts_euro($preis);
			$unitpreis = lts_euro($unitpreis);
			$festpreis = lts_euro($festpreis);
			$frei = lts_euro($frei);
		}
		
		goto out unless 
		printf $Db::pr_fh "%4d %1s %-15s %-8s %-7s %8.2f %8.2f %8.2f %8.2f\n",$id,$intval,$name,name_dienst($dienst), $skala,$preis/1000,$unitpreis/1000,$festpreis/1000,$frei/1000;
		no warnings 'uninitialized';
		printf $Db::pr_fh "                                        %8d %8d %8d %8d",$mini,$unitmini,$fkonto,$vkonto if $mini or $unitmini or $fkonto or $vkonto;
		print $Db::pr_fh " $info" if defined $info;
		print $Db::pr_fh "  ab ".(isotime $beginn) if $beginn > 0;
		print $Db::pr_fh " für ".(name_kunde $kid) if $kid > 0;
		print $Db::pr_fh "\n";
	} "select tarif.id,tarifname.name,tarif.dienst, tarif.intval,tarif.frei,tarif.festpreis,tarif.preis,tarif.skala,tarif.unitpreis,tarif.beginn,tarif.infotext,tarif.mini,tarif.unitmini,tarif.fkonto,tarif.vkonto,tarifklasse.kunde from tarif,tarifname,tarifklasse $kla1 where tarifname.id=tarifklasse.tarifname and tarifklasse.id=tarif.klasse $kla2 order by tarifname.name,tarif.beginn $kla3,tarif.mini,tarif.unitmini,tarif.id"
		or print "(leer)\n";
out:
	$res;
}
1;
