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()))
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
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)