This commit is contained in:
seb
2026-11-03 06:46:36 +01:00
parent 9841002398
commit 863422df8e
20 changed files with 300 additions and 82 deletions

View File

@@ -23,6 +23,7 @@ export default class CompanySettingsPanel extends Component {
super(props);
const current = companyAutomat.state.current;
this.state = {
isAdmin: current?.role === 'admin',
status: current ? 'ready' : 'loading',
busy: false,
error: null,
@@ -42,6 +43,9 @@ export default class CompanySettingsPanel extends Component {
if (state.current && this.state.status === 'loading') {
this.syncFormFromCompany(state.current);
}
return {
isAdmin: state.current?.role === 'admin',
};
});
if (companyAutomat.state.current) {
this.syncFormFromCompany(companyAutomat.state.current);
@@ -86,6 +90,7 @@ export default class CompanySettingsPanel extends Component {
async handleSubmit(event) {
event?.preventDefault?.();
if (!this.state.isAdmin) return;
const { name, iso639, taxrate, reducedtaxrate } = this.state;
const parsedTaxrate = parseTaxRate(taxrate);
const parsedReducedtaxrate = parseTaxRate(reducedtaxrate);
@@ -123,7 +128,7 @@ export default class CompanySettingsPanel extends Component {
}
render() {
const { status, busy, error, name, iso639, taxrate, reducedtaxrate } = this.state;
const { isAdmin, status, busy, error, name, iso639, taxrate, reducedtaxrate } = this.state;
if (status === 'loading' && !name) {
return (
@@ -146,6 +151,7 @@ export default class CompanySettingsPanel extends Component {
taxrate.trim() !== this._initial.taxrate.trim() ||
reducedtaxrate.trim() !== this._initial.reducedtaxrate.trim());
const canSave =
isAdmin &&
isDirty &&
name.trim() !== '' &&
ISO639_OPTIONS.includes(iso639) &&
@@ -175,7 +181,7 @@ export default class CompanySettingsPanel extends Component {
size="small"
label="Name"
value={name}
disabled={busy}
disabled={!isAdmin || busy}
onChange={(nextName) => this.setState({ name: nextName })}
autoComplete="off"
autoFocus
@@ -188,7 +194,7 @@ export default class CompanySettingsPanel extends Component {
required
size="small"
value={iso639}
disabled={busy}
disabled={!isAdmin || busy}
onChange={(_event, value) => {
if (value) this.setState({ iso639: value });
}}
@@ -206,7 +212,7 @@ export default class CompanySettingsPanel extends Component {
type="number"
label="Normalsatz"
value={taxrate}
disabled={busy}
disabled={!isAdmin || busy}
onChange={(e) => this.setState({ taxrate: e.target.value })}
error={taxrate !== '' && parsedTaxrate == null}
slotProps={{
@@ -223,7 +229,7 @@ export default class CompanySettingsPanel extends Component {
type="number"
label="Ermäßigter Satz"
value={reducedtaxrate}
disabled={busy}
disabled={!isAdmin || busy}
onChange={(e) => this.setState({ reducedtaxrate: e.target.value })}
error={reducedtaxrate !== '' && parsedReducedtaxrate == null}
slotProps={{
@@ -240,7 +246,7 @@ export default class CompanySettingsPanel extends Component {
type="submit"
variant="contained"
color={canSave ? 'success' : 'inherit'}
disabled={busy || !canSave}
disabled={!isAdmin || busy || !canSave}
startIcon={busy ? <CircularProgress size={16} color="inherit" /> : null}
sx={
canSave