Add an edit form for payment methods
I do not particularly enjoy an htmx-only way of doing that, because it means that it can only work with JavaScript, but i think this is already a lost cause, unfortunately. If i have time, i will try to make the HTML-only form work too. In this case, i have to put back the same row when updating or cancelling the form, which is inside index.html. Instead of moving that part to a separate file, i tried to define a block as a “template fragment” and try to render that part only. Surprisingly, it works; i am happy. Closes #74.
This commit is contained in:
parent
e8a44e480e
commit
292720de28
104
pkg/company.go
104
pkg/company.go
|
@ -719,20 +719,32 @@ func newPaymentMethodsPageWithForm(ctx context.Context, conn *Conn, company *Com
|
||||||
}
|
}
|
||||||
|
|
||||||
func (page *PaymentMethodsPage) MustRender(w http.ResponseWriter, r *http.Request) {
|
func (page *PaymentMethodsPage) MustRender(w http.ResponseWriter, r *http.Request) {
|
||||||
mustRenderMainTemplate(w, r, "company/payment_methods.gohtml", page)
|
mustRenderMainTemplate(w, r, "payments/methods/index.gohtml", page)
|
||||||
}
|
}
|
||||||
|
|
||||||
func mustCollectPaymentMethods(ctx context.Context, conn *Conn, company *Company) []*PaymentMethod {
|
func mustCollectPaymentMethods(ctx context.Context, conn *Conn, company *Company) []*PaymentMethod {
|
||||||
rows, err := conn.Query(ctx, `
|
return mustCollectPaymentMethodsWhere(ctx, conn, "company_id = $1", company.Id)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mustCollectPaymentMethod(ctx context.Context, conn *Conn, paymentMethodId int) *PaymentMethod {
|
||||||
|
methods := mustCollectPaymentMethodsWhere(ctx, conn, "payment_method_id = $1", paymentMethodId)
|
||||||
|
if len(methods) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return methods[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
func mustCollectPaymentMethodsWhere(ctx context.Context, conn *Conn, where string, value any) []*PaymentMethod {
|
||||||
|
rows, err := conn.Query(ctx, fmt.Sprintf(`
|
||||||
select payment_method_id
|
select payment_method_id
|
||||||
, name
|
, name
|
||||||
, instructions
|
, instructions
|
||||||
, payment_method_id = default_payment_method_id
|
, payment_method_id = default_payment_method_id
|
||||||
from payment_method
|
from payment_method
|
||||||
join company using (company_id)
|
join company using (company_id)
|
||||||
where company_id = $1
|
where %s
|
||||||
order by name
|
order by name
|
||||||
`, company.Id)
|
`, where), value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
@ -755,9 +767,10 @@ func mustCollectPaymentMethods(ctx context.Context, conn *Conn, company *Company
|
||||||
}
|
}
|
||||||
|
|
||||||
type paymentMethodForm struct {
|
type paymentMethodForm struct {
|
||||||
locale *Locale
|
locale *Locale
|
||||||
Name *InputField
|
PaymentMethodId int
|
||||||
Instructions *InputField
|
Name *InputField
|
||||||
|
Instructions *InputField
|
||||||
}
|
}
|
||||||
|
|
||||||
func newPaymentMethodForm(locale *Locale) *paymentMethodForm {
|
func newPaymentMethodForm(locale *Locale) *paymentMethodForm {
|
||||||
|
@ -778,6 +791,25 @@ func newPaymentMethodForm(locale *Locale) *paymentMethodForm {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (form *paymentMethodForm) MustRender(w http.ResponseWriter, r *http.Request) {
|
||||||
|
mustRenderStandaloneTemplate(w, r, "payments/methods/edit.gohtml", form)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (form *paymentMethodForm) MustFillFromDatabase(ctx context.Context, conn *Conn, paymentMethodId int) bool {
|
||||||
|
if notFoundErrorOrPanic(conn.QueryRow(ctx, `
|
||||||
|
select name
|
||||||
|
, instructions
|
||||||
|
from payment_method
|
||||||
|
where payment_method_id = $1
|
||||||
|
`, paymentMethodId).Scan(
|
||||||
|
form.Name,
|
||||||
|
form.Instructions)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
form.PaymentMethodId = paymentMethodId
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
func (form *paymentMethodForm) Parse(r *http.Request) error {
|
func (form *paymentMethodForm) Parse(r *http.Request) error {
|
||||||
if err := r.ParseForm(); err != nil {
|
if err := r.ParseForm(); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -822,8 +854,43 @@ func HandleUpdatePaymentMethod(w http.ResponseWriter, r *http.Request, params ht
|
||||||
HandleUpdateDefaultPaymentMethod(w, r)
|
HandleUpdateDefaultPaymentMethod(w, r)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
http.NotFound(w, r)
|
|
||||||
return
|
paymentMethodId, err := strconv.Atoi(params[0].Value)
|
||||||
|
if err != nil {
|
||||||
|
http.NotFound(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
locale := getLocale(r)
|
||||||
|
conn := getConn(r)
|
||||||
|
form := newPaymentMethodForm(locale)
|
||||||
|
if err := form.Parse(r); err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(r.Form["cancel"]) == 0 {
|
||||||
|
if err := verifyCsrfTokenValid(r); err != nil {
|
||||||
|
http.Error(w, err.Error(), http.StatusForbidden)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !form.Validate() {
|
||||||
|
w.WriteHeader(http.StatusUnprocessableEntity)
|
||||||
|
form.MustRender(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
newName := conn.MustGetText(r.Context(), "", "update payment_method set name = $1, instructions = $2 where payment_method_id = $3 returning name", form.Name, form.Instructions, paymentMethodId)
|
||||||
|
if newName == "" {
|
||||||
|
http.NotFound(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
paymentMethod := mustCollectPaymentMethod(r.Context(), conn, paymentMethodId)
|
||||||
|
if paymentMethod == nil {
|
||||||
|
http.NotFound(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mustRenderStandaloneTemplateFragment(w, r, "payments/methods/index.gohtml", "row", paymentMethod)
|
||||||
}
|
}
|
||||||
|
|
||||||
func HandleUpdateDefaultPaymentMethod(w http.ResponseWriter, r *http.Request) {
|
func HandleUpdateDefaultPaymentMethod(w http.ResponseWriter, r *http.Request) {
|
||||||
|
@ -850,6 +917,25 @@ func HandleUpdateDefaultPaymentMethod(w http.ResponseWriter, r *http.Request) {
|
||||||
htmxRedirect(w, r, companyURI(company, "/payment-methods"))
|
htmxRedirect(w, r, companyURI(company, "/payment-methods"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func servePaymentMethodEditForm(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
|
||||||
|
paymentMethodId, err := strconv.Atoi(params[0].Value)
|
||||||
|
if err != nil {
|
||||||
|
http.NotFound(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
locale := getLocale(r)
|
||||||
|
form := newPaymentMethodForm(locale)
|
||||||
|
|
||||||
|
conn := getConn(r)
|
||||||
|
if !form.MustFillFromDatabase(r.Context(), conn, paymentMethodId) {
|
||||||
|
http.NotFound(w, r)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
form.MustRender(w, r)
|
||||||
|
}
|
||||||
|
|
||||||
func HandleDeletePaymentMethod(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
|
func HandleDeletePaymentMethod(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
|
||||||
paymentMethodId, err := strconv.Atoi(params[0].Value)
|
paymentMethodId, err := strconv.Atoi(params[0].Value)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -22,6 +22,7 @@ func NewRouter(db *Db, demo bool) http.Handler {
|
||||||
companyRouter.POST("/payment-methods", HandleAddPaymentMethod)
|
companyRouter.POST("/payment-methods", HandleAddPaymentMethod)
|
||||||
companyRouter.PUT("/payment-methods/:paymentMethodId", HandleUpdatePaymentMethod)
|
companyRouter.PUT("/payment-methods/:paymentMethodId", HandleUpdatePaymentMethod)
|
||||||
companyRouter.DELETE("/payment-methods/:paymentMethodId", HandleDeletePaymentMethod)
|
companyRouter.DELETE("/payment-methods/:paymentMethodId", HandleDeletePaymentMethod)
|
||||||
|
companyRouter.GET("/payment-methods/:paymentMethodId/edit", servePaymentMethodEditForm)
|
||||||
companyRouter.GET("/contacts", IndexContacts)
|
companyRouter.GET("/contacts", IndexContacts)
|
||||||
companyRouter.POST("/contacts", HandleAddContact)
|
companyRouter.POST("/contacts", HandleAddContact)
|
||||||
companyRouter.POST("/contacts/import", HandleImportContacts)
|
companyRouter.POST("/contacts/import", HandleImportContacts)
|
||||||
|
|
|
@ -21,6 +21,10 @@ func templateFile(name string) string {
|
||||||
}
|
}
|
||||||
|
|
||||||
func mustRenderTemplate(wr io.Writer, r *http.Request, layout string, filename string, data interface{}) {
|
func mustRenderTemplate(wr io.Writer, r *http.Request, layout string, filename string, data interface{}) {
|
||||||
|
mustRenderTemplateFragment(wr, r, layout, filename, layout, data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mustRenderTemplateFragment(wr io.Writer, r *http.Request, layout string, filename string, fragment string, data interface{}) {
|
||||||
locale := getLocale(r)
|
locale := getLocale(r)
|
||||||
company := getCompany(r)
|
company := getCompany(r)
|
||||||
user := getUser(r)
|
user := getUser(r)
|
||||||
|
@ -109,7 +113,7 @@ func mustRenderTemplate(wr io.Writer, r *http.Request, layout string, filename s
|
||||||
if w, ok := wr.(http.ResponseWriter); ok {
|
if w, ok := wr.(http.ResponseWriter); ok {
|
||||||
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
w.Header().Set("Content-Type", "text/html; charset=utf-8")
|
||||||
}
|
}
|
||||||
if err := t.ExecuteTemplate(wr, layout, data); err != nil {
|
if err := t.ExecuteTemplate(wr, fragment, data); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -145,7 +149,11 @@ func mustRenderMainTemplate(w io.Writer, r *http.Request, filename string, data
|
||||||
}
|
}
|
||||||
|
|
||||||
func mustRenderStandaloneTemplate(w io.Writer, r *http.Request, filename string, data interface{}) {
|
func mustRenderStandaloneTemplate(w io.Writer, r *http.Request, filename string, data interface{}) {
|
||||||
mustRenderTemplate(w, r, "standalone.gohtml", filename, data)
|
mustRenderStandaloneTemplateFragment(w, r, filename, "standalone.gohtml", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mustRenderStandaloneTemplateFragment(w io.Writer, r *http.Request, filename string, fragment string, data interface{}) {
|
||||||
|
mustRenderTemplateFragment(w, r, "standalone.gohtml", filename, fragment, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
func mustRenderWebTemplate(w io.Writer, r *http.Request, filename string, data interface{}) {
|
func mustRenderWebTemplate(w io.Writer, r *http.Request, filename string, data interface{}) {
|
||||||
|
|
100
po/ca.po
100
po/ca.po
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: numerus\n"
|
"Project-Id-Version: numerus\n"
|
||||||
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
|
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
|
||||||
"POT-Creation-Date: 2024-08-28 11:05+0200\n"
|
"POT-Creation-Date: 2024-08-30 02:37+0200\n"
|
||||||
"PO-Revision-Date: 2023-01-18 17:08+0100\n"
|
"PO-Revision-Date: 2023-01-18 17:08+0100\n"
|
||||||
"Last-Translator: jordi fita mas <jordi@tandem.blog>\n"
|
"Last-Translator: jordi fita mas <jordi@tandem.blog>\n"
|
||||||
"Language-Team: Catalan <ca@dodds.net>\n"
|
"Language-Team: Catalan <ca@dodds.net>\n"
|
||||||
|
@ -35,11 +35,11 @@ msgstr "Afegeix productes a la factura"
|
||||||
#: web/template/expenses/edit.gohtml:10 web/template/company/taxes.gohtml:10
|
#: web/template/expenses/edit.gohtml:10 web/template/company/taxes.gohtml:10
|
||||||
#: web/template/company/switch.gohtml:9
|
#: web/template/company/switch.gohtml:9
|
||||||
#: web/template/company/tax-details.gohtml:9
|
#: web/template/company/tax-details.gohtml:9
|
||||||
#: web/template/company/invoicing.gohtml:10
|
#: web/template/company/invoicing.gohtml:10 web/template/products/new.gohtml:9
|
||||||
#: web/template/company/payment_methods.gohtml:10
|
#: web/template/products/index.gohtml:9 web/template/products/edit.gohtml:10
|
||||||
#: web/template/products/new.gohtml:9 web/template/products/index.gohtml:9
|
#: web/template/payments/new.gohtml:14 web/template/payments/index.gohtml:14
|
||||||
#: web/template/products/edit.gohtml:10 web/template/payments/new.gohtml:14
|
#: web/template/payments/methods/index.gohtml:10
|
||||||
#: web/template/payments/index.gohtml:14 web/template/payments/edit.gohtml:14
|
#: web/template/payments/edit.gohtml:14
|
||||||
#: web/template/payments/accounts/new.gohtml:10
|
#: web/template/payments/accounts/new.gohtml:10
|
||||||
#: web/template/payments/accounts/index.gohtml:10
|
#: web/template/payments/accounts/index.gohtml:10
|
||||||
#: web/template/payments/accounts/edit.gohtml:10
|
#: web/template/payments/accounts/edit.gohtml:10
|
||||||
|
@ -126,6 +126,7 @@ msgstr "Total"
|
||||||
#: web/template/invoices/new.gohtml:91 web/template/invoices/edit.gohtml:92
|
#: web/template/invoices/new.gohtml:91 web/template/invoices/edit.gohtml:92
|
||||||
#: web/template/quotes/new.gohtml:92 web/template/quotes/edit.gohtml:93
|
#: web/template/quotes/new.gohtml:92 web/template/quotes/edit.gohtml:93
|
||||||
#: web/template/expenses/new.gohtml:56 web/template/expenses/edit.gohtml:58
|
#: web/template/expenses/new.gohtml:56 web/template/expenses/edit.gohtml:58
|
||||||
|
#: web/template/payments/methods/edit.gohtml:17
|
||||||
#: web/template/payments/edit.gohtml:55
|
#: web/template/payments/edit.gohtml:55
|
||||||
#: web/template/payments/accounts/edit.gohtml:38
|
#: web/template/payments/accounts/edit.gohtml:38
|
||||||
msgctxt "action"
|
msgctxt "action"
|
||||||
|
@ -477,7 +478,7 @@ msgctxt "title"
|
||||||
msgid "Taxes"
|
msgid "Taxes"
|
||||||
msgstr "Imposts"
|
msgstr "Imposts"
|
||||||
|
|
||||||
#: web/template/app.gohtml:48 web/template/company/payment_methods.gohtml:3
|
#: web/template/app.gohtml:48 web/template/payments/methods/index.gohtml:3
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Payment Methods"
|
msgid "Payment Methods"
|
||||||
msgstr "Mètodes de pagament"
|
msgstr "Mètodes de pagament"
|
||||||
|
@ -701,7 +702,7 @@ msgid "Class"
|
||||||
msgstr "Classe"
|
msgstr "Classe"
|
||||||
|
|
||||||
#: web/template/company/taxes.gohtml:29
|
#: web/template/company/taxes.gohtml:29
|
||||||
#: web/template/company/payment_methods.gohtml:29
|
#: web/template/payments/methods/index.gohtml:34
|
||||||
msgid "Are you sure?"
|
msgid "Are you sure?"
|
||||||
msgstr "N’esteu segur?"
|
msgstr "N’esteu segur?"
|
||||||
|
|
||||||
|
@ -734,40 +735,6 @@ msgctxt "title"
|
||||||
msgid "Tax Details"
|
msgid "Tax Details"
|
||||||
msgstr "Configuració fiscal"
|
msgstr "Configuració fiscal"
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:23
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "Default"
|
|
||||||
msgstr "Per defecte"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:24
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "Payment Method"
|
|
||||||
msgstr "Mètode de pagament"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:25
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "Instructions"
|
|
||||||
msgstr "Instruccions"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:59
|
|
||||||
msgid "No payment methods added yet."
|
|
||||||
msgstr "No hi ha cap mètode de pagament."
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:77
|
|
||||||
msgctxt "action"
|
|
||||||
msgid "Set"
|
|
||||||
msgstr "Estableix"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:87
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "New Payment Method"
|
|
||||||
msgstr "Nou mètode de pagament"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:96
|
|
||||||
msgctxt "action"
|
|
||||||
msgid "Add new payment method"
|
|
||||||
msgstr "Afegeix nou mètode de pagament"
|
|
||||||
|
|
||||||
#: web/template/products/new.gohtml:2 web/template/products/new.gohtml:11
|
#: web/template/products/new.gohtml:2 web/template/products/new.gohtml:11
|
||||||
#: web/template/products/new.gohtml:19
|
#: web/template/products/new.gohtml:19
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
|
@ -863,6 +830,45 @@ msgstr "No hi ha cap cobrament."
|
||||||
msgid "No payments added yet."
|
msgid "No payments added yet."
|
||||||
msgstr "No hi ha cap pagament."
|
msgstr "No hi ha cap pagament."
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:23
|
||||||
|
msgctxt "title"
|
||||||
|
msgid "Default"
|
||||||
|
msgstr "Per defecte"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:24
|
||||||
|
msgctxt "title"
|
||||||
|
msgid "Payment Method"
|
||||||
|
msgstr "Mètode de pagament"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:25
|
||||||
|
msgctxt "title"
|
||||||
|
msgid "Instructions"
|
||||||
|
msgstr "Instruccions"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:72
|
||||||
|
msgid "No payment methods added yet."
|
||||||
|
msgstr "No hi ha cap mètode de pagament."
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:90
|
||||||
|
msgctxt "action"
|
||||||
|
msgid "Set"
|
||||||
|
msgstr "Estableix"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:100
|
||||||
|
msgctxt "title"
|
||||||
|
msgid "New Payment Method"
|
||||||
|
msgstr "Nou mètode de pagament"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:109
|
||||||
|
msgctxt "action"
|
||||||
|
msgid "Add new payment method"
|
||||||
|
msgstr "Afegeix nou mètode de pagament"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/edit.gohtml:18
|
||||||
|
msgctxt "action"
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancel·la"
|
||||||
|
|
||||||
#: web/template/payments/edit.gohtml:4
|
#: web/template/payments/edit.gohtml:4
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Edit Payment “%s”"
|
msgid "Edit Payment “%s”"
|
||||||
|
@ -1208,25 +1214,25 @@ msgstr "No podeu deixar percentatge en blanc."
|
||||||
msgid "Tax rate must be an integer between -99 and 99."
|
msgid "Tax rate must be an integer between -99 and 99."
|
||||||
msgstr "El percentatge ha de ser entre -99 i 99."
|
msgstr "El percentatge ha de ser entre -99 i 99."
|
||||||
|
|
||||||
#: pkg/company.go:768
|
#: pkg/company.go:781
|
||||||
msgctxt "input"
|
msgctxt "input"
|
||||||
msgid "Payment method name"
|
msgid "Payment method name"
|
||||||
msgstr "Nom del mètode de pagament"
|
msgstr "Nom del mètode de pagament"
|
||||||
|
|
||||||
#: pkg/company.go:774
|
#: pkg/company.go:787
|
||||||
msgctxt "input"
|
msgctxt "input"
|
||||||
msgid "Instructions"
|
msgid "Instructions"
|
||||||
msgstr "Instruccions"
|
msgstr "Instruccions"
|
||||||
|
|
||||||
#: pkg/company.go:792
|
#: pkg/company.go:824
|
||||||
msgid "Payment method name can not be empty."
|
msgid "Payment method name can not be empty."
|
||||||
msgstr "No podeu deixar el nom del mètode de pagament en blanc."
|
msgstr "No podeu deixar el nom del mètode de pagament en blanc."
|
||||||
|
|
||||||
#: pkg/company.go:793
|
#: pkg/company.go:825
|
||||||
msgid "Payment instructions can not be empty."
|
msgid "Payment instructions can not be empty."
|
||||||
msgstr "No podeu deixar les instruccions de pagament en blanc."
|
msgstr "No podeu deixar les instruccions de pagament en blanc."
|
||||||
|
|
||||||
#: pkg/company.go:845 pkg/quote.go:755 pkg/invoices.go:928
|
#: pkg/company.go:912 pkg/quote.go:755 pkg/invoices.go:928
|
||||||
msgid "Selected payment method is not valid."
|
msgid "Selected payment method is not valid."
|
||||||
msgstr "Heu seleccionat un mètode de pagament que no és vàlid."
|
msgstr "Heu seleccionat un mètode de pagament que no és vàlid."
|
||||||
|
|
||||||
|
|
100
po/es.po
100
po/es.po
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: numerus\n"
|
"Project-Id-Version: numerus\n"
|
||||||
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
|
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
|
||||||
"POT-Creation-Date: 2024-08-28 11:05+0200\n"
|
"POT-Creation-Date: 2024-08-30 02:37+0200\n"
|
||||||
"PO-Revision-Date: 2023-01-18 17:45+0100\n"
|
"PO-Revision-Date: 2023-01-18 17:45+0100\n"
|
||||||
"Last-Translator: jordi fita mas <jordi@tandem.blog>\n"
|
"Last-Translator: jordi fita mas <jordi@tandem.blog>\n"
|
||||||
"Language-Team: Spanish <es@tp.org.es>\n"
|
"Language-Team: Spanish <es@tp.org.es>\n"
|
||||||
|
@ -35,11 +35,11 @@ msgstr "Añadir productos a la factura"
|
||||||
#: web/template/expenses/edit.gohtml:10 web/template/company/taxes.gohtml:10
|
#: web/template/expenses/edit.gohtml:10 web/template/company/taxes.gohtml:10
|
||||||
#: web/template/company/switch.gohtml:9
|
#: web/template/company/switch.gohtml:9
|
||||||
#: web/template/company/tax-details.gohtml:9
|
#: web/template/company/tax-details.gohtml:9
|
||||||
#: web/template/company/invoicing.gohtml:10
|
#: web/template/company/invoicing.gohtml:10 web/template/products/new.gohtml:9
|
||||||
#: web/template/company/payment_methods.gohtml:10
|
#: web/template/products/index.gohtml:9 web/template/products/edit.gohtml:10
|
||||||
#: web/template/products/new.gohtml:9 web/template/products/index.gohtml:9
|
#: web/template/payments/new.gohtml:14 web/template/payments/index.gohtml:14
|
||||||
#: web/template/products/edit.gohtml:10 web/template/payments/new.gohtml:14
|
#: web/template/payments/methods/index.gohtml:10
|
||||||
#: web/template/payments/index.gohtml:14 web/template/payments/edit.gohtml:14
|
#: web/template/payments/edit.gohtml:14
|
||||||
#: web/template/payments/accounts/new.gohtml:10
|
#: web/template/payments/accounts/new.gohtml:10
|
||||||
#: web/template/payments/accounts/index.gohtml:10
|
#: web/template/payments/accounts/index.gohtml:10
|
||||||
#: web/template/payments/accounts/edit.gohtml:10
|
#: web/template/payments/accounts/edit.gohtml:10
|
||||||
|
@ -126,6 +126,7 @@ msgstr "Total"
|
||||||
#: web/template/invoices/new.gohtml:91 web/template/invoices/edit.gohtml:92
|
#: web/template/invoices/new.gohtml:91 web/template/invoices/edit.gohtml:92
|
||||||
#: web/template/quotes/new.gohtml:92 web/template/quotes/edit.gohtml:93
|
#: web/template/quotes/new.gohtml:92 web/template/quotes/edit.gohtml:93
|
||||||
#: web/template/expenses/new.gohtml:56 web/template/expenses/edit.gohtml:58
|
#: web/template/expenses/new.gohtml:56 web/template/expenses/edit.gohtml:58
|
||||||
|
#: web/template/payments/methods/edit.gohtml:17
|
||||||
#: web/template/payments/edit.gohtml:55
|
#: web/template/payments/edit.gohtml:55
|
||||||
#: web/template/payments/accounts/edit.gohtml:38
|
#: web/template/payments/accounts/edit.gohtml:38
|
||||||
msgctxt "action"
|
msgctxt "action"
|
||||||
|
@ -477,7 +478,7 @@ msgctxt "title"
|
||||||
msgid "Taxes"
|
msgid "Taxes"
|
||||||
msgstr "Impuestos"
|
msgstr "Impuestos"
|
||||||
|
|
||||||
#: web/template/app.gohtml:48 web/template/company/payment_methods.gohtml:3
|
#: web/template/app.gohtml:48 web/template/payments/methods/index.gohtml:3
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Payment Methods"
|
msgid "Payment Methods"
|
||||||
msgstr "Métodos de pago"
|
msgstr "Métodos de pago"
|
||||||
|
@ -701,7 +702,7 @@ msgid "Class"
|
||||||
msgstr "Clase"
|
msgstr "Clase"
|
||||||
|
|
||||||
#: web/template/company/taxes.gohtml:29
|
#: web/template/company/taxes.gohtml:29
|
||||||
#: web/template/company/payment_methods.gohtml:29
|
#: web/template/payments/methods/index.gohtml:34
|
||||||
msgid "Are you sure?"
|
msgid "Are you sure?"
|
||||||
msgstr "¿Estáis seguro?"
|
msgstr "¿Estáis seguro?"
|
||||||
|
|
||||||
|
@ -734,40 +735,6 @@ msgctxt "title"
|
||||||
msgid "Tax Details"
|
msgid "Tax Details"
|
||||||
msgstr "Configuración fiscal"
|
msgstr "Configuración fiscal"
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:23
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "Default"
|
|
||||||
msgstr "Por defecto"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:24
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "Payment Method"
|
|
||||||
msgstr "Método de pago"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:25
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "Instructions"
|
|
||||||
msgstr "Instrucciones"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:59
|
|
||||||
msgid "No payment methods added yet."
|
|
||||||
msgstr "No hay métodos de pago."
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:77
|
|
||||||
msgctxt "action"
|
|
||||||
msgid "Set"
|
|
||||||
msgstr "Establecer"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:87
|
|
||||||
msgctxt "title"
|
|
||||||
msgid "New Payment Method"
|
|
||||||
msgstr "Nuevo método de pago"
|
|
||||||
|
|
||||||
#: web/template/company/payment_methods.gohtml:96
|
|
||||||
msgctxt "action"
|
|
||||||
msgid "Add new payment method"
|
|
||||||
msgstr "Añadir nuevo método de pago"
|
|
||||||
|
|
||||||
#: web/template/products/new.gohtml:2 web/template/products/new.gohtml:11
|
#: web/template/products/new.gohtml:2 web/template/products/new.gohtml:11
|
||||||
#: web/template/products/new.gohtml:19
|
#: web/template/products/new.gohtml:19
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
|
@ -863,6 +830,45 @@ msgstr "No hay cobros."
|
||||||
msgid "No payments added yet."
|
msgid "No payments added yet."
|
||||||
msgstr "No hay pagos."
|
msgstr "No hay pagos."
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:23
|
||||||
|
msgctxt "title"
|
||||||
|
msgid "Default"
|
||||||
|
msgstr "Por defecto"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:24
|
||||||
|
msgctxt "title"
|
||||||
|
msgid "Payment Method"
|
||||||
|
msgstr "Método de pago"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:25
|
||||||
|
msgctxt "title"
|
||||||
|
msgid "Instructions"
|
||||||
|
msgstr "Instrucciones"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:72
|
||||||
|
msgid "No payment methods added yet."
|
||||||
|
msgstr "No hay métodos de pago."
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:90
|
||||||
|
msgctxt "action"
|
||||||
|
msgid "Set"
|
||||||
|
msgstr "Establecer"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:100
|
||||||
|
msgctxt "title"
|
||||||
|
msgid "New Payment Method"
|
||||||
|
msgstr "Nuevo método de pago"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/index.gohtml:109
|
||||||
|
msgctxt "action"
|
||||||
|
msgid "Add new payment method"
|
||||||
|
msgstr "Añadir nuevo método de pago"
|
||||||
|
|
||||||
|
#: web/template/payments/methods/edit.gohtml:18
|
||||||
|
msgctxt "action"
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: web/template/payments/edit.gohtml:4
|
#: web/template/payments/edit.gohtml:4
|
||||||
msgctxt "title"
|
msgctxt "title"
|
||||||
msgid "Edit Payment “%s”"
|
msgid "Edit Payment “%s”"
|
||||||
|
@ -1208,25 +1214,25 @@ msgstr "No podéis dejar el porcentaje en blanco."
|
||||||
msgid "Tax rate must be an integer between -99 and 99."
|
msgid "Tax rate must be an integer between -99 and 99."
|
||||||
msgstr "El porcentaje tiene que estar entre -99 y 99."
|
msgstr "El porcentaje tiene que estar entre -99 y 99."
|
||||||
|
|
||||||
#: pkg/company.go:768
|
#: pkg/company.go:781
|
||||||
msgctxt "input"
|
msgctxt "input"
|
||||||
msgid "Payment method name"
|
msgid "Payment method name"
|
||||||
msgstr "Nombre del método de pago"
|
msgstr "Nombre del método de pago"
|
||||||
|
|
||||||
#: pkg/company.go:774
|
#: pkg/company.go:787
|
||||||
msgctxt "input"
|
msgctxt "input"
|
||||||
msgid "Instructions"
|
msgid "Instructions"
|
||||||
msgstr "Instrucciones"
|
msgstr "Instrucciones"
|
||||||
|
|
||||||
#: pkg/company.go:792
|
#: pkg/company.go:824
|
||||||
msgid "Payment method name can not be empty."
|
msgid "Payment method name can not be empty."
|
||||||
msgstr "No podéis dejar el nombre del método de pago en blanco."
|
msgstr "No podéis dejar el nombre del método de pago en blanco."
|
||||||
|
|
||||||
#: pkg/company.go:793
|
#: pkg/company.go:825
|
||||||
msgid "Payment instructions can not be empty."
|
msgid "Payment instructions can not be empty."
|
||||||
msgstr "No podéis dejar las instrucciones de pago en blanco."
|
msgstr "No podéis dejar las instrucciones de pago en blanco."
|
||||||
|
|
||||||
#: pkg/company.go:845 pkg/quote.go:755 pkg/invoices.go:928
|
#: pkg/company.go:912 pkg/quote.go:755 pkg/invoices.go:928
|
||||||
msgid "Selected payment method is not valid."
|
msgid "Selected payment method is not valid."
|
||||||
msgstr "Habéis escogido un método de pago que no es válido."
|
msgstr "Habéis escogido un método de pago que no es válido."
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
{{ define "content" }}
|
||||||
|
{{- /*gotype: dev.tandem.ws/tandem/numerus/pkg.paymentMethodForm*/ -}}
|
||||||
|
<tr>
|
||||||
|
<td colspan="6">
|
||||||
|
<form method="POST"
|
||||||
|
action="{{ companyURI "/payment-methods" }}/{{ .PaymentMethodId }}"
|
||||||
|
data-hx-boost="true"
|
||||||
|
data-hx-push-url="false"
|
||||||
|
>
|
||||||
|
<fieldset>
|
||||||
|
{{ csrfToken }}
|
||||||
|
{{ putMethod }}
|
||||||
|
{{ template "input-field" .Name }}
|
||||||
|
{{ template "input-field" .Instructions }}
|
||||||
|
</fieldset>
|
||||||
|
<footer>
|
||||||
|
<button>{{( pgettext "Update" "action" )}}</button>
|
||||||
|
<button name="cancel">{{( pgettext "Cancel" "action" )}}</button>
|
||||||
|
</footer>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{- end }}
|
|
@ -24,39 +24,52 @@
|
||||||
<th>{{( pgettext "Payment Method" "title" )}}</th>
|
<th>{{( pgettext "Payment Method" "title" )}}</th>
|
||||||
<th>{{( pgettext "Instructions" "title" )}}</th>
|
<th>{{( pgettext "Instructions" "title" )}}</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{{ $confirm := ( gettext "Are you sure?" )}}
|
<tbody data-hx-target="closest tr" data-hx-swap="outerHTML">
|
||||||
<tbody data-hx-confirm="{{ $confirm }}" data-hx-target="closest tr" data-hx-swap="outerHTML swap:1s">
|
|
||||||
{{ with .PaymentMethods }}
|
{{ with .PaymentMethods }}
|
||||||
{{- range $method := . }}
|
{{- range . }}
|
||||||
<tr>
|
{{- block "row" . }}
|
||||||
<td>
|
{{ $confirm := ( gettext "Are you sure?" )}}
|
||||||
<span class="description-text"></span>
|
<tr>
|
||||||
<input type="radio"
|
<td>
|
||||||
form="default_payment_form"
|
<span class="description-text"></span>
|
||||||
aria-label="{{ pgettext "Set as default" "action" }}"
|
<input type="radio"
|
||||||
name="default_payment_id"
|
form="default_payment_form"
|
||||||
value="{{ .Id }}"
|
aria-label="{{ pgettext "Set as default" "action" }}"
|
||||||
{{ if .IsDefault }} checked{{ end}}
|
name="default_payment_id"
|
||||||
>
|
value="{{ .Id }}"
|
||||||
</td>
|
{{ if .IsDefault }} checked{{ end}}
|
||||||
<td>{{ .Name }}</td>
|
>
|
||||||
<td>{{ .Instructions }}</td>
|
</td>
|
||||||
<td>
|
<td>{{ .Name }}</td>
|
||||||
<form method="POST" action="{{ companyURI "/payment-methods"}}/{{ .Id }}"
|
<td>{{ .Instructions }}</td>
|
||||||
data-hx-boost="true">
|
<td>
|
||||||
{{ csrfToken }}
|
<a href="{{ companyURI "/payment-methods"}}/{{ .Id }}/edit"
|
||||||
{{ deleteMethod }}
|
aria-label="{{( gettext "Edit payment method" )}}"
|
||||||
<button class="icon" aria-label="{{( gettext "Delete payment method" )}}"
|
data-hx-boost="true"
|
||||||
><i class="ri-delete-back-2-line"></i></button>
|
data-hx-push-url="false"
|
||||||
</form>
|
><i class="ri-edit-2-line"></i></a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
<td>
|
||||||
|
<form method="POST" action="{{ companyURI "/payment-methods"}}/{{ .Id }}"
|
||||||
|
data-hx-boost="true"
|
||||||
|
data-hx-confirm="{{ $confirm }}"
|
||||||
|
data-hx-swap="outerHTML swap:1s"
|
||||||
|
>
|
||||||
|
{{ csrfToken }}
|
||||||
|
{{ deleteMethod }}
|
||||||
|
<button class="icon" aria-label="{{( gettext "Delete payment method" )}}"
|
||||||
|
><i class="ri-delete-back-2-line"></i></button>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{ else }}
|
{{ else }}
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4">{{( gettext "No payment methods added yet." )}}</td>
|
<td colspan="5">{{( gettext "No payment methods added yet." )}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -77,7 +90,7 @@
|
||||||
<button>{{( pgettext "Set" "action")}}</button>
|
<button>{{( pgettext "Set" "action")}}</button>
|
||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
<td colspan="3"></td>
|
<td colspan="4"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tfoot>
|
</tfoot>
|
||||||
{{- end }}
|
{{- end }}
|
Loading…
Reference in New Issue