use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(DoFn);
use Dbase::Globals qw(get_descr);
use Loader qw($base acct_betrag);
use Fehler qw(warnung);

BEGIN {
	do "$base/acct/text_vars";
}

use Text::Wrapper;
my $xwrap = new Text::Wrapper(columns => $dienstlen);

sub acct_text_buchung_rabatt($;$$) {
	my($num,$rech,$seq) = @_;
	if($num > 1000) { ## Aufschlag?!
		warnung "\nAchtung, Rabatt = $num in $rech.$seq\n";
		return sprintf("-%2d:%%",($num-1000)/10);
	} elsif($num == 1000) {
		return "      ";
#	} elsif(int($num+0.99) != int($num)) {
#		return sprintf("%2d.%1d%%",(1000-$num)/10,((100-$num)*10)%10);
	} else {
		return sprintf(" %3d:%%",int((1000-$num)/10));
	}
}

sub acct_text_buchung($$) {
	my($rech,$seq) = @_;
	my($anz,$einh,$rabt,$text,$sum,$flag) = DoFn("select manzahl,meinheit,mrabatt,mtext,betrag,flags from buchung where rnr=$rech and seq=$seq");
	$rabt=1000 unless $rabt;

	my $einzel;
	if($anz or $rabt!=1000) {
		$einzel = acct_betrag($sum*1000000/$rabt/($anz||1000));
		if($anz) {
			if($anz % 1000) {
				$anz = sprintf("%.3f",$anz/1000);
			} else {
				$anz = sprintf("%d",$anz/1000);
			}
		} else {
			$anz = "";
		}
	} else {
		$einzel="";
		$anz="";
	}
	if($einh) {
		$einh = get_descr("einheit",$einh);
	} else {
		$einh="";
	}
	my @txt = map {
		split(/\s*\n/,$xwrap->wrap($_))
	} split(/\|/,$text);
	$text = shift @txt;

	my $out = sprintf "%7s %-6s%-${dienstlen}.${dienstlen}s %10s%6s %11s\n",
	                    $anz,$einh,$text,$einzel,acct_text_buchung_rabatt($rabt,$rech,$seq),acct_betrag($sum);
	foreach $text(@txt) {
		$out .= "              $text\n";
	}
	wantarray ? ($out,$sum,$flag) : $out;
}
