- Notifications
You must be signed in to change notification settings - Fork0
A Python library for accessing the Quickbooks API.
License
pythonthings/python-quickbooks
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
A Python 3 library for accessing the Quickbooks API. Complete rework ofquickbooks-python.
These instructions were written for a Django application. Make sure tochange it to whatever framework/method you’re using.You can find additional examples of usage inIntegration tests folder.
For information about contributing, see theContributing Page.
This library requiresintuit-oauth.Follow theOAuth 2.0 Guide for installation and to get connected to QuickBooks API.
Set up an AuthClient passing in yourCLIENT_ID andCLIENT_SECRET.
from intuitlib.client import AuthClientauth_client = AuthClient( client_id='CLIENT_ID', client_secret='CLIENT_SECRET', environment='sandbox', redirect_uri='http://localhost:8000/callback', )Then create a QuickBooks client object passing in the AuthClient, refresh token, and company id:
from quickbooks import QuickBooksclient = QuickBooks( auth_client=auth_client, refresh_token='REFRESH_TOKEN', company_id='COMPANY_ID', )If you need to access a minor version (SeeMinor versions fordetails) pass in minorversion when setting up the client:
client = QuickBooks( auth_client=auth_client, refresh_token='REFRESH_TOKEN', company_id='COMPANY_ID', minorversion=4)List of objects:
from quickbooks.objects.customer import Customercustomers = Customer.all(qb=client)Note: The maximum number of entities that can be returned in aresponse is 1000. If the result size is not specified, the defaultnumber is 100. (SeeIntuit developer guide for details)
Filtered list of objects:
customers = Customer.filter(Active=True, FamilyName="Smith", qb=client)Filtered list of objects with ordering:
# Get customer invoices ordered by TxnDateinvoices = Invoice.filter(CustomerRef='100', order_by='TxnDate', qb=client)# Same, but in reverse orderinvoices = Invoice.filter(CustomerRef='100', order_by='TxnDate DESC', qb=client)# Order customers by FamilyName then by GivenNamecustomers = Customer.all(order_by='FamilyName, GivenName', qb=client)Filtered list of objects with paging:
customers = Customer.filter(start_position=1, max_results=25, Active=True, FamilyName="Smith", qb=client)List Filtered by values in list:
customer_names = ['Customer1', 'Customer2', 'Customer3']customers = Customer.choose(customer_names, field="DisplayName", qb=client)List with custom Where Clause (do not include the"WHERE"):
customers = Customer.where("Active = True AND CompanyName LIKE 'S%'", qb=client)List with custom Where and ordering
customers = Customer.where("Active = True AND CompanyName LIKE 'S%'", order_by='DisplayName', qb=client)List with custom Where Clause and paging:
customers = Customer.where("CompanyName LIKE 'S%'", start_position=1, max_results=25, qb=client)Filtering a list with a custom query (SeeIntuit developer guide forsupported SQL statements):
customers = Customer.query("SELECT * FROM Customer WHERE Active = True", qb=client)Filtering a list with a custom query with paging:
customers = Customer.query("SELECT * FROM Customer WHERE Active = True STARTPOSITION 1 MAXRESULTS 25", qb=client)Get record count (do not include the"WHERE"):
customer_count = Customer.count("Active = True AND CompanyName LIKE 'S%'", qb=client)Get single object by Id and update:
customer = Customer.get(1, qb=client)customer.CompanyName = "New Test Company Name"customer.save(qb=client)Create new object:
customer = Customer()customer.CompanyName = "Test Company"customer.save(qb=client)The batch operation enables an application to perform multipleoperations in a single request (SeeIntuit Batch Operations Guide forfull details).
Batch create a list of objects:
from quickbooks.batch import batch_createcustomer1 = Customer()customer1.CompanyName = "Test Company 1"customer2 = Customer()customer2.CompanyName = "Test Company 2"customers = []customers.append(customer1)customers.append(customer2)results = batch_create(customers, qb=client)Batch update a list of objects:
from quickbooks.batch import batch_updatecustomers = Customer.filter(Active=True)# Update customer recordsresults = batch_update(customers, qb=client)Batch delete a list of objects:
from quickbooks.batch import batch_deletecustomers = Customer.filter(Active=False)results = batch_delete(customers, qb=client)Review results for batch operation:
# successes is a list of objects that were successfully updatedfor obj in results.successes: print "Updated " + obj.DisplayName# faults contains list of failed operations and associated errorsfor fault in results.faults: print "Operation failed on " + fault.original_object.DisplayName for error in fault.Error: print "Error " + error.MessageChange Data Capture returns a list of objects that have changed since a given time(seeChange data capture for more details):
from quickbooks.cdc import change_data_capturefrom quickbooks.objects import Invoicecdc_response = change_data_capture([Invoice], "2017-01-01T00:00:00", qb=client)for invoice in cdc_response.Invoice: # Do something with the invoiceQuerying muliple entity types at the same time:
from quickbooks.objects import Invoice, Customercdc_response = change_data_capture([Invoice, Customer], "2017-01-01T00:00:00", qb=client)If you use adatetime object for the timestamp, it is automatically converted to a string:
from datetime import datetimecdc_response = change_data_capture([Invoice, Customer], datetime(2017, 1, 1, 0, 0, 0), qb=client)SeeAttachable documentationfor list of valid file types, file size limits and other restrictions.
Attaching a note to a customer:
attachment = Attachable()attachable_ref = AttachableRef()attachable_ref.EntityRef = customer.to_ref()attachment.AttachableRef.append(attachable_ref)attachment.Note = 'This is a note'attachment.save(qb=client)Attaching a file to customer:
attachment = Attachable()attachable_ref = AttachableRef()attachable_ref.EntityRef = customer.to_ref()attachment.AttachableRef.append(attachable_ref)attachment.FileName = 'Filename'attachment._FilePath = '/folder/filename' # full path to fileattachment.ContentType = 'application/pdf'attachment.save(qb=client)Void an invoice:
invoice = Invoice()invoice.Id = 7invoice.void(qb=client)If your consumer_key never changes you can enable the client to stay running:
QuickBooks.enable_global()You can disable the global client like so:
QuickBooks.disable_global()All objects includeto_json andfrom_json methods.
Converting an object to JSON data:
account = Account.get(1, qb=client)json_data = account.to_json()Loading JSON data into a quickbooks object:
account = Account()account.from_json( { "AccountType": "Accounts Receivable", "Name": "MyJobs" })account.save(qb=client)When setting date or datetime fields, Quickbooks requires a specific format.Formating helpers are available in helpers.py. Example usage:
date_string = qb_date_format(date(2016, 7, 22))date_time_string = qb_datetime_format(datetime(2016, 7, 22, 10, 35, 00))date_time_with_utc_string = qb_datetime_utc_offset_format(datetime(2016, 7, 22, 10, 35, 00), '-06:00')The QuickbooksException object contains additionalQBO error code information.
from quickbooks.exceptions import QuickbooksExceptiontry: # perform a Quickbooks operationexcept QuickbooksException as e: e.message # contains the error message returned from QBO e.error_code # contains the e.detail # contains additional information when availableNote: Objects and object property names match their Quickbookscounterparts and do not follow PEP8.
Note: This is a work-in-progress made public to help otherdevelopers access the QuickBooks API. Built for a Django project.
About
A Python library for accessing the Quickbooks API.
Resources
License
Code of conduct
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Languages
- Python100.0%