r15158 - gnucash/branches/gda-dev/src/backend/gda - Save/restore budget recurrence information

Phil Longstaff plongstaff at cvs.gnucash.org
Tue Nov 28 11:24:02 EST 2006


Author: plongstaff
Date: 2006-11-28 11:24:00 -0500 (Tue, 28 Nov 2006)
New Revision: 15158
Trac: http://svn.gnucash.org/trac/changeset/15158

Modified:
   gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.h
   gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c
Log:
Save/restore budget recurrence information


Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.c	2006-11-28 09:10:57 UTC (rev 15157)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.c	2006-11-28 16:24:00 UTC (rev 15158)
@@ -415,7 +415,7 @@
 		{ load_guid, render_guid, create_guid_col };
 /* ----------------------------------------------------------------- */
 static void
-load_date( GdaDataModel* pModel, gint row,
+load_timespec( GdaDataModel* pModel, gint row,
 			QofSetterFunc setter, gpointer pObject,
 			const col_cvt_t* table )
 {
@@ -436,7 +436,7 @@
 }
 
 static gchar*
-render_date( QofIdTypeConst obj_name, gpointer pObject,
+render_timespec( QofIdTypeConst obj_name, gpointer pObject,
 				const col_cvt_t* table_row, gboolean include_name )
 {
 	gchar* buf;
@@ -464,7 +464,7 @@
 }
 
 static void
-create_date_col( GdaServerProvider* server, GdaConnection* cnn,
+create_timespec_col( GdaServerProvider* server, GdaConnection* cnn,
 			xmlNodePtr array_data, const col_cvt_t* table_row )
 {
 	const gchar* dbms_type;
@@ -475,8 +475,54 @@
 					dbms_type, table_row->size, table_row->flags );
 }
 
+static col_type_handler_t timespec_handler =
+		{ load_timespec, render_timespec, create_timespec_col };
+/* ----------------------------------------------------------------- */
+static void
+load_date( GdaDataModel* pModel, gint row,
+			QofSetterFunc setter, gpointer pObject,
+			const col_cvt_t* table )
+{
+	const GValue* val;
+	GDate* date;
+
+	val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+	if( gda_value_is_null( val ) ) {
+		(*setter)( pObject, NULL );
+	} else {
+		date = (GDate*)g_value_get_boxed( val );
+		(*setter)( pObject, date );
+	}
+}
+
+static gchar*
+render_date( QofIdTypeConst obj_name, gpointer pObject,
+				const col_cvt_t* table_row, gboolean include_name )
+{
+	gchar* buf;
+	const gchar* col_name = "";
+	const gchar* equals = "";
+	GDate* date;
+
+	if( include_name ) {
+		col_name = table_row->col_name;
+		equals = "=";
+	}
+	date = (GDate*)(*table_row->getter)( pObject );
+	if( date != NULL ) {
+		buf = g_strdup_printf( "%s%s'%d-%d-%d'", col_name, equals,
+									g_date_get_year( date ),
+									g_date_get_month( date ),
+									g_date_get_day( date ) );
+	} else {
+		buf = g_strdup_printf( "%s%sNULL", col_name, equals );
+	}
+
+	return buf;
+}
+
 static col_type_handler_t date_handler =
-		{ load_date, render_date, create_date_col };
+		{ load_date, render_date, create_timespec_col };
 /* ----------------------------------------------------------------- */
 static void
 load_numeric( GdaDataModel* pModel, gint row,
@@ -594,6 +640,10 @@
 			break;
 				
 		case CT_TIMESPEC:
+			pHandler = &timespec_handler;
+			break;
+
+		case CT_GDATE:
 			pHandler = &date_handler;
 			break;
 

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.h
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.h	2006-11-28 09:10:57 UTC (rev 15157)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.h	2006-11-28 16:24:00 UTC (rev 15158)
@@ -82,6 +82,7 @@
 	CT_INT,
 	CT_INT64,
 	CT_TIMESPEC,
+	CT_GDATE,
 	CT_NUMERIC,
 	CT_DOUBLE,
 	CT_BOOLEAN

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c	2006-11-28 09:10:57 UTC (rev 15157)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c	2006-11-28 16:24:00 UTC (rev 15158)
@@ -40,15 +40,23 @@
 #include "gnc-slots-gda.h"
 
 #include "gnc-budget.h"
+#include "Recurrence.h"
 
 #define BUDGET_TABLE "budgets"
 
 static QofLogModule log_module = GNC_MOD_BACKEND;
 
 static void retrieve_guid( gpointer pObject, const gpointer pValue );
+static gpointer get_recurrence_mult( gpointer pObject );
+static void set_recurrence_mult( gpointer pObject, const gpointer pValue );
+static gpointer get_recurrence_period_type( gpointer pObject );
+static void set_recurrence_period_type( gpointer pObject, const gpointer pValue );
+static gpointer get_recurrence_period_start( gpointer pObject );
+static void set_recurrence_period_start( gpointer pObject, const gpointer pValue );
 
 #define BUDGET_MAX_NAME_LEN 50
 #define BUDGET_MAX_DESCRIPTION_LEN 500
+#define BUDGET_MAX_RECURRENCE_PERIOD_TYPE_LEN 50
 
 static col_cvt_t col_table[] =
 {
@@ -58,6 +66,12 @@
 	{ "name",			CT_STRING,	BUDGET_MAX_NAME_LEN, COL_NNUL,	"name" },
 	{ "description",	CT_STRING,	BUDGET_MAX_DESCRIPTION_LEN, 0,	"description" },
 	{ "num_periods",	CT_INT,		0, COL_NNUL, "num_periods" },
+	{ "recurrence_mult", CT_INT,	0, COL_NNUL, NULL,
+			get_recurrence_mult, set_recurrence_mult },
+	{ "recurrence_period_type", CT_STRING, BUDGET_MAX_RECURRENCE_PERIOD_TYPE_LEN,
+			COL_NNUL, NULL, get_recurrence_period_type, set_recurrence_period_type },
+	{ "recurrence_period_start", CT_GDATE, 0, COL_NNUL, NULL,
+			get_recurrence_period_start, set_recurrence_period_start },
 	{ NULL }
 };
 
@@ -79,6 +93,66 @@
 	*ppGuid = guid;
 }
 
+static gpointer
+get_recurrence_mult( gpointer pObject )
+{
+	GncBudget* budget = (GncBudget*)pObject;
+	const Recurrence* r = gnc_budget_get_recurrence( budget );
+	guint m = r->mult;
+
+	return (gpointer)m;
+}
+
+static void
+set_recurrence_mult( gpointer pObject, gpointer pValue )
+{
+	GncBudget* budget = (GncBudget*)pObject;
+	Recurrence* r = (Recurrence*)gnc_budget_get_recurrence( budget );
+	guint m = (guint)pValue;
+
+	r->mult = m;
+}
+
+static gpointer
+get_recurrence_period_type( gpointer pObject )
+{
+	GncBudget* budget = (GncBudget*)pObject;
+	const Recurrence* r = gnc_budget_get_recurrence( budget );
+
+	return (gpointer)recurrencePeriodTypeToString(
+							recurrenceGetPeriodType( r ) );
+}
+
+static void
+set_recurrence_period_type( gpointer pObject, gpointer pValue )
+{
+	GncBudget* budget = (GncBudget*)pObject;
+	Recurrence* r = (Recurrence*)gnc_budget_get_recurrence( budget );
+
+	r->ptype = recurrencePeriodTypeFromString( (gchar*)pValue );
+}
+
+static gpointer
+get_recurrence_period_start( gpointer pObject )
+{
+	GncBudget* budget = (GncBudget*)pObject;
+	const Recurrence* r = gnc_budget_get_recurrence( budget );
+	static GDate date;
+
+	date = recurrenceGetDate( r );
+	return (gpointer)&date;
+}
+
+static void
+set_recurrence_period_start( gpointer pObject, gpointer pValue )
+{
+	GncBudget* budget = (GncBudget*)pObject;
+	Recurrence* r = (Recurrence*)gnc_budget_get_recurrence( budget );
+	GDate* date = (GDate*)pValue;
+
+	r->start = *date;
+}
+
 /* ================================================================= */
 static GncBudget*
 load_budget( GncGdaBackend* be, GdaDataModel* pModel, int row,



More information about the gnucash-changes mailing list