diff options
| author | etienne <etienne@07715635-78ed-41b0-aaf1-0afda6c37f35> | 2008-12-07 19:06:22 +0000 | 
|---|---|---|
| committer | etienne <etienne@07715635-78ed-41b0-aaf1-0afda6c37f35> | 2008-12-07 19:06:22 +0000 | 
| commit | a837805ddb218af008f06adb57439949ae32582f (patch) | |
| tree | 9f58533cf4c63b45b96e58f95f273dc70fb49a9b /polls/views.py | |
| parent | 8c5c770d99f2d59ffe487ed0fdbe6a06139f3f49 (diff) | |
| download | Papillon-a837805ddb218af008f06adb57439949ae32582f.tar.bz2 Papillon-a837805ddb218af008f06adb57439949ae32582f.zip | |
Modifying limits - Reordering of choices
Diffstat (limited to 'polls/views.py')
| -rw-r--r-- | polls/views.py | 82 | 
1 files changed, 68 insertions, 14 deletions
| diff --git a/polls/views.py b/polls/views.py index e969a74..ad7e94f 100644 --- a/polls/views.py +++ b/polls/views.py @@ -117,7 +117,8 @@ def createOrEdit(request, admin_url):          admin_url = 'a' + genRandomURL()          category = None          if 'poll_category' in request.POST and request.POST['poll_category']: -            category = Category.objects.get(id=int(request.POST['poll_category'])) +            category = \ +                     Category.objects.get(id=int(request.POST['poll_category']))          public = False          if 'poll_public' in request.POST and request.POST['poll_public']:              value = False @@ -195,6 +196,23 @@ public=public)              choice = Choice(poll=poll, name=request.POST['new_choice'],                              order=order, limit=limit)              choice.save() +        # check if the order of a choice has to be changed +        for key in request.GET: +            try: +                if 'up_choice' in key: +                    choice = Choice.objects.get(id=int(request.GET[key])) +                    choice.changeOrder(-1) +                    # redirect in order to avoid a change with a refresh +                    url = response_dct['admin_url'] +                    return response_dct, HttpResponseRedirect(url) +                if 'down_choice' in key: +                    choice = Choice.objects.get(id=int(request.GET[key])) +                    choice.changeOrder(1) +                    # redirect in order to avoid a change with a refresh +                    url = response_dct['admin_url'] +                    return response_dct, HttpResponseRedirect(url) +            except (ValueError, Choice.DoesNotExist): +                pass          # check if a choice has been choosen for deletion or for modification          for key in request.POST:              if key.startswith('delete_') and request.POST[key]: @@ -209,6 +227,31 @@ public=public)                  except Choice.DoesNotExist:                      # throw when want to modify a deleted choice                      pass + +            if key.startswith('limit_'): +                #request.POST[key]: +                try: +                    choice = Choice.objects.get(id=int(key[len('limit_'):])) +                    if not request.POST[key]: +                        choice.limit = None +                        choice.save() +                    else: +                        try: +                            new_limit = int(request.POST[key]) +                            sum = choice.getSum() +                            if new_limit < sum: +                                response_dct['error'] = _("You cannot lower %s\ +'s limit to this number : there is currently %d votes for this choice.") % ( +                                                               choice.name, sum) +                            else: +                                choice.limit = new_limit +                                choice.save() +                        except ValueError: +                            response_dct['error'] = _("Non-numeric value for \ +limit") +                except Choice.DoesNotExist: +                    # throw when want to modify a deleted choice +                    pass          return response_dct, None      response_dct, redirect = getBaseResponse(request) @@ -422,21 +465,21 @@ def poll(request, poll_url):      # get voters and sum for each choice for this poll      voters = Voter.objects.filter(poll=poll) -    for choice in choices: -        choice.sum = 0 -    max = -100 -    max_ids = [] +    #for choice in choices: +    #    choice.sum = 0 +    #max = -100 +    #max_ids = []      choice_ids = [choice.id for choice in choices]      for voter in voters:          # highlight a voter          if time.mktime(voter.modification_date.timetuple()) \                                                           == highlight_vote_date:              voter.highlight = True -        query = Vote.objects.filter(voter=voter) -        query = query.extra(where=['choice_id IN (%s)' \ -                            % ",".join([str(choice.id) for choice in choices])]) -        voter.votes = list(query.order_by('choice')) -        for vote in voter.votes: +        #query = Vote.objects.filter(voter=voter) +        #query = query.extra(where=['choice_id IN (%s)' \ +        #                    % ",".join([str(choice.id) for choice in choices])]) +        voter.votes = voter.getVotes(choice_ids) +        """for vote in voter.votes:              if vote.choice.id in choice_ids:                  if vote.value:                      c_id = choice_ids.index(vote.choice.id) @@ -447,9 +490,10 @@ def poll(request, poll_url):                      elif choices[c_id].sum == max:                          max_ids.append(c_id)              else: +            if vote.choice.id not in choice_ids:                  # the choice is probably not available anymore                  voter.votes.remove(vote) -                vote.delete() +                vote.delete()"""          # initialize undefined vote          choice_vote_ids = [vote.choice.id for vote in voter.votes]          for choice in choices: @@ -458,14 +502,24 @@ def poll(request, poll_url):                  vote.save()                  idx = choices.index(choice)                  voter.votes.insert(idx, vote) -        for max_id in max_ids: -            choices[max_id].highlight = True +        #for max_id in max_ids: +        #    choices[max_id].highlight = True +    sums = [choice.getSum() for choice in choices] +    vote_max = max(sums) +    c_idx = 0 +    while c_idx < len(choices): +        try: +            c_idx = sums.index(vote_max, c_idx) +            choices[c_idx].highlight = True +            c_idx += 1 +        except ValueError: +            c_idx = len(choices)      # set non-available choices if the limit is reached for a choice      response_dct['limit_set'] = None      for choice in choices:          if choice.limit:             response_dct['limit_set'] = True -        if choice.limit and choice.sum >= choice.limit: +        if choice.limit and sums[choices.index(choice)] >= choice.limit:              choice.available = False          else:              choice.available = True | 
