diff --git a/pkg/payment/admin.go b/pkg/payment/admin.go index fe69d96..8b70d97 100644 --- a/pkg/payment/admin.go +++ b/pkg/payment/admin.go @@ -2,6 +2,7 @@ package payment import ( "context" + "fmt" "net/http" "time" @@ -9,6 +10,7 @@ import ( "dev.tandem.ws/tandem/camper/pkg/database" httplib "dev.tandem.ws/tandem/camper/pkg/http" "dev.tandem.ws/tandem/camper/pkg/locale" + "dev.tandem.ws/tandem/camper/pkg/redsys" "dev.tandem.ws/tandem/camper/pkg/template" "dev.tandem.ws/tandem/camper/pkg/uuid" ) @@ -67,12 +69,12 @@ func (h *AdminHandler) Handler(user *auth.User, company *auth.Company, conn *dat } panic(err) } - h.paymentHandler(user, company, payment).ServeHTTP(w, r) + h.paymentHandler(user, company, conn, payment).ServeHTTP(w, r) } }) } -func (h *AdminHandler) paymentHandler(user *auth.User, company *auth.Company, payment *paymentDetails) http.Handler { +func (h *AdminHandler) paymentHandler(user *auth.User, company *auth.Company, conn *database.Conn, payment *paymentDetails) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var head string head, r.URL.Path = httplib.ShiftPath(r.URL.Path) @@ -81,6 +83,20 @@ func (h *AdminHandler) paymentHandler(user *auth.User, company *auth.Company, pa case "": switch r.Method { case http.MethodGet: + if payment.Status == StatusPreAuthenticated { + var err error + if err = conn.QueryRow(r.Context(), "select environment from redsys where company_id = $1", company.ID).Scan(&payment.Environment); err != nil && !database.ErrorIsNotFound(err) { + panic(err) + } + payment.AcceptPreauthRequest, err = payment.createRequest(r, user, company, conn, redsys.TransactionTypePreauthConfirm) + if err != nil { + panic(err) + } + payment.VoidPreauthRequest, err = payment.createRequest(r, user, company, conn, redsys.TransactionTypePreauthVoid) + if err != nil { + panic(err) + } + } payment.MustRender(w, r, user, company) default: httplib.MethodNotAllowed(w, r, http.MethodGet) @@ -163,28 +179,32 @@ func (page *paymentIndex) MustRender(w http.ResponseWriter, r *http.Request, use } type paymentDetails struct { - ID int - Reference string - CampsiteType string - ArrivalDate time.Time - DepartureDate time.Time - NumNights int - NumAdults int - NumTeenagers int - NumChildren int - NumDogs int - SubtotalTouristTax string - Total string - DownPaymentPercent int - DownPayment string - ZonePreferences string - ACSICard bool - Status string - StatusLabel string - CreatedAt time.Time - UpdatedAt time.Time - Options []*paymentOption - Customer *paymentCustomer + ID int + Slug string + Reference string + CampsiteType string + ArrivalDate time.Time + DepartureDate time.Time + NumNights int + NumAdults int + NumTeenagers int + NumChildren int + NumDogs int + SubtotalTouristTax string + Total string + DownPaymentPercent int + DownPayment string + ZonePreferences string + ACSICard bool + Status string + StatusLabel string + CreatedAt time.Time + UpdatedAt time.Time + Options []*paymentOption + Customer *paymentCustomer + Environment string + AcceptPreauthRequest *redsys.SignedRequest + VoidPreauthRequest *redsys.SignedRequest } type paymentOption struct { @@ -206,6 +226,7 @@ type paymentCustomer struct { func fetchPaymentDetails(ctx context.Context, conn *database.Conn, slug string, locale *locale.Locale) (*paymentDetails, error) { row := conn.QueryRow(ctx, ` select payment_id + , payment.slug , payment.reference , coalesce(campsite_type_i18n.name, campsite_type.name) , arrival_date @@ -238,6 +259,7 @@ func fetchPaymentDetails(ctx context.Context, conn *database.Conn, slug string, details := &paymentDetails{} if err := row.Scan( &details.ID, + &details.Slug, &details.Reference, &details.CampsiteType, &details.ArrivalDate, @@ -334,6 +356,22 @@ func fetchPaymentCustomer(ctx context.Context, conn *database.Conn, paymentID in return customer, nil } +func (f *paymentDetails) createRequest(r *http.Request, user *auth.User, company *auth.Company, conn *database.Conn, transactionType redsys.TransactionType) (*redsys.SignedRequest, error) { + schema := httplib.Protocol(r) + authority := httplib.Host(r) + paymentURL := fmt.Sprintf("%s://%s/admin/payments/%s", schema, authority, f.Slug) + request := redsys.Request{ + TransactionType: transactionType, + Amount: f.DownPayment, + OrderNumber: f.Reference, + SuccessURL: paymentURL, + FailureURL: paymentURL, + NotificationURL: fmt.Sprintf("%s/notification", publicBaseURL(r, user, f.Slug)), + ConsumerLanguage: user.Locale.Language, + } + return request.Sign(r.Context(), conn, company) +} + func (f *paymentDetails) MustRender(w http.ResponseWriter, r *http.Request, user *auth.User, company *auth.Company) { template.MustRenderAdmin(w, r, user, company, "payment/details.gohtml", f) } diff --git a/pkg/payment/public.go b/pkg/payment/public.go index 6287f30..78519c3 100644 --- a/pkg/payment/public.go +++ b/pkg/payment/public.go @@ -20,7 +20,8 @@ import ( ) const ( - StatusCompleted = "completed" + StatusCompleted = "completed" + StatusPreAuthenticated = "preauth" ) type PublicHandler struct { @@ -101,11 +102,9 @@ type Payment struct { } func (payment *Payment) createRequest(r *http.Request, user *auth.User, company *auth.Company, conn *database.Conn) (*redsys.SignedRequest, error) { - schema := httplib.Protocol(r) - authority := httplib.Host(r) - baseURL := fmt.Sprintf("%s://%s/%s/payments/%s", schema, authority, user.Locale.Language, payment.Slug) + baseURL := publicBaseURL(r, user, payment.Slug) request := redsys.Request{ - TransactionType: redsys.TransactionTypeCharge, + TransactionType: redsys.TransactionTypePreauth, Amount: payment.DownPayment, OrderNumber: payment.Reference, Product: user.Locale.Pgettext("Campsite Booking", "order product name"), @@ -117,6 +116,12 @@ func (payment *Payment) createRequest(r *http.Request, user *auth.User, company return request.Sign(r.Context(), conn, company) } +func publicBaseURL(r *http.Request, user *auth.User, slug string) string { + schema := httplib.Protocol(r) + authority := httplib.Host(r) + return fmt.Sprintf("%s://%s/%s/payments/%s", schema, authority, user.Locale.Language, slug) +} + type paymentPage struct { *template.PublicPage Environment string @@ -248,7 +253,7 @@ func handleNotification(w http.ResponseWriter, r *http.Request, user *auth.User, return } switch status { - case StatusCompleted: + case StatusPreAuthenticated: if err := sendEmail(r, conn, payment, company, user.Locale); err != nil { log.Println("Could not send email:", err) } diff --git a/po/ca.po b/po/ca.po index 3fceeec..4f8da41 100644 --- a/po/ca.po +++ b/po/ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: camper\n" "Report-Msgid-Bugs-To: jordi@tandem.blog\n" -"POT-Creation-Date: 2024-03-14 22:05+0100\n" +"POT-Creation-Date: 2024-03-24 21:59+0100\n" "PO-Revision-Date: 2024-02-06 10:04+0100\n" "Last-Translator: jordi fita mas \n" "Language-Team: Catalan \n" @@ -72,14 +72,14 @@ msgid "We have successfully received the payment for the booking with the follow msgstr "Hem rebut amb èxit el pagament de la reserva amb els següents detalls:" #: web/templates/mail/payment/details.gotxt:7 -#: web/templates/admin/payment/details.gohtml:19 +#: web/templates/admin/payment/details.gohtml:49 msgctxt "title" msgid "Payment" msgstr "Pagament" #: web/templates/mail/payment/details.gotxt:9 #: web/templates/admin/payment/index.gohtml:21 -#: web/templates/admin/payment/details.gohtml:22 +#: web/templates/admin/payment/details.gohtml:52 #: web/templates/admin/booking/index.gohtml:21 msgctxt "header" msgid "Reference" @@ -87,20 +87,20 @@ msgstr "Referència" #: web/templates/mail/payment/details.gotxt:10 #: web/templates/admin/payment/index.gohtml:22 -#: web/templates/admin/payment/details.gohtml:26 +#: web/templates/admin/payment/details.gohtml:56 #: web/templates/admin/booking/index.gohtml:25 msgctxt "header" msgid "Status" msgstr "Estat" #: web/templates/mail/payment/details.gotxt:11 -#: web/templates/admin/payment/details.gohtml:30 +#: web/templates/admin/payment/details.gohtml:60 msgctxt "payment header" msgid "Created at" msgstr "Creat el" #: web/templates/mail/payment/details.gotxt:12 -#: web/templates/admin/payment/details.gohtml:34 +#: web/templates/admin/payment/details.gohtml:64 msgctxt "payment header" msgid "Last updated at" msgstr "Actualitzat per darrera vegada el" @@ -108,32 +108,32 @@ msgstr "Actualitzat per darrera vegada el" #: web/templates/mail/payment/details.gotxt:14 #: web/templates/public/layout.gohtml:71 #: web/templates/public/booking/page.gohtml:7 -#: web/templates/admin/payment/details.gohtml:41 +#: web/templates/admin/payment/details.gohtml:71 msgctxt "title" msgid "Booking" msgstr "Reserva" #: web/templates/mail/payment/details.gotxt:16 #: web/templates/public/booking/fields.gohtml:14 -#: web/templates/admin/payment/details.gohtml:44 +#: web/templates/admin/payment/details.gohtml:74 msgctxt "title" msgid "Accommodation" msgstr "Allotjament" #: web/templates/mail/payment/details.gotxt:17 -#: web/templates/admin/payment/details.gohtml:48 +#: web/templates/admin/payment/details.gohtml:78 msgctxt "header" msgid "Area preferences" msgstr "Preferències d’àrea" #: web/templates/mail/payment/details.gotxt:18 -#: web/templates/admin/payment/details.gohtml:52 +#: web/templates/admin/payment/details.gohtml:82 msgctxt "input" msgid "ACSI card?" msgstr "Targeta ACSI?" #: web/templates/mail/payment/details.gotxt:18 -#: web/templates/admin/payment/details.gohtml:53 +#: web/templates/admin/payment/details.gohtml:83 #: web/templates/admin/campsite/index.gohtml:41 #: web/templates/admin/campsite/type/index.gohtml:53 #: web/templates/admin/season/index.gohtml:44 @@ -143,7 +143,7 @@ msgid "Yes" msgstr "Sí" #: web/templates/mail/payment/details.gotxt:18 -#: web/templates/admin/payment/details.gohtml:53 +#: web/templates/admin/payment/details.gohtml:83 #: web/templates/admin/campsite/index.gohtml:41 #: web/templates/admin/campsite/type/index.gohtml:53 #: web/templates/admin/season/index.gohtml:44 @@ -155,7 +155,7 @@ msgstr "No" #: web/templates/mail/payment/details.gotxt:19 #: web/templates/public/campsite/dates.gohtml:4 #: web/templates/public/booking/fields.gohtml:30 -#: web/templates/admin/payment/details.gohtml:56 +#: web/templates/admin/payment/details.gohtml:86 msgctxt "input" msgid "Arrival date" msgstr "Data d’arribada" @@ -163,47 +163,47 @@ msgstr "Data d’arribada" #: web/templates/mail/payment/details.gotxt:20 #: web/templates/public/campsite/dates.gohtml:15 #: web/templates/public/booking/fields.gohtml:41 -#: web/templates/admin/payment/details.gohtml:60 +#: web/templates/admin/payment/details.gohtml:90 msgctxt "input" msgid "Departure date" msgstr "Data de sortida" #: web/templates/mail/payment/details.gotxt:21 -#: web/templates/admin/payment/details.gohtml:64 +#: web/templates/admin/payment/details.gohtml:94 msgctxt "cart" msgid "Nights" msgstr "Nits" #: web/templates/mail/payment/details.gotxt:22 #: web/templates/public/booking/fields.gohtml:60 -#: web/templates/admin/payment/details.gohtml:68 +#: web/templates/admin/payment/details.gohtml:98 msgctxt "input" msgid "Adults aged 17 or older" 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:72 +#: web/templates/admin/payment/details.gohtml:102 msgctxt "input" msgid "Teenagers from 11 to 16 years old" msgstr "Adolescents d’entre 11 i 16 anys" #: web/templates/mail/payment/details.gotxt:24 #: web/templates/public/booking/fields.gohtml:82 -#: web/templates/admin/payment/details.gohtml:76 +#: web/templates/admin/payment/details.gohtml:106 msgctxt "input" msgid "Children from 2 to 10 years old" msgstr "Nens d’entre 2 i 10 anys" #: web/templates/mail/payment/details.gotxt:25 #: web/templates/public/booking/fields.gohtml:100 -#: web/templates/admin/payment/details.gohtml:80 +#: web/templates/admin/payment/details.gohtml:110 msgctxt "input" msgid "Dogs" msgstr "Gossos" #: web/templates/mail/payment/details.gotxt:26 -#: web/templates/admin/payment/details.gohtml:84 pkg/booking/cart.go:197 +#: web/templates/admin/payment/details.gohtml:114 pkg/booking/cart.go:197 msgctxt "cart" msgid "Tourist tax" msgstr "Impost turístic" @@ -216,13 +216,13 @@ msgstr "Total" #: web/templates/mail/payment/details.gotxt:28 #: web/templates/public/booking/fields.gohtml:230 -#: web/templates/admin/payment/details.gohtml:88 +#: web/templates/admin/payment/details.gohtml:118 msgctxt "cart" msgid "Down payment" msgstr "A compte" #: web/templates/mail/payment/details.gotxt:31 -#: web/templates/admin/payment/details.gohtml:96 +#: web/templates/admin/payment/details.gohtml:126 #: web/templates/admin/campsite/type/option/form.gohtml:18 #: web/templates/admin/campsite/type/option/index.gohtml:6 #: web/templates/admin/campsite/type/option/index.gohtml:17 @@ -232,21 +232,21 @@ msgstr "Opcions del tipus d’allotjament" #: web/templates/mail/payment/details.gotxt:39 #: web/templates/public/booking/fields.gohtml:146 -#: web/templates/admin/payment/details.gohtml:110 +#: web/templates/admin/payment/details.gohtml:140 msgctxt "title" msgid "Customer Details" msgstr "Detalls del client" #: web/templates/mail/payment/details.gotxt:41 #: web/templates/public/booking/fields.gohtml:149 -#: web/templates/admin/payment/details.gohtml:113 +#: web/templates/admin/payment/details.gohtml:143 msgctxt "input" msgid "Full name" msgstr "Nom i cognoms" #: web/templates/mail/payment/details.gotxt:42 #: web/templates/public/booking/fields.gohtml:158 -#: web/templates/admin/payment/details.gohtml:117 +#: web/templates/admin/payment/details.gohtml:147 #: web/templates/admin/taxDetails.gohtml:69 msgctxt "input" msgid "Address" @@ -254,14 +254,14 @@ msgstr "Adreça" #: web/templates/mail/payment/details.gotxt:43 #: web/templates/public/booking/fields.gohtml:167 -#: web/templates/admin/payment/details.gohtml:121 +#: web/templates/admin/payment/details.gohtml:151 #: web/templates/admin/taxDetails.gohtml:93 msgctxt "input" msgid "Postcode" msgstr "Codi postal" #: web/templates/mail/payment/details.gotxt:44 -#: web/templates/admin/payment/details.gohtml:125 +#: web/templates/admin/payment/details.gohtml:155 #: web/templates/admin/taxDetails.gohtml:77 msgctxt "input" msgid "City" @@ -269,7 +269,7 @@ msgstr "Població" #: web/templates/mail/payment/details.gotxt:45 #: web/templates/public/booking/fields.gohtml:185 -#: web/templates/admin/payment/details.gohtml:129 +#: web/templates/admin/payment/details.gohtml:159 #: web/templates/admin/taxDetails.gohtml:101 msgctxt "input" msgid "Country" @@ -277,7 +277,7 @@ msgstr "País" #: web/templates/mail/payment/details.gotxt:46 #: web/templates/public/booking/fields.gohtml:196 -#: web/templates/admin/payment/details.gohtml:133 +#: web/templates/admin/payment/details.gohtml:163 #: web/templates/admin/login.gohtml:27 web/templates/admin/profile.gohtml:38 #: web/templates/admin/taxDetails.gohtml:53 msgctxt "input" @@ -286,14 +286,14 @@ msgstr "Correu-e" #: web/templates/mail/payment/details.gotxt:47 #: web/templates/public/booking/fields.gohtml:205 -#: web/templates/admin/payment/details.gohtml:137 +#: web/templates/admin/payment/details.gohtml:167 #: web/templates/admin/taxDetails.gohtml:45 msgctxt "input" msgid "Phone" msgstr "Telèfon" #: web/templates/mail/payment/details.gotxt:48 -#: web/templates/admin/payment/details.gohtml:141 +#: web/templates/admin/payment/details.gohtml:171 #: web/templates/admin/profile.gohtml:68 msgctxt "input" msgid "Language" @@ -1015,6 +1015,24 @@ msgctxt "title" msgid "Payment %s" msgstr "Pagament %s" +#: web/templates/admin/payment/details.gohtml:20 +msgid "Are you sure you wish to accept this pre-authorization?" +msgstr "Esteu segur de voler acceptar aquesta pre-autorització?" + +#: web/templates/admin/payment/details.gohtml:29 +msgctxt "action" +msgid "Accept pre-authorization" +msgstr "Accepta pre-autorització" + +#: web/templates/admin/payment/details.gohtml:34 +msgid "Are you sure you wish to void this pre-authorization?" +msgstr "Esteu segur de voler anuŀlar aquesta opció?" + +#: web/templates/admin/payment/details.gohtml:43 +msgctxt "action" +msgid "Void pre-authorization" +msgstr "Anuŀla pre-autorització" + #: web/templates/admin/legal/form.gohtml:8 #: web/templates/admin/legal/form.gohtml:29 msgctxt "title" @@ -2265,12 +2283,12 @@ msgstr "La integració escollida no és vàlida." msgid "The merchant key is not valid." msgstr "Aquesta clau del comerç no és vàlid." -#: pkg/payment/public.go:111 +#: pkg/payment/public.go:110 msgctxt "order product name" msgid "Campsite Booking" msgstr "Reserva de càmping" -#: pkg/payment/public.go:369 +#: pkg/payment/public.go:374 msgctxt "subject" msgid "Booking payment successfully received" msgstr "Rebut amb èxit el pagament de la reserva" diff --git a/po/es.po b/po/es.po index ff772e3..52dd4dd 100644 --- a/po/es.po +++ b/po/es.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: camper\n" "Report-Msgid-Bugs-To: jordi@tandem.blog\n" -"POT-Creation-Date: 2024-03-14 22:05+0100\n" +"POT-Creation-Date: 2024-03-24 21:59+0100\n" "PO-Revision-Date: 2024-02-06 10:04+0100\n" "Last-Translator: jordi fita mas \n" "Language-Team: Spanish \n" @@ -72,14 +72,14 @@ msgid "We have successfully received the payment for the booking with the follow msgstr "Hemos recibido correctamente el pago de la reserva con los siguientes detalles:" #: web/templates/mail/payment/details.gotxt:7 -#: web/templates/admin/payment/details.gohtml:19 +#: web/templates/admin/payment/details.gohtml:49 msgctxt "title" msgid "Payment" msgstr "Pago" #: web/templates/mail/payment/details.gotxt:9 #: web/templates/admin/payment/index.gohtml:21 -#: web/templates/admin/payment/details.gohtml:22 +#: web/templates/admin/payment/details.gohtml:52 #: web/templates/admin/booking/index.gohtml:21 msgctxt "header" msgid "Reference" @@ -87,20 +87,20 @@ msgstr "Referencia" #: web/templates/mail/payment/details.gotxt:10 #: web/templates/admin/payment/index.gohtml:22 -#: web/templates/admin/payment/details.gohtml:26 +#: web/templates/admin/payment/details.gohtml:56 #: web/templates/admin/booking/index.gohtml:25 msgctxt "header" msgid "Status" msgstr "Estado" #: web/templates/mail/payment/details.gotxt:11 -#: web/templates/admin/payment/details.gohtml:30 +#: web/templates/admin/payment/details.gohtml:60 msgctxt "payment header" msgid "Created at" msgstr "Creado el" #: web/templates/mail/payment/details.gotxt:12 -#: web/templates/admin/payment/details.gohtml:34 +#: web/templates/admin/payment/details.gohtml:64 msgctxt "payment header" msgid "Last updated at" msgstr "Actualizado por última vez el" @@ -108,32 +108,32 @@ msgstr "Actualizado por última vez el" #: web/templates/mail/payment/details.gotxt:14 #: web/templates/public/layout.gohtml:71 #: web/templates/public/booking/page.gohtml:7 -#: web/templates/admin/payment/details.gohtml:41 +#: web/templates/admin/payment/details.gohtml:71 msgctxt "title" msgid "Booking" msgstr "Reserva" #: web/templates/mail/payment/details.gotxt:16 #: web/templates/public/booking/fields.gohtml:14 -#: web/templates/admin/payment/details.gohtml:44 +#: web/templates/admin/payment/details.gohtml:74 msgctxt "title" msgid "Accommodation" msgstr "Alojamientos" #: web/templates/mail/payment/details.gotxt:17 -#: web/templates/admin/payment/details.gohtml:48 +#: web/templates/admin/payment/details.gohtml:78 msgctxt "header" msgid "Area preferences" msgstr "Preferencias de área" #: web/templates/mail/payment/details.gotxt:18 -#: web/templates/admin/payment/details.gohtml:52 +#: web/templates/admin/payment/details.gohtml:82 msgctxt "input" msgid "ACSI card?" msgstr "¿Tarjeta ACSI?" #: web/templates/mail/payment/details.gotxt:18 -#: web/templates/admin/payment/details.gohtml:53 +#: web/templates/admin/payment/details.gohtml:83 #: web/templates/admin/campsite/index.gohtml:41 #: web/templates/admin/campsite/type/index.gohtml:53 #: web/templates/admin/season/index.gohtml:44 @@ -143,7 +143,7 @@ msgid "Yes" msgstr "Sí" #: web/templates/mail/payment/details.gotxt:18 -#: web/templates/admin/payment/details.gohtml:53 +#: web/templates/admin/payment/details.gohtml:83 #: web/templates/admin/campsite/index.gohtml:41 #: web/templates/admin/campsite/type/index.gohtml:53 #: web/templates/admin/season/index.gohtml:44 @@ -155,7 +155,7 @@ msgstr "No" #: web/templates/mail/payment/details.gotxt:19 #: web/templates/public/campsite/dates.gohtml:4 #: web/templates/public/booking/fields.gohtml:30 -#: web/templates/admin/payment/details.gohtml:56 +#: web/templates/admin/payment/details.gohtml:86 msgctxt "input" msgid "Arrival date" msgstr "Fecha de llegada" @@ -163,47 +163,47 @@ msgstr "Fecha de llegada" #: web/templates/mail/payment/details.gotxt:20 #: web/templates/public/campsite/dates.gohtml:15 #: web/templates/public/booking/fields.gohtml:41 -#: web/templates/admin/payment/details.gohtml:60 +#: web/templates/admin/payment/details.gohtml:90 msgctxt "input" msgid "Departure date" msgstr "Fecha de salida" #: web/templates/mail/payment/details.gotxt:21 -#: web/templates/admin/payment/details.gohtml:64 +#: web/templates/admin/payment/details.gohtml:94 msgctxt "cart" msgid "Nights" msgstr "Noches" #: web/templates/mail/payment/details.gotxt:22 #: web/templates/public/booking/fields.gohtml:60 -#: web/templates/admin/payment/details.gohtml:68 +#: web/templates/admin/payment/details.gohtml:98 msgctxt "input" msgid "Adults aged 17 or older" 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:72 +#: web/templates/admin/payment/details.gohtml:102 msgctxt "input" msgid "Teenagers from 11 to 16 years old" 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:76 +#: web/templates/admin/payment/details.gohtml:106 msgctxt "input" msgid "Children from 2 to 10 years old" 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:80 +#: web/templates/admin/payment/details.gohtml:110 msgctxt "input" msgid "Dogs" msgstr "Perros" #: web/templates/mail/payment/details.gotxt:26 -#: web/templates/admin/payment/details.gohtml:84 pkg/booking/cart.go:197 +#: web/templates/admin/payment/details.gohtml:114 pkg/booking/cart.go:197 msgctxt "cart" msgid "Tourist tax" msgstr "Impuesto turístico" @@ -216,13 +216,13 @@ msgstr "Total" #: web/templates/mail/payment/details.gotxt:28 #: web/templates/public/booking/fields.gohtml:230 -#: web/templates/admin/payment/details.gohtml:88 +#: web/templates/admin/payment/details.gohtml:118 msgctxt "cart" msgid "Down payment" msgstr "A cuenta" #: web/templates/mail/payment/details.gotxt:31 -#: web/templates/admin/payment/details.gohtml:96 +#: web/templates/admin/payment/details.gohtml:126 #: web/templates/admin/campsite/type/option/form.gohtml:18 #: web/templates/admin/campsite/type/option/index.gohtml:6 #: web/templates/admin/campsite/type/option/index.gohtml:17 @@ -232,21 +232,21 @@ msgstr "Opciones del tipo de alojamiento" #: web/templates/mail/payment/details.gotxt:39 #: web/templates/public/booking/fields.gohtml:146 -#: web/templates/admin/payment/details.gohtml:110 +#: web/templates/admin/payment/details.gohtml:140 msgctxt "title" msgid "Customer Details" msgstr "Detalles del cliente" #: web/templates/mail/payment/details.gotxt:41 #: web/templates/public/booking/fields.gohtml:149 -#: web/templates/admin/payment/details.gohtml:113 +#: web/templates/admin/payment/details.gohtml:143 msgctxt "input" msgid "Full name" msgstr "Nombre y apellidos" #: web/templates/mail/payment/details.gotxt:42 #: web/templates/public/booking/fields.gohtml:158 -#: web/templates/admin/payment/details.gohtml:117 +#: web/templates/admin/payment/details.gohtml:147 #: web/templates/admin/taxDetails.gohtml:69 msgctxt "input" msgid "Address" @@ -254,14 +254,14 @@ msgstr "Dirección" #: web/templates/mail/payment/details.gotxt:43 #: web/templates/public/booking/fields.gohtml:167 -#: web/templates/admin/payment/details.gohtml:121 +#: web/templates/admin/payment/details.gohtml:151 #: web/templates/admin/taxDetails.gohtml:93 msgctxt "input" msgid "Postcode" msgstr "Código postal" #: web/templates/mail/payment/details.gotxt:44 -#: web/templates/admin/payment/details.gohtml:125 +#: web/templates/admin/payment/details.gohtml:155 #: web/templates/admin/taxDetails.gohtml:77 msgctxt "input" msgid "City" @@ -269,7 +269,7 @@ msgstr "Población" #: web/templates/mail/payment/details.gotxt:45 #: web/templates/public/booking/fields.gohtml:185 -#: web/templates/admin/payment/details.gohtml:129 +#: web/templates/admin/payment/details.gohtml:159 #: web/templates/admin/taxDetails.gohtml:101 msgctxt "input" msgid "Country" @@ -277,7 +277,7 @@ msgstr "País" #: web/templates/mail/payment/details.gotxt:46 #: web/templates/public/booking/fields.gohtml:196 -#: web/templates/admin/payment/details.gohtml:133 +#: web/templates/admin/payment/details.gohtml:163 #: web/templates/admin/login.gohtml:27 web/templates/admin/profile.gohtml:38 #: web/templates/admin/taxDetails.gohtml:53 msgctxt "input" @@ -286,14 +286,14 @@ msgstr "Correo-e" #: web/templates/mail/payment/details.gotxt:47 #: web/templates/public/booking/fields.gohtml:205 -#: web/templates/admin/payment/details.gohtml:137 +#: web/templates/admin/payment/details.gohtml:167 #: web/templates/admin/taxDetails.gohtml:45 msgctxt "input" msgid "Phone" msgstr "Teléfono" #: web/templates/mail/payment/details.gotxt:48 -#: web/templates/admin/payment/details.gohtml:141 +#: web/templates/admin/payment/details.gohtml:171 #: web/templates/admin/profile.gohtml:68 msgctxt "input" msgid "Language" @@ -1015,6 +1015,24 @@ msgctxt "title" msgid "Payment %s" msgstr "Pago %s" +#: web/templates/admin/payment/details.gohtml:20 +msgid "Are you sure you wish to accept this pre-authorization?" +msgstr "¿Estáis seguro de querer acceptar esta preautorización?" + +#: web/templates/admin/payment/details.gohtml:29 +msgctxt "action" +msgid "Accept pre-authorization" +msgstr "Acceptar preautorización" + +#: web/templates/admin/payment/details.gohtml:34 +msgid "Are you sure you wish to void this pre-authorization?" +msgstr "¿Estáis seguro de querer anular esta preautorización?" + +#: web/templates/admin/payment/details.gohtml:43 +msgctxt "action" +msgid "Void pre-authorization" +msgstr "Anular preautorización" + #: web/templates/admin/legal/form.gohtml:8 #: web/templates/admin/legal/form.gohtml:29 msgctxt "title" @@ -2265,12 +2283,12 @@ msgstr "La integración escogida no es válida." msgid "The merchant key is not valid." msgstr "Esta clave del comercio no es válida." -#: pkg/payment/public.go:111 +#: pkg/payment/public.go:110 msgctxt "order product name" msgid "Campsite Booking" msgstr "Reserva de camping" -#: pkg/payment/public.go:369 +#: pkg/payment/public.go:374 msgctxt "subject" msgid "Booking payment successfully received" msgstr "Se ha recibido correctamente el pago de la reserva" diff --git a/po/fr.po b/po/fr.po index d68981b..eb4f446 100644 --- a/po/fr.po +++ b/po/fr.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: camper\n" "Report-Msgid-Bugs-To: jordi@tandem.blog\n" -"POT-Creation-Date: 2024-03-14 22:05+0100\n" +"POT-Creation-Date: 2024-03-24 21:59+0100\n" "PO-Revision-Date: 2024-02-06 10:05+0100\n" "Last-Translator: Oriol Carbonell \n" "Language-Team: French \n" @@ -72,14 +72,14 @@ msgid "We have successfully received the payment for the booking with the follow msgstr "Nous avons reçu avec succès le paiement de la réservation avec les détails suivants :" #: web/templates/mail/payment/details.gotxt:7 -#: web/templates/admin/payment/details.gohtml:19 +#: web/templates/admin/payment/details.gohtml:49 msgctxt "title" msgid "Payment" msgstr "Paiement" #: web/templates/mail/payment/details.gotxt:9 #: web/templates/admin/payment/index.gohtml:21 -#: web/templates/admin/payment/details.gohtml:22 +#: web/templates/admin/payment/details.gohtml:52 #: web/templates/admin/booking/index.gohtml:21 msgctxt "header" msgid "Reference" @@ -87,20 +87,20 @@ msgstr "Référence" #: web/templates/mail/payment/details.gotxt:10 #: web/templates/admin/payment/index.gohtml:22 -#: web/templates/admin/payment/details.gohtml:26 +#: web/templates/admin/payment/details.gohtml:56 #: web/templates/admin/booking/index.gohtml:25 msgctxt "header" msgid "Status" msgstr "Statut" #: web/templates/mail/payment/details.gotxt:11 -#: web/templates/admin/payment/details.gohtml:30 +#: web/templates/admin/payment/details.gohtml:60 msgctxt "payment header" msgid "Created at" msgstr "Créé à" #: web/templates/mail/payment/details.gotxt:12 -#: web/templates/admin/payment/details.gohtml:34 +#: web/templates/admin/payment/details.gohtml:64 msgctxt "payment header" msgid "Last updated at" msgstr "Dernière mise à jour à" @@ -108,32 +108,32 @@ msgstr "Dernière mise à jour à" #: web/templates/mail/payment/details.gotxt:14 #: web/templates/public/layout.gohtml:71 #: web/templates/public/booking/page.gohtml:7 -#: web/templates/admin/payment/details.gohtml:41 +#: web/templates/admin/payment/details.gohtml:71 msgctxt "title" msgid "Booking" msgstr "Réservation" #: web/templates/mail/payment/details.gotxt:16 #: web/templates/public/booking/fields.gohtml:14 -#: web/templates/admin/payment/details.gohtml:44 +#: web/templates/admin/payment/details.gohtml:74 msgctxt "title" msgid "Accommodation" msgstr "Hébergement" #: web/templates/mail/payment/details.gotxt:17 -#: web/templates/admin/payment/details.gohtml:48 +#: web/templates/admin/payment/details.gohtml:78 msgctxt "header" msgid "Area preferences" msgstr "Préférences de zone" #: web/templates/mail/payment/details.gotxt:18 -#: web/templates/admin/payment/details.gohtml:52 +#: web/templates/admin/payment/details.gohtml:82 msgctxt "input" msgid "ACSI card?" msgstr "Carte ACSI ?" #: web/templates/mail/payment/details.gotxt:18 -#: web/templates/admin/payment/details.gohtml:53 +#: web/templates/admin/payment/details.gohtml:83 #: web/templates/admin/campsite/index.gohtml:41 #: web/templates/admin/campsite/type/index.gohtml:53 #: web/templates/admin/season/index.gohtml:44 @@ -143,7 +143,7 @@ msgid "Yes" msgstr "Oui" #: web/templates/mail/payment/details.gotxt:18 -#: web/templates/admin/payment/details.gohtml:53 +#: web/templates/admin/payment/details.gohtml:83 #: web/templates/admin/campsite/index.gohtml:41 #: web/templates/admin/campsite/type/index.gohtml:53 #: web/templates/admin/season/index.gohtml:44 @@ -155,7 +155,7 @@ msgstr "Non" #: web/templates/mail/payment/details.gotxt:19 #: web/templates/public/campsite/dates.gohtml:4 #: web/templates/public/booking/fields.gohtml:30 -#: web/templates/admin/payment/details.gohtml:56 +#: web/templates/admin/payment/details.gohtml:86 msgctxt "input" msgid "Arrival date" msgstr "Date d’arrivée" @@ -163,47 +163,47 @@ msgstr "Date d’arrivée" #: web/templates/mail/payment/details.gotxt:20 #: web/templates/public/campsite/dates.gohtml:15 #: web/templates/public/booking/fields.gohtml:41 -#: web/templates/admin/payment/details.gohtml:60 +#: web/templates/admin/payment/details.gohtml:90 msgctxt "input" msgid "Departure date" msgstr "Date de depart" #: web/templates/mail/payment/details.gotxt:21 -#: web/templates/admin/payment/details.gohtml:64 +#: web/templates/admin/payment/details.gohtml:94 msgctxt "cart" msgid "Nights" msgstr "Nuits" #: web/templates/mail/payment/details.gotxt:22 #: web/templates/public/booking/fields.gohtml:60 -#: web/templates/admin/payment/details.gohtml:68 +#: web/templates/admin/payment/details.gohtml:98 msgctxt "input" msgid "Adults aged 17 or older" 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:72 +#: web/templates/admin/payment/details.gohtml:102 msgctxt "input" msgid "Teenagers from 11 to 16 years old" 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:76 +#: web/templates/admin/payment/details.gohtml:106 msgctxt "input" msgid "Children from 2 to 10 years old" 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:80 +#: web/templates/admin/payment/details.gohtml:110 msgctxt "input" msgid "Dogs" msgstr "Chiens" #: web/templates/mail/payment/details.gotxt:26 -#: web/templates/admin/payment/details.gohtml:84 pkg/booking/cart.go:197 +#: web/templates/admin/payment/details.gohtml:114 pkg/booking/cart.go:197 msgctxt "cart" msgid "Tourist tax" msgstr "Taxe touristique" @@ -216,13 +216,13 @@ msgstr "Totale" #: web/templates/mail/payment/details.gotxt:28 #: web/templates/public/booking/fields.gohtml:230 -#: web/templates/admin/payment/details.gohtml:88 +#: web/templates/admin/payment/details.gohtml:118 msgctxt "cart" msgid "Down payment" msgstr "Acompte" #: web/templates/mail/payment/details.gotxt:31 -#: web/templates/admin/payment/details.gohtml:96 +#: web/templates/admin/payment/details.gohtml:126 #: web/templates/admin/campsite/type/option/form.gohtml:18 #: web/templates/admin/campsite/type/option/index.gohtml:6 #: web/templates/admin/campsite/type/option/index.gohtml:17 @@ -232,21 +232,21 @@ msgstr "Options de type d’emplacement de camping" #: web/templates/mail/payment/details.gotxt:39 #: web/templates/public/booking/fields.gohtml:146 -#: web/templates/admin/payment/details.gohtml:110 +#: web/templates/admin/payment/details.gohtml:140 msgctxt "title" msgid "Customer Details" msgstr "Détails du client" #: web/templates/mail/payment/details.gotxt:41 #: web/templates/public/booking/fields.gohtml:149 -#: web/templates/admin/payment/details.gohtml:113 +#: web/templates/admin/payment/details.gohtml:143 msgctxt "input" msgid "Full name" msgstr "Nom et prénom" #: web/templates/mail/payment/details.gotxt:42 #: web/templates/public/booking/fields.gohtml:158 -#: web/templates/admin/payment/details.gohtml:117 +#: web/templates/admin/payment/details.gohtml:147 #: web/templates/admin/taxDetails.gohtml:69 msgctxt "input" msgid "Address" @@ -254,14 +254,14 @@ msgstr "Adresse" #: web/templates/mail/payment/details.gotxt:43 #: web/templates/public/booking/fields.gohtml:167 -#: web/templates/admin/payment/details.gohtml:121 +#: web/templates/admin/payment/details.gohtml:151 #: web/templates/admin/taxDetails.gohtml:93 msgctxt "input" msgid "Postcode" msgstr "Code postal" #: web/templates/mail/payment/details.gotxt:44 -#: web/templates/admin/payment/details.gohtml:125 +#: web/templates/admin/payment/details.gohtml:155 #: web/templates/admin/taxDetails.gohtml:77 msgctxt "input" msgid "City" @@ -269,7 +269,7 @@ msgstr "Ville" #: web/templates/mail/payment/details.gotxt:45 #: web/templates/public/booking/fields.gohtml:185 -#: web/templates/admin/payment/details.gohtml:129 +#: web/templates/admin/payment/details.gohtml:159 #: web/templates/admin/taxDetails.gohtml:101 msgctxt "input" msgid "Country" @@ -277,7 +277,7 @@ msgstr "Pays" #: web/templates/mail/payment/details.gotxt:46 #: web/templates/public/booking/fields.gohtml:196 -#: web/templates/admin/payment/details.gohtml:133 +#: web/templates/admin/payment/details.gohtml:163 #: web/templates/admin/login.gohtml:27 web/templates/admin/profile.gohtml:38 #: web/templates/admin/taxDetails.gohtml:53 msgctxt "input" @@ -286,14 +286,14 @@ msgstr "E-mail" #: web/templates/mail/payment/details.gotxt:47 #: web/templates/public/booking/fields.gohtml:205 -#: web/templates/admin/payment/details.gohtml:137 +#: web/templates/admin/payment/details.gohtml:167 #: web/templates/admin/taxDetails.gohtml:45 msgctxt "input" msgid "Phone" msgstr "Téléphone" #: web/templates/mail/payment/details.gotxt:48 -#: web/templates/admin/payment/details.gohtml:141 +#: web/templates/admin/payment/details.gohtml:171 #: web/templates/admin/profile.gohtml:68 msgctxt "input" msgid "Language" @@ -1015,6 +1015,24 @@ msgctxt "title" msgid "Payment %s" msgstr "Paiement %s" +#: web/templates/admin/payment/details.gohtml:20 +msgid "Are you sure you wish to accept this pre-authorization?" +msgstr "Êtes-vous sûr de vouloir accepter cette pré-autorisation ?" + +#: web/templates/admin/payment/details.gohtml:29 +msgctxt "action" +msgid "Accept pre-authorization" +msgstr "Accepter pré-autorisation" + +#: web/templates/admin/payment/details.gohtml:34 +msgid "Are you sure you wish to void this pre-authorization?" +msgstr "Êtes-vous sûr de vouloir annuler cette pré-autorisation ?" + +#: web/templates/admin/payment/details.gohtml:43 +msgctxt "action" +msgid "Void pre-authorization" +msgstr "Annuler pré-autorisation" + #: web/templates/admin/legal/form.gohtml:8 #: web/templates/admin/legal/form.gohtml:29 msgctxt "title" @@ -2265,12 +2283,12 @@ msgstr "L’intégration sélectionnée n’est pas valide." msgid "The merchant key is not valid." msgstr "La clé marchand n’est pas valide." -#: pkg/payment/public.go:111 +#: pkg/payment/public.go:110 msgctxt "order product name" msgid "Campsite Booking" msgstr "Réservation camping" -#: pkg/payment/public.go:369 +#: pkg/payment/public.go:374 msgctxt "subject" msgid "Booking payment successfully received" msgstr "Paiement de réservation reçu avec succès" diff --git a/web/static/camper.css b/web/static/camper.css index 2956baf..0f3359c 100644 --- a/web/static/camper.css +++ b/web/static/camper.css @@ -756,3 +756,16 @@ label[x-show] > span, label[x-show] > br { } /**/ +/**/ + +#payment-heading { + float: left; +} + +#payment-actions { + display: flexpré-autorisation; + gap: 2ch; + justify-content: end; +} + +/**/ diff --git a/web/templates/admin/payment/details.gohtml b/web/templates/admin/payment/details.gohtml index 1f7af12..60428d0 100644 --- a/web/templates/admin/payment/details.gohtml +++ b/web/templates/admin/payment/details.gohtml @@ -13,7 +13,37 @@ {{ define "content" -}} {{- /*gotype: dev.tandem.ws/tandem/camper/pkg/payment.paymentDetails*/ -}} -

{{ template "title" . }}

+

{{ template "title" . }}

+ +
+ {{ with .AcceptPreauthRequest -}} + {{ $confirm := (gettext "Are you sure you wish to accept this pre-authorization?")}} +
+ + + + +
+ {{- end }} + + {{ with .VoidPreauthRequest -}} + {{ $confirm := (gettext "Are you sure you wish to void this pre-authorization?")}} +
+ + + + +
+ {{- end }} +
{{( pgettext "Payment" "title" )}}