From 6c3a3ff232be0887d579606ecfcc5a4db3559da3 Mon Sep 17 00:00:00 2001 From: jordi fita mas Date: Thu, 8 Jun 2023 13:05:41 +0200 Subject: [PATCH] Allow empty contact and payment method for quotes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I have to use a value to be used as “none” for payment method and contact. In PL/pgSQL add_quote and edit_quote functions, that value is NULL, while in forms it is the empty string. I can not simply pass the empty string for either of these fields because PL/pgSQL expects (nullable) integers, and "" is not a valid integer and is not NULL either. A conversion is necessary. Apparently, Go’s nil is not a valid representation for SQL’s NULL with pgx, and had to use sql.NullString instead. I also needed to coalesce contact’s VATIN and phone, because null values can not be scanned to *string. I did not do that before because `coalesce(vatin, '')` throws an error that '' is not a valid VATIN and just left as is, wrongly expecting that pgx would do the job of leaving the string blank for me. It does not. Lastly, i can not blindly write Quotee’s tax details in the quote’s view page, or we would see the (), characters for the empty address info. --- pkg/form.go | 8 +++ pkg/quote.go | 13 +++-- po/ca.po | 98 ++++++++++++++++++--------------- po/es.po | 98 ++++++++++++++++++--------------- web/template/quotes/view.gohtml | 2 + 5 files changed, 124 insertions(+), 95 deletions(-) diff --git a/pkg/form.go b/pkg/form.go index ee19eb6..6b6b895 100644 --- a/pkg/form.go +++ b/pkg/form.go @@ -2,6 +2,7 @@ package pkg import ( "context" + "database/sql" "database/sql/driver" "errors" "fmt" @@ -137,6 +138,13 @@ func (field *SelectField) String() string { return field.Selected[0] } +func (field *SelectField) OrNull() interface{} { + if field.String() == "" { + return sql.NullString{} + } + return field +} + func (field *SelectField) FillValue(r *http.Request) { field.Selected = r.Form[field.Name] } diff --git a/pkg/quote.go b/pkg/quote.go index c139349..bb9c758 100644 --- a/pkg/quote.go +++ b/pkg/quote.go @@ -89,7 +89,7 @@ func mustCollectQuoteEntries(ctx context.Context, conn *Conn, company *Company, select quote.slug , quote_date , quote_number - , contact.business_name + , coalesce(contact.business_name, '') , quote.tags , quote.quote_status , isi18n.name @@ -310,6 +310,7 @@ type quote struct { Slug string Date time.Time Quoter taxDetails + HasQuotee bool Quotee taxDetails TermsAndConditions string Notes string @@ -348,9 +349,10 @@ func mustGetQuote(ctx context.Context, conn *Conn, company *Company, slug string , terms_and_conditions , notes , coalesce(instructions, '') + , contact_id is not null , coalesce(business_name, '') - , vatin - , phone + , coalesce(vatin::text, '') + , coalesce(phone::text, '') , coalesce(email, '') , coalesce(address, '') , coalesce(city, '') @@ -373,6 +375,7 @@ func mustGetQuote(ctx context.Context, conn *Conn, company *Company, slug string &quo.TermsAndConditions, &quo.Notes, &quo.PaymentInstructions, + &quo.HasQuotee, &quo.Quotee.Name, &quo.Quotee.VATIN, &quo.Quotee.Phone, @@ -488,7 +491,7 @@ func HandleAddQuote(w http.ResponseWriter, r *http.Request, _ httprouter.Params) mustRenderNewQuoteForm(w, r, form) return } - slug := conn.MustGetText(r.Context(), "", "select add_quote($1, $2, $3, $4, $5, $6, $7, $8)", company.Id, form.Date, form.Customer, form.TermsAndConditions, form.Notes, form.PaymentMethod, form.Tags, NewQuoteProductArray(form.Products)) + slug := conn.MustGetText(r.Context(), "", "select add_quote($1, $2, $3, $4, $5, $6, $7, $8)", company.Id, form.Date, form.Customer.OrNull(), form.TermsAndConditions, form.Notes, form.PaymentMethod.OrNull(), form.Tags, NewQuoteProductArray(form.Products)) htmxRedirect(w, r, companyURI(company, "/quotes/"+slug)) } @@ -962,7 +965,7 @@ func HandleUpdateQuote(w http.ResponseWriter, r *http.Request, params httprouter mustRenderEditQuoteForm(w, r, slug, form) return } - slug = conn.MustGetText(r.Context(), "", "select edit_quote($1, $2, $3, $4, $5, $6, $7, $8)", slug, form.QuoteStatus, form.Customer, form.TermsAndConditions, form.Notes, form.PaymentMethod, form.Tags, EditedQuoteProductArray(form.Products)) + slug = conn.MustGetText(r.Context(), "", "select edit_quote($1, $2, $3, $4, $5, $6, $7, $8)", slug, form.QuoteStatus, form.Customer.OrNull(), form.TermsAndConditions, form.Notes, form.PaymentMethod.OrNull(), form.Tags, EditedQuoteProductArray(form.Products)) if slug == "" { http.NotFound(w, r) return diff --git a/po/ca.po b/po/ca.po index c2169b9..71f1389 100644 --- a/po/ca.po +++ b/po/ca.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: numerus\n" "Report-Msgid-Bugs-To: jordi@tandem.blog\n" -"POT-Creation-Date: 2023-06-07 16:05+0200\n" +"POT-Creation-Date: 2023-06-08 12:44+0200\n" "PO-Revision-Date: 2023-01-18 17:08+0100\n" "Last-Translator: jordi fita mas \n" "Language-Team: Catalan \n" @@ -65,7 +65,7 @@ msgstr "Nom" #: web/template/invoices/products.gohtml:50 #: web/template/invoices/view.gohtml:62 web/template/quotes/products.gohtml:50 -#: web/template/quotes/view.gohtml:62 web/template/products/index.gohtml:42 +#: web/template/quotes/view.gohtml:68 web/template/products/index.gohtml:42 msgctxt "title" msgid "Price" msgstr "Preu" @@ -95,15 +95,15 @@ msgstr "Desfes" #: web/template/invoices/new.gohtml:60 web/template/invoices/view.gohtml:67 #: web/template/invoices/edit.gohtml:61 web/template/quotes/new.gohtml:61 -#: web/template/quotes/view.gohtml:67 web/template/quotes/edit.gohtml:62 +#: web/template/quotes/view.gohtml:73 web/template/quotes/edit.gohtml:62 msgctxt "title" msgid "Subtotal" msgstr "Subtotal" #: web/template/invoices/new.gohtml:70 web/template/invoices/view.gohtml:71 #: web/template/invoices/view.gohtml:111 web/template/invoices/edit.gohtml:71 -#: web/template/quotes/new.gohtml:71 web/template/quotes/view.gohtml:71 -#: web/template/quotes/view.gohtml:111 web/template/quotes/edit.gohtml:72 +#: web/template/quotes/new.gohtml:71 web/template/quotes/view.gohtml:77 +#: web/template/quotes/view.gohtml:117 web/template/quotes/edit.gohtml:72 msgctxt "title" msgid "Total" msgstr "Total" @@ -226,22 +226,22 @@ msgctxt "action" msgid "Download invoice" msgstr "Descarrega factura" -#: web/template/invoices/view.gohtml:61 web/template/quotes/view.gohtml:61 +#: web/template/invoices/view.gohtml:61 web/template/quotes/view.gohtml:67 msgctxt "title" msgid "Concept" msgstr "Concepte" -#: web/template/invoices/view.gohtml:64 web/template/quotes/view.gohtml:64 +#: web/template/invoices/view.gohtml:64 web/template/quotes/view.gohtml:70 msgctxt "title" msgid "Discount" msgstr "Descompte" -#: web/template/invoices/view.gohtml:66 web/template/quotes/view.gohtml:66 +#: web/template/invoices/view.gohtml:66 web/template/quotes/view.gohtml:72 msgctxt "title" msgid "Units" msgstr "Unitats" -#: web/template/invoices/view.gohtml:101 web/template/quotes/view.gohtml:101 +#: web/template/invoices/view.gohtml:101 web/template/quotes/view.gohtml:107 msgctxt "title" msgid "Tax Base" msgstr "Base imposable" @@ -353,6 +353,10 @@ msgctxt "action" msgid "Download quotation" msgstr "Descarrega pressupost" +#: web/template/quotes/view.gohtml:60 +msgid "Terms and Conditions:" +msgstr "Condicions d’acceptació:" + #: web/template/quotes/edit.gohtml:2 web/template/quotes/edit.gohtml:19 msgctxt "title" msgid "Edit Quotation “%s”" @@ -641,13 +645,13 @@ msgstr "No podeu deixar la contrasenya en blanc." msgid "Invalid user or password." msgstr "Nom d’usuari o contrasenya incorrectes." -#: pkg/products.go:164 pkg/products.go:263 pkg/quote.go:793 pkg/invoices.go:824 +#: pkg/products.go:164 pkg/products.go:263 pkg/quote.go:801 pkg/invoices.go:824 #: pkg/contacts.go:135 msgctxt "input" msgid "Name" msgstr "Nom" -#: pkg/products.go:169 pkg/products.go:290 pkg/quote.go:188 pkg/quote.go:606 +#: pkg/products.go:169 pkg/products.go:290 pkg/quote.go:188 pkg/quote.go:608 #: pkg/expenses.go:202 pkg/expenses.go:361 pkg/invoices.go:189 #: pkg/invoices.go:601 pkg/invoices.go:1123 pkg/contacts.go:140 #: pkg/contacts.go:325 @@ -683,39 +687,39 @@ msgstr "Qualsevol" msgid "Invoices must have at least one of the specified labels." msgstr "Les factures han de tenir com a mínim una de les etiquetes." -#: pkg/products.go:269 pkg/quote.go:807 pkg/invoices.go:838 +#: pkg/products.go:269 pkg/quote.go:815 pkg/invoices.go:838 msgctxt "input" msgid "Description" msgstr "Descripció" -#: pkg/products.go:274 pkg/quote.go:811 pkg/invoices.go:842 +#: pkg/products.go:274 pkg/quote.go:819 pkg/invoices.go:842 msgctxt "input" msgid "Price" msgstr "Preu" -#: pkg/products.go:284 pkg/quote.go:840 pkg/expenses.go:181 pkg/invoices.go:871 +#: pkg/products.go:284 pkg/quote.go:848 pkg/expenses.go:181 pkg/invoices.go:871 msgctxt "input" msgid "Taxes" msgstr "Imposts" -#: pkg/products.go:309 pkg/quote.go:889 pkg/profile.go:92 pkg/invoices.go:920 +#: pkg/products.go:309 pkg/quote.go:897 pkg/profile.go:92 pkg/invoices.go:920 msgid "Name can not be empty." msgstr "No podeu deixar el nom en blanc." -#: pkg/products.go:310 pkg/quote.go:890 pkg/invoices.go:921 +#: pkg/products.go:310 pkg/quote.go:898 pkg/invoices.go:921 msgid "Price can not be empty." msgstr "No podeu deixar el preu en blanc." -#: pkg/products.go:311 pkg/quote.go:891 pkg/invoices.go:922 +#: pkg/products.go:311 pkg/quote.go:899 pkg/invoices.go:922 msgid "Price must be a number greater than zero." msgstr "El preu ha de ser un número major a zero." -#: pkg/products.go:313 pkg/quote.go:899 pkg/expenses.go:227 pkg/expenses.go:232 +#: pkg/products.go:313 pkg/quote.go:907 pkg/expenses.go:227 pkg/expenses.go:232 #: pkg/invoices.go:930 msgid "Selected tax is not valid." msgstr "Heu seleccionat un impost que no és vàlid." -#: pkg/products.go:314 pkg/quote.go:900 pkg/expenses.go:228 pkg/expenses.go:233 +#: pkg/products.go:314 pkg/quote.go:908 pkg/expenses.go:228 pkg/expenses.go:233 #: pkg/invoices.go:931 msgid "You can only select a tax of each class." msgstr "Només podeu seleccionar un impost de cada classe." @@ -805,7 +809,7 @@ msgstr "No podeu deixar el nom del mètode de pagament en blanc." msgid "Payment instructions can not be empty." msgstr "No podeu deixar les instruccions de pagament en blanc." -#: pkg/quote.go:161 pkg/quote.go:585 pkg/expenses.go:340 pkg/invoices.go:162 +#: pkg/quote.go:161 pkg/quote.go:586 pkg/expenses.go:340 pkg/invoices.go:162 #: pkg/invoices.go:584 msgctxt "input" msgid "Customer" @@ -815,7 +819,7 @@ msgstr "Client" msgid "All customers" msgstr "Tots els clients" -#: pkg/quote.go:167 pkg/quote.go:579 +#: pkg/quote.go:167 pkg/quote.go:580 msgctxt "input" msgid "Quotation Status" msgstr "Estat del pressupost" @@ -847,95 +851,99 @@ msgstr "Els pressuposts han de tenir totes les etiquetes." msgid "Quotations must have at least one of the specified labels." msgstr "Els pressuposts han de tenir com a mínim una de les etiquetes." -#: pkg/quote.go:451 -msgid "Select a customer to quote." -msgstr "Escolliu un client a pressupostar." - -#: pkg/quote.go:527 +#: pkg/quote.go:528 msgid "quotations.zip" msgstr "pressuposts.zip" -#: pkg/quote.go:533 pkg/quote.go:1055 pkg/quote.go:1063 pkg/invoices.go:533 +#: pkg/quote.go:534 pkg/quote.go:1063 pkg/quote.go:1071 pkg/invoices.go:533 #: pkg/invoices.go:1098 pkg/invoices.go:1106 msgid "Invalid action" msgstr "Acció invàlida." -#: pkg/quote.go:590 +#: pkg/quote.go:587 +msgid "Select a customer to quote." +msgstr "Escolliu un client a pressupostar." + +#: pkg/quote.go:592 msgctxt "input" msgid "Quotation Date" msgstr "Data del pressupost" -#: pkg/quote.go:596 +#: pkg/quote.go:598 msgctxt "input" msgid "Terms and conditions" msgstr "Condicions d’acceptació" -#: pkg/quote.go:601 pkg/invoices.go:596 +#: pkg/quote.go:603 pkg/invoices.go:596 msgctxt "input" msgid "Notes" msgstr "Notes" -#: pkg/quote.go:610 pkg/invoices.go:606 +#: pkg/quote.go:612 pkg/invoices.go:606 msgctxt "input" msgid "Payment Method" msgstr "Mètode de pagament" -#: pkg/quote.go:646 +#: pkg/quote.go:613 +msgid "Select a payment method." +msgstr "Escolliu un mètode de pagament." + +#: pkg/quote.go:649 msgid "Selected quotation status is not valid." msgstr "Heu seleccionat un estat de pressupost que no és vàlid." -#: pkg/quote.go:647 pkg/invoices.go:643 +#: pkg/quote.go:651 pkg/invoices.go:643 msgid "Selected customer is not valid." msgstr "Heu seleccionat un client que no és vàlid." -#: pkg/quote.go:648 +#: pkg/quote.go:653 msgid "Quotation date can not be empty." msgstr "No podeu deixar la data del pressupost en blanc." -#: pkg/quote.go:649 +#: pkg/quote.go:654 msgid "Quotation date must be a valid date." msgstr "La data del pressupost ha de ser vàlida." -#: pkg/quote.go:651 pkg/invoices.go:647 +#: pkg/quote.go:657 pkg/invoices.go:647 msgid "Selected payment method is not valid." msgstr "Heu seleccionat un mètode de pagament que no és vàlid." -#: pkg/quote.go:783 pkg/quote.go:788 pkg/invoices.go:814 pkg/invoices.go:819 +#: pkg/quote.go:791 pkg/quote.go:796 pkg/invoices.go:814 pkg/invoices.go:819 msgctxt "input" msgid "Id" msgstr "Identificador" -#: pkg/quote.go:821 pkg/invoices.go:852 +#: pkg/quote.go:829 pkg/invoices.go:852 msgctxt "input" msgid "Quantity" msgstr "Quantitat" -#: pkg/quote.go:830 pkg/invoices.go:861 +#: pkg/quote.go:838 pkg/invoices.go:861 msgctxt "input" msgid "Discount (%)" msgstr "Descompte (%)" -#: pkg/quote.go:884 +#: pkg/quote.go:892 msgid "Quotation product ID must be a number greater than zero." msgstr "L’ID del producte de pressupost ha de ser un número major a zero." -#: pkg/quote.go:887 pkg/invoices.go:918 +#: pkg/quote.go:895 pkg/invoices.go:918 msgid "Product ID must be a positive number or zero." msgstr "L’ID del producte ha de ser un número positiu o zero." -#: pkg/quote.go:893 pkg/invoices.go:924 +#: pkg/quote.go:901 pkg/invoices.go:924 msgid "Quantity can not be empty." msgstr "No podeu deixar la quantitat en blanc." -#: pkg/quote.go:894 pkg/invoices.go:925 +#: pkg/quote.go:902 pkg/invoices.go:925 msgid "Quantity must be a number greater than zero." msgstr "La quantitat ha de ser un número major a zero." -#: pkg/quote.go:896 pkg/invoices.go:927 +#: pkg/quote.go:904 pkg/invoices.go:927 msgid "Discount can not be empty." msgstr "No podeu deixar el descompte en blanc." -#: pkg/quote.go:897 pkg/invoices.go:928 +#: pkg/quote.go:905 pkg/invoices.go:928 msgid "Discount must be a percentage between 0 and 100." msgstr "El descompte ha de ser un percentatge entre 0 i 100." diff --git a/po/es.po b/po/es.po index 4f3fd4b..51d5a5f 100644 --- a/po/es.po +++ b/po/es.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: numerus\n" "Report-Msgid-Bugs-To: jordi@tandem.blog\n" -"POT-Creation-Date: 2023-06-07 16:05+0200\n" +"POT-Creation-Date: 2023-06-08 12:44+0200\n" "PO-Revision-Date: 2023-01-18 17:45+0100\n" "Last-Translator: jordi fita mas \n" "Language-Team: Spanish \n" @@ -65,7 +65,7 @@ msgstr "Nombre" #: web/template/invoices/products.gohtml:50 #: web/template/invoices/view.gohtml:62 web/template/quotes/products.gohtml:50 -#: web/template/quotes/view.gohtml:62 web/template/products/index.gohtml:42 +#: web/template/quotes/view.gohtml:68 web/template/products/index.gohtml:42 msgctxt "title" msgid "Price" msgstr "Precio" @@ -95,15 +95,15 @@ msgstr "Deshacer" #: web/template/invoices/new.gohtml:60 web/template/invoices/view.gohtml:67 #: web/template/invoices/edit.gohtml:61 web/template/quotes/new.gohtml:61 -#: web/template/quotes/view.gohtml:67 web/template/quotes/edit.gohtml:62 +#: web/template/quotes/view.gohtml:73 web/template/quotes/edit.gohtml:62 msgctxt "title" msgid "Subtotal" msgstr "Subtotal" #: web/template/invoices/new.gohtml:70 web/template/invoices/view.gohtml:71 #: web/template/invoices/view.gohtml:111 web/template/invoices/edit.gohtml:71 -#: web/template/quotes/new.gohtml:71 web/template/quotes/view.gohtml:71 -#: web/template/quotes/view.gohtml:111 web/template/quotes/edit.gohtml:72 +#: web/template/quotes/new.gohtml:71 web/template/quotes/view.gohtml:77 +#: web/template/quotes/view.gohtml:117 web/template/quotes/edit.gohtml:72 msgctxt "title" msgid "Total" msgstr "Total" @@ -226,22 +226,22 @@ msgctxt "action" msgid "Download invoice" msgstr "Descargar factura" -#: web/template/invoices/view.gohtml:61 web/template/quotes/view.gohtml:61 +#: web/template/invoices/view.gohtml:61 web/template/quotes/view.gohtml:67 msgctxt "title" msgid "Concept" msgstr "Concepto" -#: web/template/invoices/view.gohtml:64 web/template/quotes/view.gohtml:64 +#: web/template/invoices/view.gohtml:64 web/template/quotes/view.gohtml:70 msgctxt "title" msgid "Discount" msgstr "Descuento" -#: web/template/invoices/view.gohtml:66 web/template/quotes/view.gohtml:66 +#: web/template/invoices/view.gohtml:66 web/template/quotes/view.gohtml:72 msgctxt "title" msgid "Units" msgstr "Unidades" -#: web/template/invoices/view.gohtml:101 web/template/quotes/view.gohtml:101 +#: web/template/invoices/view.gohtml:101 web/template/quotes/view.gohtml:107 msgctxt "title" msgid "Tax Base" msgstr "Base imponible" @@ -353,6 +353,10 @@ msgctxt "action" msgid "Download quotation" msgstr "Descargar presupuesto" +#: web/template/quotes/view.gohtml:60 +msgid "Terms and Conditions:" +msgstr "Condiciones de aceptación:" + #: web/template/quotes/edit.gohtml:2 web/template/quotes/edit.gohtml:19 msgctxt "title" msgid "Edit Quotation “%s”" @@ -641,13 +645,13 @@ msgstr "No podéis dejar la contraseña en blanco." msgid "Invalid user or password." msgstr "Nombre de usuario o contraseña inválido." -#: pkg/products.go:164 pkg/products.go:263 pkg/quote.go:793 pkg/invoices.go:824 +#: pkg/products.go:164 pkg/products.go:263 pkg/quote.go:801 pkg/invoices.go:824 #: pkg/contacts.go:135 msgctxt "input" msgid "Name" msgstr "Nombre" -#: pkg/products.go:169 pkg/products.go:290 pkg/quote.go:188 pkg/quote.go:606 +#: pkg/products.go:169 pkg/products.go:290 pkg/quote.go:188 pkg/quote.go:608 #: pkg/expenses.go:202 pkg/expenses.go:361 pkg/invoices.go:189 #: pkg/invoices.go:601 pkg/invoices.go:1123 pkg/contacts.go:140 #: pkg/contacts.go:325 @@ -683,39 +687,39 @@ msgstr "Cualquiera" msgid "Invoices must have at least one of the specified labels." msgstr "Las facturas deben tener como mínimo una de las etiquetas." -#: pkg/products.go:269 pkg/quote.go:807 pkg/invoices.go:838 +#: pkg/products.go:269 pkg/quote.go:815 pkg/invoices.go:838 msgctxt "input" msgid "Description" msgstr "Descripción" -#: pkg/products.go:274 pkg/quote.go:811 pkg/invoices.go:842 +#: pkg/products.go:274 pkg/quote.go:819 pkg/invoices.go:842 msgctxt "input" msgid "Price" msgstr "Precio" -#: pkg/products.go:284 pkg/quote.go:840 pkg/expenses.go:181 pkg/invoices.go:871 +#: pkg/products.go:284 pkg/quote.go:848 pkg/expenses.go:181 pkg/invoices.go:871 msgctxt "input" msgid "Taxes" msgstr "Impuestos" -#: pkg/products.go:309 pkg/quote.go:889 pkg/profile.go:92 pkg/invoices.go:920 +#: pkg/products.go:309 pkg/quote.go:897 pkg/profile.go:92 pkg/invoices.go:920 msgid "Name can not be empty." msgstr "No podéis dejar el nombre en blanco." -#: pkg/products.go:310 pkg/quote.go:890 pkg/invoices.go:921 +#: pkg/products.go:310 pkg/quote.go:898 pkg/invoices.go:921 msgid "Price can not be empty." msgstr "No podéis dejar el precio en blanco." -#: pkg/products.go:311 pkg/quote.go:891 pkg/invoices.go:922 +#: pkg/products.go:311 pkg/quote.go:899 pkg/invoices.go:922 msgid "Price must be a number greater than zero." msgstr "El precio tiene que ser un número mayor a cero." -#: pkg/products.go:313 pkg/quote.go:899 pkg/expenses.go:227 pkg/expenses.go:232 +#: pkg/products.go:313 pkg/quote.go:907 pkg/expenses.go:227 pkg/expenses.go:232 #: pkg/invoices.go:930 msgid "Selected tax is not valid." msgstr "Habéis escogido un impuesto que no es válido." -#: pkg/products.go:314 pkg/quote.go:900 pkg/expenses.go:228 pkg/expenses.go:233 +#: pkg/products.go:314 pkg/quote.go:908 pkg/expenses.go:228 pkg/expenses.go:233 #: pkg/invoices.go:931 msgid "You can only select a tax of each class." msgstr "Solo podéis escoger un impuesto de cada clase." @@ -805,7 +809,7 @@ msgstr "No podéis dejar el nombre del método de pago en blanco." msgid "Payment instructions can not be empty." msgstr "No podéis dejar las instrucciones de pago en blanco." -#: pkg/quote.go:161 pkg/quote.go:585 pkg/expenses.go:340 pkg/invoices.go:162 +#: pkg/quote.go:161 pkg/quote.go:586 pkg/expenses.go:340 pkg/invoices.go:162 #: pkg/invoices.go:584 msgctxt "input" msgid "Customer" @@ -815,7 +819,7 @@ msgstr "Cliente" msgid "All customers" msgstr "Todos los clientes" -#: pkg/quote.go:167 pkg/quote.go:579 +#: pkg/quote.go:167 pkg/quote.go:580 msgctxt "input" msgid "Quotation Status" msgstr "Estado del presupuesto" @@ -847,95 +851,99 @@ msgstr "Los presupuestos deben tener todas las etiquetas." msgid "Quotations must have at least one of the specified labels." msgstr "Los presupuestos deben tener como mínimo una de las etiquetas." -#: pkg/quote.go:451 -msgid "Select a customer to quote." -msgstr "Escoged un cliente a presupuestar." - -#: pkg/quote.go:527 +#: pkg/quote.go:528 msgid "quotations.zip" msgstr "presupuestos.zip" -#: pkg/quote.go:533 pkg/quote.go:1055 pkg/quote.go:1063 pkg/invoices.go:533 +#: pkg/quote.go:534 pkg/quote.go:1063 pkg/quote.go:1071 pkg/invoices.go:533 #: pkg/invoices.go:1098 pkg/invoices.go:1106 msgid "Invalid action" msgstr "Acción inválida." -#: pkg/quote.go:590 +#: pkg/quote.go:587 +msgid "Select a customer to quote." +msgstr "Escoged un cliente a presupuestar." + +#: pkg/quote.go:592 msgctxt "input" msgid "Quotation Date" msgstr "Fecha del presupuesto" -#: pkg/quote.go:596 +#: pkg/quote.go:598 msgctxt "input" msgid "Terms and conditions" msgstr "Condiciones de aceptación" -#: pkg/quote.go:601 pkg/invoices.go:596 +#: pkg/quote.go:603 pkg/invoices.go:596 msgctxt "input" msgid "Notes" msgstr "Notas" -#: pkg/quote.go:610 pkg/invoices.go:606 +#: pkg/quote.go:612 pkg/invoices.go:606 msgctxt "input" msgid "Payment Method" msgstr "Método de pago" -#: pkg/quote.go:646 +#: pkg/quote.go:613 +msgid "Select a payment method." +msgstr "Escoged un método e pago." + +#: pkg/quote.go:649 msgid "Selected quotation status is not valid." msgstr "Habéis escogido un estado de presupuesto que no es válido." -#: pkg/quote.go:647 pkg/invoices.go:643 +#: pkg/quote.go:651 pkg/invoices.go:643 msgid "Selected customer is not valid." msgstr "Habéis escogido un cliente que no es válido." -#: pkg/quote.go:648 +#: pkg/quote.go:653 msgid "Quotation date can not be empty." msgstr "No podéis dejar la fecha del presupuesto en blanco." -#: pkg/quote.go:649 +#: pkg/quote.go:654 msgid "Quotation date must be a valid date." msgstr "La fecha de presupuesto debe ser válida." -#: pkg/quote.go:651 pkg/invoices.go:647 +#: pkg/quote.go:657 pkg/invoices.go:647 msgid "Selected payment method is not valid." msgstr "Habéis escogido un método de pago que no es válido." -#: pkg/quote.go:783 pkg/quote.go:788 pkg/invoices.go:814 pkg/invoices.go:819 +#: pkg/quote.go:791 pkg/quote.go:796 pkg/invoices.go:814 pkg/invoices.go:819 msgctxt "input" msgid "Id" msgstr "Identificador" -#: pkg/quote.go:821 pkg/invoices.go:852 +#: pkg/quote.go:829 pkg/invoices.go:852 msgctxt "input" msgid "Quantity" msgstr "Cantidad" -#: pkg/quote.go:830 pkg/invoices.go:861 +#: pkg/quote.go:838 pkg/invoices.go:861 msgctxt "input" msgid "Discount (%)" msgstr "Descuento (%)" -#: pkg/quote.go:884 +#: pkg/quote.go:892 msgid "Quotation product ID must be a number greater than zero." msgstr "El ID de producto de presupuesto tiene que ser un número mayor a cero." -#: pkg/quote.go:887 pkg/invoices.go:918 +#: pkg/quote.go:895 pkg/invoices.go:918 msgid "Product ID must be a positive number or zero." msgstr "El ID de producto tiene que ser un número positivo o cero." -#: pkg/quote.go:893 pkg/invoices.go:924 +#: pkg/quote.go:901 pkg/invoices.go:924 msgid "Quantity can not be empty." msgstr "No podéis dejar la cantidad en blanco." -#: pkg/quote.go:894 pkg/invoices.go:925 +#: pkg/quote.go:902 pkg/invoices.go:925 msgid "Quantity must be a number greater than zero." msgstr "La cantidad tiene que ser un número mayor a cero." -#: pkg/quote.go:896 pkg/invoices.go:927 +#: pkg/quote.go:904 pkg/invoices.go:927 msgid "Discount can not be empty." msgstr "No podéis dejar el descuento en blanco." -#: pkg/quote.go:897 pkg/invoices.go:928 +#: pkg/quote.go:905 pkg/invoices.go:928 msgid "Discount must be a percentage between 0 and 100." msgstr "El descuento tiene que ser un porcentaje entre 0 y 100." diff --git a/web/template/quotes/view.gohtml b/web/template/quotes/view.gohtml index 9755037..d993fc8 100644 --- a/web/template/quotes/view.gohtml +++ b/web/template/quotes/view.gohtml @@ -47,12 +47,14 @@
+ {{ if .HasQuotee -}}
{{ .Quotee.Name }}
{{ .Quotee.VATIN }}
{{ .Quotee.Address }}
{{ .Quotee.City }} ({{ .Quotee.PostalCode}}), {{ .Quotee.Province }}
+ {{- end }} {{ if .TermsAndConditions -}}

{{(gettext "Terms and Conditions:")}} {{ .TermsAndConditions }}