示例#1
0
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))
示例#2
0
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))