use utf8;
use warnings; no warnings "redefine";
use strict;
use Loader qw(line_in log_update valid_person);
use Dbase::Help qw(Do DoFn isodate unixdate);
use Dbase::Globals qw(find_descr);
use Fehler qw(problem warnung);
use Date::Calc qw(Add_Delta_Days);

sub flip_perso_back($;$) {
	my($person,$kn) = @_;
	my($letzter) = DoFn("select letzter from perso where person=$person");
	return undef unless defined $letzter;
	return undef unless valid_person($person);

	my($j,$m);
	$j=int($letzter/100); $m=$letzter%100;
	my $nz = unixdate($j,$m,1);
	$j--,$m=12 if --$m == 0;

	my $mon = 100*$j+$m;
	my($ist,$urlaub,$soll,$auszahl,$diff) = DoFn("select ist,urlaub,soll,auszahl,diff from persomonat where person=$person and monat=$letzter");
	if(defined $ist) {
		$soll=DoFn("select soll from persomonat where person is null and monat=$letzter") unless defined $soll;
		return problem "Keine Sollzeit für Monat $letzter bekannt!" unless defined $soll;
		$auszahl ||= 0;
		$urlaub ||= 0;
		log_update("perso","person",$person,undef,"urlaub","ueberstunde","abschluss",undef,DoFn("select urlaub,ueberstunde,abschluss from perso where person=$person"));
		my($u,$ru) = DoFn("select urlaub,resturlaub from perso where person=$person");
		if($ru) {
			$ru += $urlaub;
		} else {
			$u += $urlaub;
		}
		print STDERR "update perso set letzter=$mon, urlaub=$u, resturlaub=$ru, abschluss=$nz, ueberstunde=ueberstunde-$ist+$soll+$auszahl where person=$person\n";
		Do("update perso set letzter=$mon, urlaub=$u, resturlaub=$ru, abschluss=$nz, ueberstunde=ueberstunde-$ist+$soll+$auszahl where person=$person");
		Do("update persomonat set diff=0 where person=$person and monat=$letzter");
		print "Daten angepaßt.\n";
	} else {
		warnung "Keine Ist-Zeit bekannt -- Datensatz nicht angepasst.";
	}
}
1;
