예제 #1
0
def get_group_messages(request):
    from api.helpers import query_range_filter,get_agency_teacher_by_group
    from userena.contrib.umessages.models import Message, MessageRecipient, MessageContact
    gid = request.GET.get('gid')
    group = Group.objects.get(id=gid)
    teachers_pre = [t for t in group.teachers.all()]
    teachers_ext = [g.teacher for g in GroupTeacher.objects.filter(group=group)]
    teacher_age = get_agency_teacher_by_group(group)
    teachers = teachers_pre + teachers_ext + teacher_age
    teachers = list(set(teachers))
    users = [t.user for t in teachers]
    messgges = Message.objects.filter(sender__in=users)
    return HttpResponse(str(group.name) +": " + str(messgges.count()))
예제 #2
0
    def contacts(self, request):
        """
        快速联系人(学生/教师)列表

        ``GET`` `messages/contacts/ <http://192.168.1.222:8080/v1/messages/contacts>`_

        :param class_id:
            关联班级的 id
        """
#        from api.helpers import get_agency_teacher_by_group
        teachers = students = mentors = group = waiters = []
        class_id = request.GET.get("class_id")
#        if not class_id:
#            return rc.BAD_REQUEST
        if class_id:
            try:
                group = Group.objects.get(pk=class_id)
            except Group.DoesNotExist:
                pass

#        teachers = group.teachers.all()
        if group:
            teachers_pre = [t for t in group.teachers.all()]
            teachers_ext = [g.teacher for g in GroupTeacher.objects.filter(group=group)]
            teacher_age = get_agency_teacher_by_group(group)
#            teacher_adm = [a.teacher for a in group.school.admins.all()]
            teacher_adm = []
            for a in group.school.admins.all():
                try:
                    teacher_adm.append(a.teacher)
                except:pass
            teachers = teachers_pre + teachers_ext + teacher_age + teacher_adm
            teachers = list(set(teachers))
    
            try:
                teacher = request.user.teacher
                if teacher:
                    students = group.students.all()
            except:
                pass


        try:
            mentors = Mentor.objects.all()
        except:
            pass

        try:
             waiters = Waiter.objects.all().select_related('user')
        except :
            pass

        user = request.user

        contact_list = []
        mc = MessageContact.objects.get_contacts_for(user) 
        for m in mc:
            latest_message = Message.objects.get_latest_message(user, m)

            from_user = latest_message.sender
            to_user = m.to_user if m.from_user == from_user else m.from_user          

            unread_count = 0
            if user == to_user:           
                unread_count = MessageRecipient.objects.count_unread_messages_between(user,from_user)
            try:
                name = m.to_user.get_profile().chinese_name_or_username()
            except :
                name = m.to_user.get_profile().chinese_name()
                pass
            
            contact_info = {
                'user': m.to_user,
                'name': name,
                'latest_message':{
                    'id':latest_message.pk,
                    'from_user':from_user,
                    'to_user':to_user,
                    'content':latest_message.body,                    
                    'sent_at':latest_message.sent_at
                },
                'unread_count':unread_count,             
            }          

            contact_list.append(contact_info)            

        # other model need to reset fields
        self.fields = ("id","school_id", "name", "appellation", "description", "ctime", ("user", ()),\
            "username", "avatar", "avatar_large", "mobile", "about_me")
        mm = {"teachers": teachers, "students": students, "mentors": mentors, "waiters": waiters, "contacts": contact_list}
        return mm
예제 #3
0
def school_tiles_info(request,template_name="admin/includes/school_tiles_info.html"): 
    school_id = request.GET.get('sid')
    groups = Group.objects.filter(school_id=school_id,is_delete=False).exclude(type=3)
    tile_count = activity_count = record_count = message_count = 0
    tile_list = []
    activity_list = []
    record_list = []
    message_list = []
    sms_list = []
    par_sms_list = []
    for g in groups:
        tiles = Tile.objects.filter(group__id=g.id).exclude(new_type_id=4).order_by("-ctime","-id")
        tile_list.append({'id':g.id,'name':g.name,'num':tiles.count()})
        tile_count += tiles.count()
        
        activitys = Activity.objects.filter(group__id=g.id)
        activity_list.append({'id':g.id,'name':g.name,'num':activitys.count()})
        activity_count += activitys.count()
        
        users = [s.user for s in Student.objects.filter(group_id=g.id)]
        records = Tile.objects.filter(user__in=users,type_id__in=[4,5,6,7,8,101,102])
        record_list.append({'id':g.id,'name':g.name,'num':records.count()})
        record_count += records.count()
        
        teachers_pre = [t for t in g.teachers.all()]
        teachers_ext = [gt.teacher for gt in GroupTeacher.objects.filter(group=g)]
        teacher_age = get_agency_teacher_by_group(g)
        teachers = teachers_pre + teachers_ext + teacher_age
        teachers = list(set(teachers))
        users = [t.user for t in teachers]
        messages = Message.objects.filter(sender__in=users)
        message_list.append({'id':g.id,'name':g.name,'num':messages.count()})
        message_count += messages.count()
        
    t_users = [tu.user for tu in Teacher.objects.filter(school_id=school_id,is_delete=False)]
    smses = Sms.objects.filter(sender__in=t_users)
    from django.db.models import Count
    t_user_pks = [sms['sender'] for sms in smses.values('sender').annotate(num=Count('sender'))]
    for u in t_user_pks:
        try:
            user = User.objects.get(id=u)
        except:
            user = None
        total = 0
        total = Sms.objects.filter(sender_id=u).count()
        num = 0
        num = Sms.objects.filter(sender_id=u,is_send=True).count()
        sms_list.append({'id':u,'num':num,'total':total,'user':user})   
    print sms_list,'ssssssssssssssss'
    
    s_users = [st.user for st in Student.objects.filter(school_id=school_id,is_delete=False)]
    smses = Sms.objects.filter(sender__in=s_users)
    from django.db.models import Count
    s_user_pks = [sms['sender'] for sms in smses.values('sender').annotate(num=Count('sender'))]
    for u in s_user_pks:
        try:
            user = User.objects.get(id=u)
        except:
            user = None
        total = 0
        total = Sms.objects.filter(sender_id=u).count()
        num = 0
        num = Sms.objects.filter(sender_id=u,is_send=True).count()
        par_sms_list.append({'id':u,'num':num,'total':total,'user':user})   
    
    ctx = {'tile_count':tile_count,'activity_count':activity_count, 'record_count':record_count,\
            'message_count':message_count,'tile_list':tile_list,'activity_list':activity_list,\
            'record_list':record_list,'message_list':message_list,'sms_list':sms_list,'par_sms_list':par_sms_list}
#    return HttpResponse(ctx)
    return render(request, template_name, ctx)