mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
This patch allows the ability to skip rows when importing transactions.
This commit is contained in:
committed by
Geert Janssens
parent
bef9860028
commit
2a7ad6867c
@@ -75,8 +75,9 @@ typedef struct
|
||||
GtkWidget *check_butt; /**< The widget for the check label button */
|
||||
GtkWidget *start_row_spin; /**< The widget for the start row spinner */
|
||||
GtkWidget *end_row_spin; /**< The widget for the end row spinner */
|
||||
int start_row; /**< The start row */
|
||||
int end_row; /**< The end row */
|
||||
GtkWidget *skip_rows; /**< The widget for Skip alternate rows from start row */
|
||||
int start_row; /**< The liststore start row, smallest is 0 */
|
||||
int end_row; /**< The liststore end row, max number of rows -1 */
|
||||
|
||||
GncCsvParseData *parse_data; /**< The actual data we are previewing */
|
||||
GOCharmapSel *encselector; /**< The widget for selecting the encoding */
|
||||
@@ -141,9 +142,10 @@ void csv_import_trans_assistant_match_page_prepare (GtkAssistant *assistant, gpo
|
||||
void csv_import_trans_assistant_finish_page_prepare (GtkAssistant *assistant, gpointer user_data);
|
||||
void csv_import_trans_assistant_summary_page_prepare (GtkAssistant *assistant, gpointer user_data);
|
||||
|
||||
void csv_import_trans_srow_cb (GtkWidget *spin, gpointer user_data );
|
||||
void csv_import_trans_erow_cb (GtkWidget *spin, gpointer user_data );
|
||||
void csv_import_trans_auto_cb (GtkWidget *cb, gpointer user_data );
|
||||
void csv_import_trans_srow_cb (GtkWidget *spin, gpointer user_data);
|
||||
void csv_import_trans_erow_cb (GtkWidget *spin, gpointer user_data);
|
||||
void csv_import_trans_skiprows_cb (GtkWidget *checkbox, gpointer user_data);
|
||||
void csv_import_trans_auto_cb (GtkWidget *cb, gpointer user_data);
|
||||
void csv_import_trans_file_chooser_confirm_cb (GtkWidget *button, CsvImportTrans *info);
|
||||
|
||||
static void gnc_csv_preview_update_assist (CsvImportTrans* info);
|
||||
@@ -235,22 +237,23 @@ void row_selection_update (CsvImportTrans* info)
|
||||
GtkListStore *store;
|
||||
GtkTreeIter iter;
|
||||
gboolean valid;
|
||||
int i;
|
||||
int i = 0;
|
||||
|
||||
store = GTK_LIST_STORE(gtk_tree_view_get_model (info->treeview));
|
||||
|
||||
/* Start of file */
|
||||
for ( i = 0; i <= info->start_row; i++)
|
||||
{
|
||||
/* Modify background color of rows less than start row */
|
||||
if (info->start_row == i)
|
||||
{
|
||||
valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i );
|
||||
valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i);
|
||||
if (valid)
|
||||
gtk_list_store_set (store, &iter, 0, NULL, -1);
|
||||
}
|
||||
else
|
||||
{
|
||||
valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i );
|
||||
valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i);
|
||||
if (valid)
|
||||
gtk_list_store_set (store, &iter, 0, "pink", -1);
|
||||
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(store), &iter);
|
||||
@@ -260,6 +263,7 @@ void row_selection_update (CsvImportTrans* info)
|
||||
|
||||
}
|
||||
|
||||
/* End of File */
|
||||
for ( i = info->num_of_rows - 1; i >= info->end_row; i--)
|
||||
{
|
||||
/* Modify background color of rows more than end row */
|
||||
@@ -279,6 +283,26 @@ void row_selection_update (CsvImportTrans* info)
|
||||
gtk_list_store_set (store, &iter, 0, NULL, -1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove background color from the start row to end row */
|
||||
for ( i = info->start_row + 1; i <= info->end_row; i++)
|
||||
{
|
||||
valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i);
|
||||
if (valid)
|
||||
gtk_list_store_set (store, &iter, 0, NULL, -1);
|
||||
}
|
||||
|
||||
/* Skip rows */
|
||||
if (info->parse_data->skip_rows == TRUE)
|
||||
{
|
||||
for ( i = info->start_row + 1; i <= info->end_row; i = i + 2)
|
||||
{
|
||||
/* Modify background color of alternate rows from the start row */
|
||||
valid = gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(store), &iter, NULL, i);
|
||||
if (valid)
|
||||
gtk_list_store_set (store, &iter, 0, "pink", -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -298,7 +322,7 @@ void csv_import_trans_srow_cb (GtkWidget *spin, gpointer user_data)
|
||||
info->parse_data->start_row = info->start_row;
|
||||
|
||||
adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON(info->end_row_spin));
|
||||
gtk_adjustment_set_lower (adj, info->start_row + 1 );
|
||||
gtk_adjustment_set_lower (adj, info->start_row + 1);
|
||||
|
||||
/* Refresh the row highlighting */
|
||||
row_selection_update (info);
|
||||
@@ -321,7 +345,7 @@ void csv_import_trans_erow_cb (GtkWidget *spin, gpointer user_data)
|
||||
info->parse_data->end_row = info->end_row + 1;
|
||||
|
||||
adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON(info->start_row_spin));
|
||||
gtk_adjustment_set_upper (adj, info->end_row + 1 );
|
||||
gtk_adjustment_set_upper (adj, info->end_row + 1);
|
||||
|
||||
/* Refresh the row highlighting */
|
||||
row_selection_update (info);
|
||||
@@ -354,6 +378,23 @@ void csv_import_trans_auto_cb (GtkWidget *cb, gpointer user_data)
|
||||
}
|
||||
|
||||
|
||||
/*******************************************************
|
||||
* csv_import_trans_skiprows_cb
|
||||
*
|
||||
* call back for import skip rows checkbox
|
||||
*******************************************************/
|
||||
void csv_import_trans_skiprows_cb (GtkWidget *checkbox, gpointer user_data)
|
||||
{
|
||||
CsvImportTrans *info = user_data;
|
||||
|
||||
/* Set the skip_rows variable */
|
||||
info->parse_data->skip_rows = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(checkbox));
|
||||
|
||||
/* Refresh the row highlighting */
|
||||
row_selection_update (info);
|
||||
}
|
||||
|
||||
|
||||
/** Returns the cell renderer from a column in the preview's treeview.
|
||||
* @param info The display of the data being imported
|
||||
* @param col The number of the column whose cell renderer is being retrieved
|
||||
@@ -975,7 +1016,7 @@ gboolean preview_settings_valid (CsvImportTrans* info)
|
||||
gtk_tree_model_get_iter_first (store, &iter);
|
||||
|
||||
/* Get an iterator for the first required row in the data store. */
|
||||
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(datastore), &iter2, NULL, info->start_row );
|
||||
gtk_tree_model_iter_nth_child (GTK_TREE_MODEL(datastore), &iter2, NULL, info->start_row);
|
||||
|
||||
/* Go through each of the columns. */
|
||||
for (i = 0; i < ncols; i++)
|
||||
@@ -1262,7 +1303,6 @@ static void gnc_csv_preview_update_assist (CsvImportTrans* info)
|
||||
static
|
||||
void load_settings (CsvImportTrans *info)
|
||||
{
|
||||
info->start_row = 0;
|
||||
info->start_row = 0;
|
||||
info->account_page_step = TRUE;
|
||||
info->match_parse_run = FALSE;
|
||||
@@ -1340,6 +1380,8 @@ csv_import_trans_assistant_preview_page_prepare (GtkAssistant *assistant,
|
||||
/* Set spin buttons not sensative */
|
||||
gtk_widget_set_sensitive (info->start_row_spin, FALSE);
|
||||
gtk_widget_set_sensitive (info->end_row_spin, FALSE);
|
||||
gtk_widget_set_sensitive (info->skip_rows, FALSE);
|
||||
info->parse_data->skip_rows = FALSE;
|
||||
|
||||
/* Set check button label */
|
||||
gtk_label_set_text (GTK_LABEL(info->check_label), _("Skip Errors"));
|
||||
@@ -1357,6 +1399,10 @@ csv_import_trans_assistant_preview_page_prepare (GtkAssistant *assistant,
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->end_row_spin), info->num_of_rows);
|
||||
}
|
||||
|
||||
/* Set start row */
|
||||
adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON(info->start_row_spin));
|
||||
gtk_spin_button_set_value (GTK_SPIN_BUTTON(info->start_row_spin), 1);
|
||||
|
||||
/* Update the row selection highlight */
|
||||
row_selection_update (info);
|
||||
}
|
||||
@@ -1706,6 +1752,7 @@ csv_import_trans_assistant_create (CsvImportTrans *info)
|
||||
|
||||
info->start_row_spin = GTK_WIDGET(gtk_builder_get_object (builder, "start_row"));
|
||||
info->end_row_spin = GTK_WIDGET(gtk_builder_get_object (builder, "end_row"));
|
||||
info->skip_rows = GTK_WIDGET(gtk_builder_get_object (builder, "skip_rows"));
|
||||
info->check_label = GTK_WIDGET(gtk_builder_get_object (builder, "check_label"));
|
||||
info->check_butt = GTK_WIDGET(gtk_builder_get_object (builder, "check_butt"));
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ All transactions imported will be associated to one account for each import and
|
||||
|
||||
Various options exist for specifying the delimiter as well as a fixed width option. With the fixed width option, double click on the bar above the displayed rows to set the column width.
|
||||
|
||||
There is an option for specifying the start and end row which can be used if you have some header text or multiple accounts in the same file.</property>
|
||||
There is an option for specifying the start row, end row and an option to skip alternate rows begining from the start row. These can be used if you have some header text, a points collected status row or multiple accounts in the same file.</property>
|
||||
<property name="wrap">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
@@ -151,6 +151,21 @@ Select location and file name for the Import, then click 'OK'...
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="skip_rows">
|
||||
<property name="label" translatable="yes">Skip alternate rows from the start row</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="csv_import_trans_skiprows_cb" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHSeparator" id="hseparator7">
|
||||
<property name="visible">True</property>
|
||||
@@ -160,7 +175,7 @@ Select location and file name for the Import, then click 'OK'...
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">8</property>
|
||||
<property name="position">1</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
@@ -219,7 +234,7 @@ Select location and file name for the Import, then click 'OK'...
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
@@ -232,7 +247,7 @@ Select location and file name for the Import, then click 'OK'...
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="padding">10</property>
|
||||
<property name="position">3</property>
|
||||
<property name="position">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
@@ -308,7 +323,7 @@ Select location and file name for the Import, then click 'OK'...
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">4</property>
|
||||
<property name="position">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
@@ -321,7 +336,7 @@ Select location and file name for the Import, then click 'OK'...
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="padding">10</property>
|
||||
<property name="position">5</property>
|
||||
<property name="position">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
|
||||
@@ -340,6 +340,7 @@ GncCsvParseData* gnc_csv_new_parse_data (void)
|
||||
parse_data->chunk = g_string_chunk_new(100 * 1024);
|
||||
parse_data->start_row = 0;
|
||||
parse_data->end_row = 1000;
|
||||
parse_data->skip_rows = FALSE;
|
||||
return parse_data;
|
||||
}
|
||||
|
||||
@@ -1077,7 +1078,7 @@ int gnc_csv_parse_to_trans (GncCsvParseData* parse_data, Account* account,
|
||||
/* This flag is TRUE if there are any errors in this row. */
|
||||
gboolean errors = FALSE;
|
||||
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;
|
||||
|
||||
for (j = 0; j < line->len; j++)
|
||||
@@ -1184,7 +1185,10 @@ int gnc_csv_parse_to_trans (GncCsvParseData* parse_data, Account* account,
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
if (parse_data->skip_rows == FALSE)
|
||||
i++;
|
||||
else
|
||||
i = i + 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -115,6 +115,7 @@ typedef struct
|
||||
int date_format; /**< The format of the text in the date columns from date_format_internal. */
|
||||
int start_row; /**< The start row to generate transactions from. */
|
||||
int end_row; /**< The end row to generate transactions from. */
|
||||
gboolean skip_rows; /**< Skip Alternate Rows from start row. */
|
||||
int currency_format; /**< The currency format, 0 for locale, 1 for comma dec and 2 for period */
|
||||
} GncCsvParseData;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user