diff options
Diffstat (limited to 'item/validators.go')
| -rw-r--r-- | item/validators.go | 44 | 
1 files changed, 36 insertions, 8 deletions
diff --git a/item/validators.go b/item/validators.go index d098f4e..3541acb 100644 --- a/item/validators.go +++ b/item/validators.go @@ -1,5 +1,5 @@  /* openbills - Server for web based Libre Billing Software - * Copyright (C) 2023  Vidhu Kant Sharma <vidhukant@vidhukant.com> + * Copyright (C) 2023-2025  Vidhu Kant Sharma <vidhukant@vidhukant.com>   *   * This program is free software: you can redistribute it and/or modify   * it under the terms of the GNU General Public License as published by @@ -20,7 +20,6 @@ package item  import (  	"strconv"  	"strings" -  	"vidhukant.com/openbills/errors"  ) @@ -32,20 +31,49 @@ func (i *SavedItem) validate() error {  	i.Description = strings.TrimSpace(i.Description)  	i.HSN = strings.TrimSpace(i.HSN)  	i.UnitOfMeasure = strings.TrimSpace(i.UnitOfMeasure) -	i.UnitPrice = strings.TrimSpace(i.UnitPrice) -	i.GSTPercentage = strings.TrimSpace(i.GSTPercentage) + +	if len(i.Variants) == 0 { +		return errors.ErrNoItemVariants +	} + +	var validatedVariants []ItemVariant +	for _, x := range i.Variants { +		err := x.validate() +		if err != nil { +			return err +		} + +		validatedVariants = append(validatedVariants, x) +	} + +	i.Variants = validatedVariants + +	return nil +} + +func (v *ItemVariant) validate() error { +	v.VariantName = strings.TrimSpace(v.VariantName) +	v.UnitPrice = strings.TrimSpace(v.UnitPrice) +	v.GSTPercentage = strings.TrimSpace(v.GSTPercentage) +	v.QuantityInStock = strings.TrimSpace(v.QuantityInStock)  	var err error  	// check if UnitPrice is float -	_, err = strconv.ParseFloat(i.UnitPrice, 64) -	if err != nil && strings.TrimSpace(i.UnitPrice) != "" { +	_, err = strconv.ParseFloat(v.UnitPrice, 64) +	if err != nil && v.UnitPrice != "" {  		return errors.ErrInvalidUnitPrice  	}  	// check if GSTPercentage is float -	_, err = strconv.ParseFloat(i.GSTPercentage, 64) -	if err != nil && strings.TrimSpace(i.GSTPercentage) != "" { +	_, err = strconv.ParseFloat(v.GSTPercentage, 64) +	if err != nil && v.GSTPercentage != "" { +		return errors.ErrInvalidGSTPercentage +	} + +	// check if QuantityInStock is float +	_, err = strconv.ParseFloat(v.QuantityInStock, 64) +	if err != nil && v.QuantityInStock != "" {  		return errors.ErrInvalidGSTPercentage  	}  |