mirror of
https://github.com/D4M13N-D3V/comissions-app-ui.git
synced 2025-03-14 08:15:08 +00:00
95 lines
2.8 KiB
TypeScript
95 lines
2.8 KiB
TypeScript
// ** MUI Imports
|
|
import Paper from '@mui/material/Paper'
|
|
import Table from '@mui/material/Table'
|
|
import TableRow from '@mui/material/TableRow'
|
|
import TableHead from '@mui/material/TableHead'
|
|
import TableBody from '@mui/material/TableBody'
|
|
import TableCell from '@mui/material/TableCell'
|
|
import TableContainer from '@mui/material/TableContainer'
|
|
|
|
interface Row {
|
|
desc: string
|
|
qty: number
|
|
unit: number
|
|
price: number
|
|
}
|
|
|
|
const TAX_RATE = 0.07
|
|
|
|
const ccyFormat = (num: number) => {
|
|
return `${num.toFixed(2)}`
|
|
}
|
|
|
|
const priceRow = (qty: number, unit: number) => {
|
|
return qty * unit
|
|
}
|
|
|
|
const createRow = (desc: string, qty: number, unit: number) => {
|
|
const price = priceRow(qty, unit)
|
|
|
|
return { desc, qty, unit, price }
|
|
}
|
|
|
|
const subtotal = (items: readonly Row[]) => {
|
|
return items.map(({ price }) => price).reduce((sum, i) => sum + i, 0)
|
|
}
|
|
|
|
const rows = [
|
|
createRow('Paperclips (Box)', 100, 1.15),
|
|
createRow('Paper (Case)', 10, 45.99),
|
|
createRow('Waste Basket', 2, 17.99)
|
|
]
|
|
|
|
const invoiceSubtotal = subtotal(rows)
|
|
const invoiceTaxes = TAX_RATE * invoiceSubtotal
|
|
const invoiceTotal = invoiceTaxes + invoiceSubtotal
|
|
|
|
const TableSpanning = () => {
|
|
return (
|
|
<TableContainer component={Paper}>
|
|
<Table sx={{ minWidth: 700 }} aria-label='spanning table'>
|
|
<TableHead>
|
|
<TableRow>
|
|
<TableCell align='center' colSpan={3}>
|
|
Details
|
|
</TableCell>
|
|
<TableCell align='right'>Price</TableCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableCell>Desc</TableCell>
|
|
<TableCell align='right'>Qty.</TableCell>
|
|
<TableCell align='right'>Unit</TableCell>
|
|
<TableCell align='right'>Sum</TableCell>
|
|
</TableRow>
|
|
</TableHead>
|
|
<TableBody>
|
|
{rows.map(row => (
|
|
<TableRow key={row.desc}>
|
|
<TableCell>{row.desc}</TableCell>
|
|
<TableCell align='right'>{row.qty}</TableCell>
|
|
<TableCell align='right'>{row.unit}</TableCell>
|
|
<TableCell align='right'>{ccyFormat(row.price)}</TableCell>
|
|
</TableRow>
|
|
))}
|
|
<TableRow>
|
|
<TableCell rowSpan={3} />
|
|
<TableCell colSpan={2}>Subtotal</TableCell>
|
|
<TableCell align='right'>{ccyFormat(invoiceSubtotal)}</TableCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableCell>Tax</TableCell>
|
|
<TableCell align='right'>{`${(TAX_RATE * 100).toFixed(0)} %`}</TableCell>
|
|
<TableCell align='right'>{ccyFormat(invoiceTaxes)}</TableCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableCell colSpan={2}>Total</TableCell>
|
|
<TableCell align='right'>{ccyFormat(invoiceTotal)}</TableCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>
|
|
</TableContainer>
|
|
)
|
|
}
|
|
|
|
export default TableSpanning
|