=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(iso_intervall nice_intervall flush_std_cache);

my $artHotline;

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

	$artHotline = DoFn("select id from stunden_art where name='Hotline'")
		unless defined $artHotline;

	my $dauer = select_date(2|256,"Arbeitszeit",undef,qw(- löschen));
	return unless defined $dauer;
	$dauer = 0 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(defined $artHotline and $art == $artHotline) {
			update_hotline_cache($pers,$beginn,$odauer);
			update_hotline_cache($pers,$beginn,$dauer);
		}
	};

	1;
}
1;
