mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug 706021 New CSV Import Account Mappings.
This patch allows the saving of account name mappings so these can be reused in later imports.
This commit is contained in:
parent
1ef201c7d1
commit
d0fee72900
@ -10,6 +10,7 @@ libgncmod_csv_import_la_SOURCES = \
|
||||
gnc-plugin-csv-import.c \
|
||||
csv-account-import.c \
|
||||
csv-fixed-trans-import.c \
|
||||
gnc-csv-account-map.c \
|
||||
gnc-csv-model.c \
|
||||
gnc-csv-gnumeric-popup.c \
|
||||
gnc-csv-trans-settings.c
|
||||
@ -21,6 +22,7 @@ noinst_HEADERS = \
|
||||
gnc-plugin-csv-import.h \
|
||||
csv-account-import.h \
|
||||
csv-fixed-trans-import.h \
|
||||
gnc-csv-account-map.h \
|
||||
gnc-csv-model.h \
|
||||
gnc-csv-gnumeric-popup.h \
|
||||
gnc-csv-trans-settings.h
|
||||
|
167
src/import-export/csv-imp/gnc-csv-account-map.c
Normal file
167
src/import-export/csv-imp/gnc-csv-account-map.c
Normal file
@ -0,0 +1,167 @@
|
||||
/*******************************************************************\
|
||||
* gnc-csv-account-map.c -- Load and Update Mappings *
|
||||
* *
|
||||
* Copyright (C) 2015 Robert Fewell *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation; either version 2 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License*
|
||||
* along with this program; if not, contact: *
|
||||
* *
|
||||
* Free Software Foundation Voice: +1-617-542-5942 *
|
||||
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
|
||||
* Boston, MA 02110-1301, USA gnu@gnu.org *
|
||||
\********************************************************************/
|
||||
/** @file gnc-csv-account-map.c
|
||||
@brief Save and Load Mappings
|
||||
@author Copyright (c) 2015 Robert Fewell
|
||||
*/
|
||||
#include "config.h"
|
||||
|
||||
#include <gtk/gtk.h>
|
||||
#include <glib/gi18n.h>
|
||||
|
||||
#include "qof.h"
|
||||
#include "gnc-ui-util.h"
|
||||
#include "gnc-csv-account-map.h"
|
||||
|
||||
#define CSV_CATEGORY "csv-account-map"
|
||||
|
||||
#define IMPORT_STRING "String"
|
||||
#define IMPORT_FULL_PATH "FullPath"
|
||||
#define IMPORT_ACCOUNT "Account"
|
||||
|
||||
/* This static indicates the debugging module that this .o belongs to. */
|
||||
static QofLogModule log_module = G_LOG_DOMAIN;
|
||||
|
||||
/**************************************************
|
||||
* account_imap_destroy
|
||||
*
|
||||
* Destroy an import map. But all stored entries will
|
||||
* still continue to exist in the underlying kvp frame
|
||||
* of the account.
|
||||
**************************************************/
|
||||
static void
|
||||
account_imap_destroy (GncImportMatchMap *imap)
|
||||
{
|
||||
if (!imap) return;
|
||||
g_free (imap);
|
||||
}
|
||||
|
||||
/**************************************************
|
||||
* gnc_csv_account_map_search
|
||||
*
|
||||
* search the existing mappings for the account
|
||||
* linked to the import string.
|
||||
**************************************************/
|
||||
Account * gnc_csv_account_map_search (gchar *map_string)
|
||||
{
|
||||
Account *root, *account = NULL;
|
||||
GList *accts, *ptr;
|
||||
|
||||
/* Get list of Accounts */
|
||||
root = gnc_book_get_root_account (gnc_get_current_book());
|
||||
accts = gnc_account_get_descendants_sorted (root);
|
||||
|
||||
/* Go through list of accounts */
|
||||
for (ptr = accts; ptr; ptr = g_list_next (ptr))
|
||||
{
|
||||
GncImportMatchMap *tmp_imap;
|
||||
|
||||
tmp_imap = gnc_account_imap_create_imap (ptr->data);
|
||||
|
||||
if (gnc_account_imap_find_account (tmp_imap, CSV_CATEGORY, map_string) != NULL)
|
||||
{
|
||||
account = ptr->data;
|
||||
account_imap_destroy (tmp_imap);
|
||||
break;
|
||||
}
|
||||
account_imap_destroy (tmp_imap);
|
||||
}
|
||||
g_list_free (accts);
|
||||
|
||||
return account;
|
||||
}
|
||||
|
||||
|
||||
/**************************************************
|
||||
* gnc_csv_account_map_load_mappings
|
||||
*
|
||||
* load the existing mappings
|
||||
**************************************************/
|
||||
void
|
||||
gnc_csv_account_map_load_mappings (GtkTreeModel *mappings_store)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
gboolean valid;
|
||||
|
||||
// Set iter to first entry of store
|
||||
valid = gtk_tree_model_get_iter_first (mappings_store, &iter);
|
||||
|
||||
// Walk through the store trying to match to a map
|
||||
while (valid)
|
||||
{
|
||||
Account *account = NULL;
|
||||
gchar *map_string;
|
||||
gchar *fullpath;
|
||||
|
||||
// Walk through the list, reading each row
|
||||
gtk_tree_model_get (GTK_TREE_MODEL(mappings_store), &iter, MAPPING_STRING, &map_string, MAPPING_ACCOUNT, &account, -1);
|
||||
|
||||
if (account == NULL) // if account is NULL, store has not been updated
|
||||
{
|
||||
account = gnc_csv_account_map_search (map_string); //search the account list for the map_string
|
||||
|
||||
if (account == NULL) // account still NULL, we have no map
|
||||
{
|
||||
g_free (map_string);
|
||||
valid = gtk_tree_model_iter_next (mappings_store, &iter);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
fullpath = gnc_account_get_full_name (account);
|
||||
gtk_list_store_set (GTK_LIST_STORE(mappings_store), &iter, MAPPING_FULLPATH, fullpath, -1);
|
||||
gtk_list_store_set (GTK_LIST_STORE(mappings_store), &iter, MAPPING_ACCOUNT, account, -1);
|
||||
g_free (fullpath);
|
||||
|
||||
g_free (map_string);
|
||||
valid = gtk_tree_model_iter_next (mappings_store, &iter);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**************************************************
|
||||
* gnc_csv_account_map_change_mappings
|
||||
*
|
||||
* change the existing mappings
|
||||
**************************************************/
|
||||
void
|
||||
gnc_csv_account_map_change_mappings (Account *old_account, Account *new_account, gchar *map_string)
|
||||
{
|
||||
GncImportMatchMap *tmp_imap;
|
||||
|
||||
if (strlen (map_string) == 0)
|
||||
return;
|
||||
|
||||
if (old_account != NULL)
|
||||
{
|
||||
tmp_imap = gnc_account_imap_create_imap (old_account);
|
||||
gnc_account_imap_delete_account (tmp_imap, CSV_CATEGORY, map_string);
|
||||
account_imap_destroy (tmp_imap);
|
||||
}
|
||||
|
||||
if (new_account != NULL)
|
||||
{
|
||||
tmp_imap = gnc_account_imap_create_imap (new_account);
|
||||
gnc_account_imap_add_account (tmp_imap, CSV_CATEGORY, map_string, new_account);
|
||||
account_imap_destroy (tmp_imap);
|
||||
}
|
||||
}
|
51
src/import-export/csv-imp/gnc-csv-account-map.h
Normal file
51
src/import-export/csv-imp/gnc-csv-account-map.h
Normal file
@ -0,0 +1,51 @@
|
||||
/*******************************************************************\
|
||||
* gnc-csv-account-map.h -- Load and Update Mappings *
|
||||
* *
|
||||
* Copyright (C) 2015 Robert Fewell *
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or *
|
||||
* modify it under the terms of the GNU General Public License as *
|
||||
* published by the Free Software Foundation; either version 2 of *
|
||||
* the License, or (at your option) any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License*
|
||||
* along with this program; if not, contact: *
|
||||
* *
|
||||
* Free Software Foundation Voice: +1-617-542-5942 *
|
||||
* 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
|
||||
* Boston, MA 02110-1301, USA gnu@gnu.org *
|
||||
\********************************************************************/
|
||||
/** @file gnc-csv-account-map.h
|
||||
@brief Save and Load Mappings
|
||||
@author Copyright (c) 2015 Robert Fewell
|
||||
*/
|
||||
#ifndef GNC_CSV_ACCOUNT_MAP_H
|
||||
#define GNC_CSV_ACCOUNT_MAP_H
|
||||
|
||||
#include "Account.h"
|
||||
|
||||
/** Enumeration for the mappings liststore */
|
||||
enum GncImportColumn {MAPPING_STRING, MAPPING_FULLPATH, MAPPING_ACCOUNT};
|
||||
|
||||
/** Load the import mappings.
|
||||
*
|
||||
*/
|
||||
void gnc_csv_account_map_load_mappings (GtkTreeModel *mappings_store);
|
||||
|
||||
/** Update the import mappings.
|
||||
*
|
||||
*/
|
||||
void gnc_csv_account_map_change_mappings (Account *old_account, Account *new_account, gchar *map_string);
|
||||
|
||||
/** Returns a pointer to the account that matches the import string.
|
||||
*
|
||||
* @return A pointer to an account.
|
||||
*/
|
||||
Account * gnc_csv_account_map_search (gchar *map_string);
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user