=head4 set_stunde_beginn

C<set_stunde_beginn( ID [Prompt] [Limit] )>

Ändert den Startzeitpunkt eines Stundeneintrags.

Einträge können nicht vor das Limit wandern.

=cut

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

my $artHotline;

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

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

	my $beginn = select_date(8,"Beginn",DoFn("select beginn from stunden where id=$id"));
	return undef unless defined $beginn;

	return problem "Beginn vor Sperrdatum!\n"
		if $limit and $beginn < $limit;

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

		my($by,$bm,$bt)=isodate($beginn);
		my($oy,$om,$ot)=isodate($beginn+$dauer);

		if($by != $oy or $bm != $om or $bt != $ot) { ## überschreitet einen Tag
	    	my $ndauer = unixdate($oy,$om,$ot)-$beginn;
			log_update("stunden","id",$id,undef,"beginn","dauer",undef, scalar isotime $obeginn, iso_intervall $dauer);
			warnung "Kappe Dauer von ".nice_intervall($dauer)." auf ".nice_intervall($ndauer).".\n";

			Do("update stunden set beginn=$beginn,dauer=$ndauer,zeit=NULL where id=$id");
			$dauer=$ndauer;
		} else {
			log_update("stunden","id",$id,undef,"beginn",undef, scalar isotime $obeginn);
			Do("update stunden set beginn=$beginn,zeit=NULL where id=$id");
		}

		flush_std_cache($pers,$beginn,$dauer);
		if(defined $artHotline and $art == $artHotline) {
			update_hotline_cache($pers,$obeginn,$dauer);
			update_hotline_cache($pers,$beginn,$dauer);
		}
	};
	1;
}
1;
