gnucash maint: remove unnecessary KVPs and frames related to US Income Tax name and type

J.Alex Aycinena alex.aycinena at code.gnucash.org
Sun Jan 27 18:59:37 EST 2019


Updated	 via  https://github.com/Gnucash/gnucash/commit/7d0adfd0 (commit)
	from  https://github.com/Gnucash/gnucash/commit/69cc8fe2 (commit)



commit 7d0adfd0c6de3b3cf441f8a977c7555724593ee3
Author: Alex Aycinena <alex.aycinena at gmail.com>
Date:   Sun Jan 27 15:58:46 2019 -0800

    remove unnecessary KVPs and frames related to US Income Tax name and type

diff --git a/gnucash/gnome/dialog-tax-info.c b/gnucash/gnome/dialog-tax-info.c
index 7407012..cc52b0a 100644
--- a/gnucash/gnome/dialog-tax-info.c
+++ b/gnucash/gnome/dialog-tax-info.c
@@ -1057,6 +1057,7 @@ identity_edit_response_cb (GtkDialog *dialog, gint response, gpointer data)
     TaxInfoDialog *ti_dialog = data;
     const gchar *entry_name = NULL;
     const gchar *entry_type = NULL;
+    gboolean tax_name_changed = FALSE;
     gint active_item = 0;
     TaxTypeInfo *selected_type = NULL;
 
@@ -1074,48 +1075,66 @@ identity_edit_response_cb (GtkDialog *dialog, gint response, gpointer data)
                 entry_type = selected_type->type_code;
                 if (!(g_strcmp0 (ti_dialog->tax_type, entry_type) == 0))
                 {
-                    ti_dialog->tax_type_changed = TRUE;
-                    gnc_set_current_book_tax_type (entry_type);
-                    ti_dialog->tax_type = entry_type;
-                    if (entry_type != NULL)
-                    {
-                        gtk_label_set_text (GTK_LABEL (ti_dialog->entity_type_display),
+                    if (!((g_strcmp0 (ti_dialog->tax_type, "") == 0) &&
+                            (g_strcmp0 (entry_type, "Other") == 0)))
+                    { /* tax type changed */
+                        ti_dialog->tax_type_changed = TRUE;
+                        ti_dialog->tax_type = entry_type;
+                        if (entry_type != NULL)
+                        {
+                            gtk_label_set_text (GTK_LABEL (ti_dialog->entity_type_display),
                                             selected_type->combo_box_entry);
-                    }
-                    else
-                    {
-                        gtk_label_set_text (GTK_LABEL (ti_dialog->entity_type_display),
+                        }
+                        else
+                        {
+                            gtk_label_set_text (GTK_LABEL (ti_dialog->entity_type_display),
                                             ti_dialog->default_tax_type);
+                        }
+                        if (ti_dialog->income_txf_infos != NULL)
+                            destroy_txf_infos (ti_dialog->income_txf_infos);
+                        ti_dialog->income_txf_infos = load_txf_info (INCOME, ti_dialog);
+                        if (ti_dialog->expense_txf_infos != NULL)
+                            destroy_txf_infos (ti_dialog->expense_txf_infos);
+                        ti_dialog->expense_txf_infos = load_txf_info (EXPENSE, ti_dialog);
+                        if (ti_dialog->asset_txf_infos != NULL)
+                            destroy_txf_infos (ti_dialog->asset_txf_infos);
+                        ti_dialog->asset_txf_infos = load_txf_info (ASSET, ti_dialog);
+                        if (ti_dialog->liab_eq_txf_infos != NULL)
+                            destroy_txf_infos (ti_dialog->liab_eq_txf_infos);
+                        ti_dialog->liab_eq_txf_infos = load_txf_info (LIAB_EQ, ti_dialog);
+                        gtk_toggle_button_set_active
+                            (GTK_TOGGLE_BUTTON(ti_dialog->expense_radio), TRUE);
+                        tax_info_show_acct_type_accounts (ti_dialog);
+                        gnc_tree_view_account_refilter
+                            (GNC_TREE_VIEW_ACCOUNT (ti_dialog->account_treeview));
+                        gnc_tax_info_update_accounts (ti_dialog);
+                        clear_gui (ti_dialog);
                     }
-                    if (ti_dialog->income_txf_infos != NULL)
-                        destroy_txf_infos (ti_dialog->income_txf_infos);
-                    ti_dialog->income_txf_infos = load_txf_info (INCOME, ti_dialog);
-                    if (ti_dialog->expense_txf_infos != NULL)
-                        destroy_txf_infos (ti_dialog->expense_txf_infos);
-                    ti_dialog->expense_txf_infos = load_txf_info (EXPENSE, ti_dialog);
-                    if (ti_dialog->asset_txf_infos != NULL)
-                        destroy_txf_infos (ti_dialog->asset_txf_infos);
-                    ti_dialog->asset_txf_infos = load_txf_info (ASSET, ti_dialog);
-                    if (ti_dialog->liab_eq_txf_infos != NULL)
-                        destroy_txf_infos (ti_dialog->liab_eq_txf_infos);
-                    ti_dialog->liab_eq_txf_infos = load_txf_info (LIAB_EQ, ti_dialog);
-                    gtk_toggle_button_set_active
-                    (GTK_TOGGLE_BUTTON(ti_dialog->expense_radio), TRUE);
-                    tax_info_show_acct_type_accounts (ti_dialog);
-                    gnc_tree_view_account_refilter
-                    (GNC_TREE_VIEW_ACCOUNT (ti_dialog->account_treeview));
-                    gnc_tax_info_update_accounts (ti_dialog);
-                    clear_gui (ti_dialog);
+                    else /* tax type changed but from "" to "Other" - doesn't count as change */
+                        ti_dialog->tax_type_changed = FALSE;
                 }
+                else /* tax type not changed */
+                    ti_dialog->tax_type_changed = FALSE;
             }
         }
         if (!(g_strcmp0 (ti_dialog->tax_name, entry_name) == 0))
         {
-            gnc_set_current_book_tax_name (entry_name);
-            ti_dialog->tax_name = g_strdup (entry_name);
-            gtk_label_set_text (GTK_LABEL (ti_dialog->entity_name_display),
+            if (!(((ti_dialog->tax_name == NULL) &&
+                    (g_strcmp0 (entry_name, "") == 0))))
+            {
+                tax_name_changed = TRUE;
+                ti_dialog->tax_name = g_strdup (entry_name);
+                gtk_label_set_text (GTK_LABEL (ti_dialog->entity_name_display),
                                 entry_name);
+            }
+            else /* tax name changed but from NULL to "" - doesn't count as change */
+                tax_name_changed = FALSE;
         }
+        else /* tax name not changed */
+            tax_name_changed = FALSE;
+        if (tax_name_changed || ti_dialog->tax_type_changed)
+            gnc_set_current_book_tax_name_type (tax_name_changed, entry_name,
+                                    ti_dialog->tax_type_changed, entry_type);
         set_focus_sensitivity (ti_dialog);
         ti_dialog->tax_type_changed = FALSE;
     }
diff --git a/libgnucash/app-utils/gnc-ui-util.c b/libgnucash/app-utils/gnc-ui-util.c
index d2bca10..ac13a58 100644
--- a/libgnucash/app-utils/gnc-ui-util.c
+++ b/libgnucash/app-utils/gnc-ui-util.c
@@ -233,9 +233,97 @@ gnc_is_new_book (void)
 #define OLD_OPTION_TAXUS_TYPE "book/tax_US/type"
 
 void
-gnc_set_current_book_tax_name (const gchar *tax_name)
+gnc_set_current_book_tax_name_type (gboolean name_changed, const gchar *tax_name,
+                                    gboolean type_changed, const gchar *tax_type)
 {
-    qof_book_set_string_option(gnc_get_current_book(), OPTION_TAXUS_NAME, tax_name);
+    if (name_changed)
+    {
+        if (type_changed)
+        {
+            QofBook* book = gnc_get_current_book();
+            if ((g_strcmp0 (tax_name, "") == 0) ||
+                (tax_name == NULL))
+            { /* change to no name */
+                if ((g_strcmp0 (tax_type, "Other") == 0) ||
+                    (g_strcmp0 (tax_type, "") == 0) ||
+                    (tax_type == NULL))
+                { /* need to delete both name and type and the "tax_US" frame */
+                    qof_book_set_string_option(book, OPTION_TAXUS_NAME, NULL);
+                    qof_book_set_string_option(book, OPTION_TAXUS_TYPE, NULL);
+                    qof_book_option_frame_delete(book, "tax_US");
+                }
+                else
+                { /* delete the name & change the type; keep the "tax_US" frame */
+                    qof_book_set_string_option(book, OPTION_TAXUS_NAME, NULL);
+                    qof_book_set_string_option(book, OPTION_TAXUS_TYPE, tax_type);
+                }
+            }
+            else /* new name */
+            {
+                if ((g_strcmp0 (tax_type, "Other") == 0) ||
+                    (g_strcmp0 (tax_type, "") == 0) ||
+                    (tax_type == NULL))
+                { /* delete the type & change the name; keep the "tax_US" frame */
+                    qof_book_set_string_option(book, OPTION_TAXUS_TYPE, NULL);
+                    qof_book_set_string_option(book, OPTION_TAXUS_NAME, tax_name);
+                }
+                else /* and new type */
+                { /* change the name & change the type */
+                    qof_book_set_string_option(book, OPTION_TAXUS_NAME, tax_name);
+                    qof_book_set_string_option(book, OPTION_TAXUS_TYPE, tax_type);
+                }
+            }
+        }
+        else /* no type change but name changed */
+        {
+            QofBook* book = gnc_get_current_book();
+            if ((g_strcmp0 (tax_name, "") == 0) ||
+                (tax_name == NULL))
+            { /* change to no name */
+                if ((g_strcmp0 (tax_type, "Other") == 0) ||
+                    (g_strcmp0 (tax_type, "") == 0) ||
+                    (tax_type == NULL))
+                { /* delete the name; there is no type; deleted the "tax_US" frame */
+                    qof_book_set_string_option(book, OPTION_TAXUS_NAME, NULL);
+                    qof_book_option_frame_delete(book, "tax_US");
+                }
+                else
+                { /* need to delete the name and keep "tax_US" frame */
+                    qof_book_set_string_option(book, OPTION_TAXUS_NAME, NULL);
+                }
+            }
+            else
+            { /* change the name & keep "tax_US" frame */
+                qof_book_set_string_option(book, OPTION_TAXUS_NAME, tax_name);
+            }
+        }
+   }
+   else /* no name change */
+   {
+        if (type_changed)
+        {
+            QofBook* book = gnc_get_current_book();
+            if ((g_strcmp0 (tax_type, "Other") == 0) ||
+                (g_strcmp0 (tax_type, "") == 0) ||
+                (tax_type == NULL))
+            {
+                if ((g_strcmp0 (tax_name, "") == 0) ||
+                    (tax_name == NULL))
+                {/* delete the type; there is no name; delete the "tax_US" frame */
+                    qof_book_set_string_option(book, OPTION_TAXUS_TYPE, NULL);
+                    qof_book_option_frame_delete(book, "tax_US");
+                }
+                else
+                { /* need to delete the type and keep "tax_US" frame */
+                    qof_book_set_string_option(book, OPTION_TAXUS_TYPE, NULL);
+                }
+            }
+            else
+            { /* change the type & keep "tax_US" frame */
+                qof_book_set_string_option(book, OPTION_TAXUS_TYPE, tax_type);
+            }
+        } /*else no name and no type change - do nothing */
+   }
 }
 
 const gchar *
@@ -282,12 +370,6 @@ gnc_get_current_book_tax_name (void)
     }
 }
 
-void
-gnc_set_current_book_tax_type (const gchar *tax_type)
-{
-    qof_book_set_string_option(gnc_get_current_book(), OPTION_TAXUS_TYPE, tax_type);
-}
-
 const gchar *
 gnc_get_current_book_tax_type (void)
 {
diff --git a/libgnucash/app-utils/gnc-ui-util.h b/libgnucash/app-utils/gnc-ui-util.h
index 03e8893..4601f3b 100644
--- a/libgnucash/app-utils/gnc-ui-util.h
+++ b/libgnucash/app-utils/gnc-ui-util.h
@@ -72,9 +72,11 @@ QofBook * gnc_get_current_book (void);
  * need to check as well for a book with no accounts (root with no children). */
 gboolean gnc_is_new_book (void);
 
-void gnc_set_current_book_tax_name (const gchar *tax_name);
+void gnc_set_current_book_tax_name_type (gboolean name_changed,
+                                            const gchar *tax_name,
+                                            gboolean type_changed,
+                                            const gchar *tax_type);
 const gchar * gnc_get_current_book_tax_name (void);
-void gnc_set_current_book_tax_type (const gchar *tax_type);
 const gchar * gnc_get_current_book_tax_type (void);
 /** Calls gnc_book_option_num_field_source_change to initiate registered
   * callbacks when num_field_source book option changes so that



Summary of changes:
 gnucash/gnome/dialog-tax-info.c    | 83 +++++++++++++++++++-------------
 libgnucash/app-utils/gnc-ui-util.c | 98 ++++++++++++++++++++++++++++++++++----
 libgnucash/app-utils/gnc-ui-util.h |  6 ++-
 3 files changed, 145 insertions(+), 42 deletions(-)



More information about the gnucash-changes mailing list