Bug 797123 - Export transactions to CSV file.

When exporting transactions to CSV not all were showing up in the CSV
file. This was due to the start and end dates not being set to the
'start of day' and 'end of day' respectively. Also if you had specified
a range and subsequently used the 'Show All' button the dates used
would still be the ones used for the range.
This commit is contained in:
Robert Fewell 2019-04-22 11:23:47 +01:00
parent d82939a9ff
commit 91c992d947
2 changed files with 31 additions and 25 deletions

View File

@ -475,7 +475,7 @@ get_filter_times (CsvExportInfo *info)
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.start_date_today)))
info->csvd.start_time = gnc_time64_get_today_start();
else
info->csvd.start_time = 0;
info->csvd.start_time = info->csvd.earliest_time;
}
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.end_date_choose)))
@ -489,7 +489,7 @@ get_filter_times (CsvExportInfo *info)
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(info->csvd.end_date_today)))
info->csvd.end_time = gnc_time64_get_today_end();
else
info->csvd.end_time = gnc_time (NULL);
info->csvd.end_time = info->csvd.latest_time;
}
}
@ -508,6 +508,15 @@ csv_export_show_range_cb (GtkRadioButton *button, gpointer user_data)
g_return_if_fail (GTK_IS_RADIO_BUTTON(button));
active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(button));
if (!active)
{
info->csvd.start_time = info->csvd.earliest_time;
info->csvd.end_time = info->csvd.latest_time;
}
else
get_filter_times (info);
gtk_widget_set_sensitive (info->csvd.table, active);
}
@ -581,22 +590,19 @@ csv_export_end_date_cb (GtkWidget *radio, gpointer user_data)
/*******************************************************************
* get_earliest_in_book
* get_earliest_and_latest_in_book
*
* Find the earliest date occurring in the book. Do this by making
* a query and sorting by date. Since the truncated sort returns
* only the *last* search results, sort in decreasing order.
* Find the earliest and latest dates occurring in the book.
*******************************************************************/
static time64
get_earliest_in_book (QofBook *book)
static void
get_earliest_and_latest_in_book (CsvExportInfo *info, QofBook *book)
{
QofQuery *q;
GSList *p1, *p2;
GList *res;
time64 earliest;
time64 etime, ltime;
q = qof_query_create_for (GNC_ID_SPLIT);
qof_query_set_max_results (q, 1);
qof_query_set_book (q, book);
/* Sort by transaction date */
@ -605,24 +611,24 @@ get_earliest_in_book (QofBook *book)
p2 = g_slist_prepend (NULL, QUERY_DEFAULT_SORT);
qof_query_set_sort_order (q, p1, p2, NULL);
/* Reverse the sort order */
qof_query_set_sort_increasing (q, FALSE, FALSE, FALSE);
/* Run the query, find the earliest transaction date */
/* Run the query, find the earliest and latest transaction dates */
res = qof_query_run (q);
if (res)
{
earliest = xaccQueryGetEarliestDateFound (q);
etime = xaccQueryGetEarliestDateFound (q);
ltime = xaccQueryGetLatestDateFound (q);
}
else
{
/* If no results, we don't want to bomb totally */
earliest = gnc_time (0);
etime = gnc_time (0);
ltime = gnc_time (NULL);
}
info->csvd.earliest_time = gnc_time64_get_day_start (etime);
info->csvd.latest_time = gnc_time64_get_day_end (ltime);
qof_query_destroy (q);
return earliest;
}
@ -824,7 +830,6 @@ csv_export_assistant_create (CsvExportInfo *info)
GtkWidget *h_box;
GtkWidget *button;
GtkWidget *table, *hbox;
time64 start_time, end_time;
builder = gtk_builder_new();
gnc_builder_add_from_file (builder , "assistant-csv-export.glade", "csv_export_assistant");
@ -890,12 +895,11 @@ csv_export_assistant_create (CsvExportInfo *info)
/* Set the date info */
button = GTK_WIDGET(gtk_builder_get_object (builder, "show_range"));
/* Earliest and Latest in Book */
start_time = get_earliest_in_book (gnc_get_current_book());
end_time = gnc_time (NULL);
/* Get the Earliest and Latest dates in Book */
get_earliest_and_latest_in_book (info, gnc_get_current_book());
info->csvd.start_time = start_time;
info->csvd.end_time = end_time;
info->csvd.start_time = info->csvd.earliest_time;
info->csvd.end_time = info->csvd.latest_time;
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(button), FALSE);
table = GTK_WIDGET(gtk_builder_get_object (builder, "select_range_table"));
@ -912,7 +916,7 @@ csv_export_assistant_create (CsvExportInfo *info)
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_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), info->csvd.start_time);
g_signal_connect (G_OBJECT(info->csvd.start_date), "date-changed",
G_CALLBACK(csv_export_date_changed_cb), info);
@ -921,7 +925,7 @@ csv_export_assistant_create (CsvExportInfo *info)
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_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), info->csvd.end_time);
g_signal_connect (G_OBJECT (info->csvd.end_date), "date-changed",
G_CALLBACK (csv_export_date_changed_cb), info);

View File

@ -50,6 +50,8 @@ typedef struct
time64 start_time;
time64 end_time;
time64 earliest_time;
time64 latest_time;
} CsvExportDate;
typedef struct