use utf8;
use warnings; no warnings "redefine";
use strict;
use Dbase::Help qw(Do DoFn isotime);
use Fehler qw(problem);
use Loader qw(log_update select_date);

sub set_wartungsvertrag_zuordnung_datum($$$;$) {
	my ( $typ, $idi, $be, $kn ) = @_;
	return problem "Unbekannter Datumstyp: $be" if lc $be ne 'beginn' && lc $be ne 'ende';
	$be = lc $be;
	my %datum;
	@datum{qw(beginn ende)} = DoFn "SELECT beginn,ende FROM wartungsvertrag_$typ WHERE id=$idi"
	  or return problem "\u$typ-Wartungsvertrag #$idi nicht gefunden."
	  if defined $idi;
	my %odatum = %datum;

	defined( $datum{$be} = select_date $be eq 'ende' ? 1024 : 0, "Laufzeit-\u$be" ) or return;
	unless ( $datum{$be} ) {
		return if $be ne 'ende';
		$datum{$be} = 'NULL';
	}
	return $datum{$be} unless defined $idi;
	return problem 'Das Enddatum darf nicht vor dem Startdatum liegen.'
	  if $datum{ende} ne 'NULL' and $datum{beginn} > $datum{ende};
	log_update "wartungsvertrag_$typ" => id => $idi, undef, $be, undef,
		scalar isotime $odatum{$be};
	Do "UPDATE wartungsvertrag_$typ SET $be = $datum{$be} WHERE id = $idi";
}

1;
