Kundenart in der Kunden-Uebersicht und Steuernummer in den Finanz-Einstellungen (Helfer mit Tests)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
99ab4bd47b
commit
674cce26f0
4 files changed
+185
-6
No files matched your search
@@ -12,6 +12,7 @@ import { useWebsiteProjects } from '../hooks/useWebsiteProjects'
|
||||
import { customerTabs, resolveCustomerTab } from '../lib/customerTabs'
|
||||
import { isInvoiceReady, setCustomerArchived, upgradeToCustomer, markLost, reopenAsLead } from '../lib/leads'
|
||||
import { lastRejection } from '../lib/leadDuplicates'
|
||||
import { KUNDENART_OPTIONEN, KUNDENART_HINWEIS, kundenartAenderung } from '../lib/kundenFelder'
|
||||
import { customerStage, isArchived, customerBadges, customerEyebrow, customerTitle } from '../lib/customerList'
|
||||
import { ticketPath, ticketRef } from '../lib/ticketRoutes'
|
||||
import { ticketNumber } from '../lib/ticketView'
|
||||
@@ -154,11 +155,15 @@ function OverviewTab({ customer, stage, onSaved }) {
|
||||
notes: customer.notes || '',
|
||||
importantCustomer: !!customer.importantCustomer,
|
||||
})
|
||||
const [kundenart, setKundenart] = useState(customer.kundenart || '')
|
||||
const [busy, setBusy] = useState(false)
|
||||
const [msg, setMsg] = useState(null) // { tone: 'ok' | 'err' | 'warn', text }
|
||||
const [showLost, setShowLost] = useState(false)
|
||||
const { user, employee } = useAuth()
|
||||
|
||||
// Die Kundenart geht nur ins Dokument, wenn sie geaendert wurde (kein Fehler bei noch nicht angelegtem Attribut)
|
||||
const felder = () => ({ ...form, ...kundenartAenderung(kundenart, customer.kundenart) })
|
||||
|
||||
const ready = isInvoiceReady({ ...customer, ...form })
|
||||
|
||||
// Absage: ungespeicherte Notizen gehen mit, damit der Vermerk nichts ueberschreibt
|
||||
@@ -182,7 +187,7 @@ function OverviewTab({ customer, stage, onSaved }) {
|
||||
const save = async () => {
|
||||
setBusy(true); setMsg(null)
|
||||
try {
|
||||
await databases.updateDocument(DATABASE_ID, COLLECTIONS.CUSTOMERS, customer.$id, form)
|
||||
await databases.updateDocument(DATABASE_ID, COLLECTIONS.CUSTOMERS, customer.$id, felder())
|
||||
setMsg({ tone: 'ok', text: 'Gespeichert' })
|
||||
onSaved()
|
||||
} catch (err) {
|
||||
@@ -194,7 +199,7 @@ function OverviewTab({ customer, stage, onSaved }) {
|
||||
if (!ready) { setMsg({ tone: 'warn', text: 'Bitte zuerst alle Pflichtfelder (Unternehmen, E-Mail, Strasse, PLZ, Stadt) ausfuellen.' }); return }
|
||||
setBusy(true); setMsg(null)
|
||||
try {
|
||||
await upgradeToCustomer(customer, form)
|
||||
await upgradeToCustomer(customer, felder())
|
||||
setMsg({ tone: 'ok', text: 'Zum festen Kunden gemacht.' })
|
||||
onSaved()
|
||||
} catch (err) {
|
||||
@@ -249,6 +254,13 @@ function OverviewTab({ customer, stage, onSaved }) {
|
||||
<Card title="Rechnungsdaten">
|
||||
{!ready && <div className="kunde-hinweis"><Badge tone="warn">Adresse unvollständig</Badge></div>}
|
||||
<dl className="kv kunde-kv">
|
||||
<dt><label htmlFor="kunde-kundenart">Kundenart</label></dt>
|
||||
<dd>
|
||||
<select id="kunde-kundenart" className="select" value={kundenart} onChange={(e) => setKundenart(e.target.value)}>
|
||||
{KUNDENART_OPTIONEN.map((o) => <option key={o.value} value={o.value}>{o.label}</option>)}
|
||||
</select>
|
||||
<div className="hint">{KUNDENART_HINWEIS}</div>
|
||||
</dd>
|
||||
<dt><label htmlFor="kunde-street">Strasse + Nr.</label></dt>
|
||||
<dd><input id="kunde-street" className="input" value={form.street} onChange={(e) => setForm({ ...form, street: e.target.value })} /></dd>
|
||||
<dt><label htmlFor="kunde-postal">PLZ</label></dt>
|
||||
|
||||
Reference in new issue
Block a user