diff options
Diffstat (limited to 'item/validators.go')
| -rw-r--r-- | item/validators.go | 111 | 
1 files changed, 111 insertions, 0 deletions
diff --git a/item/validators.go b/item/validators.go new file mode 100644 index 0000000..09162ab --- /dev/null +++ b/item/validators.go @@ -0,0 +1,111 @@ +/* openbills - Server for web based Libre Billing Software + * Copyright (C) 2023  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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program.  If not, see <https://www.gnu.org/licenses/>. + */ + +package item + +import ( +	"strconv" +	"strings" + +	"vidhukant.com/openbills/errors" +) + +func (b *Brand) validate() error { +	// trim whitespaces +	b.Name = strings.TrimSpace(b.Name) + +	if b.Name == "" { +		return errors.ErrEmptyBrandName +	} + +	// make sure GSTIN is unique +	var count int64 +	err := db.Model(&Brand{}). +		Select("name"). +		Where("name = ?", b.Name). +		Count(&count). +		Error + +	if err != nil { +		return err +	} + +	if count > 0 { +		return errors.ErrNonUniqueBrandName +	} + +	return nil +} + +func checkIfBrandExists(id uint) error { +	// check if brand id is valid +	var count int64 +	err := db.Model(&Brand{}). +		Select("id"). +		Where("id = ?", id). +		Count(&count). +		Error + +	if err != nil { +		return err +  } + +	if count == 0 { +		return errors.ErrBrandNotFound +	} + +	return nil +} + +func (i *SavedItem) validate() error { +	// trim whitespaces +	i.Name = strings.TrimSpace(i.Name) +	i.Description = strings.TrimSpace(i.Description) +	i.HSN = strings.TrimSpace(i.HSN) + +	var err error + +	// check if UnitPrice is float +	_, err = strconv.ParseFloat(i.UnitPrice, 64) +	if err != nil && strings.TrimSpace(i.UnitPrice) != "" { +		return errors.ErrInvalidUnitPrice +	} + +	// check if GSTPercentage is float +	_, err = strconv.ParseFloat(i.GSTPercentage, 64) +	if err != nil && strings.TrimSpace(i.GSTPercentage) != "" { +		return errors.ErrInvalidGSTPercentage +	} + +	// check if item with same name and brand already exists +	var count int64 +	err = db.Model(&SavedItem{}). +		Select("name, brand_id"). +		Where("brand_id = ? and name = ?", i.BrandID, i.Name). +		Count(&count). +		Error + +	if err != nil { +		return err +  } + +	if count != 0 { +		return errors.ErrNonUniqueBrandItem +	} + +	return nil +}  |