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'))
Example #2
0
    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'))
Example #3
0
    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()