/* openbills - Server for web based Libre Billing Software * Copyright (C) 2023-2025 Vidhu Kant Sharma * * 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 . */ package invoice import ( "gorm.io/gorm" "time" d "vidhukant.com/openbills/db" u "vidhukant.com/openbills/util" ) 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 }