mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
This patch just changes the white space to be of a consistent format.
This commit is contained in:
parent
ba1f8cb1c6
commit
ea03301651
@ -65,9 +65,9 @@ void csv_export_assistant_file_page_prepare (GtkAssistant *assistant, gpointer u
|
|||||||
void csv_export_assistant_finish_page_prepare (GtkAssistant *assistant, gpointer user_data);
|
void csv_export_assistant_finish_page_prepare (GtkAssistant *assistant, gpointer user_data);
|
||||||
void csv_export_assistant_summary_page_prepare (GtkAssistant *assistant, gpointer user_data);
|
void csv_export_assistant_summary_page_prepare (GtkAssistant *assistant, gpointer user_data);
|
||||||
|
|
||||||
void csv_export_quote_cb (GtkToggleButton *button, gpointer user_data );
|
void csv_export_quote_cb (GtkToggleButton *button, gpointer user_data);
|
||||||
void csv_export_sep_cb (GtkWidget *radio, gpointer user_data );
|
void csv_export_sep_cb (GtkWidget *radio, gpointer user_data);
|
||||||
void csv_export_custom_entry_cb (GtkWidget *widget, gpointer user_data );
|
void csv_export_custom_entry_cb (GtkWidget *widget, gpointer user_data);
|
||||||
|
|
||||||
void csv_export_show_range_cb (GtkRadioButton *button, gpointer user_data);
|
void csv_export_show_range_cb (GtkRadioButton *button, gpointer user_data);
|
||||||
void csv_export_start_date_cb (GtkWidget *radio, gpointer user_data);
|
void csv_export_start_date_cb (GtkWidget *radio, gpointer user_data);
|
||||||
@ -115,11 +115,11 @@ csv_export_file_chooser_confirm_cb (GtkWidget *button, CsvExportInfo *info)
|
|||||||
|
|
||||||
gtk_assistant_set_page_complete (assistant, page, FALSE);
|
gtk_assistant_set_page_complete (assistant, page, FALSE);
|
||||||
|
|
||||||
file_name = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(info->file_chooser ));
|
file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(info->file_chooser));
|
||||||
|
|
||||||
if (file_name)
|
if (file_name)
|
||||||
{
|
{
|
||||||
if (g_file_test(file_name, G_FILE_TEST_EXISTS ))
|
if (g_file_test (file_name, G_FILE_TEST_EXISTS))
|
||||||
{
|
{
|
||||||
const char *format = _("The file %s already exists. "
|
const char *format = _("The file %s already exists. "
|
||||||
"Are you sure you want to overwrite it?");
|
"Are you sure you want to overwrite it?");
|
||||||
@ -129,25 +129,25 @@ csv_export_file_chooser_confirm_cb (GtkWidget *button, CsvExportInfo *info)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
info->file_name = g_strdup(file_name);
|
info->file_name = g_strdup (file_name);
|
||||||
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_name)
|
if (file_name)
|
||||||
{
|
{
|
||||||
gchar *filepath = gnc_uri_get_path ( file_name );
|
gchar *filepath = gnc_uri_get_path (file_name);
|
||||||
gchar *filedir = g_path_get_dirname( filepath );
|
gchar *filedir = g_path_get_dirname (filepath);
|
||||||
info->starting_dir = g_strdup(filedir);
|
info->starting_dir = g_strdup (filedir);
|
||||||
g_free ( filedir );
|
g_free (filedir);
|
||||||
g_free ( filepath );
|
g_free (filepath);
|
||||||
}
|
}
|
||||||
g_free(file_name);
|
g_free (file_name);
|
||||||
|
|
||||||
DEBUG("file_name selected is %s", info->file_name);
|
DEBUG("file_name selected is %s", info->file_name);
|
||||||
DEBUG("starting directory is %s", info->starting_dir);
|
DEBUG("starting directory is %s", info->starting_dir);
|
||||||
|
|
||||||
/* Step to next page if page is complete */
|
/* Step to next page if page is complete */
|
||||||
if(gtk_assistant_get_page_complete(assistant, page))
|
if(gtk_assistant_get_page_complete (assistant, page))
|
||||||
gtk_assistant_set_current_page (assistant, num + 1);
|
gtk_assistant_set_current_page (assistant, num + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ csv_export_file_chooser_confirm_cb (GtkWidget *button, CsvExportInfo *info)
|
|||||||
*
|
*
|
||||||
* call back for type of separartor required
|
* call back for type of separartor required
|
||||||
*******************************************************/
|
*******************************************************/
|
||||||
void csv_export_sep_cb (GtkWidget *radio, gpointer user_data )
|
void csv_export_sep_cb (GtkWidget *radio, gpointer user_data)
|
||||||
{
|
{
|
||||||
CsvExportInfo *info = user_data;
|
CsvExportInfo *info = user_data;
|
||||||
const gchar *name;
|
const gchar *name;
|
||||||
@ -166,28 +166,28 @@ void csv_export_sep_cb (GtkWidget *radio, gpointer user_data )
|
|||||||
gint num = gtk_assistant_get_current_page (assistant);
|
gint num = gtk_assistant_get_current_page (assistant);
|
||||||
GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
|
GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
|
||||||
|
|
||||||
if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)))
|
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(radio)))
|
||||||
{
|
{
|
||||||
LEAVE("1st callback of pair. Defer to 2nd callback.");
|
LEAVE("1st callback of pair. Defer to 2nd callback.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = gtk_buildable_get_name(GTK_BUILDABLE(radio));
|
name = gtk_buildable_get_name (GTK_BUILDABLE(radio));
|
||||||
|
|
||||||
gtk_widget_set_sensitive(info->custom_entry, FALSE);
|
gtk_widget_set_sensitive (info->custom_entry, FALSE);
|
||||||
info->use_custom = FALSE;
|
info->use_custom = FALSE;
|
||||||
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
||||||
|
|
||||||
if (g_strcmp0(name, "comma_radio") == 0)
|
if (g_strcmp0 (name, "comma_radio") == 0)
|
||||||
info->separator_str = ",";
|
info->separator_str = ",";
|
||||||
if (g_strcmp0(name, "colon_radio") == 0)
|
if (g_strcmp0 (name, "colon_radio") == 0)
|
||||||
info->separator_str = ":";
|
info->separator_str = ":";
|
||||||
if (g_strcmp0(name, "semicolon_radio") == 0)
|
if (g_strcmp0 (name, "semicolon_radio") == 0)
|
||||||
info->separator_str = ";";
|
info->separator_str = ";";
|
||||||
|
|
||||||
if (g_strcmp0(name, "custom_radio") == 0)
|
if (g_strcmp0 (name, "custom_radio") == 0)
|
||||||
{
|
{
|
||||||
gtk_widget_set_sensitive(info->custom_entry, TRUE);
|
gtk_widget_set_sensitive (info->custom_entry, TRUE);
|
||||||
info->use_custom = TRUE;
|
info->use_custom = TRUE;
|
||||||
if (gtk_entry_get_text_length (GTK_ENTRY(info->custom_entry)) == 0)
|
if (gtk_entry_get_text_length (GTK_ENTRY(info->custom_entry)) == 0)
|
||||||
gtk_assistant_set_page_complete (assistant, page, FALSE);
|
gtk_assistant_set_page_complete (assistant, page, FALSE);
|
||||||
@ -200,11 +200,11 @@ void csv_export_sep_cb (GtkWidget *radio, gpointer user_data )
|
|||||||
*
|
*
|
||||||
* call back for use of quotes
|
* call back for use of quotes
|
||||||
*******************************************************/
|
*******************************************************/
|
||||||
void csv_export_quote_cb (GtkToggleButton *button, gpointer user_data )
|
void csv_export_quote_cb (GtkToggleButton *button, gpointer user_data)
|
||||||
{
|
{
|
||||||
CsvExportInfo *info = user_data;
|
CsvExportInfo *info = user_data;
|
||||||
|
|
||||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
|
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button)))
|
||||||
info->use_quotes = TRUE;
|
info->use_quotes = TRUE;
|
||||||
else
|
else
|
||||||
info->use_quotes = FALSE;
|
info->use_quotes = FALSE;
|
||||||
@ -216,7 +216,7 @@ void csv_export_quote_cb (GtkToggleButton *button, gpointer user_data )
|
|||||||
*
|
*
|
||||||
* call back for custom separator
|
* call back for custom separator
|
||||||
*******************************************************/
|
*******************************************************/
|
||||||
void csv_export_custom_entry_cb (GtkWidget *widget, gpointer user_data )
|
void csv_export_custom_entry_cb (GtkWidget *widget, gpointer user_data)
|
||||||
{
|
{
|
||||||
CsvExportInfo *info = user_data;
|
CsvExportInfo *info = user_data;
|
||||||
const gchar *custom_str;
|
const gchar *custom_str;
|
||||||
@ -225,8 +225,8 @@ void csv_export_custom_entry_cb (GtkWidget *widget, gpointer user_data )
|
|||||||
gint num = gtk_assistant_get_current_page (assistant);
|
gint num = gtk_assistant_get_current_page (assistant);
|
||||||
GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
|
GtkWidget *page = gtk_assistant_get_nth_page (assistant, num);
|
||||||
|
|
||||||
custom_str = gtk_entry_get_text(GTK_ENTRY(info->custom_entry));
|
custom_str = gtk_entry_get_text (GTK_ENTRY(info->custom_entry));
|
||||||
info->separator_str = strdup(custom_str);
|
info->separator_str = strdup (custom_str);
|
||||||
|
|
||||||
if (info->use_custom == TRUE && gtk_entry_get_text_length (GTK_ENTRY(info->custom_entry)) == 0)
|
if (info->use_custom == TRUE && gtk_entry_get_text_length (GTK_ENTRY(info->custom_entry)) == 0)
|
||||||
|
|
||||||
@ -250,7 +250,7 @@ void load_settings (CsvExportInfo *info)
|
|||||||
info->starting_dir = NULL;
|
info->starting_dir = NULL;
|
||||||
|
|
||||||
/* The default directory for the user to select files. */
|
/* The default directory for the user to select files. */
|
||||||
info->starting_dir = gnc_get_default_directory(GNC_PREFS_GROUP);
|
info->starting_dir = gnc_get_default_directory (GNC_PREFS_GROUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* =============================================================== */
|
/* =============================================================== */
|
||||||
@ -272,11 +272,11 @@ csv_export_cursor_changed_cb (GtkWidget *widget, gpointer user_data)
|
|||||||
account = gnc_tree_view_account_get_cursor_account (account_tree);
|
account = gnc_tree_view_account_get_cursor_account (account_tree);
|
||||||
if (!account)
|
if (!account)
|
||||||
{
|
{
|
||||||
gtk_widget_set_sensitive(info->csva.select_button, FALSE);
|
gtk_widget_set_sensitive (info->csva.select_button, FALSE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
num_children = gnc_tree_view_account_count_children(account_tree, account);
|
num_children = gnc_tree_view_account_count_children (account_tree, account);
|
||||||
gtk_widget_set_sensitive(info->csva.select_button, num_children > 0);
|
gtk_widget_set_sensitive (info->csva.select_button, num_children > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -318,7 +318,7 @@ show_acct_type_accounts (CsvExportInfo *info)
|
|||||||
Viewinfo.include_type[type] = FALSE;
|
Viewinfo.include_type[type] = FALSE;
|
||||||
}
|
}
|
||||||
gnc_tree_view_account_set_view_info (tree, &Viewinfo);
|
gnc_tree_view_account_set_view_info (tree, &Viewinfo);
|
||||||
csv_export_cursor_changed_cb(GTK_WIDGET(tree), info);
|
csv_export_cursor_changed_cb (GTK_WIDGET(tree), info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -482,41 +482,33 @@ get_filter_times (CsvExportInfo *info)
|
|||||||
{
|
{
|
||||||
time64 time_val;
|
time64 time_val;
|
||||||
|
|
||||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(info->csvd.start_date_choose)))
|
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.start_date_choose)))
|
||||||
{
|
{
|
||||||
time_val = gnc_date_edit_get_date(GNC_DATE_EDIT(info->csvd.start_date));
|
time_val = gnc_date_edit_get_date (GNC_DATE_EDIT(info->csvd.start_date));
|
||||||
time_val = gnc_time64_get_day_start(time_val);
|
time_val = gnc_time64_get_day_start (time_val);
|
||||||
info->csvd.start_time = time_val;
|
info->csvd.start_time = time_val;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(info->csvd.start_date_today)))
|
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.start_date_today)))
|
||||||
{
|
|
||||||
info->csvd.start_time = gnc_time64_get_today_start();
|
info->csvd.start_time = gnc_time64_get_today_start();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
info->csvd.start_time = 0;
|
info->csvd.start_time = 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(info->csvd.end_date_choose)))
|
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.end_date_choose)))
|
||||||
{
|
{
|
||||||
time_val = gnc_date_edit_get_date(GNC_DATE_EDIT(info->csvd.end_date));
|
time_val = gnc_date_edit_get_date (GNC_DATE_EDIT(info->csvd.end_date));
|
||||||
time_val = gnc_time64_get_day_end(time_val);
|
time_val = gnc_time64_get_day_end (time_val);
|
||||||
info->csvd.end_time = time_val;
|
info->csvd.end_time = time_val;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(info->csvd.start_date_today)))
|
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.start_date_today)))
|
||||||
{
|
|
||||||
info->csvd.end_time = gnc_time64_get_today_end();
|
info->csvd.end_time = gnc_time64_get_today_end();
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
info->csvd.end_time = gnc_time (NULL);
|
info->csvd.end_time = gnc_time (NULL);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -531,10 +523,10 @@ csv_export_show_range_cb (GtkRadioButton *button, gpointer user_data)
|
|||||||
CsvExportInfo *info = user_data;
|
CsvExportInfo *info = user_data;
|
||||||
gboolean active;
|
gboolean active;
|
||||||
|
|
||||||
g_return_if_fail(GTK_IS_RADIO_BUTTON(button));
|
g_return_if_fail (GTK_IS_RADIO_BUTTON(button));
|
||||||
|
|
||||||
active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
|
active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button));
|
||||||
gtk_widget_set_sensitive(info->csvd.table, active);
|
gtk_widget_set_sensitive (info->csvd.table, active);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -548,7 +540,7 @@ csv_export_date_changed_cb (GtkWidget *w, gpointer user_data)
|
|||||||
{
|
{
|
||||||
CsvExportInfo *info = user_data;
|
CsvExportInfo *info = user_data;
|
||||||
|
|
||||||
get_filter_times(info);
|
get_filter_times (info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -564,18 +556,18 @@ csv_export_start_date_cb (GtkWidget *radio, gpointer user_data)
|
|||||||
const gchar *name;
|
const gchar *name;
|
||||||
gboolean active;
|
gboolean active;
|
||||||
|
|
||||||
g_return_if_fail(GTK_IS_RADIO_BUTTON(radio));
|
g_return_if_fail (GTK_IS_RADIO_BUTTON(radio));
|
||||||
|
|
||||||
if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)))
|
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(radio)))
|
||||||
{
|
{
|
||||||
LEAVE("1st callback of pair. Defer to 2nd callback.");
|
LEAVE("1st callback of pair. Defer to 2nd callback.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = gtk_buildable_get_name(GTK_BUILDABLE(radio));
|
name = gtk_buildable_get_name (GTK_BUILDABLE(radio));
|
||||||
active = ( g_strcmp0(name, g_strdup("start_date_choose")) == 0 ? 1 : 0 );
|
active = (g_strcmp0 (name, "start_date_choose") == 0 ? 1 : 0 );
|
||||||
gtk_widget_set_sensitive(info->csvd.start_date, active);
|
gtk_widget_set_sensitive (info->csvd.start_date, active);
|
||||||
get_filter_times(info);
|
get_filter_times (info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -591,18 +583,18 @@ csv_export_end_date_cb (GtkWidget *radio, gpointer user_data)
|
|||||||
const gchar *name;
|
const gchar *name;
|
||||||
gboolean active;
|
gboolean active;
|
||||||
|
|
||||||
g_return_if_fail(GTK_IS_RADIO_BUTTON(radio));
|
g_return_if_fail (GTK_IS_RADIO_BUTTON(radio));
|
||||||
|
|
||||||
if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)))
|
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(radio)))
|
||||||
{
|
{
|
||||||
LEAVE("1st callback of pair. Defer to 2nd callback.");
|
LEAVE("1st callback of pair. Defer to 2nd callback.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = gtk_buildable_get_name(GTK_BUILDABLE(radio));
|
name = gtk_buildable_get_name (GTK_BUILDABLE(radio));
|
||||||
active = ( g_strcmp0(name, g_strdup("end_date_choose")) == 0 ? 1 : 0 );
|
active = (g_strcmp0 (name, "end_date_choose") == 0 ? 1 : 0 );
|
||||||
gtk_widget_set_sensitive(info->csvd.end_date, active);
|
gtk_widget_set_sensitive (info->csvd.end_date, active);
|
||||||
get_filter_times(info);
|
get_filter_times (info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -621,8 +613,8 @@ get_earliest_in_book (QofBook *book)
|
|||||||
GList *res;
|
GList *res;
|
||||||
time64 earliest;
|
time64 earliest;
|
||||||
|
|
||||||
q = qof_query_create_for(GNC_ID_SPLIT);
|
q = qof_query_create_for (GNC_ID_SPLIT);
|
||||||
qof_query_set_max_results(q, 1);
|
qof_query_set_max_results (q, 1);
|
||||||
qof_query_set_book (q, book);
|
qof_query_set_book (q, book);
|
||||||
|
|
||||||
/* Sort by transaction date */
|
/* Sort by transaction date */
|
||||||
@ -703,7 +695,7 @@ csv_export_assistant_file_page_prepare (GtkAssistant *assistant,
|
|||||||
|
|
||||||
/* Set the default directory */
|
/* Set the default directory */
|
||||||
if (info->starting_dir)
|
if (info->starting_dir)
|
||||||
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(info->file_chooser), info->starting_dir);
|
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(info->file_chooser), info->starting_dir);
|
||||||
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(info->file_chooser), "");
|
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER(info->file_chooser), "");
|
||||||
|
|
||||||
/* Disable the Forward Assistant Button */
|
/* Disable the Forward Assistant Button */
|
||||||
@ -727,7 +719,7 @@ csv_export_assistant_finish_page_prepare (GtkAssistant *assistant,
|
|||||||
text = g_strdup_printf (gettext (finish_trans_string), info->file_name, info->csva.num_accounts);
|
text = g_strdup_printf (gettext (finish_trans_string), info->file_name, info->csva.num_accounts);
|
||||||
|
|
||||||
gtk_label_set_text (GTK_LABEL(info->finish_label), text);
|
gtk_label_set_text (GTK_LABEL(info->finish_label), text);
|
||||||
g_free(text);
|
g_free (text);
|
||||||
|
|
||||||
/* Enable the Assistant Buttons */
|
/* Enable the Assistant Buttons */
|
||||||
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
||||||
@ -740,7 +732,7 @@ csv_export_assistant_summary_page_prepare (GtkAssistant *assistant,
|
|||||||
{
|
{
|
||||||
CsvExportInfo *info = user_data;
|
CsvExportInfo *info = user_data;
|
||||||
gchar *text, *mtext;
|
gchar *text, *mtext;
|
||||||
gnc_set_default_directory(GNC_PREFS_GROUP, info->starting_dir);
|
gnc_set_default_directory (GNC_PREFS_GROUP, info->starting_dir);
|
||||||
|
|
||||||
if (info->failed)
|
if (info->failed)
|
||||||
text = _("There was a problem with the export, this could be due to lack of space, "
|
text = _("There was a problem with the export, this could be due to lack of space, "
|
||||||
@ -749,11 +741,11 @@ csv_export_assistant_summary_page_prepare (GtkAssistant *assistant,
|
|||||||
else
|
else
|
||||||
text = _("File exported successfully!\n");
|
text = _("File exported successfully!\n");
|
||||||
|
|
||||||
mtext = g_strdup_printf("<span size=\"medium\"><b>%s</b></span>", text);
|
mtext = g_strdup_printf ("<span size=\"medium\"><b>%s</b></span>", text);
|
||||||
|
|
||||||
gtk_label_set_markup(GTK_LABEL(info->summary_label), mtext);
|
gtk_label_set_markup (GTK_LABEL(info->summary_label), mtext);
|
||||||
|
|
||||||
g_free(mtext);
|
g_free (mtext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -819,10 +811,10 @@ csv_export_close_handler (gpointer user_data)
|
|||||||
{
|
{
|
||||||
CsvExportInfo *info = user_data;
|
CsvExportInfo *info = user_data;
|
||||||
|
|
||||||
g_free(info->file_name);
|
g_free (info->file_name);
|
||||||
g_free(info->starting_dir);
|
g_free (info->starting_dir);
|
||||||
|
|
||||||
gnc_save_window_size(GNC_PREFS_GROUP, GTK_WINDOW(info->window));
|
gnc_save_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->window));
|
||||||
gtk_widget_destroy (info->window);
|
gtk_widget_destroy (info->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -854,7 +846,7 @@ csv_export_assistant_create (CsvExportInfo *info)
|
|||||||
info->start_page = GTK_WIDGET(gtk_builder_get_object(builder, "start_page"));
|
info->start_page = GTK_WIDGET(gtk_builder_get_object(builder, "start_page"));
|
||||||
info->start_label = GTK_WIDGET(gtk_builder_get_object(builder, "start_label"));
|
info->start_label = GTK_WIDGET(gtk_builder_get_object(builder, "start_label"));
|
||||||
info->custom_entry = GTK_WIDGET(gtk_builder_get_object(builder, "custom_entry"));
|
info->custom_entry = GTK_WIDGET(gtk_builder_get_object(builder, "custom_entry"));
|
||||||
gtk_widget_set_sensitive(info->custom_entry, FALSE);
|
gtk_widget_set_sensitive (info->custom_entry, FALSE);
|
||||||
|
|
||||||
/* Account Page */
|
/* Account Page */
|
||||||
info->account_page = GTK_WIDGET(gtk_builder_get_object(builder, "account_page"));
|
info->account_page = GTK_WIDGET(gtk_builder_get_object(builder, "account_page"));
|
||||||
@ -878,15 +870,15 @@ csv_export_assistant_create (CsvExportInfo *info)
|
|||||||
|
|
||||||
selection = gtk_tree_view_get_selection (tree_view);
|
selection = gtk_tree_view_get_selection (tree_view);
|
||||||
gtk_tree_selection_set_mode (selection, GTK_SELECTION_EXTENDED);
|
gtk_tree_selection_set_mode (selection, GTK_SELECTION_EXTENDED);
|
||||||
g_signal_connect (G_OBJECT (selection), "changed",
|
g_signal_connect (G_OBJECT(selection), "changed",
|
||||||
G_CALLBACK (csv_export_account_changed_cb), info);
|
G_CALLBACK(csv_export_account_changed_cb), info);
|
||||||
|
|
||||||
gtk_widget_show (info->csva.account_treeview);
|
gtk_widget_show (info->csva.account_treeview);
|
||||||
box = GTK_WIDGET(gtk_builder_get_object (builder, "account_scroll"));
|
box = GTK_WIDGET(gtk_builder_get_object (builder, "account_scroll"));
|
||||||
gtk_container_add (GTK_CONTAINER (box), info->csva.account_treeview);
|
gtk_container_add (GTK_CONTAINER(box), info->csva.account_treeview);
|
||||||
|
|
||||||
label = GTK_WIDGET(gtk_builder_get_object (builder, "accounts_label"));
|
label = GTK_WIDGET(gtk_builder_get_object (builder, "accounts_label"));
|
||||||
gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_WIDGET(tree_view));
|
gtk_label_set_mnemonic_widget (GTK_LABEL(label), GTK_WIDGET(tree_view));
|
||||||
|
|
||||||
income_radio = GTK_WIDGET(gtk_builder_get_object (builder, "income_radio"));
|
income_radio = GTK_WIDGET(gtk_builder_get_object (builder, "income_radio"));
|
||||||
expense_radio = GTK_WIDGET(gtk_builder_get_object (builder, "expense_radio"));
|
expense_radio = GTK_WIDGET(gtk_builder_get_object (builder, "expense_radio"));
|
||||||
@ -896,25 +888,25 @@ csv_export_assistant_create (CsvExportInfo *info)
|
|||||||
liab_eq_radio = GTK_WIDGET(gtk_builder_get_object (builder, "liab_eq_radio"));
|
liab_eq_radio = GTK_WIDGET(gtk_builder_get_object (builder, "liab_eq_radio"));
|
||||||
info->csva.liab_eq_radio = liab_eq_radio;
|
info->csva.liab_eq_radio = liab_eq_radio;
|
||||||
info->csva.account_type = ACCT_TYPE_EXPENSE;
|
info->csva.account_type = ACCT_TYPE_EXPENSE;
|
||||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(expense_radio), TRUE);
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(expense_radio), TRUE);
|
||||||
|
|
||||||
g_signal_connect (G_OBJECT (income_radio), "toggled",
|
g_signal_connect (G_OBJECT(income_radio), "toggled",
|
||||||
G_CALLBACK (csv_export_info_acct_type_cb), info);
|
G_CALLBACK(csv_export_info_acct_type_cb), info);
|
||||||
g_signal_connect (G_OBJECT (expense_radio), "toggled",
|
g_signal_connect (G_OBJECT(expense_radio), "toggled",
|
||||||
G_CALLBACK (csv_export_info_acct_type_cb), info);
|
G_CALLBACK(csv_export_info_acct_type_cb), info);
|
||||||
g_signal_connect (G_OBJECT (asset_radio), "toggled",
|
g_signal_connect (G_OBJECT(asset_radio), "toggled",
|
||||||
G_CALLBACK (csv_export_info_acct_type_cb), info);
|
G_CALLBACK(csv_export_info_acct_type_cb), info);
|
||||||
g_signal_connect (G_OBJECT (liab_eq_radio), "toggled",
|
g_signal_connect (G_OBJECT(liab_eq_radio), "toggled",
|
||||||
G_CALLBACK (csv_export_info_acct_type_cb), info);
|
G_CALLBACK(csv_export_info_acct_type_cb), info);
|
||||||
|
|
||||||
/* select subaccounts button */
|
/* select subaccounts button */
|
||||||
button = GTK_WIDGET(gtk_builder_get_object (builder, "select_subaccounts_button"));
|
button = GTK_WIDGET(gtk_builder_get_object (builder, "select_subaccounts_button"));
|
||||||
info->csva.select_button = button;
|
info->csva.select_button = button;
|
||||||
|
|
||||||
g_signal_connect (G_OBJECT (button), "clicked",
|
g_signal_connect (G_OBJECT(button), "clicked",
|
||||||
G_CALLBACK (csv_export_select_subaccounts_clicked_cb), info);
|
G_CALLBACK(csv_export_select_subaccounts_clicked_cb), info);
|
||||||
g_signal_connect (G_OBJECT (info->csva.account_treeview), "cursor_changed",
|
g_signal_connect (G_OBJECT(info->csva.account_treeview), "cursor_changed",
|
||||||
G_CALLBACK (csv_export_cursor_changed_cb), info);
|
G_CALLBACK(csv_export_cursor_changed_cb), info);
|
||||||
|
|
||||||
/* Set the date info */
|
/* Set the date info */
|
||||||
button = GTK_WIDGET(gtk_builder_get_object (builder, "show_range"));
|
button = GTK_WIDGET(gtk_builder_get_object (builder, "show_range"));
|
||||||
@ -925,11 +917,11 @@ csv_export_assistant_create (CsvExportInfo *info)
|
|||||||
|
|
||||||
info->csvd.start_time = start_time;
|
info->csvd.start_time = start_time;
|
||||||
info->csvd.end_time = end_time;
|
info->csvd.end_time = end_time;
|
||||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE);
|
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), FALSE);
|
||||||
|
|
||||||
table = GTK_WIDGET(gtk_builder_get_object (builder, "select_range_table"));
|
table = GTK_WIDGET(gtk_builder_get_object (builder, "select_range_table"));
|
||||||
info->csvd.table = table;
|
info->csvd.table = table;
|
||||||
gtk_widget_set_sensitive(GTK_WIDGET(table), FALSE);
|
gtk_widget_set_sensitive (GTK_WIDGET(table), FALSE);
|
||||||
|
|
||||||
info->csvd.start_date_choose = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_choose"));
|
info->csvd.start_date_choose = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_choose"));
|
||||||
info->csvd.start_date_today = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_today"));
|
info->csvd.start_date_today = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_today"));
|
||||||
@ -939,16 +931,16 @@ csv_export_assistant_create (CsvExportInfo *info)
|
|||||||
/* Start date info */
|
/* Start date info */
|
||||||
info->csvd.start_date = gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE);
|
info->csvd.start_date = gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE);
|
||||||
hbox = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_hbox"));
|
hbox = GTK_WIDGET(gtk_builder_get_object (builder, "start_date_hbox"));
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), info->csvd.start_date, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX(hbox), info->csvd.start_date, TRUE, TRUE, 0);
|
||||||
gtk_widget_show (info->csvd.start_date);
|
gtk_widget_show (info->csvd.start_date);
|
||||||
gnc_date_edit_set_time (GNC_DATE_EDIT(info->csvd.start_date), start_time);
|
gnc_date_edit_set_time (GNC_DATE_EDIT(info->csvd.start_date), start_time);
|
||||||
g_signal_connect (G_OBJECT (info->csvd.start_date), "date-changed",
|
g_signal_connect (G_OBJECT(info->csvd.start_date), "date-changed",
|
||||||
G_CALLBACK (csv_export_date_changed_cb), info);
|
G_CALLBACK(csv_export_date_changed_cb), info);
|
||||||
|
|
||||||
/* End date info */
|
/* End date info */
|
||||||
info->csvd.end_date = gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE);
|
info->csvd.end_date = gnc_date_edit_new (gnc_time (NULL), FALSE, FALSE);
|
||||||
hbox = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_hbox"));
|
hbox = GTK_WIDGET(gtk_builder_get_object (builder, "end_date_hbox"));
|
||||||
gtk_box_pack_start (GTK_BOX (hbox), info->csvd.end_date, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX(hbox), info->csvd.end_date, TRUE, TRUE, 0);
|
||||||
gtk_widget_show (info->csvd.end_date);
|
gtk_widget_show (info->csvd.end_date);
|
||||||
gnc_date_edit_set_time (GNC_DATE_EDIT(info->csvd.end_date), end_time);
|
gnc_date_edit_set_time (GNC_DATE_EDIT(info->csvd.end_date), end_time);
|
||||||
g_signal_connect (G_OBJECT (info->csvd.end_date), "date-changed",
|
g_signal_connect (G_OBJECT (info->csvd.end_date), "date-changed",
|
||||||
@ -962,37 +954,37 @@ csv_export_assistant_create (CsvExportInfo *info)
|
|||||||
/* File chooser Page */
|
/* File chooser Page */
|
||||||
info->file_page = GTK_WIDGET(gtk_builder_get_object(builder, "file_page"));
|
info->file_page = GTK_WIDGET(gtk_builder_get_object(builder, "file_page"));
|
||||||
info->file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_SAVE);
|
info->file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_SAVE);
|
||||||
button = gtk_button_new_from_stock(GTK_STOCK_OK);
|
button = gtk_button_new_from_stock (GTK_STOCK_OK);
|
||||||
gtk_widget_set_size_request (button, 100, -1);
|
gtk_widget_set_size_request (button, 100, -1);
|
||||||
gtk_widget_show (button);
|
gtk_widget_show (button);
|
||||||
h_box = gtk_hbox_new(TRUE, 0);
|
h_box = gtk_hbox_new (TRUE, 0);
|
||||||
gtk_box_pack_start(GTK_BOX(h_box), button, FALSE, FALSE, 0);
|
gtk_box_pack_start(GTK_BOX(h_box), button, FALSE, FALSE, 0);
|
||||||
gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(info->file_chooser), h_box);
|
gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(info->file_chooser), h_box);
|
||||||
g_signal_connect (G_OBJECT (button), "clicked",
|
g_signal_connect (G_OBJECT(button), "clicked",
|
||||||
G_CALLBACK (csv_export_file_chooser_confirm_cb), info);
|
G_CALLBACK(csv_export_file_chooser_confirm_cb), info);
|
||||||
|
|
||||||
box = GTK_WIDGET(gtk_builder_get_object(builder, "file_page"));
|
box = GTK_WIDGET(gtk_builder_get_object (builder, "file_page"));
|
||||||
gtk_box_pack_start (GTK_BOX (box), info->file_chooser, TRUE, TRUE, 6);
|
gtk_box_pack_start (GTK_BOX (box), info->file_chooser, TRUE, TRUE, 6);
|
||||||
gtk_widget_show (info->file_chooser);
|
gtk_widget_show (info->file_chooser);
|
||||||
|
|
||||||
/* Finish Page */
|
/* Finish Page */
|
||||||
info->finish_label = GTK_WIDGET(gtk_builder_get_object(builder, "end_page"));
|
info->finish_label = GTK_WIDGET(gtk_builder_get_object (builder, "end_page"));
|
||||||
|
|
||||||
/* Summary Page */
|
/* Summary Page */
|
||||||
info->summary_label = GTK_WIDGET(gtk_builder_get_object(builder, "summary_page"));
|
info->summary_label = GTK_WIDGET(gtk_builder_get_object (builder, "summary_page"));
|
||||||
|
|
||||||
g_signal_connect (G_OBJECT(window), "destroy",
|
g_signal_connect (G_OBJECT(window), "destroy",
|
||||||
G_CALLBACK (csv_export_assistant_destroy_cb), info);
|
G_CALLBACK(csv_export_assistant_destroy_cb), info);
|
||||||
|
|
||||||
gnc_restore_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->window));
|
gnc_restore_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->window));
|
||||||
if (gnc_prefs_get_bool(GNC_PREFS_GROUP_GENERAL, GNC_PREF_SAVE_GEOMETRY))
|
if (gnc_prefs_get_bool (GNC_PREFS_GROUP_GENERAL, GNC_PREF_SAVE_GEOMETRY))
|
||||||
{
|
{
|
||||||
GObject *object = gtk_builder_get_object (builder, "paned");
|
GObject *object = gtk_builder_get_object (builder, "paned");
|
||||||
gnc_prefs_bind (GNC_PREFS_GROUP, GNC_PREF_PANED_POS, object, "position");
|
gnc_prefs_bind (GNC_PREFS_GROUP, GNC_PREF_PANED_POS, object, "position");
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_builder_connect_signals(builder, info);
|
gtk_builder_connect_signals (builder, info);
|
||||||
g_object_unref(G_OBJECT(builder));
|
g_object_unref (G_OBJECT(builder));
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,10 +57,10 @@ gboolean write_line_to_file (FILE *fh, char * line)
|
|||||||
DEBUG("Account String: %s", line);
|
DEBUG("Account String: %s", line);
|
||||||
|
|
||||||
/* Write account line */
|
/* Write account line */
|
||||||
len = strlen( line );
|
len = strlen (line);
|
||||||
written = fwrite( line, 1, len, fh );
|
written = fwrite (line, 1, len, fh);
|
||||||
|
|
||||||
if ( written != len )
|
if (written != len)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else
|
else
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -121,7 +121,7 @@ void account_splits (CsvExportInfo *info, Account *acc, FILE *fh )
|
|||||||
gchar *end_sep;
|
gchar *end_sep;
|
||||||
gchar *mid_sep;
|
gchar *mid_sep;
|
||||||
|
|
||||||
q = qof_query_create_for(GNC_ID_SPLIT);
|
q = qof_query_create_for (GNC_ID_SPLIT);
|
||||||
book = gnc_get_current_book();
|
book = gnc_get_current_book();
|
||||||
qof_query_set_book (q, book);
|
qof_query_set_book (q, book);
|
||||||
|
|
||||||
@ -129,12 +129,12 @@ void account_splits (CsvExportInfo *info, Account *acc, FILE *fh )
|
|||||||
if (info->use_quotes)
|
if (info->use_quotes)
|
||||||
{
|
{
|
||||||
end_sep = "\"";
|
end_sep = "\"";
|
||||||
mid_sep = g_strconcat ( "\"", info->separator_str, "\"", NULL);
|
mid_sep = g_strconcat ("\"", info->separator_str, "\"", NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
end_sep = "";
|
end_sep = "";
|
||||||
mid_sep = g_strconcat ( info->separator_str, NULL);
|
mid_sep = g_strconcat (info->separator_str, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Sort by transaction date */
|
/* Sort by transaction date */
|
||||||
@ -147,7 +147,7 @@ void account_splits (CsvExportInfo *info, Account *acc, FILE *fh )
|
|||||||
xaccQueryAddDateMatchTT (q, TRUE, info->csvd.start_time, TRUE, info->csvd.end_time, QOF_QUERY_AND);
|
xaccQueryAddDateMatchTT (q, TRUE, info->csvd.start_time, TRUE, info->csvd.end_time, QOF_QUERY_AND);
|
||||||
|
|
||||||
/* Run the query */
|
/* Run the query */
|
||||||
for (splits = qof_query_run(q); splits; splits = splits->next)
|
for (splits = qof_query_run (q); splits; splits = splits->next)
|
||||||
{
|
{
|
||||||
Split *split;
|
Split *split;
|
||||||
Transaction *trans;
|
Transaction *trans;
|
||||||
@ -164,9 +164,9 @@ void account_splits (CsvExportInfo *info, Account *acc, FILE *fh )
|
|||||||
gchar *str_temp = NULL;
|
gchar *str_temp = NULL;
|
||||||
|
|
||||||
split = splits->data;
|
split = splits->data;
|
||||||
trans = xaccSplitGetParent(split);
|
trans = xaccSplitGetParent (split);
|
||||||
nSplits = xaccTransCountSplits(trans);
|
nSplits = xaccTransCountSplits (trans);
|
||||||
s_list = xaccTransGetSplitList(trans);
|
s_list = xaccTransGetSplitList (trans);
|
||||||
|
|
||||||
/* Date */
|
/* Date */
|
||||||
date = qof_print_date (xaccTransGetDate (trans));
|
date = qof_print_date (xaccTransGetDate (trans));
|
||||||
@ -274,12 +274,12 @@ void account_splits (CsvExportInfo *info, Account *acc, FILE *fh )
|
|||||||
/* Loop through the list of splits for the Transcation */
|
/* Loop through the list of splits for the Transcation */
|
||||||
node = s_list;
|
node = s_list;
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
while ( (cnt < nSplits) && (info->failed == FALSE))
|
while ((cnt < nSplits) && (info->failed == FALSE))
|
||||||
{
|
{
|
||||||
t_split = node->data;
|
t_split = node->data;
|
||||||
|
|
||||||
/* Start of line */
|
/* Start of line */
|
||||||
part1 = g_strconcat ( end_sep, mid_sep, mid_sep, mid_sep, mid_sep, mid_sep, NULL);
|
part1 = g_strconcat (end_sep, mid_sep, mid_sep, mid_sep, mid_sep, mid_sep, NULL);
|
||||||
|
|
||||||
/* Memo */
|
/* Memo */
|
||||||
currentSel = xaccSplitGetMemo (t_split) ? xaccSplitGetMemo (t_split) : "" ;
|
currentSel = xaccSplitGetMemo (t_split) ? xaccSplitGetMemo (t_split) : "" ;
|
||||||
@ -396,8 +396,8 @@ void csv_transactions_export (CsvExportInfo *info)
|
|||||||
info->failed = FALSE;
|
info->failed = FALSE;
|
||||||
|
|
||||||
/* Open File for writing */
|
/* Open File for writing */
|
||||||
fh = g_fopen( info->file_name, "w" );
|
fh = g_fopen (info->file_name, "w" );
|
||||||
if ( fh != NULL )
|
if (fh != NULL)
|
||||||
{
|
{
|
||||||
gchar *header;
|
gchar *header;
|
||||||
gchar *end_sep;
|
gchar *end_sep;
|
||||||
@ -408,16 +408,16 @@ void csv_transactions_export (CsvExportInfo *info)
|
|||||||
if (info->use_quotes)
|
if (info->use_quotes)
|
||||||
{
|
{
|
||||||
end_sep = "\"";
|
end_sep = "\"";
|
||||||
mid_sep = g_strconcat ( "\"", info->separator_str, "\"", NULL);
|
mid_sep = g_strconcat ("\"", info->separator_str, "\"", NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
end_sep = "";
|
end_sep = "";
|
||||||
mid_sep = g_strconcat ( info->separator_str, NULL);
|
mid_sep = g_strconcat (info->separator_str, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Header string */
|
/* Header string */
|
||||||
header = g_strconcat ( end_sep, _("Date"), mid_sep, _("Account Name"), mid_sep,
|
header = g_strconcat (end_sep, _("Date"), mid_sep, _("Account Name"), mid_sep,
|
||||||
(num_action ? _("Transaction Number") : _("Number")),
|
(num_action ? _("Transaction Number") : _("Number")),
|
||||||
mid_sep, _("Description"), mid_sep, _("Notes"),
|
mid_sep, _("Description"), mid_sep, _("Notes"),
|
||||||
mid_sep, _("Memo"), mid_sep, _("Category"), mid_sep,
|
mid_sep, _("Memo"), mid_sep, _("Category"), mid_sep,
|
||||||
@ -435,21 +435,21 @@ void csv_transactions_export (CsvExportInfo *info)
|
|||||||
DEBUG("Header String: %s", header);
|
DEBUG("Header String: %s", header);
|
||||||
|
|
||||||
/* Write header line */
|
/* Write header line */
|
||||||
if (!write_line_to_file(fh, header))
|
if (!write_line_to_file (fh, header))
|
||||||
{
|
{
|
||||||
info->failed = TRUE;
|
info->failed = TRUE;
|
||||||
g_free(mid_sep);
|
g_free (mid_sep);
|
||||||
g_free(header);
|
g_free (header);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
g_free(mid_sep);
|
g_free (mid_sep);
|
||||||
g_free(header);
|
g_free (header);
|
||||||
|
|
||||||
/* Go through list of accounts */
|
/* Go through list of accounts */
|
||||||
for (ptr = info->csva.account_list, i = 0; ptr; ptr = g_list_next(ptr), i++)
|
for (ptr = info->csva.account_list, i = 0; ptr; ptr = g_list_next(ptr), i++)
|
||||||
{
|
{
|
||||||
acc = ptr->data;
|
acc = ptr->data;
|
||||||
DEBUG("Account being processed is : %s", xaccAccountGetName(acc));
|
DEBUG("Account being processed is : %s", xaccAccountGetName (acc));
|
||||||
account_splits (info, acc, fh);
|
account_splits (info, acc, fh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,16 +47,16 @@ static QofLogModule log_module = GNC_MOD_ASSISTANT;
|
|||||||
* successfull.
|
* successfull.
|
||||||
*******************************************************/
|
*******************************************************/
|
||||||
static
|
static
|
||||||
gboolean write_line_to_file ( FILE *fh, char * line)
|
gboolean write_line_to_file (FILE *fh, char * line)
|
||||||
{
|
{
|
||||||
int len, written;
|
int len, written;
|
||||||
DEBUG("Account String: %s", line);
|
DEBUG("Account String: %s", line);
|
||||||
|
|
||||||
/* Write account line */
|
/* Write account line */
|
||||||
len = strlen( line );
|
len = strlen (line);
|
||||||
written = fwrite( line, 1, len, fh );
|
written = fwrite (line, 1, len, fh);
|
||||||
|
|
||||||
if ( written != len )
|
if (written != len)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else
|
else
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@ -114,13 +114,13 @@ void csv_tree_export (CsvExportInfo *info)
|
|||||||
DEBUG("File name is : %s", info->file_name);
|
DEBUG("File name is : %s", info->file_name);
|
||||||
|
|
||||||
/* Get list of Accounts */
|
/* Get list of Accounts */
|
||||||
root = gnc_book_get_root_account( gnc_get_current_book() );
|
root = gnc_book_get_root_account (gnc_get_current_book());
|
||||||
accts = gnc_account_get_descendants_sorted( root );
|
accts = gnc_account_get_descendants_sorted (root);
|
||||||
info->failed = FALSE;
|
info->failed = FALSE;
|
||||||
|
|
||||||
/* Open File for writing */
|
/* Open File for writing */
|
||||||
fh = g_fopen( info->file_name, "w" );
|
fh = g_fopen (info->file_name, "w");
|
||||||
if ( fh != NULL )
|
if (fh != NULL)
|
||||||
{
|
{
|
||||||
gchar *header;
|
gchar *header;
|
||||||
gchar *part1;
|
gchar *part1;
|
||||||
@ -135,12 +135,12 @@ void csv_tree_export (CsvExportInfo *info)
|
|||||||
if (info->use_quotes)
|
if (info->use_quotes)
|
||||||
{
|
{
|
||||||
end_sep = "\"";
|
end_sep = "\"";
|
||||||
mid_sep = g_strconcat ( "\"", info->separator_str, "\"", NULL);
|
mid_sep = g_strconcat ("\"", info->separator_str, "\"", NULL);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
end_sep = "";
|
end_sep = "";
|
||||||
mid_sep = g_strconcat ( info->separator_str, NULL);
|
mid_sep = g_strconcat (info->separator_str, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Header string, 'eol = end of line marker' */
|
/* Header string, 'eol = end of line marker' */
|
||||||
@ -160,22 +160,22 @@ void csv_tree_export (CsvExportInfo *info)
|
|||||||
DEBUG("Header String: %s", header);
|
DEBUG("Header String: %s", header);
|
||||||
|
|
||||||
/* Write header line */
|
/* Write header line */
|
||||||
if (!write_line_to_file(fh, header))
|
if (!write_line_to_file (fh, header))
|
||||||
{
|
{
|
||||||
info->failed = TRUE;
|
info->failed = TRUE;
|
||||||
g_free(mid_sep);
|
g_free (mid_sep);
|
||||||
g_free(header);
|
g_free (header);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
g_free(header);
|
g_free (header);
|
||||||
|
|
||||||
/* Go through list of accounts */
|
/* Go through list of accounts */
|
||||||
for (ptr = accts, i = 0; ptr; ptr = g_list_next(ptr), i++)
|
for (ptr = accts, i = 0; ptr; ptr = g_list_next (ptr), i++)
|
||||||
{
|
{
|
||||||
gchar *fullname = NULL;
|
gchar *fullname = NULL;
|
||||||
gchar *str_temp = NULL;
|
gchar *str_temp = NULL;
|
||||||
acc = ptr->data;
|
acc = ptr->data;
|
||||||
DEBUG("Account being processed is : %s", xaccAccountGetName(acc));
|
DEBUG("Account being processed is : %s", xaccAccountGetName (acc));
|
||||||
/* Type */
|
/* Type */
|
||||||
currentSel = xaccAccountTypeEnumAsString (xaccAccountGetType (acc));
|
currentSel = xaccAccountTypeEnumAsString (xaccAccountGetType (acc));
|
||||||
part1 = g_strconcat (end_sep, currentSel, mid_sep, NULL);
|
part1 = g_strconcat (end_sep, currentSel, mid_sep, NULL);
|
||||||
@ -246,21 +246,21 @@ void csv_tree_export (CsvExportInfo *info)
|
|||||||
DEBUG("Account String: %s", part2);
|
DEBUG("Account String: %s", part2);
|
||||||
|
|
||||||
/* Write to file */
|
/* Write to file */
|
||||||
if (!write_line_to_file(fh, part2))
|
if (!write_line_to_file (fh, part2))
|
||||||
{
|
{
|
||||||
info->failed = TRUE;
|
info->failed = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
g_free(part2);
|
g_free (part2);
|
||||||
}
|
}
|
||||||
g_free(mid_sep);
|
g_free (mid_sep);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
info->failed = TRUE;
|
info->failed = TRUE;
|
||||||
if (fh)
|
if (fh)
|
||||||
fclose (fh);
|
fclose (fh);
|
||||||
|
|
||||||
g_list_free( accts );
|
g_list_free (accts);
|
||||||
LEAVE("");
|
LEAVE("");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -131,17 +131,17 @@ csv_import_file_chooser_confirm_cb (GtkWidget *button, CsvImportInfo *info)
|
|||||||
|
|
||||||
gtk_assistant_set_page_complete (assistant, page, FALSE);
|
gtk_assistant_set_page_complete (assistant, page, FALSE);
|
||||||
|
|
||||||
file_name = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER(info->file_chooser ));
|
file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER(info->file_chooser));
|
||||||
|
|
||||||
if (file_name)
|
if (file_name)
|
||||||
{
|
{
|
||||||
gchar *filepath = gnc_uri_get_path ( file_name );
|
gchar *filepath = gnc_uri_get_path (file_name);
|
||||||
gchar *filedir = g_path_get_dirname( filepath );
|
gchar *filedir = g_path_get_dirname (filepath);
|
||||||
info->starting_dir = g_strdup(filedir);
|
info->starting_dir = g_strdup (filedir);
|
||||||
g_free ( filedir );
|
g_free (filedir);
|
||||||
g_free ( filepath );
|
g_free (filepath);
|
||||||
|
|
||||||
info->file_name = g_strdup(file_name);
|
info->file_name = g_strdup (file_name);
|
||||||
|
|
||||||
// generate preview
|
// generate preview
|
||||||
gtk_list_store_clear (info->store);
|
gtk_list_store_clear (info->store);
|
||||||
@ -153,13 +153,13 @@ csv_import_file_chooser_confirm_cb (GtkWidget *button, CsvImportInfo *info)
|
|||||||
else if (res == MATCH_FOUND)
|
else if (res == MATCH_FOUND)
|
||||||
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
||||||
}
|
}
|
||||||
g_free(file_name);
|
g_free (file_name);
|
||||||
|
|
||||||
DEBUG("file_name selected is %s", info->file_name);
|
DEBUG("file_name selected is %s", info->file_name);
|
||||||
DEBUG("starting directory is %s", info->starting_dir);
|
DEBUG("starting directory is %s", info->starting_dir);
|
||||||
|
|
||||||
/* Step to next page if page is complete */
|
/* Step to next page if page is complete */
|
||||||
if(gtk_assistant_get_page_complete(assistant, page))
|
if(gtk_assistant_get_page_complete (assistant, page))
|
||||||
gtk_assistant_set_current_page (assistant, num + 1);
|
gtk_assistant_set_current_page (assistant, num + 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -170,7 +170,7 @@ csv_import_file_chooser_confirm_cb (GtkWidget *button, CsvImportInfo *info)
|
|||||||
*
|
*
|
||||||
* call back for the start row / number of header rows
|
* call back for the start row / number of header rows
|
||||||
*******************************************************/
|
*******************************************************/
|
||||||
void csv_import_hrows_cb (GtkWidget *spin, gpointer user_data )
|
void csv_import_hrows_cb (GtkWidget *spin, gpointer user_data)
|
||||||
{
|
{
|
||||||
CsvImportInfo *info = user_data;
|
CsvImportInfo *info = user_data;
|
||||||
|
|
||||||
@ -182,12 +182,12 @@ void csv_import_hrows_cb (GtkWidget *spin, gpointer user_data )
|
|||||||
info->header_rows = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(spin));
|
info->header_rows = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON(spin));
|
||||||
|
|
||||||
/* Get number of rows displayed */
|
/* Get number of rows displayed */
|
||||||
num_rows = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(info->store), NULL);
|
num_rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL(info->store), NULL);
|
||||||
|
|
||||||
/* Modify background color for header rows */
|
/* Modify background color for header rows */
|
||||||
if (info->header_rows == 0)
|
if (info->header_rows == 0)
|
||||||
{
|
{
|
||||||
valid = gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(info->store), &iter, NULL, 0 );
|
valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(info->store), &iter, NULL, 0 );
|
||||||
if (valid)
|
if (valid)
|
||||||
gtk_list_store_set (info->store, &iter, ROW_COLOR, NULL, -1);
|
gtk_list_store_set (info->store, &iter, ROW_COLOR, NULL, -1);
|
||||||
}
|
}
|
||||||
@ -195,7 +195,7 @@ void csv_import_hrows_cb (GtkWidget *spin, gpointer user_data )
|
|||||||
{
|
{
|
||||||
if (info->header_rows - 1 < num_rows)
|
if (info->header_rows - 1 < num_rows)
|
||||||
{
|
{
|
||||||
valid = gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(info->store), &iter, NULL, info->header_rows - 1 );
|
valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(info->store), &iter, NULL, info->header_rows - 1 );
|
||||||
if (valid)
|
if (valid)
|
||||||
gtk_list_store_set (info->store, &iter, ROW_COLOR, "pink", -1);
|
gtk_list_store_set (info->store, &iter, ROW_COLOR, "pink", -1);
|
||||||
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(info->store), &iter);
|
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(info->store), &iter);
|
||||||
@ -211,19 +211,19 @@ void csv_import_hrows_cb (GtkWidget *spin, gpointer user_data )
|
|||||||
*
|
*
|
||||||
* call back for type of separartor required
|
* call back for type of separartor required
|
||||||
*******************************************************/
|
*******************************************************/
|
||||||
void csv_import_sep_cb (GtkWidget *radio, gpointer user_data )
|
void csv_import_sep_cb (GtkWidget *radio, gpointer user_data)
|
||||||
{
|
{
|
||||||
CsvImportInfo *info = user_data;
|
CsvImportInfo *info = user_data;
|
||||||
const gchar *name;
|
const gchar *name;
|
||||||
gchar *temp;
|
gchar *temp;
|
||||||
|
|
||||||
if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio)))
|
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(radio)))
|
||||||
{
|
{
|
||||||
LEAVE("1st callback of pair. Defer to 2nd callback.");
|
LEAVE("1st callback of pair. Defer to 2nd callback.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
name = gtk_buildable_get_name(GTK_BUILDABLE(radio));
|
name = gtk_buildable_get_name (GTK_BUILDABLE(radio));
|
||||||
|
|
||||||
if (g_strcmp0 (name, "radio_semi") == 0)
|
if (g_strcmp0 (name, "radio_semi") == 0)
|
||||||
g_string_assign (info->regexp, "^(?<type>[^;]*);?(?<full_name>\"(?:[^\"]|\"\")*\"|[^;]*);?(?<name>\"(?:[^\"]|\"\")*\"|[^;]*);\
|
g_string_assign (info->regexp, "^(?<type>[^;]*);?(?<full_name>\"(?:[^\"]|\"\")*\"|[^;]*);?(?<name>\"(?:[^\"]|\"\")*\"|[^;]*);\
|
||||||
@ -256,13 +256,13 @@ void csv_import_sep_cb (GtkWidget *radio, gpointer user_data )
|
|||||||
/* Generate preview */
|
/* Generate preview */
|
||||||
gtk_list_store_clear (info->store);
|
gtk_list_store_clear (info->store);
|
||||||
|
|
||||||
if (csv_import_read_file (info->file_name, info->regexp->str, info->store, 11 ) == MATCH_FOUND)
|
if (csv_import_read_file (info->file_name, info->regexp->str, info->store, 11) == MATCH_FOUND)
|
||||||
gtk_widget_set_sensitive (info->header_row_spin, TRUE);
|
gtk_widget_set_sensitive (info->header_row_spin, TRUE);
|
||||||
else
|
else
|
||||||
gtk_widget_set_sensitive (info->header_row_spin, FALSE);
|
gtk_widget_set_sensitive (info->header_row_spin, FALSE);
|
||||||
|
|
||||||
/* Reset Header spin to 0 */
|
/* Reset Header spin to 0 */
|
||||||
gtk_spin_button_set_value( GTK_SPIN_BUTTON(info->header_row_spin), 0 );
|
gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->header_row_spin), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -281,7 +281,7 @@ void load_settings (CsvImportInfo *info)
|
|||||||
info->error = "";
|
info->error = "";
|
||||||
|
|
||||||
/* The default directory for the user to select files. */
|
/* The default directory for the user to select files. */
|
||||||
info->starting_dir = gnc_get_default_directory(GNC_PREFS_GROUP);
|
info->starting_dir = gnc_get_default_directory (GNC_PREFS_GROUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -313,28 +313,28 @@ gnc_input_dialog (GtkWidget *parent, const gchar *title, const gchar *msg, const
|
|||||||
GtkTextIter start, end;
|
GtkTextIter start, end;
|
||||||
|
|
||||||
/* Create the widgets */
|
/* Create the widgets */
|
||||||
dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW (parent),
|
dialog = gtk_dialog_new_with_buttons (title, GTK_WINDOW(parent),
|
||||||
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
|
GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
|
||||||
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
|
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
|
content_area = gtk_dialog_get_content_area (GTK_DIALOG(dialog));
|
||||||
|
|
||||||
// add a label
|
// add a label
|
||||||
label = gtk_label_new (msg);
|
label = gtk_label_new (msg);
|
||||||
gtk_container_add (GTK_CONTAINER (content_area), label);
|
gtk_container_add (GTK_CONTAINER(content_area), label);
|
||||||
|
|
||||||
// add a textview
|
// add a textview
|
||||||
view = gtk_text_view_new ();
|
view = gtk_text_view_new ();
|
||||||
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (view), GTK_WRAP_WORD_CHAR);
|
gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW(view), GTK_WRAP_WORD_CHAR);
|
||||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(view));
|
||||||
gtk_text_buffer_set_text (buffer, default_input, -1);
|
gtk_text_buffer_set_text (buffer, default_input, -1);
|
||||||
gtk_container_add (GTK_CONTAINER (content_area), view);
|
gtk_container_add (GTK_CONTAINER(content_area), view);
|
||||||
|
|
||||||
// run the dialog
|
// run the dialog
|
||||||
gtk_widget_show_all (dialog);
|
gtk_widget_show_all (dialog);
|
||||||
result = gtk_dialog_run (GTK_DIALOG (dialog));
|
result = gtk_dialog_run (GTK_DIALOG(dialog));
|
||||||
|
|
||||||
if (result == GTK_RESPONSE_REJECT)
|
if (result == GTK_RESPONSE_REJECT)
|
||||||
user_input = 0;
|
user_input = 0;
|
||||||
@ -380,7 +380,7 @@ csv_import_assistant_file_page_prepare (GtkAssistant *assistant,
|
|||||||
|
|
||||||
/* Set the default directory */
|
/* Set the default directory */
|
||||||
if (info->starting_dir)
|
if (info->starting_dir)
|
||||||
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(info->file_chooser), info->starting_dir);
|
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER(info->file_chooser), info->starting_dir);
|
||||||
|
|
||||||
/* Disable the Forward Assistant Button */
|
/* Disable the Forward Assistant Button */
|
||||||
gtk_assistant_set_page_complete (assistant, page, FALSE);
|
gtk_assistant_set_page_complete (assistant, page, FALSE);
|
||||||
@ -423,10 +423,10 @@ csv_import_assistant_finish_page_prepare (GtkAssistant *assistant,
|
|||||||
text = g_strdup_printf (gettext (finish_tree_string), info->file_name);
|
text = g_strdup_printf (gettext (finish_tree_string), info->file_name);
|
||||||
}
|
}
|
||||||
gtk_label_set_text (GTK_LABEL(info->finish_label), text);
|
gtk_label_set_text (GTK_LABEL(info->finish_label), text);
|
||||||
g_free(text);
|
g_free (text);
|
||||||
|
|
||||||
/* Save the Window size and directory */
|
/* Save the Window size and directory */
|
||||||
gnc_set_default_directory(GNC_PREFS_GROUP, info->starting_dir);
|
gnc_set_default_directory (GNC_PREFS_GROUP, info->starting_dir);
|
||||||
|
|
||||||
/* Enable the Assistant Buttons */
|
/* Enable the Assistant Buttons */
|
||||||
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
gtk_assistant_set_page_complete (assistant, page, TRUE);
|
||||||
@ -443,29 +443,29 @@ csv_import_assistant_summary_page_prepare (GtkAssistant *assistant,
|
|||||||
/* Before creating accounts, if this is a new book, let user specify
|
/* Before creating accounts, if this is a new book, let user specify
|
||||||
* book options, since they affect how transactions are created */
|
* book options, since they affect how transactions are created */
|
||||||
if (info->new_book)
|
if (info->new_book)
|
||||||
info->new_book = gnc_new_book_option_display(info->window);
|
info->new_book = gnc_new_book_option_display (info->window);
|
||||||
|
|
||||||
if (!g_strcmp0(info->error, "") == 0)
|
if (!g_strcmp0 (info->error, "") == 0)
|
||||||
{
|
{
|
||||||
GtkTextBuffer *buffer;
|
GtkTextBuffer *buffer;
|
||||||
|
|
||||||
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (info->summary_error_view));
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(info->summary_error_view));
|
||||||
text = g_strdup_printf(gettext ("Import completed but with errors!\n\nThe number of Accounts added was %u and "
|
text = g_strdup_printf (gettext ("Import completed but with errors!\n\nThe number of Accounts added was %u and "
|
||||||
"updated was %u.\n\nSee below for errors..." ), info->num_new, info->num_updates );
|
"updated was %u.\n\nSee below for errors..." ), info->num_new, info->num_updates );
|
||||||
errtext = g_strdup_printf ( "%s", info->error);
|
errtext = g_strdup_printf ("%s", info->error);
|
||||||
gtk_text_buffer_set_text (buffer, errtext, -1);
|
gtk_text_buffer_set_text (buffer, errtext, -1);
|
||||||
g_free(errtext);
|
g_free (errtext);
|
||||||
g_free(info->error);
|
g_free (info->error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
text = g_strdup_printf(gettext ("Import completed successfully!\n\nThe number of Accounts added was %u and "
|
text = g_strdup_printf (gettext ("Import completed successfully!\n\nThe number of Accounts added was %u and "
|
||||||
"updated was %u.\n" ), info->num_new, info->num_updates );
|
"updated was %u.\n" ), info->num_new, info->num_updates );
|
||||||
|
|
||||||
mtext = g_strdup_printf("<span size=\"medium\"><b>%s</b></span>", text);
|
mtext = g_strdup_printf ("<span size=\"medium\"><b>%s</b></span>", text);
|
||||||
gtk_label_set_markup(GTK_LABEL(info->summary_label), mtext);
|
gtk_label_set_markup (GTK_LABEL(info->summary_label), mtext);
|
||||||
|
|
||||||
g_free(text);
|
g_free (text);
|
||||||
g_free(mtext);
|
g_free (mtext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -473,7 +473,7 @@ void
|
|||||||
csv_import_assistant_prepare (GtkAssistant *assistant, GtkWidget *page,
|
csv_import_assistant_prepare (GtkAssistant *assistant, GtkWidget *page,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
gint currentpage = gtk_assistant_get_current_page(assistant);
|
gint currentpage = gtk_assistant_get_current_page (assistant);
|
||||||
|
|
||||||
switch (currentpage)
|
switch (currentpage)
|
||||||
{
|
{
|
||||||
@ -541,11 +541,11 @@ csv_import_close_handler (gpointer user_data)
|
|||||||
{
|
{
|
||||||
CsvImportInfo *info = user_data;
|
CsvImportInfo *info = user_data;
|
||||||
|
|
||||||
g_free(info->starting_dir);
|
g_free (info->starting_dir);
|
||||||
g_free(info->file_name);
|
g_free (info->file_name);
|
||||||
g_string_free(info->regexp, TRUE);
|
g_string_free (info->regexp, TRUE);
|
||||||
|
|
||||||
gnc_save_window_size(GNC_PREFS_GROUP, GTK_WINDOW(info->window));
|
gnc_save_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->window));
|
||||||
gtk_widget_destroy (info->window);
|
gtk_widget_destroy (info->window);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -564,8 +564,8 @@ csv_import_assistant_create (CsvImportInfo *info)
|
|||||||
gchar *mnemonic_desc = NULL;
|
gchar *mnemonic_desc = NULL;
|
||||||
|
|
||||||
builder = gtk_builder_new();
|
builder = gtk_builder_new();
|
||||||
gnc_builder_add_from_file (builder , "assistant-csv-account-import.glade", "num_hrows_adj");
|
gnc_builder_add_from_file (builder, "assistant-csv-account-import.glade", "num_hrows_adj");
|
||||||
gnc_builder_add_from_file (builder , "assistant-csv-account-import.glade", "CSV Account Import Assistant");
|
gnc_builder_add_from_file (builder, "assistant-csv-account-import.glade", "CSV Account Import Assistant");
|
||||||
window = GTK_WIDGET(gtk_builder_get_object (builder, "CSV Account Import Assistant"));
|
window = GTK_WIDGET(gtk_builder_get_object (builder, "CSV Account Import Assistant"));
|
||||||
info->window = window;
|
info->window = window;
|
||||||
|
|
||||||
@ -576,19 +576,19 @@ csv_import_assistant_create (CsvImportInfo *info)
|
|||||||
load_settings (info);
|
load_settings (info);
|
||||||
|
|
||||||
/* Enable buttons on all page. */
|
/* Enable buttons on all page. */
|
||||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (window),
|
gtk_assistant_set_page_complete (GTK_ASSISTANT(window),
|
||||||
GTK_WIDGET(gtk_builder_get_object(builder, "start_page")),
|
GTK_WIDGET(gtk_builder_get_object(builder, "start_page")),
|
||||||
TRUE);
|
TRUE);
|
||||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (window),
|
gtk_assistant_set_page_complete (GTK_ASSISTANT(window),
|
||||||
GTK_WIDGET(gtk_builder_get_object(builder, "file_page")),
|
GTK_WIDGET(gtk_builder_get_object(builder, "file_page")),
|
||||||
FALSE);
|
FALSE);
|
||||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (window),
|
gtk_assistant_set_page_complete (GTK_ASSISTANT(window),
|
||||||
GTK_WIDGET(gtk_builder_get_object(builder, "import_tree_page")),
|
GTK_WIDGET(gtk_builder_get_object(builder, "import_tree_page")),
|
||||||
TRUE);
|
TRUE);
|
||||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (window),
|
gtk_assistant_set_page_complete (GTK_ASSISTANT(window),
|
||||||
GTK_WIDGET(gtk_builder_get_object(builder, "end_page")),
|
GTK_WIDGET(gtk_builder_get_object(builder, "end_page")),
|
||||||
FALSE);
|
FALSE);
|
||||||
gtk_assistant_set_page_complete (GTK_ASSISTANT (window),
|
gtk_assistant_set_page_complete (GTK_ASSISTANT(window),
|
||||||
GTK_WIDGET(gtk_builder_get_object(builder, "summary_page")),
|
GTK_WIDGET(gtk_builder_get_object(builder, "summary_page")),
|
||||||
TRUE);
|
TRUE);
|
||||||
|
|
||||||
@ -596,19 +596,19 @@ csv_import_assistant_create (CsvImportInfo *info)
|
|||||||
|
|
||||||
/* File chooser Page */
|
/* File chooser Page */
|
||||||
info->file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN);
|
info->file_chooser = gtk_file_chooser_widget_new (GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||||
g_signal_connect (G_OBJECT (info->file_chooser), "file-activated",
|
g_signal_connect (G_OBJECT(info->file_chooser), "file-activated",
|
||||||
G_CALLBACK (csv_import_file_chooser_confirm_cb), info);
|
G_CALLBACK(csv_import_file_chooser_confirm_cb), info);
|
||||||
button = gtk_button_new_from_stock(GTK_STOCK_OK);
|
button = gtk_button_new_from_stock (GTK_STOCK_OK);
|
||||||
gtk_widget_set_size_request (button, 100, -1);
|
gtk_widget_set_size_request (button, 100, -1);
|
||||||
gtk_widget_show (button);
|
gtk_widget_show (button);
|
||||||
h_box = gtk_hbox_new(TRUE, 0);
|
h_box = gtk_hbox_new (TRUE, 0);
|
||||||
gtk_box_pack_start(GTK_BOX(h_box), button, FALSE, FALSE, 0);
|
gtk_box_pack_start (GTK_BOX(h_box), button, FALSE, FALSE, 0);
|
||||||
gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(info->file_chooser), h_box);
|
gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER(info->file_chooser), h_box);
|
||||||
g_signal_connect (G_OBJECT (button), "clicked",
|
g_signal_connect (G_OBJECT(button), "clicked",
|
||||||
G_CALLBACK (csv_import_file_chooser_confirm_cb), info);
|
G_CALLBACK(csv_import_file_chooser_confirm_cb), info);
|
||||||
|
|
||||||
box = GTK_WIDGET(gtk_builder_get_object(builder, "file_page"));
|
box = GTK_WIDGET(gtk_builder_get_object(builder, "file_page"));
|
||||||
gtk_box_pack_start (GTK_BOX (box), info->file_chooser, TRUE, TRUE, 6);
|
gtk_box_pack_start (GTK_BOX(box), info->file_chooser, TRUE, TRUE, 6);
|
||||||
gtk_widget_show (info->file_chooser);
|
gtk_widget_show (info->file_chooser);
|
||||||
|
|
||||||
/* Account Tree Page */
|
/* Account Tree Page */
|
||||||
@ -625,14 +625,14 @@ csv_import_assistant_create (CsvImportInfo *info)
|
|||||||
info->store = gtk_list_store_new (N_COLUMNS,
|
info->store = gtk_list_store_new (N_COLUMNS,
|
||||||
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
|
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING,
|
||||||
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
|
G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
|
||||||
gtk_tree_view_set_model( GTK_TREE_VIEW(info->tree_view), GTK_TREE_MODEL(info->store) );
|
gtk_tree_view_set_model (GTK_TREE_VIEW(info->tree_view), GTK_TREE_MODEL(info->store));
|
||||||
#define CREATE_COLUMN(description,column_id) \
|
#define CREATE_COLUMN(description,column_id) \
|
||||||
renderer = gtk_cell_renderer_text_new (); \
|
renderer = gtk_cell_renderer_text_new (); \
|
||||||
mnemonic_desc = mnemonic_escape(_(description)); \
|
mnemonic_desc = mnemonic_escape (_(description)); \
|
||||||
column = gtk_tree_view_column_new_with_attributes (mnemonic_desc, renderer, "text", column_id, NULL); \
|
column = gtk_tree_view_column_new_with_attributes (mnemonic_desc, renderer, "text", column_id, NULL); \
|
||||||
gtk_tree_view_column_add_attribute(column, renderer, "background", ROW_COLOR); \
|
gtk_tree_view_column_add_attribute (column, renderer, "background", ROW_COLOR); \
|
||||||
gtk_tree_view_column_set_resizable (column, TRUE); \
|
gtk_tree_view_column_set_resizable (column, TRUE); \
|
||||||
gtk_tree_view_append_column (GTK_TREE_VIEW (info->tree_view), column); \
|
gtk_tree_view_append_column (GTK_TREE_VIEW(info->tree_view), column); \
|
||||||
g_free (mnemonic_desc);
|
g_free (mnemonic_desc);
|
||||||
CREATE_COLUMN ("type", TYPE);
|
CREATE_COLUMN ("type", TYPE);
|
||||||
CREATE_COLUMN ("full_name", FULL_NAME);
|
CREATE_COLUMN ("full_name", FULL_NAME);
|
||||||
@ -648,18 +648,18 @@ csv_import_assistant_create (CsvImportInfo *info)
|
|||||||
CREATE_COLUMN ("place_holder", PLACE_HOLDER);
|
CREATE_COLUMN ("place_holder", PLACE_HOLDER);
|
||||||
|
|
||||||
/* Finish Page */
|
/* Finish Page */
|
||||||
info->finish_label = GTK_WIDGET(gtk_builder_get_object(builder, "end_page"));
|
info->finish_label = GTK_WIDGET(gtk_builder_get_object (builder, "end_page"));
|
||||||
/* Summary Page */
|
/* Summary Page */
|
||||||
info->summary_label = GTK_WIDGET(gtk_builder_get_object(builder, "summary_label"));
|
info->summary_label = GTK_WIDGET(gtk_builder_get_object (builder, "summary_label"));
|
||||||
info->summary_error_view = GTK_WIDGET(gtk_builder_get_object(builder, "summary_error_view"));
|
info->summary_error_view = GTK_WIDGET(gtk_builder_get_object (builder, "summary_error_view"));
|
||||||
|
|
||||||
g_signal_connect (G_OBJECT(window), "destroy",
|
g_signal_connect (G_OBJECT(window), "destroy",
|
||||||
G_CALLBACK (csv_import_assistant_destroy_cb), info);
|
G_CALLBACK(csv_import_assistant_destroy_cb), info);
|
||||||
|
|
||||||
gnc_restore_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->window));
|
gnc_restore_window_size (GNC_PREFS_GROUP, GTK_WINDOW(info->window));
|
||||||
|
|
||||||
gtk_builder_connect_signals(builder, info);
|
gtk_builder_connect_signals (builder, info);
|
||||||
g_object_unref(G_OBJECT(builder));
|
g_object_unref (G_OBJECT(builder));
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -68,7 +68,7 @@ static QofLogModule log_module = GNC_MOD_ASSISTANT;
|
|||||||
*******************************************************/
|
*******************************************************/
|
||||||
csv_import_result
|
csv_import_result
|
||||||
csv_import_read_file (const gchar *filename, const gchar *parser_regexp,
|
csv_import_read_file (const gchar *filename, const gchar *parser_regexp,
|
||||||
GtkListStore *store, guint max_rows )
|
GtkListStore *store, guint max_rows)
|
||||||
{
|
{
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char *line;
|
char *line;
|
||||||
@ -232,14 +232,14 @@ csv_account_import (CsvImportInfo *info)
|
|||||||
|
|
||||||
ENTER("");
|
ENTER("");
|
||||||
book = gnc_get_current_book();
|
book = gnc_get_current_book();
|
||||||
root = gnc_book_get_root_account(book);
|
root = gnc_book_get_root_account (book);
|
||||||
|
|
||||||
info->num_new = 0;
|
info->num_new = 0;
|
||||||
info->num_updates = 0;
|
info->num_updates = 0;
|
||||||
|
|
||||||
/* Move to the first valid entry in store */
|
/* Move to the first valid entry in store */
|
||||||
row = info->header_rows;
|
row = info->header_rows;
|
||||||
valid = gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(info->store), &iter, NULL, row );
|
valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(info->store), &iter, NULL, row );
|
||||||
while (valid)
|
while (valid)
|
||||||
{
|
{
|
||||||
/* Walk through the list, reading each row */
|
/* Walk through the list, reading each row */
|
||||||
@ -258,13 +258,13 @@ csv_account_import (CsvImportInfo *info)
|
|||||||
PLACE_HOLDER, &place_holder, -1);
|
PLACE_HOLDER, &place_holder, -1);
|
||||||
|
|
||||||
/* See if we can find the account by full name */
|
/* See if we can find the account by full name */
|
||||||
acc = gnc_account_lookup_by_full_name(root, full_name);
|
acc = gnc_account_lookup_by_full_name (root, full_name);
|
||||||
|
|
||||||
DEBUG("Row is %u and full name is %s", row, full_name);
|
DEBUG("Row is %u and full name is %s", row, full_name);
|
||||||
if (acc == NULL)
|
if (acc == NULL)
|
||||||
{
|
{
|
||||||
/* Account does not exist, Lets try and add it */
|
/* Account does not exist, Lets try and add it */
|
||||||
if (g_strrstr(full_name, name) != NULL)
|
if (g_strrstr (full_name, name) != NULL)
|
||||||
{
|
{
|
||||||
gint string_position;
|
gint string_position;
|
||||||
gnc_commodity *commodity;
|
gnc_commodity *commodity;
|
||||||
@ -272,21 +272,21 @@ csv_account_import (CsvImportInfo *info)
|
|||||||
gchar *full_parent;
|
gchar *full_parent;
|
||||||
|
|
||||||
/* Get full name of parent account, allow for separator */
|
/* Get full name of parent account, allow for separator */
|
||||||
string_position = strlen(full_name) - strlen(name) - 1;
|
string_position = strlen (full_name) - strlen (name) - 1;
|
||||||
|
|
||||||
if (string_position == -1)
|
if (string_position == -1)
|
||||||
full_parent = g_strdup(full_name);
|
full_parent = g_strdup (full_name);
|
||||||
else
|
else
|
||||||
full_parent = g_strndup(full_name, string_position);
|
full_parent = g_strndup (full_name, string_position);
|
||||||
|
|
||||||
parent = gnc_account_lookup_by_full_name(root, full_parent);
|
parent = gnc_account_lookup_by_full_name (root, full_parent);
|
||||||
g_free (full_parent);
|
g_free (full_parent);
|
||||||
|
|
||||||
if (parent == NULL && string_position != -1)
|
if (parent == NULL && string_position != -1)
|
||||||
{
|
{
|
||||||
gchar *text = g_strdup_printf( gettext("Row %u, path to account %s not found, added as top level\n"), row + 1, name );
|
gchar *text = g_strdup_printf (gettext("Row %u, path to account %s not found, added as top level\n"), row + 1, name);
|
||||||
info->error = g_strconcat(info->error, text, NULL);
|
info->error = g_strconcat (info->error, text, NULL);
|
||||||
g_free(text);
|
g_free (text);
|
||||||
PINFO("Unable to import Row %u for account %s, path not found!", row, name);
|
PINFO("Unable to import Row %u for account %s, path not found!", row, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,7 +295,7 @@ csv_account_import (CsvImportInfo *info)
|
|||||||
|
|
||||||
/* Do we have a valid commodity */
|
/* Do we have a valid commodity */
|
||||||
table = gnc_commodity_table_get_table (book);
|
table = gnc_commodity_table_get_table (book);
|
||||||
commodity = gnc_commodity_table_lookup( table, commodityn, commoditym);
|
commodity = gnc_commodity_table_lookup (table, commodityn, commoditym);
|
||||||
|
|
||||||
if (commodity)
|
if (commodity)
|
||||||
{
|
{
|
||||||
@ -305,27 +305,27 @@ csv_account_import (CsvImportInfo *info)
|
|||||||
acc = xaccMallocAccount (book);
|
acc = xaccMallocAccount (book);
|
||||||
xaccAccountBeginEdit (acc);
|
xaccAccountBeginEdit (acc);
|
||||||
xaccAccountSetName (acc, name);
|
xaccAccountSetName (acc, name);
|
||||||
xaccAccountSetType(acc, xaccAccountStringToEnum (type));
|
xaccAccountSetType (acc, xaccAccountStringToEnum (type));
|
||||||
|
|
||||||
if (!g_strcmp0(notes, "") == 0)
|
if (!g_strcmp0 (notes, "") == 0)
|
||||||
xaccAccountSetNotes (acc, notes);
|
xaccAccountSetNotes (acc, notes);
|
||||||
if (!g_strcmp0(description, "") == 0)
|
if (!g_strcmp0 (description, "") == 0)
|
||||||
xaccAccountSetDescription (acc, description);
|
xaccAccountSetDescription (acc, description);
|
||||||
if (!g_strcmp0(code, "") == 0)
|
if (!g_strcmp0 (code, "") == 0)
|
||||||
xaccAccountSetCode (acc, code);
|
xaccAccountSetCode (acc, code);
|
||||||
|
|
||||||
if (!g_strcmp0(color, "") == 0)
|
if (!g_strcmp0 (color, "") == 0)
|
||||||
{
|
{
|
||||||
if (gdk_color_parse(color, &testcolor))
|
if (gdk_color_parse (color, &testcolor))
|
||||||
xaccAccountSetColor (acc, color);
|
xaccAccountSetColor (acc, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_strcmp0(hidden, "T") == 0)
|
if (g_strcmp0 (hidden, "T") == 0)
|
||||||
xaccAccountSetHidden (acc, TRUE);
|
xaccAccountSetHidden (acc, TRUE);
|
||||||
if (g_strcmp0(place_holder, "T") == 0)
|
if (g_strcmp0 (place_holder, "T") == 0)
|
||||||
xaccAccountSetPlaceholder (acc, TRUE);
|
xaccAccountSetPlaceholder (acc, TRUE);
|
||||||
|
|
||||||
xaccAccountSetCommodity(acc, commodity);
|
xaccAccountSetCommodity (acc, commodity);
|
||||||
xaccAccountBeginEdit (parent);
|
xaccAccountBeginEdit (parent);
|
||||||
gnc_account_append_child (parent, acc);
|
gnc_account_append_child (parent, acc);
|
||||||
xaccAccountCommitEdit (parent);
|
xaccAccountCommitEdit (parent);
|
||||||
@ -334,18 +334,18 @@ csv_account_import (CsvImportInfo *info)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gchar *err_string = g_strdup_printf( gettext("Row %u, commodity %s / %s not found\n"), row + 1,
|
gchar *err_string = g_strdup_printf (gettext("Row %u, commodity %s / %s not found\n"), row + 1,
|
||||||
commoditym, commodityn);
|
commoditym, commodityn);
|
||||||
info->error = g_strconcat(info->error, err_string, NULL);
|
info->error = g_strconcat (info->error, err_string, NULL);
|
||||||
g_free(err_string);
|
g_free (err_string);
|
||||||
PINFO("Unable to import Row %u for account %s, commodity!", row, full_name);
|
PINFO("Unable to import Row %u for account %s, commodity!", row, full_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gchar *err_string = g_strdup_printf( gettext("Row %u, account %s not in %s\n"), row + 1, name, full_name);
|
gchar *err_string = g_strdup_printf (gettext("Row %u, account %s not in %s\n"), row + 1, name, full_name);
|
||||||
info->error = g_strconcat(info->error, err_string, NULL);
|
info->error = g_strconcat (info->error, err_string, NULL);
|
||||||
g_free(err_string);
|
g_free (err_string);
|
||||||
PINFO("Unable to import Row %u for account %s, name!", row, full_name);
|
PINFO("Unable to import Row %u for account %s, name!", row, full_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -354,19 +354,19 @@ csv_account_import (CsvImportInfo *info)
|
|||||||
/* Lets try and update the color, notes, description, code entries */
|
/* Lets try and update the color, notes, description, code entries */
|
||||||
DEBUG("Existing account, will try and update account %s", full_name);
|
DEBUG("Existing account, will try and update account %s", full_name);
|
||||||
info->num_updates = info->num_updates + 1;
|
info->num_updates = info->num_updates + 1;
|
||||||
if (!g_strcmp0(color, "") == 0)
|
if (!g_strcmp0 (color, "") == 0)
|
||||||
{
|
{
|
||||||
if (gdk_color_parse(color, &testcolor))
|
if (gdk_color_parse (color, &testcolor))
|
||||||
xaccAccountSetColor (acc, color);
|
xaccAccountSetColor (acc, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!g_strcmp0(notes, "") == 0)
|
if (!g_strcmp0 (notes, "") == 0)
|
||||||
xaccAccountSetNotes (acc, notes);
|
xaccAccountSetNotes (acc, notes);
|
||||||
|
|
||||||
if (!g_strcmp0(description, "") == 0)
|
if (!g_strcmp0 (description, "") == 0)
|
||||||
xaccAccountSetDescription (acc, description);
|
xaccAccountSetDescription (acc, description);
|
||||||
|
|
||||||
if (!g_strcmp0(code, "") == 0)
|
if (!g_strcmp0 (code, "") == 0)
|
||||||
xaccAccountSetCode (acc, code);
|
xaccAccountSetCode (acc, code);
|
||||||
}
|
}
|
||||||
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (info->store), &iter);
|
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (info->store), &iter);
|
||||||
|
@ -44,7 +44,7 @@ typedef enum _csv_import_result csv_import_result;
|
|||||||
csv_import_result
|
csv_import_result
|
||||||
csv_import_read_file (const gchar *filename, const gchar *parser_regexp, GtkListStore *store, guint max_rows );
|
csv_import_read_file (const gchar *filename, const gchar *parser_regexp, GtkListStore *store, guint max_rows );
|
||||||
|
|
||||||
void csv_account_import(CsvImportInfo *info);
|
void csv_account_import (CsvImportInfo *info);
|
||||||
|
|
||||||
#endif /* CSV_ACCOUNT_IMPORT_H */
|
#endif /* CSV_ACCOUNT_IMPORT_H */
|
||||||
|
|
||||||
|
@ -55,11 +55,11 @@ gchar* gnc_csv_column_type_strs[GNC_CSV_NUM_COL_TYPES] = {N_("None"),
|
|||||||
/** A set of sensible defaults for parsing CSV files.
|
/** A set of sensible defaults for parsing CSV files.
|
||||||
* @return StfParseOptions_t* for parsing a file with comma separators
|
* @return StfParseOptions_t* for parsing a file with comma separators
|
||||||
*/
|
*/
|
||||||
static StfParseOptions_t* default_parse_options(void)
|
static StfParseOptions_t* default_parse_options (void)
|
||||||
{
|
{
|
||||||
StfParseOptions_t* options = stf_parse_options_new();
|
StfParseOptions_t* options = stf_parse_options_new();
|
||||||
stf_parse_options_set_type(options, PARSE_TYPE_CSV);
|
stf_parse_options_set_type (options, PARSE_TYPE_CSV);
|
||||||
stf_parse_options_csv_set_separators(options, ",", NULL);
|
stf_parse_options_csv_set_separators (options, ",", NULL);
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ static StfParseOptions_t* default_parse_options(void)
|
|||||||
* @param format An index specifying a format in date_format_user
|
* @param format An index specifying a format in date_format_user
|
||||||
* @return The parsed value of date_str on success or -1 on failure
|
* @return The parsed value of date_str on success or -1 on failure
|
||||||
*/
|
*/
|
||||||
static time64 parse_date_with_year(const char* date_str, int format)
|
static time64 parse_date_with_year (const char* date_str, int format)
|
||||||
{
|
{
|
||||||
time64 rawtime; /* The integer time */
|
time64 rawtime; /* The integer time */
|
||||||
struct tm retvalue, test_retvalue; /* The time in a broken-down structure */
|
struct tm retvalue, test_retvalue; /* The time in a broken-down structure */
|
||||||
@ -90,9 +90,9 @@ static time64 parse_date_with_year(const char* date_str, int format)
|
|||||||
const char* regex = "^ *([0-9]+) *[-/.'] *([0-9]+) *[-/.'] *([0-9]+).*$|^ *([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]).*$";
|
const char* regex = "^ *([0-9]+) *[-/.'] *([0-9]+) *[-/.'] *([0-9]+).*$|^ *([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]).*$";
|
||||||
|
|
||||||
/* We get our matches using the regular expression. */
|
/* We get our matches using the regular expression. */
|
||||||
regcomp(&preg, regex, REG_EXTENDED);
|
regcomp (&preg, regex, REG_EXTENDED);
|
||||||
regexec(&preg, date_str, 4, pmatch, 0);
|
regexec (&preg, date_str, 4, pmatch, 0);
|
||||||
regfree(&preg);
|
regfree (&preg);
|
||||||
|
|
||||||
/* If there wasn't a match, there was an error. */
|
/* If there wasn't a match, there was an error. */
|
||||||
if (pmatch[0].rm_eo == 0)
|
if (pmatch[0].rm_eo == 0)
|
||||||
@ -148,7 +148,7 @@ static time64 parse_date_with_year(const char* date_str, int format)
|
|||||||
/* Copy the matching substring into date_segment so that we can
|
/* Copy the matching substring into date_segment so that we can
|
||||||
* convert it into an integer. */
|
* convert it into an integer. */
|
||||||
mem_length = pmatch[j].rm_eo - pmatch[j].rm_so;
|
mem_length = pmatch[j].rm_eo - pmatch[j].rm_so;
|
||||||
memcpy(date_segment, date_str + pmatch[j].rm_so, mem_length);
|
memcpy (date_segment, date_str + pmatch[j].rm_so, mem_length);
|
||||||
date_segment[mem_length] = '\0';
|
date_segment[mem_length] = '\0';
|
||||||
|
|
||||||
/* Set the appropriate member of retvalue. Save the original
|
/* Set the appropriate member of retvalue. Save the original
|
||||||
@ -157,7 +157,7 @@ static time64 parse_date_with_year(const char* date_str, int format)
|
|||||||
switch (segment_type)
|
switch (segment_type)
|
||||||
{
|
{
|
||||||
case 'y':
|
case 'y':
|
||||||
retvalue.tm_year = atoi(date_segment);
|
retvalue.tm_year = atoi (date_segment);
|
||||||
|
|
||||||
/* Handle two-digit years. */
|
/* Handle two-digit years. */
|
||||||
if (retvalue.tm_year < 100)
|
if (retvalue.tm_year < 100)
|
||||||
@ -172,11 +172,11 @@ static time64 parse_date_with_year(const char* date_str, int format)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'm':
|
case 'm':
|
||||||
orig_month = retvalue.tm_mon = atoi(date_segment) - 1;
|
orig_month = retvalue.tm_mon = atoi (date_segment) - 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
orig_day = retvalue.tm_mday = atoi(date_segment);
|
orig_day = retvalue.tm_mday = atoi (date_segment);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
j++;
|
j++;
|
||||||
@ -211,7 +211,7 @@ static time64 parse_date_with_year(const char* date_str, int format)
|
|||||||
* @param format An index specifying a format in date_format_user
|
* @param format An index specifying a format in date_format_user
|
||||||
* @return The parsed value of date_str on success or -1 on failure
|
* @return The parsed value of date_str on success or -1 on failure
|
||||||
*/
|
*/
|
||||||
static time64 parse_date_without_year(const char* date_str, int format)
|
static time64 parse_date_without_year (const char* date_str, int format)
|
||||||
{
|
{
|
||||||
time64 rawtime; /* The integer time */
|
time64 rawtime; /* The integer time */
|
||||||
struct tm retvalue, test_retvalue; /* The time in a broken-down structure */
|
struct tm retvalue, test_retvalue; /* The time in a broken-down structure */
|
||||||
@ -231,9 +231,9 @@ static time64 parse_date_without_year(const char* date_str, int format)
|
|||||||
const char* regex = "^ *([0-9]+) *[-/.'] *([0-9]+).*$";
|
const char* regex = "^ *([0-9]+) *[-/.'] *([0-9]+).*$";
|
||||||
|
|
||||||
/* We get our matches using the regular expression. */
|
/* We get our matches using the regular expression. */
|
||||||
regcomp(&preg, regex, REG_EXTENDED);
|
regcomp (&preg, regex, REG_EXTENDED);
|
||||||
regexec(&preg, date_str, 3, pmatch, 0);
|
regexec (&preg, date_str, 3, pmatch, 0);
|
||||||
regfree(&preg);
|
regfree (&preg);
|
||||||
|
|
||||||
/* If there wasn't a match, there was an error. */
|
/* If there wasn't a match, there was an error. */
|
||||||
if (pmatch[0].rm_eo == 0)
|
if (pmatch[0].rm_eo == 0)
|
||||||
@ -259,7 +259,7 @@ static time64 parse_date_without_year(const char* date_str, int format)
|
|||||||
/* Copy the matching substring into date_segment so that we can
|
/* Copy the matching substring into date_segment so that we can
|
||||||
* convert it into an integer. */
|
* convert it into an integer. */
|
||||||
mem_length = pmatch[j].rm_eo - pmatch[j].rm_so;
|
mem_length = pmatch[j].rm_eo - pmatch[j].rm_so;
|
||||||
date_segment = g_new(gchar, mem_length);
|
date_segment = g_new (gchar, mem_length);
|
||||||
memcpy(date_segment, date_str + pmatch[j].rm_so, mem_length);
|
memcpy(date_segment, date_str + pmatch[j].rm_so, mem_length);
|
||||||
date_segment[mem_length] = '\0';
|
date_segment[mem_length] = '\0';
|
||||||
|
|
||||||
@ -269,14 +269,14 @@ static time64 parse_date_without_year(const char* date_str, int format)
|
|||||||
switch (segment_type)
|
switch (segment_type)
|
||||||
{
|
{
|
||||||
case 'm':
|
case 'm':
|
||||||
orig_month = retvalue.tm_mon = atoi(date_segment) - 1;
|
orig_month = retvalue.tm_mon = atoi (date_segment) - 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
orig_day = retvalue.tm_mday = atoi(date_segment);
|
orig_day = retvalue.tm_mday = atoi (date_segment);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
g_free(date_segment);
|
g_free (date_segment);
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -310,18 +310,18 @@ static time64 parse_date_without_year(const char* date_str, int format)
|
|||||||
* @param format An index specifying a format in date_format_user
|
* @param format An index specifying a format in date_format_user
|
||||||
* @return The parsed value of date_str on success or -1 on failure
|
* @return The parsed value of date_str on success or -1 on failure
|
||||||
*/
|
*/
|
||||||
time64 parse_date(const char* date_str, int format)
|
time64 parse_date (const char* date_str, int format)
|
||||||
{
|
{
|
||||||
if (strchr(date_format_user[format], 'y'))
|
if (strchr (date_format_user[format], 'y'))
|
||||||
return parse_date_with_year(date_str, format);
|
return parse_date_with_year (date_str, format);
|
||||||
else
|
else
|
||||||
return parse_date_without_year(date_str, format);
|
return parse_date_without_year (date_str, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Constructor for GncCsvParseData.
|
/** Constructor for GncCsvParseData.
|
||||||
* @return Pointer to a new GncCSvParseData
|
* @return Pointer to a new GncCSvParseData
|
||||||
*/
|
*/
|
||||||
GncCsvParseData* gnc_csv_new_parse_data(void)
|
GncCsvParseData* gnc_csv_new_parse_data (void)
|
||||||
{
|
{
|
||||||
GncCsvParseData* parse_data = g_new(GncCsvParseData, 1);
|
GncCsvParseData* parse_data = g_new(GncCsvParseData, 1);
|
||||||
parse_data->encoding = "UTF-8";
|
parse_data->encoding = "UTF-8";
|
||||||
@ -346,32 +346,32 @@ GncCsvParseData* gnc_csv_new_parse_data(void)
|
|||||||
/** Destructor for GncCsvParseData.
|
/** Destructor for GncCsvParseData.
|
||||||
* @param parse_data Parse data whose memory will be freed
|
* @param parse_data Parse data whose memory will be freed
|
||||||
*/
|
*/
|
||||||
void gnc_csv_parse_data_free(GncCsvParseData* parse_data)
|
void gnc_csv_parse_data_free (GncCsvParseData* parse_data)
|
||||||
{
|
{
|
||||||
/* All non-NULL pointers have been initialized and must be freed. */
|
/* All non-NULL pointers have been initialized and must be freed. */
|
||||||
|
|
||||||
if (parse_data->raw_mapping != NULL)
|
if (parse_data->raw_mapping != NULL)
|
||||||
{
|
{
|
||||||
g_mapped_file_unref(parse_data->raw_mapping);
|
g_mapped_file_unref (parse_data->raw_mapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parse_data->file_str.begin != NULL)
|
if (parse_data->file_str.begin != NULL)
|
||||||
g_free(parse_data->file_str.begin);
|
g_free (parse_data->file_str.begin);
|
||||||
|
|
||||||
if (parse_data->orig_lines != NULL)
|
if (parse_data->orig_lines != NULL)
|
||||||
stf_parse_general_free(parse_data->orig_lines);
|
stf_parse_general_free (parse_data->orig_lines);
|
||||||
|
|
||||||
if (parse_data->orig_row_lengths != NULL)
|
if (parse_data->orig_row_lengths != NULL)
|
||||||
g_array_free(parse_data->orig_row_lengths, FALSE);
|
g_array_free (parse_data->orig_row_lengths, FALSE);
|
||||||
|
|
||||||
if (parse_data->options != NULL)
|
if (parse_data->options != NULL)
|
||||||
stf_parse_options_free(parse_data->options);
|
stf_parse_options_free (parse_data->options);
|
||||||
|
|
||||||
if (parse_data->column_types != NULL)
|
if (parse_data->column_types != NULL)
|
||||||
g_array_free(parse_data->column_types, TRUE);
|
g_array_free (parse_data->column_types, TRUE);
|
||||||
|
|
||||||
if (parse_data->error_lines != NULL)
|
if (parse_data->error_lines != NULL)
|
||||||
g_list_free(parse_data->error_lines);
|
g_list_free (parse_data->error_lines);
|
||||||
|
|
||||||
if (parse_data->transactions != NULL)
|
if (parse_data->transactions != NULL)
|
||||||
{
|
{
|
||||||
@ -380,15 +380,15 @@ void gnc_csv_parse_data_free(GncCsvParseData* parse_data)
|
|||||||
* the list before freeing the entire list. */
|
* the list before freeing the entire list. */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
g_free(transactions->data);
|
g_free (transactions->data);
|
||||||
transactions = g_list_next(transactions);
|
transactions = g_list_next (transactions);
|
||||||
}
|
}
|
||||||
while (transactions != NULL);
|
while (transactions != NULL);
|
||||||
g_list_free(parse_data->transactions);
|
g_list_free (parse_data->transactions);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free(parse_data->chunk);
|
g_free (parse_data->chunk);
|
||||||
g_free(parse_data);
|
g_free (parse_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Converts raw file data using a new encoding. This function must be
|
/** Converts raw file data using a new encoding. This function must be
|
||||||
@ -399,7 +399,7 @@ void gnc_csv_parse_data_free(GncCsvParseData* parse_data)
|
|||||||
* @param error Will point to an error on failure
|
* @param error Will point to an error on failure
|
||||||
* @return 0 on success, 1 on failure
|
* @return 0 on success, 1 on failure
|
||||||
*/
|
*/
|
||||||
int gnc_csv_convert_encoding(GncCsvParseData* parse_data, const char* encoding,
|
int gnc_csv_convert_encoding (GncCsvParseData* parse_data, const char* encoding,
|
||||||
GError** error)
|
GError** error)
|
||||||
{
|
{
|
||||||
gsize bytes_read, bytes_written;
|
gsize bytes_read, bytes_written;
|
||||||
@ -412,7 +412,7 @@ int gnc_csv_convert_encoding(GncCsvParseData* parse_data, const char* encoding,
|
|||||||
g_free(parse_data->file_str.begin);
|
g_free(parse_data->file_str.begin);
|
||||||
|
|
||||||
/* Do the actual translation to UTF-8. */
|
/* Do the actual translation to UTF-8. */
|
||||||
parse_data->file_str.begin = g_convert(parse_data->raw_str.begin,
|
parse_data->file_str.begin = g_convert (parse_data->raw_str.begin,
|
||||||
parse_data->raw_str.end - parse_data->raw_str.begin,
|
parse_data->raw_str.end - parse_data->raw_str.begin,
|
||||||
"UTF-8", encoding, &bytes_read, &bytes_written,
|
"UTF-8", encoding, &bytes_read, &bytes_written,
|
||||||
error);
|
error);
|
||||||
@ -439,43 +439,43 @@ int gnc_csv_convert_encoding(GncCsvParseData* parse_data, const char* encoding,
|
|||||||
* @param error Will contain an error if there is a failure
|
* @param error Will contain an error if there is a failure
|
||||||
* @return 0 on success, 1 on failure
|
* @return 0 on success, 1 on failure
|
||||||
*/
|
*/
|
||||||
int gnc_csv_load_file(GncCsvParseData* parse_data, const char* filename,
|
int gnc_csv_load_file (GncCsvParseData* parse_data, const char* filename,
|
||||||
GError** error)
|
GError** error)
|
||||||
{
|
{
|
||||||
const char* guess_enc = NULL;
|
const char* guess_enc = NULL;
|
||||||
|
|
||||||
/* Get the raw data first and handle an error if one occurs. */
|
/* Get the raw data first and handle an error if one occurs. */
|
||||||
parse_data->raw_mapping = g_mapped_file_new(filename, FALSE, error);
|
parse_data->raw_mapping = g_mapped_file_new (filename, FALSE, error);
|
||||||
if (parse_data->raw_mapping == NULL)
|
if (parse_data->raw_mapping == NULL)
|
||||||
{
|
{
|
||||||
/* TODO Handle file opening errors more specifically,
|
/* TODO Handle file opening errors more specifically,
|
||||||
* e.g. inexistent file versus no read permission. */
|
* e.g. inexistent file versus no read permission. */
|
||||||
parse_data->raw_str.begin = NULL;
|
parse_data->raw_str.begin = NULL;
|
||||||
g_clear_error (error);
|
g_clear_error (error);
|
||||||
g_set_error(error, 0, GNC_CSV_FILE_OPEN_ERR, "%s", _("File opening failed."));
|
g_set_error (error, 0, GNC_CSV_FILE_OPEN_ERR, "%s", _("File opening failed."));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy the mapping's contents into parse-data->raw_str. */
|
/* Copy the mapping's contents into parse-data->raw_str. */
|
||||||
parse_data->raw_str.begin = g_mapped_file_get_contents(parse_data->raw_mapping);
|
parse_data->raw_str.begin = g_mapped_file_get_contents (parse_data->raw_mapping);
|
||||||
parse_data->raw_str.end = parse_data->raw_str.begin + g_mapped_file_get_length(parse_data->raw_mapping);
|
parse_data->raw_str.end = parse_data->raw_str.begin + g_mapped_file_get_length (parse_data->raw_mapping);
|
||||||
|
|
||||||
/* Make a guess at the encoding of the data. */
|
/* Make a guess at the encoding of the data. */
|
||||||
if (!g_mapped_file_get_length(parse_data->raw_mapping) == 0)
|
if (!g_mapped_file_get_length (parse_data->raw_mapping) == 0)
|
||||||
guess_enc = go_guess_encoding((const char*)(parse_data->raw_str.begin),
|
guess_enc = go_guess_encoding ((const char*)(parse_data->raw_str.begin),
|
||||||
(size_t)(parse_data->raw_str.end - parse_data->raw_str.begin),
|
(size_t)(parse_data->raw_str.end - parse_data->raw_str.begin),
|
||||||
"UTF-8", NULL);
|
"UTF-8", NULL);
|
||||||
if (guess_enc == NULL)
|
if (guess_enc == NULL)
|
||||||
{
|
{
|
||||||
g_set_error(error, 0, GNC_CSV_ENCODING_ERR, "%s", _("Unknown encoding."));
|
g_set_error (error, 0, GNC_CSV_ENCODING_ERR, "%s", _("Unknown encoding."));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
/* Convert using the guessed encoding into parse_data->file_str and
|
/* Convert using the guessed encoding into parse_data->file_str and
|
||||||
* handle any errors that occur. */
|
* handle any errors that occur. */
|
||||||
gnc_csv_convert_encoding(parse_data, guess_enc, error);
|
gnc_csv_convert_encoding (parse_data, guess_enc, error);
|
||||||
if (parse_data->file_str.begin == NULL)
|
if (parse_data->file_str.begin == NULL)
|
||||||
{
|
{
|
||||||
g_set_error(error, 0, GNC_CSV_ENCODING_ERR, "%s", _("Unknown encoding."));
|
g_set_error (error, 0, GNC_CSV_ENCODING_ERR, "%s", _("Unknown encoding."));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -494,21 +494,21 @@ int gnc_csv_load_file(GncCsvParseData* parse_data, const char* filename,
|
|||||||
* @param error Will contain an error if there is a failure
|
* @param error Will contain an error if there is a failure
|
||||||
* @return 0 on success, 1 on failure
|
* @return 0 on success, 1 on failure
|
||||||
*/
|
*/
|
||||||
int gnc_csv_parse(GncCsvParseData* parse_data, gboolean guessColTypes, GError** error)
|
int gnc_csv_parse (GncCsvParseData* parse_data, gboolean guessColTypes, GError** error)
|
||||||
{
|
{
|
||||||
/* max_cols is the number of columns in the row with the most columns. */
|
/* max_cols is the number of columns in the row with the most columns. */
|
||||||
int i, max_cols = 0;
|
int i, max_cols = 0;
|
||||||
|
|
||||||
if (parse_data->orig_lines != NULL)
|
if (parse_data->orig_lines != NULL)
|
||||||
{
|
{
|
||||||
stf_parse_general_free(parse_data->orig_lines);
|
stf_parse_general_free (parse_data->orig_lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If everything is fine ... */
|
/* If everything is fine ... */
|
||||||
if (parse_data->file_str.begin != NULL)
|
if (parse_data->file_str.begin != NULL)
|
||||||
{
|
{
|
||||||
/* Do the actual parsing. */
|
/* Do the actual parsing. */
|
||||||
parse_data->orig_lines = stf_parse_general(parse_data->options, parse_data->chunk,
|
parse_data->orig_lines = stf_parse_general (parse_data->options, parse_data->chunk,
|
||||||
parse_data->file_str.begin,
|
parse_data->file_str.begin,
|
||||||
parse_data->file_str.end);
|
parse_data->file_str.end);
|
||||||
}
|
}
|
||||||
@ -520,12 +520,12 @@ int gnc_csv_parse(GncCsvParseData* parse_data, gboolean guessColTypes, GError**
|
|||||||
|
|
||||||
/* Record the original row lengths of parse_data->orig_lines. */
|
/* Record the original row lengths of parse_data->orig_lines. */
|
||||||
if (parse_data->orig_row_lengths != NULL)
|
if (parse_data->orig_row_lengths != NULL)
|
||||||
g_array_free(parse_data->orig_row_lengths, FALSE);
|
g_array_free (parse_data->orig_row_lengths, FALSE);
|
||||||
|
|
||||||
parse_data->orig_row_lengths =
|
parse_data->orig_row_lengths =
|
||||||
g_array_sized_new(FALSE, FALSE, sizeof(int), parse_data->orig_lines->len);
|
g_array_sized_new (FALSE, FALSE, sizeof(int), parse_data->orig_lines->len);
|
||||||
|
|
||||||
g_array_set_size(parse_data->orig_row_lengths, parse_data->orig_lines->len);
|
g_array_set_size (parse_data->orig_row_lengths, parse_data->orig_lines->len);
|
||||||
parse_data->orig_max_row = 0;
|
parse_data->orig_max_row = 0;
|
||||||
for (i = 0; i < parse_data->orig_lines->len; i++)
|
for (i = 0; i < parse_data->orig_lines->len; i++)
|
||||||
{
|
{
|
||||||
@ -538,7 +538,7 @@ int gnc_csv_parse(GncCsvParseData* parse_data, gboolean guessColTypes, GError**
|
|||||||
/* If it failed, generate an error. */
|
/* If it failed, generate an error. */
|
||||||
if (parse_data->orig_lines == NULL)
|
if (parse_data->orig_lines == NULL)
|
||||||
{
|
{
|
||||||
g_set_error(error, 0, 0, "Parsing failed.");
|
g_set_error (error, 0, 0, "Parsing failed.");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -553,13 +553,13 @@ int gnc_csv_parse(GncCsvParseData* parse_data, gboolean guessColTypes, GError**
|
|||||||
{
|
{
|
||||||
/* Free parse_data->column_types if it's already been created. */
|
/* Free parse_data->column_types if it's already been created. */
|
||||||
if (parse_data->column_types != NULL)
|
if (parse_data->column_types != NULL)
|
||||||
g_array_free(parse_data->column_types, TRUE);
|
g_array_free (parse_data->column_types, TRUE);
|
||||||
|
|
||||||
/* Create parse_data->column_types and fill it with guesses based
|
/* Create parse_data->column_types and fill it with guesses based
|
||||||
* on the contents of each column. */
|
* on the contents of each column. */
|
||||||
parse_data->column_types = g_array_sized_new(FALSE, FALSE, sizeof(int),
|
parse_data->column_types = g_array_sized_new (FALSE, FALSE, sizeof(int),
|
||||||
max_cols);
|
max_cols);
|
||||||
g_array_set_size(parse_data->column_types, max_cols);
|
g_array_set_size (parse_data->column_types, max_cols);
|
||||||
/* TODO Make it actually guess. */
|
/* TODO Make it actually guess. */
|
||||||
for (i = 0; i < parse_data->column_types->len; i++)
|
for (i = 0; i < parse_data->column_types->len; i++)
|
||||||
{
|
{
|
||||||
@ -574,7 +574,7 @@ int gnc_csv_parse(GncCsvParseData* parse_data, gboolean guessColTypes, GError**
|
|||||||
* parse_data->column_types should have already been
|
* parse_data->column_types should have already been
|
||||||
* initialized, so we don't check for it being NULL. */
|
* initialized, so we don't check for it being NULL. */
|
||||||
int i = parse_data->column_types->len;
|
int i = parse_data->column_types->len;
|
||||||
g_array_set_size(parse_data->column_types, max_cols);
|
g_array_set_size (parse_data->column_types, max_cols);
|
||||||
for (; i < parse_data->column_types->len; i++)
|
for (; i < parse_data->column_types->len; i++)
|
||||||
{
|
{
|
||||||
parse_data->column_types->data[i] = GNC_CSV_NONE;
|
parse_data->column_types->data[i] = GNC_CSV_NONE;
|
||||||
@ -605,9 +605,9 @@ typedef struct
|
|||||||
/** Constructor for TransProperty.
|
/** Constructor for TransProperty.
|
||||||
* @param type The type of the new property (see TransProperty.type for possible values)
|
* @param type The type of the new property (see TransProperty.type for possible values)
|
||||||
*/
|
*/
|
||||||
static TransProperty* trans_property_new(int type, TransPropertyList* list)
|
static TransProperty* trans_property_new (int type, TransPropertyList* list)
|
||||||
{
|
{
|
||||||
TransProperty* prop = g_new(TransProperty, 1);
|
TransProperty* prop = g_new (TransProperty, 1);
|
||||||
prop->type = type;
|
prop->type = type;
|
||||||
prop->list = list;
|
prop->list = list;
|
||||||
prop->value = NULL;
|
prop->value = NULL;
|
||||||
@ -617,7 +617,7 @@ static TransProperty* trans_property_new(int type, TransPropertyList* list)
|
|||||||
/** Destructor for TransProperty.
|
/** Destructor for TransProperty.
|
||||||
* @param prop The property to be freed
|
* @param prop The property to be freed
|
||||||
*/
|
*/
|
||||||
static void trans_property_free(TransProperty* prop)
|
static void trans_property_free (TransProperty* prop)
|
||||||
{
|
{
|
||||||
switch (prop->type)
|
switch (prop->type)
|
||||||
{
|
{
|
||||||
@ -632,7 +632,7 @@ static void trans_property_free(TransProperty* prop)
|
|||||||
g_free(prop->value);
|
g_free(prop->value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
g_free(prop);
|
g_free (prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets the value of the property by parsing str. Note: this should
|
/** Sets the value of the property by parsing str. Note: this should
|
||||||
@ -642,7 +642,7 @@ static void trans_property_free(TransProperty* prop)
|
|||||||
* @param str The string to be parsed
|
* @param str The string to be parsed
|
||||||
* @return TRUE on success, FALSE on failure
|
* @return TRUE on success, FALSE on failure
|
||||||
*/
|
*/
|
||||||
static gboolean trans_property_set(TransProperty* prop, char* str)
|
static gboolean trans_property_set (TransProperty* prop, char* str)
|
||||||
{
|
{
|
||||||
char *endptr, *possible_currency_symbol, *str_dupe;
|
char *endptr, *possible_currency_symbol, *str_dupe;
|
||||||
gnc_numeric val;
|
gnc_numeric val;
|
||||||
@ -656,37 +656,37 @@ static gboolean trans_property_set(TransProperty* prop, char* str)
|
|||||||
case GNC_CSV_DESCRIPTION:
|
case GNC_CSV_DESCRIPTION:
|
||||||
case GNC_CSV_NOTES:
|
case GNC_CSV_NOTES:
|
||||||
case GNC_CSV_NUM:
|
case GNC_CSV_NUM:
|
||||||
prop->value = g_strdup(str);
|
prop->value = g_strdup (str);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case GNC_CSV_BALANCE:
|
case GNC_CSV_BALANCE:
|
||||||
case GNC_CSV_DEPOSIT:
|
case GNC_CSV_DEPOSIT:
|
||||||
case GNC_CSV_WITHDRAWAL:
|
case GNC_CSV_WITHDRAWAL:
|
||||||
str_dupe = g_strdup(str); /* First, we make a copy so we can't mess up real data. */
|
str_dupe = g_strdup (str); /* First, we make a copy so we can't mess up real data. */
|
||||||
/* If a cell is empty make its value = 0.0 */
|
/* If a cell is empty make its value = 0.0 */
|
||||||
if ( strcmp(str_dupe, "") == 0)
|
if (strcmp (str_dupe, "") == 0)
|
||||||
{
|
{
|
||||||
g_free(str_dupe);
|
g_free (str_dupe);
|
||||||
str_dupe = g_strdup("0.0");
|
str_dupe = g_strdup ("0.0");
|
||||||
}
|
}
|
||||||
/* Go through str_dupe looking for currency symbols. */
|
/* 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))
|
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)
|
if (g_unichar_type (g_utf8_get_char (possible_currency_symbol)) == G_UNICODE_CURRENCY_SYMBOL)
|
||||||
{
|
{
|
||||||
/* If we find a currency symbol, save the position just ahead
|
/* If we find a currency symbol, save the position just ahead
|
||||||
* of the currency symbol (next_symbol), and find the null
|
* of the currency symbol (next_symbol), and find the null
|
||||||
* terminator of the string (last_symbol). */
|
* terminator of the string (last_symbol). */
|
||||||
char *next_symbol = g_utf8_next_char(possible_currency_symbol), *last_symbol = next_symbol;
|
char *next_symbol = g_utf8_next_char (possible_currency_symbol), *last_symbol = next_symbol;
|
||||||
while (*last_symbol)
|
while (*last_symbol)
|
||||||
last_symbol = g_utf8_next_char(last_symbol);
|
last_symbol = g_utf8_next_char (last_symbol);
|
||||||
|
|
||||||
/* Move all of the string (including the null byte, which is
|
/* Move all of the string (including the null byte, which is
|
||||||
* why we have +1 in the size parameter) following the
|
* why we have +1 in the size parameter) following the
|
||||||
* currency symbol back one character, thereby overwriting the
|
* currency symbol back one character, thereby overwriting the
|
||||||
* currency symbol. */
|
* currency symbol. */
|
||||||
memmove(possible_currency_symbol, next_symbol, last_symbol - next_symbol + 1);
|
memmove (possible_currency_symbol, next_symbol, last_symbol - next_symbol + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -696,33 +696,33 @@ static gboolean trans_property_set(TransProperty* prop, char* str)
|
|||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
/* Currancy locale */
|
/* Currancy locale */
|
||||||
if (!(xaccParseAmount(str_dupe, TRUE, &val, &endptr)))
|
if (!(xaccParseAmount (str_dupe, TRUE, &val, &endptr)))
|
||||||
{
|
{
|
||||||
g_free(str_dupe);
|
g_free (str_dupe);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
/* Currancy decimal period */
|
/* Currancy decimal period */
|
||||||
if (!(xaccParseAmountExtended(str_dupe, TRUE, '-', '.', ',', "\003\003", "$+", &val, &endptr)))
|
if (!(xaccParseAmountExtended (str_dupe, TRUE, '-', '.', ',', "\003\003", "$+", &val, &endptr)))
|
||||||
{
|
{
|
||||||
g_free(str_dupe);
|
g_free (str_dupe);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
/* Currancy decimal comma */
|
/* Currancy decimal comma */
|
||||||
if (!(xaccParseAmountExtended(str_dupe, TRUE, '-', ',', '.', "\003\003", "$+", &val, &endptr)))
|
if (!(xaccParseAmountExtended (str_dupe, TRUE, '-', ',', '.', "\003\003", "$+", &val, &endptr)))
|
||||||
{
|
{
|
||||||
g_free(str_dupe);
|
g_free (str_dupe);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
prop->value = g_new(gnc_numeric, 1);
|
prop->value = g_new (gnc_numeric, 1);
|
||||||
*((gnc_numeric*)(prop->value)) = val;
|
*((gnc_numeric*)(prop->value)) = val;
|
||||||
g_free(str_dupe);
|
g_free (str_dupe);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -734,9 +734,9 @@ static gboolean trans_property_set(TransProperty* prop, char* str)
|
|||||||
* @param date_format An index from date_format_user for how date properties should be parsed
|
* @param date_format An index from date_format_user for how date properties should be parsed
|
||||||
* @return A pointer to a new TransPropertyList
|
* @return A pointer to a new TransPropertyList
|
||||||
*/
|
*/
|
||||||
static TransPropertyList* trans_property_list_new(Account* account, int date_format, int currency_format)
|
static TransPropertyList* trans_property_list_new (Account* account, int date_format, int currency_format)
|
||||||
{
|
{
|
||||||
TransPropertyList* list = g_new(TransPropertyList, 1);
|
TransPropertyList* list = g_new (TransPropertyList, 1);
|
||||||
list->account = account;
|
list->account = account;
|
||||||
list->date_format = date_format;
|
list->date_format = date_format;
|
||||||
list->currency_format = currency_format;
|
list->currency_format = currency_format;
|
||||||
@ -747,17 +747,17 @@ static TransPropertyList* trans_property_list_new(Account* account, int date_for
|
|||||||
/** Destructor for TransPropertyList.
|
/** Destructor for TransPropertyList.
|
||||||
* @param list The list to be freed
|
* @param list The list to be freed
|
||||||
*/
|
*/
|
||||||
static void trans_property_list_free(TransPropertyList* list)
|
static void trans_property_list_free (TransPropertyList* list)
|
||||||
{
|
{
|
||||||
/* Free all of the properties in this list before freeeing the list itself. */
|
/* Free all of the properties in this list before freeeing the list itself. */
|
||||||
GList* properties_begin = list->properties;
|
GList* properties_begin = list->properties;
|
||||||
while (list->properties != NULL)
|
while (list->properties != NULL)
|
||||||
{
|
{
|
||||||
trans_property_free((TransProperty*)(list->properties->data));
|
trans_property_free ((TransProperty*)(list->properties->data));
|
||||||
list->properties = g_list_next(list->properties);
|
list->properties = g_list_next (list->properties);
|
||||||
}
|
}
|
||||||
g_list_free(properties_begin);
|
g_list_free (properties_begin);
|
||||||
g_free(list);
|
g_free (list);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Adds a property to the list it's linked with.
|
/** Adds a property to the list it's linked with.
|
||||||
@ -765,9 +765,9 @@ static void trans_property_list_free(TransPropertyList* list)
|
|||||||
* associated with a list when it's constructed.)
|
* associated with a list when it's constructed.)
|
||||||
* @param property The property to be added to its list
|
* @param property The property to be added to its list
|
||||||
*/
|
*/
|
||||||
static void trans_property_list_add(TransProperty* property)
|
static void trans_property_list_add (TransProperty* property)
|
||||||
{
|
{
|
||||||
property->list->properties = g_list_append(property->list->properties, property);
|
property->list->properties = g_list_append (property->list->properties, property);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Adds a split to a transaction.
|
/** Adds a split to a transaction.
|
||||||
@ -776,16 +776,16 @@ static void trans_property_list_add(TransProperty* property)
|
|||||||
* @param book The book where the split should be stored
|
* @param book The book where the split should be stored
|
||||||
* @param amount The amount of the split
|
* @param amount The amount of the split
|
||||||
*/
|
*/
|
||||||
static void trans_add_split(Transaction* trans, Account* account, QofBook* book,
|
static void trans_add_split (Transaction* trans, Account* account, QofBook* book,
|
||||||
gnc_numeric amount, const char *num)
|
gnc_numeric amount, const char *num)
|
||||||
{
|
{
|
||||||
Split* split = xaccMallocSplit(book);
|
Split* split = xaccMallocSplit (book);
|
||||||
xaccSplitSetAccount(split, account);
|
xaccSplitSetAccount (split, account);
|
||||||
xaccSplitSetParent(split, trans);
|
xaccSplitSetParent (split, trans);
|
||||||
xaccSplitSetAmount(split, amount);
|
xaccSplitSetAmount (split, amount);
|
||||||
xaccSplitSetValue(split, amount);
|
xaccSplitSetValue (split, amount);
|
||||||
/* set tran-num and/or split-action per book option */
|
/* set tran-num and/or split-action per book option */
|
||||||
gnc_set_num_action(trans, split, num, NULL);
|
gnc_set_num_action (trans, split, num, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Tests a TransPropertyList for having enough essential properties.
|
/** Tests a TransPropertyList for having enough essential properties.
|
||||||
@ -795,7 +795,7 @@ static void trans_add_split(Transaction* trans, Account* account, QofBook* book,
|
|||||||
* @param error Contains an error message on failure
|
* @param error Contains an error message on failure
|
||||||
* @return TRUE if there are enough essentials; FALSE otherwise
|
* @return TRUE if there are enough essentials; FALSE otherwise
|
||||||
*/
|
*/
|
||||||
static gboolean trans_property_list_verify_essentials(TransPropertyList* list, gchar** error)
|
static gboolean trans_property_list_verify_essentials (TransPropertyList* list, gchar** error)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
/* possible_errors lists the ways in which a list can fail this test. */
|
/* possible_errors lists the ways in which a list can fail this test. */
|
||||||
@ -823,7 +823,7 @@ static gboolean trans_property_list_verify_essentials(TransPropertyList* list, g
|
|||||||
possible_errors[NO_AMOUNT] = NULL;
|
possible_errors[NO_AMOUNT] = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
list->properties = g_list_next(list->properties);
|
list->properties = g_list_next (list->properties);
|
||||||
}
|
}
|
||||||
list->properties = properties_begin;
|
list->properties = properties_begin;
|
||||||
|
|
||||||
@ -832,10 +832,10 @@ static gboolean trans_property_list_verify_essentials(TransPropertyList* list, g
|
|||||||
{
|
{
|
||||||
if (possible_errors[i] != NULL)
|
if (possible_errors[i] != NULL)
|
||||||
{
|
{
|
||||||
errors_list = g_list_append(errors_list, GINT_TO_POINTER(i));
|
errors_list = g_list_append (errors_list, GINT_TO_POINTER(i));
|
||||||
/* Since we added an error, we want to also store its length for
|
/* Since we added an error, we want to also store its length for
|
||||||
* when we construct the full error string. */
|
* when we construct the full error string. */
|
||||||
possible_error_lengths[i] = strlen(_(possible_errors[i]));
|
possible_error_lengths[i] = strlen (_(possible_errors[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -854,12 +854,12 @@ static gboolean trans_property_list_verify_essentials(TransPropertyList* list, g
|
|||||||
{
|
{
|
||||||
/* We add an extra 1 to account for spaces in between messages. */
|
/* We add an extra 1 to account for spaces in between messages. */
|
||||||
full_error_size += possible_error_lengths[GPOINTER_TO_INT(errors_list->data)] + 1;
|
full_error_size += possible_error_lengths[GPOINTER_TO_INT(errors_list->data)] + 1;
|
||||||
errors_list = g_list_next(errors_list);
|
errors_list = g_list_next (errors_list);
|
||||||
}
|
}
|
||||||
errors_list = errors_list_begin;
|
errors_list = errors_list_begin;
|
||||||
|
|
||||||
/* Append the error messages one after another. */
|
/* Append the error messages one after another. */
|
||||||
error_message = error_message_begin = g_new(gchar, full_error_size);
|
error_message = error_message_begin = g_new (gchar, full_error_size);
|
||||||
while (errors_list)
|
while (errors_list)
|
||||||
{
|
{
|
||||||
i = GPOINTER_TO_INT(errors_list->data);
|
i = GPOINTER_TO_INT(errors_list->data);
|
||||||
@ -871,10 +871,10 @@ static gboolean trans_property_list_verify_essentials(TransPropertyList* list, g
|
|||||||
*error_message = ' ';
|
*error_message = ' ';
|
||||||
error_message++;
|
error_message++;
|
||||||
|
|
||||||
errors_list = g_list_next(errors_list);
|
errors_list = g_list_next (errors_list);
|
||||||
}
|
}
|
||||||
*error_message = '\0'; /* Replace the last space with the null byte. */
|
*error_message = '\0'; /* Replace the last space with the null byte. */
|
||||||
g_list_free(errors_list_begin);
|
g_list_free (errors_list_begin);
|
||||||
|
|
||||||
*error = error_message_begin;
|
*error = error_message_begin;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -886,13 +886,13 @@ static gboolean trans_property_list_verify_essentials(TransPropertyList* list, g
|
|||||||
* @param error Contains an error on failure
|
* @param error Contains an error on failure
|
||||||
* @return On success, a GncCsvTransLine; on failure, the trans pointer is NULL
|
* @return On success, a GncCsvTransLine; on failure, the trans pointer is NULL
|
||||||
*/
|
*/
|
||||||
static GncCsvTransLine* trans_property_list_to_trans(TransPropertyList* list, gchar** error)
|
static GncCsvTransLine* trans_property_list_to_trans (TransPropertyList* list, gchar** error)
|
||||||
{
|
{
|
||||||
GncCsvTransLine* trans_line = g_new(GncCsvTransLine, 1);
|
GncCsvTransLine* trans_line = g_new (GncCsvTransLine, 1);
|
||||||
GList* properties_begin = list->properties;
|
GList* properties_begin = list->properties;
|
||||||
QofBook* book = gnc_account_get_book(list->account);
|
QofBook* book = gnc_account_get_book (list->account);
|
||||||
gnc_commodity* currency = xaccAccountGetCommodity(list->account);
|
gnc_commodity* currency = xaccAccountGetCommodity (list->account);
|
||||||
gnc_numeric amount = double_to_gnc_numeric(0.0, xaccAccountGetCommoditySCU(list->account),
|
gnc_numeric amount = double_to_gnc_numeric (0.0, xaccAccountGetCommoditySCU (list->account),
|
||||||
GNC_HOW_RND_ROUND_HALF_UP);
|
GNC_HOW_RND_ROUND_HALF_UP);
|
||||||
gchar *num = NULL;
|
gchar *num = NULL;
|
||||||
|
|
||||||
@ -910,15 +910,15 @@ static GncCsvTransLine* trans_property_list_to_trans(TransPropertyList* list, gc
|
|||||||
trans_line->line_no = -1;
|
trans_line->line_no = -1;
|
||||||
|
|
||||||
/* Make sure this is a transaction with all the columns we need. */
|
/* Make sure this is a transaction with all the columns we need. */
|
||||||
if (!trans_property_list_verify_essentials(list, error))
|
if (!trans_property_list_verify_essentials (list, error))
|
||||||
{
|
{
|
||||||
g_free(trans_line);
|
g_free(trans_line);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
trans_line->trans = xaccMallocTransaction(book);
|
trans_line->trans = xaccMallocTransaction (book);
|
||||||
xaccTransBeginEdit(trans_line->trans);
|
xaccTransBeginEdit (trans_line->trans);
|
||||||
xaccTransSetCurrency(trans_line->trans, currency);
|
xaccTransSetCurrency (trans_line->trans, currency);
|
||||||
|
|
||||||
/* Go through each of the properties and edit the transaction accordingly. */
|
/* Go through each of the properties and edit the transaction accordingly. */
|
||||||
list->properties = properties_begin;
|
list->properties = properties_begin;
|
||||||
@ -928,15 +928,15 @@ static GncCsvTransLine* trans_property_list_to_trans(TransPropertyList* list, gc
|
|||||||
switch (prop->type)
|
switch (prop->type)
|
||||||
{
|
{
|
||||||
case GNC_CSV_DATE:
|
case GNC_CSV_DATE:
|
||||||
xaccTransSetDatePostedSecsNormalized(trans_line->trans, *((time64*)(prop->value)));
|
xaccTransSetDatePostedSecsNormalized (trans_line->trans, *((time64*)(prop->value)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GNC_CSV_DESCRIPTION:
|
case GNC_CSV_DESCRIPTION:
|
||||||
xaccTransSetDescription(trans_line->trans, (char*)(prop->value));
|
xaccTransSetDescription (trans_line->trans, (char*)(prop->value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GNC_CSV_NOTES:
|
case GNC_CSV_NOTES:
|
||||||
xaccTransSetNotes(trans_line->trans, (char*)(prop->value));
|
xaccTransSetNotes (trans_line->trans, (char*)(prop->value));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GNC_CSV_NUM:
|
case GNC_CSV_NUM:
|
||||||
@ -953,9 +953,9 @@ static GncCsvTransLine* trans_property_list_to_trans(TransPropertyList* list, gc
|
|||||||
case GNC_CSV_DEPOSIT: /* Add deposits to the existing amount. */
|
case GNC_CSV_DEPOSIT: /* Add deposits to the existing amount. */
|
||||||
if (prop->value != NULL)
|
if (prop->value != NULL)
|
||||||
{
|
{
|
||||||
amount = gnc_numeric_add(*((gnc_numeric*)(prop->value)),
|
amount = gnc_numeric_add (*((gnc_numeric*)(prop->value)),
|
||||||
amount,
|
amount,
|
||||||
xaccAccountGetCommoditySCU(list->account),
|
xaccAccountGetCommoditySCU (list->account),
|
||||||
GNC_HOW_RND_ROUND_HALF_UP);
|
GNC_HOW_RND_ROUND_HALF_UP);
|
||||||
amount_set = TRUE;
|
amount_set = TRUE;
|
||||||
/* We will use the "Deposit" and "Withdrawal" columns in preference to "Balance". */
|
/* We will use the "Deposit" and "Withdrawal" columns in preference to "Balance". */
|
||||||
@ -966,9 +966,9 @@ static GncCsvTransLine* trans_property_list_to_trans(TransPropertyList* list, gc
|
|||||||
case GNC_CSV_WITHDRAWAL: /* Withdrawals are just negative deposits. */
|
case GNC_CSV_WITHDRAWAL: /* Withdrawals are just negative deposits. */
|
||||||
if (prop->value != NULL)
|
if (prop->value != NULL)
|
||||||
{
|
{
|
||||||
amount = gnc_numeric_add(gnc_numeric_neg(*((gnc_numeric*)(prop->value))),
|
amount = gnc_numeric_add (gnc_numeric_neg(*((gnc_numeric*)(prop->value))),
|
||||||
amount,
|
amount,
|
||||||
xaccAccountGetCommoditySCU(list->account),
|
xaccAccountGetCommoditySCU (list->account),
|
||||||
GNC_HOW_RND_ROUND_HALF_UP);
|
GNC_HOW_RND_ROUND_HALF_UP);
|
||||||
amount_set = TRUE;
|
amount_set = TRUE;
|
||||||
/* We will use the "Deposit" and "Withdrawal" columns in preference to "Balance". */
|
/* We will use the "Deposit" and "Withdrawal" columns in preference to "Balance". */
|
||||||
@ -986,13 +986,13 @@ static GncCsvTransLine* trans_property_list_to_trans(TransPropertyList* list, gc
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
list->properties = g_list_next(list->properties);
|
list->properties = g_list_next (list->properties);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add a split with the cumulative amount value. */
|
/* Add a split with the cumulative amount value. */
|
||||||
trans_add_split(trans_line->trans, list->account, book, amount, num);
|
trans_add_split (trans_line->trans, list->account, book, amount, num);
|
||||||
if (num)
|
if (num)
|
||||||
g_free(num);
|
g_free (num);
|
||||||
|
|
||||||
return trans_line;
|
return trans_line;
|
||||||
}
|
}
|
||||||
@ -1007,7 +1007,7 @@ static GncCsvTransLine* trans_property_list_to_trans(TransPropertyList* list, gc
|
|||||||
* @param redo_errors TRUE to convert only error data, FALSE for all data
|
* @param redo_errors TRUE to convert only error data, FALSE for all data
|
||||||
* @return 0 on success, 1 on failure
|
* @return 0 on success, 1 on failure
|
||||||
*/
|
*/
|
||||||
int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
int gnc_csv_parse_to_trans (GncCsvParseData* parse_data, Account* account,
|
||||||
gboolean redo_errors)
|
gboolean redo_errors)
|
||||||
{
|
{
|
||||||
gboolean hasBalanceColumn;
|
gboolean hasBalanceColumn;
|
||||||
@ -1033,7 +1033,7 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
}
|
}
|
||||||
if (parse_data->transactions != NULL)
|
if (parse_data->transactions != NULL)
|
||||||
{
|
{
|
||||||
g_list_free(parse_data->transactions);
|
g_list_free (parse_data->transactions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
parse_data->error_lines = NULL;
|
parse_data->error_lines = NULL;
|
||||||
@ -1048,9 +1048,9 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
{
|
{
|
||||||
/* Move last_transaction to the end. */
|
/* Move last_transaction to the end. */
|
||||||
last_transaction = parse_data->transactions;
|
last_transaction = parse_data->transactions;
|
||||||
while (g_list_next(last_transaction) != NULL)
|
while (g_list_next (last_transaction) != NULL)
|
||||||
{
|
{
|
||||||
last_transaction = g_list_next(last_transaction);
|
last_transaction = g_list_next (last_transaction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* ... we use only the lines in error_lines. */
|
/* ... we use only the lines in error_lines. */
|
||||||
@ -1077,7 +1077,7 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
/* This flag is TRUE if there are any errors in this row. */
|
/* This flag is TRUE if there are any errors in this row. */
|
||||||
gboolean errors = FALSE;
|
gboolean errors = FALSE;
|
||||||
gchar* error_message = NULL;
|
gchar* error_message = NULL;
|
||||||
TransPropertyList* list = trans_property_list_new(account, parse_data->date_format, parse_data->currency_format );
|
TransPropertyList* list = trans_property_list_new (account, parse_data->date_format, parse_data->currency_format );
|
||||||
GncCsvTransLine* trans_line = NULL;
|
GncCsvTransLine* trans_line = NULL;
|
||||||
|
|
||||||
for (j = 0; j < line->len; j++)
|
for (j = 0; j < line->len; j++)
|
||||||
@ -1086,20 +1086,20 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
if ((column_types->data[j] != GNC_CSV_NONE) && (column_types->data[j] != GNC_CSV_ACCOUNT))
|
if ((column_types->data[j] != GNC_CSV_NONE) && (column_types->data[j] != GNC_CSV_ACCOUNT))
|
||||||
{
|
{
|
||||||
/* Affect the transaction appropriately. */
|
/* Affect the transaction appropriately. */
|
||||||
TransProperty* property = trans_property_new(column_types->data[j], list);
|
TransProperty* property = trans_property_new (column_types->data[j], list);
|
||||||
gboolean succeeded = trans_property_set(property, line->pdata[j]);
|
gboolean succeeded = trans_property_set (property, line->pdata[j]);
|
||||||
|
|
||||||
/* TODO Maybe move error handling to within TransPropertyList functions? */
|
/* TODO Maybe move error handling to within TransPropertyList functions? */
|
||||||
if (succeeded)
|
if (succeeded)
|
||||||
{
|
{
|
||||||
trans_property_list_add(property);
|
trans_property_list_add (property);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
errors = TRUE;
|
errors = TRUE;
|
||||||
error_message = g_strdup_printf(_("%s column could not be understood."),
|
error_message = g_strdup_printf (_("%s column could not be understood."),
|
||||||
_(gnc_csv_column_type_strs[property->type]));
|
_(gnc_csv_column_type_strs[property->type]));
|
||||||
trans_property_free(property);
|
trans_property_free (property);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1108,16 +1108,16 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
/* If we had success, add the transaction to parse_data->transaction. */
|
/* If we had success, add the transaction to parse_data->transaction. */
|
||||||
if (!errors)
|
if (!errors)
|
||||||
{
|
{
|
||||||
trans_line = trans_property_list_to_trans(list, &error_message);
|
trans_line = trans_property_list_to_trans (list, &error_message);
|
||||||
errors = trans_line == NULL;
|
errors = trans_line == NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
trans_property_list_free(list);
|
trans_property_list_free (list);
|
||||||
|
|
||||||
/* If there were errors, add this line to parse_data->error_lines. */
|
/* If there were errors, add this line to parse_data->error_lines. */
|
||||||
if (errors)
|
if (errors)
|
||||||
{
|
{
|
||||||
parse_data->error_lines = g_list_append(parse_data->error_lines,
|
parse_data->error_lines = g_list_append (parse_data->error_lines,
|
||||||
GINT_TO_POINTER(i));
|
GINT_TO_POINTER(i));
|
||||||
/* If there's already an error message, we need to replace it. */
|
/* If there's already an error message, we need to replace it. */
|
||||||
if (line->len > (int)(parse_data->orig_row_lengths->data[i]))
|
if (line->len > (int)(parse_data->orig_row_lengths->data[i]))
|
||||||
@ -1128,7 +1128,7 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Put the error message at the end of the line. */
|
/* Put the error message at the end of the line. */
|
||||||
g_ptr_array_add(line, error_message);
|
g_ptr_array_add (line, error_message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1143,32 +1143,32 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
|
|
||||||
/* If we can just put it at the end, do so and increment last_transaction. */
|
/* If we can just put it at the end, do so and increment last_transaction. */
|
||||||
if (last_transaction == NULL ||
|
if (last_transaction == NULL ||
|
||||||
xaccTransGetDate(((GncCsvTransLine*)(last_transaction->data))->trans) <= xaccTransGetDate(trans_line->trans))
|
xaccTransGetDate (((GncCsvTransLine*)(last_transaction->data))->trans) <= xaccTransGetDate (trans_line->trans))
|
||||||
{
|
{
|
||||||
parse_data->transactions = g_list_append(parse_data->transactions, trans_line);
|
parse_data->transactions = g_list_append (parse_data->transactions, trans_line);
|
||||||
/* If this is the first transaction, we need to get last_transaction on track. */
|
/* If this is the first transaction, we need to get last_transaction on track. */
|
||||||
if (last_transaction == NULL)
|
if (last_transaction == NULL)
|
||||||
last_transaction = parse_data->transactions;
|
last_transaction = parse_data->transactions;
|
||||||
else /* Otherwise, we can just continue. */
|
else /* Otherwise, we can just continue. */
|
||||||
last_transaction = g_list_next(last_transaction);
|
last_transaction = g_list_next (last_transaction);
|
||||||
}
|
}
|
||||||
/* Otherwise, search backward for the correct spot. */
|
/* Otherwise, search backward for the correct spot. */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GList* insertion_spot = last_transaction;
|
GList* insertion_spot = last_transaction;
|
||||||
while (insertion_spot != NULL &&
|
while (insertion_spot != NULL &&
|
||||||
xaccTransGetDate(((GncCsvTransLine*)(insertion_spot->data))->trans) > xaccTransGetDate(trans_line->trans))
|
xaccTransGetDate (((GncCsvTransLine*)(insertion_spot->data))->trans) > xaccTransGetDate (trans_line->trans))
|
||||||
{
|
{
|
||||||
insertion_spot = g_list_previous(insertion_spot);
|
insertion_spot = g_list_previous (insertion_spot);
|
||||||
}
|
}
|
||||||
/* Move insertion_spot one location forward since we have to
|
/* Move insertion_spot one location forward since we have to
|
||||||
* use the g_list_insert_before function. */
|
* use the g_list_insert_before function. */
|
||||||
if (insertion_spot == NULL) /* We need to handle the case of inserting at the beginning of the list. */
|
if (insertion_spot == NULL) /* We need to handle the case of inserting at the beginning of the list. */
|
||||||
insertion_spot = parse_data->transactions;
|
insertion_spot = parse_data->transactions;
|
||||||
else
|
else
|
||||||
insertion_spot = g_list_next(insertion_spot);
|
insertion_spot = g_list_next (insertion_spot);
|
||||||
|
|
||||||
parse_data->transactions = g_list_insert_before(parse_data->transactions, insertion_spot, trans_line);
|
parse_data->transactions = g_list_insert_before (parse_data->transactions, insertion_spot, trans_line);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1176,7 +1176,7 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
if (redo_errors)
|
if (redo_errors)
|
||||||
{
|
{
|
||||||
/* Move to the next error line in the list. */
|
/* Move to the next error line in the list. */
|
||||||
error_lines = g_list_next(error_lines);
|
error_lines = g_list_next (error_lines);
|
||||||
if (error_lines == NULL)
|
if (error_lines == NULL)
|
||||||
i = parse_data->orig_lines->len; /* Don't continue the for loop. */
|
i = parse_data->orig_lines->len; /* Don't continue the for loop. */
|
||||||
else
|
else
|
||||||
@ -1207,53 +1207,53 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
* differs from what it will be after the transactions are
|
* differs from what it will be after the transactions are
|
||||||
* imported. This will be sum of all the previous transactions for
|
* imported. This will be sum of all the previous transactions for
|
||||||
* any given transaction. */
|
* any given transaction. */
|
||||||
gnc_numeric balance_offset = double_to_gnc_numeric(0.0,
|
gnc_numeric balance_offset = double_to_gnc_numeric (0.0,
|
||||||
xaccAccountGetCommoditySCU(account),
|
xaccAccountGetCommoditySCU (account),
|
||||||
GNC_HOW_RND_ROUND_HALF_UP);
|
GNC_HOW_RND_ROUND_HALF_UP);
|
||||||
while (transactions != NULL)
|
while (transactions != NULL)
|
||||||
{
|
{
|
||||||
GncCsvTransLine* trans_line = (GncCsvTransLine*)transactions->data;
|
GncCsvTransLine* trans_line = (GncCsvTransLine*)transactions->data;
|
||||||
if (trans_line->balance_set)
|
if (trans_line->balance_set)
|
||||||
{
|
{
|
||||||
time64 date = xaccTransGetDate(trans_line->trans);
|
time64 date = xaccTransGetDate (trans_line->trans);
|
||||||
/* Find what the balance should be by adding the offset to the actual balance. */
|
/* Find what the balance should be by adding the offset to the actual balance. */
|
||||||
gnc_numeric existing_balance = gnc_numeric_add(balance_offset,
|
gnc_numeric existing_balance = gnc_numeric_add (balance_offset,
|
||||||
xaccAccountGetBalanceAsOfDate(account, date),
|
xaccAccountGetBalanceAsOfDate (account, date),
|
||||||
xaccAccountGetCommoditySCU(account),
|
xaccAccountGetCommoditySCU (account),
|
||||||
GNC_HOW_RND_ROUND_HALF_UP);
|
GNC_HOW_RND_ROUND_HALF_UP);
|
||||||
|
|
||||||
/* The amount of the transaction is the difference between the new and existing balance. */
|
/* The amount of the transaction is the difference between the new and existing balance. */
|
||||||
gnc_numeric amount = gnc_numeric_sub(trans_line->balance,
|
gnc_numeric amount = gnc_numeric_sub (trans_line->balance,
|
||||||
existing_balance,
|
existing_balance,
|
||||||
xaccAccountGetCommoditySCU(account),
|
xaccAccountGetCommoditySCU (account),
|
||||||
GNC_HOW_RND_ROUND_HALF_UP);
|
GNC_HOW_RND_ROUND_HALF_UP);
|
||||||
|
|
||||||
SplitList* splits = xaccTransGetSplitList(trans_line->trans);
|
SplitList* splits = xaccTransGetSplitList (trans_line->trans);
|
||||||
while (splits)
|
while (splits)
|
||||||
{
|
{
|
||||||
SplitList* next_splits = g_list_next(splits);
|
SplitList* next_splits = g_list_next (splits);
|
||||||
xaccSplitDestroy((Split*)splits->data);
|
xaccSplitDestroy ((Split*)splits->data);
|
||||||
splits = next_splits;
|
splits = next_splits;
|
||||||
}
|
}
|
||||||
|
|
||||||
trans_add_split(trans_line->trans, account,
|
trans_add_split (trans_line->trans, account,
|
||||||
gnc_account_get_book(account), amount, trans_line->num);
|
gnc_account_get_book (account), amount, trans_line->num);
|
||||||
if (trans_line->num)
|
if (trans_line->num)
|
||||||
g_free(trans_line->num);
|
g_free (trans_line->num);
|
||||||
|
|
||||||
/* This new transaction needs to be added to the balance offset. */
|
/* This new transaction needs to be added to the balance offset. */
|
||||||
balance_offset = gnc_numeric_add(balance_offset,
|
balance_offset = gnc_numeric_add (balance_offset,
|
||||||
amount,
|
amount,
|
||||||
xaccAccountGetCommoditySCU(account),
|
xaccAccountGetCommoditySCU (account),
|
||||||
GNC_HOW_RND_ROUND_HALF_UP);
|
GNC_HOW_RND_ROUND_HALF_UP);
|
||||||
}
|
}
|
||||||
transactions = g_list_next(transactions);
|
transactions = g_list_next (transactions);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (redo_errors) /* Now that we're at the end, we do the freeing. */
|
if (redo_errors) /* Now that we're at the end, we do the freeing. */
|
||||||
{
|
{
|
||||||
g_list_free(begin_error_lines);
|
g_list_free (begin_error_lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We need to resize parse_data->column_types since errors may have added columns. */
|
/* We need to resize parse_data->column_types since errors may have added columns. */
|
||||||
@ -1263,7 +1263,7 @@ int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account,
|
|||||||
max_cols = ((GPtrArray*)(parse_data->orig_lines->pdata[i]))->len;
|
max_cols = ((GPtrArray*)(parse_data->orig_lines->pdata[i]))->len;
|
||||||
}
|
}
|
||||||
i = parse_data->column_types->len;
|
i = parse_data->column_types->len;
|
||||||
parse_data->column_types = g_array_set_size(parse_data->column_types, max_cols);
|
parse_data->column_types = g_array_set_size (parse_data->column_types, max_cols);
|
||||||
for (; i < max_cols; i++)
|
for (; i < max_cols; i++)
|
||||||
{
|
{
|
||||||
parse_data->column_types->data[i] = GNC_CSV_NONE;
|
parse_data->column_types->data[i] = GNC_CSV_NONE;
|
||||||
|
@ -118,19 +118,19 @@ typedef struct
|
|||||||
int currency_format; /**< The currency format, 0 for locale, 1 for comma dec and 2 for period */
|
int currency_format; /**< The currency format, 0 for locale, 1 for comma dec and 2 for period */
|
||||||
} GncCsvParseData;
|
} GncCsvParseData;
|
||||||
|
|
||||||
GncCsvParseData* gnc_csv_new_parse_data(void);
|
GncCsvParseData* gnc_csv_new_parse_data (void);
|
||||||
|
|
||||||
void gnc_csv_parse_data_free(GncCsvParseData* parse_data);
|
void gnc_csv_parse_data_free (GncCsvParseData* parse_data);
|
||||||
|
|
||||||
int gnc_csv_load_file(GncCsvParseData* parse_data, const char* filename,
|
int gnc_csv_load_file (GncCsvParseData* parse_data, const char* filename,
|
||||||
GError** error);
|
GError** error);
|
||||||
|
|
||||||
int gnc_csv_convert_encoding(GncCsvParseData* parse_data, const char* encoding, GError** error);
|
int gnc_csv_convert_encoding (GncCsvParseData* parse_data, const char* encoding, GError** error);
|
||||||
|
|
||||||
int gnc_csv_parse(GncCsvParseData* parse_data, gboolean guessColTypes, GError** error);
|
int gnc_csv_parse (GncCsvParseData* parse_data, gboolean guessColTypes, GError** error);
|
||||||
|
|
||||||
int gnc_csv_parse_to_trans(GncCsvParseData* parse_data, Account* account, gboolean redo_errors);
|
int gnc_csv_parse_to_trans (GncCsvParseData* parse_data, Account* account, gboolean redo_errors);
|
||||||
|
|
||||||
time64 parse_date(const char* date_str, int format);
|
time64 parse_date (const char* date_str, int format);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user