mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Add vendor search to python bindings and refactors files gncIDSearch.c/h with vendor search.
Patch by Mike Evans. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@19522 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
6ee1c1045c
commit
4099500af1
@ -23,128 +23,64 @@
|
|||||||
|
|
||||||
#include "gncIDSearch.h"
|
#include "gncIDSearch.h"
|
||||||
|
|
||||||
|
static void * search(QofBook * book, const gchar *id, void * object, GNCIdType type);
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* Search the book for a Customer with the same ID. If it exists return a
|
* Search the book for a Customer/Invoice/Bill with the same ID.
|
||||||
* Customer object, if nit then return NULL.
|
* If it exists return a valid object, if not then returns NULL.
|
||||||
@param QofBook The book
|
@param QofBook The book
|
||||||
@param gchar ID of the Customer
|
@param gchar ID of the Customer
|
||||||
@return GncCustomer * Pointer to the customer or NULL of there is no customer
|
@return GncCustomer * Pointer to the customer or NULL of there is no customer
|
||||||
*
|
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
GncCustomer *
|
GncCustomer *
|
||||||
search_customer_on_id (QofBook * book, const gchar *id)
|
gnc_search_customer_on_id (QofBook * book, const gchar *id)
|
||||||
{
|
{
|
||||||
QueryNew *q;
|
|
||||||
GNCIdType type = GNC_CUSTOMER_MODULE_NAME;
|
|
||||||
GList *result; // do not free this!
|
|
||||||
QueryPredData_t string_pred_data;
|
|
||||||
GncCustomer *customer = NULL;
|
GncCustomer *customer = NULL;
|
||||||
gint len;
|
GNCIdType type = GNC_CUSTOMER_MODULE_NAME;
|
||||||
|
customer = (GncCustomer*)search(book, id, customer, type);
|
||||||
g_return_val_if_fail (id, NULL);
|
|
||||||
g_return_val_if_fail (book, NULL);
|
|
||||||
|
|
||||||
// Build the query
|
|
||||||
q = gncQueryCreateFor (type);
|
|
||||||
gncQuerySetBook (q, book);
|
|
||||||
|
|
||||||
// Search only the customer id field
|
|
||||||
string_pred_data = gncQueryStringPredicate (COMPARE_EQUAL, id, STRING_MATCH_NORMAL, FALSE);
|
|
||||||
gncQueryAddTerm (q, gncQueryBuildParamList(CUSTOMER_ID), string_pred_data, QUERY_AND);
|
|
||||||
|
|
||||||
// Run the query
|
|
||||||
result = gncQueryRun (q);
|
|
||||||
|
|
||||||
// now compare _exactly_
|
|
||||||
len = g_list_length (result);
|
|
||||||
if (result && (len>0)) {
|
|
||||||
result = g_list_first (result);
|
|
||||||
while (result) {
|
|
||||||
GncCustomer *c = result->data;
|
|
||||||
if (strcmp(id,gncCustomerGetID(c)) == 0) {
|
|
||||||
// correct id found
|
|
||||||
customer = c;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
result = g_list_next (result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gncQueryDestroy (q);
|
|
||||||
return customer;
|
return customer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* Search the book for an Invoice with the same ID. If it exists return an
|
|
||||||
* Invoice object, if not then return NULL.
|
|
||||||
@param QofBook The book
|
|
||||||
@param gchar ID of the invoice
|
|
||||||
@return GncCustomer * Pointer to the Invoice or NULL of there is no customer
|
|
||||||
*
|
|
||||||
**********************************************************************/
|
|
||||||
GncInvoice *
|
GncInvoice *
|
||||||
search_invoice_on_id(QofBook *book, const gchar *id)
|
gnc_search_invoice_on_id (QofBook * book, const gchar *id)
|
||||||
{
|
{
|
||||||
QueryNew *q;
|
|
||||||
GNCIdType type = GNC_INVOICE_MODULE_NAME;
|
|
||||||
GList *result; // do not free this!
|
|
||||||
QueryPredData_t string_pred_data;
|
|
||||||
GncInvoice *invoice = NULL;
|
GncInvoice *invoice = NULL;
|
||||||
gint len;
|
GNCIdType type = GNC_INVOICE_MODULE_NAME;
|
||||||
|
invoice = (GncInvoice*)search(book,id, invoice, type);
|
||||||
g_return_val_if_fail (id, NULL);
|
|
||||||
g_return_val_if_fail (book, NULL);
|
|
||||||
|
|
||||||
// Build the query
|
|
||||||
q = gncQueryCreateFor (type);
|
|
||||||
gncQuerySetBook (q, book);
|
|
||||||
|
|
||||||
// Search only the invoice id field
|
|
||||||
string_pred_data = gncQueryStringPredicate (COMPARE_EQUAL, id, STRING_MATCH_NORMAL, FALSE);
|
|
||||||
gncQueryAddTerm (q, gncQueryBuildParamList(INVOICE_ID), string_pred_data, QUERY_AND);
|
|
||||||
|
|
||||||
// Run the query
|
|
||||||
result = gncQueryRun (q);
|
|
||||||
|
|
||||||
// now compare _exactly_
|
|
||||||
len = g_list_length (result);
|
|
||||||
if (result && (len>0)) {
|
|
||||||
result = g_list_first (result);
|
|
||||||
while (result) {
|
|
||||||
GncInvoice *c = result->data;
|
|
||||||
if (strcmp(id,gncInvoiceGetID(c)) == 0) {
|
|
||||||
// correct id found
|
|
||||||
invoice = c;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
result = g_list_next (result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
gncQueryDestroy (q);
|
|
||||||
return invoice;
|
return invoice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Essentially identical to above.*/
|
||||||
/***********************************************************************
|
|
||||||
* Search the book for a Bill with the same ID. If it exists return an
|
|
||||||
* Invoice object, if not then return NULL.
|
|
||||||
@param QofBook The book
|
|
||||||
@param gchar ID of the invoice
|
|
||||||
@return GncCustomer * Pointer to the Invoice or NULL of there is no customer
|
|
||||||
*
|
|
||||||
**********************************************************************/
|
|
||||||
GncInvoice *
|
GncInvoice *
|
||||||
search_bill_on_id(QofBook *book, const gchar *id)
|
gnc_search_bill_on_id (QofBook * book, const gchar *id)
|
||||||
{
|
{
|
||||||
QueryNew *q;
|
|
||||||
GNCIdType type = GNC_INVOICE_MODULE_NAME;
|
|
||||||
GList *result; // do not free this!
|
|
||||||
QueryPredData_t string_pred_data;
|
|
||||||
GncInvoice *bill = NULL;
|
GncInvoice *bill = NULL;
|
||||||
gint len;
|
GNCIdType type = GNC_INVOICE_MODULE_NAME;
|
||||||
|
bill = (GncInvoice*)search(book, id, bill, type);
|
||||||
|
return bill;
|
||||||
|
}
|
||||||
|
|
||||||
|
GncVendor *
|
||||||
|
gnc_search_vendor_on_id (QofBook * book, const gchar *id)
|
||||||
|
{
|
||||||
|
GncVendor *vendor = NULL;
|
||||||
|
GNCIdType type = GNC_VENDOR_MODULE_NAME;
|
||||||
|
vendor = (GncVendor*)search(book, id, vendor, type);
|
||||||
|
return vendor;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/******************************************************************
|
||||||
|
* Generic search called after setting up stuff
|
||||||
|
* DO NOT call directly but type tests should fail anyway
|
||||||
|
****************************************************************/
|
||||||
|
static void * search(QofBook * book, const gchar *id, void * object, GNCIdType type)
|
||||||
|
{
|
||||||
|
void *c;
|
||||||
|
GList *result;
|
||||||
|
QueryNew *q;
|
||||||
|
gint len;
|
||||||
|
QueryPredData_t string_pred_data;
|
||||||
|
g_return_val_if_fail (type, NULL);
|
||||||
g_return_val_if_fail (id, NULL);
|
g_return_val_if_fail (id, NULL);
|
||||||
g_return_val_if_fail (book, NULL);
|
g_return_val_if_fail (book, NULL);
|
||||||
|
|
||||||
@ -152,9 +88,24 @@ search_bill_on_id(QofBook *book, const gchar *id)
|
|||||||
q = gncQueryCreateFor (type);
|
q = gncQueryCreateFor (type);
|
||||||
gncQuerySetBook (q, book);
|
gncQuerySetBook (q, book);
|
||||||
|
|
||||||
// Search only the invoice id field
|
// Search only the id field
|
||||||
string_pred_data = gncQueryStringPredicate (COMPARE_EQUAL, id, STRING_MATCH_NORMAL, FALSE);
|
string_pred_data = gncQueryStringPredicate (COMPARE_EQUAL, id, STRING_MATCH_NORMAL, FALSE);
|
||||||
|
|
||||||
|
if (strcmp(type,GNC_CUSTOMER_MODULE_NAME))
|
||||||
|
{
|
||||||
|
GncCustomer *c = NULL;
|
||||||
|
gncQueryAddTerm (q, gncQueryBuildParamList(CUSTOMER_ID), string_pred_data, QUERY_AND);
|
||||||
|
}
|
||||||
|
else if (strcmp(type,GNC_INVOICE_MODULE_NAME))
|
||||||
|
{
|
||||||
|
GncInvoice *c = NULL;
|
||||||
gncQueryAddTerm (q, gncQueryBuildParamList(INVOICE_ID), string_pred_data, QUERY_AND);
|
gncQueryAddTerm (q, gncQueryBuildParamList(INVOICE_ID), string_pred_data, QUERY_AND);
|
||||||
|
}
|
||||||
|
else if (strcmp(type,GNC_VENDOR_MODULE_NAME))
|
||||||
|
{
|
||||||
|
GncVendor *c = NULL;
|
||||||
|
gncQueryAddTerm (q, gncQueryBuildParamList(VENDOR_ID), string_pred_data, QUERY_AND);
|
||||||
|
}
|
||||||
|
|
||||||
// Run the query
|
// Run the query
|
||||||
result = gncQueryRun (q);
|
result = gncQueryRun (q);
|
||||||
@ -164,16 +115,15 @@ search_bill_on_id(QofBook *book, const gchar *id)
|
|||||||
if (result && (len>0)) {
|
if (result && (len>0)) {
|
||||||
result = g_list_first (result);
|
result = g_list_first (result);
|
||||||
while (result) {
|
while (result) {
|
||||||
GncInvoice *c = result->data;
|
c = result->data;
|
||||||
if (strcmp(id,gncInvoiceGetID(c)) == 0) {
|
if (strcmp(id,gncCustomerGetID(c)) == 0) {
|
||||||
// correct id found
|
// correct id found
|
||||||
bill = c;
|
object = c;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
result = g_list_next (result);
|
result = g_list_next (result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gncQueryDestroy (q);
|
gncQueryDestroy (q);
|
||||||
return bill;
|
return object;
|
||||||
}
|
}
|
||||||
|
@ -36,12 +36,14 @@
|
|||||||
#include "QueryNew.h"
|
#include "QueryNew.h"
|
||||||
#include "GNCId.h"
|
#include "GNCId.h"
|
||||||
|
|
||||||
#ifndef GNC_PLUGIN_invoice_import_invoice_import_H
|
|
||||||
#define GNC_PLUGIN_invoice_import_invoice_import_H
|
#ifndef GNC_invoice_import_invoice_import_H
|
||||||
|
#define GNC_invoice_import_invoice_import_H
|
||||||
|
|
||||||
|
|
||||||
GncCustomer * search_customer_on_id (QofBook *book, const gchar *id);
|
GncCustomer * gnc_search_customer_on_id (QofBook *book, const gchar *id);
|
||||||
GncInvoice * search_invoice_on_id (QofBook *book, const gchar *id);
|
GncInvoice * gnc_search_invoice_on_id (QofBook *book, const gchar *id);
|
||||||
GncInvoice * search_bill_on_id (QofBook *book, const gchar *id);
|
GncInvoice * gnc_search_bill_on_id (QofBook *book, const gchar *id);
|
||||||
|
GncVendor * gnc_search_vendor_on_id (QofBook *book, const gchar *id);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -31,8 +31,8 @@ from function_class import \
|
|||||||
from gnucash_core_c import gncInvoiceLookup, gncInvoiceGetInvoiceFromTxn, \
|
from gnucash_core_c import gncInvoiceLookup, gncInvoiceGetInvoiceFromTxn, \
|
||||||
gncInvoiceGetInvoiceFromLot, gncEntryLookup, gncInvoiceLookup, \
|
gncInvoiceGetInvoiceFromLot, gncEntryLookup, gncInvoiceLookup, \
|
||||||
gncCustomerLookup, gncVendorLookup, gncJobLookup, gncEmployeeLookup, \
|
gncCustomerLookup, gncVendorLookup, gncJobLookup, gncEmployeeLookup, \
|
||||||
gncTaxTableLookup, gncTaxTableLookupByName, search_invoice_on_id, \
|
gncTaxTableLookup, gncTaxTableLookupByName, gnc_search_invoice_on_id, \
|
||||||
search_customer_on_id, search_bill_on_id
|
gnc_search_customer_on_id, gnc_search_bill_on_id , gnc_search_vendor_on_id
|
||||||
|
|
||||||
|
|
||||||
class GnuCashCoreClass(ClassFromFunctions):
|
class GnuCashCoreClass(ClassFromFunctions):
|
||||||
@ -192,17 +192,22 @@ class Book(GnuCashCoreClass):
|
|||||||
def BillLoookupByID(self, id):
|
def BillLoookupByID(self, id):
|
||||||
from gnucash_business import Bill
|
from gnucash_business import Bill
|
||||||
return self.do_lookup_create_oo_instance(
|
return self.do_lookup_create_oo_instance(
|
||||||
search_bill_on_id, Bill, id)
|
gnc_search_bill_on_id, Bill, id)
|
||||||
|
|
||||||
def InvoiceLookupByID(self, id):
|
def InvoiceLookupByID(self, id):
|
||||||
from gnucash_business import Invoice
|
from gnucash_business import Invoice
|
||||||
return self.do_lookup_create_oo_instance(
|
return self.do_lookup_create_oo_instance(
|
||||||
search_invoice_on_id, Invoice, id)
|
gnc_search_invoice_on_id, Invoice, id)
|
||||||
|
|
||||||
def CustomerLookupByID(self, id):
|
def CustomerLookupByID(self, id):
|
||||||
from gnucash_business import Customer
|
from gnucash_business import Customer
|
||||||
return self.do_lookup_create_oo_instance(
|
return self.do_lookup_create_oo_instance(
|
||||||
search_customer_on_id, Customer, id)
|
gnc_search_customer_on_id, Customer, id)
|
||||||
|
|
||||||
|
def VendorLookupByID(self, id):
|
||||||
|
from gnucash_business import Vendor
|
||||||
|
return self.do_lookup_create_oo_instance(
|
||||||
|
gnc_search_vendor_on_id, Vendor, id)
|
||||||
|
|
||||||
class GncNumeric(GnuCashCoreClass):
|
class GncNumeric(GnuCashCoreClass):
|
||||||
"""Object used by GnuCash to store all numbers. Always consists of a
|
"""Object used by GnuCash to store all numbers. Always consists of a
|
||||||
|
Loading…
Reference in New Issue
Block a user