From 5d2222d9fa782b94ba6787e5c6b23aab1e468308 Mon Sep 17 00:00:00 2001 From: MikunoNaka Date: Thu, 24 Jun 2021 20:00:10 +0530 Subject: Multiple minor bug fixes and convert more compnents to TS --- server/database/database.go | 14 +-- server/database/items.go | 30 +++--- server/filled.db | Bin 57344 -> 0 bytes server/router/items.go | 14 +-- src/components/Form/Document/MetaInfoForm.tsx | 17 ---- src/components/Form/Items/AddNewItemForm.tsx | 63 +++++------- src/components/Form/Items/RegisterItemForm.js | 135 ------------------------- src/components/Form/Items/RegisterItemForm.tsx | 125 +++++++++++++++++++++++ src/interfaces.ts | 30 +++--- 9 files changed, 192 insertions(+), 236 deletions(-) delete mode 100644 server/filled.db delete mode 100644 src/components/Form/Items/RegisterItemForm.js create mode 100644 src/components/Form/Items/RegisterItemForm.tsx diff --git a/server/database/database.go b/server/database/database.go index c2c0dfe..f8d9092 100644 --- a/server/database/database.go +++ b/server/database/database.go @@ -20,13 +20,13 @@ func InitDB() { init_items, _ := myDatabase.Prepare( `CREATE TABLE IF NOT EXISTS Items (id INTEGER PRIMARY KEY AUTOINCREMENT, - Model TEXT NOT NULL, - Desc TEXT, - Price REAL, - Hsn BLOB, - Gst REAL, - Category TEXT, - Brand TEXT)`, + Model TEXT NOT NULL, + Desc TEXT, + UnitPrice REAL, + HSN BLOB, + TotalGST REAL, + Category TEXT, + Brand TEXT)`, ) init_items.Exec() diff --git a/server/database/items.go b/server/database/items.go index 325b7c1..059f5e6 100644 --- a/server/database/items.go +++ b/server/database/items.go @@ -14,30 +14,30 @@ import ( ) type Item struct { - Model string - Desc string `json:"Description"` - Price float64 - HSN int - GST float64 - Cat string `json:"Category"` - Brand string + Model string + Description string + UnitPrice float64 + HSN int + TotalGST float64 + Category string + Brand string } func GetAllItems() []Item { var allItems []Item rows, _ := myDatabase.Query( - `SELECT Model, Desc, Price, Hsn, Gst, Category, Brand FROM Items`, + `SELECT Model, Desc, UnitPrice, HSN, TotalGST, Category, Brand FROM Items`, ) var ( model, desc, cat, brand string - price, GST float64 + unitPrice, GST float64 HSN int ) for rows.Next() { - rows.Scan(&model, &desc, &price, &HSN, &GST, &cat, &brand) - allItems = append(allItems, Item{model, desc, price, HSN, GST, cat, brand}) + rows.Scan(&model, &desc, &unitPrice, &HSN, &GST, &cat, &brand) + allItems = append(allItems, Item{model, desc, unitPrice, HSN, GST, cat, brand}) } return allItems @@ -48,7 +48,7 @@ func RegisterItem(item Item) bool { register_item, _ := myDatabase.Prepare( `INSERT INTO Items - (Model, Desc, Price, Hsn, Gst, Category, Brand) + (Model, Desc, UnitPrice, HSN, TotalGST, Category, Brand) VALUES (?, ?, ?, ?, ?, ?, ?)`, ) @@ -64,10 +64,8 @@ func RegisterItem(item Item) bool { } register_item.Exec( - item.Model, item.Desc, - item.Price, item.HSN, - item.GST, item.Cat, - item.Brand, + item.Model, item.Description, item.UnitPrice, item.HSN, + item.TotalGST, item.Category, item.Brand, ) return true diff --git a/server/filled.db b/server/filled.db deleted file mode 100644 index d9258ed..0000000 Binary files a/server/filled.db and /dev/null differ diff --git a/server/router/items.go b/server/router/items.go index c71fac6..684d1d8 100644 --- a/server/router/items.go +++ b/server/router/items.go @@ -31,13 +31,13 @@ func registerItem(ctx *gin.Context) { brand := "brand coming soon" item := db.Item { - Model: ctx.Query("model"), - Desc: ctx.Query("desc"), - Price: price, - HSN: hsn, - GST: gst, - Cat: cat, - Brand: brand, + Model: ctx.Query("model"), + Description: ctx.Query("desc"), + UnitPrice: price, + HSN: hsn, + TotalGST: gst, + Category: cat, + Brand: brand, } db.RegisterItem(item) diff --git a/src/components/Form/Document/MetaInfoForm.tsx b/src/components/Form/Document/MetaInfoForm.tsx index da484ab..bcddad6 100644 --- a/src/components/Form/Document/MetaInfoForm.tsx +++ b/src/components/Form/Document/MetaInfoForm.tsx @@ -9,24 +9,7 @@ import React from "react"; import "./../Form.scss"; -interface Transport { - name: string, - vehicleNum: string, - method: string, // shipment method - gstin: string, - builty: string // goods receipt -} - const MetaInfoForm: React.FC = () => { - // don't push it to github! - const sampleTransport: Transport = { - name: "Own Vehicle", - vehicleNum: "HR61C9220", - method: "By Road", - gstin: "", - builty: "" - } - console.log(sampleTransport); return (
diff --git a/src/components/Form/Items/AddNewItemForm.tsx b/src/components/Form/Items/AddNewItemForm.tsx index 283d779..ae64b06 100644 --- a/src/components/Form/Items/AddNewItemForm.tsx +++ b/src/components/Form/Items/AddNewItemForm.tsx @@ -13,13 +13,12 @@ import { Item } from "../../../interfaces"; interface props { savedItems: Item[] addItem: (item: Item) => void - defGSTValue: number, - registerItemFormVisibility: any, + defGSTValue: number + registerItemFormVisibility: any registerPersonFormVisibility: any } const AddNewItemForm: React.FC = (props) => { - console.log(props) const [itemNameValue, setItemNameValue] = useState(""); const [itemDescValue, setItemDescValue] = useState(""); const [itemPriceValue, setItemPriceValue] = useState(0.00); @@ -35,18 +34,19 @@ const AddNewItemForm: React.FC = (props) => { const enterItemNamePrompt: string = "start typing here"; const registerItemPrompt: string = "add new"; - const emptyItemNames: any[] = [enterItemNamePrompt, registerItemPrompt, ""]; + const emptyItemNames: string[] = [enterItemNamePrompt, registerItemPrompt, ""]; // set description and price if match found in DB const applyItemInfo = (i: any) => { + console.log(i) setItemDescValue(i.Description); - setItemPriceValue(i.Price); + setItemPriceValue(i.UnitPrice); setItemHSNValue(i.HSN); - setItemGSTValue(i.GST); + setItemGSTValue(i.TotalGST); } // check the item name value and do stuff accordingly - const setItemInfo = (itemName: any) => + const setItemInfo = (itemName: string) => (props.savedItems === null || itemName === registerItemPrompt) ? props.registerItemFormVisibility(true) : props.savedItems.some((i) => @@ -77,12 +77,13 @@ const AddNewItemForm: React.FC = (props) => { TotalValue: (itemPriceValue * itemQTYValue), Discount: itemDiscountValue, HSN: itemHSNValue, + TotalGST: itemGSTValue, // this also checks if igst applies or not // TODO: fix this - sgst: 0, - cgst: 0, - igst: 0 + SGST: 0, + CGST: 0, + IGST: 0 // sgst: inState ? parseInt(itemGSTValue) / 2 : "", // cgst: inState ? parseInt(itemGSTValue) / 2 : "", // igst: inState ? "" : parseInt(itemGSTValue) @@ -115,11 +116,7 @@ const AddNewItemForm: React.FC = (props) => {
@@ -129,10 +126,8 @@ const AddNewItemForm: React.FC = (props) => { Quantity: ) => { - const value: number = parseInt(event.currentTarget.value); - setItemQTYValue(value); - } + (event: React.FormEvent) => + setItemQTYValue(parseInt(event.currentTarget.value)) } required /> @@ -141,10 +136,8 @@ const AddNewItemForm: React.FC = (props) => { Price: ) => { - const value: number = parseFloat(event.currentTarget.value); - setItemPriceValue(value); - } + (event: React.FormEvent) => + setItemPriceValue(parseFloat(event.currentTarget.value)) } required /> @@ -153,10 +146,8 @@ const AddNewItemForm: React.FC = (props) => { Discount: ) => { - const value: number = parseInt(event.currentTarget.value); - setItemDiscountValue(value); - } + (event: React.FormEvent) => + setItemDiscountValue(parseInt(event.currentTarget.value)) } /> @@ -165,10 +156,8 @@ const AddNewItemForm: React.FC = (props) => { HSN: ) => { - const value: number = parseInt(event.currentTarget.value); - setItemHSNValue(value); - } + (event: React.FormEvent) => + setItemHSNValue(parseInt(event.currentTarget.value)) } required /> @@ -177,10 +166,8 @@ const AddNewItemForm: React.FC = (props) => { GST: ) => { - const value: number = parseInt(event.currentTarget.value); - setItemGSTValue(value); - } + (event: React.FormEvent) => + setItemGSTValue(parseInt(event.currentTarget.value)) } required /> @@ -197,10 +184,6 @@ const AddNewItemForm: React.FC = (props) => { onClick={() => props.registerItemFormVisibility(true)} /> - - - - = (props) => { - ) + ); } export default AddNewItemForm; diff --git a/src/components/Form/Items/RegisterItemForm.js b/src/components/Form/Items/RegisterItemForm.js deleted file mode 100644 index 6ad4c1f..0000000 --- a/src/components/Form/Items/RegisterItemForm.js +++ /dev/null @@ -1,135 +0,0 @@ -/* - * OpenBills - Self hosted browser app to generate and keep track of simple invoices - * Version - 0 - * Licensed under the MIT license - https://opensource.org/licenses/MIT - * - * Copyright (c) 2021 Vidhu Kant Sharma -*/ - -// TODO: Code isn't tested properly -// I'd be surprised if it < 10 bugs - -// TODO: Implement override protection - -import React, { useState } from "react"; -import axios from "axios"; -import "./../Form.scss"; - - -const RegisterItemForm = (props) => { - const [newItemNameValue, setNewItemNameValue] = useState(""); - const [newItemDescValue, setNewItemDescValue] = useState(""); - const [newItemPriceValue, setNewItemPriceValue] = useState(0.00); - const [newItemHSNValue, setNewItemHSNValue] = useState(""); - const [newItemGSTValue, setNewItemGSTValue] = useState(props.defGSTValue); - // const [newItemBrandValue, setNewItemBrandValue] = useState(""); - // const [newItemTypeValue, setNewItemTypeValue] = useState(""); - - const hideSelf = () => props.setVisibility(false); - - const closeOnBGClicked = (event) => - event.target.className === "floatingMenuBG" && hideSelf(); - - const postForm = (event) => { - event.preventDefault(); - - // TODO: show confirmation before being invisible - axios.post( - `/api/items/register/` - + `?model=${newItemNameValue}` - + `&desc=${newItemDescValue}` - + `&price=${newItemPriceValue}` - + `&hsn=${newItemHSNValue}` - + `&gst=${newItemGSTValue}` - ) - .then((res) => { - console.log(res); - props.setVisibility(false); - props.updateItemsList(); - }) - .catch((err) => { - console.log(err); - alert("Something went wrong, please check the log by opening the console.") - }); - } - - - return ( -
-
-
-
-
-
- - - - -
-
- - - - - -
-
- -
- { - props.setVisibility(false); - } - } - /> - - -
-
-
-
-
- ); -} - -export default RegisterItemForm; diff --git a/src/components/Form/Items/RegisterItemForm.tsx b/src/components/Form/Items/RegisterItemForm.tsx new file mode 100644 index 0000000..dc48d3c --- /dev/null +++ b/src/components/Form/Items/RegisterItemForm.tsx @@ -0,0 +1,125 @@ +/* + * OpenBills - Self hosted browser app to generate and keep track of simple invoices + * Version - 0 + * Licensed under the MIT license - https://opensource.org/licenses/MIT + * + * Copyright (c) 2021 Vidhu Kant Sharma +*/ + +// TODO: Code isn't tested properly +// I'd be surprised if it < 10 bugs + +// TODO: Implement override protection + +import React, { useState } from "react"; +import axios from "axios"; +import "./../Form.scss"; + +interface props { + defGSTValue: number + setVisibility: any // this component's visibility + updateItemsList: () => Promise +} + +const RegisterItemForm: React.FC = (props) => { + const [newItemNameValue, setNewItemNameValue] = useState(""); + const [newItemDescValue, setNewItemDescValue] = useState(""); + const [newItemPriceValue, setNewItemPriceValue] = useState(0.00); + const [newItemHSNValue, setNewItemHSNValue] = useState(); + const [newItemGSTValue, setNewItemGSTValue] = useState(props.defGSTValue); + // const [newItemBrandValue, setNewItemBrandValue] = useState(""); + // const [newItemTypeValue, setNewItemTypeValue] = useState(""); + + const hideSelf = () => props.setVisibility(false); + + const closeOnBGClicked = (event: any) => + event.target.className === "floatingMenuBG" && hideSelf(); + + const postForm = (event: any) => { + event.preventDefault(); + // TODO: show confirmation before being invisible + axios.post( + `/api/items/register/` + + `?model=${newItemNameValue}` + + `&desc=${newItemDescValue}` + + `&price=${newItemPriceValue}` + + `&hsn=${newItemHSNValue}` + + `&gst=${newItemGSTValue}` + ) + .then((res) => { + console.log(res); + hideSelf(); + props.updateItemsList(); + }) + .catch((err) => { + console.log(err); + alert("Something went wrong, please check the log by opening the console.") + }); + } + + + return ( +
+
+
+
+
+
+ + + + +
+
+ + + + + +
+
+ +
+ hideSelf()} + /> + + +
+
+
+
+
+ ); +} + +export default RegisterItemForm; diff --git a/src/interfaces.ts b/src/interfaces.ts index 7090907..bc355ff 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -1,21 +1,23 @@ export interface Transport { - name: string, - vehicleNum: string, - method: string, - gstin: string, + name: string + vehicleNum: string + method: string + gstin: string builty: string } export interface Item { - Model: string, - Description: string, - Quantity: number, - UnitPrice: number, - TotalValue: number, // UnitPrice * Quantity - Discount: number, - HSN: number, // string?? + Model: string + Description: string + Quantity: number + UnitPrice: number + TotalValue: number // UnitPrice * Quantity + Discount: number + HSN: number // string?? - sgst: number, - cgst: number, - igst: number + TotalGST: number + SGST: number + CGST: number + IGST: number + // category and brand } -- cgit v1.2.3