/* * 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 */ import React, { useState } from "react"; import "./../Form.scss"; import { Item } from "../../../interfaces"; interface props { savedItems: Item[] addItem: (item: Item) => void defGSTValue: number registerItemFormVisibility: any registerPersonFormVisibility: any } const AddNewItemForm: React.FC = (props) => { const [itemNameValue, setItemNameValue] = useState(""); const [itemDescValue, setItemDescValue] = useState(""); const [itemPriceValue, setItemPriceValue] = useState(0.00); const [itemDiscountPercentage, setItemDiscountPercentage] = useState(0.00); const [itemGSTPercentage, setItemGSTValue] = useState(props.defGSTValue); const [itemQTYValue, setItemQTYValue] = useState(1); const [itemHSNValue, setItemHSNValue] = useState(""); // to be handled by DocumentInfo // check if client is in same state // and apply cgst+sgst or igst accordingly const inState: boolean = true; const enterItemNamePrompt: string = "start typing here"; const registerItemPrompt: string = "add new"; const emptyItemNames: string[] = [enterItemNamePrompt, registerItemPrompt, ""]; // set description and price if match found in DB const applyItemInfo = (i: any) => { setItemDescValue(i.Description); setItemPriceValue(i.UnitPrice); setItemHSNValue(i.HSN); setItemGSTValue(i.TotalGST); } // check the item name value and do stuff accordingly const setItemInfo = (itemName: string) => (props.savedItems === null || itemName === registerItemPrompt) ? props.registerItemFormVisibility(true) : props.savedItems.some((i) => itemName === i.Model.toLowerCase() && applyItemInfo(i)) const resetAllValues = () => { setItemNameValue(""); setItemDescValue(""); setItemQTYValue(1); setItemPriceValue(1); setItemDiscountPercentage(0); setItemHSNValue(""); setItemGSTValue(props.defGSTValue); } return (
{ event.preventDefault(); const totalValue: number = itemPriceValue * itemQTYValue; // the values below are being rounded to two decimal places const discountValue: number = parseFloat(((itemDiscountPercentage / 100) * totalValue).toFixed(2)) const totalGSTValue: number = parseFloat(((itemGSTPercentage / 100) * totalValue).toFixed(2)) const newInvoiceItem: Item = { Model: itemNameValue, Description: itemDescValue, Quantity: itemQTYValue, UnitPrice: itemPriceValue, TotalValue: totalValue, Discount: itemDiscountPercentage, DiscountValue: discountValue, HSN: itemHSNValue, TotalGST: itemGSTPercentage, TotalGSTValue: totalGSTValue, // this also checks if igst applies or not SGST: inState && totalGSTValue / 2, CGST: inState && totalGSTValue / 2, IGST: inState || totalGSTValue } props.addItem(newInvoiceItem); resetAllValues(); } }>
props.registerPersonFormVisibility(true)} /> props.registerItemFormVisibility(true)} />
); } export default AddNewItemForm;