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: 2025-02-07 16:25:45 Functions: 0.0 % 5 0
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     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