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
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, })
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)
def box_number_validator(value) -> None: if BoxNumber.validate(value): return raise ValidationError(f"{value} is not a valid Box Number")