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 = ×pec_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