r16358 - gnucash/branches/csv-import/src/import-export/csv - Added support for separate "Deposit" and "Withdrawal" columns
Benjamin Sperisen
lasindi at cvs.gnucash.org
Thu Jul 26 09:26:23 EDT 2007
Author: lasindi
Date: 2007-07-26 09:26:19 -0400 (Thu, 26 Jul 2007)
New Revision: 16358
Trac: http://svn.gnucash.org/trac/changeset/16358
Modified:
gnucash/branches/csv-import/src/import-export/csv/gnc-csv-import.c
gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.c
gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.h
Log:
Added support for separate "Deposit" and "Withdrawal" columns
Modified: gnucash/branches/csv-import/src/import-export/csv/gnc-csv-import.c
===================================================================
--- gnucash/branches/csv-import/src/import-export/csv/gnc-csv-import.c 2007-07-25 10:28:57 UTC (rev 16357)
+++ gnucash/branches/csv-import/src/import-export/csv/gnc-csv-import.c 2007-07-26 13:26:19 UTC (rev 16358)
@@ -217,7 +217,9 @@
static char* column_type_strs[GNC_CSV_NUM_COL_TYPES] = {N_("None"),
N_("Date"),
N_("Description"),
- N_("Amount")};
+ N_("Amount"),
+ N_("Deposit"),
+ N_("Withdrawal")};
/** Event handler for selecting a new date format.
* @param format_selector The combo box for selecting date formats
Modified: gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.c
===================================================================
--- gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.c 2007-07-25 10:28:57 UTC (rev 16357)
+++ gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.c 2007-07-26 13:26:19 UTC (rev 16358)
@@ -542,6 +542,7 @@
TransProperty* prop = g_new(TransProperty, 1);
prop->type = type;
prop->set = set;
+ prop->value = NULL;
switch(type)
{
@@ -566,7 +567,10 @@
* them, unlike types like char* ("Description"). */
case GNC_CSV_DATE:
case GNC_CSV_AMOUNT:
- g_free(prop->value);
+ case GNC_CSV_DEPOSIT:
+ case GNC_CSV_WITHDRAWAL:
+ if(prop->value != NULL)
+ g_free(prop->value);
break;
}
g_free(prop);
@@ -595,10 +599,12 @@
return TRUE;
case GNC_CSV_AMOUNT:
+ case GNC_CSV_DEPOSIT:
+ case GNC_CSV_WITHDRAWAL:
str_dupe = g_strdup(str); /* First, we make a copy so we can't mess up real data. */
/* Go through str_dupe looking for currency symbols. */
- for(possible_currency_symbol = str_dupe; possible_currency_symbol;
+ for(possible_currency_symbol = str_dupe; *possible_currency_symbol;
possible_currency_symbol = g_utf8_next_char(possible_currency_symbol))
{
if(g_unichar_type(g_utf8_get_char(possible_currency_symbol)) == G_UNICODE_CURRENCY_SYMBOL)
@@ -621,7 +627,6 @@
/* Translate the string (now clean of currency symbols) into a number. */
value = strtod(str_dupe, &endptr);
- prop->value = g_new(gnc_numeric, 1);
/* If this isn't a valid numeric string, this is an error. */
if(endptr != str_dupe + strlen(str_dupe))
@@ -632,8 +637,12 @@
g_free(str_dupe);
- *((gnc_numeric*)(prop->value)) = double_to_gnc_numeric(value, xaccAccountGetCommoditySCU(prop->set->account),
- GNC_RND_ROUND);
+ if(abs(value) > 0.00001)
+ {
+ prop->value = g_new(gnc_numeric, 1);
+ *((gnc_numeric*)(prop->value)) = double_to_gnc_numeric(value, xaccAccountGetCommoditySCU(prop->set->account),
+ GNC_RND_ROUND);
+ }
return TRUE;
}
return FALSE; /* We should never actually get here. */
@@ -669,21 +678,40 @@
}
/* TODO Comment */
+static void trans_add_split(Transaction* trans, Account* account, GNCBook* book,
+ gnc_numeric amount)
+{
+ Split* split = xaccMallocSplit(book);
+ xaccSplitSetAccount(split, account);
+ xaccSplitSetParent(split, trans);
+ xaccSplitSetAmount(split, amount);
+ xaccSplitSetValue(split, amount);
+ xaccSplitSetAction(split, "Deposit");
+}
+
+/* TODO Comment */
static Transaction* trans_property_list_to_trans(TransPropertyList* set)
{
Transaction* trans;
- Split* split;
GList* properties_begin = set->properties;
GNCBook* book = gnc_account_get_book(set->account);
gnc_commodity* currency = xaccAccountGetCommodity(set->account);
gnc_numeric amount;
+ gboolean alreadyHaveDepositOrWithdrawal = FALSE, noAmountYet = TRUE;
unsigned int essential_properties_left = 2;
while(set->properties != NULL)
{
if(((TransProperty*)(set->properties->data))->essential)
essential_properties_left--;
-
+ else if(((TransProperty*)(set->properties->data))->type == GNC_CSV_DEPOSIT ||
+ ((TransProperty*)(set->properties->data))->type == GNC_CSV_WITHDRAWAL)
+ {
+ if(alreadyHaveDepositOrWithdrawal)
+ essential_properties_left--;
+ else
+ alreadyHaveDepositOrWithdrawal = TRUE;
+ }
set->properties = g_list_next(set->properties);
}
if(essential_properties_left)
@@ -708,18 +736,31 @@
xaccTransSetDescription(trans, (char*)(prop->value));
break;
+ case GNC_CSV_DEPOSIT:
+ case GNC_CSV_WITHDRAWAL:
case GNC_CSV_AMOUNT:
- amount = *((gnc_numeric*)(prop->value));
- split = xaccMallocSplit(book);
- xaccSplitSetAccount(split, set->account);
- xaccSplitSetParent(split, trans);
- xaccSplitSetAmount(split, amount);
- xaccSplitSetValue(split, amount);
- xaccSplitSetAction(split, "Deposit");
+ if(noAmountYet && prop->value != NULL)
+ {
+ /* Withdrawals are just negative deposits. */
+ if(prop->type == GNC_CSV_WITHDRAWAL)
+ amount = gnc_numeric_neg(*((gnc_numeric*)(prop->value)));
+ else
+ amount = *((gnc_numeric*)(prop->value));
+
+ trans_add_split(trans, set->account, book, amount);
+
+ noAmountYet = FALSE;
+ }
}
set->properties = g_list_next(set->properties);
}
+ if(noAmountYet)
+ {
+ amount = double_to_gnc_numeric(0.0, xaccAccountGetCommoditySCU(set->account), GNC_RND_ROUND);
+ trans_add_split(trans, set->account, book, amount);
+ }
+
return trans;
}
Modified: gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.h
===================================================================
--- gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.h 2007-07-25 10:28:57 UTC (rev 16357)
+++ gnucash/branches/csv-import/src/import-export/csv/gnc-csv-model.h 2007-07-26 13:26:19 UTC (rev 16358)
@@ -42,6 +42,8 @@
GNC_CSV_DATE,
GNC_CSV_DESCRIPTION,
GNC_CSV_AMOUNT,
+ GNC_CSV_DEPOSIT,
+ GNC_CSV_WITHDRAWAL,
GNC_CSV_NUM_COL_TYPES};
/** Enumeration for error types. These are the different types of
More information about the gnucash-changes
mailing list