mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Various small fixups in csv importer
- Use descriptive names instead of numbers in std::get<> - Remove unused parameters - Fix some doxigen comments
This commit is contained in:
parent
b7bcd792f6
commit
9b30bb2b62
@ -793,7 +793,6 @@ CsvImpTransAssist::preview_settings_delete ()
|
||||
void
|
||||
CsvImpTransAssist::preview_settings_save ()
|
||||
{
|
||||
auto title = _("Save the Import Settings.");
|
||||
auto new_name = tx_imp->settings_name();
|
||||
|
||||
/* Check if the entry text matches an already existing preset */
|
||||
@ -889,7 +888,6 @@ void CsvImpTransAssist::preview_multi_split (bool multi)
|
||||
* separator checkbuttons or the custom separator entry) is
|
||||
* changed.
|
||||
* @param widget The widget that was changed
|
||||
* @param info The data that is being configured
|
||||
*/
|
||||
void CsvImpTransAssist::preview_update_separators (GtkWidget* widget)
|
||||
{
|
||||
@ -952,8 +950,6 @@ void CsvImpTransAssist::preview_update_separators (GtkWidget* widget)
|
||||
|
||||
/** Event handler for clicking one of the format type radio
|
||||
* buttons. This occurs if the format (Fixed-Width or CSV) is changed.
|
||||
* @param csv_button The "Separated" radio button
|
||||
* @param info The display of the data being imported
|
||||
*/
|
||||
void CsvImpTransAssist::preview_update_file_format ()
|
||||
{
|
||||
@ -1007,7 +1003,6 @@ void CsvImpTransAssist::preview_update_account ()
|
||||
/** Event handler for a new encoding. This is called when the user
|
||||
* selects a new encoding; the data is reparsed and shown to the
|
||||
* user.
|
||||
* @param selector The widget the user uses to select a new encoding
|
||||
* @param encoding The encoding that the user selected
|
||||
*/
|
||||
void
|
||||
@ -1080,10 +1075,7 @@ enum PreviewDataTableCols {
|
||||
* user selects a new column type, that column's text must be changed
|
||||
* to the selection, and any other columns containing that selection
|
||||
* must be changed to "None" because we don't allow duplicates.
|
||||
* @param renderer The renderer of the column the user changed
|
||||
* @param path There is only 1 row in info->ctreeview, so this is always 0.
|
||||
* @param new_text The text the user selected
|
||||
* @param info The display of the data being imported
|
||||
* @param cbox The combo box the user just clicked to make a change
|
||||
*/
|
||||
void CsvImpTransAssist::preview_update_col_type (GtkComboBox* cbox)
|
||||
{
|
||||
@ -1470,12 +1462,12 @@ void CsvImpTransAssist::preview_refresh_table ()
|
||||
GtkTreeIter iter;
|
||||
gtk_list_store_append (store, &iter);
|
||||
preview_row_fill_state_cells (store, &iter,
|
||||
std::get<1>(parse_line), std::get<4>(parse_line));
|
||||
std::get<PL_ERROR>(parse_line), std::get<PL_SKIP>(parse_line));
|
||||
|
||||
/* Fill the data cells. */
|
||||
for (auto cell_str_it = std::get<0>(parse_line).cbegin(); cell_str_it != std::get<0>(parse_line).cend(); cell_str_it++)
|
||||
for (auto cell_str_it = std::get<PL_INPUT>(parse_line).cbegin(); cell_str_it != std::get<PL_INPUT>(parse_line).cend(); cell_str_it++)
|
||||
{
|
||||
uint32_t pos = PREV_N_FIXED_COLS + cell_str_it - std::get<0>(parse_line).cbegin();
|
||||
uint32_t pos = PREV_N_FIXED_COLS + cell_str_it - std::get<PL_INPUT>(parse_line).cbegin();
|
||||
gtk_list_store_set (store, &iter, pos, cell_str_it->c_str(), -1);
|
||||
}
|
||||
}
|
||||
|
@ -245,7 +245,7 @@ CsvTransSettings::load (void)
|
||||
if (key_char && *key_char != '\0')
|
||||
m_encoding = key_char;
|
||||
else
|
||||
"UTF-8";
|
||||
m_encoding = "UTF-8";
|
||||
m_load_error |= handle_load_error (&key_error, group);
|
||||
if (key_char)
|
||||
g_free (key_char);
|
||||
|
@ -75,9 +75,6 @@ void remove (void);
|
||||
* The internally generated presets are read-only. The others
|
||||
* can be saved to the state file or deleted.
|
||||
*
|
||||
* @param group The group name where the settings are stored in the
|
||||
* key file.
|
||||
*
|
||||
* @return true if there was a problem.
|
||||
*/
|
||||
bool read_only (void);
|
||||
@ -89,8 +86,8 @@ std::string m_encoding; // File encoding
|
||||
bool m_multi_split; // Assume multiple lines per transaction
|
||||
int m_date_format; // Date Active id
|
||||
int m_currency_format; // Currency Active id
|
||||
uint32_t m_skip_start_lines; // Number of header rows to skip
|
||||
uint32_t m_skip_end_lines; // Number of footer rows to skip
|
||||
uint32_t m_skip_start_lines; // Number of header rows to skip
|
||||
uint32_t m_skip_end_lines; // Number of footer rows to skip
|
||||
bool m_skip_alt_lines; // Skip alternate rows
|
||||
std::string m_separators; // Separators for csv format
|
||||
|
||||
|
@ -59,7 +59,6 @@ const gchar* currency_format_user[] = {N_("Locale"),
|
||||
|
||||
|
||||
/** Constructor for GncTxImport.
|
||||
* @return Pointer to a new GncCSvParseData
|
||||
*/
|
||||
GncTxImport::GncTxImport(GncImpFileFormat format)
|
||||
{
|
||||
@ -139,7 +138,7 @@ GncImpFileFormat GncTxImport::file_format()
|
||||
* will force a reparsing of the transaction properties (if there are
|
||||
* any) by resetting the first column with a transaction property
|
||||
* it encounters.
|
||||
* @param multi_split_val Boolean value with desired state (multi-split
|
||||
* @param multi_split Boolean value with desired state (multi-split
|
||||
* vs two-split).
|
||||
*/
|
||||
void GncTxImport::multi_split (bool multi_split)
|
||||
@ -172,7 +171,7 @@ bool GncTxImport::multi_split () { return m_settings.m_multi_split; }
|
||||
* in the import data.
|
||||
* In multi-split mode the user has to select an account column so in
|
||||
* that mode the base_account can't be set.
|
||||
* @param base_acct Pointer to an account or NULL.
|
||||
* @param base_account Pointer to an account or NULL.
|
||||
*/
|
||||
void GncTxImport::base_account (Account* base_account)
|
||||
{
|
||||
@ -194,7 +193,7 @@ void GncTxImport::base_account (Account* base_account)
|
||||
|
||||
/* Set default account for each line's split properties */
|
||||
for (auto line : m_parsed_lines)
|
||||
std::get<3>(line)->set_account (m_settings.m_base_account);
|
||||
std::get<PL_PRESPLIT>(line)->set_account (m_settings.m_base_account);
|
||||
|
||||
|
||||
}
|
||||
@ -276,12 +275,12 @@ void GncTxImport::update_skipped_lines(boost::optional<uint32_t> start, boost::o
|
||||
|
||||
for (uint32_t i = 0; i < m_parsed_lines.size(); i++)
|
||||
{
|
||||
std::get<4>(m_parsed_lines[i]) =
|
||||
std::get<PL_SKIP>(m_parsed_lines[i]) =
|
||||
((i < skip_start_lines()) || // start rows to skip
|
||||
(i >= m_parsed_lines.size() - skip_end_lines()) || // end rows to skip
|
||||
(((i - skip_start_lines()) % 2 == 1) && // skip every second row...
|
||||
skip_alt_lines()) || // ...if requested
|
||||
(m_skip_errors && !std::get<1>(m_parsed_lines[i]).empty())); // skip lines with errors
|
||||
(m_skip_errors && !std::get<PL_ERROR>(m_parsed_lines[i]).empty())); // skip lines with errors
|
||||
}
|
||||
}
|
||||
|
||||
@ -425,7 +424,7 @@ void GncTxImport::tokenize (bool guessColTypes)
|
||||
if (m_settings.m_base_account)
|
||||
{
|
||||
for (auto line : m_parsed_lines)
|
||||
std::get<3>(line)->set_account (m_settings.m_base_account);
|
||||
std::get<PL_PRESPLIT>(line)->set_account (m_settings.m_base_account);
|
||||
}
|
||||
|
||||
if (guessColTypes)
|
||||
@ -539,7 +538,7 @@ std::string GncTxImport::verify ()
|
||||
auto have_line_errors = false;
|
||||
for (auto line : m_parsed_lines)
|
||||
{
|
||||
if (!std::get<4>(line) && !std::get<1>(line).empty())
|
||||
if (!std::get<PL_SKIP>(line) && !std::get<PL_ERROR>(line).empty())
|
||||
{
|
||||
have_line_errors = true;
|
||||
break;
|
||||
@ -720,7 +719,7 @@ void GncTxImport::create_transactions ()
|
||||
++parsed_lines_it)
|
||||
{
|
||||
/* Skip current line if the user specified so */
|
||||
if ((std::get<4>(*parsed_lines_it)))
|
||||
if ((std::get<PL_SKIP>(*parsed_lines_it)))
|
||||
continue;
|
||||
|
||||
/* Should not throw anymore, otherwise verify needs revision */
|
||||
@ -743,11 +742,11 @@ void GncTxImport::update_pre_trans_props (uint32_t row, uint32_t col, GncTransPr
|
||||
if ((prop_type == GncTransPropType::NONE) || (prop_type > GncTransPropType::TRANS_PROPS))
|
||||
return; /* Only deal with transaction related properties. */
|
||||
|
||||
auto trans_props = std::make_shared<GncPreTrans> (*(std::get<2>(m_parsed_lines[row])).get());
|
||||
auto trans_props = std::make_shared<GncPreTrans> (*(std::get<PL_PRETRANS>(m_parsed_lines[row])).get());
|
||||
auto value = std::string();
|
||||
|
||||
if (col < std::get<0>(m_parsed_lines[row]).size())
|
||||
value = std::get<0>(m_parsed_lines[row]).at(col);
|
||||
if (col < std::get<PL_INPUT>(m_parsed_lines[row]).size())
|
||||
value = std::get<PL_INPUT>(m_parsed_lines[row]).at(col);
|
||||
|
||||
if (value.empty())
|
||||
trans_props->reset (prop_type);
|
||||
@ -762,13 +761,13 @@ void GncTxImport::update_pre_trans_props (uint32_t row, uint32_t col, GncTransPr
|
||||
/* Do nothing, just prevent the exception from escalating up
|
||||
* However log the error if it happens on a row that's not skipped
|
||||
*/
|
||||
if (!std::get<4>(m_parsed_lines[row]))
|
||||
if (!std::get<PL_SKIP>(m_parsed_lines[row]))
|
||||
PINFO("User warning: %s", e.what());
|
||||
}
|
||||
}
|
||||
|
||||
/* Store the result */
|
||||
std::get<2>(m_parsed_lines[row]) = trans_props;
|
||||
std::get<PL_PRETRANS>(m_parsed_lines[row]) = trans_props;
|
||||
|
||||
/* For multi-split input data, we need to check whether this line is part of
|
||||
* a transaction that has already been started by a previous line. */
|
||||
@ -779,7 +778,7 @@ void GncTxImport::update_pre_trans_props (uint32_t row, uint32_t col, GncTransPr
|
||||
/* This line is part of an already started transaction
|
||||
* continue with that one instead to make sure the split from this line
|
||||
* gets added to the proper transaction */
|
||||
std::get<2>(m_parsed_lines[row]) = m_parent;
|
||||
std::get<PL_PRETRANS>(m_parsed_lines[row]) = m_parent;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -796,11 +795,11 @@ void GncTxImport::update_pre_split_props (uint32_t row, uint32_t col, GncTransPr
|
||||
if ((prop_type > GncTransPropType::SPLIT_PROPS) || (prop_type <= GncTransPropType::TRANS_PROPS))
|
||||
return; /* Only deal with split related properties. */
|
||||
|
||||
auto split_props = std::get<3>(m_parsed_lines[row]);
|
||||
auto split_props = std::get<PL_PRESPLIT>(m_parsed_lines[row]);
|
||||
auto value = std::string();
|
||||
|
||||
if (col < std::get<0>(m_parsed_lines[row]).size())
|
||||
value = std::get<0>(m_parsed_lines[row]).at(col);
|
||||
if (col < std::get<PL_INPUT>(m_parsed_lines[row]).size())
|
||||
value = std::get<PL_INPUT>(m_parsed_lines[row]).at(col);
|
||||
|
||||
if (value.empty())
|
||||
split_props->reset (prop_type);
|
||||
@ -815,7 +814,7 @@ void GncTxImport::update_pre_split_props (uint32_t row, uint32_t col, GncTransPr
|
||||
/* Do nothing, just prevent the exception from escalating up
|
||||
* However log the error if it happens on a row that's not skipped
|
||||
*/
|
||||
if (!std::get<4>(m_parsed_lines[row]))
|
||||
if (!std::get<PL_SKIP>(m_parsed_lines[row]))
|
||||
PINFO("User warning: %s", e.what());
|
||||
}
|
||||
}
|
||||
@ -851,9 +850,9 @@ GncTxImport::set_column_type (uint32_t position, GncTransPropType type, bool for
|
||||
/* Reset date and currency formats for each trans/split props object
|
||||
* to ensure column updates use the most recent one
|
||||
*/
|
||||
std::get<2>(*parsed_lines_it)->set_date_format (m_settings.m_date_format);
|
||||
std::get<3>(*parsed_lines_it)->set_date_format (m_settings.m_date_format);
|
||||
std::get<3>(*parsed_lines_it)->set_currency_format (m_settings.m_currency_format);
|
||||
std::get<PL_PRETRANS>(*parsed_lines_it)->set_date_format (m_settings.m_date_format);
|
||||
std::get<PL_PRESPLIT>(*parsed_lines_it)->set_date_format (m_settings.m_date_format);
|
||||
std::get<PL_PRESPLIT>(*parsed_lines_it)->set_currency_format (m_settings.m_currency_format);
|
||||
|
||||
uint32_t row = parsed_lines_it - m_parsed_lines.begin();
|
||||
|
||||
@ -862,7 +861,7 @@ GncTxImport::set_column_type (uint32_t position, GncTransPropType type, bool for
|
||||
*/
|
||||
if (old_type != type)
|
||||
{
|
||||
auto old_col = std::get<0>(*parsed_lines_it).size(); // Deliberately out of bounds to trigger a reset!
|
||||
auto old_col = std::get<PL_INPUT>(*parsed_lines_it).size(); // Deliberately out of bounds to trigger a reset!
|
||||
if ((old_type > GncTransPropType::NONE)
|
||||
&& (old_type <= GncTransPropType::TRANS_PROPS))
|
||||
update_pre_trans_props (row, old_col, old_type);
|
||||
@ -880,9 +879,9 @@ GncTxImport::set_column_type (uint32_t position, GncTransPropType type, bool for
|
||||
update_pre_split_props (row, position, type);
|
||||
|
||||
/* Report errors if there are any */
|
||||
auto trans_errors = std::get<2>(*parsed_lines_it)->errors();
|
||||
auto split_errors = std::get<3>(*parsed_lines_it)->errors(m_req_mapped_accts);
|
||||
std::get<1>(*parsed_lines_it) =
|
||||
auto trans_errors = std::get<PL_PRETRANS>(*parsed_lines_it)->errors();
|
||||
auto split_errors = std::get<PL_PRESPLIT>(*parsed_lines_it)->errors(m_req_mapped_accts);
|
||||
std::get<PL_ERROR>(*parsed_lines_it) =
|
||||
trans_errors +
|
||||
(trans_errors.empty() && split_errors.empty() ? std::string() : "\n") +
|
||||
split_errors;
|
||||
@ -907,14 +906,13 @@ GncTxImport::accounts ()
|
||||
uint32_t tacct_col = tacct_col_it - m_settings.m_column_types.begin();
|
||||
|
||||
/* Iterate over all parsed lines */
|
||||
auto odd_line = false;
|
||||
for (auto parsed_line : m_parsed_lines)
|
||||
{
|
||||
/* Skip current line if the user specified so */
|
||||
if ((std::get<4>(parsed_line)))
|
||||
if ((std::get<PL_SKIP>(parsed_line)))
|
||||
continue;
|
||||
|
||||
auto col_strs = std::get<0>(parsed_line);
|
||||
auto col_strs = std::get<PL_INPUT>(parsed_line);
|
||||
if ((acct_col_it != m_settings.m_column_types.end()) && !col_strs[acct_col].empty())
|
||||
accts.insert(col_strs[acct_col]);
|
||||
if ((tacct_col_it != m_settings.m_column_types.end()) && !col_strs[tacct_col].empty())
|
||||
|
@ -73,6 +73,11 @@ extern const gchar* date_format_user[];
|
||||
* - an optional error string
|
||||
* - a struct to hold user selected properties for a transaction
|
||||
* - a struct to hold user selected properties for one or two splits in the above transaction */
|
||||
#define PL_INPUT 0
|
||||
#define PL_ERROR 1
|
||||
#define PL_PRETRANS 2
|
||||
#define PL_PRESPLIT 3
|
||||
#define PL_SKIP 4
|
||||
using parse_line_t = std::tuple<StrVec,
|
||||
std::string,
|
||||
std::shared_ptr<GncPreTrans>,
|
||||
|
Loading…
Reference in New Issue
Block a user