File size: 2,250 Bytes
2145052 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
from datetime import datetime, timedelta, time
import locale
from babel.dates import format_date, get_day_names
locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
def calculate_night_time(start_time: time, end_time: time, pause_time: time, date: datetime) -> float:
start_datetime = datetime.combine(date, start_time)
end_datetime = datetime.combine(date, end_time)
night_start = datetime.combine(date, datetime.strptime("21:00:00", "%H:%M:%S").time())
night_end = datetime.combine(date, datetime.strptime("06:00:00", "%H:%M:%S").time())
night_worktime = timedelta()
if end_datetime < start_datetime :
end_datetime += timedelta(days=1)
night_end += timedelta(days=1)
night_worktime = min(end_datetime, night_end) - max(start_datetime, night_start)
else:
if end_datetime >= night_start:
night_worktime = max(end_datetime, night_end ) - max(start_datetime, night_start)
else:
night_worktime = min(end_datetime, night_end) - min(start_datetime, night_start)
night_worktime = max(night_worktime, timedelta())
pause_delta = timedelta(hours=pause_time.hour, minutes=pause_time.minute)
night_worktime -= pause_delta if night_worktime > pause_delta else night_worktime
total_seconds = night_worktime.total_seconds()
hours = float(total_seconds / 3600)
return hours
def calculate_work_time(start_time: time, end_time: time, pause_time: time, date: datetime) -> float:
start_datetime = datetime.combine(date, start_time)
end_datetime = datetime.combine(date, end_time)
if end_datetime < start_datetime:
end_datetime += timedelta(days=1)
worktime = end_datetime - start_datetime
pause_delta = timedelta(hours=pause_time.hour, minutes=pause_time.minute)
worktime -= pause_delta if worktime > pause_delta else worktime
total_seconds = worktime.total_seconds()
hours = float(total_seconds / 3600)
return hours
def date_to_week_number(date: datetime) -> int:
return date.isocalendar()[1]
def date_to_week_day(date: datetime) -> int:
# weekday_english = date.strftime("%A")
weekday_french = format_date(date, 'EEEE', locale='fr')
return weekday_french
|