Bei Firmenanlage (Registrierung + Betreiber-Firmenanlage) müssen jetzt Adresse (Straße, PLZ, Ort, Land) und Abrechnungsdaten (Rechnungsemail, optional USt-IdNr.) erfasst werden, nicht nur der Firmenname (Migration 0023). USt-IdNr. bewusst optional - Kleinunternehmer nach §19 UStG haben keine. Neue Seite /verwaltung/firma (admin-only) zum Einsehen/ Nachtragen für bestehende Firmen. store.CreateAccount nimmt jetzt ein AccountInput statt nur einen Namen entgegen (Signaturänderung betrifft ~20 Testaufrufe, mechanisch umgestellt). register.html/ betreiber_account_neu.html auf form-card/form-grid umgestellt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
75 lines
2.7 KiB
Go
75 lines
2.7 KiB
Go
// Firmendaten (Migration 0023) — Adress- und Abrechnungsdaten des
|
|
// eigenen Mandanten einsehen/pflegen. Bei der Neuanlage (Registrierung,
|
|
// Betreiber-Firmenanlage) sind diese Felder Pflicht; bestehende, davor
|
|
// angelegte Accounts können sie hier nachtragen.
|
|
package web
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/netcell-it/deklarix/internal/store"
|
|
)
|
|
|
|
type firmendatenData struct {
|
|
Title string
|
|
Nav navData
|
|
Name string
|
|
Strasse string
|
|
PLZ string
|
|
Ort string
|
|
Land string
|
|
UStID string
|
|
Rechnungsemail string
|
|
Error string
|
|
Gespeichert bool
|
|
}
|
|
|
|
func (s *Server) handleFirmendaten(w http.ResponseWriter, r *http.Request) {
|
|
acc, err := s.store.GetAccount(r.Context(), currentUser(r).AccountID)
|
|
if err != nil {
|
|
http.Error(w, "Firmendaten konnten nicht geladen werden: "+err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
data := firmendatenData{
|
|
Title: "Firmendaten", Nav: navFor(r),
|
|
Name: acc.Name, Strasse: acc.Strasse, PLZ: acc.PLZ, Ort: acc.Ort,
|
|
Land: acc.Land, UStID: acc.UStID, Rechnungsemail: acc.Rechnungsemail,
|
|
Gespeichert: r.URL.Query().Get("gespeichert") == "1",
|
|
}
|
|
if err := s.templates.ExecuteTemplate(w, "firmendaten", data); err != nil {
|
|
http.Error(w, "Seite konnte nicht gerendert werden", http.StatusInternalServerError)
|
|
}
|
|
}
|
|
|
|
func (s *Server) handleFirmendatenSpeichern(w http.ResponseWriter, r *http.Request) {
|
|
if err := r.ParseForm(); err != nil {
|
|
http.Error(w, "ungültiges Formular", http.StatusBadRequest)
|
|
return
|
|
}
|
|
in := store.AccountInput{
|
|
Name: r.FormValue("account_name"),
|
|
Strasse: r.FormValue("strasse"),
|
|
PLZ: r.FormValue("plz"),
|
|
Ort: r.FormValue("ort"),
|
|
Land: r.FormValue("land"),
|
|
UStID: r.FormValue("ust_id"),
|
|
Rechnungsemail: r.FormValue("rechnungsemail"),
|
|
}
|
|
if in.Name == "" || in.Strasse == "" || in.PLZ == "" || in.Ort == "" || in.Land == "" || in.Rechnungsemail == "" {
|
|
data := firmendatenData{
|
|
Title: "Firmendaten", Nav: navFor(r), Error: "Alle Felder außer USt-IdNr. sind Pflicht",
|
|
Name: in.Name, Strasse: in.Strasse, PLZ: in.PLZ, Ort: in.Ort, Land: in.Land,
|
|
UStID: in.UStID, Rechnungsemail: in.Rechnungsemail,
|
|
}
|
|
if err := s.templates.ExecuteTemplate(w, "firmendaten", data); err != nil {
|
|
http.Error(w, "Seite konnte nicht gerendert werden", http.StatusInternalServerError)
|
|
}
|
|
return
|
|
}
|
|
if _, err := s.store.UpdateAccountDetails(r.Context(), currentUser(r).AccountID, in); err != nil {
|
|
http.Error(w, "Speichern fehlgeschlagen: "+err.Error(), http.StatusInternalServerError)
|
|
return
|
|
}
|
|
http.Redirect(w, r, "/verwaltung/firma?gespeichert=1", http.StatusSeeOther)
|
|
}
|