def post(self, request, poll_id, keypad_id): keypad = super(VoteCallback, self).post(request, poll_id, keypad_id) if keypad is None: return HttpResponse(_('Vote rejected')) # Validate vote value. value = request.POST.get('value') if value not in ('Y', 'N', 'A'): return HttpResponse(_('Vote invalid')) # Save vote. vc = VoteCollector.objects.get(id=1) model = MotionPoll if vc.voting_mode == 'MotionPoll' else AssignmentPoll try: poll = model.objects.get(id=poll_id) except model.DoesNotExist: return HttpResponse(_('Vote rejected')) if vc.voting_mode == 'MotionPoll': is_valid_keypad = 1 if Ballot: ballot = Ballot(poll) is_valid_keypad = ballot.register_vote(keypad_id, value) > 0 if is_valid_keypad: try: conn = MotionPollKeypadConnection.objects.get( poll=poll, keypad=keypad) except MotionPollKeypadConnection.DoesNotExist: conn = MotionPollKeypadConnection() conn.poll = poll conn.keypad = keypad conn.serial_number = request.POST.get('sn') conn.value = value conn.save() else: return HttpResponse(_('Vote rejected')) else: try: conn = AssignmentPollKeypadConnection.objects.get( poll=poll, keypad=keypad) except AssignmentPollKeypadConnection.DoesNotExist: conn = AssignmentPollKeypadConnection() conn.poll = poll conn.keypad = keypad conn.serial_number = request.POST.get('sn') conn.value = value conn.save() # Update votecollector. vc.votes_received = request.POST.get('votes', 0) vc.voting_duration = request.POST.get('elapsed', 0) vc.save() return HttpResponse(_('Vote submitted'))
def post(self, request, poll_id, keypad_id): keypad = super(VoteCallback, self).post(request, poll_id, keypad_id) if keypad is None: return HttpResponse(_('Vote rejected')) # Validate vote value. value = request.POST.get('value') if value not in ('Y', 'N', 'A'): return HttpResponse(_('Vote invalid')) # Save vote. vc = VoteCollector.objects.get(id=1) model = MotionPoll if vc.voting_mode == 'MotionPoll' else AssignmentPoll try: poll = model.objects.get(id=poll_id) except model.DoesNotExist: return HttpResponse(_('Vote rejected')) if vc.voting_mode == 'MotionPoll': is_valid_keypad = 1 if Ballot: ballot = Ballot(poll) is_valid_keypad = ballot.register_vote(keypad_id, value) > 0 if is_valid_keypad: try: conn = MotionPollKeypadConnection.objects.get(poll=poll, keypad=keypad) except MotionPollKeypadConnection.DoesNotExist: conn = MotionPollKeypadConnection() conn.poll = poll conn.keypad = keypad conn.serial_number = request.POST.get('sn') conn.value = value conn.save() else: return HttpResponse(_('Vote rejected')) else: try: conn = AssignmentPollKeypadConnection.objects.get(poll=poll, keypad=keypad) except AssignmentPollKeypadConnection.DoesNotExist: conn = AssignmentPollKeypadConnection() conn.poll = poll conn.keypad = keypad conn.serial_number = request.POST.get('sn') conn.value = value conn.save() # Update votecollector. vc.votes_received = request.POST.get('votes', 0) vc.voting_duration = request.POST.get('elapsed', 0) vc.save() return HttpResponse(_('Vote submitted'))
def post(self, request, poll_id): # Get poll instance. vc = VoteCollector.objects.get(id=1) if vc.voting_mode == 'MotionPoll': poll_model = MotionPoll conn_model = MotionPollKeypadConnection else: poll_model = AssignmentPoll conn_model = AssignmentPollKeypadConnection try: poll = poll_model.objects.get(id=poll_id) except poll_model.DoesNotExist: return HttpResponse('') # Get ballot instance. ballot = Ballot(poll) if Ballot else None # Load json list from request body. votes = json.loads(request.body.decode('utf-8')) keypad_set = set() connections = [] for vote in votes: keypad_id = vote['id'] try: keypad = Keypad.objects.get(keypad_id=keypad_id) except Keypad.DoesNotExist: continue # Mark keypad as in range and update battery level. keypad.in_range = True keypad.battery_level = vote['bl'] keypad.save(skip_autoupdate=True) # Validate vote value. value = vote['value'] if value not in ('Y', 'N', 'A'): continue # Write ballot and poll keypad connection. is_valid_keypad = True if ballot and vc.voting_mode == 'MotionPoll': # TODO: Ballot currently only implemented for MotionPoll. is_valid_keypad = ballot.register_vote(keypad_id, value, commit=False) > 0 if is_valid_keypad: try: conn = conn_model.objects.get(poll=poll, keypad=keypad) except conn_model.DoesNotExist: conn = conn_model(poll=poll, keypad=keypad) conn.serial_number = vote['sn'] conn.value = value if conn.pk: # Save updated connection. conn.save(skip_autoupdate=True) else: # Add new connection to bulk create list. connections.append(conn) keypad_set.add(keypad.id) # Bulk create ballots and connections. if ballot: ballot.save_ballots() conn_model.objects.bulk_create(connections) # Trigger auto update. connections = conn_model.objects.filter(poll=poll, keypad_id__in=keypad_set) inform_changed_data(connections) return HttpResponse()
def post(self, request, poll_id): # Get poll instance. vc = VoteCollector.objects.get(id=1) if vc.voting_mode == 'MotionPoll': poll_model = MotionPoll conn_model = MotionPollKeypadConnection else: poll_model = AssignmentPoll conn_model = AssignmentPollKeypadConnection try: poll = poll_model.objects.get(id=poll_id) except poll_model.DoesNotExist: return HttpResponse('') # Get ballot instance. ballot = Ballot(poll) if Ballot else None # Load json list from request body. votes = json.loads(request.body.decode('utf-8')) keypad_set = set() connections = [] for vote in votes: keypad_id = vote['id'] try: keypad = Keypad.objects.get(keypad_id=keypad_id) except Keypad.DoesNotExist: continue # Mark keypad as in range and update battery level. keypad.in_range = True keypad.battery_level = vote['bl'] keypad.save(skip_autoupdate=True) # Validate vote value. value = vote['value'] if value not in ('Y', 'N', 'A'): continue # Write ballot and poll keypad connection. is_valid_keypad = True if ballot and vc.voting_mode == 'MotionPoll': # TODO: Ballot currently only implemented for MotionPoll. is_valid_keypad = ballot.register_vote( keypad_id, value, commit=False) > 0 if is_valid_keypad: try: conn = conn_model.objects.get(poll=poll, keypad=keypad) except conn_model.DoesNotExist: conn = conn_model(poll=poll, keypad=keypad) conn.serial_number = vote['sn'] conn.value = value if conn.pk: # Save updated connection. conn.save(skip_autoupdate=True) else: # Add new connection to bulk create list. connections.append(conn) keypad_set.add(keypad.id) # Bulk create ballots and connections. if ballot: ballot.save_ballots() conn_model.objects.bulk_create(connections) # Trigger auto update. connections = conn_model.objects.filter(poll=poll, keypad_id__in=keypad_set) inform_changed_data(connections) return HttpResponse()