aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/item/validators.go
diff options
context:
space:
mode:
Diffstat (limited to 'item/validators.go')
-rw-r--r--item/validators.go44
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
}