Ich würde solche Berechnungen nicht in der
DB machen, da man auch Wochenenden und Feiertage berücksichtigen muss.
Damit die Sollzeit nicht jedes mal berechnet wird kann man die pro Mitarbeiter und Monat ruhig in
DB speichern.
Code:
function WorkDaysInMonth(AMonth: TDate): Byte;
var
i: Word;
CalcDate: TDate;
begin
if not FCalculateTime
then Result := ReadWorkDaysFromDb()
else begin
Result := 0;
CalcDate := StartOfTheMonth(AMonth);
for i := 1 to DaysInMonth(CalcDate)
do begin
// Wochenende und Feiertage nicht berechnen
if (DayOfTheWeek(CalcDate) < DaySaturday) and
(not IsHoliday(CalcDate))
then Inc(Result);
CalcDate := IncDay(CalcDate);
end;
end
end;
.....
WorkTimeInMonth := WorkDaysInMonth(Date) * WorkTimePerDayForEmployee;