def access_dashboards(request): access = get_access(request) urls = [] if access: for url in access.allowed_urls.all(): print url.url if url.url.startswith('^flags/(?P<pk'): for f in access.flags.all(): urls.append('/flags/%s/messages/' % str(f.pk)) elif url.url.startswith('^dashboard/(?P<name>'): for f in access.flags.all(): urls.append('/dashboard/%s/' % str(f.name.replace(" ", "_"))) elif url.url.startswith('^(?P<poll_id>\d+)/respon'): for f in access.user.poll_set.all(): urls.append('/%s/responses/' % str(f.pk)) elif url.url.startswith('^mypolls/(?P<pk>'): urls.append('/mypolls/%s/' % str(request.user.pk)) elif url.url.startswith('^alerts/(?P<pk>'): urls.append('/alerts/%s/' % str(request.user.pk)) elif url.url.startswith('^dashboard/group/(?P<name>'): for f in access.groups.all(): urls.append('/dashboard/group/%s/' % str(f.name)) else: if "?" not in url.url: urls.append(url.url.replace('^', '/').replace('$', "")) return render_to_response('ureport/access_dashboards.html', locals(), context_instance=RequestContext(request))
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 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 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 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 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 voices(request): """ a context processor that passes the total number of ureporters to all templates. """ try: quote = QuoteBox.objects.latest() except QuoteBox.DoesNotExist: quote = None context = { 'total_ureporters': Contact.objects.exclude( connection__identity__in=Blacklist.objects.values_list('connection__identity', flat=True)).count(), 'polls': Poll.objects.exclude(contacts=None, start_date=None).exclude(pk__in=[297, 296, 349, 350]).order_by( '-start_date'), 'deployment_id': settings.DEPLOYMENT_ID, 'quote': quote, 'geoserver_url': settings.GEOSERVER_URL, 'map_bounds': settings.MAP_BOUNDS, 'map_args': settings.MAP_ARGS, 'show_contact_info': getattr(settings, 'SHOW_CONTACT_INFO', True) } if request.user.is_authenticated(): context['access'] = get_access(request) if has_valid_pagination_limit(settings): context['polls'] = Poll.objects.exclude(contacts=None, start_date=None).exclude( pk__in=[297, 296, 349, 350]).order_by( '-start_date')[:settings.PAGINATION_LIMIT] return context
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 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 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 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 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 voices(request): """ a context processor that passes the total number of ureporters to all templates. """ try: quote = QuoteBox.objects.latest() except QuoteBox.DoesNotExist: quote = None context = { 'total_ureporters': Contact.objects.exclude( connection__identity__in=Blacklist.objects.values_list( 'connection__identity', flat=True)).count(), 'polls': Poll.objects.exclude(contacts=None, start_date=None).exclude( pk__in=[297, 296, 349, 350]).order_by('-start_date'), 'deployment_id': settings.DEPLOYMENT_ID, 'quote': quote, 'geoserver_url': settings.GEOSERVER_URL, 'map_bounds': settings.MAP_BOUNDS, 'map_args': settings.MAP_ARGS, 'show_contact_info': getattr(settings, 'SHOW_CONTACT_INFO', True) } if request.user.is_authenticated(): context['access'] = get_access(request) if has_valid_pagination_limit(settings): context['polls'] = Poll.objects.exclude( contacts=None, start_date=None).exclude(pk__in=[297, 296, 349, 350]).order_by( '-start_date')[:settings.PAGINATION_LIMIT] return context
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).filter(user__groups__in=request.user.groups.values_list('id')) list_of_poll_id = [] for pol in Poll.objects.all(): contacts = Contact.objects.filter(polls=pol.id,groups = request.user.groups.values_list('id')) if contacts.count() != 0: list_of_poll_id.append(pol.id) queryset = get_polls(request=request) if access: queryset = queryset.filter(user__groups__in=request.user.groups.values_list('id')) queryset = get_polls(request=request).filter(id__in=list_of_poll_id) 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 alerts(request): access = get_access(request) poll_form = NewPollForm() range_form = rangeForm() poll_form.updateTypes() assign_polls = Poll.objects.exclude(start_date=None).order_by('-pk')[0:5] district_form = DistrictForm(request.POST or None) if request.GET.get('reset_districts', None): request.session['districts'] = None request.session['groups'] = None if district_form.is_valid(): request.session['districts'] = [c.pk for c in district_form.cleaned_data['districts']] groupform = AssignResponseGroupForm(request=request, access=access) if request.method == 'POST' and request.POST.get('groups', None): g_form = AssignResponseGroupForm(request.POST, request=request) if g_form.is_valid(): request.session['groups'] = g_form.cleaned_data['groups'] template = 'ureport/polls/alerts.html' if request.session.get('districts'): message_list = \ Message.objects.filter(details__attribute__name='alert' ).filter(connection__contact__reporting_location__in=request.session.get('districts')) else: message_list = Message.objects.filter(details__attribute__name='alert') if request.session.get('groups', None): message_list = message_list.filter(connection__contact__groups__in=request.session.get('groups' )) if access: message_list = message_list.filter(connection__contact__groups__in=access.groups.all()) (capture_status, _) = \ Settings.objects.get_or_create(attribute='alerts') (rate, _) = MessageAttribute.objects.get_or_create(name='rating') # message_list=[Message.objects.latest('date')] # use more efficient count if request.GET.get('download', None) and access is None: range_form = rangeForm(request.POST) if range_form.is_valid(): start = range_form.cleaned_data['startdate'] end = range_form.cleaned_data['enddate'] from django.core.servers.basehttp import FileWrapper cols = ["replied", "rating", "direction", "district", "date", "message", "id", "forwarded"] data = AlertsExport.objects.filter(date__range=(start, end)).values_list(*cols).iterator() excel_file_path = \ os.path.join(os.path.join(os.path.join(UREPORT_ROOT, 'static'), 'spreadsheets'), 'alerts.xlsx') ExcelResponse(data, output_name=excel_file_path, write_to_file=True, headers=cols) response = HttpResponse(FileWrapper(open(excel_file_path)), content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') response['Content-Disposition'] = 'attachment; filename=alerts.xlsx' from django import db db.reset_queries() response['Cache-Control'] = 'no-cache' return response if request.GET.get('search', None): search = request.GET.get('search') if search[0] == '"' and search[-1] == '"': search = search[1:-1] message_list = message_list.filter(Q(text__iregex=".*\m(%s)\y.*" % search) | Q(connection__contact__reporting_location__name__iregex=".*\m(%s)\y.*" % search) | Q(connection__pk__iregex=".*\m(%s)\y.*" % search)) elif search[0] == "'" and search[-1] == "'": search = search[1:-1] message_list = message_list.filter(Q(text__iexact=search) | Q(connection__contact__reporting_location__name__iexact=search) | Q(connection__pk__iexact=search)) elif search == "=numerical value()": message_list = message_list.filter(text__iregex="(-?\d+(\.\d+)?)") else: message_list = message_list.filter(Q(text__icontains=search) | Q(connection__contact__reporting_location__name__icontains=search) | Q(connection__pk__icontains=search)) if request.GET.get('capture', None): (s, _) = Settings.objects.get_or_create(attribute='alerts') if s.value == 'true': s.value = 'false' s.save() reply = 'Start Capture' else: s.value = 'true' s.save() reply = 'Stop Capture' return HttpResponse(reply) if request.GET.get('ajax', None): date = datetime.datetime.now() - datetime.timedelta(seconds=30) prev = request.session.get('prev', []) msgs = Message.objects.filter(details__attribute__name='alert', direction='I' ).filter(date__gte=date).exclude(pk__in=prev) if access: msgs = msgs.filter(connection__contact__groups__in=access.groups.all()) request.session['prev'] = list(msgs.values_list('pk', flat=True)) msgs_list = [] if msgs: for msg in msgs: from django.template.loader import render_to_string can_view_number = request.user.has_perm('view_numbers') can_foward = request.user.has_perm('forward') row_rendered = \ render_to_string('ureport/partials/row.html', {'msg': msg, 'can_foward': can_foward, 'can_view_number': can_view_number, 'assign_polls': assign_polls}) m = {} m['text'] = msg.text m['date'] = str(msg.date.date()) if msg.connection.contact: m['name'] = msg.connection.contact.name else: m['name'] = 'Anonymous User' m['number'] = msg.connection.identity if msg.connection.contact \ and msg.connection.contact.reporting_location: m['district'] = \ msg.connection.contact.reporting_location.name else: m['district'] = 'N/A' rating = msg.details.filter(attribute__name='alerts') if rating: r = rating[0].value else: r = 0 m['row'] = row_rendered m['connection'] = msg.connection.pk m['pk'] = msg.pk msgs_list.append(m) return HttpResponse(mark_safe(simplejson.dumps(msgs_list))) else: return HttpResponse('success') if request.GET.get('rating', None): rating = request.GET.get('rating') descs = { '1': 'Requires Attention', '2': 'Moderate', '3': 'Important', '4': 'Urgent', '5': 'Very Urgent', } msg = Message.objects.get(pk=int(request.GET.get('msg'))) (rate, _) = MessageAttribute.objects.get_or_create(name='rating' ) det = MessageDetail.objects.create(message=msg, attribute=rate, value=rating, description=descs.get(rating, '')) response = \ """<li><a href='javascript:void(0)' class="rate%s" title="%s">%s</a></li>""" \ % (rating, descs.get(rating, ''), descs.get(rating, '')) return HttpResponse(mark_safe(response)) paginator = UreportPaginator(message_list.order_by('-date'), 10, body=12, padding=2) page = request.GET.get('page', 1) try: messages = paginator.page(page) except (PageNotAnInteger, EmptyPage): # If page is not an integer, deliver first page. messages = paginator.page(1) return render_to_response(template, { 'messages': messages, 'assign_polls': assign_polls, 'paginator': paginator, 'capture_status': capture_status, 'rate': rate, 'district_form': district_form, 'range_form': range_form, 'groupform': groupform, }, context_instance=RequestContext(request))
def a_dashboard(request, name): poll_form = NewPollForm() range_form = rangeForm() poll_form.updateTypes() template = 'ureport/aids_dashboard.html' (capture_status, _) = \ Settings.objects.get_or_create(attribute='aids') (rate, _) = MessageAttribute.objects.get_or_create(name='rating') name = name.replace("_", " ") flag = get_object_or_404(Flag, name=name) access = get_access(request) if access is not None and flag not in access.flags.all(): return render(request, '403.html', status=403) messages = flag.get_messages().order_by('-date') responses = Message.objects.filter( pk__in=flag.flagtracker_set.exclude(response=None).values_list("response", flat=True)) messages = messages | responses if request.GET.get('download', None): export_data = messages.values_list('connection__pk', 'text', 'connection__identity', 'connection__contact__reporting_location__name').iterator() return ExcelResponse(data=export_data) if request.GET.get('capture', None): (s, _) = Settings.objects.get_or_create(attribute='aids') if s.value == 'true': s.value = 'false' s.save() reply = gettext('Start Capture') else: s.value = 'true' s.save() reply = gettext('Stop Capture') return HttpResponse(reply) if request.GET.get('ajax', None): date = datetime.datetime.now() - datetime.timedelta(seconds=30) prev = request.session.get('prev', []) msgs = flag.get_messages().filter(date__gte=date).exclude(pk__in=prev) request.session['prev'] = list(msgs.values_list('pk', flat=True)) msgs_list = [] if msgs: for msg in msgs: from django.template.loader import render_to_string row_rendered = \ render_to_string('ureport/partials/row.html', {'msg': msg}) m = {} m['text'] = msg.text m['date'] = str(msg.date.date()) if msg.connection.contact: m['name'] = msg.connection.contact.name else: m['name'] = 'Anonymous User' m['number'] = msg.connection.identity if msg.connection.contact \ and msg.connection.contact.reporting_location: m['district'] = \ msg.connection.contact.reporting_location.name else: m['district'] = 'N/A' rating = msg.details.filter(attribute__name='aids') if rating: r = rating[0].value else: r = 0 m['row'] = row_rendered m['connection'] = msg.connection.pk m['pk'] = msg.pk msgs_list.append(m) return HttpResponse(mark_safe(simplejson.dumps(msgs_list))) else: return HttpResponse('success') if request.GET.get('rating', None): rating = request.GET.get('rating') descs = { '1': 'Requires Attention', '2': 'Moderate', '3': 'Important', '4': 'Urgent', '5': 'Very Urgent', } msg = Message.objects.get(pk=int(request.GET.get('msg'))) (rate, _) = MessageAttribute.objects.get_or_create(name='rating' ) det = MessageDetail.objects.create(message=msg, attribute=rate, value=rating, description=descs.get(rating, '')) response = \ """<li><a href='javascript:void(0)' class="rate%s" title="%s">%s</a></li>""" \ % (rating, descs.get(rating, ''), descs.get(rating, '')) return HttpResponse(mark_safe(response)) paginator = UreportPaginator(messages.order_by('-date'), 10, body=12, padding=2) page = request.GET.get('page', 1) try: messages = paginator.page(page) except (PageNotAnInteger, EmptyPage): # If page is not an integer, deliver first page. messages = paginator.page(1) return render_to_response(template, { 'name': name, 'messages': messages, 'paginator': paginator, 'capture_status': capture_status, 'rate': rate, 'range_form': range_form, }, context_instance=RequestContext(request))
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, )
def a_dashboard(request, name): poll_form = NewPollForm() range_form = rangeForm() poll_form.updateTypes() template = 'ureport/aids_dashboard.html' (capture_status, _) = \ Settings.objects.get_or_create(attribute='aids') (rate, _) = MessageAttribute.objects.get_or_create(name='rating') name = name.replace("_", " ") flag = get_object_or_404(Flag, name=name) access = get_access(request) if access is not None and flag not in access.flags.all(): return render(request, '403.html', status=403) flagged_messages = Message.objects.filter(flags__flag=flag)\ .select_related('connection__contact__reporting_location').order_by('-date') responses = Message.objects.filter( pk__in=flag.flagtracker_set.exclude(response=None).values_list("response", flat=True) ).select_related('connection__contact__reporting_location') messages = flagged_messages | responses if request.GET.get('download', None): message_details = MessageDetail.objects.filter(message__id__in=flagged_messages.values_list('id', flat=True))\ .order_by('message__id')\ .select_related('message', 'attribute', 'message__connection__contact__reporting_location') export_data, messages_with_details = _build_report(message_details) messages_without_details = flagged_messages.exclude(id__in=messages_with_details) export_data += _build_plain_message_export_data(messages_without_details) headers = ['message_id', 'Connection ID', 'Message', 'Date', 'District', 'Rating', 'Replied', "Forwarded"] return ExcelResponse(data=export_data, headers=headers) if request.GET.get('capture', None): (s, _) = Settings.objects.get_or_create(attribute='aids') if s.value == 'true': s.value = 'false' s.save() reply = gettext('Start Capture') else: s.value = 'true' s.save() reply = gettext('Stop Capture') return HttpResponse(reply) if request.GET.get('ajax', None): return HttpResponse('success') if request.GET.get('rating', None): rating = request.GET.get('rating') descs = { '1': 'Requires Attention', '2': 'Moderate', '3': 'Important', '4': 'Urgent', '5': 'Very Urgent', } msg = Message.objects.get(pk=int(request.GET.get('msg'))) (rate, _) = MessageAttribute.objects.get_or_create(name='rating' ) det = MessageDetail.objects.create(message=msg, attribute=rate, value=rating, description=descs.get(rating, '')) response = \ """<li><a href='javascript:void(0)' class="rate%s" title="%s">%s</a></li>""" \ % (rating, descs.get(rating, ''), descs.get(rating, '')) return HttpResponse(mark_safe(response)) paginator = UreportPaginator(messages.order_by('-date'), 10, body=12, padding=2) page = request.GET.get('page', 1) try: messages = paginator.page(page) except (PageNotAnInteger, EmptyPage): messages = paginator.page(1) return render_to_response(template, { 'name': name, 'messages': messages, 'paginator': paginator, 'capture_status': capture_status, 'rate': rate, 'range_form': range_form, }, context_instance=RequestContext(request))
def alerts(request, pk): access = get_access(request) poll_form = NewPollForm() range_form = rangeForm() poll_form.updateTypes() assign_polls = Poll.objects.exclude(start_date=None).order_by('-pk')[0:5] district_form = DistrictForm(request.POST or None) if request.GET.get('reset_districts', None): request.session['districts'] = None request.session['groups'] = None if district_form.is_valid(): request.session['districts'] = [c.pk for c in district_form.cleaned_data['districts']] groupform = AssignResponseGroupForm(request=request, access=access) if request.method == 'POST' and request.POST.get('groups', None): g_form = AssignResponseGroupForm(request.POST, request=request) if g_form.is_valid(): request.session['groups'] = g_form.cleaned_data['groups'] template = 'ureport/polls/alerts.html' if request.session.get('districts'): message_list = \ Message.objects.filter(details__attribute__name='alert', direction='I', ).filter(connection__contact__reporting_location__in=request.session.get('districts')) else: message_list = Message.objects.filter(details__attribute__name='alert', direction='I') if request.session.get('groups', None): message_list = message_list.filter(connection__contact__groups__in=request.session.get('groups' )) if access: if access.assigned_messages.exists(): message_list = access.assigned_messages.all() else: message_list = message_list.filter(connection__contact__groups__in=access.groups.all()) (capture_status, _) = \ Settings.objects.get_or_create(attribute='alerts') (rate, _) = MessageAttribute.objects.get_or_create(name='rating') # message_list=[Message.objects.latest('date')] # use more efficient count if request.GET.get('download', None): range_form = rangeForm(request.POST) if range_form.is_valid(): tasks.export_alerts_task.delay(range_form, access, request.get_host(), request.user.username) return HttpResponseRedirect(reverse('alerts', args=[request.user.pk])) if request.GET.get('search', None): search = request.GET.get('search') if search[0] == '"' and search[-1] == '"': search = search[1:-1] message_list = message_list.filter(Q(text__iregex=".*\m(%s)\y.*" % search) | Q(connection__contact__reporting_location__name__iregex=".*\m(%s)\y.*" % search) | Q(connection__pk__iregex=".*\m(%s)\y.*" % search)) elif search[0] == "'" and search[-1] == "'": search = search[1:-1] message_list = message_list.filter(Q(text__iexact=search) | Q(connection__contact__reporting_location__name__iexact=search) | Q(connection__pk__iexact=search)) elif search == "=numerical value()": message_list = message_list.filter(text__iregex="(-?\d+(\.\d+)?)") else: message_list = message_list.filter(Q(text__icontains=search) | Q(connection__contact__reporting_location__name__icontains=search) | Q(connection__pk__icontains=search)) if request.GET.get('capture', None): (s, _) = Settings.objects.get_or_create(attribute='alerts') if s.value == 'true': s.value = 'false' s.save() reply = gettext('Start Capture') else: s.value = 'true' s.save() reply = gettext('Stop Capture') return HttpResponse(reply) if request.GET.get('ajax', None): if request.GET.get('ajax') == 'get_replied': date = datetime.datetime.now() - datetime.timedelta(seconds=4 * 60 * 60 * 30) msgs = Message.objects.filter(details__attribute__name='replied', direction='I', date__gte=date).values( 'pk') return HttpResponse(simplejson.dumps(list(msgs)), content_type="application/json") date = datetime.datetime.now() - datetime.timedelta(seconds=30) prev = request.session.get('prev', []) msgs = Message.objects.filter(details__attribute__name='alert', direction='I' ).filter(date__gte=date).exclude(pk__in=prev) if access: msgs = msgs.filter(connection__contact__groups__in=access.groups.all()) request.session['prev'] = list(msgs.values_list('pk', flat=True)) msgs_list = [] if msgs: for msg in msgs: from django.template.loader import render_to_string can_view_number = request.user.has_perm('view_numbers') can_foward = request.user.has_perm('forward') row_rendered = \ render_to_string('ureport/partials/row.html', {'msg': msg, 'can_foward': can_foward, 'can_view_number': can_view_number, 'assign_polls': assign_polls}) m = {} m['text'] = msg.text m['date'] = str(msg.date.date()) if msg.connection.contact: m['name'] = msg.connection.contact.name else: m['name'] = 'Anonymous User' m['number'] = msg.connection.identity if msg.connection.contact \ and msg.connection.contact.reporting_location: m['district'] = \ msg.connection.contact.reporting_location.name else: m['district'] = 'N/A' rating = msg.details.filter(attribute__name='alerts') if rating: r = rating[0].value else: r = 0 m['row'] = row_rendered m['connection'] = msg.connection.pk m['pk'] = msg.pk msgs_list.append(m) return HttpResponse(mark_safe(simplejson.dumps(msgs_list))) else: return HttpResponse('success') if request.GET.get('rating', None): rating = request.GET.get('rating') descs = { '1': 'Requires Attention', '2': 'Moderate', '3': 'Important', '4': 'Urgent', '5': 'Very Urgent', } msg = Message.objects.get(pk=int(request.GET.get('msg'))) (rate, _) = MessageAttribute.objects.get_or_create(name='rating') MessageDetail.objects.create(message=msg, attribute=rate, value=rating, description=descs.get(rating, '')) response = \ """<li><a href='javascript:void(0)' class="rate%s" title="%s">%s</a></li>""" \ % (rating, descs.get(rating, ''), descs.get(rating, '')) return HttpResponse(mark_safe(response)) paginator = UreportPaginator(message_list.order_by('-date'), 10, body=12, padding=2) page = request.GET.get('page', 1) try: messages = paginator.page(page) except (PageNotAnInteger, EmptyPage): # If page is not an integer, deliver first page. messages = paginator.page(1) return render_to_response(template, { 'messages': messages, 'assign_polls': assign_polls, 'paginator': paginator, 'capture_status': capture_status, 'rate': rate, 'district_form': district_form, 'range_form': range_form, 'groupform': groupform, 'access': access, 'accesses': Access.objects.filter(user__username__startswith='GAPP'), }, context_instance=RequestContext(request))
def alerts(request): access = get_access(request) poll_form = NewPollForm() range_form = rangeForm() poll_form.updateTypes() assign_polls = Poll.objects.exclude(start_date=None).order_by('-pk')[0:5] district_form = DistrictForm(request.POST or None) if request.GET.get('reset_districts', None): request.session['districts'] = None request.session['groups'] = None if district_form.is_valid(): request.session['districts'] = [ c.pk for c in district_form.cleaned_data['districts'] ] groupform = AssignResponseGroupForm(request=request, access=access) if request.method == 'POST' and request.POST.get('groups', None): g_form = AssignResponseGroupForm(request.POST, request=request) if g_form.is_valid(): request.session['groups'] = g_form.cleaned_data['groups'] template = 'ureport/polls/alerts.html' if request.session.get('districts'): message_list = \ Message.objects.filter(details__attribute__name='alert' ).filter(connection__contact__reporting_location__in=request.session.get('districts')) else: message_list = Message.objects.filter(details__attribute__name='alert') if request.session.get('groups', None): message_list = message_list.filter( connection__contact__groups__in=request.session.get('groups')) if access: message_list = message_list.filter( connection__contact__groups__in=access.groups.all()) (capture_status, _) = \ Settings.objects.get_or_create(attribute='alerts') (rate, _) = MessageAttribute.objects.get_or_create(name='rating') # message_list=[Message.objects.latest('date')] # use more efficient count if request.GET.get('download', None) and access is None: range_form = rangeForm(request.POST) if range_form.is_valid(): start = range_form.cleaned_data['startdate'] end = range_form.cleaned_data['enddate'] from django.core.servers.basehttp import FileWrapper cols = [ "replied", "rating", "direction", "district", "date", "message", "id", "forwarded" ] data = AlertsExport.objects.filter( date__range=(start, end)).values_list(*cols).iterator() excel_file_path = \ os.path.join(os.path.join(os.path.join(UREPORT_ROOT, 'static'), 'spreadsheets'), 'alerts.xlsx') ExcelResponse(data, output_name=excel_file_path, write_to_file=True, headers=cols) response = HttpResponse( FileWrapper(open(excel_file_path)), content_type= 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) response[ 'Content-Disposition'] = 'attachment; filename=alerts.xlsx' from django import db db.reset_queries() response['Cache-Control'] = 'no-cache' return response if request.GET.get('search', None): search = request.GET.get('search') if search[0] == '"' and search[-1] == '"': search = search[1:-1] message_list = message_list.filter( Q(text__iregex=".*\m(%s)\y.*" % search) | Q(connection__contact__reporting_location__name__iregex= ".*\m(%s)\y.*" % search) | Q(connection__pk__iregex=".*\m(%s)\y.*" % search)) elif search[0] == "'" and search[-1] == "'": search = search[1:-1] message_list = message_list.filter( Q(text__iexact=search) | Q(connection__contact__reporting_location__name__iexact=search) | Q(connection__pk__iexact=search)) elif search == "=numerical value()": message_list = message_list.filter(text__iregex="(-?\d+(\.\d+)?)") else: message_list = message_list.filter( Q(text__icontains=search) | Q(connection__contact__reporting_location__name__icontains= search) | Q(connection__pk__icontains=search)) if request.GET.get('capture', None): (s, _) = Settings.objects.get_or_create(attribute='alerts') if s.value == 'true': s.value = 'false' s.save() reply = 'Start Capture' else: s.value = 'true' s.save() reply = 'Stop Capture' return HttpResponse(reply) if request.GET.get('ajax', None): date = datetime.datetime.now() - datetime.timedelta(seconds=30) prev = request.session.get('prev', []) msgs = Message.objects.filter( details__attribute__name='alert', direction='I').filter(date__gte=date).exclude(pk__in=prev) if access: msgs = msgs.filter( connection__contact__groups__in=access.groups.all()) request.session['prev'] = list(msgs.values_list('pk', flat=True)) msgs_list = [] if msgs: for msg in msgs: from django.template.loader import render_to_string can_view_number = request.user.has_perm('view_numbers') can_foward = request.user.has_perm('forward') row_rendered = \ render_to_string('ureport/partials/row.html', {'msg': msg, 'can_foward': can_foward, 'can_view_number': can_view_number, 'assign_polls': assign_polls}) m = {} m['text'] = msg.text m['date'] = str(msg.date.date()) if msg.connection.contact: m['name'] = msg.connection.contact.name else: m['name'] = 'Anonymous User' m['number'] = msg.connection.identity if msg.connection.contact \ and msg.connection.contact.reporting_location: m['district'] = \ msg.connection.contact.reporting_location.name else: m['district'] = 'N/A' rating = msg.details.filter(attribute__name='alerts') if rating: r = rating[0].value else: r = 0 m['row'] = row_rendered m['connection'] = msg.connection.pk m['pk'] = msg.pk msgs_list.append(m) return HttpResponse(mark_safe(simplejson.dumps(msgs_list))) else: return HttpResponse('success') if request.GET.get('rating', None): rating = request.GET.get('rating') descs = { '1': 'Requires Attention', '2': 'Moderate', '3': 'Important', '4': 'Urgent', '5': 'Very Urgent', } msg = Message.objects.get(pk=int(request.GET.get('msg'))) (rate, _) = MessageAttribute.objects.get_or_create(name='rating') det = MessageDetail.objects.create(message=msg, attribute=rate, value=rating, description=descs.get(rating, '')) response = \ """<li><a href='javascript:void(0)' class="rate%s" title="%s">%s</a></li>""" \ % (rating, descs.get(rating, ''), descs.get(rating, '')) return HttpResponse(mark_safe(response)) paginator = UreportPaginator(message_list.order_by('-date'), 10, body=12, padding=2) page = request.GET.get('page', 1) try: messages = paginator.page(page) except (PageNotAnInteger, EmptyPage): # If page is not an integer, deliver first page. messages = paginator.page(1) return render_to_response(template, { 'messages': messages, 'assign_polls': assign_polls, 'paginator': paginator, 'capture_status': capture_status, 'rate': rate, 'district_form': district_form, 'range_form': range_form, 'groupform': groupform, }, context_instance=RequestContext(request))
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 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, )
def a_dashboard(request, name): poll_form = NewPollForm() range_form = rangeForm() poll_form.updateTypes() template = 'ureport/aids_dashboard.html' (capture_status, _) = \ Settings.objects.get_or_create(attribute='aids') (rate, _) = MessageAttribute.objects.get_or_create(name='rating') name = name.replace("_", " ") flag = get_object_or_404(Flag, name=name) access = get_access(request) if access is not None and flag not in access.flags.all(): return render(request, '403.html', status=403) flagged_messages = Message.objects.filter(flags__flag=flag) \ .select_related('connection__contact__reporting_location').order_by('-date') responses = Message.objects.filter( pk__in=flag.flagtracker_set.exclude(response=None).values_list("response", flat=True) ).select_related('connection__contact__reporting_location') messages = flagged_messages | responses if request.GET.get('download', None): message_details = MessageDetail.objects.filter(message__id__in=flagged_messages.values_list('id', flat=True)) \ .order_by('message__id') \ .select_related('message', 'attribute', 'message__connection__contact__reporting_location') export_data, messages_with_details = _build_report(message_details) messages_without_details = flagged_messages.exclude(id__in=messages_with_details) export_data += _build_plain_message_export_data(messages_without_details) headers = ['message_id', 'Connection ID', 'Message', 'Date', 'District', 'Rating', 'Replied', "Forwarded"] return ExcelResponse(data=export_data, headers=headers) if request.GET.get('capture', None): (s, _) = Settings.objects.get_or_create(attribute='aids') if s.value == 'true': s.value = 'false' s.save() reply = gettext('Start Capture') else: s.value = 'true' s.save() reply = gettext('Stop Capture') return HttpResponse(reply) if request.GET.get('ajax', None): return HttpResponse('success') if request.GET.get('rating', None): rating = request.GET.get('rating') descs = { '1': 'Requires Attention', '2': 'Moderate', '3': 'Important', '4': 'Urgent', '5': 'Very Urgent', } msg = Message.objects.get(pk=int(request.GET.get('msg'))) (rate, _) = MessageAttribute.objects.get_or_create(name='rating' ) det = MessageDetail.objects.create(message=msg, attribute=rate, value=rating, description=descs.get(rating, '')) response = \ """<li><a href='javascript:void(0)' class="rate%s" title="%s">%s</a></li>""" \ % (rating, descs.get(rating, ''), descs.get(rating, '')) return HttpResponse(mark_safe(response)) paginator = UreportPaginator(messages.order_by('-date'), 10, body=12, padding=2) page = request.GET.get('page', 1) try: messages = paginator.page(page) except (PageNotAnInteger, EmptyPage): messages = paginator.page(1) return render_to_response(template, { 'name': name, 'messages': messages, 'paginator': paginator, 'capture_status': capture_status, 'rate': rate, 'range_form': range_form, }, context_instance=RequestContext(request))
def alerts(request, pk): access = get_access(request) poll_form = NewPollForm() range_form = rangeForm() poll_form.updateTypes() assign_polls = Poll.objects.exclude(start_date=None).order_by('-pk')[0:5] district_form = DistrictForm(request.POST or None) if request.GET.get('reset_districts', None): request.session['districts'] = None request.session['groups'] = None if district_form.is_valid(): request.session['districts'] = [c.pk for c in district_form.cleaned_data['districts']] groupform = AssignResponseGroupForm(request=request, access=access) if request.method == 'POST' and request.POST.get('groups', None): g_form = AssignResponseGroupForm(request.POST, request=request) if g_form.is_valid(): request.session['groups'] = g_form.cleaned_data['groups'] template = 'ureport/polls/alerts.html' if request.session.get('districts'): message_list = \ Message.objects.filter(details__attribute__name='alert', direction='I', ).filter( connection__contact__reporting_location__in=request.session.get('districts')) else: message_list = Message.objects.filter(details__attribute__name='alert', direction='I') if request.session.get('groups', None): message_list = message_list.filter(connection__contact__groups__in=request.session.get('groups' )) if access: if access.assigned_messages.exists(): message_list = access.assigned_messages.all() else: message_list = message_list.filter(connection__contact__groups__in=access.groups.all()) (capture_status, _) = \ Settings.objects.get_or_create(attribute='alerts') (rate, _) = MessageAttribute.objects.get_or_create(name='rating') # message_list=[Message.objects.latest('date')] # use more efficient count if request.GET.get('download', None): range_form = rangeForm(request.POST) if range_form.is_valid(): tasks.export_alerts_task.delay(range_form, access, request.get_host(), request.user.username) return HttpResponseRedirect(reverse('alerts', args=[request.user.pk])) if request.GET.get('search', None): search = request.GET.get('search') if search[0] == '"' and search[-1] == '"': search = search[1:-1] message_list = message_list.filter(Q(text__iregex=".*\m(%s)\y.*" % search) | Q(connection__contact__reporting_location__name__iregex=".*\m(%s)\y.*" % search) | Q(connection__pk__iregex=".*\m(%s)\y.*" % search)) elif search[0] == "'" and search[-1] == "'": search = search[1:-1] message_list = message_list.filter(Q(text__iexact=search) | Q(connection__contact__reporting_location__name__iexact=search) | Q(connection__pk__iexact=search)) elif search == "=numerical value()": message_list = message_list.filter(text__iregex="(-?\d+(\.\d+)?)") else: message_list = message_list.filter(Q(text__icontains=search) | Q(connection__contact__reporting_location__name__icontains=search) | Q(connection__pk__icontains=search)) if request.GET.get('capture', None): (s, _) = Settings.objects.get_or_create(attribute='alerts') if s.value == 'true': s.value = 'false' s.save() reply = gettext('Start Capture') else: s.value = 'true' s.save() reply = gettext('Stop Capture') return HttpResponse(reply) if request.GET.get('ajax', None): if request.GET.get('ajax') == 'get_replied': date = datetime.datetime.now() - datetime.timedelta(seconds=4 * 60 * 60 * 30) msgs = Message.objects.filter(details__attribute__name='replied', direction='I', date__gte=date).values( 'pk') return HttpResponse(simplejson.dumps(list(msgs)), content_type="application/json") date = datetime.datetime.now() - datetime.timedelta(seconds=30) prev = request.session.get('prev', []) msgs = Message.objects.filter(details__attribute__name='alert', direction='I' ).filter(date__gte=date).exclude(pk__in=prev) if access: msgs = msgs.filter(connection__contact__groups__in=access.groups.all()) request.session['prev'] = list(msgs.values_list('pk', flat=True)) msgs_list = [] if msgs: for msg in msgs: from django.template.loader import render_to_string can_view_number = request.user.has_perm('view_numbers') can_foward = request.user.has_perm('forward') row_rendered = \ render_to_string('ureport/partials/row.html', {'msg': msg, 'can_foward': can_foward, 'can_view_number': can_view_number, 'assign_polls': assign_polls}) m = {} m['text'] = msg.text m['date'] = str(msg.date.date()) if msg.connection.contact: m['name'] = msg.connection.contact.name else: m['name'] = 'Anonymous User' m['number'] = msg.connection.identity if msg.connection.contact \ and msg.connection.contact.reporting_location: m['district'] = \ msg.connection.contact.reporting_location.name else: m['district'] = 'N/A' rating = msg.details.filter(attribute__name='alerts') if rating: r = rating[0].value else: r = 0 m['row'] = row_rendered m['connection'] = msg.connection.pk m['pk'] = msg.pk msgs_list.append(m) return HttpResponse(mark_safe(simplejson.dumps(msgs_list))) else: return HttpResponse('success') if request.GET.get('rating', None): rating = request.GET.get('rating') descs = { '1': 'Requires Attention', '2': 'Moderate', '3': 'Important', '4': 'Urgent', '5': 'Very Urgent', } msg = Message.objects.get(pk=int(request.GET.get('msg'))) (rate, _) = MessageAttribute.objects.get_or_create(name='rating') MessageDetail.objects.create(message=msg, attribute=rate, value=rating, description=descs.get(rating, '')) response = \ """<li><a href='javascript:void(0)' class="rate%s" title="%s">%s</a></li>""" \ % (rating, descs.get(rating, ''), descs.get(rating, '')) return HttpResponse(mark_safe(response)) paginator = UreportPaginator(message_list.order_by('-date'), 10, body=12, padding=2) page = request.GET.get('page', 1) try: messages = paginator.page(page) except (PageNotAnInteger, EmptyPage): # If page is not an integer, deliver first page. messages = paginator.page(1) return render_to_response(template, { 'messages': messages, 'assign_polls': assign_polls, 'paginator': paginator, 'capture_status': capture_status, 'rate': rate, 'district_form': district_form, 'range_form': range_form, 'groupform': groupform, 'access': access, 'accesses': Access.objects.filter(user__username__startswith='GAPP'), }, context_instance=RequestContext(request))