# tasks.py from celery import shared_task from osinacore.models import * from django.db.models import Q from datetime import datetime, timedelta import pytz @shared_task def set_offline(): all_staff_profiles = StaffProfile.objects.all() for staff_profile in all_staff_profiles: last_point_activity = PointActivity.objects.filter( point__task__assigned_to=staff_profile ).last() if last_point_activity and last_point_activity.end_time: beirut_timezone = pytz.timezone('Asia/Beirut') current_time = datetime.now(beirut_timezone) if current_time - last_point_activity.end_time > timedelta(minutes=10): last_status = Status.objects.filter(staff=staff_profile).last() status_datetime = datetime.strptime(f"{last_status.date} {last_status.time}", '%Y-%m-%d %I:%M %p') status_datetime = beirut_timezone.localize(status_datetime) status_time_difference = current_time - status_datetime if status_time_difference > timedelta(minutes=10): user = staff_profile.user last_connection = Connection.objects.filter(user=user).order_by('-date').first() if last_connection and last_connection.status != 'Offline': if current_time - last_connection.date > timedelta(minutes=5): Connection.objects.create( status='Offline', date=datetime.now(), user=user ) Status.objects.create( text='Went offline!', date=datetime.now().date(), time=datetime.now().strftime('%I:%M %p'), staff=staff_profile )