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