Accept “invalid” quantity, price, and discount on invoice update
This is for “free products”, where the user adds an invoice row, does not select a product from the search, and clicks the update button. Numerus should select “appropriate” values for those that are left unspecified. I also no longer require the product_id to be an integer; if it is empty, then it is assumed to be a “free product”.
This commit is contained in:
parent
7d895fe5f9
commit
e93a798223
|
@ -661,6 +661,7 @@ func (form *invoiceForm) Update() {
|
|||
form.Products = nil
|
||||
for n, product := range products {
|
||||
if product.Quantity.Val != "0" {
|
||||
product.Update()
|
||||
if n != len(form.Products) {
|
||||
product.Index = len(form.Products)
|
||||
product.Rename()
|
||||
|
@ -835,7 +836,9 @@ func (form *invoiceProductForm) Parse(r *http.Request) error {
|
|||
|
||||
func (form *invoiceProductForm) Validate() bool {
|
||||
validator := newFormValidator()
|
||||
validator.CheckRequiredInput(form.ProductId, gettext("Product ID can not be empty.", form.locale))
|
||||
if form.InvoiceProductId.Val != "" {
|
||||
validator.CheckValidInteger(form.ProductId, 1, math.MaxInt32, gettext("Product ID must be a number greater than zero.", form.locale))
|
||||
}
|
||||
validator.CheckRequiredInput(form.Name, gettext("Name can not be empty.", form.locale))
|
||||
if validator.CheckRequiredInput(form.Price, gettext("Price can not be empty.", form.locale)) {
|
||||
validator.CheckValidDecimal(form.Price, form.company.MinCents(), math.MaxFloat64, gettext("Price must be a number greater than zero.", form.locale))
|
||||
|
@ -851,6 +854,22 @@ func (form *invoiceProductForm) Validate() bool {
|
|||
return validator.AllOK()
|
||||
}
|
||||
|
||||
func (form *invoiceProductForm) Update() {
|
||||
validator := newFormValidator()
|
||||
if !validator.CheckValidDecimal(form.Price, form.company.MinCents(), math.MaxFloat64, "") {
|
||||
form.Price.Val = "0.0"
|
||||
form.Price.Errors = nil
|
||||
}
|
||||
if !validator.CheckValidInteger(form.Quantity, 0, math.MaxInt32, "") {
|
||||
form.Quantity.Val = "1"
|
||||
form.Quantity.Errors = nil
|
||||
}
|
||||
if !validator.CheckValidInteger(form.Discount, 0, 100, "") {
|
||||
form.Discount.Val = "0"
|
||||
form.Discount.Errors = nil
|
||||
}
|
||||
}
|
||||
|
||||
func (form *invoiceProductForm) MustFillFromDatabase(ctx context.Context, conn *Conn, slug string) bool {
|
||||
return !notFoundErrorOrPanic(conn.QueryRow(ctx, `
|
||||
select product_id
|
||||
|
|
|
@ -17,8 +17,12 @@ func (src NewInvoiceProductArray) EncodeBinary(ci *pgtype.ConnInfo, buf []byte)
|
|||
}
|
||||
var values [][]interface{}
|
||||
for _, form := range src {
|
||||
var productId interface{} = form.ProductId.Val
|
||||
if form.ProductId.Val == "" {
|
||||
productId = nil
|
||||
}
|
||||
values = append(values, []interface{}{
|
||||
form.ProductId.Val,
|
||||
productId,
|
||||
form.Name.Val,
|
||||
form.Description.Val,
|
||||
form.Price.Val,
|
||||
|
|
Loading…
Reference in New Issue