def view_submissions(request, reporter_id=None): if reporter_id: reporter = get_object_or_404(Reporter, pk=reporter_id) health_provider = reporter.healthprovider_ptr submissions = XFormSubmission.objects.filter( connection__contact__healthproviderbase__healthprovider=health_provider) else: group, _ = Group.objects.get_or_create(name='Ntds') submissions = XFormSubmission.objects.filter(connection__contact__groups=group).order_by("-message__date") columns = [('Name', True, 'name', SimpleSorter()), ('Parish', True, 'connection__contact__healthproviderbase__healthprovider__location', SimpleSorter()), ('District', True, 'connection__contact__healthproviderbase__healthprovider__reporter__district', SimpleSorter()), ('Mobile', True, 'connection__identity', SimpleSorter()), ('Valid', True, 'enabled', SimpleSorter()), ('Message', False, 'message__text', SimpleSorter()), ] return generic( request, model=XFormSubmission, queryset=submissions, filter_forms=[], action_forms=[], objects_per_page=25, partial_row='ntds/partials/submission_row.html', base_template='ntds/submissions_base.html', columns=columns, sort_column='pk', sort_ascending=False, current='survey' )
def drug_report(request): context = {} columns = [('Name', True, 'title', SimpleSorter()), ('Parish', True, 'decription', SimpleSorter()), ('Mobile', True, 'questions__name', SimpleSorter()), ('Status', True, 'enabled', SimpleSorter()), ('Submissions', False, '', ''), ('Last Submission', False, '', ''), ] return generic( request, model=NTDReport, queryset=NTDReport.objects.all(), filter_forms=[], action_forms=[], objects_per_page=25, partial_row='ntds/partials/reporter_row.html', base_template='ntds/reporters_base.html', columns=columns, sort_column='pk', sort_ascending=False, current='survey' )
def view_messages(request): # filter_forms = [] #action_forms = [] group, _ = Group.objects.get_or_create(name='Ntds') messages = Message.objects.filter(connection__contact__groups=group).order_by("-date") partial_row = 'ntds/partials/message_row.html' columns = [('Message', True, 'text', SimpleSorter()), ('Mobile', True, 'identity', SimpleSorter()), ('Date', True, 'date', SimpleSorter()), ('Direction', True, 'direction', SimpleSorter()), ] return generic( request, model=Message, queryset=messages, objects_per_page=25, partial_row=partial_row, results_title="Messages", title="All SMS ", base_template="ntds/messages_base.html", columns=columns, sort_column='pk', show_unfiltered=False, sort_ascending=False, )
def view_messages(request): context = {} columns = [('Name', True, 'title', SimpleSorter()), ('Parish', True, 'decription', SimpleSorter()), ('Mobile', True, 'questions__name', SimpleSorter()), ('Status', True, 'enabled', SimpleSorter()), ('Submissions', False, '', ''), ('Last Submission', False, '', ''), ] messages = Message.objects.filter(connection__pk__in=Reporter.objects.values("connection")).order_by("-pk") return generic( request, model=Message, queryset=Reporter.objects.all(), filter_forms=[], action_forms=[], objects_per_page=25, partial_row='ntds/partials/reporter_row.html', base_template='ntds/reporter_base.html', columns=columns, sort_column='pk', sort_ascending=False, current='survey' )
def view_messages(request): #filter_forms = [] #action_forms = [] partial_row = 'mission/partials/messages_row.html' base_template = 'mission/partials/messages_base.html' paginator_template = 'mission/partials/pagination.html' columns = [ ('Message', True, 'text', SimpleSorter()), ('Type', True, 'type', SimpleSorter()), ('sender', True, 'sender__username', SimpleSorter()), ('Destination', True, 'identifier', SimpleSorter()), ('Date', True, 'created', SimpleSorter()), ('Status', True, 'delivered', SimpleSorter()), ] return generic( request, model=Message, queryset=Message.objects.all(), objects_per_page=25, partial_row=partial_row, results_title="Messages", title="All SMS and Emails", base_template=base_template, paginator_template=paginator_template, paginator_func=paginate, columns=columns, sort_column='pk', show_unfiltered=False, sort_ascending=False, )
def script_polls(request): columns = [('Name', True, 'name', SimpleSorter()), ( 'Question', True, 'question', SimpleSorter(), ), ( 'Start Date', True, 'start_date', SimpleSorter(), ), ('Closing Date', True, 'end_date', SimpleSorter()), ('', False, '', None)] return generic(request, model=Poll, queryset=get_script_polls, objects_per_page=10, selectable=False, partial_row='ureport/partials/polls/poll_admin_row.html', base_template='ureport/poll_admin_base.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, results_title='Polls', sort_column='start_date', auto_reg=True, sort_ascending=False, columns=columns)
def cloud_dashboard(request, name): name = name.replace("_", " ") category = get_object_or_404(IbmCategory, name__iexact=name) tags = get_category_tags(category=category) columns = [('Identifier', True, 'message__connection_id', SimpleSorter()), ('Text', True, 'msg__text', SimpleSorter()), ('Date', True, 'msg__date', SimpleSorter()), ('Score', True, 'score', SimpleSorter()), ('Category', True, 'category', SimpleSorter(),), ('Action', True, 'action', SimpleSorter(),), ('Rating', False, '', None)] return generic( request, model=IbmMsgCategory, queryset=IbmMsgCategory.objects.filter(category=category, msg__direction='I', score__gte=0.5), objects_per_page=20, results_title='Classified Messages', partial_row='message_classifier/message_row.html', base_template='message_classifier/message_classifier_cloud_base.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, columns=columns, sort_column='msg__date', sort_ascending=False, tags=tags, ibm_categories=IbmCategory.objects.all() )
def unsolicitized_messages(request): filter_forms = [FreeSearchTextForm, DistictFilterMessageForm] action_forms = [ReplyTextForm, BlacklistForm2] partial_row = 'ureport/partials/messages/message_row.html' base_template = 'ureport/contact_message_base.html' paginator_template = 'ureport/partials/new_pagination.html' columns = [('Text', True, 'text', SimpleSorter()), ('Contact Information', True, 'connection__contact__name' , SimpleSorter()), ('Date', True, 'date', SimpleSorter()), ('Type', True, 'application', SimpleSorter()), ('Response', False, 'response', None)] return generic( request, model=Message, queryset=get_unsolicitized_messages, filter_forms=filter_forms, action_forms=action_forms, objects_per_page=25, partial_row=partial_row, base_template=base_template, results_title="Unsolicitized Messages", paginator_template=paginator_template, paginator_func=ureport_paginate, columns=columns, sort_column='date', sort_ascending=False, )
def view_responses(req, poll_id): poll = get_object_or_404(Poll, pk=poll_id) script_polls = \ ScriptStep.objects.exclude(poll=None).values_list('poll', flat=True) response_rates = {} if poll.pk in script_polls: responses = poll.responses.order_by('-date') else: if hasattr(Contact, 'groups'): responses = \ poll.responses.filter(contact__groups__in=req.user.groups.all()).distinct() else: responses = poll.responses.all() responses = responses.order_by('-date') for group in req.user.groups.all(): try: contact_count = \ poll.contacts.filter(groups__in=[group]).distinct().count() response_count = \ poll.responses.filter(contact__groups__in=[group]).distinct().count() response_rates[str(group.name)] = [contact_count] response_rates[str(group.name)].append(response_count) response_rates[str(group.name)].append(response_count * 100.0 / contact_count) except ZeroDivisionError: response_rates.pop(group.name) typedef = Poll.TYPE_CHOICES[poll.type] # columns = [('Sender', False, 'sender', None)] # for (column, style_class, sortable, db_field, sorter) in \ # typedef['report_columns']: # columns.append((column, sortable, db_field, sorter)) columns = ( ('Date', True, 'date', SimpleSorter()), ('Text', True, 'poll__question', SimpleSorter()), ('Category', True, 'categories', SimpleSorter()) ) return generic( req, model=Response, response_rates=response_rates, queryset=responses, objects_per_page=25, selectable=True, partial_base='ureport/partials/polls/poll_partial_base.html', base_template='ureport/responses_base.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, row_base=typedef['view_template'], action_forms=[AssignToPollForm, AssignResponseGroupForm, ReplyTextForm, DeleteSelectedForm], filter_forms=[SearchResponsesForm], columns=columns, partial_row='ureport/partials/polls/response_row.html', )
def ureport_polls(request): access = get_access(request) columns = [('Name', True, 'name', SimpleSorter()), ( 'Question', True, 'question', SimpleSorter(), ), ( 'Start Date', True, 'start_date', SimpleSorter(), ), ('Closing Date', True, 'end_date', SimpleSorter()), ('', False, '', None)] queryset = get_polls(request=request) if access: queryset = queryset.filter(user=access.user) return generic(request, model=Poll, queryset=queryset, objects_per_page=10, selectable=False, partial_row='ureport/partials/polls/poll_admin_row.html', base_template='ureport/poll_admin_base.html', paginator_template='ureport/partials/new_pagination.html', results_title='Polls', paginator_func=ureport_paginate, sort_column='start_date', sort_ascending=False, columns=columns)
def manage_reporters(request): columns = [('Name', True, 'mobile', SimpleSorter()), ('Parish', True, 'parish', SimpleSorter()), ('Subcounty', True, 'subcounty', SimpleSorter()), ('District', True, 'district', SimpleSorter()), ('Mobile', True, 'default_connection', SimpleSorter()), ('Active', True, 'active', SimpleSorter()), ('Submissions', False, '', ''), ] filter_forms = [FreeSearchForm, MultipleDistictFilterForm] action_forms = [DownloadForm, SendTextForm] return generic( request, model=Reporter, queryset=Reporter.objects.all(), filter_forms=filter_forms, action_forms=action_forms, objects_per_page=25, partial_row='ntds/partials/reporter_row.html', base_template='ntds/reporter_base.html', columns=columns, sort_column='pk', sort_ascending=False, )
def mass_messages(request): access = get_access(request) columns = [(_('Message'), True, 'text', TupleSorter(0)), (_('Time'), True, 'date', TupleSorter(1)), (_('User'), True, 'user', TupleSorter(2)), (_('Recipients'), True, 'response', TupleSorter(3)), (_('Type'), True, 'type', TupleSorter(4))] queryset = get_mass_messages(request=request) if access: queryset = queryset.filter(user=access.user) return generic( request, model=MassText, queryset=queryset, objects_per_page=10, partial_row='contact/partials/mass_message_row.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, base_template='ureport/contacts_base.html', sort_column='date', results_title="Mass Messages", sort_ascending=False, selectable=False, columns=columns )
def view_submissions(req, form_id=None): if form_id == None: if req.method == 'POST': form_id = req.POST.get('form_id') if req.POST.get('form_id') else None xform = XForm.on_site.get(keyword = mcd_keywords[0]) if form_id == None\ else XForm.on_site.get(pk=form_id) submissions = xform.submissions.all().order_by('-pk') fields = xform.fields.all().order_by('pk') # breadcrumbs = (('XForms', '/xforms/'), ('Submissions', '')) return generic( request = req, model = XFormSubmission, queryset = submissions, filter_forms = [XFormsForm], # , FacilityFilterForm, objects_per_page = 25, partial_row = 'mcdtrac/submissions/partials/submission_row.html', partial_header = 'mcdtrac/submissions/partials/submission_header.html', base_template = 'mcdtrac/submissions_base.html', # base_template = 'cvs/messages_base.html', results_title = 'Submissions for %s' % xform.name, columns = [('Name', True, 'name', None)], sort_column = 'last_reporting_date', sort_ascending = False, fields = fields, selectable = False, submissions = submissions, xform = xform, )
def flagged_messages(request): all_flags = Flag.objects.all() if request.GET.get('export', None): flaggedmessages = MessageFlag.objects.exclude(flag=None) data = flaggedmessages.values_list('message__connection_id', 'message__text', 'flag__name', 'message__date', 'message__connection__contact__reporting_location__name') headers = ['Identifier', 'Message', 'Flag', 'Date', 'District'] return ExcelResponse(data=data, headers=headers) return generic( request, model=MessageFlag, queryset=get_flagged_messages, objects_per_page=10, results_title='Flagged Messages', selectable=False, partial_row='ureport/partials/messages/flagged_message_row.html' , base_template='ureport/flagged_message_base.html', columns=[(_('Identifier'), True, 'message__connection_id', SimpleSorter()), (_('Message'), True, 'message__text', SimpleSorter()), (_('Date'), True, 'message__date', SimpleSorter()), (_('Flags'), False, 'message__flagged', None)], sort_column='date', sort_ascending=False, all_flags=all_flags, )
def autoreg_messages(request): access = get_access(request) filter_forms = [SearchInMessagesForm, DistictFilterMessageForm] action_forms = [ReplyTextForm, BlacklistForm2] partial_row = 'ureport/partials/messages/message_row.html' base_template = 'ureport/contact_message_base.html' paginator_template = 'ureport/partials/new_pagination.html' columns = [('Text', True, 'text', SimpleSorter()), ('Identifier', True, 'connection__pk', SimpleSorter()), ('Date', True, 'date', SimpleSorter()), ('Type', True, 'application', SimpleSorter()), ('Response', False, 'response', None)] queryset = get_autoreg_messages(request=request) if access: queryset = queryset.filter( connection__contact__groups__in=access.groups.all()) return generic( request, model=Message, queryset=queryset, filter_forms=filter_forms, action_forms=action_forms, objects_per_page=25, partial_row=partial_row, results_title="Autoreg Messages", base_template=base_template, paginator_template=paginator_template, paginator_func=ureport_paginate, columns=columns, sort_column='date', sort_ascending=False, )
def htattendance(request, start_date=None, end_date=None, district_id=None): user_location = get_location(request, district_id) dates = get_xform_dates(request) smc_htpresent = Poll.objects.get(name='emis_absence').responses.exclude(has_errors=True)\ .filter(date__range=(dates.get('start'), dates.get('end')))\ .filter(message__connection__contact__emisreporter__reporting_location__in=user_location.get_descendants(include_self=True).all())\ .order_by('message__date') return generic(request, model = Poll, queryset = smc_htpresent, objects_per_page = 50, results_title = 'Head Teacher Presence as Reported by SMCs', # top_columns = [ # ('', 1, None), # ('head teacher attendance (reported by SMCs)', 2, None), # ('head teacher attendance (reported by GEM)', 2, None), # ], columns = [ ('school', False, 'school', None), ('present', False, 'present', None), ('reporting date', False, 'date', None), # ('present', False, 'present', None), # ('reporting date', False, 'date', None), ], partial_row = 'education/partials/ht_attendance_row.html', partial_header = 'education/partials/partial_header.html', base_template = 'education/timeslider_base.html', needs_date = True, selectable = False, dates = get_xform_dates, )
def ureport_polls(request, pk): access = get_access(request) columns = [(_('Name'), True, 'name', SimpleSorter()), (_('Question'), True, 'question', SimpleSorter(),), (_('Start Date'), True, 'start_date', SimpleSorter(),), (_('Closing Date'), True, 'end_date', SimpleSorter()), ('', False, '', None)] queryset = get_polls(request=request) if access: queryset = queryset.filter(user=access.user) return generic(request, model=Poll, queryset=queryset, objects_per_page=10, selectable=False, partial_row='ureport/partials/polls/poll_admin_row.html', base_template='ureport/poll_admin_base.html', paginator_template='ureport/partials/new_pagination.html', results_title='Polls', paginator_func=ureport_paginate, sort_column='start_date', sort_ascending=False, filter_forms=[SearchPollsForm], columns=columns )
def reports(request): columns = [ ('Name', True, 'title', SimpleSorter()), ('Parish', True, 'decription', SimpleSorter()), ('Mobile', True, 'questions__name', SimpleSorter()), ('Status', True, 'enabled', SimpleSorter()), ('Submissions', False, '', ''), ('Last Submission', False, '', ''), ] filter_forms = [FreeSearchForm, MultipleDistictFilterForm] action_forms = [DownloadForm, SendTextForm] return generic( request, model=Reporter, queryset=Reporter.objects.all(), filter_forms=filter_forms, action_forms=action_forms, objects_per_page=25, partial_row='ntds/partials/report_row.html', base_template='ntds/report_base.html', columns=columns, sort_column='pk', sort_ascending=False, )
def view_messages(request): context = {} columns = [ ('Name', True, 'title', SimpleSorter()), ('Parish', True, 'decription', SimpleSorter()), ('Mobile', True, 'questions__name', SimpleSorter()), ('Status', True, 'enabled', SimpleSorter()), ('Submissions', False, '', ''), ('Last Submission', False, '', ''), ] messages = Message.objects.filter(connection__pk__in=Reporter.objects. values("connection")).order_by("-pk") return generic(request, model=Message, queryset=Reporter.objects.all(), filter_forms=[], action_forms=[], objects_per_page=25, partial_row='ntds/partials/reporter_row.html', base_template='ntds/reporter_base.html', columns=columns, sort_column='pk', sort_ascending=False, current='survey')
def flagged_messages(request): all_flags = Flag.objects.all() if request.GET.get('export', None): flaggedmessages = MessageFlag.objects.exclude(flag=None) data = flaggedmessages.values_list( 'message__connection_id', 'message__text', 'flag__name', 'message__date', 'message__connection__contact__reporting_location__name') headers = ['Identifier', 'Message', 'Flag', 'Date', 'District'] return ExcelResponse(data=data, headers=headers) return generic( request, model=MessageFlag, queryset=get_flagged_messages, objects_per_page=10, results_title='Flagged Messages', selectable=False, partial_row='ureport/partials/messages/flagged_message_row.html', base_template='ureport/flagged_message_base.html', columns=[('Identifier', True, 'message__connection_id', SimpleSorter()), ('Message', True, 'message__text', SimpleSorter()), ('Date', True, 'message__date', SimpleSorter()), ('Flags', False, 'message__flagged', None)], sort_column='date', sort_ascending=False, all_flags=all_flags, )
def view_autoreg_rules(request): columns = [( 'Group', True, 'group__name', SimpleSorter(), ), ( 'Rule', True, 'rule', SimpleSorter(), ), ( 'Words', True, 'values', SimpleSorter(), ), ( 'Closed', True, 'closed', SimpleSorter(), ), ('', False, '', None)] qs = AutoregGroupRules.objects.all() return generic( request, model=AutoregGroupRules, queryset=qs, objects_per_page=20, results_title='Group Rules', selectable=False, partial_row='ureport/partials/group_row.html', base_template='ureport/group_base.html', columns=columns, )
def flag_categories(request, name): group = get_object_or_404(Group, name=name) if get_access(request) and request.user not in group.user_set.all(): return render(request, '403.html', status=403) access = group.access_set.all()[0] flags = access.flags.all() flagged_messages = MessageFlag.objects.filter(flag__in=flags, message__connection__contact__reporting_location__name__in=access.allowed_locations) if request.GET.get('export', None): data = flagged_messages.filter( message__connection__contact__reporting_location__name__in=access.allowed_locations).values_list( 'message__connection_id', 'message__text', 'flag__name', 'message__date', 'message__connection__contact__reporting_location__name') headers = ['Identifier', 'Message', 'Flag', 'Date', 'District'] return ExcelResponse(data=data, headers=headers) return generic( request, model=MessageFlag, queryset=flagged_messages, objects_per_page=10, results_title='Flagged Messages', selectable=False, partial_row='ureport/partials/messages/flagged_message_row.html' , base_template='ureport/flagged_message_base.html', columns=[('Identifier', True, 'message__connection_id', SimpleSorter()), ('Message', True, 'message__text', SimpleSorter()), ('Date', True, 'message__date', SimpleSorter()), ('Flags', False, 'message__flagged', None)], sort_column='date', sort_ascending=False, all_flags=flags, go_to_dashboards=True )
def view_responses(req, poll_id): poll = get_object_or_404(Poll, pk=poll_id) responses = poll.responses.all() responses = responses.order_by('-date') response_rates = {} for group in req.user.groups.all(): try: contact_count = poll.contacts.filter(groups__in=[group]).distinct().count() response_count = poll.responses.filter(contact__groups__in=[group]).distinct().count() response_rates[str(group.name)] = [contact_count] response_rates[str(group.name)].append(response_count) response_rates[str(group.name)].append(response_count * 100.0 / contact_count) except(ZeroDivisionError): response_rates.pop(group.name) typedef = Poll.TYPE_CHOICES[poll.type] columns = [('Sender', False, 'sender', None)] for column, style_class in typedef['report_columns']: columns.append((column, False, style_class, None)) return generic(req, model=Response, response_rates=response_rates, queryset=responses, objects_per_page=25, selectable=True, partial_base='kenya/partials/poll_partial_base.html', base_template='kenya/responses_base.html', row_base=typedef['view_template'], action_forms=[AssignToPollForm], filter_forms=[SearchResponsesForm], columns=columns, partial_row='ureport/partials/polls/response_row.html' )
def view_submissions(req, form_id): xform = XForm.on_site.get(pk=form_id) submissions = xform.submissions.all().order_by('-pk') fields = xform.fields.all().order_by('pk') breadcrumbs = (('XForms', '/xforms/'), ('Submissions', '')) columns = [('Type', False, 'type', None), ('Date', True, 'created', SimpleSorter())] for field in fields: columns.append((field.name.capitalize(), True, field.slug, SubmissionValueSorter())) return generic(req, model=XFormSubmission, queryset=xform.submissions.all(), sort_column='created', sort_ascending=False, objects_per_page=25, selectable=False, results_title=' %s Submissions' % xform.name.capitalize(), base_template='cvs/submissions_base.html', columns=columns, fields=fields, form=xform, partial_row='cvs/partials/submission_row.html', )
def comfirmmessages(request, key): messages = Message.objects.filter( details__attribute__name=key).order_by('-date') partial_row = 'ureport/partials/messages/message_row.html' base_template = 'ureport/comfirmbase.html' paginator_template = 'ureport/partials/new_pagination.html' columns = [('Text', True, 'text', SimpleSorter()), ('Date', True, 'date', SimpleSorter())] if request.method == "POST": res = dict(request.POST)['results'] messages = Message.objects.filter(pk__in=res).update(status="Q") return HttpResponseRedirect("/reporter/") return generic( request, model=Message, queryset=messages, objects_per_page=25, partial_row=partial_row, base_template=base_template, results_title="Messages To be Sent. Please Comfirm to sent .", paginator_template=paginator_template, paginator_func=ureport_paginate, columns=columns, sort_column='date', key=key, sort_ascending=False, )
def autoreg_messages(request): access = get_access(request) filter_forms = [FreeSearchTextForm, DistictFilterMessageForm] action_forms = [ReplyTextForm, BlacklistForm2] partial_row = 'ureport/partials/messages/message_row.html' base_template = 'ureport/contact_message_base.html' paginator_template = 'ureport/partials/new_pagination.html' columns = [(_('Text'), True, 'text', SimpleSorter()), (_('Identifier'), True, 'connection__pk', SimpleSorter()), (_('Date'), True, 'date', SimpleSorter()), (_('Type'), True, 'application', SimpleSorter()), (_('Response'), False, 'response', None)] queryset = get_autoreg_messages(request=request) if access: queryset = queryset.filter(connection__contact__groups__in=access.groups.all()) return generic( request, model=Message, queryset=queryset, filter_forms=filter_forms, action_forms=action_forms, objects_per_page=25, partial_row=partial_row, results_title="Autoreg Messages", base_template=base_template, paginator_template=paginator_template, paginator_func=ureport_paginate, columns=columns, sort_column='date', sort_ascending=False, )
def manage_reporters(request): queryset = Reporter.objects.all(), columns = [ ('Name', True, 'title', SimpleSorter()), ('Parish', True, 'decription', SimpleSorter()), ('Subcounty', True, 'decription', SimpleSorter()), ('District', True, 'decription', SimpleSorter()), ('Mobile', True, 'questions__name', SimpleSorter()), ('Status', True, 'enabled', SimpleSorter()), ('Submissions', False, '', ''), ] filter_forms = [FreeSearchForm, MultipleDistictFilterForm] action_forms = [DownloadForm, SendTextForm] if not request.POST.get("page_num") and request.method == "POST": return ExcelResponse(queryset) return generic( request, model=Reporter, queryset=queryset, filter_forms=filter_forms, action_forms=action_forms, objects_per_page=25, partial_row='ntds/partials/reporter_row.html', base_template='ntds/reporter_base.html', columns=columns, sort_column='pk', sort_ascending=False, )
def gem_htattendance(request, start_date=None, end_date=None, district_id=None): user_location = get_location(request, district_id) dates = get_xform_dates(request) gem_htpresent = XFormSubmission.objects.filter(xform__keyword='gemteachers').exclude(has_errors=True)\ .filter(created__range=(dates.get('start'), dates.get('end')))\ .filter(connection__contact__emisreporter__reporting_location__in=user_location.get_descendants(include_self=True).all())\ .order_by('created') return generic(request, model = XFormSubmission, queryset = gem_htpresent, objects_per_page = 50, results_title = 'Head Teacher Presence as Reported by GEM', columns = [ ('school', False, 'school', None), ('present', False, 'present', None), ('reporting date', False, 'date', None), ], partial_row = 'education/partials/gemht_attendance_row.html', partial_header = 'education/partials/partial_header.html', base_template = 'education/timeslider_base.html', needs_date = True, selectable = False, dates = get_xform_dates, )
def meals(request, district_id=None): user_location = get_location(request, district_id) dates = get_xform_dates(request) meals = Poll.objects.get(name='emis_meals').responses.exclude(has_errors=True)\ .filter(date__range=(dates.get('start'), dates.get('end')))\ .filter(message__connection__contact__emisreporter__reporting_location__in=user_location.get_descendants(include_self=True).all()) return generic(request, model = Poll, queryset = meals, objects_per_page = 50, results_title = 'Pupils who had Meals at School', columns = [ ('school', False, 'school', None), ('estimated number', False, 'number', None), ('reporting date', False, 'date', None), ], partial_row = 'education/partials/meals_row.html', partial_header = 'education/partials/partial_header.html', base_template = 'education/timeslider_base.html', needs_date = True, selectable = False, dates = get_xform_dates, )
def view_flagged_with(request, pk): flag = get_object_or_404(Flag, pk=pk) access = get_access(request) if access and not flag in access.flags.all(): return render(request, '403.html', status=403) messages = flag.get_messages() if request.GET.get('export', None): export_data = messages.values_list('text', 'connection_id', 'date', 'connection__contact__reporting_location__name') headers = ['Message', 'Identifier', 'Date', 'District'] return ExcelResponse(data=export_data, headers=headers) return generic( request, model=Message, queryset=messages, objects_per_page=25, partial_row='ureport/partials/contacts/contacts_row_flag.html', base_template='ureport/view_flagged_with_base.html', results_title='Messages Flagged With %s' % flag.name, columns=[('Message', True, 'text', SimpleSorter()), ('Identifier', True, 'connection_id', SimpleSorter()), ('Date', True, 'date', SimpleSorter()), ('Type', True, 'application', SimpleSorter())], sort_column='date', sort_ascending=False, )
def comfirmmessages(request, key): messages = Message.objects.filter(details__attribute__name=key).order_by('-date') partial_row = 'ureport/partials/messages/message_row.html' base_template = 'ureport/comfirmbase.html' paginator_template = 'ureport/partials/new_pagination.html' columns = [('Text', True, 'text', SimpleSorter()), ('Date', True, 'date', SimpleSorter())] if request.method == "POST": res = dict(request.POST)['results'] messages = Message.objects.filter(pk__in=res).update(status="Q") return HttpResponseRedirect("/reporter/") return generic( request, model=Message, queryset=messages, objects_per_page=25, partial_row=partial_row, base_template=base_template, results_title="Messages To be Sent. Please Comfirm to sent .", paginator_template=paginator_template, paginator_func=ureport_paginate, columns=columns, sort_column='date', key=key, sort_ascending=False, )
def view_responses(req, poll_id): poll = get_object_or_404(Poll, pk=poll_id) access = get_access(req) if access and not poll.user == access.user: return render(req, '403.html', status=403) script_polls = \ ScriptStep.objects.exclude(poll=None).values_list('poll', flat=True) response_rates = {} if poll.pk in script_polls: responses = poll.responses.order_by('-date') log.info("[reponses] 1 - %s " % responses) else: responses = poll.responses.all() responses = responses.order_by('-date') log.info("[reponses] 3 - %s " % responses) for group in req.user.groups.all(): try: contact_count = \ poll.contacts.filter(groups__in=[group]).distinct().count() response_count = \ poll.responses.filter(contact__groups__in=[group]).distinct().count() response_rates[str(group.name)] = [contact_count] response_rates[str(group.name)].append(response_count) response_rates[str(group.name)].append(response_count * 100.0 / contact_count) except ZeroDivisionError: response_rates.pop(group.name) typedef = Poll.TYPE_CHOICES[poll.type] # columns = [('Sender', False, 'sender', None)] # for (column, style_class, sortable, db_field, sorter) in \ # typedef['report_columns']: # columns.append((column, sortable, db_field, sorter)) columns = ((_('Date'), True, 'date', SimpleSorter()), (_('Text'), True, 'poll__question', SimpleSorter()), (_('Category'), True, 'categories__category', SimpleSorter())) return generic( req, model=Response, response_rates=response_rates, queryset=responses, objects_per_page=25, selectable=True, partial_base='ureport/partials/polls/poll_partial_base.html', base_template='ureport/responses_base.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, row_base=typedef['view_template'], action_forms=[ AssignToPollForm, AssignResponseGroupForm, ReplyTextForm, DeleteSelectedForm ], filter_forms=[SearchResponsesForm], columns=columns, partial_row='ureport/partials/polls/response_row.html', poll_id=poll_id, )
def alerts_detail(request, alert, district_id=None): user_location = get_location(request, district_id) schools_queryset = School.objects.filter(location__in=user_location.get_descendants(include_self=True).all()) start_date = datetime.datetime(datetime.datetime.now().year, 1, 1) end_date = datetime.datetime.now() if int(alert) == 1: results_title = "Schools which didn't send in Pupil Attendance Data this Week" start_date, end_date = previous_calendar_week() responsive_schools = XFormSubmissionValue.objects.all()\ .filter(Q(submission__xform__keyword__icontains='boys')|Q(submission__xform__keyword__icontains='girls'))\ .filter(created__range=(start_date, end_date))\ .filter(submission__connection__contact__emisreporter__schools__location__in=user_location.get_descendants(include_self=True).all())\ .values_list('submission__connection__contact__emisreporter__schools__name', flat=True) schools_queryset = schools_queryset.exclude(name__in=responsive_schools) if int(alert) == 2: print 2 results_title = "Schools which have not sent in Pupil Enrollment Data this Year" responsive_schools = XFormSubmissionValue.objects.all()\ .filter(Q(submission__xform__keyword__icontains='enrolledb')|Q(submission__xform__keyword__icontains='enrolledg'))\ .filter(created__range=(start_date, end_date))\ .filter(submission__connection__contact__emisreporter__schools__location__in=user_location.get_descendants(include_self=True).all())\ .values_list('submission__connection__contact__emisreporter__schools__name', flat=True) schools_queryset = schools_queryset.exclude(name__in=responsive_schools) if int(alert) == 3: results_title = "Schools which have not sent in Teacher Deployment Data this Year" responsive_schools = XFormSubmissionValue.objects.all()\ .filter(submission__xform__keyword__icontains='deploy')\ .filter(created__range=(start_date, end_date))\ .filter(submission__connection__contact__emisreporter__schools__location__in=user_location.get_descendants(include_self=True).all())\ .values_list('submission__connection__contact__emisreporter__schools__name', flat=True) schools_queryset = schools_queryset.exclude(name__in=responsive_schools) return generic(request, model = School, queryset = schools_queryset, filter_forms = [FreeSearchSchoolsForm, SchoolDistictFilterForm], action_forms = [SchoolMassTextForm], objects_per_page = 25, results_title = results_title, partial_row = 'education/partials/alerts_row.html', partial_header = 'education/partials/partial_header.html', base_template = 'education/schools_base.html', columns = [('Name', True, 'name', SimpleSorter()), ('District', True, 'location__name', None,), ('Head Teacher', False, 'emisreporter', None,), ('Reporters', False, 'emisreporter', None,), ('Last Report Date ', True, 'report_date', None,) ], sort_column = 'date', sort_ascending = False, alert = alert, )
def ureporters(request): access = get_access(request) download_form = DownloadForm(request.POST or None) if request.POST and request.POST.get('download', None): if download_form.is_valid(): download_form.export(request, request.session['queryset'], 'autoreg_join_date') else: return HttpResponse("Some thing went wrong") columns = [ (_('Identifier'), True, 'connection_pk', SimpleSorter()), (_('Age'), True, 'age', SimpleSorter(),), (_('Gender'), True, 'gender', SimpleSorter(),), (_('Language'), True, 'language', SimpleSorter(),), (_('District'), True, 'district', SimpleSorter(),), (_('Group(s)'), True, 'group', SimpleSorter(),), (_('Questions '), True, 'questions', SimpleSorter(),), (_('Responses '), True, 'responses', SimpleSorter(),), (_('Messages Sent'), True, 'incoming', SimpleSorter(),), (_('caregiver'), True, 'is_caregiver', SimpleSorter(),), (_('join date'), True, 'autoreg_join_date', SimpleSorter(),), (_('quit date'), True, 'quit_date', SimpleSorter(),), ] if request.user.is_staff: columns.insert(1, ('Phone', True, 'mobile', SimpleSorter())) queryset = get_contacts2(request=request) if access is not None: groups = list(access.groups.values_list('name', flat=True)) if len(groups) > 0: qset = Q(group__icontains=groups[0]) if len(groups) > 1: for group in groups[1:]: qset = qset | Q(group__icontains=group) queryset = queryset.filter(qset) return generic(request, model=UreportContact, queryset=queryset, download_form=download_form, results_title= _('uReporters'), filter_forms=[UreporterSearchForm, GenderFilterForm, AgeFilterForm, MultipleDistictFilterForm, FilterGroupsForm], action_forms=[MassTextForm, AssignGroupForm, BlacklistForm, AssignToNewPollForm, RemoveGroupForm, TemplateMessage], objects_per_page=25, partial_row='ureport/partials/contacts/contacts_row.html', base_template='ureport/ureporters_base.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, columns=columns, )
def view_autoreg_rules(request): columns = [('Group', True, 'group__name', SimpleSorter(),),('Rule', True, 'rule', SimpleSorter(),),('Words', True, 'words', SimpleSorter(),)] qs=AutoregGroupRules.objects.all() return generic( request, model=AutoregGroupRules, queryset=qs, objects_per_page=20, results_title='Group Rules', selectable=False, partial_row='ureport/partials/group_row.html', base_template='ureport/group_base.html', columns=columns, )
def patients(request): from generic.views import generic from generic.sorters import SimpleSorter filter_forms = [SearchPatientsForm, AgeFilterForm] action_forms = [DownloadForm, SendTextForm, SendEmailForm] if not request.user.is_superuser or not request.user.is_staff: country = request.user.get_profile().country title = "Patient Listing For %s" % (" ".join( country.values_list("name", flat=True))) patients = Patient.objects.filter( mission__country__in=country.values("pk")).prefetch_related( "phase1", "phase2", "phase3", "mission") filter_forms.append(SiteFilterForm) else: title = "All Patients" patients = Patient.objects.all().prefetch_related( "phase1", "phase2", "phase3", "mission") filter_forms.append(CountryFilterForm) partial_row = 'mission/partials/patient_row.html' base_template = 'mission/partials/patients_base.html' paginator_template = 'mission/partials/pagination.html' columns = [('Name', True, 'first_name', SimpleSorter()), ('Age', True, 'age', SimpleSorter()), ('Gender', True, 'gender', SimpleSorter()), ('Country', True, 'mission__country__name', SimpleSorter()), ('Mobile', True, 'mobile', SimpleSorter()), ('Email', True, 'email', SimpleSorter()), ('User', True, 'user', SimpleSorter()), ('Actions', False, '', '')] return generic( request, model=Patient, queryset=patients, filter_forms=filter_forms, action_forms=action_forms, objects_per_page=25, partial_row=partial_row, results_title="Patients", title=title, base_template=base_template, paginator_template=paginator_template, paginator_func=paginate, columns=columns, sort_column='pk', show_unfiltered=False, sort_ascending=False, )
def message_classification(request): queryset = IbmMsgCategory.objects.filter(msg__direction='I', score__gte=0.1) filter_forms = [ChooseCategoryForm, ChooseActionForm] FILTER_REQUEST_KEY = "%s_filter_request" % request.path if request.method == "POST" and 'startdate' in request.POST: filter_request_post = request.session.setdefault(FILTER_REQUEST_KEY, None) if filter_request_post: for form_class in filter_forms: form_instance = form_class(filter_request_post, request=request) if form_instance.is_valid(): queryset = form_instance.filter(request, queryset) queue_form = QueueForm(request.POST) if queue_form.is_valid(): queue_form.queue_export(request.user.username, request.get_host(), queryset) return HttpResponse("All is good... You will receive an email when export is ready") msg_form = QueueForm() action_form = NewActionForm columns = [(_('Identifier'), True, 'message__connection_id', SimpleSorter()), (_('Text'), True, 'msg__text', SimpleSorter()), (_('Date'), True, 'msg__date', SimpleSorter()), (_('Score'), True, 'score', SimpleSorter()), (_('Category'), True, 'category', SimpleSorter(),), (_('Action'), True, 'action', SimpleSorter(),), (_('Rating'), False, '', None)] return generic( request, model=IbmMsgCategory, queryset=queryset, objects_per_page=20, results_title='Classified Messages', partial_row='message_classifier/message_row.html', base_template='message_classifier/message_classifier_base.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, columns=columns, sort_column='score', sort_ascending=False, msg_form=msg_form, action_form=action_form, ibm_actions=IbmAction.objects.all(), filter_forms=filter_forms, action_forms=[PushToMtracForm, QueueAllForm, AssignActionForm] )
def view_submissions(request, xform_pk): xform = get_object_or_404(XForm, pk=xform_pk) return generic(\ request, \ model=XFormSubmission, \ queryset=xform.submissions.all().order_by('-created'), \ objects_per_page=25, \ base_template='kit/submissions_base.html', \ partial_row='kit/partials/reports/submission_row.html', \ results_title='Last Reporting Period Results', \ columns=[('Reporter', True, 'message__connection__contact__name', SimpleSorter(),), \ ('Location', True, 'message__connection__contact__reporting_location__name', SimpleSorter(),), \ ('Report', True, 'raw', SimpleSorter(),), \ ('Date', True, 'created', SimpleSorter(),), \ ('Approved', True, 'approved', SimpleSorter(),), \ ('', False, '', None,)], \ sort_column='message__connection__contact__healthproviderbase__healthprovider__facility__name', \ )
def ureport_polls(request): columns = [('Name', True, 'name', SimpleSorter()), ('Question', True, 'question', SimpleSorter(),), ('Start Date', True, 'start_date', SimpleSorter(),), ('Closing Date', True, 'end_date', SimpleSorter()), ('', False, '', None)] return generic(request, model=Poll, queryset=get_polls, objects_per_page=10, selectable=False, partial_row='ureport/partials/polls/poll_admin_row.html', base_template='ureport/poll_admin_base.html', paginator_template='ureport/partials/new_pagination.html', results_title='Polls', paginator_func=ureport_paginate, sort_column='start_date', sort_ascending=False, )
def poll_dashboard(request): columns = [ (_('Name'), True, 'name', SimpleSorter()), ( _('Question'), True, 'question', SimpleSorter(), ), ( _('Start Date'), True, 'start_date', SimpleSorter(), ), ( _('# Participants'), False, 'participants', None, ), ( _('Visuals'), False, 'visuals', None, ), ] return generic(request, model=Poll, queryset=get_polls, results_title='Polls', objects_per_page=10, partial_row='ureport/partials/dashboard/poll_row.html', partial_header= 'ureport/partials/dashboard/partial_header_dashboard.html', base_template='ureport/dashboard.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, selectable=False, sort_column='start_date', columns=columns)
def get_facility_reports(request, facility_pk=0): reports = XFormSubmissionExtras.objects.filter(facility=facility_pk).\ exclude(submission__has_errors=True).order_by('-cdate') facility = reports[0].facility.name if reports else '' return generic( request=request, model=XFormSubmissionExtras, queryset=reports, objects_per_page=25, partial_row='cvs/facility/partials/facility_report_row.html', paginator_template='cvs/partials/new_pagination.html', partial_header='cvs/facility/partials/facility_report_header.html', base_template='cvs/facility/facility_base.html', # columns=[('Text', 'Reporter', 'Date', '')], results_title='%s Reports' % facility, sort_column='cdate', selectable=False, paginator_func=mtrac_paginate, sort_ascending=False )
def poll_dashboard(request): columns = [('Name', True, 'name', SimpleSorter()), ('Question', True, 'question', SimpleSorter(),), ('Start Date', True, 'start_date', SimpleSorter(),), ('# Participants', False, 'participants', None,), ('Visuals', False, 'visuals', None,), ] return generic(request, model=Poll, queryset=get_polls, results_title='Polls', objects_per_page=10, partial_row='ureport/partials/dashboard/poll_row.html', partial_header='ureport/partials/dashboard/partial_header_dashboard.html', base_template='ureport/dashboard.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, selectable=False, sort_column='start_date' )
def view_autoreg_rules(request): columns = [ ("Group", True, "group__name", SimpleSorter()), ("Rule", True, "rule", SimpleSorter()), ("Words", True, "values", SimpleSorter()), ("Closed", True, "closed", SimpleSorter()), ("", False, "", None), ] qs = AutoregGroupRules.objects.all() return generic( request, model=AutoregGroupRules, queryset=qs, objects_per_page=20, results_title="Group Rules", selectable=False, partial_row="ureport/partials/group_row.html", base_template="ureport/group_base.html", columns=columns, )
def ussd_manager(request): ussd_contacts = Contact.objects.filter(groups__name='equatel') ussd_conns = Connection.objects.filter(contact__in=ussd_contacts) messages = \ Message.objects.filter(connection__in=ussd_conns).order_by('-date' ) return generic( request, model=Message, queryset=messages, objects_per_page=25, partial_row='contact/partials/message_row.html', base_template='ureport/ussd_messages_base.html', results_title='Ussd Messages', columns=[('Message', True, 'text', SimpleSorter()), ('Date', True, 'date', SimpleSorter()), ('Type', True, 'application', SimpleSorter())], sort_column='date', sort_ascending=False, )
def view_submissions(request, reporter=None): columns = [ ('Name', True, 'title', SimpleSorter()), ('Parish', True, 'decription', SimpleSorter()), ('Mobile', True, 'questions__name', SimpleSorter()), ('Status', True, 'enabled', SimpleSorter()), ('Submissions', False, '', ''), ('Last Submission', False, '', ''), ] return generic(request, model=XFormSubmission, queryset=XFormSubmission.objects.all(), filter_forms=[], action_forms=[], objects_per_page=25, partial_row='ntds/partials/submission_row.html', base_template='ntds/submissions_base.html', columns=columns, sort_column='pk', sort_ascending=False, current='survey')
def ureporter_profile(request, connection_pk): from script.models import ScriptSession, ScriptResponse, Script connection = get_object_or_404(Connection, pk=connection_pk) session = ScriptSession.objects.filter(connection__pk=connection_pk) messages = Message.objects.filter(connection=connection).order_by('-date') contact = connection.contact if contact: #get the proxy contact = Ureporter.objects.get(pk=connection.contact.pk) reporter_form = EditReporterForm(instance=contact) total_outgoing = messages.filter(direction='O', connection__pk=connection_pk).count() total_incoming = messages.filter(direction='I', connection__pk=connection_pk).count() try: response_rate = contact.responses.values_list( 'poll').distinct().count() * 100 / float( Poll.objects.filter(contacts=contact).distinct().count()) except (ZeroDivisionError, ValueError): response_rate = None # gr_poll = Poll.objects.get(pk=121) gr_poll = Script.objects.get(slug="autoreg_en").steps.get(order=1).poll how_did_u_hear = None if session: try: how_did_u_hear = \ session[0].responses.filter(response__poll=gr_poll)[0].response.message.text except (ScriptResponse.DoesNotExist, IndexError): how_did_u_hear = 'N/A' if request.GET.get('download', None): data = [] data = messages.values_list( 'text', 'direction', 'date', 'connection__contact__reporting_location__name').iterator() headers = ['Message', 'Direction', 'Date', 'District'] return ExcelResponse(data=data, headers=headers) columns = [('Message', True, 'text', SimpleSorter()), ('connection', True, 'connection', SimpleSorter()), ('Date', True, 'date', SimpleSorter()), ('Direction', True, 'direction', SimpleSorter())] # hack hack send the reply message by hacking the sendmessage form if request.method == 'POST': if not request.POST.get('text', None) == u'' and request.POST.get( 'action' ) == u'ureport.forms.ReplyTextForm' and not request.POST.get( 'page_action', None): rep_form = ReplyTextForm(request=request) Message.objects.create(connection=connection, direction='O', status='Q', text=request.POST.get('text')) return generic( request, model=Message, queryset=messages, total_outgoing=total_outgoing, total_incoming=total_incoming, response_rate=response_rate, how_did_u_hear=how_did_u_hear, contact=contact, reporter_form=reporter_form, objects_per_page=20, status_message='Message sent', status_message_type='success', results_title='Message History', selectable=False, partial_row= 'ureport/partials/messages/message_history_row.html', base_template='ureport/message_history_base.html', action_forms=[ReplyTextForm], columns=columns, sort_column='date', sort_ascending=False, ) return generic( request, model=Message, queryset=messages, contact=contact, total_outgoing=total_outgoing, total_incoming=total_incoming, response_rate=response_rate, objects_per_page=20, how_did_u_hear=how_did_u_hear, reporter_form=reporter_form, results_title='Message History', selectable=False, partial_row='ureport/partials/messages/message_history_row.html', base_template='ureport/message_history_base.html', action_forms=[ReplyTextForm], columns=columns, sort_column='date', sort_ascending=False, )
def ureporters(request): access = get_access(request) print request.method message = '' if request.method == 'POST' and request.FILES: contactsform = ExcelTestUploadForm(request.POST, request.FILES) if contactsform.is_valid() and contactsform.good_file(): new_file = contactsform.cleaned_data fields = [ 'number', 'name', 'province', 'commune', 'colline', 'language', 'county', 'village', 'birthdate', 'group', 'gender', ] message = handle_excel_file_update(new_file['excel_file'], fields) print(message) messages.success(request, message) return HttpResponseRedirect("/reporter") else: return HttpResponse( content='The form is not valid. Resfresh this page') columns = [ ('Identifier', True, 'connection_pk', SimpleSorter()), ('Modile', True, 'mobile', SimpleSorter()), ( 'Age', True, 'age', SimpleSorter(), ), ( 'Gender', True, 'gender', SimpleSorter(), ), ( 'Language', True, 'language', SimpleSorter(), ), ( 'Province', True, 'province', SimpleSorter(), ), ( 'Group(s)', True, 'group', SimpleSorter(), ), ( 'Polls ', True, 'questions', SimpleSorter(), ), ( 'Responses ', True, 'responses', SimpleSorter(), ), ( 'Messages Sent', True, 'incoming', SimpleSorter(), ), # ('caregiver', True, 'is_caregiver', SimpleSorter(),), # ('join date', True, 'autoreg_join_date', SimpleSorter(),), # ('quit date', True, 'quit_date', SimpleSorter(),), ] queryset = get_contacts2(request=request) if access is not None: groups = ",".join(list(access.groups.values_list('name', flat=True))) queryset = queryset.filter(group__icontains=groups) return generic( request, model=UreportContact, queryset=get_contacts2, contactsform=ExcelTestUploadForm, message=message, results_title='uReporters', filter_forms=[ UreporterSearchForm, GenderFilterForm, AgeFilterForm, MultipleDistictFilterForm, FilterGroupsForm, FilterByGroupForm, FilterByLocationForm ], action_forms=[ MassTextForm, AssignGroupForm, BlacklistForm, AssignToNewPollForm, RemoveGroupForm, TemplateMessage, ExportToExcelForm ], objects_per_page=25, base_template='ureport/ureporters_base.html', partial_base='ureport/partials/contacts/partial_base.html', partial_row='ureport/partials/contacts/partial_row.html', paginator_template='ureport/partials/new_pagination.html', paginator_func=ureport_paginate, columns=columns, )