quickbooks

package module
v0.0.0-...-8a89750 Latest Latest
Warning

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

Go to latest
Published: Feb 2, 2020 License: BSD-2-Clause Imports: 9 Imported by: 0

README

quickbooks-go

GoDoc

quickbooks-go is a Go library that provides access to Intuit's QuickBooks Online API.

NOTE: This library is very incomplete. I just implemented the minimum for my use case. Pull requests welcome :)

Example

// Do this after you go through the normal OAuth process.
var client = oauth2.NewClient(ctx, tokenSource)

// Initialize the client handle.
var qb = quickbooks.Client{
    Client: client,
    Endpoint: quickbooks.SandboxEndpoint,
    RealmID: "some company account ID"'
}

// Make a request!
var companyInfo, err = qb.FetchCompanyInfo()

License

BSD-2-Clause

Documentation

Overview

Package quickbooks provides access to Intuit's QuickBooks Online API.

NOTE: This library is very incomplete. I just implemented the minimum for my use case. Pull requests welcome :)

 // Do this after you go through the normal OAuth process.
 var client = oauth2.NewClient(ctx, tokenSource)

 // Initialize the client handle.
 var qb = quickbooks.Client{
	 Client: client,
	 Endpoint: quickbooks.SandboxEndpoint,
	 RealmID: "some company account ID"'
 }

 // Make a request!
 var companyInfo, err = qb.FetchCompanyInfo()

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	// Get this from oauth2.NewClient().
	Client *http.Client
	// Set to ProductionEndpoint or SandboxEndpoint.
	Endpoint EndpointURL
	// The account ID you're connecting to.
	RealmID string
}

Client is your handle to the QuickBooks API.

func (*Client) CreateCustomer

func (c *Client) CreateCustomer(customer *Customer) (*Customer, error)

CreateCustomer creates the given Customer on the QuickBooks server, returning the resulting Customer object.

func (*Client) CreateInvoice

func (c *Client) CreateInvoice(inv *Invoice) (*Invoice, error)

CreateInvoice creates the given Invoice on the QuickBooks server, returning the resulting Invoice object.

func (*Client) DeleteInvoice

func (c *Client) DeleteInvoice(id, syncToken string) error

DeleteInvoice deletes the given Invoice by ID and sync token from the QuickBooks server.

func (*Client) FetchCompanyInfo

func (c *Client) FetchCompanyInfo() (*CompanyInfo, error)

FetchCompanyInfo returns the QuickBooks CompanyInfo object. This is a good test to check whether you're connected.

func (*Client) FetchCustomerByID

func (c *Client) FetchCustomerByID(id string) (*Customer, error)

FetchCustomerByID returns a customer with a given ID.

func (*Client) FetchCustomers

func (c *Client) FetchCustomers() ([]Customer, error)

FetchCustomers gets the full list of Customers in the QuickBooks account.

func (*Client) FetchInvoices

func (c *Client) FetchInvoices() ([]Invoice, error)

FetchInvoices gets the full list of Invoices in the QuickBooks account.

func (*Client) FetchItem

func (c *Client) FetchItem(id string) (*Item, error)

FetchItem returns just one particular Item from QuickBooks, by ID.

func (*Client) FetchItems

func (c *Client) FetchItems() ([]Item, error)

FetchItems returns the list of Items in the QuickBooks account. These are basically product types, and you need them to create invoices.

func (*Client) UpdateCustomer

func (c *Client) UpdateCustomer(customer *Customer) (*Customer, error)

UpdateCustomer updates the given Customer on the QuickBooks server, returning the resulting Customer object. It's a sparse update, as not all QB fields are present in our Customer object.

type CompanyInfo

type CompanyInfo struct {
	CompanyName string
	LegalName   string
	//CompanyAddr
	//CustomerCommunicationAddr
	//LegalAddr
	//PrimaryPhone
	//CompanyStartDate     Date
	CompanyStartDate     string
	FiscalYearStartMonth string
	Country              string
	//Email
	//WebAddr
	SupportedLanguages string
	//NameValue
	Domain    string
	ID        string `json:"Id"`
	SyncToken string
	Metadata  MetaData `json:",omitempty"`
}

CompanyInfo describes a company account.

type Customer

type Customer struct {
	ID                 string          `json:"Id,omitempty"`
	SyncToken          string          `json:",omitempty"`
	MetaData           MetaData        `json:",omitempty"`
	Title              null.String     `json:",omitempty"`
	GivenName          null.String     `json:",omitempty"`
	MiddleName         null.String     `json:",omitempty"`
	FamilyName         null.String     `json:",omitempty"`
	Suffix             null.String     `json:",omitempty"`
	DisplayName        string          `json:",omitempty"`
	FullyQualifiedName null.String     `json:",omitempty"`
	CompanyName        null.String     `json:",omitempty"`
	PrintOnCheckName   string          `json:",omitempty"`
	Active             bool            `json:",omitempty"`
	PrimaryPhone       TelephoneNumber `json:",omitempty"`
	AlternatePhone     TelephoneNumber `json:",omitempty"`
	Mobile             TelephoneNumber `json:",omitempty"`
	Fax                TelephoneNumber `json:",omitempty"`
	PrimaryEmailAddr   *EmailAddress   `json:",omitempty"`
	WebAddr            *WebSiteAddress `json:",omitempty"`
	//DefaultTaxCodeRef
	Taxable              bool             `json:",omitempty"`
	TaxExemptionReasonID string           `json:"TaxExemptionReasonId,omitempty"`
	BillAddr             *PhysicalAddress `json:",omitempty"`
	ShipAddr             *PhysicalAddress `json:",omitempty"`
	Notes                string           `json:",omitempty"`
	Job                  null.Bool        `json:",omitempty"`
	BillWithParent       bool             `json:",omitempty"`
	//ParentRef
	Level int `json:",omitempty"`
	//SalesTermRef
	//PaymentMethodRef
	Balance         json.Number `json:",omitempty"`
	OpenBalanceDate Date        `json:",omitempty"`
	BalanceWithJobs json.Number `json:",omitempty"`
}

Customer represents a QuickBooks Customer object.

func (Customer) GetAddress

func (c Customer) GetAddress() PhysicalAddress

GetAddress prioritizes the ship address, but falls back on bill address

func (Customer) GetPrimaryEmail

func (c Customer) GetPrimaryEmail() string

GetPrimaryEmail de-nests the PrimaryEmailAddr object

func (Customer) GetWebsite

func (c Customer) GetWebsite() string

GetWebsite de-nests the Website object

type Date

type Date struct {
	time.Time
}

Date represents a Quickbooks date

func (Date) String

func (d Date) String() string

func (*Date) UnmarshalJSON

func (d *Date) UnmarshalJSON(b []byte) (err error)

UnmarshalJSON removes time from parsed date

type DiscountLineDetail

type DiscountLineDetail struct {
	PercentBased    bool
	DiscountPercent float32 `json:",omitempty"`
}

DiscountLineDetail ...

type EmailAddress

type EmailAddress struct {
	Address string `json:",omitempty"`
}

EmailAddress represents a QuickBooks email address.

type EndpointURL

type EndpointURL string

EndpointURL specifies the endpoint to connect to.

const (
	// ProductionEndpoint is for live apps.
	ProductionEndpoint EndpointURL = "https://quickbooks.api.intuit.com"
	// SandboxEndpoint is for testing.
	SandboxEndpoint EndpointURL = "https://sandbox-quickbooks.api.intuit.com"
)

type Invoice

type Invoice struct {
	ID        string   `json:"Id,omitempty"`
	SyncToken string   `json:",omitempty"`
	MetaData  MetaData `json:",omitempty"`
	//CustomField
	DocNumber string `json:",omitempty"`
	TxnDate   Date   `json:",omitempty"`
	//DepartmentRef
	PrivateNote string `json:",omitempty"`
	//LinkedTxn
	Line         []Line
	TxnTaxDetail TxnTaxDetail `json:",omitempty"`
	CustomerRef  ReferenceType
	CustomerMemo MemoRef         `json:",omitempty"`
	BillAddr     PhysicalAddress `json:",omitempty"`
	ShipAddr     PhysicalAddress `json:",omitempty"`
	ClassRef     ReferenceType   `json:",omitempty"`
	SalesTermRef ReferenceType   `json:",omitempty"`
	DueDate      Date            `json:",omitempty"`
	//GlobalTaxCalculation
	ShipMethodRef ReferenceType `json:",omitempty"`
	ShipDate      Date          `json:",omitempty"`
	TrackingNum   string        `json:",omitempty"`
	TotalAmt      json.Number   `json:",omitempty"`
	//CurrencyRef
	ExchangeRate          json.Number  `json:",omitempty"`
	HomeAmtTotal          json.Number  `json:",omitempty"`
	HomeBalance           json.Number  `json:",omitempty"`
	ApplyTaxAfterDiscount bool         `json:",omitempty"`
	PrintStatus           string       `json:",omitempty"`
	EmailStatus           string       `json:",omitempty"`
	BillEmail             EmailAddress `json:",omitempty"`
	BillEmailCC           EmailAddress `json:"BillEmailCc,omitempty"`
	BillEmailBCC          EmailAddress `json:"BillEmailBcc,omitempty"`
	//DeliveryInfo
	Balance                      json.Number   `json:",omitempty"`
	TxnSource                    string        `json:",omitempty"`
	AllowOnlineCreditCardPayment bool          `json:",omitempty"`
	AllowOnlineACHPayment        bool          `json:",omitempty"`
	Deposit                      json.Number   `json:",omitempty"`
	DepositToAccountRef          ReferenceType `json:",omitempty"`
}

Invoice represents a QuickBooks Invoice object.

type Item

type Item struct {
	ID        string `json:"Id,omitempty"`
	SyncToken string `json:",omitempty"`
	//MetaData
	Name        string
	SKU         string `json:"Sku,omitempty"`
	Description string `json:",omitempty"`
	Active      bool   `json:",omitempty"`
	//SubItem
	//ParentRef
	//Level
	//FullyQualifiedName
	Taxable             bool        `json:",omitempty"`
	SalesTaxIncluded    bool        `json:",omitempty"`
	UnitPrice           json.Number `json:",omitempty"`
	Type                string
	IncomeAccountRef    ReferenceType
	ExpenseAccountRef   ReferenceType
	PurchaseDesc        string      `json:",omitempty"`
	PurchaseTaxIncluded bool        `json:",omitempty"`
	PurchaseCost        json.Number `json:",omitempty"`
	AssetAccountRef     ReferenceType
	TrackQtyOnHand      bool `json:",omitempty"`
	//InvStartDate Date
	QtyOnHand          json.Number   `json:",omitempty"`
	SalesTaxCodeRef    ReferenceType `json:",omitempty"`
	PurchaseTaxCodeRef ReferenceType `json:",omitempty"`
}

Item represents a QuickBooks Item object (a product type).

type Line

type Line struct {
	ID                  string `json:"Id,omitempty"`
	LineNum             int    `json:",omitempty"`
	Description         string `json:",omitempty"`
	Amount              json.Number
	DetailType          string
	SalesItemLineDetail SalesItemLineDetail `json:",omitempty"`
	DiscountLineDetail  DiscountLineDetail  `json:",omitempty"`
	TaxLineDetail       TaxLineDetail       `json:",omitempty"`
}

Line ...

type MemoRef

type MemoRef struct {
	Value string `json:"value,omitempty"`
}

MemoRef represents a QuickBooks MemoRef object.

type MetaData

type MetaData struct {
	CreateTime      Date
	LastUpdatedTime Date
}

MetaData is a timestamp of genesis and last change of a Quickbooks object

type PhysicalAddress

type PhysicalAddress struct {
	ID string `json:"Id,omitempty"`
	// These lines are context-dependent! Read the QuickBooks API carefully.
	Line1   string `json:",omitempty"`
	Line2   string `json:",omitempty"`
	Line3   string `json:",omitempty"`
	Line4   string `json:",omitempty"`
	Line5   string `json:",omitempty"`
	City    string `json:",omitempty"`
	Country string `json:",omitempty"`
	// A.K.A. State.
	CountrySubDivisionCode string `json:",omitempty"`
	PostalCode             string `json:",omitempty"`
	Lat                    string `json:",omitempty"`
	Long                   string `json:",omitempty"`
}

PhysicalAddress represents a QuickBooks address.

type ReferenceType

type ReferenceType struct {
	Value string `json:"value,omitempty"`
	Name  string `json:"name,omitempty"`
}

ReferenceType represents a QuickBooks reference to another object.

type SalesItemLineDetail

type SalesItemLineDetail struct {
	ItemRef   ReferenceType `json:",omitempty"`
	ClassRef  ReferenceType `json:",omitempty"`
	UnitPrice json.Number   `json:",omitempty"`
	//MarkupInfo
	Qty             float32       `json:",omitempty"`
	ItemAccountRef  ReferenceType `json:",omitempty"`
	TaxCodeRef      ReferenceType `json:",omitempty"`
	ServiceDate     Date          `json:",omitempty"`
	TaxInclusiveAmt json.Number   `json:",omitempty"`
	DiscountRate    json.Number   `json:",omitempty"`
	DiscountAmt     json.Number   `json:",omitempty"`
}

SalesItemLineDetail ...

type TaxLineDetail

type TaxLineDetail struct {
	PercentBased     bool        `json:",omitempty"`
	NetAmountTaxable json.Number `json:",omitempty"`
	//TaxInclusiveAmount json.Number `json:",omitempty"`
	//OverrideDeltaAmount
	TaxPercent json.Number `json:",omitempty"`
	TaxRateRef ReferenceType
}

TaxLineDetail ...

type TelephoneNumber

type TelephoneNumber struct {
	FreeFormNumber string
}

TelephoneNumber represents a QuickBooks phone number.

type TxnTaxDetail

type TxnTaxDetail struct {
	TxnTaxCodeRef ReferenceType `json:",omitempty"`
	TotalTax      json.Number   `json:",omitempty"`
	TaxLine       []Line        `json:",omitempty"`
}

TxnTaxDetail ...

type WebSiteAddress

type WebSiteAddress struct {
	URI string
}

WebSiteAddress represents a Quickbooks Website

Jump to

Keyboard shortcuts

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