def post(self, request, *args, **kwargs):
        box_number = kwargs.get('box_number')
        if not box_number:
            return error_page(request, 'missing box_number')

        if not BoxNumber.validate(box_number):
            return error_page(
                request,
                "Invalid box_number '{}'".format(box_number),
            )

        new_box_form = NewBoxForm(
            request.POST,
            initial={'box_number': box_number},
        )

        if not new_box_form.is_valid():
            return render(
                request,
                self.template_name,
                {
                    'form': new_box_form,
                },
            )

        box = new_box_form.save()

        action = request.session.get('action')
        if action == Action.ACTION_BUILD_PALLET:
            return redirect(
                reverse('fpiweb:build_pallet_add_box', args=(box.pk, )))

        return redirect(reverse('fpiweb:box_details', args=(box.pk, )))
    def box_new(self, box_number: str, box_type: Union[str, int,
                                                       BoxType]) -> Box:
        """
        Add a new empty box to the inventory system.  If successful it
        adds an activity record for an empty box and returns the box record
        just created.

        Requirements:

        *   Box number is valid, unique, and not previously assigned

        *   Box type is valid

        Exceptions:

            101 - Box number supplied is not in the valid format ('BOXnnnn')

            102 - Box number is not unique

            102 - Box type is not valid

        :param box_number: in the form of 'BOXnnnnn'
        :param box_type: a valid box type code, BoxType record or record id
        :return: the newly created box record
        """

        # box number validation
        if not BoxNumber.validate(box_number):
            raise InvalidValueError(f'101 - Box number of "{box_number}" is '
                                    f'improperly formatted or missing')

        box_exists_qs = Box.objects.filter(box_number=box_number)
        if len(box_exists_qs) > 0:
            raise InvalidActionAttemptedError(
                f'102 - Creating a new box {box_number} failed because it'
                f'already exists')

        # box type validation - either code, id or record
        if type(box_type) == BoxType:
            self.box_type = box_type
        elif type(box_type) == int:
            try:
                self.box_type = BoxType.objects.get(pk=box_type)
            except BoxType.DoesNotExist:
                raise InvalidValueError(
                    f'102 - Box type id of "{box_type}" is invalid')
        else:
            try:
                self.box_type = BoxType.objects.get(box_type_code=box_type)
            except BoxType.DoesNotExist:
                raise InvalidValueError(
                    f'102 - Box type code of "{box_type}" is invalid')
        self._new_box(box_number, self.box_type)
        return self.box
示例#3
0
    def clean(self, value: str) -> str:
        value = super().clean(value)
        formal_box_number = 'BOX0000'
        raise_error = False
        if BoxNumber.validate(value):
            formal_box_number = value.upper()
        elif value.isdigit():
            # Did the user just enter digit?  Try and turn this
            # into a valid box number
            formal_box_number = BoxNumber.format_box_number(int(value))
            if not BoxNumber.validate(formal_box_number):
                raise_error = True
        else:
            raise_error = True
        if raise_error:
            raise ValidationError(
                '%(value)s is not a valid box number',
                params={'value': value},
            )

        return formal_box_number
    def get(self, request, *args, **kwargs):
        box_number = kwargs.get('box_number')
        if not box_number:
            return error_page(request, 'missing box_number')

        if not BoxNumber.validate(box_number):
            return error_page(
                request,
                "Invalid box_number '{}'".format(box_number),
            )

        new_box_form = NewBoxForm(initial={'box_number': box_number})
        return render(request, self.template_name, {
            'form': new_box_form,
        })
示例#5
0
    def clean(self, value):
        value = super().clean(value)

        if BoxNumber.validate(value):
            return value.upper()

        # Did the user just enter digit?  Try and turn this
        # into a valid box number
        try:
            value = int(value)
        except (TypeError, ValueError):
            raise ValidationError(
                '%(value)s is not a valid box number',
                params={'value': value},
            )

        return BoxNumber.format_box_number(value)
示例#6
0
def box_number_validator(value) -> None:
    if BoxNumber.validate(value):
        return
    raise ValidationError(f"{value} is not a valid Box Number")