diff --git a/deploy/company.sql b/deploy/company.sql index 5ddb299..c76d84b 100644 --- a/deploy/company.sql +++ b/deploy/company.sql @@ -29,8 +29,8 @@ create table company ( created_at timestamptz not null default current_timestamp ); -grant select on table company to invoicer; -grant select on table company to admin; +grant select, update on table company to invoicer; +grant select, update on table company to admin; commit; diff --git a/pkg/company.go b/pkg/company.go index 5fc6642..8151f89 100644 --- a/pkg/company.go +++ b/pkg/company.go @@ -66,18 +66,18 @@ func getCompany(r *http.Request) *Company { } type TaxDetailsPage struct { - Title string + Title string BusinessName string - VATIN string - TradeName string - Phone string - Email string - Web string - Address string - City string - Province string - PostalCode string - Country string + VATIN string + TradeName string + Phone string + Email string + Web string + Address string + City string + Province string + PostalCode string + Country string } func CompanyTaxDetailsHandler() http.Handler { @@ -88,12 +88,29 @@ func CompanyTaxDetailsHandler() http.Handler { } company := mustGetCompany(r) conn := getConn(r) - err := conn.QueryRow(r.Context(), "select business_name, vatin, trade_name, phone, email, web, address, city, province, postal_code, country from company where company_id = $1", company.Id).Scan(&page.BusinessName, &page.VATIN, &page.TradeName, &page.Phone, &page.Email, &page.Web, &page.Address, &page.City, &page.Province, &page.PostalCode, &page.Country); - if err != nil { - panic(err) + if r.Method == "POST" { + r.ParseForm() + page.BusinessName = r.FormValue("business_name") + page.VATIN = r.FormValue("vatin") + page.TradeName = r.FormValue("trade_name") + page.Phone = r.FormValue("phone") + page.Email = r.FormValue("email") + page.Web = r.FormValue("web") + page.Address = r.FormValue("address") + page.City = r.FormValue("city") + page.Province = r.FormValue("province") + page.PostalCode = r.FormValue("postal_code") + page.Country = r.FormValue("country") + conn.MustExec(r.Context(), "update company set business_name = $1, vatin = $2, trade_name = $3, phone = $4, email = $5, web = $6, address = $7, city = $8, province = $9, postal_code = $10, country = $11 where company_id = $12", page.BusinessName, page.VATIN, page.TradeName, page.Phone, page.Email, page.Web, page.Address, page.City, page.Province, page.PostalCode, page.Country, company.Id) + http.Redirect(w, r, "/company/"+company.Slug+"/tax-details", http.StatusSeeOther) + } else { + err := conn.QueryRow(r.Context(), "select business_name, vatin, trade_name, phone, email, web, address, city, province, postal_code, country from company where company_id = $1", company.Id).Scan(&page.BusinessName, &page.VATIN, &page.TradeName, &page.Phone, &page.Email, &page.Web, &page.Address, &page.City, &page.Province, &page.PostalCode, &page.Country) + if err != nil { + panic(err) + } } mustRenderAppTemplate(w, r, "tax-details.html", page) - }); + }) } func mustGetCompany(r *http.Request) *Company { @@ -101,5 +118,5 @@ func mustGetCompany(r *http.Request) *Company { if company == nil { panic(errors.New("company: required but not found")) } - return company; + return company } diff --git a/test/company.sql b/test/company.sql index cdcc25d..ada6af0 100644 --- a/test/company.sql +++ b/test/company.sql @@ -12,8 +12,8 @@ set search_path to numerus, auth, public; select has_table('company'); select has_pk('company'); select table_privs_are('company', 'guest', array []::text[]); -select table_privs_are('company', 'invoicer', array ['SELECT']); -select table_privs_are('company', 'admin', array ['SELECT']); +select table_privs_are('company', 'invoicer', array ['SELECT', 'UPDATE']); +select table_privs_are('company', 'admin', array ['SELECT', 'UPDATE']); select table_privs_are('company', 'authenticator', array []::text[]); select has_column('company', 'company_id'); diff --git a/web/template/tax-details.html b/web/template/tax-details.html index d7047fd..4d201e8 100644 --- a/web/template/tax-details.html +++ b/web/template/tax-details.html @@ -46,6 +46,7 @@ + {{- end }}