gnucash/bindings/python/example_scripts/gncinvoicefkt.py
Frank Oltmanns 5675dad2f3 Update query for get_all_customers
Use same time of query in get_all_customers as in get_all_invoices
2018-12-24 13:42:22 -08:00

121 lines
3.4 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
##@file
# @brief some help for working with invoices, used in \ref py_invoice_export
# @ingroup python_bindings_examples
# @author Christoph Holtermann (c.holtermann (at) gmx.de)
# @date 2014-11
#
# @details
# Credits to Tom Loft for the query to get_all_invoices
# as used in his REST-Api
#
# Issues:
# - get_all_invoices could be added as a method to book Class
# - get_all_customers should be a query like get_all_invoices
try:
import gnucash
from gnucash.gnucash_business import Customer, Employee, Vendor, Job, \
Address, Invoice, Entry, TaxTable, TaxTableEntry, GNC_AMT_TYPE_PERCENT, \
GNC_DISC_PRETAX
import str_methods
except ImportError as import_error:
print("Problem importing modules.")
print(import_error)
sys.exit(2)
def get_all_lots(account):
"""Return all lots in account and descendants"""
ltotal=[]
descs = account.get_descendants()
for desc in descs:
if type(desc).__name__ == 'SwigPyObject':
desc = gnucash.Account(instance=desc)
ll=desc.GetLotList()
ltotal+=ll
return ltotal
def get_all_invoices_from_lots(account):
"""Return all invoices in account and descendants
This is based on lots. So invoices without lots will be missed."""
lot_list=get_all_lots(account)
invoice_list=[]
for lot in lot_list:
if type(lot).__name__ == 'SwigPyObject':
lot = gnucash.GncLot(instance=lot)
invoice=gnucash.gnucash_core_c.gncInvoiceGetInvoiceFromLot(lot.instance)
if invoice:
invoice_list.append(Invoice(instance=invoice))
return invoice_list
def get_all_invoices(book, is_paid=None, is_active=None):
"""Returns a list of all invoices in the book.
Posts a query to search for all invoices.
arguments:
book the gnucash book to work with
keyword-arguments:
is_paid int 1 to search for invoices having been paid, 0 for not, None to ignore.
is_active int 1 to search for active invoices
"""
query = gnucash.Query()
query.search_for('gncInvoice')
query.set_book(book)
if is_paid == 0:
query.add_boolean_match([gnucash.INVOICE_IS_PAID], False, gnucash.QOF_QUERY_AND)
elif is_paid == 1:
query.add_boolean_match([gnucash.INVOICE_IS_PAID], True, gnucash.QOF_QUERY_AND)
elif is_paid == None:
pass
# active = JOB_IS_ACTIVE
if is_active == 0:
query.add_boolean_match(['active'], False, gnucash.QOF_QUERY_AND)
elif is_active == 1:
query.add_boolean_match(['active'], True, gnucash.QOF_QUERY_AND)
elif is_active == None:
pass
# return only invoices (1 = invoices)
pred_data = gnucash.gnucash_core.QueryInt32Predicate(gnucash.QOF_COMPARE_EQUAL, 1)
query.add_term([gnucash.INVOICE_TYPE], pred_data, gnucash.QOF_QUERY_AND)
invoice_list = []
for result in query.run():
invoice_list.append(Invoice(instance=result))
query.destroy()
return invoice_list
def get_all_customers(book):
"""Returns all customers in book.
Posts a query to search for all customers.
arguments:
book the gnucash book to work with
"""
query = gnucash.Query()
query.search_for('gncCustomer')
query.set_book(book)
customer_list = []
for result in query.run():
customer_list.append(Customer(instance=result))
query.destroy()
return customer_list