mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-16 18:25:11 -06:00
121 lines
3.4 KiB
Python
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
|