diff options
Diffstat (limited to 'invoice')
| -rw-r--r-- | invoice/controller.go | 13 | ||||
| -rw-r--r-- | invoice/service.go | 10 | 
2 files changed, 23 insertions, 0 deletions
diff --git a/invoice/controller.go b/invoice/controller.go index 02bbaf5..7260834 100644 --- a/invoice/controller.go +++ b/invoice/controller.go @@ -101,6 +101,19 @@ func handleSaveInvoice (ctx *gin.Context) {  	userId := uId.(uint)  	invoice.UserID = userId +	// if invoice number is 0, generate one! +	if invoice.InvoiceNumber == 0 { +		n, err := getNewInvoiceNumber(invoice.UserID) + +		if err != nil { +			ctx.Error(err) +			ctx.Abort() +			return +		} + +		invoice.InvoiceNumber = n +	} +  	err := invoice.upsert()  	if err != nil {  		ctx.Error(err) diff --git a/invoice/service.go b/invoice/service.go index 099f6a0..3dcc5e2 100644 --- a/invoice/service.go +++ b/invoice/service.go @@ -21,6 +21,16 @@ import (  	e "vidhukant.com/openbills/errors"  ) +// returns greatest invoice number + 1 +func getNewInvoiceNumber(userId uint) (uint, error) { +	var i uint + +	row := db.Model(&Invoice{}).Where("user_id = ?", userId).Select("max(invoice_number)").Row() +	err := row.Scan(&i) + +	return i + 1, err +} +  func getInvoice(invoice *Invoice, id uint) error {  	res := db.Preload("BillingAddress").Preload("ShippingAddress").Preload("Items").Find(&invoice, id)  |