From 0f435049cb3cc6900d881c5dce43bec3a1e60e2e Mon Sep 17 00:00:00 2001 From: Vidhu Kant Sharma Date: Mon, 13 Oct 2025 01:32:27 +0530 Subject: added item variants --- item/validators.go | 44 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 8 deletions(-) (limited to 'item/validators.go') 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 + * Copyright (C) 2023-2025 Vidhu Kant Sharma * * 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 } -- cgit v1.2.3