def answer_create_single(request, campaign_slug=None, indicator_id=None): """POST response to a single indicator @param indicator_id: Id of the Indicator who's question we are answering. If not given in the url, we look in GET and POST. @return: For AJAX call HttpResponse OK if success, ERROR plus some detail if failure. For an HTTP call, redirect to next indicator """ if not indicator_id: try: indicator_id = request.REQUEST['indicator_id'] except KeyError: return HttpResponse('ERROR - Missing indicator_id', mimetype='text/plain') indicator = Indicator.objects.get(pk = indicator_id).subclass() geuser = request.user.get_profile() if request.method == 'POST': form = indicator_form(request.POST, indicator=indicator, user=geuser) if not form.is_valid(): return HttpResponse( 'ERROR - Invalid form - {err}'.format(err=unicode(form.errors)), mimetype='text/plain') form.save() if request.is_ajax(): return HttpResponse('OK') return redirect_to_indicator(request, campaign_slug=campaign_slug)
def dashboard(request, campaign_slug, indicator_id): "Home page" response_map = {} try: geuser = request.user.get_profile() except Profile.DoesNotExist: return reverse('registration_logout', kwargs={'campaign_slug': campaign_slug}) campaign = get_current_campaign() campaign.add_user(geuser) if campaign.get_end_date(geuser) < datetime.date.today(): url = reverse('results', kwargs={'campaign_slug': campaign.slug}) return HttpResponseRedirect(url) indicator_list = Indicator.objects.all_regular_indicators(campaign) response_map['indicator_list'] = indicator_list response_map['one_week_ago'] = datetime.datetime.now() - datetime.timedelta(7) indicator = None try: next_indicator = Indicator.objects.next(geuser, campaign) response_map['last_answered'] = next_indicator except Indicator.DoesNotExist: next_indicator = None response_map['is_done'] = True if indicator_id: try: indicator = Indicator.objects.get_cached(campaign, long(indicator_id)) except Indicator.DoesNotExist: return HttpResponseRedirect('/') else: if next_indicator: indicator = next_indicator else : url = reverse('results', kwargs={'campaign_slug': campaign.slug}) return HttpResponseRedirect(url) yesterday = geuser.local_datetime().date() - datetime.timedelta(1) try: response_map['current_answer'] = \ Answer.objects.get( user = geuser, indicator_id = indicator.id, action_date = yesterday ) except Answer.DoesNotExist: pass try: previous = Answer.objects.\ filter( user = geuser, indicator_id = indicator.id, action_date__lt = yesterday).\ order_by('-action_date')[0] except (Answer.DoesNotExist, IndexError): previous = None response_map['next'] = indicator_form(indicator=indicator, user=geuser, previous=previous) if not indicator.image: # If no image we display a bar graph indicator_view = indicator.view(geuser, Indicator.objects.average_user()) encoder = JSONEncoder(default = json_encoder_default) response_map['indicator_json'] = encoder.encode(indicator_view) response_map['recent_activity_list'] = EntryView.recent_activity(campaign) popular_actions = ActionView.popular(campaign, geuser) response_map['popular_actions'] = popular_actions all_actions = list(popular_actions) random.shuffle(all_actions) response_map['all_actions'] = all_actions response_map['status_dashboard'] = _status_dashboard(request, response_map, campaign, geuser) response_map['action_dashboard'] = _action_dashboard(request, response_map, campaign, geuser) return render_to_response( 'dashboard.html', response_map, context_instance=RequestContext(request))