use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(DoFn Do);
use Dbase::Globals qw(flag_names oberkunde unterkunden bignum find_descr);
use Fehler qw(warnung);
use Loader qw(log_update select_flags);

my $eigene_re;

sub set_kunde_flags($;$) {
	my($id,$kn) = @_;

	$eigene_re = bignum(1)<<find_descr("kunde","eigene_re")
		if not $eigene_re;

	my($kl) = DoFn("select flags from kunde where id=$id");
	my $nkl = select_flags($kl,"kunde","Flags","!hide");
	
	return undef unless defined $nkl;
	return $nkl if $kl == $nkl;

	log_update("kunde","id",$id,undef,"flags",undef,
		scalar flag_names($nkl,"kunde",$kl));
	Do("update kunde set flags=$nkl where id=$id");

	if(~$kl & $nkl & $eigene_re) {
		# Wenn der Unterkunde ab jetzt eine eigene Rechnung bekommt, dann
		# muss das Datum für die nächste Rechnung entsprechend gesetzt
		# werden..:
		Do("UPDATE kunde,kunde AS ober SET kunde.zuletzt=ober.zuletzt WHERE kunde.id=$id AND ober.id=kunde.kunde");
	}

	if (($kl ^ $nkl) & ~$eigene_re) {
		# Warne nur, wenn Flags außer $eigene_re angefasst werden.
		if ( ( (undef, my @unterkunden) = unterkunden $id ) > 1 ) {
			warnung 'Dieser Kunde hat folgende' .
					( @unterkunden == 1 && 'n' ) .
					' Unterkunden: ' .
					join(', ', map "#$_:".name_kunde($_), @unterkunden) .
					".\nEvtl. möchte man dort auch Flags ändern...\n";
		}

		if ( ( my $oberkunde = oberkunde $id ) != $id ) {
			warnung "Dieser Kunde ist Unterkunde von #$id:" .
					name_kunde($oberkunde) .
					".\nEvtl. möchte man dort auch Flags ändern...\n";
		}
	}
}

1;
