use utf8;
use warnings; no warnings "redefine";
use strict;

use Fehler qw(report_fehler problem);
use Loader qw(line_in list_buchung set_buchung_betrag set_buchung_inhalt
	set_buchung_datum set_buchung_konto set_buchung_kunde set_buchung_mtext
	set_buchung_manzahl set_buchung_meinheit set_buchung_mrabatt
	set_buchung_ebetrag
	delete_buchung strip_kn valid_buchung warn_arbeit log_view);
use Dbase::Help qw(DoFn);
use Dbase::Globals qw(find_descr bignum);

sub edit_buchung($$;$) {
	my($rech,$seq,$kn) = @_;

	return unless valid_buchung($rech,$seq);
	
	$kn = strip_kn($kn)."Buchung_$seq";
	my $work = warn_arbeit("buchung","$rech,$seq","*",$kn);
	my $rflags = DoFn("select flags from rechnungen where rnr=$rech");

	while(1) {
		my $act = line_in "$kn >",4; last if $act eq "";
		if($act eq "?") {
			print <<'END';
l   auflisten
END
			unless($rflags&(bignum(1)<<find_descr("rstatus","gebucht"))) {
				print <<'END';
i   Text            b   Betrag     e Einzelbetrag
K   Kunde           x   Zeitraum
k   Konto
END
				print <<'END' if $rflags&(bignum(1)<<find_descr("rstatus","manuell"));
#   Anzahl          t   Text
e   Einheit         r   Rabatt
END
			}
			print <<'END';
del Buchung löschen
END
			next;
		}
		if($act eq "l") { list_buchung($rech,$seq,$kn); next; }
		unless($rflags&(bignum(1)<<find_descr("rstatus","gebucht"))) {
			if($act eq "b") { set_buchung_betrag($rech,$seq,$kn); next; }
			if($act eq "e") { set_buchung_ebetrag($rech,$seq,$kn); next; }
			if($act eq "i") { set_buchung_inhalt($rech,$seq,$kn); next; }
			if($act eq "x") { set_buchung_datum($rech,$seq,,$kn); next; }
			if($act eq "H") { log_view($kn,"buchung","rech",$rech,"seq",$seq); next; }
			if($act eq "k") { set_buchung_konto($rech,$seq,$kn); next; }
			if($act eq "K") { set_buchung_kunde($rech,$seq,$kn); next; }
			if($act eq "del") { delete_buchung($rech,$seq,$kn); return undef; }
			if($rflags&(bignum(1)<<find_descr("rstatus","manuell"))) {
				if($act eq "#") { set_buchung_manzahl($rech,$seq,$kn); next; }
				if($act eq "e") { set_buchung_meinheit($rech,$seq,$kn); next; }
				if($act eq "r") { set_buchung_mrabatt($rech,$seq,$kn); next; }
				if($act eq "t") { set_buchung_mtext($rech,$seq,$kn); next; }
			}
		}
		print "Aktion '$act' unbekannt.\n";
		next; fehler: report_fehler(4);
	}
	$rech;
}

1;
