Package: i4u
i4uPython package to interact withInvoice4UAPIInvoice4U API natively uses wsdl soap, so to interact with it this package is built based
onzeepwith additional data structures that allow easier interactionInstallationpip install i4uOr to use as sourcegit clone https://github.com/ofersadan85/i4u.git
cd i4u
pip install -r requirements.txtRequirementsTested with python 3.6-3.10, on both Windows 10 and Ubuntu 20.04. Should (in theory) work on other operating
systems. If you wish to create a pull request to add tests / modifications that verify it is able to work on other
python versions or operating systems, see theContributingsection belowIf you want to install this package from source you need to runpip install zeepfirst andpip install requestsif
you need to have download functionality for files. For everything, simply use:pip install -r requirements.txtSeerequirements.txtPython 3.6 only also requiresdataclasses(pip install dataclasses)Usage ExamplesTo connect and authenticate you must first create anInvoice4Uinstance with your username and password provided (this
assumes you have an account set up onInvoice4U)from i4u import Invoice4U
i4u_api = Invoice4U('your_user', 'your_password')If you don't have API access yet, or you just want to test out the code, you may test the API usage with these test
credentialsfrom i4u import Invoice4U
i4u_api = Invoice4U('Test@test.com', '123456')To verify that you're logged in correctly, check that you received atokenif i4u_api.token is None:
    print('Username or password are incorrect')
else:
    print('Login success')To get a list ofallcustomers belonging to your organisation:customers = i4u_api.get_all_customers()You can edit and save customer details:customers = i4u_api.customers()
c = customers[6]
c.Email = 'some_other_email@mail.com'
c.Fax = '1800123456789'
i4u_api.update_customer(c)You can also create a new customer:from i4u.classes import Customer

new_customer = Customer('Elon Musk', City='Jerusalem')
created = i4u_api.create_customer(new_customer)
print(created.ID)  # Check the system generated ID of the new customer if neededSimilarly, you can create new documents along with new customers in the same call:from i4u.classes import InvoiceOrder, DocumentItem, Customer

customer = Customer('Joe Smith')  # Create a new client while creating the document
products = [
    DocumentItem(Price=30, Name='Chair', Qunatity=2),
    DocumentItem(Price=50, Name='Table', Qunatity=1),
]
new_invoice_order = InvoiceOrder(Subject='Furniture', Items=products, NewCustomer=customer)
created_doc = i4u_api.create_document(new_invoice_order)
print(created_doc.Total)  # Will print 110 (30 * 2 + 50)Alternatively, create the same document for an existing customer:new_invoice_order = InvoiceOrder(Subject='Furniture', Items=products, ClientID=customer.ID)
created_doc = i4u_api.create_document(new_invoice_order)You can also download the document:i4u_api.download_document(doc=created_doc, destination='/some/folder')More examples of document types you can create will be added here soon!The basic API exposed byzeepcan be reached via theserviceproperty, usually including thetoken. This allows
you to access API functions that are not yet available with this package, and can also help if you need to get the raw
data returned byzeep. For example:raw_document = i4u_api.service.GetDocumentByNumber(doc.DocumentNumber, doc.DocumentType, i4u_api.token)ContributingFor bugs / feature requests please submitissuesIf you would like to contribute to this project, you are welcome
tosubmit a pull requestIn order to add features not yet available in this package but that are possible with Invoice4U API in principle, please
refer to the officialInvoice4U API documentationWarranty / Liability / Official supportThis project is being developed independently of Invoice4U and not supported officially by them, we provide the
package "as-is" without any implied warranty or liability, usage is your own responsibilityAdditional infoJust because I like badges