blob: 786f6a20f7b8540561680ad9be79bf768903400d (
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
/* openbills - Server for web based Libre Billing Software
* Copyright (C) 2023-2025 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"
"time"
d "vidhukant.com/openbills/db"
)
var db *gorm.DB
func init() {
db = d.DB
db.AutoMigrate(&Invoice{}, &InvoiceItem{}, &CustomField{})
}
type InvoiceItem struct {
ID uint
InvoiceID uint
Quantity string // float
// fields below these must be kept in sync with
// item.SavedItem. I'm not extending that struct because
// there are some things that I don't want / want in a
// different format. In short, it's *not* worth the headache
Name string
BrandName string
Category string
Description string
HSN string
UnitOfMeasure string
VariantName string
UnitPrice string // float
GSTPercentage string // float
}
// user can add as many custom fields as they like
type CustomField struct {
ID uint
InvoiceID uint
Key string
Value string
}
type Invoice struct {
gorm.Model
InvoiceDate time.Time
InvoiceNumber uint
IsDraft bool
Note string
Items []InvoiceItem
CustomFields []CustomField
BillingAddressText string
BillingAddressCity string
BillingAddressState string
BillingAddressPostalCode string
BillingAddressCountry string
ShippingAddressText string
ShippingAddressCity string
ShippingAddressState string
ShippingAddressPostalCode string
ShippingAddressCountry string
IssuerFirmName string
IssuerFirmGstin string
IssuerFirmPhone string
IssuerFirmEmail string
IssuerFirmWebsite string
IssuerFirmAddressText string
IssuerFirmAddressCity string
IssuerFirmAddressState string
IssuerFirmAddressPostalCode string
IssuerFirmAddressCountry string
CustomerName string
CustomerGstin string
CustomerContactName string
CustomerPhone string
CustomerEmail string
CustomerWebsite string
}
|