aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/classes/invoice.js37
-rw-r--r--src/components/editors/invoice-headers-editor.js76
-rw-r--r--src/components/editors/scss/invoice-headers.scss59
-rw-r--r--src/views/invoice/new.js12
4 files changed, 172 insertions, 12 deletions
diff --git a/src/classes/invoice.js b/src/classes/invoice.js
new file mode 100644
index 0000000..1032b47
--- /dev/null
+++ b/src/classes/invoice.js
@@ -0,0 +1,37 @@
+/* OpenBills-web - Web based libre billing software
+ * Copyright (C) 2022 Vidhu Kant Sharma <vidhukant@vidhukant.xyz>
+
+ * 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/>.
+ */
+
+//import axios from "axios";
+
+export class Transporter {
+ constructor() {
+ this.Id = null;
+ this.Name = "";
+ this.GSTIN = "";
+ this.TransporterId = "";
+ }
+}
+
+export class Transport {
+ constructor() {
+ this.Id = null;
+ this.Transporter = new Transporter();
+ this.VehicleNum = "";
+ this.Note = "";
+ this.TransportMethod = "";
+ }
+}
diff --git a/src/components/editors/invoice-headers-editor.js b/src/components/editors/invoice-headers-editor.js
index f71b319..4ab2dcc 100644
--- a/src/components/editors/invoice-headers-editor.js
+++ b/src/components/editors/invoice-headers-editor.js
@@ -15,25 +15,87 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
-import './scss/item-editor.scss';
+import './scss/invoice-headers.scss';
import { useState, useEffect } from 'react';
-const InvoiceHeadersEditor = ({roundOff, setRoundOff}) => {
+const InvoiceHeadersEditor = ({roundOff, setRoundOff, transport, setTransport, transporter, setTransporter}) => {
+ const handleTransportInput = e => {
+ const { name, value } = e.target;
+ setTransport(prev => ({
+ ...prev,
+ [name]: value
+ }));
+ }
+
+ const handleTransporterInput = e => {
+ const { name, value } = e.target;
+ setTransporter(prev => ({
+ ...prev,
+ [name]: value
+ }));
+ }
return (
- <>
+ <div className={"invoice-headers-editor"}>
<h1>Invoice Options:</h1>
- <form onSubmit={(e) => e.preventDefault()}>
- <label>
+ <div>
+ <label className={"checkbox-label"}>
<input
type="checkbox"
onChange={() => setRoundOff(prev => !prev)}
checked={roundOff}/>
Round off the Total
</label>
- </form>
- </>
+
+ <label>
+ Apply Discount On All Items:
+ <input
+ className={"small"}
+ type="number"
+ min="0"
+ max="100"
+ step="0.1" />
+ </label>
+
+ <p><strong>Transport Details</strong></p>
+
+ <label>
+ Vehicle Number:
+ <input
+ type="text"/>
+ </label>
+
+ <label>
+ Transport Method:
+ <input
+ type="text"/>
+ </label>
+
+ <label>
+ Transporter Name:
+ <input
+ type="text"/>
+ </label>
+
+ <label>
+ Transporter GSTIN:
+ <input
+ type="text"/>
+ </label>
+
+ <label>
+ Transporter ID:
+ <input
+ type="text"/>
+ </label>
+
+ <label>
+ Note:
+ <textarea />
+ </label>
+ </div>
+ </div>
)
}
diff --git a/src/components/editors/scss/invoice-headers.scss b/src/components/editors/scss/invoice-headers.scss
new file mode 100644
index 0000000..ade428b
--- /dev/null
+++ b/src/components/editors/scss/invoice-headers.scss
@@ -0,0 +1,59 @@
+/* OpenBills-web - Web based libre billing software
+ * Copyright (C) 2022 Vidhu Kant Sharma <vidhukant@vidhukant.xyz>
+
+ * 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/>.
+ */
+
+@import "editor";
+@import "colors";
+
+.invoice-headers-editor {
+ .checkbox-label {
+ border: none;
+ max-width: none;
+ justify-content: left;
+ input {
+ display: inline;
+ width: 1.4rem;
+ }
+ }
+ @include label;
+ label {
+ width: 20rem;
+ max-width: auto;
+ min-width: auto;
+ border: none;
+ input {
+ width: 8rem;
+ }
+ input.small {
+ width: 3rem;
+ }
+ }
+
+ // hide up/down arrows from number input
+ input::-webkit-outer-spin-button,
+ input::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+ }
+ input[type=number] {
+ -moz-appearance: textfield;
+ }
+
+ strong {
+ color: $primaryAccentColor;
+ font-size: 1.2rem;
+ }
+}
diff --git a/src/views/invoice/new.js b/src/views/invoice/new.js
index cacf8d3..717a772 100644
--- a/src/views/invoice/new.js
+++ b/src/views/invoice/new.js
@@ -24,6 +24,7 @@ import InvoiceSummary from '../../components/tables/invoice-summary';
import HeadersEditor from '../../components/editors/invoice-headers-editor';
import { InvoiceClient } from '../../classes/client';
+import { Transport, Transporter } from '../../classes/invoice';
import { calcSum, currency } from '../../classes/item';
import { useState, useEffect } from 'react';
@@ -43,6 +44,9 @@ const NewInvoicePage = () => {
Quantity: currency(0)
});
+ const [transporter, setTransporter] = useState(new Transporter());
+ const [transport, setTransport] = useState(new Transport());
+
useEffect(() => setShippingAddressId(-1), [client]);
useEffect(() => setSum(calcSum(items)), [items]);
@@ -63,11 +67,9 @@ const NewInvoicePage = () => {
isInterstate={isInterstate}
sum={sum} />
<div className={"two-col"}>
- <div>
- <HeadersEditor
- roundOff={roundOffTotal}
- setRoundOff={setRoundOffTotal} />
- </div>
+ <HeadersEditor
+ roundOff={roundOffTotal}
+ setRoundOff={setRoundOffTotal} />
<div>
<InvoiceSummary
sum={sum}