2024-05-09 16:21:48 +05:30
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
import itertools
|
|
|
|
|
|
|
|
|
|
from module_project.service import OneSignalService
|
|
|
|
|
from .models import InAppNotification
|
|
|
|
|
from module_iam.models import IAmPrincipal, IAmPrincipalType
|
|
|
|
|
from module_activity.models import MealRecord, Bowel, MealSymptomRecord, Medication
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def notification_for_meal():
|
2024-05-13 16:53:07 +05:30
|
|
|
notification_message = "Have you eaten yet? It's been a while since you logged a meal."
|
2024-05-09 16:21:48 +05:30
|
|
|
current_date = datetime.now()
|
2024-05-13 16:53:07 +05:30
|
|
|
fifteen_days_ago = current_date - timedelta(days=15)
|
2024-05-09 16:21:48 +05:30
|
|
|
|
|
|
|
|
users = IAmPrincipal.objects.filter(
|
|
|
|
|
last_login__gte=fifteen_days_ago,
|
|
|
|
|
principal_type=IAmPrincipalType.get_principal_user(),
|
|
|
|
|
).values_list("id", flat=True)
|
|
|
|
|
|
|
|
|
|
meal_obj = MealRecord.objects.filter(date=current_date).values_list(
|
|
|
|
|
"principal", flat=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Remove IDs of users who have recorded meals for the current day
|
|
|
|
|
users_without_meals = set(users) - set(meal_obj)
|
|
|
|
|
print(f"user id {set(users)}")
|
|
|
|
|
print(
|
|
|
|
|
f"userwithoutmeal {users_without_meals}"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
player_ids = list(
|
|
|
|
|
IAmPrincipal.objects.filter(
|
|
|
|
|
id__in=users_without_meals
|
|
|
|
|
).values_list("player_id", flat=True)
|
|
|
|
|
)
|
|
|
|
|
# removing none from list
|
|
|
|
|
player_ids = list(itertools.filterfalse(lambda x: x is None, player_ids))
|
|
|
|
|
|
|
|
|
|
notifications_to_create = []
|
|
|
|
|
if users_without_meals:
|
|
|
|
|
for user_id in users_without_meals:
|
|
|
|
|
message = notification_message
|
|
|
|
|
notifications_to_create.append(
|
|
|
|
|
InAppNotification(user_id=user_id, message=message)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Bulk create notifications
|
|
|
|
|
if notifications_to_create:
|
|
|
|
|
InAppNotification.objects.bulk_create(notifications_to_create)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
notification = OneSignalService()
|
|
|
|
|
response = notification.send_notification(
|
|
|
|
|
headings="Meal",
|
|
|
|
|
contents=notification_message,
|
|
|
|
|
include_player_ids=player_ids,
|
|
|
|
|
)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"Notification error in meal {str(e)}")
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def notification_for_medication():
|
2024-05-13 16:53:07 +05:30
|
|
|
notification_message = "Have you taken your medication today? Remember to log your medication to stay on track with your treatment!"
|
2024-05-09 16:21:48 +05:30
|
|
|
current_date = datetime.now()
|
2024-05-13 16:53:07 +05:30
|
|
|
fifteen_days_ago = current_date - timedelta(days=15)
|
2024-05-09 16:21:48 +05:30
|
|
|
|
|
|
|
|
users = IAmPrincipal.objects.filter(
|
|
|
|
|
last_login__gte=fifteen_days_ago,
|
|
|
|
|
principal_type=IAmPrincipalType.get_principal_user(),
|
|
|
|
|
).values_list("id", flat=True)
|
|
|
|
|
|
|
|
|
|
medication_obj = Medication.objects.filter(date=current_date).values_list(
|
|
|
|
|
"principal", flat=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Remove IDs of users who have recorded medication for the current day
|
|
|
|
|
users_without_medications = set(users) - set(medication_obj)
|
|
|
|
|
print(f"user id {set(users)}")
|
|
|
|
|
print(
|
|
|
|
|
f"users_without_medication {users_without_medications}"
|
|
|
|
|
)
|
|
|
|
|
|
2024-05-13 16:53:07 +05:30
|
|
|
player_ids = list(
|
|
|
|
|
IAmPrincipal.objects.filter(
|
|
|
|
|
id__in=users_without_medications
|
|
|
|
|
).values_list("player_id", flat=True)
|
|
|
|
|
)
|
|
|
|
|
# removing none from list
|
|
|
|
|
player_ids = list(itertools.filterfalse(lambda x: x is None, player_ids))
|
|
|
|
|
|
|
|
|
|
notifications_to_create = []
|
|
|
|
|
if users_without_medications:
|
|
|
|
|
for user_id in users_without_medications:
|
|
|
|
|
message = notification_message
|
|
|
|
|
notifications_to_create.append(
|
|
|
|
|
InAppNotification(user_id=user_id, message=message)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Bulk create notifications
|
|
|
|
|
if notifications_to_create:
|
|
|
|
|
InAppNotification.objects.bulk_create(notifications_to_create)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
notification = OneSignalService()
|
|
|
|
|
response = notification.send_notification(
|
|
|
|
|
headings="Medication",
|
|
|
|
|
contents=notification_message,
|
|
|
|
|
include_player_ids=player_ids,
|
|
|
|
|
)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"Notification error in medication {str(e)}")
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
def notification_for_symptom():
|
|
|
|
|
notification_message = "How are you feeling? Don't forget to input your symptoms."
|
|
|
|
|
current_date = datetime.now()
|
|
|
|
|
fifteen_days_ago = current_date - timedelta(days=15)
|
|
|
|
|
|
|
|
|
|
users = IAmPrincipal.objects.filter(
|
|
|
|
|
last_login__gte=fifteen_days_ago,
|
|
|
|
|
principal_type=IAmPrincipalType.get_principal_user(),
|
|
|
|
|
).values_list("id", flat=True)
|
|
|
|
|
|
|
|
|
|
symptom_obj = MealSymptomRecord.objects.filter(date=current_date).values_list(
|
|
|
|
|
"principal", flat=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Remove IDs of users who have recorded symptoms for the current day
|
|
|
|
|
users_without_medications = set(users) - set(symptom_obj)
|
|
|
|
|
print(f"user id {set(users)}")
|
|
|
|
|
print(
|
|
|
|
|
f"users_without_medication {users_without_medications}"
|
|
|
|
|
)
|
|
|
|
|
|
2024-05-09 16:21:48 +05:30
|
|
|
player_ids = list(
|
|
|
|
|
IAmPrincipal.objects.filter(
|
|
|
|
|
id__in=users_without_medications
|
|
|
|
|
).values_list("player_id", flat=True)
|
|
|
|
|
)
|
|
|
|
|
# removing none from list
|
|
|
|
|
player_ids = list(itertools.filterfalse(lambda x: x is None, player_ids))
|
|
|
|
|
|
|
|
|
|
notifications_to_create = []
|
|
|
|
|
if users_without_medications:
|
|
|
|
|
for user_id in users_without_medications:
|
|
|
|
|
message = notification_message
|
|
|
|
|
notifications_to_create.append(
|
|
|
|
|
InAppNotification(user_id=user_id, message=message)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Bulk create notifications
|
|
|
|
|
if notifications_to_create:
|
|
|
|
|
InAppNotification.objects.bulk_create(notifications_to_create)
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
notification = OneSignalService()
|
|
|
|
|
response = notification.send_notification(
|
2024-05-15 11:11:27 +05:30
|
|
|
headings="Symptom",
|
2024-05-09 16:21:48 +05:30
|
|
|
contents=notification_message,
|
|
|
|
|
include_player_ids=player_ids,
|
|
|
|
|
)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
print(f"Notification error in medication {str(e)}")
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def testing_cron():
|
|
|
|
|
print("cron is working ")
|