LCOV - code coverage report
Current view: top level - libgnucash/engine - gncIDSearch.c (source / functions) Coverage Total Hit
Test: gnucash.info Lines: 0.0 % 59 0
Test Date: 2026-11-02 18:19:43 Functions: 0.0 % 5 0
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /**      utils.c
       2              : *
       3              : *      This program is free software; you can redistribute it and/or modify
       4              : *      it under the terms of the GNU General Public License as published by
       5              : *      the Free Software Foundation; either version 2 of the License, or
       6              : *      (at your option) any later version.
       7              : *
       8              : *      This program is distributed in the hope that it will be useful,
       9              : *      but WITHOUT ANY WARRANTY; without even the implied warranty of
      10              : *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      11              : *      GNU General Public License for more details.
      12              : *
      13              : *      You should have received a copy of the GNU General Public License
      14              : *      along with this program; if not, write to the Free Software
      15              : *      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
      16              : *      MA 02110-1301, USA.
      17              : *
      18              : * Developed (aka copied?) from code written by Sebastian Held <sebastian.held@gmx.de>
      19              : * as part of his GnuCash invoice importer module
      20              : * Mike Evans <mikee@saxicola.co.uk>
      21              : *
      22              : **********************************************************************/
      23              : 
      24              : #include "gncIDSearch.h"
      25              : #include <gnc-glib-utils.h>
      26              : 
      27              : typedef enum
      28              : {   UNDEFINED,
      29              :     CUSTOMER,
      30              :     VENDOR,
      31              :     INVOICE,
      32              :     BILL
      33              : }GncSearchType;
      34              : 
      35              : static void * search(QofBook * book, const gchar *id, void * object, GncSearchType type);
      36              : static QofLogModule log_module = G_LOG_DOMAIN;
      37              : /***********************************************************************
      38              :  * Search the book for a Customer/Invoice/Bill with the same ID.
      39              :  * If it exists return a valid object, if not then returns NULL.
      40              :  @param QofBook The book
      41              :  @param gchar ID of the Customer
      42              :  @return GncCustomer * Pointer to the customer or NULL of there is no customer
      43              :  **********************************************************************/
      44              : 
      45              : 
      46              : GncCustomer *
      47            0 : gnc_search_customer_on_id (QofBook * book, const gchar *id)
      48              : {
      49            0 :     GncCustomer *customer = NULL;
      50            0 :     GncSearchType type = CUSTOMER;
      51            0 :     customer = (GncCustomer*)search(book, id, customer, type);
      52            0 :     return customer;
      53              : }
      54              : 
      55              : GncInvoice *
      56            0 : gnc_search_invoice_on_id (QofBook * book, const gchar *id)
      57              : {
      58            0 :     GncInvoice *invoice = NULL;
      59            0 :     GncSearchType type = INVOICE;
      60            0 :     invoice = (GncInvoice*)search(book, id, invoice, type);
      61            0 :     return invoice;
      62              : }
      63              : 
      64              : /* Essentially identical to above.*/
      65              : GncInvoice *
      66            0 : gnc_search_bill_on_id (QofBook * book, const gchar *id)
      67              : {
      68            0 :     GncInvoice *bill =  NULL;
      69            0 :     GncSearchType type = BILL;
      70            0 :     bill = (GncInvoice*)search(book, id, bill, type);
      71            0 :     return bill;
      72              : }
      73              : 
      74              : GncVendor *
      75            0 : gnc_search_vendor_on_id (QofBook * book, const gchar *id)
      76              : {
      77            0 :     GncVendor *vendor =  NULL;
      78            0 :     GncSearchType type = VENDOR;
      79            0 :     vendor = (GncVendor*)search(book, id, vendor, type);
      80            0 :     return vendor;
      81              : }
      82              : 
      83              : 
      84              : /******************************************************************
      85              :  * Generic search called after setting up stuff
      86              :  * DO NOT call directly but type tests should fail anyway
      87              :  ****************************************************************/
      88            0 : static void * search(QofBook * book, const gchar *id, void * object, GncSearchType type)
      89              : {
      90              :     void *c;
      91              :     GList *result;
      92              :     QofQuery *q;
      93              :     QofQueryPredData* string_pred_data;
      94              :     
      95            0 :     PINFO("Type = %d", type);
      96            0 :     g_return_val_if_fail (type, NULL);
      97            0 :     g_return_val_if_fail (id, NULL);
      98            0 :     g_return_val_if_fail (book, NULL);
      99              : 
     100              :     // Build the query
     101            0 :     q = qof_query_create ();
     102            0 :     qof_query_set_book (q, book);
     103              :     // Search only the id field
     104            0 :     string_pred_data = qof_query_string_predicate (QOF_COMPARE_EQUAL, id, QOF_STRING_MATCH_NORMAL, FALSE);
     105            0 :     if (type == CUSTOMER)
     106              :     {
     107            0 :         qof_query_search_for(q,GNC_CUSTOMER_MODULE_NAME);
     108            0 :         qof_query_add_term (q, qof_query_build_param_list("CUSTOMER_ID"), string_pred_data, QOF_QUERY_AND);
     109              :     }
     110            0 :     else if (type ==  INVOICE || type ==  BILL)
     111              :     {
     112            0 :         qof_query_search_for(q,GNC_INVOICE_MODULE_NAME);
     113            0 :         qof_query_add_term (q, qof_query_build_param_list("INVOICE_ID"), string_pred_data, QOF_QUERY_AND);
     114              :     }
     115            0 :     else if (type == VENDOR)
     116              :     {
     117            0 :         qof_query_search_for(q,GNC_VENDOR_MODULE_NAME);
     118            0 :         qof_query_add_term (q, qof_query_build_param_list("VENDOR_ID"), string_pred_data, QOF_QUERY_AND);
     119              :     }
     120              : 
     121              : 
     122              :     // Run the query
     123            0 :     result = qof_query_run (q);
     124              : 
     125              :     // now compare _exactly_
     126            0 :     if (gnc_list_length_cmp (result, 0))
     127              :     {
     128            0 :         result = g_list_first (result);
     129              : 
     130            0 :         while (result)
     131              :         {
     132            0 :             c = result->data;
     133              :             
     134            0 :             if (type == CUSTOMER && strcmp(id, gncCustomerGetID(c)) == 0)
     135              :             {
     136              :                 // correct id found
     137            0 :                 object = c;
     138            0 :                 break;
     139              :             }
     140            0 :             else if (type == INVOICE && strcmp(id, gncInvoiceGetID(c)) == 0 
     141            0 :                         && gncInvoiceGetType(c) == GNC_INVOICE_CUST_INVOICE)
     142              :             {
     143            0 :                 object = c;
     144            0 :                 break;
     145              :             }
     146            0 :             else if (type == BILL && strcmp(id, gncInvoiceGetID(c)) == 0 
     147            0 :                         && gncInvoiceGetType(c) == GNC_INVOICE_VEND_INVOICE)
     148              :             {
     149            0 :                 object = c;
     150            0 :                 break;
     151              :             }
     152            0 :             else if (type == VENDOR && strcmp(id, gncVendorGetID(c)) == 0)
     153              :             {
     154            0 :                 object = c;
     155            0 :                 break;
     156              :             }
     157            0 :             result = g_list_next (result);
     158              :         }
     159              :     }
     160            0 :     qof_query_destroy (q);
     161            0 :     return object;
     162              : }
        

Generated by: LCOV version 2.0-1