示例#1
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)

            possible_states = [
                FormState.CORRECTION, FormState.DATA_ENTRY_1,
                FormState.DATA_ENTRY_2, FormState.INTAKE,
                FormState.QUALITY_CONTROL, FormState.ARCHIVING,
                FormState.UNSUBMITTED
            ]

            if groups.SUPER_ADMINISTRATOR in groups.user_groups(
                    self.request.user):
                possible_states.append(FormState.ARCHIVED)

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            self.template_name = 'check_clearance_center_details.html'
            form_action = reverse(self.success_url)
            return self.render_to_response(
                self.get_context_data(result_form=result_form,
                                      header_text=_('Create Clearance'),
                                      form_action=form_action))
        else:
            return self.form_invalid(form)
示例#2
0
    def post(self, *args, **kwargs):
        tally_id = kwargs.get('tally_id')
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode'] or\
                        form.cleaned_data['barcode_scan']
            result_form = get_object_or_404(ResultForm,
                                            barcode=barcode,
                                            tally__id=tally_id)

            possible_states = [
                FormState.CORRECTION, FormState.DATA_ENTRY_1,
                FormState.DATA_ENTRY_2, FormState.INTAKE,
                FormState.QUALITY_CONTROL, FormState.ARCHIVING,
                FormState.UNSUBMITTED
            ]

            if groups.SUPER_ADMINISTRATOR in groups.user_groups(
                    self.request.user):
                possible_states.append(FormState.ARCHIVED)

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk

            return redirect(self.success_url, tally_id=tally_id)
        else:
            return self.form_invalid(form)
示例#3
0
    def post(self, *args, **kwargs):
        tally_id = kwargs.get('tally_id')
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode, tally__id=tally_id)

            possible_states = [FormState.CORRECTION,
                               FormState.DATA_ENTRY_1,
                               FormState.DATA_ENTRY_2,
                               FormState.INTAKE,
                               FormState.QUALITY_CONTROL,
                               FormState.ARCHIVING,
                               FormState.UNSUBMITTED]

            if groups.SUPER_ADMINISTRATOR in groups.user_groups(
                    self.request.user):
                possible_states.append(FormState.ARCHIVED)

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk

            return redirect(self.success_url, tally_id=tally_id)
        else:
            return self.form_invalid(form)
示例#4
0
    def post(self, *args, **kwargs):
        post_data = self.request.POST
        form_class = self.get_form_class()
        center_form = self.get_form(form_class)

        pk = session_matches_post_result_form(post_data, self.request)
        result_form = get_object_or_404(ResultForm, pk=pk)
        form = safe_form_in_state(result_form, FormState.INTAKE, center_form)

        if form:
            return self.form_invalid(form)

        if center_form.is_valid():
            center_number = center_form.cleaned_data.get('center_number')
            station_number = center_form.cleaned_data.get('station_number')
            center = Center.objects.get(code=center_number)

            if result_form.intaken(center, station_number):
                # a form already exists, send to clearance
                self.request.session['intake-error'] = INTAKEN_MESSAGE
                result_form.send_to_clearance()
                return redirect('intake-clearance')
            else:
                result_form.center = center
                result_form.station_number = station_number
                result_form.save()

            return redirect(self.success_url)
        else:
            return self.render_to_response(
                self.get_context_data(form=center_form,
                                      header_text=_('Intake'),
                                      result_form=result_form))
示例#5
0
    def post(self, *args, **kwargs):
        tally_id = kwargs.get('tally_id')
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode'] or\
                        form.cleaned_data['barcode_scan']
            result_form = get_object_or_404(ResultForm,
                                            barcode=barcode,
                                            tally__id=tally_id)
            form = safe_form_in_state(result_form, [FormState.QUALITY_CONTROL,
                                                    FormState.ARCHIVING],
                                      form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk
            QualityControl.objects.create(result_form=result_form,
                                          user=self.request.user.userprofile)

            return redirect(self.success_url, tally_id=tally_id)
        else:
            return self.form_invalid(form)
示例#6
0
    def post(self, *args, **kwargs):
        tally_id = kwargs.get('tally_id')
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode'] or\
                        form.cleaned_data['barcode_scan']
            result_form = get_object_or_404(ResultForm,
                                            barcode=barcode,
                                            tally__id=tally_id)
            form = safe_form_in_state(
                result_form, [FormState.QUALITY_CONTROL, FormState.ARCHIVING],
                form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk
            QualityControl.objects.create(result_form=result_form,
                                          user=self.request.user.userprofile)

            return redirect(self.success_url, tally_id=tally_id)
        else:
            return self.form_invalid(form)
示例#7
0
    def post(self, *args, **kwargs):
        tally_id = kwargs.get('tally_id')
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode, tally__id=tally_id)

            possible_states = [FormState.CORRECTION,
                               FormState.DATA_ENTRY_1,
                               FormState.DATA_ENTRY_2,
                               FormState.INTAKE,
                               FormState.QUALITY_CONTROL,
                               FormState.ARCHIVING,
                               FormState.UNSUBMITTED]

            if groups.SUPER_ADMINISTRATOR in groups.user_groups(
                    self.request.user):
                possible_states.append(FormState.ARCHIVED)

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            self.template_name = 'check_clearance_center_details.html'
            form_action = reverse(self.success_url, kwargs={'tally_id':tally_id})
            return self.render_to_response(
                self.get_context_data(result_form=result_form,
                                      header_text=_('Create Clearance'),
                                      form_action=form_action,
                                      tally_id=tally_id))
        else:
            return self.form_invalid(form)
示例#8
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)

            possible_states = [FormState.CORRECTION,
                               FormState.DATA_ENTRY_1,
                               FormState.DATA_ENTRY_2,
                               FormState.ARCHIVING,
                               FormState.QUALITY_CONTROL]

            if groups.SUPER_ADMINISTRATOR in groups.user_groups(
                    self.request.user):
                possible_states.append(FormState.ARCHIVED)

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            result_form.reject(new_state=FormState.AUDIT)
            result_form.audited_count += 1
            result_form.save()

            Audit.objects.create(result_form=result_form,
                                 user=self.request.user)

            return redirect(self.success_url)
        else:
            return self.form_invalid(form)
示例#9
0
    def post(self, *args, **kwargs):
        post_data = self.request.POST
        form_class = self.get_form_class()
        center_form = self.get_form(form_class)

        pk = session_matches_post_result_form(post_data, self.request)
        result_form = get_object_or_404(ResultForm, pk=pk)
        form = safe_form_in_state(result_form, FormState.INTAKE,
                                  center_form)

        if form:
            return self.form_invalid(form)

        if center_form.is_valid():
            center_number = center_form.cleaned_data.get('center_number')
            station_number = center_form.cleaned_data.get('station_number')
            center = Center.objects.get(code=center_number)

            if result_form.intaken(center, station_number):
                # a form already exists, send to clearance
                self.request.session['intake-error'] = INTAKEN_MESSAGE
                result_form.send_to_clearance()
                return redirect('intake-clearance')
            else:
                result_form.center = center
                result_form.station_number = station_number
                result_form.save()

            return redirect(self.success_url)
        else:
            return self.render_to_response(self.get_context_data(
                form=center_form, header_text=_('Intake'),
                result_form=result_form))
示例#10
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)

            possible_states = [
                FormState.CORRECTION, FormState.DATA_ENTRY_1,
                FormState.DATA_ENTRY_2, FormState.INTAKE,
                FormState.QUALITY_CONTROL, FormState.ARCHIVING,
                FormState.UNSUBMITTED
            ]

            if groups.SUPER_ADMINISTRATOR in groups.user_groups(
                    self.request.user):
                possible_states.append(FormState.ARCHIVED)

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            result_form.reject(FormState.CLEARANCE)
            Clearance.objects.create(result_form=result_form,
                                     user=self.request.user)

            return redirect(self.success_url)
        else:
            return self.form_invalid(form)
示例#11
0
    def post(self, *args, **kwargs):
        post_data = self.request.POST
        form_class = self.get_form_class()
        center_form = self.get_form(form_class)

        pk = session_matches_post_result_form(post_data, self.request)
        result_form = get_object_or_404(ResultForm, pk=pk)
        form = safe_form_in_state(result_form, FormState.INTAKE,
                                  center_form)

        if form:
            return self.form_invalid(form)

        if center_form.is_valid():
            station_number = center_form.cleaned_data.get('station_number')
            center_number = center_form.cleaned_data.get('center_number')
            center = Center.objects.get(code=center_number)

            #Checks if center ballot number and form ballot number are the same
            general_check = center.sub_constituency and\
                result_form.ballot.number != center.sub_constituency.code
            women_check = center.sub_constituency.ballot_women and\
                result_form.ballot.number != center.sub_constituency.\
                ballot_women.number
            if general_check is True and women_check is True:
                form = add_generic_error(center_form,
                                         _(u"Ballot number do not match for"
                                           u"center and form"))
                return self.render_to_response(self.get_context_data(
                    form=form, header_text=_('Intake'),
                    result_form=result_form))

            duplicated_forms = result_form.get_duplicated_forms(center,
                                                                station_number)
            if duplicated_forms:
                result_form.station_number = station_number
                result_form.center = center
                # a form already exists, send to clearance
                self.request.session['intake-error'] = INTAKEN_MESSAGE
                result_form.send_to_clearance()

                for oneDuplicatedForm in duplicated_forms:
                    if oneDuplicatedForm.form_state != FormState.CLEARANCE:
                        oneDuplicatedForm.send_to_clearance()

                return redirect('intake-clearance')

            self.request.session['station_number'] = station_number
            self.request.session['center_number'] = center_number

            return redirect(self.success_url)
        else:
            return self.render_to_response(self.get_context_data(
                form=center_form, header_text=_('Intake'),
                result_form=result_form))
示例#12
0
文件: intake.py 项目: onaio/tally-ho
    def post(self, *args, **kwargs):
        self.tally_id = kwargs['tally_id']
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode'] or\
                        form.cleaned_data['barcode_scan']
            result_form = get_object_or_404(ResultForm,
                                            barcode=barcode,
                                            tally__id=self.tally_id)
            url = self.success_url
            user = self.request.user
            possible_states = states_for_form(
                user, [FormState.INTAKE, FormState.UNSUBMITTED], result_form)

            if groups.INTAKE_SUPERVISOR in groups.user_groups(user) and\
                    result_form.form_state == FormState.DATA_ENTRY_1:
                url = 'intake-printcover'

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk

            duplicated_forms = result_form.get_duplicated_forms()
            if duplicated_forms:
                # a form already exists, send to clearance
                self.request.session[
                    'intake-error'] = INTAKE_DUPLICATE_ERROR_MESSAGE
                if result_form.form_state != FormState.CLEARANCE:
                    result_form.send_to_clearance()

                for oneDuplicatedForm in duplicated_forms:
                    if oneDuplicatedForm.form_state != FormState.CLEARANCE:
                        oneDuplicatedForm.send_to_clearance()

                return redirect('intake-clearance', tally_id=self.tally_id)

            if result_form.form_state != FormState.DATA_ENTRY_1:
                result_form.form_state = FormState.INTAKE
                result_form.duplicate_reviewed = False
                result_form.user = user.userprofile
                result_form.save()

            if result_form.center:
                return redirect(url, tally_id=self.tally_id)
            else:
                return redirect('intake-enter-center', tally_id=self.tally_id)
        else:
            return self.form_invalid(form)
示例#13
0
    def post(self, *args, **kwargs):
        self.tally_id = kwargs['tally_id']
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode'] or\
                        form.cleaned_data['barcode_scan']
            result_form = get_object_or_404(ResultForm,
                                            barcode=barcode,
                                            tally__id=self.tally_id)
            url = self.success_url
            user = self.request.user
            possible_states = states_for_form(
                user, [FormState.INTAKE, FormState.UNSUBMITTED], result_form)

            if groups.INTAKE_SUPERVISOR in groups.user_groups(user) and\
                    result_form.form_state == FormState.DATA_ENTRY_1:
                url = 'intake-printcover'

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk

            duplicated_forms = result_form.get_duplicated_forms()
            if duplicated_forms:
                # a form already exists, send to clearance
                self.request.session[
                    'intake-error'] = INTAKE_DUPLICATE_ERROR_MESSAGE
                if result_form.form_state != FormState.CLEARANCE:
                    result_form.send_to_clearance()

                for oneDuplicatedForm in duplicated_forms:
                    if oneDuplicatedForm.form_state != FormState.CLEARANCE:
                        oneDuplicatedForm.send_to_clearance()

                return redirect('intake-clearance', tally_id=self.tally_id)

            if result_form.form_state != FormState.DATA_ENTRY_1:
                result_form.form_state = FormState.INTAKE
                result_form.duplicate_reviewed = False
                result_form.user = user.userprofile
                result_form.save()

            if result_form.center:
                return redirect(url, tally_id=self.tally_id)
            else:
                return redirect('intake-enter-center', tally_id=self.tally_id)
        else:
            return self.form_invalid(form)
示例#14
0
def check_state_and_group(result_form, user, form):
    """Check that the result_form is in the correct state for the user.

    :param result_form: The result form to check the state of.
    :param user: The user to check the state for.
    :param form: A form to add errors to if any exist.

    :returns: A form with an error the form and user do not match, otherwise
        None.
    """
    check_state = safe_form_in_state(
        result_form, [FormState.DATA_ENTRY_1, FormState.DATA_ENTRY_2], form)
    check_group = check_group_for_state(result_form, user, form)

    return check_state or check_group
示例#15
0
def check_state_and_group(result_form, user, form):
    """Check that the result_form is in the correct state for the user.

    :param result_form: The result form to check the state of.
    :param user: The user to check the state for.
    :param form: A form to add errors to if any exist.

    :returns: A form with an error the form and user do not match, otherwise
        None.
    """
    check_state = safe_form_in_state(
        result_form, [FormState.DATA_ENTRY_1, FormState.DATA_ENTRY_2], form)
    check_group = check_group_for_state(result_form, user, form)

    return check_state or check_group
示例#16
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)
            possible_states = states_for_form(self.request.user, result_form)
            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            check_quarantine(result_form, self.request.user)
            self.request.session['result_form'] = result_form.pk

            return redirect(self.success_url)
        else:
            return self.form_invalid(form)
示例#17
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data["barcode"]
            result_form = get_object_or_404(ResultForm, barcode=barcode)
            possible_states = states_for_form(self.request.user, result_form)
            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            check_quarantine(result_form, self.request.user)
            self.request.session["result_form"] = result_form.pk

            return redirect(self.success_url)
        else:
            return self.form_invalid(form)
示例#18
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)
            form = safe_form_in_state(result_form, FormState.CORRECTION, form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk

            if result_form.corrections_passed:
                return redirect(self.success_url)
            else:
                return redirect('corrections-required')
        else:
            return self.form_invalid(form)
示例#19
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)
            form = safe_form_in_state(result_form, FormState.QUALITY_CONTROL,
                                      form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk
            QualityControl.objects.create(result_form=result_form,
                                          user=self.request.user)

            return redirect(self.success_url)
        else:
            return self.form_invalid(form)
示例#20
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)
            form = safe_form_in_state(result_form, FormState.QUALITY_CONTROL,
                                      form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk
            QualityControl.objects.create(result_form=result_form,
                                          user=self.request.user)

            return redirect(self.success_url)
        else:
            return self.form_invalid(form)
示例#21
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)
            form = safe_form_in_state(result_form, FormState.CORRECTION, form)

            if form:
                return self.form_invalid(form)

            self.request.session['result_form'] = result_form.pk

            if result_form.corrections_passed:
                return redirect(self.success_url)
            else:
                return redirect('corrections-required')
        else:
            return self.form_invalid(form)
示例#22
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)
            url = self.success_url
            user = self.request.user
            possible_states = states_for_form(
                user, [FormState.INTAKE, FormState.UNSUBMITTED], result_form)

            if groups.INTAKE_SUPERVISOR in groups.user_groups(user) and\
                    result_form.form_state == FormState.DATA_ENTRY_1:
                url = 'intake-printcover'

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            if result_form.intaken():
                # a form already exists, send to clearance
                self.request.session['intake-error'] = INTAKEN_MESSAGE
                result_form.send_to_clearance()
                return redirect('intake-clearance')

            if result_form.form_state != FormState.DATA_ENTRY_1:
                result_form.form_state = FormState.INTAKE
                result_form.user = user
                result_form.save()

            self.request.session['result_form'] = result_form.pk

            if result_form.center:
                return redirect(url)
            else:
                return redirect('intake-enter-center')
        else:
            return self.form_invalid(form)
示例#23
0
    def post(self, *args, **kwargs):
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode']
            result_form = get_object_or_404(ResultForm, barcode=barcode)
            url = self.success_url
            user = self.request.user
            possible_states = states_for_form(
                user, [FormState.INTAKE, FormState.UNSUBMITTED], result_form)

            if groups.INTAKE_SUPERVISOR in groups.user_groups(user) and\
                    result_form.form_state == FormState.DATA_ENTRY_1:
                url = 'intake-printcover'

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            if result_form.intaken():
                # a form already exists, send to clearance
                self.request.session['intake-error'] = INTAKEN_MESSAGE
                result_form.send_to_clearance()
                return redirect('intake-clearance')

            if result_form.form_state != FormState.DATA_ENTRY_1:
                result_form.form_state = FormState.INTAKE
                result_form.user = user
                result_form.save()

            self.request.session['result_form'] = result_form.pk

            if result_form.center:
                return redirect(url)
            else:
                return redirect('intake-enter-center')
        else:
            return self.form_invalid(form)
示例#24
0
    def post(self, *args, **kwargs):
        tally_id = kwargs.get('tally_id')
        form_class = self.get_form_class()
        form = self.get_form(form_class)

        if form.is_valid():
            barcode = form.cleaned_data['barcode'] or\
                        form.cleaned_data['barcode_scan']
            result_form = get_object_or_404(ResultForm,
                                            barcode=barcode,
                                            tally__id=tally_id)

            possible_states = [
                FormState.CORRECTION, FormState.DATA_ENTRY_1,
                FormState.DATA_ENTRY_2, FormState.QUALITY_CONTROL
            ]

            if groups.SUPER_ADMINISTRATOR in groups.user_groups(
                    self.request.user):
                possible_states.append(FormState.ARCHIVED)

            form = safe_form_in_state(result_form, possible_states, form)

            if form:
                return self.form_invalid(form)

            result_form.reject(new_state=FormState.AUDIT)
            result_form.audited_count += 1
            result_form.save()

            Audit.objects.create(result_form=result_form,
                                 user=self.request.user.userprofile)

            return redirect(self.success_url, tally_id=tally_id)
        else:
            return self.form_invalid(form)
示例#25
0
文件: intake.py 项目: onaio/tally-ho
    def post(self, *args, **kwargs):
        tally_id = kwargs.get('tally_id')
        post_data = self.request.POST
        form_class = self.get_form_class()
        center_form = self.get_form(form_class)

        pk = session_matches_post_result_form(post_data, self.request)
        result_form = get_object_or_404(ResultForm, pk=pk, tally__id=tally_id)
        form = safe_form_in_state(result_form, FormState.INTAKE,
                                  center_form)

        if form:
            return self.form_invalid(form)

        if center_form.is_valid():
            station_number = center_form.cleaned_data.get('station_number')
            center_number = center_form.cleaned_data.get('center_number')
            center = Center.objects.get(code=center_number, tally__id=tally_id)

            # Checks if center ballot number and form ballot number are the
            # same
            is_error = False
            center_sub = center.sub_constituency
            if center_sub:
                is_general = result_form.ballot.number == \
                        center.sub_constituency.code
                if not is_general:
                    is_women = center_sub.ballot_women is not None
                    if not is_women or (
                            is_women and
                            result_form.ballot.number !=
                            center_sub.ballot_women.number):
                        is_error = True

            if is_error:
                form = add_generic_error(center_form,
                                         _(u"Ballot number do not match for"
                                           u"center and form"))
                return self.render_to_response(self.get_context_data(
                    form=form, header_text=_('Intake'),
                    result_form=result_form,
                    tally_id=tally_id))

            duplicated_forms = result_form.get_duplicated_forms(center,
                                                                station_number)
            if duplicated_forms:
                result_form.station_number = station_number
                result_form.center = center
                # a form already exists, send to clearance
                self.request.session[
                    'intake-error'] = INTAKE_DUPLICATE_ERROR_MESSAGE
                if result_form.form_state != FormState.CLEARANCE:
                    result_form.send_to_clearance()

                for form in duplicated_forms:
                    if form.form_state != FormState.CLEARANCE:
                        form.send_to_clearance()

                return redirect('intake-clearance', tally_id=tally_id)

            self.request.session['station_number'] = station_number
            self.request.session['center_number'] = center_number

            return redirect(self.success_url, tally_id=tally_id)
        else:
            return self.render_to_response(self.get_context_data(
                form=center_form, header_text=_('Intake'),
                result_form=result_form))
示例#26
0
    def post(self, *args, **kwargs):
        tally_id = kwargs.get('tally_id')
        post_data = self.request.POST
        form_class = self.get_form_class()
        center_form = self.get_form(form_class)

        pk = session_matches_post_result_form(post_data, self.request)
        result_form = get_object_or_404(ResultForm, pk=pk, tally__id=tally_id)
        form = safe_form_in_state(result_form, FormState.INTAKE, center_form)

        if form:
            return self.form_invalid(form)

        if center_form.is_valid():
            station_number = center_form.cleaned_data.get('station_number')
            center_number = center_form.cleaned_data.get('center_number')
            center = Center.objects.get(code=center_number, tally__id=tally_id)

            # Checks if center ballot number and form ballot number are the
            # same
            is_error = False
            center_sub = center.sub_constituency
            if center_sub:
                is_general = result_form.ballot.number == \
                        center.sub_constituency.code
                if not is_general:
                    is_women = center_sub.ballot_women is not None
                    if not is_women or (is_women and result_form.ballot.number
                                        != center_sub.ballot_women.number):
                        is_error = True

            if is_error:
                form = add_generic_error(
                    center_form,
                    _(u"Ballot number do not match for"
                      u"center and form"))
                return self.render_to_response(
                    self.get_context_data(form=form,
                                          header_text=_('Intake'),
                                          result_form=result_form,
                                          tally_id=tally_id))

            duplicated_forms = result_form.get_duplicated_forms(
                center, station_number)
            if duplicated_forms:
                result_form.station_number = station_number
                result_form.center = center
                # a form already exists, send to clearance
                self.request.session[
                    'intake-error'] = INTAKE_DUPLICATE_ERROR_MESSAGE
                if result_form.form_state != FormState.CLEARANCE:
                    result_form.send_to_clearance()

                for form in duplicated_forms:
                    if form.form_state != FormState.CLEARANCE:
                        form.send_to_clearance()

                return redirect('intake-clearance', tally_id=tally_id)

            self.request.session['station_number'] = station_number
            self.request.session['center_number'] = center_number

            return redirect(self.success_url, tally_id=tally_id)
        else:
            return self.render_to_response(
                self.get_context_data(form=center_form,
                                      header_text=_('Intake'),
                                      result_form=result_form))