generator

package module
v1.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 6, 2024 License: Apache-2.0 Imports: 11 Imported by: 0

README

golangci-lint Go Report Card GoDoc

Go Invoice Generator v1.0.3

A super fast golang package to generate invoices, delivery notes and quotations as pdf using https://github.com/go-pdf/fpdf.

Download from Github

go get -u github.com/febriliankr/invoice-generator

Forked

From github.com/angelodlfrtr/go-invoice-generator

Text

TextItemsTotalHTTitle TextItemsTaxTitle TextItemsDiscountTitle

Documentation

Overview

Package generator allows you to easily generate invoices, delivery notes and quotations in GoLang.

Index

Constants

View Source
const (
	// Invoice define the "invoice" document type
	Invoice string = "INVOICE"

	// Quotation define the "quotation" document type
	Quotation string = "QUOTATION"

	// DeliveryNote define the "delievry note" document type
	DeliveryNote string = "DELIVERY_NOTE"

	// BaseMargin define base margin used in documents
	BaseMargin float64 = 10

	// BaseMarginTop define base margin top used in documents
	BaseMarginTop float64 = 20

	// HeaderMarginTop define base header margin top used in documents
	HeaderMarginTop float64 = 5

	// MaxPageHeight define the maximum height for a single page
	MaxPageHeight float64 = 260
)
View Source
const (
	// ItemColNameOffset ...
	ItemColNameOffset float64 = 10

	// ItemColUnitPriceOffset ...
	ItemColUnitPriceOffset float64 = 80

	// ItemColQuantityOffset ...
	ItemColQuantityOffset float64 = 103

	// ItemColTotalHTOffset ...
	ItemColTotalHTOffset float64 = 113

	// ItemColDiscountOffset ...
	ItemColDiscountOffset float64 = 140

	// ItemColTaxOffset ...
	ItemColTaxOffset float64 = 157

	// ItemColTotalTTCOffset ...
	ItemColTotalTTCOffset float64 = 175
)

Cols offsets

View Source
const (
	DiscountTypeAmount  string = "amount"
	DiscountTypePercent string = "percent"
)

Discount types

View Source
const (
	TaxTypeAmount  string = "amount"
	TaxTypePercent string = "percent"
)

Tax types

Variables

View Source
var (
	// BaseTextFontSize define the base font size for text in document
	BaseTextFontSize float64 = 8

	// SmallTextFontSize define the small font size for text in document
	SmallTextFontSize float64 = 7

	// ExtraSmallTextFontSize define the extra small font size for text in document
	ExtraSmallTextFontSize float64 = 6

	// LargeTextFontSize define the large font size for text in document
	LargeTextFontSize float64 = 10
)
View Source
var ErrInvalidDiscount = errors.New("invalid discount")

ErrInvalidDiscount when percent and amount are empty

View Source
var ErrInvalidDocumentType = errors.New("invalid document type")
View Source
var ErrInvalidTax = errors.New("invalid tax")

ErrInvalidTax when percent and amount are empty

Functions

This section is empty.

Types

type Address

type Address struct {
	Address    string `json:"address,omitempty" validate:"required"`
	Address2   string `json:"address_2,omitempty"`
	PostalCode string `json:"postal_code,omitempty"`
	City       string `json:"city,omitempty"`
	Country    string `json:"country,omitempty"`
}

Address represent an address

func (*Address) ToString

func (a *Address) ToString() string

ToString output address as string Line break are added for new lines

type Contact

type Contact struct {
	Name    string   `json:"name,omitempty" validate:"required,min=1,max=256"`
	Address *Address `json:"address,omitempty"`

	// AddtionnalInfo to append after contact informations. You can use basic html here (bold, italic tags).
	AddtionnalInfo []string `json:"additional_info,omitempty"`
}

Contact contact a company informations

type Discount

type Discount struct {
	Percent string `json:"percent,omitempty"` // Discount in percent ex 17
	Amount  string `json:"amount,omitempty"`  // Discount in amount ex 123.40
	// contains filtered or unexported fields
}

Discount define discount as percent or fixed amount

func (*Discount) Prepare

func (d *Discount) Prepare() error

Prepare convert strings to decimal

type Document

type Document struct {
	Options      *Options      `json:"options,omitempty"`
	Header       *HeaderFooter `json:"header,omitempty"`
	Footer       *HeaderFooter `json:"footer,omitempty"`
	Type         string        `json:"type,omitempty" validate:"required,oneof=INVOICE DELIVERY_NOTE QUOTATION"`
	Ref          string        `json:"ref,omitempty" validate:"required,min=1,max=32"`
	Version      string        `json:"version,omitempty" validate:"max=32"`
	ClientRef    string        `json:"client_ref,omitempty" validate:"max=64"`
	Description  string        `json:"description,omitempty" validate:"max=1024"`
	Notes        string        `json:"notes,omitempty"`
	Company      *Contact      `json:"company,omitempty" validate:"required"`
	Customer     *Contact      `json:"customer,omitempty" validate:"required"`
	Items        []*Item       `json:"items,omitempty"`
	Date         string        `json:"date,omitempty"`
	ValidityDate string        `json:"validity_date,omitempty"`
	PaymentTerm  string        `json:"payment_term,omitempty"`
	DefaultTax   *Tax          `json:"default_tax,omitempty"`
	Discount     *Discount     `json:"discount,omitempty"`
	// contains filtered or unexported fields
}

Document define base document

func New

func New(docType string, options *Options) (*Document, error)

New return a new documents with provided types and defaults

func (*Document) AppendItem

func (d *Document) AppendItem(item *Item) *Document

AppendItem to document items

func (*Document) Build

func (doc *Document) Build() (*fpdf.Fpdf, error)

Build pdf document from data provided

func (*Document) Pdf

func (doc *Document) Pdf() *fpdf.Fpdf

Pdf returns the underlying *fpdf.Fpdf used to build document

func (*Document) SetCompany

func (d *Document) SetCompany(company *Contact) *Document

SetCompany of document

func (*Document) SetCustomer

func (d *Document) SetCustomer(customer *Contact) *Document

SetCustomer of document

func (*Document) SetDate

func (d *Document) SetDate(date string) *Document

SetDate of document

func (*Document) SetDefaultTax

func (d *Document) SetDefaultTax(tax *Tax) *Document

SetDefaultTax of document

func (*Document) SetDescription

func (d *Document) SetDescription(desc string) *Document

SetDescription of document

func (*Document) SetDiscount

func (d *Document) SetDiscount(discount *Discount) *Document

SetDiscount of document

func (*Document) SetFooter

func (d *Document) SetFooter(footer *HeaderFooter) *Document

SetFooter set footer of document

func (*Document) SetHeader

func (d *Document) SetHeader(header *HeaderFooter) *Document

SetHeader set header of document

func (*Document) SetNotes

func (d *Document) SetNotes(notes string) *Document

SetNotes of document

func (*Document) SetPaymentTerm

func (d *Document) SetPaymentTerm(term string) *Document

SetPaymentTerm of document

func (*Document) SetRef

func (d *Document) SetRef(ref string) *Document

SetRef of document

func (*Document) SetType

func (d *Document) SetType(docType string) *Document

SetType set type of document

func (*Document) SetUnicodeTranslator

func (doc *Document) SetUnicodeTranslator(fn UnicodeTranslateFunc)

SetUnicodeTranslator to use See https://pkg.go.dev/github.com/go-pdf/fpdf#UnicodeTranslator

func (*Document) SetVersion

func (d *Document) SetVersion(version string) *Document

SetVersion of document

func (*Document) Tax

func (doc *Document) Tax() decimal.Decimal

Tax return the total tax with document discount

func (*Document) TotalWithTax

func (doc *Document) TotalWithTax() decimal.Decimal

TotalWithTax return total with tax and with document discount

func (*Document) TotalWithoutTax

func (doc *Document) TotalWithoutTax() decimal.Decimal

TotalWithoutTax return total without tax and with document discount

func (*Document) TotalWithoutTaxAndWithoutDocumentDiscount

func (doc *Document) TotalWithoutTaxAndWithoutDocumentDiscount() decimal.Decimal

TotalWithoutTaxAndWithoutDocumentDiscount return total without tax and without document discount

func (*Document) Validate

func (d *Document) Validate() error

Validate document fields

type HeaderFooter

type HeaderFooter struct {
	UseCustomFunc bool    `json:"-"`
	Text          string  `json:"text,omitempty"`
	FontSize      float64 `json:"font_size,omitempty" default:"7"`
	Pagination    bool    `json:"pagination,omitempty"`
}

HeaderFooter define header or footer informations on document

func (*HeaderFooter) ApplyFunc

func (hf *HeaderFooter) ApplyFunc(pdf *fpdf.Fpdf, fn fnc)

ApplyFunc allow user to apply custom func

type Item

type Item struct {
	Name        string    `json:"name,omitempty" validate:"required"`
	Description string    `json:"description,omitempty"`
	UnitCost    string    `json:"unit_cost,omitempty"`
	Quantity    string    `json:"quantity,omitempty"`
	Tax         *Tax      `json:"tax,omitempty"`
	Discount    *Discount `json:"discount,omitempty"`
	// contains filtered or unexported fields
}

Item represent a 'product' or a 'service'

func (*Item) Prepare

func (i *Item) Prepare() error

Prepare convert strings to decimal

func (*Item) TaxWithTotalDiscounted

func (i *Item) TaxWithTotalDiscounted() decimal.Decimal

TaxWithTotalDiscounted returns the tax with total discounted

func (*Item) TotalWithTaxAndDiscount

func (i *Item) TotalWithTaxAndDiscount() decimal.Decimal

TotalWithTaxAndDiscount returns the total with tax and discount

func (*Item) TotalWithoutTaxAndWithDiscount

func (i *Item) TotalWithoutTaxAndWithDiscount() decimal.Decimal

TotalWithoutTaxAndWithDiscount returns the total without tax and with discount

func (*Item) TotalWithoutTaxAndWithoutDiscount

func (i *Item) TotalWithoutTaxAndWithoutDiscount() decimal.Decimal

TotalWithoutTaxAndWithoutDiscount returns the total without tax and without discount

type Options

type Options struct {
	// Table Title Options
	ShowTotalHT  bool
	ShowTax      bool
	ShowDiscount bool

	AutoPrint bool `json:"auto_print,omitempty"`

	CurrencySymbol    string `default:"€ " json:"currency_symbol,omitempty"`
	CurrencyPrecision int    `default:"2" json:"currency_precision,omitempty"`
	CurrencyDecimal   string `default:"." json:"currency_decimal,omitempty"`
	CurrencyThousand  string `default:" " json:"currency_thousand,omitempty"`

	TextTypeInvoice      string `default:"INVOICE" json:"text_type_invoice,omitempty"`
	TextTypeQuotation    string `default:"QUOTATION" json:"text_type_quotation,omitempty"`
	TextTypeDeliveryNote string `default:"DELIVERY NOTE" json:"text_type_delivery_note,omitempty"`

	TextRefTitle         string `default:"Ref." json:"text_ref_title,omitempty"`
	TextVersionTitle     string `default:"Version" json:"text_version_title,omitempty"`
	TextDateTitle        string `default:"Date" json:"text_date_title,omitempty"`
	TextPaymentTermTitle string `default:"Payment term" json:"text_payment_term_title,omitempty"`

	TextItemsNameTitle     string `default:"Name" json:"text_items_name_title,omitempty"`
	TextItemsUnitCostTitle string `default:"Unit price" json:"text_items_unit_cost_title,omitempty"`
	TextItemsQuantityTitle string `default:"Qty" json:"text_items_quantity_title,omitempty"`
	TextItemsTotalHTTitle  string `default:"Total no tax" json:"text_items_total_ht_title,omitempty"`
	TextItemsTaxTitle      string `default:"Tax" json:"text_items_tax_title,omitempty"`
	TextItemsDiscountTitle string `default:"Discount" json:"text_items_discount_title,omitempty"`
	TextItemsTotalTTCTitle string `default:"Total" json:"text_items_total_ttc_title,omitempty"`

	TextTotalTotal      string `default:"TOTAL" json:"text_total_total,omitempty"`
	TextTotalDiscounted string `default:"TOTAL DISCOUNTED" json:"text_total_discounted,omitempty"`
	TextTotalTax        string `default:"TAX" json:"text_total_tax,omitempty"`
	TextTotalWithTax    string `default:"TOTAL WITH TAX" json:"text_total_with_tax,omitempty"`

	BaseTextColor []int `default:"[10,10,10]" json:"base_text_color,omitempty"`
	GreyTextColor []int `default:"[82,82,82]" json:"grey_text_color,omitempty"`
	GreyBgColor   []int `default:"[250,250,250]" json:"grey_bg_color,omitempty"`
	DarkBgColor   []int `default:"[250,250,250]" json:"dark_bg_color,omitempty"`

	Font     string `default:"Helvetica"`
	BoldFont string `default:"Helvetica"`

	UnicodeTranslateFunc UnicodeTranslateFunc
}

Options for Document

type Tax

type Tax struct {
	Percent string `json:"percent,omitempty"` // Tax in percent ex 17
	Amount  string `json:"amount,omitempty"`  // Tax in amount ex 123.40
	// contains filtered or unexported fields
}

Tax define tax as percent or fixed amount

func (*Tax) Prepare

func (t *Tax) Prepare() error

Prepare convert strings to decimal

type UnicodeTranslateFunc

type UnicodeTranslateFunc func(string) string

UnicodeTranslateFunc ...

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL