2001-11-16 19:17:06 -06:00
|
|
|
/*
|
|
|
|
* gncVendor.c -- the Core Vendor Interface
|
2002-01-22 11:16:02 -06:00
|
|
|
* Copyright (C) 2001, 2002 Derek Atkins
|
2001-11-16 19:17:06 -06:00
|
|
|
* Author: Derek Atkins <warlord@MIT.EDU>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "config.h"
|
|
|
|
|
|
|
|
#include <glib.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#include "guid.h"
|
|
|
|
#include "messages.h"
|
2001-11-24 23:34:34 -06:00
|
|
|
#include "gnc-book-p.h"
|
2003-06-11 11:22:26 -05:00
|
|
|
#include "gnc-commodity.h"
|
|
|
|
#include "gnc-engine-util.h"
|
|
|
|
#include "gnc-event-p.h"
|
2001-11-24 23:34:34 -06:00
|
|
|
#include "GNCIdP.h"
|
2002-02-03 14:01:08 -06:00
|
|
|
#include "QueryObject.h"
|
2002-11-03 14:21:42 -06:00
|
|
|
#include "gnc-be-utils.h"
|
2001-11-16 19:17:06 -06:00
|
|
|
|
2001-11-24 23:34:34 -06:00
|
|
|
#include "gncBusiness.h"
|
2001-11-16 19:17:06 -06:00
|
|
|
#include "gncVendor.h"
|
|
|
|
#include "gncVendorP.h"
|
|
|
|
#include "gncAddress.h"
|
|
|
|
|
|
|
|
struct _gncVendor {
|
2001-11-24 23:34:34 -06:00
|
|
|
GNCBook * book;
|
2001-11-16 19:17:06 -06:00
|
|
|
GUID guid;
|
|
|
|
char * id;
|
|
|
|
char * name;
|
|
|
|
char * notes;
|
2002-06-21 21:38:13 -05:00
|
|
|
GncBillTerm * terms;
|
2001-11-16 19:17:06 -06:00
|
|
|
GncAddress * addr;
|
2003-01-12 16:53:02 -06:00
|
|
|
gnc_commodity * currency;
|
2002-06-23 23:59:04 -05:00
|
|
|
GncTaxIncluded taxincluded;
|
2001-11-16 19:17:06 -06:00
|
|
|
gboolean active;
|
2002-01-22 11:16:02 -06:00
|
|
|
GList * jobs;
|
2002-09-16 23:19:57 -05:00
|
|
|
GncTaxTable* taxtable;
|
|
|
|
gboolean taxtable_override;
|
2002-11-03 14:21:42 -06:00
|
|
|
|
|
|
|
int editlevel;
|
|
|
|
gboolean do_free;
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
gboolean dirty;
|
|
|
|
};
|
|
|
|
|
2002-11-03 14:21:42 -06:00
|
|
|
static short module = MOD_BUSINESS;
|
|
|
|
|
2001-11-24 23:34:34 -06:00
|
|
|
#define _GNC_MOD_NAME GNC_VENDOR_MODULE_NAME
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
#define CACHE_INSERT(str) g_cache_insert(gnc_engine_get_string_cache(), (gpointer)(str));
|
|
|
|
#define CACHE_REMOVE(str) g_cache_remove(gnc_engine_get_string_cache(), (str));
|
|
|
|
|
2001-11-24 23:34:34 -06:00
|
|
|
static void addObj (GncVendor *vendor);
|
|
|
|
static void remObj (GncVendor *vendor);
|
|
|
|
|
2002-03-02 12:55:01 -06:00
|
|
|
G_INLINE_FUNC void mark_vendor (GncVendor *vendor);
|
|
|
|
G_INLINE_FUNC void
|
|
|
|
mark_vendor (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
vendor->dirty = TRUE;
|
2002-11-03 14:21:42 -06:00
|
|
|
gncBusinessSetDirtyFlag (vendor->book, _GNC_MOD_NAME, TRUE);
|
2002-03-02 12:55:01 -06:00
|
|
|
|
|
|
|
gnc_engine_generate_event (&vendor->guid, GNC_EVENT_MODIFY);
|
|
|
|
}
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
/* Create/Destroy Functions */
|
|
|
|
|
2001-11-24 23:34:34 -06:00
|
|
|
GncVendor *gncVendorCreate (GNCBook *book)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
|
|
|
GncVendor *vendor;
|
|
|
|
|
2001-11-24 23:34:34 -06:00
|
|
|
if (!book) return NULL;
|
2001-11-16 19:17:06 -06:00
|
|
|
|
|
|
|
vendor = g_new0 (GncVendor, 1);
|
2001-11-24 23:34:34 -06:00
|
|
|
vendor->book = book;
|
2001-11-16 19:17:06 -06:00
|
|
|
vendor->dirty = FALSE;
|
|
|
|
vendor->id = CACHE_INSERT ("");
|
|
|
|
vendor->name = CACHE_INSERT ("");
|
|
|
|
vendor->notes = CACHE_INSERT ("");
|
2002-03-02 12:55:01 -06:00
|
|
|
vendor->addr = gncAddressCreate (book, &vendor->guid);
|
2002-06-23 23:59:04 -05:00
|
|
|
vendor->taxincluded = GNC_TAXINCLUDED_USEGLOBAL;
|
2001-11-16 19:17:06 -06:00
|
|
|
vendor->active = TRUE;
|
|
|
|
|
2001-11-24 23:34:34 -06:00
|
|
|
xaccGUIDNew (&vendor->guid, book);
|
|
|
|
addObj (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
|
2002-03-02 12:55:01 -06:00
|
|
|
gnc_engine_generate_event (&vendor->guid, GNC_EVENT_CREATE);
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
return vendor;
|
|
|
|
}
|
|
|
|
|
|
|
|
void gncVendorDestroy (GncVendor *vendor)
|
2002-11-03 14:21:42 -06:00
|
|
|
{
|
|
|
|
if (!vendor) return;
|
|
|
|
vendor->do_free = TRUE;
|
|
|
|
gncVendorCommitEdit (vendor);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void gncVendorFree (GncVendor *vendor)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
|
|
|
if (!vendor) return;
|
|
|
|
|
2002-03-02 12:55:01 -06:00
|
|
|
gnc_engine_generate_event (&vendor->guid, GNC_EVENT_DESTROY);
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
CACHE_REMOVE (vendor->id);
|
|
|
|
CACHE_REMOVE (vendor->name);
|
|
|
|
CACHE_REMOVE (vendor->notes);
|
|
|
|
gncAddressDestroy (vendor->addr);
|
2002-01-22 11:16:02 -06:00
|
|
|
g_list_free (vendor->jobs);
|
|
|
|
|
2001-11-24 23:34:34 -06:00
|
|
|
remObj (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
|
|
|
|
g_free (vendor);
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Set Functions */
|
|
|
|
|
2002-11-03 18:41:01 -06:00
|
|
|
#define SET_STR(obj, member, str) { \
|
2001-11-16 19:17:06 -06:00
|
|
|
char * tmp; \
|
|
|
|
\
|
2001-11-21 19:23:07 -06:00
|
|
|
if (!safe_strcmp (member, str)) return; \
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorBeginEdit (obj); \
|
2001-11-16 19:17:06 -06:00
|
|
|
tmp = CACHE_INSERT (str); \
|
|
|
|
CACHE_REMOVE (member); \
|
|
|
|
member = tmp; \
|
|
|
|
}
|
|
|
|
|
|
|
|
void gncVendorSetID (GncVendor *vendor, const char *id)
|
|
|
|
{
|
|
|
|
if (!vendor) return;
|
|
|
|
if (!id) return;
|
2002-11-03 18:41:01 -06:00
|
|
|
SET_STR(vendor, vendor->id, id);
|
2002-03-02 12:55:01 -06:00
|
|
|
mark_vendor (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void gncVendorSetName (GncVendor *vendor, const char *name)
|
|
|
|
{
|
|
|
|
if (!vendor) return;
|
|
|
|
if (!name) return;
|
2002-11-03 18:41:01 -06:00
|
|
|
SET_STR(vendor, vendor->name, name);
|
2002-03-02 12:55:01 -06:00
|
|
|
mark_vendor (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void gncVendorSetNotes (GncVendor *vendor, const char *notes)
|
|
|
|
{
|
|
|
|
if (!vendor) return;
|
|
|
|
if (!notes) return;
|
2002-11-03 18:41:01 -06:00
|
|
|
SET_STR(vendor,vendor->notes, notes);
|
2002-03-02 12:55:01 -06:00
|
|
|
mark_vendor (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
void gncVendorSetGUID (GncVendor *vendor, const GUID *guid)
|
|
|
|
{
|
|
|
|
if (!vendor || !guid) return;
|
|
|
|
if (guid_equal (guid, &vendor->guid)) return;
|
2001-11-24 23:34:34 -06:00
|
|
|
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorBeginEdit (vendor);
|
2001-11-24 23:34:34 -06:00
|
|
|
remObj (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
vendor->guid = *guid;
|
2001-11-24 23:34:34 -06:00
|
|
|
addObj (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
2002-06-21 21:38:13 -05:00
|
|
|
void gncVendorSetTerms (GncVendor *vendor, GncBillTerm *terms)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
2002-06-21 21:38:13 -05:00
|
|
|
if (!vendor) return;
|
|
|
|
if (vendor->terms == terms) return;
|
2002-11-03 18:41:01 -06:00
|
|
|
|
|
|
|
gncVendorBeginEdit (vendor);
|
2002-06-21 21:38:13 -05:00
|
|
|
if (vendor->terms)
|
|
|
|
gncBillTermDecRef (vendor->terms);
|
|
|
|
vendor->terms = terms;
|
|
|
|
if (vendor->terms)
|
|
|
|
gncBillTermDecRef (vendor->terms);
|
2002-03-02 12:55:01 -06:00
|
|
|
mark_vendor (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
2002-06-23 23:59:04 -05:00
|
|
|
void gncVendorSetTaxIncluded (GncVendor *vendor, GncTaxIncluded taxincl)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
|
|
|
if (!vendor) return;
|
|
|
|
if (taxincl == vendor->taxincluded) return;
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorBeginEdit (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
vendor->taxincluded = taxincl;
|
2002-03-02 12:55:01 -06:00
|
|
|
mark_vendor (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
2003-01-12 16:53:02 -06:00
|
|
|
void gncVendorSetCurrency (GncVendor *vendor, gnc_commodity *currency)
|
2002-03-04 13:34:52 -06:00
|
|
|
{
|
2003-01-12 16:53:02 -06:00
|
|
|
if (!vendor || !currency) return;
|
|
|
|
if (vendor->currency &&
|
|
|
|
gnc_commodity_equal (vendor->currency, currency))
|
2002-06-21 14:00:34 -05:00
|
|
|
return;
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorBeginEdit (vendor);
|
2003-01-12 16:53:02 -06:00
|
|
|
vendor->currency = currency;
|
2002-03-04 13:34:52 -06:00
|
|
|
mark_vendor (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2002-03-04 13:34:52 -06:00
|
|
|
}
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
void gncVendorSetActive (GncVendor *vendor, gboolean active)
|
|
|
|
{
|
|
|
|
if (!vendor) return;
|
|
|
|
if (active == vendor->active) return;
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorBeginEdit (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
vendor->active = active;
|
2002-03-02 12:55:01 -06:00
|
|
|
mark_vendor (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
2002-09-16 23:19:57 -05:00
|
|
|
void gncVendorSetTaxTableOverride (GncVendor *vendor, gboolean override)
|
|
|
|
{
|
|
|
|
if (!vendor) return;
|
|
|
|
if (vendor->taxtable_override == override) return;
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorBeginEdit (vendor);
|
2002-09-16 23:19:57 -05:00
|
|
|
vendor->taxtable_override = override;
|
|
|
|
mark_vendor (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2002-09-16 23:19:57 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
void gncVendorSetTaxTable (GncVendor *vendor, GncTaxTable *table)
|
|
|
|
{
|
|
|
|
if (!vendor) return;
|
|
|
|
if (vendor->taxtable == table) return;
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorBeginEdit (vendor);
|
2002-09-16 23:19:57 -05:00
|
|
|
if (vendor->taxtable)
|
|
|
|
gncTaxTableDecRef (vendor->taxtable);
|
|
|
|
if (table)
|
|
|
|
gncTaxTableIncRef (table);
|
|
|
|
vendor->taxtable = table;
|
|
|
|
mark_vendor (vendor);
|
2002-11-03 18:41:01 -06:00
|
|
|
gncVendorCommitEdit (vendor);
|
2002-09-16 23:19:57 -05:00
|
|
|
}
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
/* Get Functions */
|
|
|
|
|
2001-11-24 23:34:34 -06:00
|
|
|
GNCBook * gncVendorGetBook (GncVendor *vendor)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
|
|
|
if (!vendor) return NULL;
|
2001-11-24 23:34:34 -06:00
|
|
|
return vendor->book;
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
const GUID * gncVendorGetGUID (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor) return NULL;
|
|
|
|
return &vendor->guid;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char * gncVendorGetID (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor) return NULL;
|
|
|
|
return vendor->id;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char * gncVendorGetName (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor) return NULL;
|
|
|
|
return vendor->name;
|
|
|
|
}
|
|
|
|
|
|
|
|
GncAddress * gncVendorGetAddr (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor) return NULL;
|
|
|
|
return vendor->addr;
|
|
|
|
}
|
|
|
|
|
|
|
|
const char * gncVendorGetNotes (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor) return NULL;
|
|
|
|
return vendor->notes;
|
|
|
|
}
|
|
|
|
|
2002-06-21 21:38:13 -05:00
|
|
|
GncBillTerm * gncVendorGetTerms (GncVendor *vendor)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
|
|
|
if (!vendor) return 0;
|
|
|
|
return vendor->terms;
|
|
|
|
}
|
|
|
|
|
2002-06-23 23:59:04 -05:00
|
|
|
GncTaxIncluded gncVendorGetTaxIncluded (GncVendor *vendor)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
2002-06-23 23:59:04 -05:00
|
|
|
if (!vendor) return GNC_TAXINCLUDED_USEGLOBAL;
|
2001-11-16 19:17:06 -06:00
|
|
|
return vendor->taxincluded;
|
|
|
|
}
|
|
|
|
|
2003-01-12 16:53:02 -06:00
|
|
|
gnc_commodity * gncVendorGetCurrency (GncVendor *vendor)
|
2002-03-04 13:34:52 -06:00
|
|
|
{
|
|
|
|
if (!vendor) return NULL;
|
2003-01-12 16:53:02 -06:00
|
|
|
return vendor->currency;
|
2002-03-04 13:34:52 -06:00
|
|
|
}
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
gboolean gncVendorGetActive (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor) return FALSE;
|
|
|
|
return vendor->active;
|
|
|
|
}
|
|
|
|
|
2002-09-16 23:19:57 -05:00
|
|
|
gboolean gncVendorGetTaxTableOverride (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor) return FALSE;
|
|
|
|
return vendor->taxtable_override;
|
|
|
|
}
|
|
|
|
|
|
|
|
GncTaxTable* gncVendorGetTaxTable (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor) return NULL;
|
|
|
|
return vendor->taxtable;
|
|
|
|
}
|
|
|
|
|
2002-01-22 11:16:02 -06:00
|
|
|
/* Note that JobList changes do not affect the "dirtiness" of the vendor */
|
|
|
|
void gncVendorAddJob (GncVendor *vendor, GncJob *job)
|
2001-11-24 23:34:34 -06:00
|
|
|
{
|
2002-01-22 11:16:02 -06:00
|
|
|
if (!vendor) return;
|
|
|
|
if (!job) return;
|
|
|
|
|
|
|
|
if (g_list_index(vendor->jobs, job) == -1)
|
2002-02-04 12:54:06 -06:00
|
|
|
vendor->jobs = g_list_insert_sorted (vendor->jobs, job,
|
|
|
|
(GCompareFunc)gncJobCompare);
|
2002-03-02 12:55:01 -06:00
|
|
|
|
|
|
|
gnc_engine_generate_event (&vendor->guid, GNC_EVENT_MODIFY);
|
2001-11-24 23:34:34 -06:00
|
|
|
}
|
|
|
|
|
2002-01-22 11:16:02 -06:00
|
|
|
void gncVendorRemoveJob (GncVendor *vendor, GncJob *job)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
2002-01-22 11:16:02 -06:00
|
|
|
GList *node;
|
|
|
|
|
|
|
|
if (!vendor) return;
|
|
|
|
if (!job) return;
|
|
|
|
|
|
|
|
node = g_list_find (vendor->jobs, job);
|
|
|
|
if (!node) {
|
|
|
|
/* PERR ("split not in account"); */
|
|
|
|
} else {
|
|
|
|
vendor->jobs = g_list_remove_link (vendor->jobs, node);
|
|
|
|
g_list_free_1 (node);
|
|
|
|
}
|
2002-03-02 12:55:01 -06:00
|
|
|
|
|
|
|
gnc_engine_generate_event (&vendor->guid, GNC_EVENT_MODIFY);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
2002-11-03 14:21:42 -06:00
|
|
|
void gncVendorBeginEdit (GncVendor *vendor)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
2002-11-03 14:21:42 -06:00
|
|
|
GNC_BEGIN_EDIT (vendor, _GNC_MOD_NAME);
|
|
|
|
}
|
2001-11-16 19:17:06 -06:00
|
|
|
|
2002-11-03 14:21:42 -06:00
|
|
|
static void gncVendorOnError (GncVendor *vendor, GNCBackendError errcode)
|
|
|
|
{
|
|
|
|
PERR("Vendor Backend Failure: %d", errcode);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void gncVendorOnDone (GncVendor *vendor)
|
|
|
|
{
|
2001-11-16 19:17:06 -06:00
|
|
|
vendor->dirty = FALSE;
|
2002-03-04 13:34:52 -06:00
|
|
|
gncAddressClearDirty (vendor->addr);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
2002-11-03 14:21:42 -06:00
|
|
|
void gncVendorCommitEdit (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
GNC_COMMIT_EDIT_PART1 (vendor);
|
|
|
|
GNC_COMMIT_EDIT_PART2 (vendor, _GNC_MOD_NAME, gncVendorOnError,
|
|
|
|
gncVendorOnDone, gncVendorFree);
|
|
|
|
}
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
/* Other functions */
|
|
|
|
|
2002-02-03 14:01:08 -06:00
|
|
|
int gncVendorCompare (GncVendor *a, GncVendor *b)
|
|
|
|
{
|
|
|
|
if (!a && !b) return 0;
|
|
|
|
if (!a && b) return 1;
|
|
|
|
if (a && !b) return -1;
|
|
|
|
|
|
|
|
return(strcmp(a->name, b->name));
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
2002-01-22 11:16:02 -06:00
|
|
|
GList * gncVendorGetJoblist (GncVendor *vendor, gboolean show_all)
|
|
|
|
{
|
|
|
|
if (!vendor) return NULL;
|
|
|
|
|
|
|
|
if (show_all) {
|
|
|
|
return (g_list_copy (vendor->jobs));
|
|
|
|
} else {
|
|
|
|
GList *list = NULL, *iterator;
|
|
|
|
for (iterator = vendor->jobs; iterator; iterator=iterator->next) {
|
|
|
|
GncJob *j = iterator->data;
|
|
|
|
if (gncJobGetActive (j))
|
|
|
|
list = g_list_append (list, j);
|
|
|
|
}
|
|
|
|
return list;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2002-05-27 13:17:31 -05:00
|
|
|
GUID gncVendorRetGUID (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor)
|
|
|
|
return *xaccGUIDNULL();
|
|
|
|
|
|
|
|
return vendor->guid;
|
|
|
|
}
|
|
|
|
|
|
|
|
GncVendor * gncVendorLookupDirect (GUID guid, GNCBook *book)
|
|
|
|
{
|
|
|
|
if (!book) return NULL;
|
|
|
|
return gncVendorLookup (book, &guid);
|
|
|
|
}
|
|
|
|
|
2002-01-22 11:16:02 -06:00
|
|
|
GncVendor * gncVendorLookup (GNCBook *book, const GUID *guid)
|
|
|
|
{
|
|
|
|
if (!book || !guid) return NULL;
|
|
|
|
return xaccLookupEntity (gnc_book_get_entity_table (book),
|
|
|
|
guid, _GNC_MOD_NAME);
|
|
|
|
}
|
|
|
|
|
|
|
|
gboolean gncVendorIsDirty (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
if (!vendor) return FALSE;
|
|
|
|
return (vendor->dirty || gncAddressIsDirty (vendor->addr));
|
|
|
|
}
|
|
|
|
|
2001-11-16 19:17:06 -06:00
|
|
|
/* Package-Private functions */
|
|
|
|
|
2001-11-24 23:34:34 -06:00
|
|
|
static void addObj (GncVendor *vendor)
|
|
|
|
{
|
2002-02-24 16:12:24 -06:00
|
|
|
gncBusinessAddObject (vendor->book, _GNC_MOD_NAME, vendor, &vendor->guid);
|
|
|
|
}
|
2001-11-24 23:34:34 -06:00
|
|
|
|
2002-02-24 16:12:24 -06:00
|
|
|
static void remObj (GncVendor *vendor)
|
|
|
|
{
|
|
|
|
gncBusinessRemoveObject (vendor->book, _GNC_MOD_NAME, &vendor->guid);
|
|
|
|
}
|
2001-11-24 23:34:34 -06:00
|
|
|
|
2002-02-24 16:12:24 -06:00
|
|
|
static void _gncVendorCreate (GNCBook *book)
|
|
|
|
{
|
|
|
|
gncBusinessCreate (book, _GNC_MOD_NAME);
|
2001-11-24 23:34:34 -06:00
|
|
|
}
|
|
|
|
|
2002-02-24 16:12:24 -06:00
|
|
|
static void _gncVendorDestroy (GNCBook *book)
|
2001-11-24 23:34:34 -06:00
|
|
|
{
|
2002-02-24 16:12:24 -06:00
|
|
|
gncBusinessDestroy (book, _GNC_MOD_NAME);
|
|
|
|
}
|
2001-11-24 23:34:34 -06:00
|
|
|
|
2002-02-24 16:12:24 -06:00
|
|
|
static gboolean _gncVendorIsDirty (GNCBook *book)
|
|
|
|
{
|
|
|
|
return gncBusinessIsDirty (book, _GNC_MOD_NAME);
|
2001-11-24 23:34:34 -06:00
|
|
|
}
|
|
|
|
|
2002-03-04 13:34:52 -06:00
|
|
|
static void _gncVendorMarkClean (GNCBook *book)
|
|
|
|
{
|
|
|
|
gncBusinessSetDirtyFlag (book, _GNC_MOD_NAME, FALSE);
|
|
|
|
}
|
|
|
|
|
2002-02-03 14:01:08 -06:00
|
|
|
static void _gncVendorForeach (GNCBook *book, foreachObjectCB cb,
|
|
|
|
gpointer user_data)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
2002-02-03 14:01:08 -06:00
|
|
|
gncBusinessForeach (book, _GNC_MOD_NAME, cb, user_data);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
static const char * _gncVendorPrintable (gpointer item)
|
|
|
|
{
|
|
|
|
GncVendor *v;
|
|
|
|
|
|
|
|
if (!item) return NULL;
|
|
|
|
|
|
|
|
v = item;
|
|
|
|
return v->name;
|
|
|
|
}
|
|
|
|
|
2002-02-03 14:01:08 -06:00
|
|
|
static GncObject_t gncVendorDesc = {
|
|
|
|
GNC_OBJECT_VERSION,
|
2001-11-24 23:34:34 -06:00
|
|
|
_GNC_MOD_NAME,
|
2001-11-16 19:17:06 -06:00
|
|
|
"Vendor",
|
2001-11-24 23:34:34 -06:00
|
|
|
_gncVendorCreate,
|
2001-11-16 19:17:06 -06:00
|
|
|
_gncVendorDestroy,
|
2002-02-24 16:12:24 -06:00
|
|
|
_gncVendorIsDirty,
|
2002-03-04 13:34:52 -06:00
|
|
|
_gncVendorMarkClean,
|
2002-02-03 14:01:08 -06:00
|
|
|
_gncVendorForeach,
|
2001-11-16 19:17:06 -06:00
|
|
|
_gncVendorPrintable
|
|
|
|
};
|
|
|
|
|
|
|
|
gboolean gncVendorRegister (void)
|
|
|
|
{
|
2002-02-03 14:01:08 -06:00
|
|
|
static QueryObjectDef params[] = {
|
|
|
|
{ VENDOR_ID, QUERYCORE_STRING, (QueryAccess)gncVendorGetID },
|
|
|
|
{ VENDOR_NAME, QUERYCORE_STRING, (QueryAccess)gncVendorGetName },
|
2002-02-04 12:54:06 -06:00
|
|
|
{ VENDOR_ADDR, GNC_ADDRESS_MODULE_NAME, (QueryAccess)gncVendorGetAddr },
|
2002-02-24 16:12:24 -06:00
|
|
|
{ QUERY_PARAM_BOOK, GNC_ID_BOOK, (QueryAccess)gncVendorGetBook },
|
|
|
|
{ QUERY_PARAM_GUID, QUERYCORE_GUID, (QueryAccess)gncVendorGetGUID },
|
2003-01-14 21:49:51 -06:00
|
|
|
{ QUERY_PARAM_ACTIVE, QUERYCORE_BOOLEAN, (QueryAccess)gncVendorGetActive },
|
2002-02-03 14:01:08 -06:00
|
|
|
{ NULL },
|
|
|
|
};
|
|
|
|
|
2002-02-03 19:55:33 -06:00
|
|
|
gncQueryObjectRegister (_GNC_MOD_NAME, (QuerySort)gncVendorCompare, params);
|
2002-02-03 14:01:08 -06:00
|
|
|
|
|
|
|
return gncObjectRegister (&gncVendorDesc);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|
|
|
|
|
2002-03-02 20:17:07 -06:00
|
|
|
gint64 gncVendorNextID (GNCBook *book)
|
2001-11-16 19:17:06 -06:00
|
|
|
{
|
2002-03-02 20:17:07 -06:00
|
|
|
return gnc_book_get_counter (book, _GNC_MOD_NAME);
|
2001-11-16 19:17:06 -06:00
|
|
|
}
|