use utf8;
use warnings; no warnings "redefine";
use strict;
use Fehler qw(report_fehler);
use Dbase::Help qw(DoFn);
use Loader qw(line_in valid_tarif copy_tarif delete_tarif
	flip_tarif_anzahl flip_tarif_vrechnung list_tarif
	list_tarif_kunden log_view set_tarif_blockgroesse
	set_tarif_datum set_tarif_dienst set_tarif_finfo set_tarif_fixkonto
	set_tarif_freitext set_tarif_freivolumen set_tarif_info
	set_tarif_intervall set_tarif_konto set_tarif_kunde
	set_tarif_min_bloecke set_tarif_min_pakete flip_tarif_frechnung
	set_tarif_preis_bestellung set_tarif_preis_block
	set_tarif_preis_paket set_tarif_varkonto set_tarif_vinfo
	set_tarif_description set_tarif_sla 
	warn_kunde strip_kn
);

sub edit_tarif($;$$) {
	my($tari,$kn,$kunde) = @_;

	return unless valid_tarif($tari);

	{
		my($tn,$tk,$td) = DoFn("select tarifname.name,tarifklasse.id,dienst.name from tarif,tarifklasse,tarifname,dienst where tarif.id=$tari and tarifname.id=tarifklasse.tarifname and tarifklasse.id=tarif.klasse and dienst.id=tarif.dienst");
		warn_kunde("tarifklasse",$tk,$kunde);

		$kn = strip_kn($kn)."TarifDef_$tari:$tn/$td";
		if($kunde) {
			$kn .= "/K";
		}
	}
	unless(DoFn("select id from tarif where id = $tari")) {
		print "...gibt es nicht.\n";
		return undef;
	}
	while(1) {
		my $act = line_in "$kn >",4; last if $act eq "";
		if($act eq '?') {
			print <<'END';
l   auflisten                      pd  Einrichtungsgebühren/einmalige Kosten
pb  wiederkehrende Kosten          pe  Preis pro Einheit/Block
g   Größe eines Blocks             f   Freikontingent (Preis)
i   Infotext setzen                ff  Freikontingent (als lesbarer Text)
b   Berechnungsmodus               x   Anfangszeit ändern    d   Dienst ändern
N   Preisänderung (ab Stichtag)    NK  auf anderen Kunden duplizieren
if  Infotext Festpreise            iv  Infotext variable Preise
D   Beschreibung editieren         w   Wartungsfenster editieren
bz  Betriebszeit editieren         sz  Servicezeit editieren
ap  Anzahl auf Preis umschlagen?   K   Kunden ändern
md  min #Datenpakete               me  min #Blöcke
kv  Konto für variable Kosten      kf  Konto für feste Kosten
kk  Konto für feste+variable Kosten (Vereinfachung) Kosten
r   erscheint auch auf der Rechnung, wenn var.Preis==0
rr  erscheint auch auf der Rechnung, wenn Festpreis==0
L   Liste Kunden mit Tarif         LL  ... auch wenn der Tarif beendet ist
del löscht den Tarif               sla alle Werte fürs SLA editieren
                                   H   History des Tarifs

Monatlich berechnete variable Kosten brauchen einen Preis pro Block > 0.
Ansonsten: Anteilig!
END
			next;
		}
		if($act eq "d") { set_tarif_dienst($tari,$kn); next; }
		if($act eq "D") { set_tarif_description($tari,$kn); next; }
		if($act eq 'w' ) { set_tarif_sla( wartungsfenster => $tari,$kn ); next; }
		if($act eq 'bz') { set_tarif_sla( betriebszeit    => $tari,$kn ); next; }
		if($act eq 'sz') { set_tarif_sla( servicezeit     => $tari,$kn ); next; }
		if($act eq 'sla') {
			set_tarif_sla($_=>$tari,$kn) for qw(wartungsfenster betriebszeit servicezeit);
			set_tarif_description($tari,$kn);
			next;
		}
		if($act eq "i") { set_tarif_info($tari,$kn); next; }
		if($act eq "K") { return if set_tarif_kunde($tari,$kn); next; }
		if($act eq "if") { set_tarif_finfo($tari,$kn); next; }
		if($act eq "iv") { set_tarif_vinfo($tari,$kn); next; }
		if($act eq "r") { flip_tarif_vrechnung($tari,$kn); next; }
		if($act eq "rr") { flip_tarif_frechnung($tari,$kn); next; }
		if($act eq "ap") { flip_tarif_anzahl($tari,$kn); next; }
		if($act eq 'x') { set_tarif_datum($tari,$kn); next; }
		if($act eq "del") { return undef if delete_tarif($tari,$kn); next; }
		if($act eq "N") { copy_tarif($tari,$kn,1); next; }
		if($act eq "NK") { copy_tarif($tari,$kn,2); next; }
		if($act eq "b") { set_tarif_intervall($tari,$kn); next; }
		if($act eq "pb") { set_tarif_preis_bestellung($tari,$kn); next; }
		if($act eq "pd") { set_tarif_preis_paket($tari,$kn); next; }
		if($act eq "md") { set_tarif_min_pakete($tari,$kn); next; }
		if($act eq "me") { set_tarif_min_bloecke($tari,$kn); next; }
		if($act eq "H") { log_view($kn,"tarif","id",$tari); next; }
		if($act eq "pe") { set_tarif_preis_block($tari,$kn); next; }
		if($act eq "f") { set_tarif_freivolumen($tari,$kn); next; }
		if($act eq "ff") { set_tarif_freitext($tari,$kn); next; }
		if($act eq "g") { set_tarif_blockgroesse($tari,$kn); next; }
		if($act eq 'l') { list_tarif($tari,$kn); next; }
		if($act eq 'L') { list_tarif_kunden($tari,0,$kn); next; }
		if($act eq 'LL') { list_tarif_kunden($tari,1,$kn); next; }
		if($act eq "kv") { set_tarif_varkonto($tari,$kn); next; }
		if($act eq "kf") { set_tarif_fixkonto($tari,$kn); next; }
		if($act eq "kk") { set_tarif_konto($tari,$kn); next; }
		print "Aktion '$act' unbekannt.\n";
		next; fehler: report_fehler(4);
	}
	$tari;
}
1;
