Files
Umbrella/frontend/src/routes/company/Editor.svelte
2026-04-09 09:12:57 +02:00

105 lines
3.6 KiB
Svelte
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<script>
import {api, post} from '../../urls.svelte'
import { error, yikes } from '../../warn.svelte';
import {t} from '../../translations.svelte';
import LineEditor from '../../Components/LineEditor.svelte';
import Multiline from '../../Components/MultilineEditor.svelte';
import Users from '../../Components/UserSelector.svelte'
let caption = $state(t('save_object',{object:t('users')}));
let { company } = $props();
let btnEnabled = $state(true);
let memberCopy = $state(JSON.parse(JSON.stringify(company.members)));
async function getCandidates(text){
const url = api('user/search');
const resp = await post(url,text);
if (resp.ok){
yikes();
const input = await resp.json();
return Object.values(input).map(user => { return {...user, display: user.name}});
} else {
error(resp);
return {};
}
}
async function patch(changeSet){
const url = api(`company/${company.id}`)
const resp = await fetch(url,{
credentials : 'include',
method : 'PATCH',
body : JSON.stringify(changeSet)
});
if (resp.ok){
const patched = await resp.json();
for (let key of Object.keys(patched)) company[key] = patched[key];
return true;
}
error(resp);
return false;
}
async function saveUsers(){
btnEnabled = false;
caption = t('data_sent');
const members = Object.keys(memberCopy).map(Number);
company.members = {};
var success = await patch({members:members});
if (success) caption = t('saved');
btnEnabled = true;
}
</script>
<svelte:head>
<title>Umbrella {t('company')}: {company?.name}</title>
</svelte:head>
<fieldset>
{#if company}
<legend>{t('edit_object',{object:company.name})}</legend>
<fieldset>
<legend>{t('name')}</legend>
<LineEditor bind:value={company.name} editable={true} onSet={val => patch({name:val})} />
</fieldset>
<fieldset>
<legend>{t('address')}</legend>
<Multiline bind:value={company.address} editable={true} onSet={val => patch({address:val})} />
</fieldset>
<fieldset>
<legend>{t('email')}</legend>
<LineEditor bind:value={company.email} editable={true} onSet={val => patch({email:val})} />
</fieldset>
<fieldset>
<legend>{t('phone')}</legend>
<LineEditor bind:value={company.phone} editable={true} onSet={val => patch({phone:val})} />
</fieldset>
<fieldset>
<legend>{t('bank_account')}</legend>
<Multiline bind:value={company.bank_account} editable={true} onSet={val => patch({bank_account:val})} />
</fieldset>
<fieldset>
<legend>{t('local_court')}</legend>
<LineEditor bind:value={company.court} editable={true} onSet={val => patch({court:val})} />
</fieldset>
<fieldset>
<legend>{t('tax_id')}</legend>
<LineEditor bind:value={company.tax_number} editable={true} onSet={val => patch({tax_number:val})} />
</fieldset>
<fieldset>
<legend>{t('last_customer_number')}</legend>
<LineEditor bind:value={company.last_customer_number} editable={true} onSet={val => patch({last_customer_number:val})} />
</fieldset>
<fieldset>
<legend>{t('customer_number_prefix')}</legend>
<LineEditor bind:value={company.customer_number_prefix} editable={true} onSet={val => patch({customer_number_prefix:val})} />
</fieldset>
<fieldset>
<legend>{t('members')}</legend>
<Users bind:users={memberCopy} {getCandidates} />
<button onclick={saveUsers} disabled={!btnEnabled} >{caption}</button>
</fieldset>
{/if}
</fieldset>