Преобразование формул Google Sheet в логику Django

Я создаю таблицу времени для администратора, чтобы вводить время для пользователей. Я перевожу этот проект из Google Sheets в Django. Я, мягко говоря, в тупике.

Я пытаюсь получить общее количество часов, чтобы оно совпадало с формулой Google Sheet. Но кажется, что моя логика Django не сходится.

Вот формула листа Google:

=(IF((MROUND(F6*24,0.25)-MROUND(F5*24,0.25))>=8,((MROUND(F6*24,0.25)-MROUND(F5*24,0.25)))-0.5,((MROUND(F6*24,0.25)-MROUND(F5*24,0.25)))))

Все ячейки (F5 и F6) заменяются на Start Time и End Time.

Вот моя логика Django.

def calculate_total_time(self,start_time, end_time):
        if start_time is not None and end_time is not None:
            start_minutes = start_time.hour * 60 + start_time.minute
            end_minutes = end_time.hour * 60 + end_time.minute

            if end_minutes < start_minutes:
                end_minutes += 24 * 60

            difference_minutes = end_minutes - start_minutes
            total_hours = difference_minutes / 60

            # Calculate the rounded total hours
            rounded_hours = math.floor(total_hours * 4) / 4

            # Adjust for cases where rounding might go over 8 hours
            if rounded_hours >= 8:
                rounded_hours -= 0.5

            return rounded_hours
        else:
            return 0.00

Некоторые часы отображаются нормально, без проблем, но есть часы, подобные этим, когда логика не сходится. (Картинки для справки)

Вывод формулы в Google Sheet: Google Sheet Formula

Вывод логики Джанго: Django Logic Output

Я пытаюсь получить то же самое, что выдает формула Google Sheet, несмотря на введенное время, поскольку оно динамическое. Любая помощь будет оценена по достоинству.

Редактирование - Больше фотографий для справки:

Формула Google Sheet Google Sheet Formula

Django Logic Django Logic

Вот что я сделал, и, похоже, это работает. Я неправильно выбрал порядок округления.

        if start_time is not None and end_time is not None:
            start_minutes = self.mround(start_time.hour * 60 + start_time.minute)
            end_minutes = self.mround(end_time.hour * 60 + end_time.minute)

            if end_minutes < start_minutes:
                end_minutes += 24 * 60

            difference_hours = (end_minutes - start_minutes) / 60

            # Subtract 0.5 if the difference is greater than or equal to 8
            if difference_hours >= 8:
                difference_hours -= 0.5

            return difference_hours
        else:
            return 0.00```
Вернуться на верх