feat: Add bank account details to admin profile
- Add accountHolder, bankName, iban, bic fields to AppUser domain - Update UserOption, UserRow, UserMutation records in CatalogService - Update all AppUser constructor calls to include new fields - Add bank fields to frontend UserOption and UserRow types - Add bank account form section to AdminProfilePage
This commit is contained in:
@@ -62,6 +62,10 @@ export interface UserOption {
|
||||
city: string | null;
|
||||
email: string | null;
|
||||
phoneNumber: string | null;
|
||||
accountHolder: string | null;
|
||||
bankName: string | null;
|
||||
iban: string | null;
|
||||
bic: string | null;
|
||||
role: UserRole;
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,10 @@ export default function AdminProfilePage() {
|
||||
city: "",
|
||||
email: "",
|
||||
phoneNumber: "",
|
||||
accountHolder: "",
|
||||
bankName: "",
|
||||
iban: "",
|
||||
bic: "",
|
||||
});
|
||||
|
||||
// Load current user data
|
||||
@@ -36,6 +40,10 @@ export default function AdminProfilePage() {
|
||||
city: currentUser.city || "",
|
||||
email: currentUser.email || "",
|
||||
phoneNumber: currentUser.phoneNumber || "",
|
||||
accountHolder: currentUser.accountHolder || "",
|
||||
bankName: currentUser.bankName || "",
|
||||
iban: currentUser.iban || "",
|
||||
bic: currentUser.bic || "",
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -77,6 +85,10 @@ export default function AdminProfilePage() {
|
||||
city: formData.city.trim() || null,
|
||||
email: formData.email.trim(),
|
||||
phoneNumber: formData.phoneNumber.trim() || null,
|
||||
accountHolder: formData.accountHolder.trim() || null,
|
||||
bankName: formData.bankName.trim() || null,
|
||||
iban: formData.iban.trim() || null,
|
||||
bic: formData.bic.trim() || null,
|
||||
active: true,
|
||||
});
|
||||
|
||||
@@ -92,6 +104,10 @@ export default function AdminProfilePage() {
|
||||
city: response.city,
|
||||
email: response.email,
|
||||
phoneNumber: response.phoneNumber,
|
||||
accountHolder: response.accountHolder,
|
||||
bankName: response.bankName,
|
||||
iban: response.iban,
|
||||
bic: response.bic,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -122,7 +138,7 @@ export default function AdminProfilePage() {
|
||||
<p className="eyebrow">Stammdaten</p>
|
||||
<h3>Meine Stammdaten</h3>
|
||||
<p className="muted-text">
|
||||
Verwalten Sie hier Ihre persönlichen und Unternehmensdaten.
|
||||
Verwalten Sie hier Ihre persönlichen, Unternehmens- und Bankdaten.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
@@ -140,12 +156,12 @@ export default function AdminProfilePage() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{/* Stammdaten-Formular */}
|
||||
{/* Persönliche Daten */}
|
||||
<section className="section-card">
|
||||
<div className="section-card__header">
|
||||
<div>
|
||||
<p className="eyebrow">Profil</p>
|
||||
<h3>Stammdaten bearbeiten</h3>
|
||||
<h3>Persönliche Daten</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -255,19 +271,84 @@ export default function AdminProfilePage() {
|
||||
disabled={saving}
|
||||
/>
|
||||
</label>
|
||||
|
||||
<div className="field" style={{ gridColumn: "1 / -1" }}>
|
||||
<button
|
||||
type="submit"
|
||||
className="accent-button"
|
||||
disabled={saving}
|
||||
>
|
||||
{saving ? "Wird gespeichert..." : "Stammdaten speichern"}
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
{/* Bankverbindung */}
|
||||
<section className="section-card">
|
||||
<div className="section-card__header">
|
||||
<div>
|
||||
<p className="eyebrow">Zahlung</p>
|
||||
<h3>Bankverbindung</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="field-grid field-grid--2col">
|
||||
<label className="field">
|
||||
<span>Kontoinhaber</span>
|
||||
<input
|
||||
type="text"
|
||||
value={formData.accountHolder}
|
||||
onChange={(e) =>
|
||||
setFormData({ ...formData, accountHolder: e.target.value })
|
||||
}
|
||||
placeholder="Name des Kontoinhabers"
|
||||
disabled={saving}
|
||||
/>
|
||||
</label>
|
||||
|
||||
<label className="field">
|
||||
<span>Bankname</span>
|
||||
<input
|
||||
type="text"
|
||||
value={formData.bankName}
|
||||
onChange={(e) =>
|
||||
setFormData({ ...formData, bankName: e.target.value })
|
||||
}
|
||||
placeholder="Name der Bank"
|
||||
disabled={saving}
|
||||
/>
|
||||
</label>
|
||||
|
||||
<label className="field">
|
||||
<span>IBAN</span>
|
||||
<input
|
||||
type="text"
|
||||
value={formData.iban}
|
||||
onChange={(e) =>
|
||||
setFormData({ ...formData, iban: e.target.value })
|
||||
}
|
||||
placeholder="DE12 3456 7890 1234 5678 90"
|
||||
disabled={saving}
|
||||
/>
|
||||
</label>
|
||||
|
||||
<label className="field">
|
||||
<span>BIC</span>
|
||||
<input
|
||||
type="text"
|
||||
value={formData.bic}
|
||||
onChange={(e) =>
|
||||
setFormData({ ...formData, bic: e.target.value })
|
||||
}
|
||||
placeholder="ABCDEFGHXXX"
|
||||
disabled={saving}
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div className="field" style={{ marginTop: "1rem" }}>
|
||||
<button
|
||||
type="button"
|
||||
className="accent-button"
|
||||
onClick={handleSubmit}
|
||||
disabled={saving}
|
||||
>
|
||||
{saving ? "Wird gespeichert..." : "Stammdaten speichern"}
|
||||
</button>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
{/* Info-Box */}
|
||||
<section className="section-card">
|
||||
<div className="info-panel">
|
||||
|
||||
Reference in New Issue
Block a user