The Python interface to online accounting service Fakturoid.
This library is developed and maintained by Roman Krejcik (farin@farin.cz). It is unoficial and no support from Fakturoid team can be claimed.
Install from PyPI
pip install fakturoid
or alternatively install development version directly from github
pip install -e git+git://github.com/farin/python-fakturoid#egg=fakturoid
Supported Python versions are 2.6+ and 3.x. Dependencies are requests, python-dateutil
Create context:
from fakturoid import Fakturoid
fa = Fakturoid('yourslug', 'your@email.com', 'apikey038dc73...', 'YourApp (yourname@example.com)')
Print 25 regular invoices in year 2013:
from datetime import date
for invoice in fa.invoices(proforma=False, since=date(2013,1,1))[:25]:
print(invoice.number, invoice.total)
Delete subject with id 27:
subject = fa.subject(27)
fa.delete(subject)
And finally create new invoice:
from fakturoid import Invoice, InvoiceLine
invoice = Invoice(
subject_id=28,
number='2013-0108',
due=10,
issued_on=date(2012, 3, 30),
taxable_fulfillment_due=date(2012, 3, 30),
lines=[
# use Decimal or string for floating values
InvoiceLine(name='Hard work', unit_name='h', unit_price=40000, vat_rate=20),
InvoiceLine(name='Soft material', quantity=12, unit_name='ks', unit_price="4.60", vat_rate=20),
]
)
fa.save(invoice)
print(invoice.due_on)
Fakturoid.account()
Returns Account
instance. Account is readonly and can't be updated by API.
Fakturoid.subject(id)
Returns Subject
instance.
Fakturoid.subjects(since=None)
Loads all subjects. If since (date
or datetime
) paramter is passed, retuns only subjects created since given date.
Fakturoid.invoce(id)
Returns Invoice
instance.
Fakturoid.invoices(proforma=None, subject_id=None, since=None, number=None, status=None)
Use proforma=False
/True
parameter to load regular or proforma invoices only.
Returns list of invoices. Invoices are lazily loaded according to slicing.
fa.invoices(status='paid')[:100] # loads 100 paid invoices
fa.invoices()[-1] # loads first issued invoice (invoices are ordered from latest to first)
Fakturoid.generator(id)
Returns Generator
instance.
Fakturoid.generators(recurring=None, subject_id=None, since=None)
Use recurring=False
/True
parameter to load recurring or simple templates only.
Fakturoid.save(model)
Create or modify Subject
, Invoice
or Generator
.
To modify or delete inoive lines simply edit lines
invoice = fa.invoices(number='2014-0002')[0]
invoice.lines[0].unit_price = 5000 # edit first item
del invoice.lines[-1] # delete last item
fa.save(invoice)
Fakturoid.delete(model)
Delete Subject
, Invoice
or Generator
.
subj = fa.subject(1234)
fa.delete(subj) # delete subject
fa.delete(Subject(id=1234)) # or alternativelly delete is possible without object loading
All models fields are named same as Fakturoid API.
Values are mapped to corresponding int
, decimal.Decimal
, datetime.date
and datetime.datetime
types.
Fakturoid.Account
http://docs.fakturoid.apiary.io/#account
Fakturoid.Subject
http://docs.fakturoid.apiary.io/#subjects
Fakturoid.Invoice
Fakturoid.InvoiceLine
http://docs.fakturoid.apiary.io/#invoices
Fakturoid.Generator
http://docs.fakturoid.apiary.io/#generators
Use InvoiceLine
for generator lines
pyfakturoid 0.9 used v1 fakturoid API. Current v2 API additionally requires user email to authenticate.
So Fakturoid
constructor has extra email argument.
Fakturoid v2 API supports invoice lines modification. So now everything works as you expect (lines can be updated or deleted) Verison 0.9 ignored all lines field when updating invoce. In current version all changes are saved.