def get_home_page(request, type=None, id=None): ##For facebook connect purpose fbappid_server_url = get_fbappid_server_url(request) facebook_app_id = fbappid_server_url['facebook_app_id'] server_url = fbappid_server_url['server_url'] top_csp_stats = defaultdict(lambda:[0, 0, 0, 0, 0]) id_list = get_id_with_images.get_csp_list() csp_stats = Screening.objects.filter(animator__id__in = id_list).values('animator__id').annotate(screenings = Count('id')).values_list('animator', 'animator__name', 'screenings', 'animator__total_adoptions') for csp in csp_stats: top_csp_stats [csp[0]][0] = csp[0] top_csp_stats [csp[0]][1] = csp[1] top_csp_stats [csp[0]][2] = csp[2] top_csp_stats [csp[0]][3] = csp[3] if csp[2] > 20: top_csp_stats [csp[0]][4] = float(csp[3])/csp[2] # sorting on Adoptions_per_screening and keeping first 4 top_csp_stats = sorted(top_csp_stats.items(), key = lambda(k, v):(v[4],k), reverse=True)[:4] id_list = [10000000000346, 10000000000348, 10000000000350, 10000000000381, 10000000000402, 10000000000403, 10000000000406, 10000000000450, 10000000019320, 10000000019321, 10000000019348, 10000000019419, 10000000019420, 10000000019422, 10000000019426, 10000000019428, 10000000019430, 10000000019431, 10000000019435, 10000000019453, 10000000019495, 10000000019502, 10000000019505, 10000000019506, 10000000019507, 10000000019508, 10000000019515, 10000000019541, 10000000019554, 10000000019696, 10000000019793, 10000000019808, 10000000019823, 10000000019826, 10000000019831, 10000000019844, 10000000019895, 10000000019979, 10000000020020] csp_leader_stats= [] for obj in top_csp_stats: old_coco_id = Animator.objects.get(id = obj[0]).old_coco_id if(old_coco_id in id_list): photo_link = "http://s3.amazonaws.com/dg-farmerbook/csp/" + str(obj[0]) + ".jpg" else: photo_link = "/media/farmerbook/images/sample_csp.jpg" csp_leader_stats.append({'id': obj[0], 'name': obj[1][1], 'screenings': obj[1][2], 'photo_link': photo_link, 'adoptions': obj[1][3]}) top_partner_stats = defaultdict(lambda:[0, 0, 0, 0]) partner_info = Partner.objects.all().annotate(num_vill = Count('person__village', distinct = True), num_farmers = Count('person')).values_list('id', 'partner_name', 'num_vill','num_farmers') for partner in partner_info: top_partner_stats [partner[0]][0] = partner[0] top_partner_stats [partner[0]][1] = partner[1] top_partner_stats [partner[0]][2] = partner[2] top_partner_stats [partner[0]][3] = partner[3] top_partner_stats = sorted(top_partner_stats.items(), key = lambda(k, v):(v[2],k), reverse=True)[:3] return render_to_response('farmerbook.html', dict(csp_leader_stats = csp_leader_stats, partner_leader_stats = top_partner_stats, type=type, type_id = id, facebook_app_id = facebook_app_id, server_url = server_url))
def get_csp_page(request): csp_id = int(request.GET['csp_id']) try: csp_id = Animator.objects.get(id = csp_id).id except: csp_id = Animator.objects.get(old_coco_id = csp_id).id #left panel stats dict hold values related to left panel of village page left_panel_stats = {} animator_villages = AnimatorAssignedVillage.objects.filter(animator = csp_id ).values_list('village_id', 'village__village_name') left_panel_stats['vil_info'] = set([(i[0],i[1].split('(')[0]) for i in animator_villages]) assigned_vill_id = set([i[0] for i in animator_villages]) left_panel_stats['start_date'] = Screening.objects.filter(animator__id = csp_id).aggregate(Min('date'))["date__min"] left_panel_stats['screenings_disseminated'] = Screening.objects.filter(animator__id = csp_id).count() left_panel_stats['nalloted_groups'] = PersonGroup.objects.filter(village__id__in = assigned_vill_id).count() group_id_list = get_id_with_images.get_group_list() left_panel_stats['alloted_groups'] = PersonGroup.objects.filter(village__id__in = assigned_vill_id,id__in = group_id_list).values_list('id', 'group_name') left_panel_stats['csp_details'] = Animator.objects.filter(id = csp_id).values_list('id', 'name') left_panel_stats['csp_villages'] = [i[1] for i in animator_villages] left_panel_stats['vil_details'] = Village.objects.filter(id__in = assigned_vill_id).values_list('block__district__district_name', 'block__district__state__state_name')[0] left_panel_stats['total_adoptions'] = Animator.objects.get(id = csp_id).total_adoptions if(left_panel_stats['screenings_disseminated']): left_panel_stats['adoption_rate'] = float(left_panel_stats['total_adoptions'])/left_panel_stats['screenings_disseminated'] else: left_panel_stats['adoption_rate'] = 0 left_panel_stats['adoption_rate_width'] = (left_panel_stats['adoption_rate']/20.0) * 100 # pma = PersonMeetingAttendance.objects.filter(screening__animator = csp_id).values_list('screening__videoes_screened__id', # 'interested', # 'expressed_question') scr = Screening.objects.filter(animator__id = csp_id).values_list('videoes_screened__id', 'questions_asked') vids_id= set(i[0] for i in scr) vids_details = Video.objects.filter(id__in = vids_id).values_list('id', 'title', 'youtubeid') left_panel_stats['videos_disseminated'] = len(vids_details) farmer_att = Screening.objects.filter(animator__id = csp_id).values('videoes_screened__id').annotate(screening_per_vid = Count('id', distinct=True), fcount=Count('farmers_attendance__id'), last_seen_date = Max('date')) vids_stats_dict = defaultdict(lambda:[0, 0, 0, 0, 0, 0]) for id,question in scr: if(question != ""): vids_stats_dict[id][0] += 1 if left_panel_stats['start_date'] == None: per_vid_adoption = [] else: per_vid_adoption = PersonAdoptPractice.objects.filter( video__in = vids_id, person__village__in = assigned_vill_id, date_of_adoption__gte = left_panel_stats['start_date']).values('video__id').annotate(adopt_count=Count('person__id')) for vid_id in per_vid_adoption: vids_stats_dict[vid_id['video__id']][1] = vid_id['adopt_count'] for vid_id in farmer_att: vids_stats_dict[vid_id['videoes_screened__id']][2] = vid_id['fcount'] vids_stats_dict[vid_id['videoes_screened__id']][3] = vid_id['screening_per_vid'] vids_stats_dict[vid_id['videoes_screened__id']][4] = vid_id['last_seen_date'] #videos_watched_stats contain list of dictionaries containing stats of video titles videos_watched_stats = [] for obj in vids_details: stat_text = make_text_from_stats(obj,vids_stats_dict) videos_watched_stats.append({'id':obj[0], 'title':obj[1], 'youtubeid':obj[2], 'adopters':vids_stats_dict[obj[0]][1], 'last_seen_date':vids_stats_dict[obj[0]][4], 'questioners': vids_stats_dict[obj[0]][0], 'farmers_attended': vids_stats_dict[obj[0]][2], 'screenings':vids_stats_dict[obj[0]][3], 'fulltext': stat_text}) sorted_videos_watched_stats = sorted(videos_watched_stats, key=lambda k: k['last_seen_date'], reverse=True) id_list = get_id_with_images.get_csp_list() # Related CSP's views_dict = defaultdict(lambda:[0, 0, 0, 0, 0, 0, 0, 0, 0]) csp_district = Animator.objects.filter(id = csp_id).values_list('district_id', flat=True) related_info = Animator.objects.filter(id__in = id_list).exclude(id = csp_id).values('id').annotate(num_screening = Count('screening')).values_list('id', 'name', 'num_screening', 'total_adoptions') for related_id in related_info: views_dict[related_id[0]][0] = related_id[1] views_dict[related_id[0]][1] = related_id[2] if views_dict[related_id[0]][1] > 0: views_dict[related_id[0]][2] = related_id[3] views_dict[related_id[0]][3] = float(views_dict[related_id[0]][2])/views_dict[related_id[0]][1] sorted_info = sorted(views_dict.items(), key = lambda(k, v):(v[3],k), reverse=True)[:10] for related_id in sorted_info: dates = Screening.objects.filter(animator__id = related_id[0]).aggregate(start = Min('date'),last = Max('date')) views_dict[related_id[0]][4] = dates['start'] views_dict[related_id[0]][6] = dates['last'] vid = Screening.objects.filter(date = dates['last'], animator = related_id[0]).values_list('videoes_screened','videoes_screened__title')[0] views_dict[related_id[0]][7] = vid[0] views_dict[related_id[0]][8] = vid[1] views_dict[related_id[0]][5] = ((datetime.date.today() - views_dict[related_id[0]][4]).days)/30.0 # Sorting and limiting to 10 related CSP's sorted_list_stats = sorted(views_dict.items(), key = lambda(k, v):(v[3],k), reverse=True) top_related_list = sorted_list_stats[:10] left_panel_stats['partner_details'] = Partner.objects.filter(animator__id=csp_id).values_list('id', 'partner_name') top_related_stats = [] for obj in top_related_list: if(obj[0] in id_list): photo_link = "http://s3.amazonaws.com/dg-farmerbook/csp/" + str(obj[0]) + ".jpg" else: photo_link = "/media/farmerbook/images/sample_csp.jpg" top_related_stats.append({'id': obj[0], 'name': obj[1][0], 'screenings': obj[1][1], 'freq_screening': obj[1][5], 'photo_link': photo_link, 'rate': obj[1][3], 'adoptions': obj[1][2], 'ratewidth': (obj[1][3]/20.0)*100, 'start': obj[1][4], 'last_screened': obj[1][6], 'last_video_id': obj[1][7], 'last_video': obj[1][8]}) return render_to_response('serviceprovider_page.html', dict(left_panel_stats = left_panel_stats, videos_watched_stats = sorted_videos_watched_stats, top_related_stats = top_related_stats))