diff --git a/assets/icons/taxrateicon.svg b/assets/icons/taxrateicon.svg new file mode 100644 index 0000000..82d57cc --- /dev/null +++ b/assets/icons/taxrateicon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/icons/taxrecordicon.svg b/assets/icons/taxrecordicon.svg new file mode 100644 index 0000000..cf187c9 --- /dev/null +++ b/assets/icons/taxrecordicon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/assets/icons/taxruleicon.svg b/assets/icons/taxruleicon.svg new file mode 100644 index 0000000..4ff9aa2 --- /dev/null +++ b/assets/icons/taxruleicon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/stylesheets/App.css b/assets/stylesheets/App.css index 0dae3b8..6a3861b 100644 --- a/assets/stylesheets/App.css +++ b/assets/stylesheets/App.css @@ -347,6 +347,26 @@ body { } .ant-select-selection-item .ant-tag, -.ant-select-tree-title .ant-tag { +.ant-select-tree-title .object-display-tag { background: transparent !important; + padding: 0; + margin-right: 1px !important; + padding-top: 3px; +} + +.ant-select-outlined.ant-select-multiple + .ant-select-selection-item + .object-display-tag { + padding-top: 0px; +} + +.ant-select-outlined.ant-select-multiple + .ant-select-selection-item + .object-display-tag + .ant-flex { + margin-top: -0.75px; +} + +.object-info-descriptions table { + table-layout: fixed !important; } diff --git a/src/components/Dashboard/Management/ManagementSidebar.jsx b/src/components/Dashboard/Management/ManagementSidebar.jsx index f0248c8..4345eae 100644 --- a/src/components/Dashboard/Management/ManagementSidebar.jsx +++ b/src/components/Dashboard/Management/ManagementSidebar.jsx @@ -19,6 +19,8 @@ import DocumentJobIcon from '../../Icons/DocumentJobIcon' import FileIcon from '../../Icons/FileIcon' import CourierIcon from '../../Icons/CourierIcon' import CourierServiceIcon from '../../Icons/CourierServiceIcon' +import TaxRateIcon from '../../Icons/TaxRateIcon' +import TaxRecordIcon from '../../Icons/TaxRecordIcon' const items = [ { @@ -65,6 +67,19 @@ const items = [ path: '/dashboard/management/courierservices' }, { type: 'divider' }, + { + key: 'taxRates', + icon: , + label: 'Tax Rates', + path: '/dashboard/management/taxrates' + }, + { + key: 'taxRecords', + icon: , + label: 'Tax Records', + path: '/dashboard/management/taxrecords' + }, + { type: 'divider' }, { key: 'noteTypes', icon: , @@ -156,6 +171,8 @@ const routeKeyMap = { '/dashboard/management/vendors': 'vendors', '/dashboard/management/couriers': 'couriers', '/dashboard/management/courierservices': 'courierServices', + '/dashboard/management/taxrates': 'taxRates', + '/dashboard/management/taxrecords': 'taxRecords', '/dashboard/management/materials': 'materials', '/dashboard/management/notetypes': 'noteTypes', '/dashboard/management/settings': 'settings', diff --git a/src/components/Dashboard/Management/Parts/NewPart.jsx b/src/components/Dashboard/Management/Parts/NewPart.jsx index 0fae248..9a71a7c 100644 --- a/src/components/Dashboard/Management/Parts/NewPart.jsx +++ b/src/components/Dashboard/Management/Parts/NewPart.jsx @@ -25,8 +25,12 @@ const NewPart = ({ onOk }) => { visibleProperties={{ file: false, priceMode: false, - globalPricing: false, - amount: false, + cost: false, + costTaxRate: false, + costWithTax: false, + price: false, + priceTaxRate: false, + priceWithTax: false, margin: false }} /> @@ -45,9 +49,13 @@ const NewPart = ({ onOk }) => { objectData={objectData} visibleProperties={{ priceMode: true, - globalPricing: true, - amount: true, - margin: true + margin: true, + cost: true, + costTaxRate: true, + costWithTax: true, + price: true, + priceTaxRate: true, + priceWithTax: true }} /> ) diff --git a/src/components/Dashboard/Management/TaxRates.jsx b/src/components/Dashboard/Management/TaxRates.jsx new file mode 100644 index 0000000..ac47674 --- /dev/null +++ b/src/components/Dashboard/Management/TaxRates.jsx @@ -0,0 +1,97 @@ +import { useState, useRef } from 'react' +import { Button, Flex, Space, Modal, Dropdown, message } from 'antd' +import NewTaxRate from './TaxRates/NewTaxRate' +import ObjectTable from '../common/ObjectTable' +import PlusIcon from '../../Icons/PlusIcon' +import ReloadIcon from '../../Icons/ReloadIcon' +import useColumnVisibility from '../hooks/useColumnVisibility' +import GridIcon from '../../Icons/GridIcon' +import ListIcon from '../../Icons/ListIcon' +import useViewMode from '../hooks/useViewMode' +import ColumnViewButton from '../common/ColumnViewButton' + +const TaxRates = () => { + const [messageApi, contextHolder] = message.useMessage() + const [newTaxRateOpen, setNewTaxRateOpen] = useState(false) + const tableRef = useRef() + + const [viewMode, setViewMode] = useViewMode('taxRate') + + const [columnVisibility, setColumnVisibility] = useColumnVisibility('taxRate') + + const actionItems = { + items: [ + { + label: 'New Tax Rate', + key: 'newTaxRate', + icon: + }, + { type: 'divider' }, + { + label: 'Reload List', + key: 'reloadList', + icon: + } + ], + onClick: ({ key }) => { + if (key === 'reloadList') { + tableRef.current?.reload() + } else if (key === 'newTaxRate') { + setNewTaxRateOpen(true) + } + } + } + + return ( + <> + + {contextHolder} + + + + + + + + + + + + + +