From aabae1caf9e0cbf70266ecf8a265c97ffb3326a0 Mon Sep 17 00:00:00 2001 From: Robert Fewell <14uBobIT@gmail.com> Date: Wed, 22 Aug 2018 20:36:51 +0100 Subject: [PATCH] Bug 796812 - gnc_date_cell_get_date and gnc_date_cell_get_date_gdate have different date validation behaviour - part 1 Add gboolean parameter to gnc_date_cell_get_date to enable warning for the date out of range dialogue and update every occurrence accordingly. --- gnucash/register/ledger-core/gncEntryLedgerModel.c | 2 +- gnucash/register/ledger-core/split-register-control.c | 2 +- gnucash/register/ledger-core/split-register-model-save.c | 4 ++-- gnucash/register/ledger-core/split-register.c | 4 ++-- gnucash/register/register-core/datecell.h | 3 ++- gnucash/register/register-gnome/datecell-gnome.c | 6 +++--- 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/gnucash/register/ledger-core/gncEntryLedgerModel.c b/gnucash/register/ledger-core/gncEntryLedgerModel.c index 574a480567..190809da8f 100644 --- a/gnucash/register/ledger-core/gncEntryLedgerModel.c +++ b/gnucash/register/ledger-core/gncEntryLedgerModel.c @@ -1012,7 +1012,7 @@ static void gnc_entry_ledger_save_cells (gpointer save_data, cell = gnc_table_layout_get_cell (ledger->table->layout, ENTRY_DATE_CELL); - gnc_date_cell_get_date ((DateCell *) cell, &cell_time); + gnc_date_cell_get_date ((DateCell *) cell, &cell_time, TRUE); /* commit any pending changes */ gnc_date_cell_commit ((DateCell *) cell); diff --git a/gnucash/register/ledger-core/split-register-control.c b/gnucash/register/ledger-core/split-register-control.c index 5effb4c873..0bb8ebeddc 100644 --- a/gnucash/register/ledger-core/split-register-control.c +++ b/gnucash/register/ledger-core/split-register-control.c @@ -1258,7 +1258,7 @@ gnc_split_register_xfer_dialog(SplitRegister *reg, Transaction *txn, if (cell) { time64 time; - gnc_date_cell_get_date((DateCell*) cell, &time); + gnc_date_cell_get_date((DateCell*) cell, &time, TRUE); gnc_xfer_dialog_set_date(xfer, time); } else diff --git a/gnucash/register/ledger-core/split-register-model-save.c b/gnucash/register/ledger-core/split-register-model-save.c index f0f2ccf8a9..d4b24db075 100644 --- a/gnucash/register/ledger-core/split-register-model-save.c +++ b/gnucash/register/ledger-core/split-register-model-save.c @@ -67,7 +67,7 @@ gnc_split_register_save_date_cell (BasicCell * cell, DEBUG ("DATE: %s", value ? value : "(null)"); - gnc_date_cell_get_date ((DateCell *) cell, &cell_time); + gnc_date_cell_get_date ((DateCell *) cell, &cell_time, TRUE); /* commit any pending changes */ gnc_date_cell_commit ((DateCell *) cell); @@ -103,7 +103,7 @@ gnc_split_register_save_due_date_cell (BasicCell * cell, /* commit any pending changes */ gnc_date_cell_commit ((DateCell *) cell); DEBUG ("DATE: %s", value ? value : "(null)"); - gnc_date_cell_get_date ((DateCell *) cell, &time); + gnc_date_cell_get_date ((DateCell *) cell, &time, TRUE); xaccTransSetDateDue (sd->trans, time); } diff --git a/gnucash/register/ledger-core/split-register.c b/gnucash/register/ledger-core/split-register.c index 5d1eb782d9..f37dcd8099 100644 --- a/gnucash/register/ledger-core/split-register.c +++ b/gnucash/register/ledger-core/split-register.c @@ -1385,7 +1385,7 @@ gnc_split_register_save_to_scm (SplitRegister *reg, BasicCell *cell; time64 time; cell = gnc_table_layout_get_cell (reg->table->layout, DATE_CELL); - gnc_date_cell_get_date ((DateCell *) cell, &time); + gnc_date_cell_get_date ((DateCell *) cell, &time, TRUE); xaccTransSetDatePostedSecsNormalized(trans, time); } @@ -2085,7 +2085,7 @@ record_price (SplitRegister *reg, Account *account, gnc_numeric value, */ if (gnc_split_reg_has_rate_cell (reg->type)) return; - gnc_date_cell_get_date ((DateCell*)cell, &time); + gnc_date_cell_get_date ((DateCell*)cell, &time, TRUE); price = gnc_pricedb_lookup_day_t64 (pricedb, comm, curr, time); if (gnc_commodity_equiv (comm, gnc_price_get_currency (price))) swap = TRUE; diff --git a/gnucash/register/register-core/datecell.h b/gnucash/register/register-core/datecell.h index e3ce703955..709b7bc59a 100644 --- a/gnucash/register/register-core/datecell.h +++ b/gnucash/register/register-core/datecell.h @@ -123,8 +123,9 @@ void gnc_date_cell_commit (DateCell *cell); /** Set a time64 to the value in the DateCell. * @param cell The DateCell * @param time A time64* to which the function will write the time. + * @param warn Whether to warn of parse errors or silently change to a valid one. */ -void gnc_date_cell_get_date (DateCell *cell, time64 *time); +void gnc_date_cell_get_date (DateCell *cell, time64 *time, gboolean warn); /** Set a GDate to the value in the DateCell. * @param cell The DateCell diff --git a/gnucash/register/register-gnome/datecell-gnome.c b/gnucash/register/register-gnome/datecell-gnome.c index f38374c246..3b0399b043 100644 --- a/gnucash/register/register-gnome/datecell-gnome.c +++ b/gnucash/register/register-gnome/datecell-gnome.c @@ -710,7 +710,7 @@ gnc_date_cell_leave (BasicCell *bcell) box->calendar_popped = FALSE; /* Refresh the date to expand any shortcuts. */ - gnc_date_cell_get_date ((DateCell *)bcell, &time); + gnc_date_cell_get_date ((DateCell *)bcell, &time, TRUE); gnc_date_cell_set_value_secs ((DateCell *)bcell, time); } @@ -731,13 +731,13 @@ gnc_date_cell_get_date_gdate (DateCell *cell, GDate *date) } void -gnc_date_cell_get_date (DateCell *cell, time64 *time) +gnc_date_cell_get_date (DateCell *cell, time64 *time, gboolean warn) { PopBox *box = cell->cell.gui_private; if (!cell || !time) return; - gnc_parse_date (&(box->date), cell->cell.value, TRUE); + gnc_parse_date (&(box->date), cell->cell.value, warn); *time = gnc_mktime (&box->date); }