utils.py
1.83 KB
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
58
59
60
61
62
63
from datetime import date
from django.utils import timezone
from django.db.models import Q
from log.models import Log
from pendencies.models import Pendencies
from users.models import User
from .models import Notification
def get_resource_users(resource):
if resource.all_students:
return resource.topic.subject.students.all()
return User.objects.filter(Q(resource_students = resource) | Q(group_participants__resource_groups = resource)).distinct()
def set_notifications():
pendencies = Pendencies.objects.filter(begin_date__date__lt = timezone.now(), resource__visible = True)
for pendency in pendencies:
users = get_resource_users(pendency.resource)
subject_begin_date = pendency.resource.topic.subject.init_date
pend_action = pendency.action
resource_type = pendency.resource._my_subclass
resource_key = resource_type + "_id"
resource_id = pendency.resource.id
for user in users:
prev_notify = Notification.objects.filter(user = user, task = pendency).order_by("-creation_date")
notify_type = 1
if prev_notify.count() > 0:
last_notify = prev_notify[0]
if last_notify.creation_date == date.today():
continue
if last_notify.meta:
if last_notify.creation_date < date.today() < last_notify.meta:
continue
notify_type = 2
has_action = Log.objects.filter(user_id = user.id, action = pend_action, resource = resource_type, context__contains = {resource_key: resource_id}, datetime__date__gte = subject_begin_date).exists()
if not has_action:
if pendency.end_date:
if timezone.now() > pendency.end_date:
notify_type = 3
if pendency.limit_date:
if timezone.now() > pendency.limit_date:
notify_type = 4
notification = Notification()
notification.user = user
notification.level = notify_type
notification.task = pendency
notification.save()