aboutsummaryrefslogtreecommitdiff
path: root/invoice/invoice.go
blob: 8d808a37ebfbb0011210e9be0e1f7fefdd1b1ea0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* openbills - Server for web based Libre Billing Software
 * Copyright (C) 2023-2024  Vidhu Kant Sharma <vidhukant@vidhukant.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */

package invoice

import (
	"gorm.io/gorm"
	d "vidhukant.com/openbills/db"
	"vidhukant.com/openbills/user"
	u "vidhukant.com/openbills/util"
	i "vidhukant.com/openbills/item"
	"time"
)

var db *gorm.DB
func init() {
	db = d.DB

	db.AutoMigrate(&Invoice{}, &InvoiceItem{}, &InvoiceBillingAddress{}, &InvoiceShippingAddress{})
}

type InvoiceBillingAddress struct {
	gorm.Model
	u.Address
	InvoiceID uint
}

type InvoiceShippingAddress struct {
	gorm.Model
	u.Address
	InvoiceID uint
}

type InvoiceItem struct {
	gorm.Model
	i.Item
	InvoiceID uint
	BrandName string
	Quantity  string // float
}

type Invoice struct {
	gorm.Model
	UserID          uint      `json:"-"`
	User            user.User `json:"-"`
	InvoiceDate     time.Time
	InvoiceNumber   uint
	BillingAddress  InvoiceBillingAddress
	ShippingAddress InvoiceShippingAddress
	IsDraft         bool
	Items           []InvoiceItem

  // issuer and customer details are stored here 
  // because they are NOT intended to ever change
  IssuerFirmName      string
  IssuerFirmAddress   string
  IssuerFirmGstin     string
  IssuerFirmPhone     string
  IssuerFirmEmail     string
  IssuerFirmWebsite   string
	IssuerFirmDetails   string
	CustomerName        string
	CustomerGstin       string
	CustomerContactName string
	CustomerPhone       string
	CustomerEmail       string
	CustomerWebsite     string

	// Transporter     Transporter
	// DueDate         string
	// TransactionID   string
}