40 #include "gncBillTermP.h"
45 #define _GNC_MOD_NAME GNC_ID_BILLTERM
49 #define MAX_NAME_LEN 2048
50 #define MAX_DESCRIPTION_LEN 2048
51 #define MAX_TYPE_LEN 2048
53 static void set_invisible( gpointer data, gboolean value );
54 static gpointer bt_get_parent( gpointer data );
55 static void bt_set_parent( gpointer data, gpointer value );
56 static void bt_set_parent_guid( gpointer data, gpointer value );
58 #define TABLE_NAME "billterms"
59 #define TABLE_VERSION 2
64 {
"name", CT_STRING, MAX_NAME_LEN,
COL_NNUL,
"name" },
65 {
"description", CT_STRING, MAX_DESCRIPTION_LEN,
COL_NNUL, NULL, GNC_BILLTERM_DESC },
67 "refcount", CT_INT, 0,
COL_NNUL, NULL, NULL,
71 "invisible", CT_BOOLEAN, 0,
COL_NNUL, NULL, NULL,
75 "parent", CT_GUID, 0, 0, NULL, NULL,
78 {
"type", CT_STRING, MAX_TYPE_LEN,
COL_NNUL, NULL, GNC_BILLTERM_TYPE },
79 {
"duedays", CT_INT, 0, 0, 0, GNC_BILLTERM_DUEDAYS },
80 {
"discountdays", CT_INT, 0, 0, 0, GNC_BILLTERM_DISCDAYS },
81 {
"discount", CT_NUMERIC, 0, 0, 0, GNC_BILLTERM_DISCOUNT },
82 {
"cutoff", CT_INT, 0, 0, 0, GNC_BILLTERM_CUTOFF },
88 {
"parent", CT_GUID, 0, 0, NULL, NULL, NULL, (
QofSetterFunc)bt_set_parent_guid },
100 set_invisible( gpointer data, gboolean value )
104 g_return_if_fail( term != NULL );
108 gncBillTermMakeInvisible( term );
113 bt_get_parent( gpointer pObject )
119 g_return_val_if_fail( pObject != NULL, NULL );
120 g_return_val_if_fail( GNC_IS_BILLTERM(pObject), NULL );
122 billterm = GNC_BILLTERM(pObject);
123 pParent = gncBillTermGetParent( billterm );
124 if ( pParent == NULL )
133 return (gpointer)parent_guid;
137 bt_set_parent( gpointer data, gpointer value )
144 g_return_if_fail( data != NULL );
145 g_return_if_fail( GNC_IS_BILLTERM(data) );
147 billterm = GNC_BILLTERM(data);
151 parent = gncBillTermLookup( pBook, guid );
152 if ( parent != NULL )
154 gncBillTermSetParent( billterm, parent );
155 gncBillTermSetChild( parent, billterm );
161 bt_set_parent_guid( gpointer pObject, gpointer pValue )
166 g_return_if_fail( pObject != NULL );
167 g_return_if_fail( pValue != NULL );
175 GList** l_billterms_needing_parents )
180 g_return_val_if_fail( be != NULL, NULL );
181 g_return_val_if_fail( row != NULL, NULL );
184 pBillTerm = gncBillTermLookup( be->
book, guid );
185 if ( pBillTerm == NULL )
187 pBillTerm = gncBillTermCreate( be->
book );
194 if ( gncBillTermGetParent( pBillTerm ) == NULL )
197 g_assert( s != NULL );
199 s->billterm = pBillTerm;
200 s->have_guid = FALSE;
204 *l_billterms_needing_parents = g_list_prepend( *l_billterms_needing_parents, s );
212 qof_instance_mark_clean( QOF_INSTANCE(pBillTerm) );
223 g_return_if_fail( be != NULL );
227 gnc_sql_statement_dispose( stmt );
228 if ( result != NULL )
232 GList* l_billterms_needing_parents = NULL;
234 row = gnc_sql_result_get_first_row( result );
235 while ( row != NULL )
237 GncBillTerm* pBillTerm = load_single_billterm( be, row, &l_billterms_needing_parents );
238 if ( pBillTerm != NULL )
240 list = g_list_append( list, pBillTerm );
242 row = gnc_sql_result_get_next_row( result );
244 gnc_sql_result_dispose( result );
257 if ( l_billterms_needing_parents != NULL )
259 gboolean progress_made = TRUE;
262 while ( progress_made )
264 progress_made = FALSE;
265 for ( elem = l_billterms_needing_parents; elem != NULL; elem = g_list_next( elem ) )
268 bt_set_parent( s->billterm, &s->guid );
269 l_billterms_needing_parents = g_list_delete_link( l_billterms_needing_parents, elem );
270 progress_made = TRUE;
291 data->is_ok = gnc_sql_save_billterm( data->be, inst );
300 g_return_val_if_fail( be != NULL, FALSE );
314 g_return_if_fail( be != NULL );
321 else if ( version == 1 )
327 PINFO(
"Billterms table upgraded from version 1 to version %d\n", TABLE_VERSION);
335 g_return_val_if_fail( inst != NULL, FALSE );
336 g_return_val_if_fail( GNC_IS_BILLTERM(inst), FALSE );
337 g_return_val_if_fail( be != NULL, FALSE );
352 g_return_if_fail( be != NULL );
353 g_return_if_fail( row != NULL );
354 g_return_if_fail( pObject != NULL );
355 g_return_if_fail( table_row != NULL );
357 val = gnc_sql_row_get_value_at_col_name( row, table_row->
col_name );
358 if ( val != NULL && G_VALUE_HOLDS_STRING( val ) && g_value_get_string( val ) != NULL )
361 term = gncBillTermLookup( be->
book, &guid );
366 qof_instance_increase_editlevel (pObject);
368 qof_instance_decrease_editlevel (pObject);
372 (*setter)( pObject, (
const gpointer)term );
377 PWARN(
"Billterm ref '%s' not found", g_value_get_string( val ) );
383 = { load_billterm_guid,
390 gnc_billterm_sql_initialize(
void )
394 GNC_SQL_BACKEND_VERSION,
396 gnc_sql_save_billterm,
398 create_billterm_tables,
gboolean qof_object_register_backend(QofIdTypeConst type_name, const char *backend_name, gpointer be_data)
const GncGUID * qof_instance_get_guid(gconstpointer)
gint gnc_sql_get_table_version(const GncSqlBackend *be, const gchar *table_name)
QofBook * qof_instance_get_book(gconstpointer)
void gnc_sql_upgrade_table(GncSqlBackend *be, const gchar *table_name, const GncSqlColumnTableEntry *col_table)
#define G_LOG_DOMAIN
Functions providing the SX List as a plugin page.
#define PINFO(format, args...)
void gnc_sql_add_colname_to_list(const GncSqlColumnTableEntry *table_row, GList **pList)
load and save accounts data to SQL
GncSqlStatement * gnc_sql_create_select_statement(GncSqlBackend *be, const gchar *table_name)
gboolean string_to_guid(const gchar *string, GncGUID *guid)
gboolean gnc_sql_create_table(GncSqlBackend *be, const gchar *table_name, gint table_version, const GncSqlColumnTableEntry *col_table)
load and save data to SQL
void gnc_sql_register_col_type_handler(const gchar *colType, const GncSqlColumnTypeHandler *handler)
void gnc_sql_add_objectref_guid_col_info_to_list(const GncSqlBackend *be, const GncSqlColumnTableEntry *table_row, GList **pList)
gpointer(* QofAccessFunc)(gpointer object, const QofParam *param)
load and save accounts data to SQL
#define PWARN(format, args...)
const GncGUID * gnc_sql_load_guid(const GncSqlBackend *be, GncSqlRow *row)
gboolean gnc_sql_set_table_version(GncSqlBackend *be, const gchar *table_name, gint version)
void gnc_sql_add_gvalue_objectref_guid_to_slist(const GncSqlBackend *be, QofIdTypeConst obj_name, const gpointer pObject, const GncSqlColumnTableEntry *table_row, GSList **pList)
void gnc_sql_slots_load_for_list(GncSqlBackend *be, GList *list)
void qof_object_foreach(QofIdTypeConst type_name, QofBook *book, QofInstanceForeachCB cb, gpointer user_data)
GncSqlResult * gnc_sql_execute_select_statement(GncSqlBackend *be, GncSqlStatement *stmt)
void gnc_sql_load_object(const GncSqlBackend *be, GncSqlRow *row, QofIdTypeConst obj_name, gpointer pObject, const GncSqlColumnTableEntry *table)
const gchar * gobj_param_name
Business Invoice Interface.
gboolean gnc_sql_commit_standard_item(GncSqlBackend *be, QofInstance *inst, const gchar *tableName, QofIdTypeConst obj_name, const GncSqlColumnTableEntry *col_table)
void(* QofSetterFunc)(gpointer, gpointer)
const gchar * QofLogModule