aboutsummaryrefslogtreecommitdiff
path: root/invoice
diff options
context:
space:
mode:
Diffstat (limited to 'invoice')
-rw-r--r--invoice/controller.go13
-rw-r--r--invoice/service.go10
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)