From 5ca14fcf3e949308eb0b2d636169e6601df1908d Mon Sep 17 00:00:00 2001 From: MikunoNaka Date: Wed, 28 Apr 2021 16:19:00 +0530 Subject: New Feature: Ability to register new items in the database --- .gitignore | 2 + server/database/database.go | 58 ++++++++++++------ server/main.go | 23 ++++++- server/openbills.db | Bin 8192 -> 12288 bytes src/components/BillingPage.js | 14 +++-- src/components/Form/AddNewItemForm.js | 10 ++-- src/components/Form/Form.css | 28 +++++++++ src/components/Form/Form.scss | 53 ++++++++++++---- src/components/Form/RegisterItemForm.js | 103 ++++++++++++++++++++++++++++++++ 9 files changed, 252 insertions(+), 39 deletions(-) create mode 100644 src/components/Form/RegisterItemForm.js diff --git a/.gitignore b/.gitignore index 24de31f..b7e0105 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,8 @@ yarn-error.log* /server/openbills /server/build /server/app +/server/openbills.db +/server/database/openbills.db /build /app diff --git a/server/database/database.go b/server/database/database.go index 16b6f65..8b7c7f6 100644 --- a/server/database/database.go +++ b/server/database/database.go @@ -12,43 +12,67 @@ package database import ( - _ "github.com/mattn/go-sqlite3" "database/sql" + _ "github.com/mattn/go-sqlite3" ) type Item struct { Model string Desc string `json:"Description"` - Price int // *float32 + Price float64 HSN int } - var myDatabase *sql.DB +var registered_items *sql.Stmt +var register_item *sql.Stmt func init() { myDatabase, _ = sql.Open("sqlite3", "./openbills.db") -} -var myItems *sql.Stmt -var addToMyItems *sql.Stmt -func init() { - myItems, _ = myDatabase.Prepare("CREATE TABLE IF NOT EXISTS RegisteredItems (id INTEGER PRIMARY KEY, model TEXT, desc TEXT, price INTEGER, HSN INTEGER)") - myItems.Exec() + registered_items, _ = myDatabase.Prepare( + `CREATE TABLE IF NOT EXISTS registered_items + (id INTEGER PRIMARY KEY AUTOINCREMENT, + model TEXT NOT NULL, + desc TEXT, + price REAL, + hsn BLOB)`, + ) + registered_items.Exec() - addToMyItems, _ = myDatabase.Prepare("INSERT INTO RegisteredItems (id, model, desc, price, hsn) VALUES (?, ?, ?, ?, ?)") + register_item, _ = myDatabase.Prepare( + `INSERT INTO registered_items + (model, desc, price, hsn) + VALUES (?, ?, ?, ?)`, + ) } func GetAllItems() []Item { var allItems []Item - rows, _ := myDatabase.Query("SELECT model, desc, price, hsn FROM RegisteredItems") + rows, _ := myDatabase.Query( + `SELECT model, desc, price, hsn FROM registered_items`, + ) + + var ( + model, desc string + price float64 + HSN int + ) - var model string - var desc string - var price int - var hsn int for rows.Next() { - rows.Scan(&model, &desc, &price, &hsn) - allItems = append(allItems, Item{model, desc, price, hsn}) + rows.Scan(&model, &desc, &price, &HSN) + allItems = append(allItems, Item{model, desc, price, HSN}) } + return allItems } + +func RegisterItem(model string, desc string, price float64, HSN int) { + /* + var item Item = Item{ + model, desc, price, HSN, + } + + register_item.Exec(item.Model, item.Desc, item.Price, item.HSN) + */ + register_item.Exec(model, desc, price, HSN) +} diff --git a/server/main.go b/server/main.go index b514a31..1aa34c3 100644 --- a/server/main.go +++ b/server/main.go @@ -16,7 +16,7 @@ import ( "github.com/gin-gonic/contrib/static" "net/http" - // this handles all the database functions + "strconv" db "github.com/MikunoNaka/openbills/database" ) @@ -33,6 +33,9 @@ func main() { items := api.Group("/items") items.GET("/", getAllItems) + items.POST("/", registerItem) + + // items.POST("/", registerItem) myRouter.Run(":8080") } @@ -41,3 +44,21 @@ func getAllItems(ctx *gin.Context) { ctx.Header("Content-Type", "application/json") ctx.JSON(http.StatusOK, db.GetAllItems()) } + +func registerItem(ctx *gin.Context) { + // extract data + model := ctx.Query("model") + desc := ctx.Query("desc") + price, _ := strconv.ParseFloat(ctx.Query("price"), 64) + hsn, _ := strconv.Atoi(ctx.Query("hsn")) + + // why does it show warnings + item := db.Item { + model, + desc, + price, + hsn, + } + + db.RegisterItem(item.Model, item.Desc, item.Price, item.HSN) +} diff --git a/server/openbills.db b/server/openbills.db index 1f2afd2..4f15f57 100644 Binary files a/server/openbills.db and b/server/openbills.db differ diff --git a/src/components/BillingPage.js b/src/components/BillingPage.js index 7f97b32..fc09694 100644 --- a/src/components/BillingPage.js +++ b/src/components/BillingPage.js @@ -10,15 +10,15 @@ import React, { useState, useEffect } from "react"; import axios from "axios"; import AddNewItemForm from "./Form/AddNewItemForm"; +import RegisterItemForm from "./Form/RegisterItemForm"; +import MetaInfoForm from "./Form/MetaInfoForm"; import ItemsDisplay from "./Display/ItemsDisplay"; import SummaryDisplay from "./Display/SummaryDisplay"; -import MetaInfoForm from "./Form/MetaInfoForm"; const BillingPage = () => { const [savedItems, getSavedItems] = useState([]) - // get data from server on startup - useEffect(() => { + const getRegisteredItems = () => { axios.get(`/api/items`) .then((res) => { getSavedItems(res.data); @@ -27,8 +27,13 @@ const BillingPage = () => { alert("The promise returned an error idk what to do"); console.log(res); }) + } + + // get data from server on startup + useEffect(() => { + getRegisteredItems(); }, []); - // to be handled by backend + // TODO: to be handled by backend const defGSTValue = 18; // update the items from AddNewItemForm @@ -42,6 +47,7 @@ const BillingPage = () => { return ( <> +
diff --git a/src/components/Form/AddNewItemForm.js b/src/components/Form/AddNewItemForm.js index afd5259..5028af2 100644 --- a/src/components/Form/AddNewItemForm.js +++ b/src/components/Form/AddNewItemForm.js @@ -80,7 +80,7 @@ const AddNewItemForm = (props) => { }>
+ { + alert("Coming Soon") + }} /> - - + { + // show/hide this component + const [visibility, setVisibility] = useState(true)// useState(props.visibility); + + const [newItemNameValue, setNewItemNameValue] = useState(""); + const [newItemDescValue, setNewItemDescValue] = useState(""); + // const [newItemBrandValue, setNewItemBrandValue] = useState(""); + // const [newItemTypeValue, setNewItemTypeValue] = useState(""); + const [newItemPriceValue, setNewItemPriceValue] = useState(""); + const [newItemHSNValue, setNewItemHSNValue] = useState(""); + const [newItemGSTValue, setNewItemGSTValue] = useState(""); + + + return ( +
+
{ + event.preventDefault(); + setVisibility(false); + + axios.post(`/api/items/?model=${newItemNameValue}&desc=${newItemDescValue}&price=${newItemPriceValue}&hsn=${newItemHSNValue}&gst=${newItemGSTValue}`) + .then((res) => { + console.log(res); + }) + .catch((err) => { + console.log(err); + }); + } + }> +
+ + + +
+ +
+ + + + + +
+ + +
+
+ ); +} + +export default RegisterItemForm; -- cgit v1.2.3