use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Globals qw(def_or_minus);
use Dbase::Help qw(Do DoFn);
use Fehler qw(problem);
use Loader qw(edit_personen log_update warn_leitungsende);

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

        my $key;
        $key = $1 if $feld =~ /^(.)_ende\z/;

	my ( $kunde, $old, $hardware ) =
	  DoFn( "SELECT kunde, $feld"
		  . ( defined $key && ", ${key}_hardware" )
		  . " FROM leitung WHERE id=$id" )
	  or return problem("Leitung #$id nicht gefunden.");

	defined( my $new = edit_personen( $kunde, 1 + 4 + 128, $kn ) )
	  or return undef;
	
	if ( $new eq '-' ) {
		return unless defined $old;
		$new = 'NULL';
	}
	else { return if defined $old && $old == $new }

	log_update( leitung => id => $id, undef, $feld, undef, def_or_minus($old) );
	Do("UPDATE leitung SET $feld = $new WHERE id = $id");
	Do("UPDATE kunde SET geaendert = UNIX_TIMESTAMP(NOW()) WHERE id = $kunde");

	warn_leitungsende( $key, $new, $hardware ) if defined $key;
}

1;
