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

use Loader qw(line_in log_update edit_arechnung);
use Dbase::Globals qw(name_kunde);
use Dbase::Help qw(Do DoFn DoTrans);
use Fehler qw(problem);

# Flag&1: nicht ansagen wenn automatisch belegt (war: alte Rechnungstabelle)
# Flag&2: nicht fragen, nach nächster freien Nummer suchen
# Flag&4: kein INSERT
# Flag&8: auch beim Fragen weitersuchen

sub get_free_rnr($;$$$) {
	my($flag,$kn,$rech,$jahr) = @_;

	$rech = line_in "Rechnungsnummer [nächste]: " unless $rech or $flag&2;
	return undef if defined $rech and not $rech =~ /^\d*$/;

	DoTrans {
		if($rech) {
			my $die=1;
			for my $count(1..100) {
				my $kk = DoFn("select kunde from rechnungen where rnr = $rech");
				if($kk) {
					next if $flag&(2|8);
					return problem "Rechnung '$rech' existiert bereits (Kunde #$kk, ".name_kunde($kk).")!\n";
				}

				$die=0; last;
			} continue {
				$rech++;
			}
			return problem "Keine freien Rechnungsnummern!" if $die;
		} elsif($jahr) {
			my $rmin = (($jahr%100)+200)*100000;
			my $rmax = (($jahr%100)+201)*100000;
			$rech = DoFn("select max(rnr) from rechnungen where rnr>$rmin and rnr<$rmax");
			if($rech) {
				$rech++;
			} else {
				$rech = $rmin+1;
			}
		} else {
			$rech = DoFn("select max(rnr) from rechnungen");
			$rech++;
		}
		log_update("rechnungen","rnr",$rech,undef,"*");
		print "Rechnungsnr: $rech\n" unless $flag&1;
		return $rech;
	};
}

1;
