aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/database/database.go8
-rw-r--r--server/database/invoices.go70
-rw-r--r--src/components/Form/Document/DocumentInfoForm.tsx21
-rw-r--r--src/components/Form/Form.scss7
-rw-r--r--src/components/Menu/HomePageMenu.tsx2
-rw-r--r--src/components/Menu/InvoiceInfoMenu.tsx (renamed from src/components/Form/Document/MetaInfoForm.tsx)20
-rw-r--r--src/components/Menu/Menu.scss (renamed from src/components/Menu/HomePageMenu.scss)4
-rw-r--r--src/components/Pages/BillingPage.tsx7
8 files changed, 126 insertions, 13 deletions
diff --git a/server/database/database.go b/server/database/database.go
index 2339d29..5e3e940 100644
--- a/server/database/database.go
+++ b/server/database/database.go
@@ -47,5 +47,13 @@ func InitDB() {
Email TEXT)`,
)
init_users.Exec()
+
+ init_invoices, _ := myDatabase.Prepare(
+ `CREATE TABLE IF NOT EXISTS Invoices
+ (id INTEGER PRIMARY KEY AUTOINCREMENT,
+ Data BLOB NOT NULL,
+ Created_on DATETIME)`,
+ )
+ init_invoices.Exec()
}
diff --git a/server/database/invoices.go b/server/database/invoices.go
new file mode 100644
index 0000000..f6e1a4c
--- /dev/null
+++ b/server/database/invoices.go
@@ -0,0 +1,70 @@
+/*
+ * 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
+*/
+
+// handles all Items related database functions
+
+package database
+
+import (
+ _ "github.com/mattn/go-sqlite3"
+)
+
+type Invoice struct {
+ ID int
+ Data string
+ CreatedON string
+}
+
+/*
+func GetAllItems() []Item {
+ var allItems []Item
+ rows, _ := myDatabase.Query(
+ `SELECT Model, Desc, UnitPrice, HSN, TotalGST, Category, Brand FROM Items`,
+ )
+
+ var (
+ model, desc, cat, brand string
+ unitPrice, GST float64
+ HSN string
+ )
+
+ for rows.Next() {
+ rows.Scan(&model, &desc, &unitPrice, &HSN, &GST, &cat, &brand)
+ allItems = append(allItems, Item{model, desc, unitPrice, HSN, GST, cat, brand})
+ }
+
+ return allItems
+}
+
+func RegisterItem(item Item) bool {
+ itemNames, _ := myDatabase.Query("SELECT model FROM Items")
+
+ register_item, _ := myDatabase.Prepare(
+ `INSERT INTO Items
+ (Model, Desc, UnitPrice, HSN, TotalGST, Category, Brand)
+ VALUES (?, ?, ?, ?, ?, ?, ?)`,
+ )
+
+ // check if item already exists
+ // probably this should be handled by front end
+ // so we can check this without need of using api
+ for itemNames.Next() {
+ var rModel string
+ itemNames.Scan(&rModel)
+ if rModel == item.Model {
+ return false
+ }
+ }
+
+ register_item.Exec(
+ item.Model, item.Description, item.UnitPrice, item.HSN,
+ item.TotalGST, item.Category, item.Brand,
+ )
+
+ return true
+}
+*/
diff --git a/src/components/Form/Document/DocumentInfoForm.tsx b/src/components/Form/Document/DocumentInfoForm.tsx
index 7f33046..6193233 100644
--- a/src/components/Form/Document/DocumentInfoForm.tsx
+++ b/src/components/Form/Document/DocumentInfoForm.tsx
@@ -6,7 +6,7 @@
* Copyright (c) 2021 Vidhu Kant Sharma
*/
-import React/*, { useState }*/ from "react";
+import React, { useState } from "react";
import { Person } from "./../../../interfaces";
import "./../Form.scss";
@@ -14,14 +14,33 @@ import SelectClientForm from "./../People/SelectClientForm";
interface Props {
savedPeople: Person[]
+ invoiceNumber: number
+ setInvoiceNumber: any
}
const DocumentInfoForm: React.FC<Props> = (props) => {
+ const [invoiceNumber, setInvoiceNumber] = useState<number>(props.invoiceNumber);
return (
<div className={"DocumentInfoForm"}>
<SelectClientForm
savedPeople={props.savedPeople}
/>
+
+ <div className={"documentInfoChild"}>
+ <label>
+ Invoice Number:
+ <input className={"smallInputBox"} type="number" step="0.0" value={invoiceNumber} onInput={
+ (event: React.FormEvent<HTMLInputElement>) => setInvoiceNumber(parseInt(event.currentTarget.value))
+ } required />
+ </label>
+
+ <label>
+ Invoice Date: <span>wtf do i do</span>
+ </label>
+ </div>
+
+ <div className={"documentInfoChild"}>
+ </div>
</div>
);
}
diff --git a/src/components/Form/Form.scss b/src/components/Form/Form.scss
index 6a9e747..a850309 100644
--- a/src/components/Form/Form.scss
+++ b/src/components/Form/Form.scss
@@ -120,6 +120,10 @@ input {
.DocumentInfoForm {
@include formPane();
+ flex-direction: row;
+ justify-content: space-between;
+ flex-wrap: wrap;
+
width: 100%;
min-height: 10rem;
margin-bottom: 1.5rem;
@@ -148,9 +152,6 @@ input {
font-size: $fontSize1;
}*/
-.MetaInfoForm {
- width: 60%;
-}
@media only screen and (max-device-width: 480px) {
.threePaneForm {
diff --git a/src/components/Menu/HomePageMenu.tsx b/src/components/Menu/HomePageMenu.tsx
index db0938a..645044e 100644
--- a/src/components/Menu/HomePageMenu.tsx
+++ b/src/components/Menu/HomePageMenu.tsx
@@ -8,7 +8,7 @@
import React from "react";
import { Link } from "react-router-dom";
-import "./HomePageMenu.scss";
+import "./Menu.scss";
const HomePageMenu: React.FC = () => {
return (
diff --git a/src/components/Form/Document/MetaInfoForm.tsx b/src/components/Menu/InvoiceInfoMenu.tsx
index bcddad6..2c56f7e 100644
--- a/src/components/Form/Document/MetaInfoForm.tsx
+++ b/src/components/Menu/InvoiceInfoMenu.tsx
@@ -7,15 +7,23 @@
*/
import React from "react";
-import "./../Form.scss";
+//import "./../Form.scss";
-const MetaInfoForm: React.FC = () => {
+const InvoiceInfoMenu: React.FC = () => {
return (
- <div className={"MetaInfoForm"}>
- <form>
- </form>
+ <div className={"InvoiceInfoMenu"}>
+ c
+ o
+ m
+ i
+ n
+ g
+ s
+ o
+ o
+ n
</div>
);
}
-export default MetaInfoForm;
+export default InvoiceInfoMenu;
diff --git a/src/components/Menu/HomePageMenu.scss b/src/components/Menu/Menu.scss
index bc46e08..cf9f7aa 100644
--- a/src/components/Menu/HomePageMenu.scss
+++ b/src/components/Menu/Menu.scss
@@ -19,3 +19,7 @@
.HomePageMenu .menuItem:hover {
color: $altFG;
}
+
+.InvoiceInfoMenu {
+ width: 60%;
+}
diff --git a/src/components/Pages/BillingPage.tsx b/src/components/Pages/BillingPage.tsx
index bf37bd3..c88435b 100644
--- a/src/components/Pages/BillingPage.tsx
+++ b/src/components/Pages/BillingPage.tsx
@@ -17,7 +17,7 @@ import RegisterItemForm from "./../Form/Items/RegisterItemForm";
import RegisterPersonForm from "./../Form/People/RegisterPersonForm";
import DocumentInfoForm from "./../Form/Document/DocumentInfoForm";
-import MetaInfoForm from "./../Form/Document/MetaInfoForm";
+import InvoiceInfoMenu from "./../Menu/InvoiceInfoMenu";
import ItemsDisplay from "./../Display/ItemsDisplay";
import SummaryDisplay from "./../Display/SummaryDisplay";
@@ -28,6 +28,7 @@ const BillingPage: React.FC = () => {
const [registerItemFormVisibility, setRegisterItemFormVisibility] = useState<boolean>(false);
const [registerPersonFormVisibility, setRegisterPersonFormVisibility] = useState<boolean>(false);
const [items, setItems] = useState<Item[]>([]);
+ const [invoiceNumber, setInvoiceNumber] = useState<number>(1234); // get data from backend
const getRegisteredItems = () =>
axios.get(`/api/items/get-all`)
@@ -70,6 +71,8 @@ const BillingPage: React.FC = () => {
<DocumentInfoForm
savedPeople={savedPeople}
+ invoiceNumber={invoiceNumber}
+ setInvoiceNumber={setInvoiceNumber}
/>
<AddNewItemForm
@@ -86,7 +89,7 @@ const BillingPage: React.FC = () => {
/>
<div className={"BillingPageFlex"}>
- <MetaInfoForm/>
+ <InvoiceInfoMenu/>
<SummaryDisplay items={items}/>
</div>
</>