Add pagination to invoices

I’ve removed the total amount because it is very difficult to get it
with pagination, and customer never saw it (it was from Numerus), thus
they won’t miss it—i hope.
This commit is contained in:
jordi fita mas 2024-05-03 19:13:49 +02:00
parent 674cdff87b
commit 48c1529e6c
7 changed files with 470 additions and 447 deletions

View File

@ -148,14 +148,13 @@ type IndexEntry struct {
}
func serveInvoiceIndex(w http.ResponseWriter, r *http.Request, user *auth.User, company *auth.Company, conn *database.Conn) {
filters := newInvoiceFilterForm(r.Context(), conn, company, user.Locale)
filters := newFilterForm(r.Context(), conn, company, user.Locale)
if err := filters.Parse(r); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
page := &invoiceIndex{
Invoices: mustCollectInvoiceEntries(r.Context(), conn, user.Locale, filters),
TotalAmount: mustComputeInvoicesTotalAmount(r.Context(), conn, filters),
Invoices: filters.buildCursor(mustCollectInvoiceEntries(r.Context(), conn, user.Locale, filters)),
Filters: filters,
InvoiceStatuses: mustCollectInvoiceStatuses(r.Context(), conn, user.Locale),
}
@ -164,16 +163,19 @@ func serveInvoiceIndex(w http.ResponseWriter, r *http.Request, user *auth.User,
type invoiceIndex struct {
Invoices []*IndexEntry
TotalAmount string
Filters *invoiceFilterForm
Filters *filterForm
InvoiceStatuses map[string]string
}
func (page *invoiceIndex) MustRender(w http.ResponseWriter, r *http.Request, user *auth.User, company *auth.Company) {
template.MustRenderAdmin(w, r, user, company, "invoice/index.gohtml", page)
if httplib.IsHTMxRequest(r) && page.Filters.Paginated() {
template.MustRenderAdminNoLayout(w, r, user, company, "invoice/results.gohtml", page)
} else {
template.MustRenderAdminFiles(w, r, user, company, page, "invoice/index.gohtml", "invoice/results.gohtml")
}
}
func mustCollectInvoiceEntries(ctx context.Context, conn *database.Conn, locale *locale.Locale, filters *invoiceFilterForm) []*IndexEntry {
func mustCollectInvoiceEntries(ctx context.Context, conn *database.Conn, locale *locale.Locale, filters *filterForm) []*IndexEntry {
where, args := filters.BuildQuery([]interface{}{locale.Language.String()})
rows, err := conn.Query(ctx, fmt.Sprintf(`
select invoice_id
@ -192,7 +194,8 @@ func mustCollectInvoiceEntries(ctx context.Context, conn *database.Conn, locale
where (%s)
order by invoice_date desc
, invoice_number desc
`, where), args...)
limit %d
`, where, filters.PerPage()+1), args...)
if err != nil {
panic(err)
}
@ -213,25 +216,6 @@ func mustCollectInvoiceEntries(ctx context.Context, conn *database.Conn, locale
return entries
}
func mustComputeInvoicesTotalAmount(ctx context.Context, conn *database.Conn, filters *invoiceFilterForm) string {
where, args := filters.BuildQuery(nil)
text, err := conn.GetText(ctx, fmt.Sprintf(`
select to_price(sum(total)::integer, decimal_digits)
from invoice
join invoice_amount using (invoice_id)
join currency using (currency_code)
where (%s)
group by decimal_digits
`, where), args...)
if err != nil {
if database.ErrorIsNotFound(err) {
return "0.0"
}
panic(err)
}
return text
}
func mustCollectInvoiceStatuses(ctx context.Context, conn *database.Conn, locale *locale.Locale) map[string]string {
rows, err := conn.Query(ctx, `
select invoice_status.invoice_status
@ -261,88 +245,6 @@ func mustCollectInvoiceStatuses(ctx context.Context, conn *database.Conn, locale
return statuses
}
type invoiceFilterForm struct {
locale *locale.Locale
company *auth.Company
Customer *form.Select
InvoiceStatus *form.Select
InvoiceNumber *form.Input
FromDate *form.Input
ToDate *form.Input
}
func newInvoiceFilterForm(ctx context.Context, conn *database.Conn, company *auth.Company, locale *locale.Locale) *invoiceFilterForm {
return &invoiceFilterForm{
locale: locale,
company: company,
Customer: &form.Select{
Name: "customer",
Options: mustGetContactOptions(ctx, conn, company),
},
InvoiceStatus: &form.Select{
Name: "invoice_status",
Options: mustGetInvoiceStatusOptions(ctx, conn, locale),
},
InvoiceNumber: &form.Input{
Name: "number",
},
FromDate: &form.Input{
Name: "from_date",
},
ToDate: &form.Input{
Name: "to_date",
},
}
}
func (f *invoiceFilterForm) Parse(r *http.Request) error {
if err := r.ParseForm(); err != nil {
return err
}
f.Customer.FillValue(r)
f.InvoiceStatus.FillValue(r)
f.InvoiceNumber.FillValue(r)
f.FromDate.FillValue(r)
f.ToDate.FillValue(r)
return nil
}
func (f *invoiceFilterForm) BuildQuery(args []interface{}) (string, []interface{}) {
var where []string
appendWhere := func(expression string, value interface{}) {
args = append(args, value)
where = append(where, fmt.Sprintf(expression, len(args)))
}
maybeAppendWhere := func(expression string, value string, conv func(string) interface{}) {
if value != "" {
if conv == nil {
appendWhere(expression, value)
} else {
appendWhere(expression, conv(value))
}
}
}
appendWhere("invoice.company_id = $%d", f.company.ID)
maybeAppendWhere("contact_id = $%d", f.Customer.String(), func(v string) interface{} {
customerId, _ := strconv.Atoi(f.Customer.Selected[0])
return customerId
})
maybeAppendWhere("invoice.invoice_status = $%d", f.InvoiceStatus.String(), nil)
maybeAppendWhere("invoice_number = $%d", f.InvoiceNumber.Val, nil)
maybeAppendWhere("invoice_date >= $%d", f.FromDate.Val, nil)
maybeAppendWhere("invoice_date <= $%d", f.ToDate.Val, nil)
return strings.Join(where, ") AND ("), args
}
func (f *invoiceFilterForm) HasValue() bool {
return (len(f.Customer.Selected) > 0 && f.Customer.Selected[0] != "") ||
(len(f.InvoiceStatus.Selected) > 0 && f.InvoiceStatus.Selected[0] != "") ||
f.InvoiceNumber.Val != "" ||
f.FromDate.Val != "" ||
f.ToDate.Val != ""
}
func serveInvoice(w http.ResponseWriter, r *http.Request, user *auth.User, company *auth.Company, conn *database.Conn, slug string) {
pdf := false
if strings.HasSuffix(slug, ".pdf") {
@ -682,7 +584,7 @@ func handleBatchAction(w http.ResponseWriter, r *http.Request, user *auth.User,
panic(err)
}
case "export":
filters := newInvoiceFilterForm(r.Context(), conn, company, user.Locale)
filters := newFilterForm(r.Context(), conn, company, user.Locale)
if err := filters.Parse(r); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return

124
pkg/invoice/filter.go Normal file
View File

@ -0,0 +1,124 @@
package invoice
import (
"context"
"fmt"
"net/http"
"strconv"
"strings"
"dev.tandem.ws/tandem/camper/pkg/auth"
"dev.tandem.ws/tandem/camper/pkg/database"
"dev.tandem.ws/tandem/camper/pkg/form"
"dev.tandem.ws/tandem/camper/pkg/locale"
)
type filterForm struct {
company *auth.Company
Customer *form.Select
InvoiceStatus *form.Select
InvoiceNumber *form.Input
FromDate *form.Input
ToDate *form.Input
Cursor *form.Cursor
}
func newFilterForm(ctx context.Context, conn *database.Conn, company *auth.Company, locale *locale.Locale) *filterForm {
return &filterForm{
company: company,
Customer: &form.Select{
Name: "customer",
Options: mustGetContactOptions(ctx, conn, company),
},
InvoiceStatus: &form.Select{
Name: "invoice_status",
Options: mustGetInvoiceStatusOptions(ctx, conn, locale),
},
InvoiceNumber: &form.Input{
Name: "number",
},
FromDate: &form.Input{
Name: "from_date",
},
ToDate: &form.Input{
Name: "to_date",
},
Cursor: &form.Cursor{
Name: "cursor",
PerPage: 25,
},
}
}
func (f *filterForm) Parse(r *http.Request) error {
if err := r.ParseForm(); err != nil {
return err
}
f.Customer.FillValue(r)
f.InvoiceStatus.FillValue(r)
f.InvoiceNumber.FillValue(r)
f.FromDate.FillValue(r)
f.ToDate.FillValue(r)
f.Cursor.FillValue(r)
return nil
}
func (f *filterForm) BuildQuery(args []interface{}) (string, []interface{}) {
var where []string
appendWhere := func(expression string, value interface{}) {
args = append(args, value)
where = append(where, fmt.Sprintf(expression, len(args)))
}
maybeAppendWhere := func(expression string, value string, conv func(string) interface{}) {
if value != "" {
if conv == nil {
appendWhere(expression, value)
} else {
appendWhere(expression, conv(value))
}
}
}
appendWhere("invoice.company_id = $%d", f.company.ID)
maybeAppendWhere("contact_id = $%d", f.Customer.String(), func(v string) interface{} {
customerId, _ := strconv.Atoi(f.Customer.Selected[0])
return customerId
})
maybeAppendWhere("invoice.invoice_status = $%d", f.InvoiceStatus.String(), nil)
maybeAppendWhere("invoice_number = $%d", f.InvoiceNumber.Val, nil)
maybeAppendWhere("invoice_date >= $%d", f.FromDate.Val, nil)
maybeAppendWhere("invoice_date <= $%d", f.ToDate.Val, nil)
if f.Paginated() {
params := f.Cursor.Params()
if len(params) == 2 {
where = append(where, fmt.Sprintf("(invoice_date, invoice_number) < ($%d, $%d)", len(args)+1, len(args)+2))
args = append(args, params[0])
args = append(args, params[1])
}
}
return strings.Join(where, ") AND ("), args
}
func (f *filterForm) buildCursor(customers []*IndexEntry) []*IndexEntry {
return form.BuildCursor(f.Cursor, customers, func(entry *IndexEntry) []string {
return []string{entry.Date.Format(database.ISODateFormat), entry.Number}
})
}
func (f *filterForm) HasValue() bool {
return (len(f.Customer.Selected) > 0 && f.Customer.Selected[0] != "") ||
(len(f.InvoiceStatus.Selected) > 0 && f.InvoiceStatus.Selected[0] != "") ||
f.InvoiceNumber.Val != "" ||
f.FromDate.Val != "" ||
f.ToDate.Val != ""
}
func (f *filterForm) PerPage() int {
return f.Cursor.PerPage
}
func (f *filterForm) Paginated() bool {
return f.Cursor.Pagination
}

182
po/ca.po
View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: camper\n"
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
"POT-Creation-Date: 2024-05-03 17:19+0200\n"
"POT-Creation-Date: 2024-05-03 19:12+0200\n"
"PO-Revision-Date: 2024-02-06 10:04+0100\n"
"Last-Translator: jordi fita mas <jordi@tandem.blog>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
@ -179,7 +179,7 @@ msgstr "Nits"
#: web/templates/mail/payment/details.gotxt:22
#: web/templates/public/booking/fields.gohtml:60
#: web/templates/admin/payment/details.gohtml:98
#: web/templates/admin/booking/fields.gohtml:93 pkg/invoice/admin.go:1062
#: web/templates/admin/booking/fields.gohtml:93 pkg/invoice/admin.go:964
msgctxt "input"
msgid "Adults aged 17 or older"
msgstr "Adults de 17 anys o més"
@ -187,7 +187,7 @@ msgstr "Adults de 17 anys o més"
#: web/templates/mail/payment/details.gotxt:23
#: web/templates/public/booking/fields.gohtml:71
#: web/templates/admin/payment/details.gohtml:102
#: web/templates/admin/booking/fields.gohtml:109 pkg/invoice/admin.go:1063
#: web/templates/admin/booking/fields.gohtml:109 pkg/invoice/admin.go:965
msgctxt "input"
msgid "Teenagers from 11 to 16 years old"
msgstr "Adolescents dentre 11 i 16 anys"
@ -195,7 +195,7 @@ msgstr "Adolescents dentre 11 i 16 anys"
#: web/templates/mail/payment/details.gotxt:24
#: web/templates/public/booking/fields.gohtml:82
#: web/templates/admin/payment/details.gohtml:106
#: web/templates/admin/booking/fields.gohtml:125 pkg/invoice/admin.go:1064
#: web/templates/admin/booking/fields.gohtml:125 pkg/invoice/admin.go:966
msgctxt "input"
msgid "Children from 2 to 10 years old"
msgstr "Nens dentre 2 i 10 anys"
@ -203,14 +203,14 @@ msgstr "Nens dentre 2 i 10 anys"
#: web/templates/mail/payment/details.gotxt:25
#: web/templates/public/booking/fields.gohtml:100
#: web/templates/admin/payment/details.gohtml:110
#: web/templates/admin/booking/fields.gohtml:140 pkg/invoice/admin.go:1065
#: web/templates/admin/booking/fields.gohtml:140 pkg/invoice/admin.go:967
msgctxt "input"
msgid "Dogs"
msgstr "Gossos"
#: web/templates/mail/payment/details.gotxt:26
#: web/templates/admin/payment/details.gohtml:114
#: web/templates/admin/booking/fields.gohtml:167 pkg/invoice/admin.go:1066
#: web/templates/admin/booking/fields.gohtml:167 pkg/invoice/admin.go:968
#: pkg/booking/cart.go:242
msgctxt "cart"
msgid "Tourist tax"
@ -293,6 +293,7 @@ msgstr "País"
#: web/templates/mail/payment/details.gotxt:46
#: web/templates/public/booking/fields.gohtml:201
#: web/templates/admin/payment/details.gohtml:163
#: web/templates/admin/customer/index.gohtml:33
#: web/templates/admin/login.gohtml:27 web/templates/admin/profile.gohtml:38
#: web/templates/admin/taxDetails.gohtml:53
msgctxt "input"
@ -418,7 +419,7 @@ msgid "Order Number"
msgstr "Número de comanda"
#: web/templates/public/payment/details.gohtml:8
#: web/templates/admin/invoice/index.gohtml:103
#: web/templates/admin/invoice/index.gohtml:104
#: web/templates/admin/invoice/view.gohtml:26
msgctxt "title"
msgid "Date"
@ -596,6 +597,12 @@ msgctxt "action"
msgid "Filters"
msgstr "Filtres"
#: web/templates/public/form.gohtml:93 web/templates/admin/form.gohtml:93
#: web/templates/admin/prebooking/results.gohtml:20
msgctxt "action"
msgid "Load more"
msgstr "Carregan més"
#: web/templates/public/campsite/type.gohtml:49
#: web/templates/public/booking/fields.gohtml:278
msgctxt "action"
@ -1183,6 +1190,7 @@ msgstr "Àlies"
#: web/templates/admin/campsite/type/form.gohtml:51
#: web/templates/admin/campsite/type/option/form.gohtml:41
#: web/templates/admin/season/form.gohtml:50
#: web/templates/admin/customer/index.gohtml:24
#: web/templates/admin/invoice/product-form.gohtml:16
#: web/templates/admin/services/form.gohtml:53
#: web/templates/admin/profile.gohtml:29
@ -1255,7 +1263,7 @@ msgstr "Afegeix text legal"
#: web/templates/admin/campsite/type/option/index.gohtml:30
#: web/templates/admin/campsite/type/index.gohtml:29
#: web/templates/admin/season/index.gohtml:29
#: web/templates/admin/customer/index.gohtml:19
#: web/templates/admin/customer/index.gohtml:51
#: web/templates/admin/user/index.gohtml:20
#: web/templates/admin/surroundings/index.gohtml:83
#: web/templates/admin/amenity/feature/index.gohtml:30
@ -1860,7 +1868,7 @@ msgid "New Customer"
msgstr "Nou client"
#: web/templates/admin/customer/form.gohtml:15
#: web/templates/admin/invoice/index.gohtml:105
#: web/templates/admin/invoice/index.gohtml:106
msgctxt "title"
msgid "Customer"
msgstr "Client"
@ -1917,19 +1925,27 @@ msgctxt "action"
msgid "Add Customer"
msgstr "Afegeix client"
#: web/templates/admin/customer/index.gohtml:20
#: web/templates/admin/customer/index.gohtml:43
#: web/templates/admin/invoice/index.gohtml:94
#: web/templates/admin/prebooking/index.gohtml:51
#: web/templates/admin/booking/index.gohtml:65
msgctxt "action"
msgid "Reset"
msgstr "Restableix"
#: web/templates/admin/customer/index.gohtml:52
#: web/templates/admin/user/login-attempts.gohtml:20
#: web/templates/admin/user/index.gohtml:21
msgctxt "header"
msgid "Email"
msgstr "Correu-e"
#: web/templates/admin/customer/index.gohtml:21
#: web/templates/admin/customer/index.gohtml:53
msgctxt "header"
msgid "Phone"
msgstr "Telèfon"
#: web/templates/admin/customer/index.gohtml:33
#: web/templates/admin/customer/index.gohtml:61
msgid "No customer found."
msgstr "No sha trobat cap client."
@ -2076,60 +2092,39 @@ msgctxt "action"
msgid "Filter"
msgstr "Filtra"
#: web/templates/admin/invoice/index.gohtml:94
#: web/templates/admin/prebooking/index.gohtml:51
#: web/templates/admin/booking/index.gohtml:65
msgctxt "action"
msgid "Reset"
msgstr "Restableix"
#: web/templates/admin/invoice/index.gohtml:97
msgctxt "action"
msgid "Add invoice"
msgstr "Afegeix factura"
#: web/templates/admin/invoice/index.gohtml:102
#: web/templates/admin/invoice/index.gohtml:103
msgctxt "invoice"
msgid "All"
msgstr "Totes"
#: web/templates/admin/invoice/index.gohtml:104
#: web/templates/admin/invoice/index.gohtml:105
msgctxt "title"
msgid "Invoice Num."
msgstr "Núm. de factura"
#: web/templates/admin/invoice/index.gohtml:106
#: web/templates/admin/invoice/index.gohtml:107
msgctxt "title"
msgid "Status"
msgstr "Estat"
#: web/templates/admin/invoice/index.gohtml:107
#: web/templates/admin/invoice/index.gohtml:108
msgctxt "title"
msgid "Download"
msgstr "Descàrrega"
#: web/templates/admin/invoice/index.gohtml:108
#: web/templates/admin/invoice/index.gohtml:109
msgctxt "title"
msgid "Amount"
msgstr "Import"
#: web/templates/admin/invoice/index.gohtml:115
msgctxt "action"
msgid "Select invoice %v"
msgstr "Selecciona la factura %v"
#: web/templates/admin/invoice/index.gohtml:144
msgctxt "action"
msgid "Download invoice %s"
msgstr "Descarrega la factura %s"
#: web/templates/admin/invoice/index.gohtml:154
msgid "No invoices added yet."
msgstr "No sha afegit cap factura encara."
#: web/templates/admin/invoice/index.gohtml:161
msgid "Total"
msgstr "Total"
#: web/templates/admin/invoice/index.gohtml:117
msgid "No invoices found."
msgstr "No sha trobat cap factura."
#: web/templates/admin/invoice/view.gohtml:2
msgctxt "title"
@ -2171,6 +2166,16 @@ msgctxt "title"
msgid "Tax Base"
msgstr "Base imposable"
#: web/templates/admin/invoice/results.gohtml:3
msgctxt "action"
msgid "Select invoice %v"
msgstr "Selecciona la factura %v"
#: web/templates/admin/invoice/results.gohtml:32
msgctxt "action"
msgid "Download invoice %s"
msgstr "Descarrega la factura %s"
#: web/templates/admin/prebooking/index.gohtml:6
#: web/templates/admin/layout.gohtml:92
#: web/templates/admin/booking/form.gohtml:20
@ -2216,12 +2221,6 @@ msgstr "Nom del titular"
msgid "No prebooking found."
msgstr "No sha trobat cap pre-reserva."
#: web/templates/admin/prebooking/results.gohtml:20
#: web/templates/admin/booking/results.gohtml:23
msgctxt "action"
msgid "Load more"
msgstr "Carregan més"
#: web/templates/admin/login.gohtml:6 web/templates/admin/login.gohtml:18
msgctxt "title"
msgid "Login"
@ -2701,7 +2700,7 @@ msgctxt "header"
msgid "Decription"
msgstr "Descripció"
#: web/templates/admin/booking/fields.gohtml:81 pkg/invoice/admin.go:1061
#: web/templates/admin/booking/fields.gohtml:81 pkg/invoice/admin.go:963
#: pkg/booking/cart.go:232
msgctxt "cart"
msgid "Night"
@ -2900,7 +2899,7 @@ msgstr "Rebut amb èxit el pagament de la reserva"
#: pkg/legal/admin.go:258 pkg/app/user.go:249 pkg/campsite/types/option.go:365
#: pkg/campsite/types/feature.go:272 pkg/campsite/types/admin.go:577
#: pkg/campsite/feature.go:269 pkg/season/admin.go:411
#: pkg/invoice/admin.go:1158 pkg/services/admin.go:316
#: pkg/invoice/admin.go:1060 pkg/services/admin.go:316
#: pkg/surroundings/admin.go:340 pkg/amenity/feature.go:269
#: pkg/amenity/admin.go:283
msgid "Name can not be empty."
@ -2941,8 +2940,8 @@ msgstr "La imatge de la diapositiva ha de ser un mèdia de tipus imatge."
msgid "Email can not be empty."
msgstr "No podeu deixar el correu-e en blanc."
#: pkg/app/login.go:57 pkg/app/user.go:247 pkg/customer/admin.go:345
#: pkg/company/admin.go:225 pkg/booking/admin.go:597 pkg/booking/public.go:593
#: pkg/app/login.go:57 pkg/app/user.go:247 pkg/customer/admin.go:361
#: pkg/company/admin.go:225 pkg/booking/admin.go:479 pkg/booking/public.go:593
msgid "This email is not valid. It should be like name@domain.com."
msgstr "Aquest correu-e no és vàlid. Hauria de ser similar a nom@domini.com."
@ -2999,15 +2998,15 @@ msgstr "El valor del màxim ha de ser un número enter."
msgid "Maximum must be equal or greater than minimum."
msgstr "El valor del màxim ha de ser igual o superir al del mínim."
#: pkg/campsite/types/option.go:382 pkg/invoice/admin.go:1159
#: pkg/campsite/types/option.go:382 pkg/invoice/admin.go:1061
msgid "Price can not be empty."
msgstr "No podeu deixar el preu en blanc."
#: pkg/campsite/types/option.go:383 pkg/invoice/admin.go:1160
#: pkg/campsite/types/option.go:383 pkg/invoice/admin.go:1062
msgid "Price must be a decimal number."
msgstr "El preu ha de ser un número decimal."
#: pkg/campsite/types/option.go:384 pkg/invoice/admin.go:1161
#: pkg/campsite/types/option.go:384 pkg/invoice/admin.go:1063
msgid "Price must be zero or greater."
msgstr "El preu ha de ser com a mínim zero."
@ -3153,7 +3152,7 @@ msgctxt "header"
msgid "Children (aged 2 to 10)"
msgstr "Mainada (entre 2 i 10 anys)"
#: pkg/campsite/admin.go:280 pkg/booking/admin.go:573 pkg/booking/public.go:177
#: pkg/campsite/admin.go:280 pkg/booking/admin.go:455 pkg/booking/public.go:177
#: pkg/booking/public.go:232
msgid "Selected campsite type is not valid."
msgstr "El tipus dallotjament escollit no és vàlid."
@ -3191,129 +3190,129 @@ msgstr "No podeu deixar la data de fi en blanc."
msgid "End date must be a valid date."
msgstr "La data de fi ha de ser una data vàlida."
#: pkg/customer/admin.go:326 pkg/company/admin.go:207
#: pkg/customer/admin.go:342 pkg/company/admin.go:207
#: pkg/booking/checkin.go:300 pkg/booking/public.go:577
msgid "Selected country is not valid."
msgstr "El país escollit no és vàlid."
#: pkg/customer/admin.go:330 pkg/booking/checkin.go:284
#: pkg/customer/admin.go:346 pkg/booking/checkin.go:284
msgid "Selected ID document type is not valid."
msgstr "El tipus de document didentitat escollit no és vàlid."
#: pkg/customer/admin.go:331 pkg/booking/checkin.go:285
#: pkg/customer/admin.go:347 pkg/booking/checkin.go:285
msgid "ID document number can not be empty."
msgstr "No podeu deixar el número document didentitat en blanc."
#: pkg/customer/admin.go:333 pkg/booking/checkin.go:291
#: pkg/booking/checkin.go:292 pkg/booking/admin.go:585
#: pkg/customer/admin.go:349 pkg/booking/checkin.go:291
#: pkg/booking/checkin.go:292 pkg/booking/admin.go:467
#: pkg/booking/public.go:581
msgid "Full name can not be empty."
msgstr "No podeu deixar el nom i els cognoms en blanc."
#: pkg/customer/admin.go:334 pkg/booking/admin.go:586 pkg/booking/public.go:582
#: pkg/customer/admin.go:350 pkg/booking/admin.go:468 pkg/booking/public.go:582
msgid "Full name must have at least one letter."
msgstr "El nom i els cognoms han de tenir com a mínim una lletra."
#: pkg/customer/admin.go:337 pkg/company/admin.go:230 pkg/booking/public.go:585
#: pkg/customer/admin.go:353 pkg/company/admin.go:230 pkg/booking/public.go:585
msgid "Address can not be empty."
msgstr "No podeu deixar ladreça en blanc."
#: pkg/customer/admin.go:338 pkg/booking/public.go:586
#: pkg/customer/admin.go:354 pkg/booking/public.go:586
msgid "Town or village can not be empty."
msgstr "No podeu deixar la població en blanc."
#: pkg/customer/admin.go:339 pkg/company/admin.go:233 pkg/booking/public.go:587
#: pkg/customer/admin.go:355 pkg/company/admin.go:233 pkg/booking/public.go:587
msgid "Postcode can not be empty."
msgstr "No podeu deixar el codi postal en blanc."
#: pkg/customer/admin.go:340 pkg/company/admin.go:234 pkg/booking/admin.go:592
#: pkg/customer/admin.go:356 pkg/company/admin.go:234 pkg/booking/admin.go:474
#: pkg/booking/public.go:588
msgid "This postcode is not valid."
msgstr "Aquest codi postal no és vàlid."
#: pkg/customer/admin.go:348 pkg/company/admin.go:220
#: pkg/booking/checkin.go:304 pkg/booking/admin.go:602
#: pkg/customer/admin.go:364 pkg/company/admin.go:220
#: pkg/booking/checkin.go:304 pkg/booking/admin.go:484
#: pkg/booking/public.go:596
msgid "This phone number is not valid."
msgstr "Aquest número de telèfon no és vàlid."
#: pkg/invoice/admin.go:679
#: pkg/invoice/admin.go:581
msgctxt "filename"
msgid "invoices.zip"
msgstr "factures.zip"
#: pkg/invoice/admin.go:694
#: pkg/invoice/admin.go:596
msgctxt "filename"
msgid "invoices.ods"
msgstr "factures.ods"
#: pkg/invoice/admin.go:696 pkg/invoice/admin.go:1358 pkg/invoice/admin.go:1365
#: pkg/invoice/admin.go:598 pkg/invoice/admin.go:1260 pkg/invoice/admin.go:1267
msgid "Invalid action"
msgstr "Acció invàlida"
#: pkg/invoice/admin.go:861
#: pkg/invoice/admin.go:763
msgid "Selected invoice status is not valid."
msgstr "Lestat de factura escollit no és vàlid."
#: pkg/invoice/admin.go:862
#: pkg/invoice/admin.go:764
msgid "Invoice date can not be empty."
msgstr "No podeu deixar la data de factura en blanc."
#: pkg/invoice/admin.go:863
#: pkg/invoice/admin.go:765
msgid "Invoice date must be a valid date."
msgstr "La data de factura ha de ser una data vàlida."
#: pkg/invoice/admin.go:1021
#: pkg/invoice/admin.go:923
#, c-format
msgid "Re: booking #%s of %s%s"
msgstr "Ref: reserva núm. %s del %s-%s"
#: pkg/invoice/admin.go:1022
#: pkg/invoice/admin.go:924
msgctxt "to_char"
msgid "MM/DD/YYYY"
msgstr "DD/MM/YYYY"
#: pkg/invoice/admin.go:1149
#: pkg/invoice/admin.go:1051
msgid "Invoice product ID must be an integer."
msgstr "LID de producte de factura ha de ser enter."
#: pkg/invoice/admin.go:1150
#: pkg/invoice/admin.go:1052
msgid "Invoice product ID one or greater."
msgstr "LID de producte de factura ha de ser com a mínim u."
#: pkg/invoice/admin.go:1154
#: pkg/invoice/admin.go:1056
msgid "Product ID must be an integer."
msgstr "LID de producte ha de ser un número enter."
#: pkg/invoice/admin.go:1155
#: pkg/invoice/admin.go:1057
msgid "Product ID must zero or greater."
msgstr "LID de producte ha de ser com a mínim zero."
#: pkg/invoice/admin.go:1164
#: pkg/invoice/admin.go:1066
msgid "Quantity can not be empty."
msgstr "No podeu deixar la quantitat en blanc."
#: pkg/invoice/admin.go:1165
#: pkg/invoice/admin.go:1067
msgid "Quantity must be an integer."
msgstr "La quantitat ha de ser un número enter."
#: pkg/invoice/admin.go:1166
#: pkg/invoice/admin.go:1068
msgid "Quantity must one or greater."
msgstr "La quantitat ha de ser com a mínim u."
#: pkg/invoice/admin.go:1169
#: pkg/invoice/admin.go:1071
msgid "Discount can not be empty."
msgstr "No podeu deixar el descompte en blanc."
#: pkg/invoice/admin.go:1170
#: pkg/invoice/admin.go:1072
msgid "Discount must be an integer."
msgstr "El descompte ha de ser un número enter."
#: pkg/invoice/admin.go:1171 pkg/invoice/admin.go:1172
#: pkg/invoice/admin.go:1073 pkg/invoice/admin.go:1074
msgid "Discount must be a percentage between 0 and 100."
msgstr "El descompte ha de ser un percentatge entre 0 i 100"
#: pkg/invoice/admin.go:1176
#: pkg/invoice/admin.go:1078
msgid "Selected tax is not valid."
msgstr "Limpost escollit no és vàlid."
@ -3501,19 +3500,19 @@ msgctxt "filename"
msgid "bookings.ods"
msgstr "reserves.ods"
#: pkg/booking/admin.go:591
#: pkg/booking/admin.go:473
msgid "Country can not be empty to validate the postcode."
msgstr "No podeu deixar el país en blanc per validar el codi postal."
#: pkg/booking/admin.go:601
#: pkg/booking/admin.go:483
msgid "Country can not be empty to validate the phone."
msgstr "No podeu deixar el país en blanc per validar el telèfon."
#: pkg/booking/admin.go:608
#: pkg/booking/admin.go:490
msgid "You must select at least one accommodation."
msgstr "Heu descollir com a mínim un allotjament."
#: pkg/booking/admin.go:614
#: pkg/booking/admin.go:496
msgid "The selected accommodations have no available openings in the requested dates."
msgstr "Els allotjaments escollits no estan disponibles a les dates demanades."
@ -3630,6 +3629,9 @@ msgstr "El valor de %s ha de ser com a màxim %d."
msgid "It is mandatory to agree to the reservation conditions."
msgstr "És obligatori acceptar les condicions de reserves."
#~ msgid "Total"
#~ msgstr "Total"
#~ msgid "Select a customer"
#~ msgstr "Esculliu un client"

182
po/es.po
View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: camper\n"
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
"POT-Creation-Date: 2024-05-03 17:19+0200\n"
"POT-Creation-Date: 2024-05-03 19:12+0200\n"
"PO-Revision-Date: 2024-02-06 10:04+0100\n"
"Last-Translator: jordi fita mas <jordi@tandem.blog>\n"
"Language-Team: Spanish <es@tp.org.es>\n"
@ -179,7 +179,7 @@ msgstr "Noches"
#: web/templates/mail/payment/details.gotxt:22
#: web/templates/public/booking/fields.gohtml:60
#: web/templates/admin/payment/details.gohtml:98
#: web/templates/admin/booking/fields.gohtml:93 pkg/invoice/admin.go:1062
#: web/templates/admin/booking/fields.gohtml:93 pkg/invoice/admin.go:964
msgctxt "input"
msgid "Adults aged 17 or older"
msgstr "Adultos de 17 años o más"
@ -187,7 +187,7 @@ msgstr "Adultos de 17 años o más"
#: web/templates/mail/payment/details.gotxt:23
#: web/templates/public/booking/fields.gohtml:71
#: web/templates/admin/payment/details.gohtml:102
#: web/templates/admin/booking/fields.gohtml:109 pkg/invoice/admin.go:1063
#: web/templates/admin/booking/fields.gohtml:109 pkg/invoice/admin.go:965
msgctxt "input"
msgid "Teenagers from 11 to 16 years old"
msgstr "Adolescentes de 11 a 16 años"
@ -195,7 +195,7 @@ msgstr "Adolescentes de 11 a 16 años"
#: web/templates/mail/payment/details.gotxt:24
#: web/templates/public/booking/fields.gohtml:82
#: web/templates/admin/payment/details.gohtml:106
#: web/templates/admin/booking/fields.gohtml:125 pkg/invoice/admin.go:1064
#: web/templates/admin/booking/fields.gohtml:125 pkg/invoice/admin.go:966
msgctxt "input"
msgid "Children from 2 to 10 years old"
msgstr "Niños de 2 a 10 años"
@ -203,14 +203,14 @@ msgstr "Niños de 2 a 10 años"
#: web/templates/mail/payment/details.gotxt:25
#: web/templates/public/booking/fields.gohtml:100
#: web/templates/admin/payment/details.gohtml:110
#: web/templates/admin/booking/fields.gohtml:140 pkg/invoice/admin.go:1065
#: web/templates/admin/booking/fields.gohtml:140 pkg/invoice/admin.go:967
msgctxt "input"
msgid "Dogs"
msgstr "Perros"
#: web/templates/mail/payment/details.gotxt:26
#: web/templates/admin/payment/details.gohtml:114
#: web/templates/admin/booking/fields.gohtml:167 pkg/invoice/admin.go:1066
#: web/templates/admin/booking/fields.gohtml:167 pkg/invoice/admin.go:968
#: pkg/booking/cart.go:242
msgctxt "cart"
msgid "Tourist tax"
@ -293,6 +293,7 @@ msgstr "País"
#: web/templates/mail/payment/details.gotxt:46
#: web/templates/public/booking/fields.gohtml:201
#: web/templates/admin/payment/details.gohtml:163
#: web/templates/admin/customer/index.gohtml:33
#: web/templates/admin/login.gohtml:27 web/templates/admin/profile.gohtml:38
#: web/templates/admin/taxDetails.gohtml:53
msgctxt "input"
@ -418,7 +419,7 @@ msgid "Order Number"
msgstr "Número de pedido"
#: web/templates/public/payment/details.gohtml:8
#: web/templates/admin/invoice/index.gohtml:103
#: web/templates/admin/invoice/index.gohtml:104
#: web/templates/admin/invoice/view.gohtml:26
msgctxt "title"
msgid "Date"
@ -596,6 +597,12 @@ msgctxt "action"
msgid "Filters"
msgstr "Filtros"
#: web/templates/public/form.gohtml:93 web/templates/admin/form.gohtml:93
#: web/templates/admin/prebooking/results.gohtml:20
msgctxt "action"
msgid "Load more"
msgstr "Cargar más"
#: web/templates/public/campsite/type.gohtml:49
#: web/templates/public/booking/fields.gohtml:278
msgctxt "action"
@ -1183,6 +1190,7 @@ msgstr "Álias"
#: web/templates/admin/campsite/type/form.gohtml:51
#: web/templates/admin/campsite/type/option/form.gohtml:41
#: web/templates/admin/season/form.gohtml:50
#: web/templates/admin/customer/index.gohtml:24
#: web/templates/admin/invoice/product-form.gohtml:16
#: web/templates/admin/services/form.gohtml:53
#: web/templates/admin/profile.gohtml:29
@ -1255,7 +1263,7 @@ msgstr "Añadir texto legal"
#: web/templates/admin/campsite/type/option/index.gohtml:30
#: web/templates/admin/campsite/type/index.gohtml:29
#: web/templates/admin/season/index.gohtml:29
#: web/templates/admin/customer/index.gohtml:19
#: web/templates/admin/customer/index.gohtml:51
#: web/templates/admin/user/index.gohtml:20
#: web/templates/admin/surroundings/index.gohtml:83
#: web/templates/admin/amenity/feature/index.gohtml:30
@ -1860,7 +1868,7 @@ msgid "New Customer"
msgstr "Nuevo cliente"
#: web/templates/admin/customer/form.gohtml:15
#: web/templates/admin/invoice/index.gohtml:105
#: web/templates/admin/invoice/index.gohtml:106
msgctxt "title"
msgid "Customer"
msgstr "Cliente"
@ -1917,19 +1925,27 @@ msgctxt "action"
msgid "Add Customer"
msgstr "Añadir cliente"
#: web/templates/admin/customer/index.gohtml:20
#: web/templates/admin/customer/index.gohtml:43
#: web/templates/admin/invoice/index.gohtml:94
#: web/templates/admin/prebooking/index.gohtml:51
#: web/templates/admin/booking/index.gohtml:65
msgctxt "action"
msgid "Reset"
msgstr "Restablecer"
#: web/templates/admin/customer/index.gohtml:52
#: web/templates/admin/user/login-attempts.gohtml:20
#: web/templates/admin/user/index.gohtml:21
msgctxt "header"
msgid "Email"
msgstr "Correo-e"
#: web/templates/admin/customer/index.gohtml:21
#: web/templates/admin/customer/index.gohtml:53
msgctxt "header"
msgid "Phone"
msgstr "Teléfono"
#: web/templates/admin/customer/index.gohtml:33
#: web/templates/admin/customer/index.gohtml:61
msgid "No customer found."
msgstr "No se ha encontrado ningún cliente."
@ -2076,60 +2092,39 @@ msgctxt "action"
msgid "Filter"
msgstr "Filtrar"
#: web/templates/admin/invoice/index.gohtml:94
#: web/templates/admin/prebooking/index.gohtml:51
#: web/templates/admin/booking/index.gohtml:65
msgctxt "action"
msgid "Reset"
msgstr "Restablecer"
#: web/templates/admin/invoice/index.gohtml:97
msgctxt "action"
msgid "Add invoice"
msgstr "Añadir factura"
#: web/templates/admin/invoice/index.gohtml:102
#: web/templates/admin/invoice/index.gohtml:103
msgctxt "invoice"
msgid "All"
msgstr "Todas"
#: web/templates/admin/invoice/index.gohtml:104
#: web/templates/admin/invoice/index.gohtml:105
msgctxt "title"
msgid "Invoice Num."
msgstr "Núm. de factura"
#: web/templates/admin/invoice/index.gohtml:106
#: web/templates/admin/invoice/index.gohtml:107
msgctxt "title"
msgid "Status"
msgstr "Estado"
#: web/templates/admin/invoice/index.gohtml:107
#: web/templates/admin/invoice/index.gohtml:108
msgctxt "title"
msgid "Download"
msgstr "Descarga"
#: web/templates/admin/invoice/index.gohtml:108
#: web/templates/admin/invoice/index.gohtml:109
msgctxt "title"
msgid "Amount"
msgstr "Importe"
#: web/templates/admin/invoice/index.gohtml:115
msgctxt "action"
msgid "Select invoice %v"
msgstr "Seleccionar factura %v"
#: web/templates/admin/invoice/index.gohtml:144
msgctxt "action"
msgid "Download invoice %s"
msgstr "Descargar factura %s"
#: web/templates/admin/invoice/index.gohtml:154
msgid "No invoices added yet."
msgstr "No se ha añadido ninguna factura todavía."
#: web/templates/admin/invoice/index.gohtml:161
msgid "Total"
msgstr "Total"
#: web/templates/admin/invoice/index.gohtml:117
msgid "No invoices found."
msgstr "No se ha encontrado ninguna factura."
#: web/templates/admin/invoice/view.gohtml:2
msgctxt "title"
@ -2171,6 +2166,16 @@ msgctxt "title"
msgid "Tax Base"
msgstr "Base imponible"
#: web/templates/admin/invoice/results.gohtml:3
msgctxt "action"
msgid "Select invoice %v"
msgstr "Seleccionar factura %v"
#: web/templates/admin/invoice/results.gohtml:32
msgctxt "action"
msgid "Download invoice %s"
msgstr "Descargar factura %s"
#: web/templates/admin/prebooking/index.gohtml:6
#: web/templates/admin/layout.gohtml:92
#: web/templates/admin/booking/form.gohtml:20
@ -2216,12 +2221,6 @@ msgstr "Nombre del titular"
msgid "No prebooking found."
msgstr "No se ha encontrado ninguna prereserva."
#: web/templates/admin/prebooking/results.gohtml:20
#: web/templates/admin/booking/results.gohtml:23
msgctxt "action"
msgid "Load more"
msgstr "Cargar más"
#: web/templates/admin/login.gohtml:6 web/templates/admin/login.gohtml:18
msgctxt "title"
msgid "Login"
@ -2701,7 +2700,7 @@ msgctxt "header"
msgid "Decription"
msgstr "Descripción"
#: web/templates/admin/booking/fields.gohtml:81 pkg/invoice/admin.go:1061
#: web/templates/admin/booking/fields.gohtml:81 pkg/invoice/admin.go:963
#: pkg/booking/cart.go:232
msgctxt "cart"
msgid "Night"
@ -2900,7 +2899,7 @@ msgstr "Se ha recibido correctamente el pago de la reserva"
#: pkg/legal/admin.go:258 pkg/app/user.go:249 pkg/campsite/types/option.go:365
#: pkg/campsite/types/feature.go:272 pkg/campsite/types/admin.go:577
#: pkg/campsite/feature.go:269 pkg/season/admin.go:411
#: pkg/invoice/admin.go:1158 pkg/services/admin.go:316
#: pkg/invoice/admin.go:1060 pkg/services/admin.go:316
#: pkg/surroundings/admin.go:340 pkg/amenity/feature.go:269
#: pkg/amenity/admin.go:283
msgid "Name can not be empty."
@ -2941,8 +2940,8 @@ msgstr "La imagen de la diapositiva tiene que ser un medio de tipo imagen."
msgid "Email can not be empty."
msgstr "No podéis dejar el correo-e en blanco."
#: pkg/app/login.go:57 pkg/app/user.go:247 pkg/customer/admin.go:345
#: pkg/company/admin.go:225 pkg/booking/admin.go:597 pkg/booking/public.go:593
#: pkg/app/login.go:57 pkg/app/user.go:247 pkg/customer/admin.go:361
#: pkg/company/admin.go:225 pkg/booking/admin.go:479 pkg/booking/public.go:593
msgid "This email is not valid. It should be like name@domain.com."
msgstr "Este correo-e no es válido. Tiene que ser parecido a nombre@dominio.com."
@ -2999,15 +2998,15 @@ msgstr "El valor del máximo tiene que ser un número entero."
msgid "Maximum must be equal or greater than minimum."
msgstr "El valor del máximo tiene que ser igual o mayor al del mínimo."
#: pkg/campsite/types/option.go:382 pkg/invoice/admin.go:1159
#: pkg/campsite/types/option.go:382 pkg/invoice/admin.go:1061
msgid "Price can not be empty."
msgstr "No podéis dejar el precio en blanco."
#: pkg/campsite/types/option.go:383 pkg/invoice/admin.go:1160
#: pkg/campsite/types/option.go:383 pkg/invoice/admin.go:1062
msgid "Price must be a decimal number."
msgstr "El precio tiene que ser un número decimal."
#: pkg/campsite/types/option.go:384 pkg/invoice/admin.go:1161
#: pkg/campsite/types/option.go:384 pkg/invoice/admin.go:1063
msgid "Price must be zero or greater."
msgstr "El precio tiene que ser como mínimo cero."
@ -3153,7 +3152,7 @@ msgctxt "header"
msgid "Children (aged 2 to 10)"
msgstr "Niños (de 2 a 10 años)"
#: pkg/campsite/admin.go:280 pkg/booking/admin.go:573 pkg/booking/public.go:177
#: pkg/campsite/admin.go:280 pkg/booking/admin.go:455 pkg/booking/public.go:177
#: pkg/booking/public.go:232
msgid "Selected campsite type is not valid."
msgstr "El tipo de alojamiento escogido no es válido."
@ -3191,129 +3190,129 @@ msgstr "No podéis dejar la fecha final en blanco."
msgid "End date must be a valid date."
msgstr "La fecha final tiene que ser una fecha válida."
#: pkg/customer/admin.go:326 pkg/company/admin.go:207
#: pkg/customer/admin.go:342 pkg/company/admin.go:207
#: pkg/booking/checkin.go:300 pkg/booking/public.go:577
msgid "Selected country is not valid."
msgstr "El país escogido no es válido."
#: pkg/customer/admin.go:330 pkg/booking/checkin.go:284
#: pkg/customer/admin.go:346 pkg/booking/checkin.go:284
msgid "Selected ID document type is not valid."
msgstr "El tipo de documento de identidad escogido no es válido."
#: pkg/customer/admin.go:331 pkg/booking/checkin.go:285
#: pkg/customer/admin.go:347 pkg/booking/checkin.go:285
msgid "ID document number can not be empty."
msgstr "No podéis dejar el número del documento de identidad en blanco."
#: pkg/customer/admin.go:333 pkg/booking/checkin.go:291
#: pkg/booking/checkin.go:292 pkg/booking/admin.go:585
#: pkg/customer/admin.go:349 pkg/booking/checkin.go:291
#: pkg/booking/checkin.go:292 pkg/booking/admin.go:467
#: pkg/booking/public.go:581
msgid "Full name can not be empty."
msgstr "No podéis dejar el nombre y los apellidos en blanco."
#: pkg/customer/admin.go:334 pkg/booking/admin.go:586 pkg/booking/public.go:582
#: pkg/customer/admin.go:350 pkg/booking/admin.go:468 pkg/booking/public.go:582
msgid "Full name must have at least one letter."
msgstr "El nombre y los apellidos tienen que tener como mínimo una letra."
#: pkg/customer/admin.go:337 pkg/company/admin.go:230 pkg/booking/public.go:585
#: pkg/customer/admin.go:353 pkg/company/admin.go:230 pkg/booking/public.go:585
msgid "Address can not be empty."
msgstr "No podéis dejar la dirección en blanco."
#: pkg/customer/admin.go:338 pkg/booking/public.go:586
#: pkg/customer/admin.go:354 pkg/booking/public.go:586
msgid "Town or village can not be empty."
msgstr "No podéis dejar la población en blanco."
#: pkg/customer/admin.go:339 pkg/company/admin.go:233 pkg/booking/public.go:587
#: pkg/customer/admin.go:355 pkg/company/admin.go:233 pkg/booking/public.go:587
msgid "Postcode can not be empty."
msgstr "No podéis dejar el código postal en blanco."
#: pkg/customer/admin.go:340 pkg/company/admin.go:234 pkg/booking/admin.go:592
#: pkg/customer/admin.go:356 pkg/company/admin.go:234 pkg/booking/admin.go:474
#: pkg/booking/public.go:588
msgid "This postcode is not valid."
msgstr "Este código postal no es válido."
#: pkg/customer/admin.go:348 pkg/company/admin.go:220
#: pkg/booking/checkin.go:304 pkg/booking/admin.go:602
#: pkg/customer/admin.go:364 pkg/company/admin.go:220
#: pkg/booking/checkin.go:304 pkg/booking/admin.go:484
#: pkg/booking/public.go:596
msgid "This phone number is not valid."
msgstr "Este teléfono no es válido."
#: pkg/invoice/admin.go:679
#: pkg/invoice/admin.go:581
msgctxt "filename"
msgid "invoices.zip"
msgstr "facturas.zip"
#: pkg/invoice/admin.go:694
#: pkg/invoice/admin.go:596
msgctxt "filename"
msgid "invoices.ods"
msgstr "facturas.ods"
#: pkg/invoice/admin.go:696 pkg/invoice/admin.go:1358 pkg/invoice/admin.go:1365
#: pkg/invoice/admin.go:598 pkg/invoice/admin.go:1260 pkg/invoice/admin.go:1267
msgid "Invalid action"
msgstr "Acción inválida"
#: pkg/invoice/admin.go:861
#: pkg/invoice/admin.go:763
msgid "Selected invoice status is not valid."
msgstr "El estado de factura escogida no es válido."
#: pkg/invoice/admin.go:862
#: pkg/invoice/admin.go:764
msgid "Invoice date can not be empty."
msgstr "No podéis dejar la fecha de factura en blanco."
#: pkg/invoice/admin.go:863
#: pkg/invoice/admin.go:765
msgid "Invoice date must be a valid date."
msgstr "La fecha de factura tiene que ser una fecha válida."
#: pkg/invoice/admin.go:1021
#: pkg/invoice/admin.go:923
#, c-format
msgid "Re: booking #%s of %s%s"
msgstr "Ref.: reserva núm. %s del %s%s"
#: pkg/invoice/admin.go:1022
#: pkg/invoice/admin.go:924
msgctxt "to_char"
msgid "MM/DD/YYYY"
msgstr "DD/MM/YYYY"
#: pkg/invoice/admin.go:1149
#: pkg/invoice/admin.go:1051
msgid "Invoice product ID must be an integer."
msgstr "El ID de producto de factura tiene que ser entero."
#: pkg/invoice/admin.go:1150
#: pkg/invoice/admin.go:1052
msgid "Invoice product ID one or greater."
msgstr "El ID de producto de factura tiene que ser como mínimo uno."
#: pkg/invoice/admin.go:1154
#: pkg/invoice/admin.go:1056
msgid "Product ID must be an integer."
msgstr "El ID de producto tiene que ser un número entero."
#: pkg/invoice/admin.go:1155
#: pkg/invoice/admin.go:1057
msgid "Product ID must zero or greater."
msgstr "El ID de producto tiene que ser como mínimo cero."
#: pkg/invoice/admin.go:1164
#: pkg/invoice/admin.go:1066
msgid "Quantity can not be empty."
msgstr "No podéis dejar la cantidad en blanco."
#: pkg/invoice/admin.go:1165
#: pkg/invoice/admin.go:1067
msgid "Quantity must be an integer."
msgstr "La cantidad tiene que ser un número entero."
#: pkg/invoice/admin.go:1166
#: pkg/invoice/admin.go:1068
msgid "Quantity must one or greater."
msgstr "La cantidad tiene que ser como mínimo uno."
#: pkg/invoice/admin.go:1169
#: pkg/invoice/admin.go:1071
msgid "Discount can not be empty."
msgstr "No podéis dejar el descuento en blanco."
#: pkg/invoice/admin.go:1170
#: pkg/invoice/admin.go:1072
msgid "Discount must be an integer."
msgstr "El descuento tiene que ser un número entero."
#: pkg/invoice/admin.go:1171 pkg/invoice/admin.go:1172
#: pkg/invoice/admin.go:1073 pkg/invoice/admin.go:1074
msgid "Discount must be a percentage between 0 and 100."
msgstr "El descuento tiene que ser un porcentaje entre 1 y 100."
#: pkg/invoice/admin.go:1176
#: pkg/invoice/admin.go:1078
msgid "Selected tax is not valid."
msgstr "El impuesto escogido no es válido."
@ -3501,19 +3500,19 @@ msgctxt "filename"
msgid "bookings.ods"
msgstr "reservas.ods"
#: pkg/booking/admin.go:591
#: pkg/booking/admin.go:473
msgid "Country can not be empty to validate the postcode."
msgstr "No podéis dejar el país en blanco para validar el código postal."
#: pkg/booking/admin.go:601
#: pkg/booking/admin.go:483
msgid "Country can not be empty to validate the phone."
msgstr "No podéis dejar el país en blanco para validar el teléfono."
#: pkg/booking/admin.go:608
#: pkg/booking/admin.go:490
msgid "You must select at least one accommodation."
msgstr "Tenéis que seleccionar como mínimo un alojamiento."
#: pkg/booking/admin.go:614
#: pkg/booking/admin.go:496
msgid "The selected accommodations have no available openings in the requested dates."
msgstr "Los alojamientos seleccionados no tienen disponibilidad en las fechas pedidas."
@ -3630,6 +3629,9 @@ msgstr "%s tiene que ser como máximo %d"
msgid "It is mandatory to agree to the reservation conditions."
msgstr "Es obligatorio aceptar las condiciones de reserva."
#~ msgid "Total"
#~ msgstr "Total"
#~ msgid "Select a customer"
#~ msgstr "Escoja un cliente"

182
po/fr.po
View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: camper\n"
"Report-Msgid-Bugs-To: jordi@tandem.blog\n"
"POT-Creation-Date: 2024-05-03 17:19+0200\n"
"POT-Creation-Date: 2024-05-03 19:12+0200\n"
"PO-Revision-Date: 2024-02-06 10:05+0100\n"
"Last-Translator: Oriol Carbonell <info@oriolcarbonell.cat>\n"
"Language-Team: French <traduc@traduc.org>\n"
@ -179,7 +179,7 @@ msgstr "Nuits"
#: web/templates/mail/payment/details.gotxt:22
#: web/templates/public/booking/fields.gohtml:60
#: web/templates/admin/payment/details.gohtml:98
#: web/templates/admin/booking/fields.gohtml:93 pkg/invoice/admin.go:1062
#: web/templates/admin/booking/fields.gohtml:93 pkg/invoice/admin.go:964
msgctxt "input"
msgid "Adults aged 17 or older"
msgstr "Adultes âgés 17 ans ou plus"
@ -187,7 +187,7 @@ msgstr "Adultes âgés 17 ans ou plus"
#: web/templates/mail/payment/details.gotxt:23
#: web/templates/public/booking/fields.gohtml:71
#: web/templates/admin/payment/details.gohtml:102
#: web/templates/admin/booking/fields.gohtml:109 pkg/invoice/admin.go:1063
#: web/templates/admin/booking/fields.gohtml:109 pkg/invoice/admin.go:965
msgctxt "input"
msgid "Teenagers from 11 to 16 years old"
msgstr "Adolescents de 11 à 16 ans"
@ -195,7 +195,7 @@ msgstr "Adolescents de 11 à 16 ans"
#: web/templates/mail/payment/details.gotxt:24
#: web/templates/public/booking/fields.gohtml:82
#: web/templates/admin/payment/details.gohtml:106
#: web/templates/admin/booking/fields.gohtml:125 pkg/invoice/admin.go:1064
#: web/templates/admin/booking/fields.gohtml:125 pkg/invoice/admin.go:966
msgctxt "input"
msgid "Children from 2 to 10 years old"
msgstr "Enfants de 2 à 10 ans"
@ -203,14 +203,14 @@ msgstr "Enfants de 2 à 10 ans"
#: web/templates/mail/payment/details.gotxt:25
#: web/templates/public/booking/fields.gohtml:100
#: web/templates/admin/payment/details.gohtml:110
#: web/templates/admin/booking/fields.gohtml:140 pkg/invoice/admin.go:1065
#: web/templates/admin/booking/fields.gohtml:140 pkg/invoice/admin.go:967
msgctxt "input"
msgid "Dogs"
msgstr "Chiens"
#: web/templates/mail/payment/details.gotxt:26
#: web/templates/admin/payment/details.gohtml:114
#: web/templates/admin/booking/fields.gohtml:167 pkg/invoice/admin.go:1066
#: web/templates/admin/booking/fields.gohtml:167 pkg/invoice/admin.go:968
#: pkg/booking/cart.go:242
msgctxt "cart"
msgid "Tourist tax"
@ -293,6 +293,7 @@ msgstr "Pays"
#: web/templates/mail/payment/details.gotxt:46
#: web/templates/public/booking/fields.gohtml:201
#: web/templates/admin/payment/details.gohtml:163
#: web/templates/admin/customer/index.gohtml:33
#: web/templates/admin/login.gohtml:27 web/templates/admin/profile.gohtml:38
#: web/templates/admin/taxDetails.gohtml:53
msgctxt "input"
@ -418,7 +419,7 @@ msgid "Order Number"
msgstr "Numéro de commande"
#: web/templates/public/payment/details.gohtml:8
#: web/templates/admin/invoice/index.gohtml:103
#: web/templates/admin/invoice/index.gohtml:104
#: web/templates/admin/invoice/view.gohtml:26
msgctxt "title"
msgid "Date"
@ -596,6 +597,12 @@ msgctxt "action"
msgid "Filters"
msgstr "Filtres"
#: web/templates/public/form.gohtml:93 web/templates/admin/form.gohtml:93
#: web/templates/admin/prebooking/results.gohtml:20
msgctxt "action"
msgid "Load more"
msgstr "Charger plus"
#: web/templates/public/campsite/type.gohtml:49
#: web/templates/public/booking/fields.gohtml:278
msgctxt "action"
@ -1183,6 +1190,7 @@ msgstr "Slug"
#: web/templates/admin/campsite/type/form.gohtml:51
#: web/templates/admin/campsite/type/option/form.gohtml:41
#: web/templates/admin/season/form.gohtml:50
#: web/templates/admin/customer/index.gohtml:24
#: web/templates/admin/invoice/product-form.gohtml:16
#: web/templates/admin/services/form.gohtml:53
#: web/templates/admin/profile.gohtml:29
@ -1255,7 +1263,7 @@ msgstr "Ajouter un texte juridique"
#: web/templates/admin/campsite/type/option/index.gohtml:30
#: web/templates/admin/campsite/type/index.gohtml:29
#: web/templates/admin/season/index.gohtml:29
#: web/templates/admin/customer/index.gohtml:19
#: web/templates/admin/customer/index.gohtml:51
#: web/templates/admin/user/index.gohtml:20
#: web/templates/admin/surroundings/index.gohtml:83
#: web/templates/admin/amenity/feature/index.gohtml:30
@ -1860,7 +1868,7 @@ msgid "New Customer"
msgstr "Nouveau client"
#: web/templates/admin/customer/form.gohtml:15
#: web/templates/admin/invoice/index.gohtml:105
#: web/templates/admin/invoice/index.gohtml:106
msgctxt "title"
msgid "Customer"
msgstr "Client"
@ -1917,19 +1925,27 @@ msgctxt "action"
msgid "Add Customer"
msgstr "Ajouter un client"
#: web/templates/admin/customer/index.gohtml:20
#: web/templates/admin/customer/index.gohtml:43
#: web/templates/admin/invoice/index.gohtml:94
#: web/templates/admin/prebooking/index.gohtml:51
#: web/templates/admin/booking/index.gohtml:65
msgctxt "action"
msgid "Reset"
msgstr "Réinitialiser"
#: web/templates/admin/customer/index.gohtml:52
#: web/templates/admin/user/login-attempts.gohtml:20
#: web/templates/admin/user/index.gohtml:21
msgctxt "header"
msgid "Email"
msgstr "E-mail"
#: web/templates/admin/customer/index.gohtml:21
#: web/templates/admin/customer/index.gohtml:53
msgctxt "header"
msgid "Phone"
msgstr "Téléphone"
#: web/templates/admin/customer/index.gohtml:33
#: web/templates/admin/customer/index.gohtml:61
msgid "No customer found."
msgstr "Aucun client trouvée."
@ -2076,60 +2092,39 @@ msgctxt "action"
msgid "Filter"
msgstr "Filtrer"
#: web/templates/admin/invoice/index.gohtml:94
#: web/templates/admin/prebooking/index.gohtml:51
#: web/templates/admin/booking/index.gohtml:65
msgctxt "action"
msgid "Reset"
msgstr "Réinitialiser"
#: web/templates/admin/invoice/index.gohtml:97
msgctxt "action"
msgid "Add invoice"
msgstr "Nouvelle facture"
#: web/templates/admin/invoice/index.gohtml:102
#: web/templates/admin/invoice/index.gohtml:103
msgctxt "invoice"
msgid "All"
msgstr "Toutes"
#: web/templates/admin/invoice/index.gohtml:104
#: web/templates/admin/invoice/index.gohtml:105
msgctxt "title"
msgid "Invoice Num."
msgstr "Num. de facture"
#: web/templates/admin/invoice/index.gohtml:106
#: web/templates/admin/invoice/index.gohtml:107
msgctxt "title"
msgid "Status"
msgstr "Statut"
#: web/templates/admin/invoice/index.gohtml:107
#: web/templates/admin/invoice/index.gohtml:108
msgctxt "title"
msgid "Download"
msgstr "Téléchargement"
#: web/templates/admin/invoice/index.gohtml:108
#: web/templates/admin/invoice/index.gohtml:109
msgctxt "title"
msgid "Amount"
msgstr "Import"
#: web/templates/admin/invoice/index.gohtml:115
msgctxt "action"
msgid "Select invoice %v"
msgstr "Sélectionner la facture %v"
#: web/templates/admin/invoice/index.gohtml:144
msgctxt "action"
msgid "Download invoice %s"
msgstr "Télécharger la facture %s"
#: web/templates/admin/invoice/index.gohtml:154
msgid "No invoices added yet."
msgstr "Aucune facture na encore été ajouté."
#: web/templates/admin/invoice/index.gohtml:161
msgid "Total"
msgstr "Totale"
#: web/templates/admin/invoice/index.gohtml:117
msgid "No invoices found."
msgstr "Aucune facture trouvée."
#: web/templates/admin/invoice/view.gohtml:2
msgctxt "title"
@ -2171,6 +2166,16 @@ msgctxt "title"
msgid "Tax Base"
msgstr "Import imposable"
#: web/templates/admin/invoice/results.gohtml:3
msgctxt "action"
msgid "Select invoice %v"
msgstr "Sélectionner la facture %v"
#: web/templates/admin/invoice/results.gohtml:32
msgctxt "action"
msgid "Download invoice %s"
msgstr "Télécharger la facture %s"
#: web/templates/admin/prebooking/index.gohtml:6
#: web/templates/admin/layout.gohtml:92
#: web/templates/admin/booking/form.gohtml:20
@ -2216,12 +2221,6 @@ msgstr "Nom du titulaire"
msgid "No prebooking found."
msgstr "Aucune pré-réservation trouvée."
#: web/templates/admin/prebooking/results.gohtml:20
#: web/templates/admin/booking/results.gohtml:23
msgctxt "action"
msgid "Load more"
msgstr "Charger plus"
#: web/templates/admin/login.gohtml:6 web/templates/admin/login.gohtml:18
msgctxt "title"
msgid "Login"
@ -2701,7 +2700,7 @@ msgctxt "header"
msgid "Decription"
msgstr "Description"
#: web/templates/admin/booking/fields.gohtml:81 pkg/invoice/admin.go:1061
#: web/templates/admin/booking/fields.gohtml:81 pkg/invoice/admin.go:963
#: pkg/booking/cart.go:232
msgctxt "cart"
msgid "Night"
@ -2900,7 +2899,7 @@ msgstr "Paiement de réservation reçu avec succès"
#: pkg/legal/admin.go:258 pkg/app/user.go:249 pkg/campsite/types/option.go:365
#: pkg/campsite/types/feature.go:272 pkg/campsite/types/admin.go:577
#: pkg/campsite/feature.go:269 pkg/season/admin.go:411
#: pkg/invoice/admin.go:1158 pkg/services/admin.go:316
#: pkg/invoice/admin.go:1060 pkg/services/admin.go:316
#: pkg/surroundings/admin.go:340 pkg/amenity/feature.go:269
#: pkg/amenity/admin.go:283
msgid "Name can not be empty."
@ -2941,8 +2940,8 @@ msgstr "Limage de la diapositive doit être de type média dimage."
msgid "Email can not be empty."
msgstr "Le-mail ne peut pas être vide."
#: pkg/app/login.go:57 pkg/app/user.go:247 pkg/customer/admin.go:345
#: pkg/company/admin.go:225 pkg/booking/admin.go:597 pkg/booking/public.go:593
#: pkg/app/login.go:57 pkg/app/user.go:247 pkg/customer/admin.go:361
#: pkg/company/admin.go:225 pkg/booking/admin.go:479 pkg/booking/public.go:593
msgid "This email is not valid. It should be like name@domain.com."
msgstr "Cette adresse e-mail nest pas valide. Il devrait en être name@domain.com."
@ -2999,15 +2998,15 @@ msgstr "Le maximum doit être un nombre entier."
msgid "Maximum must be equal or greater than minimum."
msgstr "Le maximum doit être égal ou supérieur au minimum."
#: pkg/campsite/types/option.go:382 pkg/invoice/admin.go:1159
#: pkg/campsite/types/option.go:382 pkg/invoice/admin.go:1061
msgid "Price can not be empty."
msgstr "Le prix ne peut pas être vide."
#: pkg/campsite/types/option.go:383 pkg/invoice/admin.go:1160
#: pkg/campsite/types/option.go:383 pkg/invoice/admin.go:1062
msgid "Price must be a decimal number."
msgstr "Le prix doit être un nombre décimal."
#: pkg/campsite/types/option.go:384 pkg/invoice/admin.go:1161
#: pkg/campsite/types/option.go:384 pkg/invoice/admin.go:1063
msgid "Price must be zero or greater."
msgstr "Le prix doit être égal ou supérieur à zéro."
@ -3153,7 +3152,7 @@ msgctxt "header"
msgid "Children (aged 2 to 10)"
msgstr "Enfants (de 2 à 10 anys)"
#: pkg/campsite/admin.go:280 pkg/booking/admin.go:573 pkg/booking/public.go:177
#: pkg/campsite/admin.go:280 pkg/booking/admin.go:455 pkg/booking/public.go:177
#: pkg/booking/public.go:232
msgid "Selected campsite type is not valid."
msgstr "Le type demplacement sélectionné nest pas valide."
@ -3191,129 +3190,129 @@ msgstr "La date de fin ne peut pas être vide."
msgid "End date must be a valid date."
msgstr "La date de fin doit être une date valide."
#: pkg/customer/admin.go:326 pkg/company/admin.go:207
#: pkg/customer/admin.go:342 pkg/company/admin.go:207
#: pkg/booking/checkin.go:300 pkg/booking/public.go:577
msgid "Selected country is not valid."
msgstr "Le pays sélectionné nest pas valide."
#: pkg/customer/admin.go:330 pkg/booking/checkin.go:284
#: pkg/customer/admin.go:346 pkg/booking/checkin.go:284
msgid "Selected ID document type is not valid."
msgstr "Le type de document didentité sélectionné nest pas valide."
#: pkg/customer/admin.go:331 pkg/booking/checkin.go:285
#: pkg/customer/admin.go:347 pkg/booking/checkin.go:285
msgid "ID document number can not be empty."
msgstr "Le numéro de documento didentité ne peut pas être vide."
#: pkg/customer/admin.go:333 pkg/booking/checkin.go:291
#: pkg/booking/checkin.go:292 pkg/booking/admin.go:585
#: pkg/customer/admin.go:349 pkg/booking/checkin.go:291
#: pkg/booking/checkin.go:292 pkg/booking/admin.go:467
#: pkg/booking/public.go:581
msgid "Full name can not be empty."
msgstr "Le nom complet ne peut pas être vide."
#: pkg/customer/admin.go:334 pkg/booking/admin.go:586 pkg/booking/public.go:582
#: pkg/customer/admin.go:350 pkg/booking/admin.go:468 pkg/booking/public.go:582
msgid "Full name must have at least one letter."
msgstr "Le nom complet doit comporter au moins une lettre."
#: pkg/customer/admin.go:337 pkg/company/admin.go:230 pkg/booking/public.go:585
#: pkg/customer/admin.go:353 pkg/company/admin.go:230 pkg/booking/public.go:585
msgid "Address can not be empty."
msgstr "Ladresse ne peut pas être vide."
#: pkg/customer/admin.go:338 pkg/booking/public.go:586
#: pkg/customer/admin.go:354 pkg/booking/public.go:586
msgid "Town or village can not be empty."
msgstr "La ville ne peut pas être vide."
#: pkg/customer/admin.go:339 pkg/company/admin.go:233 pkg/booking/public.go:587
#: pkg/customer/admin.go:355 pkg/company/admin.go:233 pkg/booking/public.go:587
msgid "Postcode can not be empty."
msgstr "Le code postal ne peut pas être vide."
#: pkg/customer/admin.go:340 pkg/company/admin.go:234 pkg/booking/admin.go:592
#: pkg/customer/admin.go:356 pkg/company/admin.go:234 pkg/booking/admin.go:474
#: pkg/booking/public.go:588
msgid "This postcode is not valid."
msgstr "Ce code postal nest pas valide."
#: pkg/customer/admin.go:348 pkg/company/admin.go:220
#: pkg/booking/checkin.go:304 pkg/booking/admin.go:602
#: pkg/customer/admin.go:364 pkg/company/admin.go:220
#: pkg/booking/checkin.go:304 pkg/booking/admin.go:484
#: pkg/booking/public.go:596
msgid "This phone number is not valid."
msgstr "Ce numéro de téléphone nest pas valide."
#: pkg/invoice/admin.go:679
#: pkg/invoice/admin.go:581
msgctxt "filename"
msgid "invoices.zip"
msgstr "factures.zip"
#: pkg/invoice/admin.go:694
#: pkg/invoice/admin.go:596
msgctxt "filename"
msgid "invoices.ods"
msgstr "factures.ods"
#: pkg/invoice/admin.go:696 pkg/invoice/admin.go:1358 pkg/invoice/admin.go:1365
#: pkg/invoice/admin.go:598 pkg/invoice/admin.go:1260 pkg/invoice/admin.go:1267
msgid "Invalid action"
msgstr "Actin invalide"
#: pkg/invoice/admin.go:861
#: pkg/invoice/admin.go:763
msgid "Selected invoice status is not valid."
msgstr "Lstatut sélectionné nest pas valide."
#: pkg/invoice/admin.go:862
#: pkg/invoice/admin.go:764
msgid "Invoice date can not be empty."
msgstr "La date de facture ne peut pas être vide."
#: pkg/invoice/admin.go:863
#: pkg/invoice/admin.go:765
msgid "Invoice date must be a valid date."
msgstr "La date de facture doit être une date valide."
#: pkg/invoice/admin.go:1021
#: pkg/invoice/admin.go:923
#, c-format
msgid "Re: booking #%s of %s%s"
msgstr "Réf. : réservation num. %s du %s%s"
#: pkg/invoice/admin.go:1022
#: pkg/invoice/admin.go:924
msgctxt "to_char"
msgid "MM/DD/YYYY"
msgstr "DD/MM/YYYY"
#: pkg/invoice/admin.go:1149
#: pkg/invoice/admin.go:1051
msgid "Invoice product ID must be an integer."
msgstr "Le ID de produit de facture doit être un entier."
#: pkg/invoice/admin.go:1150
#: pkg/invoice/admin.go:1052
msgid "Invoice product ID one or greater."
msgstr "Le ID de produit de facture doit être égal ou supérieur à un."
#: pkg/invoice/admin.go:1154
#: pkg/invoice/admin.go:1056
msgid "Product ID must be an integer."
msgstr "Le ID de produit doit être un entier."
#: pkg/invoice/admin.go:1155
#: pkg/invoice/admin.go:1057
msgid "Product ID must zero or greater."
msgstr "Le ID de produit doit être égal ou supérieur à zéro."
#: pkg/invoice/admin.go:1164
#: pkg/invoice/admin.go:1066
msgid "Quantity can not be empty."
msgstr "La quantité ne peut pas être vide."
#: pkg/invoice/admin.go:1165
#: pkg/invoice/admin.go:1067
msgid "Quantity must be an integer."
msgstr "La quantité doit être un entier."
#: pkg/invoice/admin.go:1166
#: pkg/invoice/admin.go:1068
msgid "Quantity must one or greater."
msgstr "La quantité doit être égnal ou supérieur à zéro."
#: pkg/invoice/admin.go:1169
#: pkg/invoice/admin.go:1071
msgid "Discount can not be empty."
msgstr "Le rabais ne peut pas être vide."
#: pkg/invoice/admin.go:1170
#: pkg/invoice/admin.go:1072
msgid "Discount must be an integer."
msgstr "Le rabais doit être un entier."
#: pkg/invoice/admin.go:1171 pkg/invoice/admin.go:1172
#: pkg/invoice/admin.go:1073 pkg/invoice/admin.go:1074
msgid "Discount must be a percentage between 0 and 100."
msgstr "Le rabais doit être un pourcentage compris entre 0 et 100."
#: pkg/invoice/admin.go:1176
#: pkg/invoice/admin.go:1078
msgid "Selected tax is not valid."
msgstr "La taxe sélectionnée nest pas valide."
@ -3501,19 +3500,19 @@ msgctxt "filename"
msgid "bookings.ods"
msgstr "reservations.ods"
#: pkg/booking/admin.go:591
#: pkg/booking/admin.go:473
msgid "Country can not be empty to validate the postcode."
msgstr "Le pays ne peut pas être vide pour valider le code postal."
#: pkg/booking/admin.go:601
#: pkg/booking/admin.go:483
msgid "Country can not be empty to validate the phone."
msgstr "Le pays ne peut pas être vide pour valider le téléphone."
#: pkg/booking/admin.go:608
#: pkg/booking/admin.go:490
msgid "You must select at least one accommodation."
msgstr "Vous devez sélectionner au moins un hébergement."
#: pkg/booking/admin.go:614
#: pkg/booking/admin.go:496
msgid "The selected accommodations have no available openings in the requested dates."
msgstr "Les hébergements sélectionnés nont pas de disponibilités aux dates demandées."
@ -3630,6 +3629,9 @@ msgstr "%s doit être tout au plus %d."
msgid "It is mandatory to agree to the reservation conditions."
msgstr "Il est obligatoire daccepter les conditions de réservation."
#~ msgid "Total"
#~ msgstr "Totale"
#~ msgid "Select a customer"
#~ msgstr "Choisissez un client"

View File

@ -96,73 +96,24 @@
</form>
<a href="/admin/invoices/new">{{( pgettext "Add invoice" "action" )}}</a>
<h2>{{ template "title" . }}</h2>
<table id="invoice-list">
<thead>
<tr>
<th>{{( pgettext "All" "invoice" )}}</th>
<th>{{( pgettext "Date" "title" )}}</th>
<th>{{( pgettext "Invoice Num." "title" )}}</th>
<th>{{( pgettext "Customer" "title" )}}</th>
<th>{{( pgettext "Status" "title" )}}</th>
<th>{{( pgettext "Download" "title" )}}</th>
<th class="numeric">{{( pgettext "Amount" "title" )}}</th>
</tr>
</thead>
<tbody>
{{ with .Invoices }}
{{- range $invoice := . }}
<tr>
{{ $title := .Number | printf (pgettext "Select invoice %v" "action") }}
<td><input type="checkbox" form="batch-form"
name="invoice" value="{{ .Slug }}"
aria-label="{{ $title }}"
title="{{ $title }}"/></td>
<td>{{ .Date|formatDate }}</td>
<td><a href="/admin/invoices/{{ .Slug }}">{{ .Number }}</a></td>
<td>{{ .CustomerName }}</td>
<td class="invoice-status-{{ .Status }}">
<details class="invoice-status menu">
<summary >{{ .StatusLabel }}</summary>
<form data-hx-put="/admin/invoices/{{ .Slug }}">
{{ CSRFInput }}
<input type="hidden" name="quick" value="status">
<ul role="menu">
{{- range $status, $name := $.InvoiceStatuses }}
{{- if ne $status $invoice.Status }}
<li role="presentation">
<button role="menuitem" type="submit"
name="invoice_status" value="{{ $status }}"
class="invoice-status-{{ $status }}"
>{{ $name }}</button>
</li>
{{- end }}
{{- end }}
</ul>
</form>
</details>
</td>
{{- $title = .Number | printf (pgettext "Download invoice %s" "action") -}}
<td class="invoice-download"><a href="/admin/invoices/{{ .Slug }}.pdf"
download="{{ .Number}}-{{ .CustomerName | slugify }}.pdf"
title="{{( pgettext "Download invoice" "action" )}}"
aria-label="{{ $title }}">⤓</a></td>
<td class="numeric">{{ .Total|formatPrice }}</td>
</tr>
{{- end }}
{{ else }}
{{ if .Invoices }}
<table id="invoice-list">
<thead>
<tr>
<td colspan="9">{{( gettext "No invoices added yet." )}}</td>
<th>{{( pgettext "All" "invoice" )}}</th>
<th>{{( pgettext "Date" "title" )}}</th>
<th>{{( pgettext "Invoice Num." "title" )}}</th>
<th>{{( pgettext "Customer" "title" )}}</th>
<th>{{( pgettext "Status" "title" )}}</th>
<th>{{( pgettext "Download" "title" )}}</th>
<th class="numeric">{{( pgettext "Amount" "title" )}}</th>
</tr>
{{ end }}
</tbody>
{{ if .Invoices }}
<tfoot>
<tr>
<th scope="row" colspan="6">{{( gettext "Total" )}}</th>
<td class="numeric">{{ .TotalAmount|formatPrice }}</td>
<td colspan="2"></td>
</tr>
</tfoot>
{{ end }}
</table>
</thead>
<tbody>
{{ template "results.gohtml" . }}
</tbody>
</table>
{{- else -}}
<p>{{( gettext "No invoices found." )}}</p>
{{ end }}
{{- end }}

View File

@ -0,0 +1,40 @@
{{- range $invoice := .Invoices }}
<tr>
{{ $title := .Number | printf (pgettext "Select invoice %v" "action") }}
<td><input type="checkbox" form="batch-form"
name="invoice" value="{{ .Slug }}"
aria-label="{{ $title }}"
title="{{ $title }}"/></td>
<td>{{ .Date|formatDate }}</td>
<td><a href="/admin/invoices/{{ .Slug }}">{{ .Number }}</a></td>
<td>{{ .CustomerName }}</td>
<td class="invoice-status-{{ .Status }}">
<details class="invoice-status menu">
<summary>{{ .StatusLabel }}</summary>
<form data-hx-put="/admin/invoices/{{ .Slug }}">
{{ CSRFInput }}
<input type="hidden" name="quick" value="status">
<ul role="menu">
{{- range $status, $name := $.InvoiceStatuses }}
{{- if ne $status $invoice.Status }}
<li role="presentation">
<button role="menuitem" type="submit"
name="invoice_status" value="{{ $status }}"
class="invoice-status-{{ $status }}"
>{{ $name }}</button>
</li>
{{- end }}
{{- end }}
</ul>
</form>
</details>
</td>
{{- $title = .Number | printf (pgettext "Download invoice %s" "action") -}}
<td class="invoice-download"><a href="/admin/invoices/{{ .Slug }}.pdf"
download="{{ .Number}}-{{ .CustomerName | slugify }}.pdf"
title="{{( pgettext "Download invoice" "action" )}}"
aria-label="{{ $title }}">⤓</a></td>
<td class="numeric">{{ .Total|formatPrice }}</td>
</tr>
{{- end }}
{{ template "pagination" .Filters.Cursor | colspan 7 }}