=head4 set_stunde_dauer

C<set_stunde_dauer( ID [Prompt] )>

Ändert den Endzeitpunkt eines Stundeneintrags.

=cut

use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(select_date log_update update_hotline_cache);
use Dbase::Help qw(isodate unixdate Do DoFn DoTrans);
use Dbase::Globals qw(flush_std_cache is_hotline iso_intervall nice_intervall);
use Fehler qw(problem);

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

	my $dauer = select_date(2,"Arbeitszeit",undef,qw(- löschen));
	return unless defined $dauer;
	return problem "Stundeneinträge ohne Dauer sind Unfug" if $dauer eq "-";

	DoTrans {
		my ($pers,$beginn,$odauer,$art) = DoFn("select person,beginn,dauer,art from stunden where id=$id");

		my($by,$bm,$bt)=isodate($beginn);
		my($oy,$om,$ot)=isodate($beginn+$dauer);
		if($bt != $ot or $bm != $om or $by != $oy) { ## überschreitet einen Tag
	    	my $ndauer = unixdate($oy,$om,$ot)-$beginn;
			if($dauer != $ndauer) {
				warn "Dauer auf ".nice_intervall($ndauer)." gekappt\n";
				$dauer = $ndauer;
			}
		}
		log_update("stunden","id",$id,undef,"dauer",undef, iso_intervall $odauer);
		Do("update stunden set dauer=$dauer,zeit=NULL where id=$id");

		$dauer=$odauer if $dauer>$odauer;

		flush_std_cache($pers,$beginn,$dauer);
		if ( is_hotline($art) ) {
			update_hotline_cache($pers,$beginn,$odauer);
			update_hotline_cache($pers,$beginn,$dauer);
		}
	};

	1;
}
1;
