Add field to update default payment method

It is only shown if there is more than one payment method, otherwise
it seems useless as there are nothing to change.

This closes #72.
This commit is contained in:
jordi fita mas 2024-08-28 11:10:03 +02:00
parent 0b74c7a91c
commit e8a44e480e
5 changed files with 361 additions and 263 deletions

View File

@ -3,6 +3,7 @@ package pkg
import (
"context"
"errors"
"fmt"
"github.com/julienschmidt/httprouter"
"html/template"
"math"
@ -82,6 +83,7 @@ type PaymentMethod struct {
Id int
Name string
Instructions string
IsDefault bool
}
type taxDetailsForm struct {
@ -700,6 +702,7 @@ func servePaymentMethods(w http.ResponseWriter, r *http.Request, _ httprouter.Pa
type PaymentMethodsPage struct {
PaymentMethods []*PaymentMethod
UpdateDefaultError error
Form *paymentMethodForm
}
@ -720,7 +723,16 @@ func (page *PaymentMethodsPage) MustRender(w http.ResponseWriter, r *http.Reques
}
func mustCollectPaymentMethods(ctx context.Context, conn *Conn, company *Company) []*PaymentMethod {
rows, err := conn.Query(ctx, "select payment_method_id, name, instructions from payment_method where company_id = $1 order by name", company.Id)
rows, err := conn.Query(ctx, `
select payment_method_id
, name
, instructions
, payment_method_id = default_payment_method_id
from payment_method
join company using (company_id)
where company_id = $1
order by name
`, company.Id)
if err != nil {
panic(err)
}
@ -729,7 +741,7 @@ func mustCollectPaymentMethods(ctx context.Context, conn *Conn, company *Company
var methods []*PaymentMethod
for rows.Next() {
method := &PaymentMethod{}
err = rows.Scan(&method.Id, &method.Name, &method.Instructions)
err = rows.Scan(&method.Id, &method.Name, &method.Instructions, &method.IsDefault)
if err != nil {
panic(err)
}
@ -805,6 +817,39 @@ func HandleAddPaymentMethod(w http.ResponseWriter, r *http.Request, _ httprouter
htmxRedirect(w, r, companyURI(company, "/payment-methods"))
}
func HandleUpdatePaymentMethod(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
if params[0].Value == "default" {
HandleUpdateDefaultPaymentMethod(w, r)
return
}
http.NotFound(w, r)
return
}
func HandleUpdateDefaultPaymentMethod(w http.ResponseWriter, r *http.Request) {
if err := r.ParseForm(); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
if err := verifyCsrfTokenValid(r); err != nil {
http.Error(w, err.Error(), http.StatusForbidden)
return
}
locale := getLocale(r)
conn := getConn(r)
company := mustGetCompany(r)
defaultPaymentId, err := strconv.Atoi(r.FormValue("default_payment_id"))
if err != nil {
w.WriteHeader(http.StatusUnprocessableEntity)
page := newPaymentMethodsPage(r.Context(), conn, company, locale)
page.UpdateDefaultError = fmt.Errorf(gettext("Selected payment method is not valid.", locale))
page.MustRender(w, r)
return
}
conn.MustExec(r.Context(), "update company set default_payment_method_id = $1 where company_id = $2", defaultPaymentId, company.Id)
htmxRedirect(w, r, companyURI(company, "/payment-methods"))
}
func HandleDeletePaymentMethod(w http.ResponseWriter, r *http.Request, params httprouter.Params) {
paymentMethodId, err := strconv.Atoi(params[0].Value)
if err != nil {

View File

@ -20,6 +20,7 @@ func NewRouter(db *Db, demo bool) http.Handler {
companyRouter.DELETE("/taxes/:taxId", HandleDeleteCompanyTax)
companyRouter.GET("/payment-methods", servePaymentMethods)
companyRouter.POST("/payment-methods", HandleAddPaymentMethod)
companyRouter.PUT("/payment-methods/:paymentMethodId", HandleUpdatePaymentMethod)
companyRouter.DELETE("/payment-methods/:paymentMethodId", HandleDeletePaymentMethod)
companyRouter.GET("/contacts", IndexContacts)
companyRouter.POST("/contacts", HandleAddContact)

268
po/ca.po
View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: numerus\n"
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
"POT-Creation-Date: 2024-08-26 14:46+0200\n"
"POT-Creation-Date: 2024-08-28 11:05+0200\n"
"PO-Revision-Date: 2023-01-18 17:08+0100\n"
"Last-Translator: jordi fita mas <jordi@tandem.blog>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
@ -701,7 +701,7 @@ msgid "Class"
msgstr "Classe"
#: web/template/company/taxes.gohtml:29
#: web/template/company/payment_methods.gohtml:28
#: web/template/company/payment_methods.gohtml:29
msgid "Are you sure?"
msgstr "Nesteu segur?"
@ -736,24 +736,34 @@ 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:24
#: web/template/company/payment_methods.gohtml:25
msgctxt "title"
msgid "Instructions"
msgstr "Instruccions"
#: web/template/company/payment_methods.gohtml:48
#: 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:55
#: 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:64
#: web/template/company/payment_methods.gohtml:96
msgctxt "action"
msgid "Add new payment method"
msgstr "Afegeix nou mètode de pagament"
@ -903,7 +913,7 @@ msgctxt "title"
msgid "VAT number"
msgstr "DNI / NIF"
#: pkg/login.go:38 pkg/company.go:122 pkg/profile.go:40 pkg/contacts.go:276
#: pkg/login.go:38 pkg/company.go:124 pkg/profile.go:40 pkg/contacts.go:274
msgctxt "input"
msgid "Email"
msgstr "Correu-e"
@ -913,11 +923,11 @@ msgctxt "input"
msgid "Password"
msgstr "Contrasenya"
#: pkg/login.go:76 pkg/company.go:238 pkg/profile.go:89
#: pkg/login.go:76 pkg/company.go:240 pkg/profile.go:89
msgid "Email can not be empty."
msgstr "No podeu deixar el correu-e en blanc."
#: pkg/login.go:77 pkg/company.go:239 pkg/profile.go:90 pkg/contacts.go:420
#: pkg/login.go:77 pkg/company.go:241 pkg/profile.go:90 pkg/contacts.go:418
msgid "This value is not a valid email. It should be like name@domain.com."
msgstr "Aquest valor no és un correu-e vàlid. Hauria de ser similar a nom@domini.cat."
@ -929,196 +939,196 @@ msgstr "No podeu deixar la contrasenya en blanc."
msgid "Invalid user or password."
msgstr "Nom dusuari o contrasenya incorrectes."
#: pkg/products.go:172 pkg/products.go:276 pkg/quote.go:901 pkg/accounts.go:140
#: pkg/invoices.go:1132 pkg/contacts.go:149 pkg/contacts.go:262
#: pkg/products.go:168 pkg/products.go:272 pkg/quote.go:899 pkg/accounts.go:140
#: pkg/invoices.go:1130 pkg/contacts.go:147 pkg/contacts.go:260
msgctxt "input"
msgid "Name"
msgstr "Nom"
#: pkg/products.go:177 pkg/products.go:303 pkg/tags.go:37 pkg/quote.go:174
#: pkg/quote.go:708 pkg/payments.go:420 pkg/expenses.go:335 pkg/expenses.go:485
#: pkg/invoices.go:177 pkg/invoices.go:868 pkg/contacts.go:154
#: pkg/contacts.go:362
#: pkg/products.go:173 pkg/products.go:299 pkg/tags.go:37 pkg/quote.go:174
#: pkg/quote.go:706 pkg/payments.go:420 pkg/expenses.go:335 pkg/expenses.go:483
#: pkg/invoices.go:177 pkg/invoices.go:866 pkg/contacts.go:152
#: pkg/contacts.go:360
msgctxt "input"
msgid "Tags"
msgstr "Etiquetes"
#: pkg/products.go:181 pkg/quote.go:178 pkg/expenses.go:495 pkg/invoices.go:181
#: pkg/contacts.go:158
#: pkg/products.go:177 pkg/quote.go:178 pkg/expenses.go:493 pkg/invoices.go:181
#: pkg/contacts.go:156
msgctxt "input"
msgid "Tags Condition"
msgstr "Condició de les etiquetes"
#: pkg/products.go:185 pkg/quote.go:182 pkg/expenses.go:499 pkg/invoices.go:185
#: pkg/contacts.go:162
#: pkg/products.go:181 pkg/quote.go:182 pkg/expenses.go:497 pkg/invoices.go:185
#: pkg/contacts.go:160
msgctxt "tag condition"
msgid "All"
msgstr "Totes"
#: pkg/products.go:186 pkg/expenses.go:500 pkg/invoices.go:186
#: pkg/contacts.go:163
#: pkg/products.go:182 pkg/expenses.go:498 pkg/invoices.go:186
#: pkg/contacts.go:161
msgid "Invoices must have all the specified labels."
msgstr "Les factures han de tenir totes les etiquetes."
#: pkg/products.go:190 pkg/quote.go:187 pkg/expenses.go:504 pkg/invoices.go:190
#: pkg/contacts.go:167
#: pkg/products.go:186 pkg/quote.go:187 pkg/expenses.go:502 pkg/invoices.go:190
#: pkg/contacts.go:165
msgctxt "tag condition"
msgid "Any"
msgstr "Qualsevol"
#: pkg/products.go:191 pkg/expenses.go:505 pkg/invoices.go:191
#: pkg/contacts.go:168
#: pkg/products.go:187 pkg/expenses.go:503 pkg/invoices.go:191
#: pkg/contacts.go:166
msgid "Invoices must have at least one of the specified labels."
msgstr "Les factures han de tenir com a mínim una de les etiquetes."
#: pkg/products.go:282 pkg/quote.go:915 pkg/payments.go:387
#: pkg/invoices.go:1146
#: pkg/products.go:278 pkg/quote.go:913 pkg/payments.go:387
#: pkg/invoices.go:1144
msgctxt "input"
msgid "Description"
msgstr "Descripció"
#: pkg/products.go:287 pkg/quote.go:919 pkg/invoices.go:1150
#: pkg/products.go:283 pkg/quote.go:917 pkg/invoices.go:1148
msgctxt "input"
msgid "Price"
msgstr "Preu"
#: pkg/products.go:297 pkg/quote.go:948 pkg/expenses.go:310
#: pkg/invoices.go:1179
#: pkg/products.go:293 pkg/quote.go:946 pkg/expenses.go:310
#: pkg/invoices.go:1177
msgctxt "input"
msgid "Taxes"
msgstr "Imposts"
#: pkg/products.go:322 pkg/quote.go:997 pkg/profile.go:92 pkg/invoices.go:1228
#: pkg/contacts.go:412
#: pkg/products.go:318 pkg/quote.go:995 pkg/profile.go:92 pkg/invoices.go:1226
#: pkg/contacts.go:410
msgid "Name can not be empty."
msgstr "No podeu deixar el nom en blanc."
#: pkg/products.go:323 pkg/quote.go:998 pkg/invoices.go:1229
#: pkg/products.go:319 pkg/quote.go:996 pkg/invoices.go:1227
msgid "Price can not be empty."
msgstr "No podeu deixar el preu en blanc."
#: pkg/products.go:324 pkg/quote.go:999 pkg/invoices.go:1230
#: pkg/products.go:320 pkg/quote.go:997 pkg/invoices.go:1228
msgid "Price must be a number greater than zero."
msgstr "El preu ha de ser un número major a zero."
#: pkg/products.go:326 pkg/quote.go:1007 pkg/expenses.go:370
#: pkg/invoices.go:1238
#: pkg/products.go:322 pkg/quote.go:1005 pkg/expenses.go:370
#: pkg/invoices.go:1236
msgid "Selected tax is not valid."
msgstr "Heu seleccionat un impost que no és vàlid."
#: pkg/products.go:327 pkg/quote.go:1008 pkg/expenses.go:371
#: pkg/invoices.go:1239
#: pkg/products.go:323 pkg/quote.go:1006 pkg/expenses.go:371
#: pkg/invoices.go:1237
msgid "You can only select a tax of each class."
msgstr "Només podeu seleccionar un impost de cada classe."
#: pkg/company.go:108
#: pkg/company.go:110
msgctxt "input"
msgid "Trade name"
msgstr "Nom comercial"
#: pkg/company.go:113 pkg/contacts.go:268
#: pkg/company.go:115 pkg/contacts.go:266
msgctxt "input"
msgid "Phone"
msgstr "Telèfon"
#: pkg/company.go:131 pkg/contacts.go:284
#: pkg/company.go:133 pkg/contacts.go:282
msgctxt "input"
msgid "Web"
msgstr "Web"
#: pkg/company.go:139 pkg/contacts.go:296
#: pkg/company.go:141 pkg/contacts.go:294
msgctxt "input"
msgid "Business name"
msgstr "Nom i cognoms"
#: pkg/company.go:149 pkg/contacts.go:306
#: pkg/company.go:151 pkg/contacts.go:304
msgctxt "input"
msgid "VAT number"
msgstr "DNI / NIF"
#: pkg/company.go:155 pkg/contacts.go:312
#: pkg/company.go:157 pkg/contacts.go:310
msgctxt "input"
msgid "Address"
msgstr "Adreça"
#: pkg/company.go:164 pkg/contacts.go:321
#: pkg/company.go:166 pkg/contacts.go:319
msgctxt "input"
msgid "City"
msgstr "Població"
#: pkg/company.go:170 pkg/contacts.go:327
#: pkg/company.go:172 pkg/contacts.go:325
msgctxt "input"
msgid "Province"
msgstr "Província"
#: pkg/company.go:176 pkg/contacts.go:333
#: pkg/company.go:178 pkg/contacts.go:331
msgctxt "input"
msgid "Postal code"
msgstr "Codi postal"
#: pkg/company.go:185 pkg/contacts.go:342
#: pkg/company.go:187 pkg/contacts.go:340
msgctxt "input"
msgid "Country"
msgstr "País"
#: pkg/company.go:195
#: pkg/company.go:197
msgctxt "input"
msgid "Currency"
msgstr "Moneda"
#: pkg/company.go:226 pkg/contacts.go:394
#: pkg/company.go:228 pkg/contacts.go:392
msgid "Selected country is not valid."
msgstr "Heu seleccionat un país que no és vàlid."
#: pkg/company.go:230 pkg/contacts.go:397
#: pkg/company.go:232 pkg/contacts.go:395
msgid "Business name can not be empty."
msgstr "No podeu deixar el nom i els cognoms en blanc."
#: pkg/company.go:231 pkg/contacts.go:398
#: pkg/company.go:233 pkg/contacts.go:396
msgid "Business name must have at least two letters."
msgstr "Nom i cognoms han de tenir com a mínim dues lletres."
#: pkg/company.go:232 pkg/contacts.go:400
#: pkg/company.go:234 pkg/contacts.go:398
msgid "VAT number can not be empty."
msgstr "No podeu deixar el DNI o NIF en blanc."
#: pkg/company.go:233 pkg/contacts.go:401
#: pkg/company.go:235 pkg/contacts.go:399
msgid "This value is not a valid VAT number."
msgstr "Aquest valor no és un DNI o NIF vàlid."
#: pkg/company.go:235
#: pkg/company.go:237
msgid "Phone can not be empty."
msgstr "No podeu deixar el telèfon en blanc."
#: pkg/company.go:236 pkg/contacts.go:417
#: pkg/company.go:238 pkg/contacts.go:415
msgid "This value is not a valid phone number."
msgstr "Aquest valor no és un telèfon vàlid."
#: pkg/company.go:242 pkg/contacts.go:423
#: pkg/company.go:244 pkg/contacts.go:421
msgid "This value is not a valid web address. It should be like https://domain.com/."
msgstr "Aquest valor no és una adreça web vàlida. Hauria de ser similar a https://domini.cat/."
#: pkg/company.go:244 pkg/contacts.go:403
#: pkg/company.go:246 pkg/contacts.go:401
msgid "Address can not be empty."
msgstr "No podeu deixar ladreça en blanc."
#: pkg/company.go:245 pkg/contacts.go:404
#: pkg/company.go:247 pkg/contacts.go:402
msgid "City can not be empty."
msgstr "No podeu deixar la població en blanc."
#: pkg/company.go:246 pkg/contacts.go:405
#: pkg/company.go:248 pkg/contacts.go:403
msgid "Province can not be empty."
msgstr "No podeu deixar la província en blanc."
#: pkg/company.go:247 pkg/contacts.go:407
#: pkg/company.go:249 pkg/contacts.go:405
msgid "Postal code can not be empty."
msgstr "No podeu deixar el codi postal en blanc."
#: pkg/company.go:248 pkg/contacts.go:408
#: pkg/company.go:250 pkg/contacts.go:406
msgid "This value is not a valid postal code."
msgstr "Aquest valor no és un codi postal vàlid."
#: pkg/company.go:250
#: pkg/company.go:252
msgid "Selected currency is not valid."
msgstr "Heu seleccionat una moneda que no és vàlida."
@ -1163,60 +1173,64 @@ msgstr "No podeu deixar el format del número de pressupost en blanc."
msgid "Next quotation number must be a number greater than zero."
msgstr "El següent número de pressupost ha de ser un número major a zero."
#: pkg/company.go:614
#: pkg/company.go:612
msgctxt "input"
msgid "Tax name"
msgstr "Nom impost"
#: pkg/company.go:620
#: pkg/company.go:618
msgctxt "input"
msgid "Tax Class"
msgstr "Classe dimpost"
#: pkg/company.go:623
#: pkg/company.go:621
msgid "Select a tax class"
msgstr "Escolliu una classe dimpost"
#: pkg/company.go:627
#: pkg/company.go:625
msgctxt "input"
msgid "Rate (%)"
msgstr "Percentatge"
#: pkg/company.go:650
#: pkg/company.go:648
msgid "Tax name can not be empty."
msgstr "No podeu deixar el nom de limpost en blanc."
#: pkg/company.go:651
#: pkg/company.go:649
msgid "Selected tax class is not valid."
msgstr "Heu seleccionat una classe dimpost que no és vàlida."
#: pkg/company.go:652
#: pkg/company.go:650
msgid "Tax rate can not be empty."
msgstr "No podeu deixar percentatge en blanc."
#: pkg/company.go:653
#: pkg/company.go:651
msgid "Tax rate must be an integer between -99 and 99."
msgstr "El percentatge ha de ser entre -99 i 99."
#: pkg/company.go:762
#: pkg/company.go:768
msgctxt "input"
msgid "Payment method name"
msgstr "Nom del mètode de pagament"
#: pkg/company.go:768
#: pkg/company.go:774
msgctxt "input"
msgid "Instructions"
msgstr "Instruccions"
#: pkg/company.go:786
#: pkg/company.go:792
msgid "Payment method name can not be empty."
msgstr "No podeu deixar el nom del mètode de pagament en blanc."
#: pkg/company.go:787
#: pkg/company.go:793
msgid "Payment instructions can not be empty."
msgstr "No podeu deixar les instruccions de pagament en blanc."
#: pkg/quote.go:147 pkg/quote.go:686 pkg/invoices.go:150 pkg/invoices.go:851
#: pkg/company.go:845 pkg/quote.go:755 pkg/invoices.go:928
msgid "Selected payment method is not valid."
msgstr "Heu seleccionat un mètode de pagament que no és vàlid."
#: pkg/quote.go:147 pkg/quote.go:684 pkg/invoices.go:150 pkg/invoices.go:849
msgctxt "input"
msgid "Customer"
msgstr "Client"
@ -1225,12 +1239,12 @@ msgstr "Client"
msgid "All customers"
msgstr "Tots els clients"
#: pkg/quote.go:153 pkg/quote.go:680
#: pkg/quote.go:153 pkg/quote.go:678
msgctxt "input"
msgid "Quotation Status"
msgstr "Estat del pressupost"
#: pkg/quote.go:154 pkg/expenses.go:490 pkg/invoices.go:157
#: pkg/quote.go:154 pkg/expenses.go:488 pkg/invoices.go:157
msgid "All status"
msgstr "Tots els estats"
@ -1239,12 +1253,12 @@ msgctxt "input"
msgid "Quotation Number"
msgstr "Número de pressupost"
#: pkg/quote.go:164 pkg/expenses.go:475 pkg/invoices.go:167
#: pkg/quote.go:164 pkg/expenses.go:473 pkg/invoices.go:167
msgctxt "input"
msgid "From Date"
msgstr "A partir de la data"
#: pkg/quote.go:169 pkg/expenses.go:480 pkg/invoices.go:172
#: pkg/quote.go:169 pkg/expenses.go:478 pkg/invoices.go:172
msgctxt "input"
msgid "To Date"
msgstr "Fins la data"
@ -1257,104 +1271,100 @@ msgstr "Els pressuposts han de tenir totes les etiquetes."
msgid "Quotations must have at least one of the specified labels."
msgstr "Els pressuposts han de tenir com a mínim una de les etiquetes."
#: pkg/quote.go:618
#: pkg/quote.go:616
msgid "quotations.zip"
msgstr "pressuposts.zip"
#: pkg/quote.go:632
#: pkg/quote.go:630
msgid "quotations.ods"
msgstr "pressuposts.ods"
#: pkg/quote.go:634 pkg/quote.go:1176 pkg/quote.go:1184 pkg/expenses.go:645
#: pkg/expenses.go:675 pkg/invoices.go:683 pkg/invoices.go:1413
#: pkg/invoices.go:1421
#: pkg/quote.go:632 pkg/quote.go:1172 pkg/quote.go:1180 pkg/expenses.go:641
#: pkg/expenses.go:671 pkg/invoices.go:681 pkg/invoices.go:1409
#: pkg/invoices.go:1417
msgid "Invalid action"
msgstr "Acció invàlida."
#: pkg/quote.go:687
#: pkg/quote.go:685
msgid "Select a customer to quote."
msgstr "Escolliu un client a pressupostar."
#: pkg/quote.go:692
#: pkg/quote.go:690
msgctxt "input"
msgid "Quotation Date"
msgstr "Data del pressupost"
#: pkg/quote.go:698
#: pkg/quote.go:696
msgctxt "input"
msgid "Terms and conditions"
msgstr "Condicions dacceptació"
#: pkg/quote.go:703 pkg/invoices.go:863
#: pkg/quote.go:701 pkg/invoices.go:861
msgctxt "input"
msgid "Notes"
msgstr "Notes"
#: pkg/quote.go:712 pkg/invoices.go:873
#: pkg/quote.go:710 pkg/invoices.go:871
msgctxt "input"
msgid "Payment Method"
msgstr "Mètode de pagament"
#: pkg/quote.go:713
#: pkg/quote.go:711
msgid "Select a payment method."
msgstr "Escolliu un mètode de pagament."
#: pkg/quote.go:749
#: pkg/quote.go:747
msgid "Selected quotation status is not valid."
msgstr "Heu seleccionat un estat de pressupost que no és vàlid."
#: pkg/quote.go:751 pkg/invoices.go:926
#: pkg/quote.go:749 pkg/invoices.go:924
msgid "Selected customer is not valid."
msgstr "Heu seleccionat un client que no és vàlid."
#: pkg/quote.go:753
#: pkg/quote.go:751
msgid "Quotation date can not be empty."
msgstr "No podeu deixar la data del pressupost en blanc."
#: pkg/quote.go:754
#: pkg/quote.go:752
msgid "Quotation date must be a valid date."
msgstr "La data del pressupost ha de ser vàlida."
#: pkg/quote.go:757 pkg/invoices.go:930
msgid "Selected payment method is not valid."
msgstr "Heu seleccionat un mètode de pagament que no és vàlid."
#: pkg/quote.go:891 pkg/quote.go:896 pkg/invoices.go:1122 pkg/invoices.go:1127
#: pkg/quote.go:889 pkg/quote.go:894 pkg/invoices.go:1120 pkg/invoices.go:1125
msgctxt "input"
msgid "Id"
msgstr "Identificador"
#: pkg/quote.go:929 pkg/invoices.go:1160
#: pkg/quote.go:927 pkg/invoices.go:1158
msgctxt "input"
msgid "Quantity"
msgstr "Quantitat"
#: pkg/quote.go:938 pkg/invoices.go:1169
#: pkg/quote.go:936 pkg/invoices.go:1167
msgctxt "input"
msgid "Discount (%)"
msgstr "Descompte (%)"
#: pkg/quote.go:992
#: pkg/quote.go:990
msgid "Quotation product ID must be a number greater than zero."
msgstr "LID del producte de pressupost ha de ser un número major a zero."
#: pkg/quote.go:995 pkg/invoices.go:1226
#: pkg/quote.go:993 pkg/invoices.go:1224
msgid "Product ID must be a positive number or zero."
msgstr "LID del producte ha de ser un número positiu o zero."
#: pkg/quote.go:1001 pkg/invoices.go:1232
#: pkg/quote.go:999 pkg/invoices.go:1230
msgid "Quantity can not be empty."
msgstr "No podeu deixar la quantitat en blanc."
#: pkg/quote.go:1002 pkg/invoices.go:1233
#: pkg/quote.go:1000 pkg/invoices.go:1231
msgid "Quantity must be a number greater than zero."
msgstr "La quantitat ha de ser un número major a zero."
#: pkg/quote.go:1004 pkg/invoices.go:1235
#: pkg/quote.go:1002 pkg/invoices.go:1233
msgid "Discount can not be empty."
msgstr "No podeu deixar el descompte en blanc."
#: pkg/quote.go:1005 pkg/invoices.go:1236
#: pkg/quote.go:1003 pkg/invoices.go:1234
msgid "Discount must be a percentage between 0 and 100."
msgstr "El descompte ha de ser un percentatge entre 0 i 100."
@ -1426,7 +1436,7 @@ msgctxt "input"
msgid "Amount"
msgstr "Import"
#: pkg/payments.go:415 pkg/expenses.go:330 pkg/invoices.go:879
#: pkg/payments.go:415 pkg/expenses.go:330 pkg/invoices.go:877
msgctxt "input"
msgid "File"
msgstr "Fitxer"
@ -1463,7 +1473,7 @@ msgstr "No podeu deixar limport en blanc."
msgid "Amount must be a number greater than zero."
msgstr "Limport ha de ser un número major a zero."
#: pkg/accounts.go:146 pkg/contacts.go:352
#: pkg/accounts.go:146 pkg/contacts.go:350
msgctxt "input"
msgid "IBAN"
msgstr "IBAN"
@ -1553,7 +1563,7 @@ msgstr "Any anterior"
msgid "Select a contact."
msgstr "Escolliu un contacte."
#: pkg/expenses.go:293 pkg/expenses.go:464
#: pkg/expenses.go:293 pkg/expenses.go:462
msgctxt "input"
msgid "Contact"
msgstr "Contacte"
@ -1563,7 +1573,7 @@ msgctxt "input"
msgid "Invoice number"
msgstr "Número de factura"
#: pkg/expenses.go:304 pkg/invoices.go:857
#: pkg/expenses.go:304 pkg/invoices.go:855
msgctxt "input"
msgid "Invoice Date"
msgstr "Data de factura"
@ -1572,25 +1582,25 @@ msgstr "Data de factura"
msgid "Selected contact is not valid."
msgstr "Heu seleccionat un contacte que no és vàlid."
#: pkg/expenses.go:369 pkg/invoices.go:928
#: pkg/expenses.go:369 pkg/invoices.go:926
msgid "Invoice date must be a valid date."
msgstr "La data de facturació ha de ser vàlida."
#: pkg/expenses.go:465
#: pkg/expenses.go:463
msgid "All contacts"
msgstr "Tots els contactes"
#: pkg/expenses.go:470 pkg/invoices.go:162
#: pkg/expenses.go:468 pkg/invoices.go:162
msgctxt "input"
msgid "Invoice Number"
msgstr "Número de factura"
#: pkg/expenses.go:489
#: pkg/expenses.go:487
msgctxt "input"
msgid "Expense Status"
msgstr "Estat de la despesa"
#: pkg/expenses.go:673
#: pkg/expenses.go:669
msgid "expenses.ods"
msgstr "despeses.ods"
@ -1603,55 +1613,55 @@ msgstr "Estat de la factura"
msgid "Select a customer to bill."
msgstr "Escolliu un client a facturar."
#: pkg/invoices.go:663
#: pkg/invoices.go:661
msgid "invoices.zip"
msgstr "factures.zip"
#: pkg/invoices.go:681
#: pkg/invoices.go:679
msgid "invoices.ods"
msgstr "factures.ods"
#: pkg/invoices.go:927
#: pkg/invoices.go:925
msgid "Invoice date can not be empty."
msgstr "No podeu deixar la data de la factura en blanc."
#: pkg/invoices.go:1059
#: pkg/invoices.go:1057
#, c-format
msgid "Re: quotation #%s of %s"
msgstr "Ref: pressupost núm. %s del %s"
#: pkg/invoices.go:1060
#: pkg/invoices.go:1058
msgctxt "to_char"
msgid "MM/DD/YYYY"
msgstr "DD/MM/YYYY"
#: pkg/invoices.go:1223
#: pkg/invoices.go:1221
msgid "Invoice product ID must be a number greater than zero."
msgstr "LID del producte de factura ha de ser un número major a zero."
#: pkg/contacts.go:292
#: pkg/contacts.go:290
msgctxt "input"
msgid "Need to input tax details"
msgstr "Necessito poder facturar aquest contacte"
#: pkg/contacts.go:357
#: pkg/contacts.go:355
msgctxt "bic"
msgid "BIC"
msgstr "BIC"
#: pkg/contacts.go:413
#: pkg/contacts.go:411
msgid "Name must have at least two letters."
msgstr "El nom ha de tenir com a mínim dues lletres."
#: pkg/contacts.go:426
#: pkg/contacts.go:424
msgid "This values is not a valid IBAN."
msgstr "Aquest valor no és un IBAN vàlid."
#: pkg/contacts.go:429
#: pkg/contacts.go:427
msgid "This values is not a valid BIC."
msgstr "Aquest valor no és un BIC vàlid."
#: pkg/contacts.go:518
#: pkg/contacts.go:516
msgctxt "input"
msgid "Holded Excel file"
msgstr "Fitxer Excel del Holded"

268
po/es.po
View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: numerus\n"
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
"POT-Creation-Date: 2024-08-26 14:46+0200\n"
"POT-Creation-Date: 2024-08-28 11:05+0200\n"
"PO-Revision-Date: 2023-01-18 17:45+0100\n"
"Last-Translator: jordi fita mas <jordi@tandem.blog>\n"
"Language-Team: Spanish <es@tp.org.es>\n"
@ -701,7 +701,7 @@ msgid "Class"
msgstr "Clase"
#: web/template/company/taxes.gohtml:29
#: web/template/company/payment_methods.gohtml:28
#: web/template/company/payment_methods.gohtml:29
msgid "Are you sure?"
msgstr "¿Estáis seguro?"
@ -736,24 +736,34 @@ 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:24
#: web/template/company/payment_methods.gohtml:25
msgctxt "title"
msgid "Instructions"
msgstr "Instrucciones"
#: web/template/company/payment_methods.gohtml:48
#: 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:55
#: 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:64
#: web/template/company/payment_methods.gohtml:96
msgctxt "action"
msgid "Add new payment method"
msgstr "Añadir nuevo método de pago"
@ -903,7 +913,7 @@ msgctxt "title"
msgid "VAT number"
msgstr "DNI / NIF"
#: pkg/login.go:38 pkg/company.go:122 pkg/profile.go:40 pkg/contacts.go:276
#: pkg/login.go:38 pkg/company.go:124 pkg/profile.go:40 pkg/contacts.go:274
msgctxt "input"
msgid "Email"
msgstr "Correo-e"
@ -913,11 +923,11 @@ msgctxt "input"
msgid "Password"
msgstr "Contraseña"
#: pkg/login.go:76 pkg/company.go:238 pkg/profile.go:89
#: pkg/login.go:76 pkg/company.go:240 pkg/profile.go:89
msgid "Email can not be empty."
msgstr "No podéis dejar el correo-e en blanco."
#: pkg/login.go:77 pkg/company.go:239 pkg/profile.go:90 pkg/contacts.go:420
#: pkg/login.go:77 pkg/company.go:241 pkg/profile.go:90 pkg/contacts.go:418
msgid "This value is not a valid email. It should be like name@domain.com."
msgstr "Este valor no es un correo-e válido. Tiene que ser parecido a nombre@dominio.es."
@ -929,196 +939,196 @@ msgstr "No podéis dejar la contraseña en blanco."
msgid "Invalid user or password."
msgstr "Nombre de usuario o contraseña inválido."
#: pkg/products.go:172 pkg/products.go:276 pkg/quote.go:901 pkg/accounts.go:140
#: pkg/invoices.go:1132 pkg/contacts.go:149 pkg/contacts.go:262
#: pkg/products.go:168 pkg/products.go:272 pkg/quote.go:899 pkg/accounts.go:140
#: pkg/invoices.go:1130 pkg/contacts.go:147 pkg/contacts.go:260
msgctxt "input"
msgid "Name"
msgstr "Nombre"
#: pkg/products.go:177 pkg/products.go:303 pkg/tags.go:37 pkg/quote.go:174
#: pkg/quote.go:708 pkg/payments.go:420 pkg/expenses.go:335 pkg/expenses.go:485
#: pkg/invoices.go:177 pkg/invoices.go:868 pkg/contacts.go:154
#: pkg/contacts.go:362
#: pkg/products.go:173 pkg/products.go:299 pkg/tags.go:37 pkg/quote.go:174
#: pkg/quote.go:706 pkg/payments.go:420 pkg/expenses.go:335 pkg/expenses.go:483
#: pkg/invoices.go:177 pkg/invoices.go:866 pkg/contacts.go:152
#: pkg/contacts.go:360
msgctxt "input"
msgid "Tags"
msgstr "Etiquetes"
#: pkg/products.go:181 pkg/quote.go:178 pkg/expenses.go:495 pkg/invoices.go:181
#: pkg/contacts.go:158
#: pkg/products.go:177 pkg/quote.go:178 pkg/expenses.go:493 pkg/invoices.go:181
#: pkg/contacts.go:156
msgctxt "input"
msgid "Tags Condition"
msgstr "Condición de las etiquetas"
#: pkg/products.go:185 pkg/quote.go:182 pkg/expenses.go:499 pkg/invoices.go:185
#: pkg/contacts.go:162
#: pkg/products.go:181 pkg/quote.go:182 pkg/expenses.go:497 pkg/invoices.go:185
#: pkg/contacts.go:160
msgctxt "tag condition"
msgid "All"
msgstr "Todas"
#: pkg/products.go:186 pkg/expenses.go:500 pkg/invoices.go:186
#: pkg/contacts.go:163
#: pkg/products.go:182 pkg/expenses.go:498 pkg/invoices.go:186
#: pkg/contacts.go:161
msgid "Invoices must have all the specified labels."
msgstr "Las facturas deben tener todas las etiquetas."
#: pkg/products.go:190 pkg/quote.go:187 pkg/expenses.go:504 pkg/invoices.go:190
#: pkg/contacts.go:167
#: pkg/products.go:186 pkg/quote.go:187 pkg/expenses.go:502 pkg/invoices.go:190
#: pkg/contacts.go:165
msgctxt "tag condition"
msgid "Any"
msgstr "Cualquiera"
#: pkg/products.go:191 pkg/expenses.go:505 pkg/invoices.go:191
#: pkg/contacts.go:168
#: pkg/products.go:187 pkg/expenses.go:503 pkg/invoices.go:191
#: pkg/contacts.go:166
msgid "Invoices must have at least one of the specified labels."
msgstr "Las facturas deben tener como mínimo una de las etiquetas."
#: pkg/products.go:282 pkg/quote.go:915 pkg/payments.go:387
#: pkg/invoices.go:1146
#: pkg/products.go:278 pkg/quote.go:913 pkg/payments.go:387
#: pkg/invoices.go:1144
msgctxt "input"
msgid "Description"
msgstr "Descripción"
#: pkg/products.go:287 pkg/quote.go:919 pkg/invoices.go:1150
#: pkg/products.go:283 pkg/quote.go:917 pkg/invoices.go:1148
msgctxt "input"
msgid "Price"
msgstr "Precio"
#: pkg/products.go:297 pkg/quote.go:948 pkg/expenses.go:310
#: pkg/invoices.go:1179
#: pkg/products.go:293 pkg/quote.go:946 pkg/expenses.go:310
#: pkg/invoices.go:1177
msgctxt "input"
msgid "Taxes"
msgstr "Impuestos"
#: pkg/products.go:322 pkg/quote.go:997 pkg/profile.go:92 pkg/invoices.go:1228
#: pkg/contacts.go:412
#: pkg/products.go:318 pkg/quote.go:995 pkg/profile.go:92 pkg/invoices.go:1226
#: pkg/contacts.go:410
msgid "Name can not be empty."
msgstr "No podéis dejar el nombre en blanco."
#: pkg/products.go:323 pkg/quote.go:998 pkg/invoices.go:1229
#: pkg/products.go:319 pkg/quote.go:996 pkg/invoices.go:1227
msgid "Price can not be empty."
msgstr "No podéis dejar el precio en blanco."
#: pkg/products.go:324 pkg/quote.go:999 pkg/invoices.go:1230
#: pkg/products.go:320 pkg/quote.go:997 pkg/invoices.go:1228
msgid "Price must be a number greater than zero."
msgstr "El precio tiene que ser un número mayor a cero."
#: pkg/products.go:326 pkg/quote.go:1007 pkg/expenses.go:370
#: pkg/invoices.go:1238
#: pkg/products.go:322 pkg/quote.go:1005 pkg/expenses.go:370
#: pkg/invoices.go:1236
msgid "Selected tax is not valid."
msgstr "Habéis escogido un impuesto que no es válido."
#: pkg/products.go:327 pkg/quote.go:1008 pkg/expenses.go:371
#: pkg/invoices.go:1239
#: pkg/products.go:323 pkg/quote.go:1006 pkg/expenses.go:371
#: pkg/invoices.go:1237
msgid "You can only select a tax of each class."
msgstr "Solo podéis escoger un impuesto de cada clase."
#: pkg/company.go:108
#: pkg/company.go:110
msgctxt "input"
msgid "Trade name"
msgstr "Nombre comercial"
#: pkg/company.go:113 pkg/contacts.go:268
#: pkg/company.go:115 pkg/contacts.go:266
msgctxt "input"
msgid "Phone"
msgstr "Teléfono"
#: pkg/company.go:131 pkg/contacts.go:284
#: pkg/company.go:133 pkg/contacts.go:282
msgctxt "input"
msgid "Web"
msgstr "Web"
#: pkg/company.go:139 pkg/contacts.go:296
#: pkg/company.go:141 pkg/contacts.go:294
msgctxt "input"
msgid "Business name"
msgstr "Nombre y apellidos"
#: pkg/company.go:149 pkg/contacts.go:306
#: pkg/company.go:151 pkg/contacts.go:304
msgctxt "input"
msgid "VAT number"
msgstr "DNI / NIF"
#: pkg/company.go:155 pkg/contacts.go:312
#: pkg/company.go:157 pkg/contacts.go:310
msgctxt "input"
msgid "Address"
msgstr "Dirección"
#: pkg/company.go:164 pkg/contacts.go:321
#: pkg/company.go:166 pkg/contacts.go:319
msgctxt "input"
msgid "City"
msgstr "Población"
#: pkg/company.go:170 pkg/contacts.go:327
#: pkg/company.go:172 pkg/contacts.go:325
msgctxt "input"
msgid "Province"
msgstr "Provincia"
#: pkg/company.go:176 pkg/contacts.go:333
#: pkg/company.go:178 pkg/contacts.go:331
msgctxt "input"
msgid "Postal code"
msgstr "Código postal"
#: pkg/company.go:185 pkg/contacts.go:342
#: pkg/company.go:187 pkg/contacts.go:340
msgctxt "input"
msgid "Country"
msgstr "País"
#: pkg/company.go:195
#: pkg/company.go:197
msgctxt "input"
msgid "Currency"
msgstr "Moneda"
#: pkg/company.go:226 pkg/contacts.go:394
#: pkg/company.go:228 pkg/contacts.go:392
msgid "Selected country is not valid."
msgstr "Habéis escogido un país que no es válido."
#: pkg/company.go:230 pkg/contacts.go:397
#: pkg/company.go:232 pkg/contacts.go:395
msgid "Business name can not be empty."
msgstr "No podéis dejar el nombre y los apellidos en blanco."
#: pkg/company.go:231 pkg/contacts.go:398
#: pkg/company.go:233 pkg/contacts.go:396
msgid "Business name must have at least two letters."
msgstr "El nombre y los apellidos deben contener como mínimo dos letras."
#: pkg/company.go:232 pkg/contacts.go:400
#: pkg/company.go:234 pkg/contacts.go:398
msgid "VAT number can not be empty."
msgstr "No podéis dejar el DNI o NIF en blanco."
#: pkg/company.go:233 pkg/contacts.go:401
#: pkg/company.go:235 pkg/contacts.go:399
msgid "This value is not a valid VAT number."
msgstr "Este valor no es un DNI o NIF válido."
#: pkg/company.go:235
#: pkg/company.go:237
msgid "Phone can not be empty."
msgstr "No podéis dejar el teléfono en blanco."
#: pkg/company.go:236 pkg/contacts.go:417
#: pkg/company.go:238 pkg/contacts.go:415
msgid "This value is not a valid phone number."
msgstr "Este valor no es un teléfono válido."
#: pkg/company.go:242 pkg/contacts.go:423
#: pkg/company.go:244 pkg/contacts.go:421
msgid "This value is not a valid web address. It should be like https://domain.com/."
msgstr "Este valor no es una dirección web válida. Tiene que ser parecida a https://dominio.es/."
#: pkg/company.go:244 pkg/contacts.go:403
#: pkg/company.go:246 pkg/contacts.go:401
msgid "Address can not be empty."
msgstr "No podéis dejar la dirección en blanco."
#: pkg/company.go:245 pkg/contacts.go:404
#: pkg/company.go:247 pkg/contacts.go:402
msgid "City can not be empty."
msgstr "No podéis dejar la población en blanco."
#: pkg/company.go:246 pkg/contacts.go:405
#: pkg/company.go:248 pkg/contacts.go:403
msgid "Province can not be empty."
msgstr "No podéis dejar la provincia en blanco."
#: pkg/company.go:247 pkg/contacts.go:407
#: pkg/company.go:249 pkg/contacts.go:405
msgid "Postal code can not be empty."
msgstr "No podéis dejar el código postal en blanco."
#: pkg/company.go:248 pkg/contacts.go:408
#: pkg/company.go:250 pkg/contacts.go:406
msgid "This value is not a valid postal code."
msgstr "Este valor no es un código postal válido válido."
#: pkg/company.go:250
#: pkg/company.go:252
msgid "Selected currency is not valid."
msgstr "Habéis escogido una moneda que no es válida."
@ -1163,60 +1173,64 @@ msgstr "No podéis dejar el formato del número de presupuesto en blanco."
msgid "Next quotation number must be a number greater than zero."
msgstr "El siguiente número de presupuesto tiene que ser un número mayor a cero."
#: pkg/company.go:614
#: pkg/company.go:612
msgctxt "input"
msgid "Tax name"
msgstr "Nombre impuesto"
#: pkg/company.go:620
#: pkg/company.go:618
msgctxt "input"
msgid "Tax Class"
msgstr "Clase de impuesto"
#: pkg/company.go:623
#: pkg/company.go:621
msgid "Select a tax class"
msgstr "Escoged una clase de impuesto"
#: pkg/company.go:627
#: pkg/company.go:625
msgctxt "input"
msgid "Rate (%)"
msgstr "Porcentaje"
#: pkg/company.go:650
#: pkg/company.go:648
msgid "Tax name can not be empty."
msgstr "No podéis dejar el nombre del impuesto en blanco."
#: pkg/company.go:651
#: pkg/company.go:649
msgid "Selected tax class is not valid."
msgstr "Habéis escogido una clase impuesto que no es válida."
#: pkg/company.go:652
#: pkg/company.go:650
msgid "Tax rate can not be empty."
msgstr "No podéis dejar el porcentaje en blanco."
#: pkg/company.go:653
#: pkg/company.go:651
msgid "Tax rate must be an integer between -99 and 99."
msgstr "El porcentaje tiene que estar entre -99 y 99."
#: pkg/company.go:762
#: pkg/company.go:768
msgctxt "input"
msgid "Payment method name"
msgstr "Nombre del método de pago"
#: pkg/company.go:768
#: pkg/company.go:774
msgctxt "input"
msgid "Instructions"
msgstr "Instrucciones"
#: pkg/company.go:786
#: pkg/company.go:792
msgid "Payment method name can not be empty."
msgstr "No podéis dejar el nombre del método de pago en blanco."
#: pkg/company.go:787
#: pkg/company.go:793
msgid "Payment instructions can not be empty."
msgstr "No podéis dejar las instrucciones de pago en blanco."
#: pkg/quote.go:147 pkg/quote.go:686 pkg/invoices.go:150 pkg/invoices.go:851
#: pkg/company.go:845 pkg/quote.go:755 pkg/invoices.go:928
msgid "Selected payment method is not valid."
msgstr "Habéis escogido un método de pago que no es válido."
#: pkg/quote.go:147 pkg/quote.go:684 pkg/invoices.go:150 pkg/invoices.go:849
msgctxt "input"
msgid "Customer"
msgstr "Cliente"
@ -1225,12 +1239,12 @@ msgstr "Cliente"
msgid "All customers"
msgstr "Todos los clientes"
#: pkg/quote.go:153 pkg/quote.go:680
#: pkg/quote.go:153 pkg/quote.go:678
msgctxt "input"
msgid "Quotation Status"
msgstr "Estado del presupuesto"
#: pkg/quote.go:154 pkg/expenses.go:490 pkg/invoices.go:157
#: pkg/quote.go:154 pkg/expenses.go:488 pkg/invoices.go:157
msgid "All status"
msgstr "Todos los estados"
@ -1239,12 +1253,12 @@ msgctxt "input"
msgid "Quotation Number"
msgstr "Número de presupuesto"
#: pkg/quote.go:164 pkg/expenses.go:475 pkg/invoices.go:167
#: pkg/quote.go:164 pkg/expenses.go:473 pkg/invoices.go:167
msgctxt "input"
msgid "From Date"
msgstr "A partir de la fecha"
#: pkg/quote.go:169 pkg/expenses.go:480 pkg/invoices.go:172
#: pkg/quote.go:169 pkg/expenses.go:478 pkg/invoices.go:172
msgctxt "input"
msgid "To Date"
msgstr "Hasta la fecha"
@ -1257,104 +1271,100 @@ msgstr "Los presupuestos deben tener todas las etiquetas."
msgid "Quotations must have at least one of the specified labels."
msgstr "Los presupuestos deben tener como mínimo una de las etiquetas."
#: pkg/quote.go:618
#: pkg/quote.go:616
msgid "quotations.zip"
msgstr "presupuestos.zip"
#: pkg/quote.go:632
#: pkg/quote.go:630
msgid "quotations.ods"
msgstr "presupuestos.ods"
#: pkg/quote.go:634 pkg/quote.go:1176 pkg/quote.go:1184 pkg/expenses.go:645
#: pkg/expenses.go:675 pkg/invoices.go:683 pkg/invoices.go:1413
#: pkg/invoices.go:1421
#: pkg/quote.go:632 pkg/quote.go:1172 pkg/quote.go:1180 pkg/expenses.go:641
#: pkg/expenses.go:671 pkg/invoices.go:681 pkg/invoices.go:1409
#: pkg/invoices.go:1417
msgid "Invalid action"
msgstr "Acción inválida."
#: pkg/quote.go:687
#: pkg/quote.go:685
msgid "Select a customer to quote."
msgstr "Escoged un cliente a presupuestar."
#: pkg/quote.go:692
#: pkg/quote.go:690
msgctxt "input"
msgid "Quotation Date"
msgstr "Fecha del presupuesto"
#: pkg/quote.go:698
#: pkg/quote.go:696
msgctxt "input"
msgid "Terms and conditions"
msgstr "Condiciones de aceptación"
#: pkg/quote.go:703 pkg/invoices.go:863
#: pkg/quote.go:701 pkg/invoices.go:861
msgctxt "input"
msgid "Notes"
msgstr "Notas"
#: pkg/quote.go:712 pkg/invoices.go:873
#: pkg/quote.go:710 pkg/invoices.go:871
msgctxt "input"
msgid "Payment Method"
msgstr "Método de pago"
#: pkg/quote.go:713
#: pkg/quote.go:711
msgid "Select a payment method."
msgstr "Escoged un método e pago."
#: pkg/quote.go:749
#: pkg/quote.go:747
msgid "Selected quotation status is not valid."
msgstr "Habéis escogido un estado de presupuesto que no es válido."
#: pkg/quote.go:751 pkg/invoices.go:926
#: pkg/quote.go:749 pkg/invoices.go:924
msgid "Selected customer is not valid."
msgstr "Habéis escogido un cliente que no es válido."
#: pkg/quote.go:753
#: pkg/quote.go:751
msgid "Quotation date can not be empty."
msgstr "No podéis dejar la fecha del presupuesto en blanco."
#: pkg/quote.go:754
#: pkg/quote.go:752
msgid "Quotation date must be a valid date."
msgstr "La fecha de presupuesto debe ser válida."
#: pkg/quote.go:757 pkg/invoices.go:930
msgid "Selected payment method is not valid."
msgstr "Habéis escogido un método de pago que no es válido."
#: pkg/quote.go:891 pkg/quote.go:896 pkg/invoices.go:1122 pkg/invoices.go:1127
#: pkg/quote.go:889 pkg/quote.go:894 pkg/invoices.go:1120 pkg/invoices.go:1125
msgctxt "input"
msgid "Id"
msgstr "Identificador"
#: pkg/quote.go:929 pkg/invoices.go:1160
#: pkg/quote.go:927 pkg/invoices.go:1158
msgctxt "input"
msgid "Quantity"
msgstr "Cantidad"
#: pkg/quote.go:938 pkg/invoices.go:1169
#: pkg/quote.go:936 pkg/invoices.go:1167
msgctxt "input"
msgid "Discount (%)"
msgstr "Descuento (%)"
#: pkg/quote.go:992
#: pkg/quote.go:990
msgid "Quotation product ID must be a number greater than zero."
msgstr "El ID de producto de presupuesto tiene que ser un número mayor a cero."
#: pkg/quote.go:995 pkg/invoices.go:1226
#: pkg/quote.go:993 pkg/invoices.go:1224
msgid "Product ID must be a positive number or zero."
msgstr "El ID de producto tiene que ser un número positivo o cero."
#: pkg/quote.go:1001 pkg/invoices.go:1232
#: pkg/quote.go:999 pkg/invoices.go:1230
msgid "Quantity can not be empty."
msgstr "No podéis dejar la cantidad en blanco."
#: pkg/quote.go:1002 pkg/invoices.go:1233
#: pkg/quote.go:1000 pkg/invoices.go:1231
msgid "Quantity must be a number greater than zero."
msgstr "La cantidad tiene que ser un número mayor a cero."
#: pkg/quote.go:1004 pkg/invoices.go:1235
#: pkg/quote.go:1002 pkg/invoices.go:1233
msgid "Discount can not be empty."
msgstr "No podéis dejar el descuento en blanco."
#: pkg/quote.go:1005 pkg/invoices.go:1236
#: pkg/quote.go:1003 pkg/invoices.go:1234
msgid "Discount must be a percentage between 0 and 100."
msgstr "El descuento tiene que ser un porcentaje entre 0 y 100."
@ -1426,7 +1436,7 @@ msgctxt "input"
msgid "Amount"
msgstr "Importe"
#: pkg/payments.go:415 pkg/expenses.go:330 pkg/invoices.go:879
#: pkg/payments.go:415 pkg/expenses.go:330 pkg/invoices.go:877
msgctxt "input"
msgid "File"
msgstr "Archivo"
@ -1463,7 +1473,7 @@ msgstr "No podéis dejar el importe en blanco."
msgid "Amount must be a number greater than zero."
msgstr "El importe tiene que ser un número mayor a cero."
#: pkg/accounts.go:146 pkg/contacts.go:352
#: pkg/accounts.go:146 pkg/contacts.go:350
msgctxt "input"
msgid "IBAN"
msgstr "IBAN"
@ -1553,7 +1563,7 @@ msgstr "Año anterior"
msgid "Select a contact."
msgstr "Escoged un contacto"
#: pkg/expenses.go:293 pkg/expenses.go:464
#: pkg/expenses.go:293 pkg/expenses.go:462
msgctxt "input"
msgid "Contact"
msgstr "Contacto"
@ -1563,7 +1573,7 @@ msgctxt "input"
msgid "Invoice number"
msgstr "Número de factura"
#: pkg/expenses.go:304 pkg/invoices.go:857
#: pkg/expenses.go:304 pkg/invoices.go:855
msgctxt "input"
msgid "Invoice Date"
msgstr "Fecha de factura"
@ -1572,25 +1582,25 @@ msgstr "Fecha de factura"
msgid "Selected contact is not valid."
msgstr "Habéis escogido un contacto que no es válido."
#: pkg/expenses.go:369 pkg/invoices.go:928
#: pkg/expenses.go:369 pkg/invoices.go:926
msgid "Invoice date must be a valid date."
msgstr "La fecha de factura debe ser válida."
#: pkg/expenses.go:465
#: pkg/expenses.go:463
msgid "All contacts"
msgstr "Todos los contactos"
#: pkg/expenses.go:470 pkg/invoices.go:162
#: pkg/expenses.go:468 pkg/invoices.go:162
msgctxt "input"
msgid "Invoice Number"
msgstr "Número de factura"
#: pkg/expenses.go:489
#: pkg/expenses.go:487
msgctxt "input"
msgid "Expense Status"
msgstr "Estado del gasto"
#: pkg/expenses.go:673
#: pkg/expenses.go:669
msgid "expenses.ods"
msgstr "gastos.ods"
@ -1603,55 +1613,55 @@ msgstr "Estado de la factura"
msgid "Select a customer to bill."
msgstr "Escoged un cliente a facturar."
#: pkg/invoices.go:663
#: pkg/invoices.go:661
msgid "invoices.zip"
msgstr "facturas.zip"
#: pkg/invoices.go:681
#: pkg/invoices.go:679
msgid "invoices.ods"
msgstr "facturas.ods"
#: pkg/invoices.go:927
#: pkg/invoices.go:925
msgid "Invoice date can not be empty."
msgstr "No podéis dejar la fecha de la factura en blanco."
#: pkg/invoices.go:1059
#: pkg/invoices.go:1057
#, c-format
msgid "Re: quotation #%s of %s"
msgstr "Ref: presupuesto n.º %s del %s"
#: pkg/invoices.go:1060
#: pkg/invoices.go:1058
msgctxt "to_char"
msgid "MM/DD/YYYY"
msgstr "DD/MM/YYYY"
#: pkg/invoices.go:1223
#: pkg/invoices.go:1221
msgid "Invoice product ID must be a number greater than zero."
msgstr "El ID de producto de factura tiene que ser un número mayor a cero."
#: pkg/contacts.go:292
#: pkg/contacts.go:290
msgctxt "input"
msgid "Need to input tax details"
msgstr "Necesito facturar este contacto"
#: pkg/contacts.go:357
#: pkg/contacts.go:355
msgctxt "bic"
msgid "BIC"
msgstr "BIC"
#: pkg/contacts.go:413
#: pkg/contacts.go:411
msgid "Name must have at least two letters."
msgstr "El nombre debe contener como mínimo dos letras."
#: pkg/contacts.go:426
#: pkg/contacts.go:424
msgid "This values is not a valid IBAN."
msgstr "Este valor no es un IBAN válido."
#: pkg/contacts.go:429
#: pkg/contacts.go:427
msgid "This values is not a valid BIC."
msgstr "Este valor no es un BIC válido."
#: pkg/contacts.go:518
#: pkg/contacts.go:516
msgctxt "input"
msgid "Holded Excel file"
msgstr "Archivo Excel de Holded"

View File

@ -20,6 +20,7 @@
<table>
<thead>
<tr>
<th>{{( pgettext "Default" "title" )}}</th>
<th>{{( pgettext "Payment Method" "title" )}}</th>
<th>{{( pgettext "Instructions" "title" )}}</th>
<th></th>
@ -30,6 +31,16 @@
{{ with .PaymentMethods }}
{{- range $method := . }}
<tr>
<td>
<span class="description-text"></span>
<input type="radio"
form="default_payment_form"
aria-label="{{ pgettext "Set as default" "action" }}"
name="default_payment_id"
value="{{ .Id }}"
{{ if .IsDefault }} checked{{ end}}
>
</td>
<td>{{ .Name }}</td>
<td>{{ .Instructions }}</td>
<td>
@ -45,10 +56,31 @@
{{- end }}
{{ else }}
<tr>
<td colspan="3">{{( gettext "No payment methods added yet." )}}</td>
<td colspan="4">{{( gettext "No payment methods added yet." )}}</td>
</tr>
{{ end }}
</tbody>
{{ if gt (len .PaymentMethods) 1 -}}
<tfoot>
<tr>
<td>
<form id="default_payment_form"
method="POST"
action="{{ companyURI "/payment-methods" }}/default"
data-hx-boost="true"
>
{{ csrfToken }}
{{ putMethod }}
{{ if .UpdateDefaultError -}}
<p>{{ .UpdateDefaultError}}</p>
{{- end }}
<button>{{( pgettext "Set" "action")}}</button>
</form>
</td>
<td colspan="3"></td>
</tr>
</tfoot>
{{- end }}
</table>
<form method="POST" action="{{ companyURI "/payment-methods" }}" data-hx-boost="true">