use utf8;
use warnings; no warnings "redefine";
use strict;
use Fehler qw(warnung problem);
use Dbase::Help qw(DoFn Do unixdate isodate);
use Dbase::Globals qw(find_descr get_descr);
use Loader qw(log_update select_descr);

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

	my($person,$zeitraum,$zuletzt,$oart) = DoFn("select person,zeitraum,zuletzt,art from stundenliste where id=$id");
	my $art = select_descr("std_liste",0,"","Art","!hide");
	return undef unless defined $art;

	return problem "Es existiert bereits ein Eintrag für Endabrechnung!"
		if $art == find_descr("std_liste","ende") and
			DoFn("select count(*) from stundenliste where person=$person and art=$art and id != $id");

	if($zeitraum and $art >= find_descr("std_liste","monat")) {
		warnung "Zeitraum auf 'monatlich' umgestellt.";
		my($j,$m,$t)=isodate($zuletzt);
		if($t > 1) {
			warnung "Letztes Mailing auf den Monatsersten gesetzt.";
			log_update("stundenliste","id",$id,undef,"art","zeitraum","zuletzt",undef,get_descr("std_liste",$oart),$zeitraum,scalar isodate $zuletzt);
			$zuletzt = unixdate($j,$m,1);
			Do("update stundenliste set art=$art, zeitraum=NULL, zuletzt=$zuletzt where id=$id");
		} else {
			log_update("stundenliste","id",$id,undef,"art","zeitraum",undef,
				get_descr("std_liste",$oart),$zeitraum);
			Do("update stundenliste set art=$art, zeitraum=NULL where id=$id");
		}
	} else {
		log_update("stundenliste","id",$id,undef,"art",undef,
			get_descr("std_liste",$oart));
		Do("update stundenliste set art=$art where id=$id");
	}
}
1;
