Расчет отпуска на основе годовщины

Правило таково: после первого года работы, в зависимости от даты годовщины, вы получаете 40 часов. (например, меня приняли на работу 12.05.2011, я получаю 40 часов отпуска 12.05.2012.)

Затем каждый последующий год он перекатывается на календарный год. Итак, используя мой пример выше, мне нужно использовать мои 40 часов между 12.05.2012 и 31.12.2012, потому что 01.01.2013 мои сорок начинаются заново.

Через три года (01.01.2014), календарная дата, я получу 80 часов.

В 10 лет, календарная дата, она достигает 120. Код, который я использую, приведен ниже, но он не работает правильно...

Function calcVacEarned(asOfDate As Date, HireDate As Date)
    Dim anniversary As Boolean
    Dim yos As Integer
    anniversary = False
    yos = Year(asOfDate) - Year(HireDate)

    If Month(HireDate) = Month(asOfDate) And (yos = 1) Then
      If Day(HireDate) <= Day(asOfDate) Then
        anniversary = True
    End If
    ElseIf Month(HireDate) < Month(asOfDate) And (yos = 1) Then
        anniversary = True
    End If

    If anniversary Then
        calcVacEarned = 40
    Else
        Select Case yos
          Case Is > 10
            calcVacEarned = 120
          Case Is > 3
            calcVacEarned = 80
          Case Is > 1
            calcVacEarned = 40
          Case Else
            calcVacEarned = 0
        End Select
    End If

End Function

Моя компания использует это ежедневно для расчета часов по всем направлениям, может понадобиться помощь. Заранее спасибо!


person designspeaks    schedule 15.07.2014    source источник
comment
calcVacEarned никогда не изменится, если yos отличается от 1, потому что anniversary всегда будет истинным, если попадет в этот блок кода.   -  person Mark C.    schedule 16.07.2014


Ответы (1)


Предполагая, что вы возвращаете правильное целое число для yos :

If anniversary Then
    Select Case yos
    Case 1
        MsgBox "You actually get vacation"
    Case 2
        MsgBox "OP said nothing regarding 2 years!"
    Case 3
        MsgBox "You get 80 hours!"
    Case 10
        MsgBox "You get 120 hours!"
    End Select
End If
person Mark C.    schedule 15.07.2014