summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/csv.cc2
-rw-r--r--src/journal.cc2
-rw-r--r--src/journal.h73
-rw-r--r--src/textual.cc25
4 files changed, 63 insertions, 39 deletions
diff --git a/src/csv.cc b/src/csv.cc
index bcfa1284..9f7e78e4 100644
--- a/src/csv.cc
+++ b/src/csv.cc
@@ -186,7 +186,7 @@ xact_t * csv_reader::read_xact(bool rich_data)
case FIELD_PAYEE: {
bool found = false;
- foreach (payee_mapping_t& value, context.journal->payee_mappings) {
+ foreach (payee_alias_mapping_t& value, context.journal->payee_alias_mappings) {
DEBUG("csv.mappings", "Looking for payee mapping: " << value.first);
if (value.first.match(field)) {
xact->payee = value.second;
diff --git a/src/journal.cc b/src/journal.cc
index 142b68a6..ced96ee9 100644
--- a/src/journal.cc
+++ b/src/journal.cc
@@ -249,7 +249,7 @@ string journal_t::register_payee(const string& name, xact_t * xact)
}
}
- foreach (payee_mapping_t& value, payee_mappings) {
+ foreach (payee_alias_mapping_t& value, payee_alias_mappings) {
if (value.first.match(name)) {
payee = value.second;
break;
diff --git a/src/journal.h b/src/journal.h
index ad7b4b48..803b9511 100644
--- a/src/journal.h
+++ b/src/journal.h
@@ -58,15 +58,17 @@ class account_t;
class parse_context_t;
class parse_context_stack_t;
-typedef std::list<xact_t *> xacts_list;
-typedef std::list<auto_xact_t *> auto_xacts_list;
-typedef std::list<period_xact_t *> period_xacts_list;
-typedef std::pair<mask_t, string> payee_mapping_t;
-typedef std::list<payee_mapping_t> payee_mappings_t;
-typedef std::pair<mask_t, account_t *> account_mapping_t;
-typedef std::list<account_mapping_t> account_mappings_t;
-typedef std::map<string, account_t *> accounts_map;
-typedef std::map<string, xact_t *> checksum_map_t;
+typedef std::list<xact_t *> xacts_list;
+typedef std::list<auto_xact_t *> auto_xacts_list;
+typedef std::list<period_xact_t *> period_xacts_list;
+typedef std::pair<mask_t, string> payee_alias_mapping_t;
+typedef std::list<payee_alias_mapping_t> payee_alias_mappings_t;
+typedef std::pair<string, string> payee_uuid_mapping_t;
+typedef std::list<payee_uuid_mapping_t> payee_uuid_mappings_t;
+typedef std::pair<mask_t, account_t *> account_mapping_t;
+typedef std::list<account_mapping_t> account_mappings_t;
+typedef std::map<string, account_t *> accounts_map;
+typedef std::map<string, xact_t *> checksum_map_t;
typedef std::multimap<string, expr_t::check_expr_pair> tag_check_exprs_map;
@@ -115,32 +117,33 @@ public:
#endif // HAVE_BOOST_SERIALIZATION
};
- account_t * master;
- account_t * bucket;
- xacts_list xacts;
- auto_xacts_list auto_xacts;
- period_xacts_list period_xacts;
- std::list<fileinfo_t> sources;
- std::set<string> known_payees;
- std::set<string> known_tags;
- bool fixed_accounts;
- bool fixed_payees;
- bool fixed_commodities;
- bool fixed_metadata;
- bool was_loaded;
- bool force_checking;
- bool check_payees;
- bool day_break;
- bool recursive_aliases;
- bool no_aliases;
- payee_mappings_t payee_mappings;
- account_mappings_t account_mappings;
- accounts_map account_aliases;
- account_mappings_t payees_for_unknown_accounts;
- checksum_map_t checksum_map;
- tag_check_exprs_map tag_check_exprs;
- optional<expr_t> value_expr;
- parse_context_t * current_context;
+ account_t * master;
+ account_t * bucket;
+ xacts_list xacts;
+ auto_xacts_list auto_xacts;
+ period_xacts_list period_xacts;
+ std::list<fileinfo_t> sources;
+ std::set<string> known_payees;
+ std::set<string> known_tags;
+ bool fixed_accounts;
+ bool fixed_payees;
+ bool fixed_commodities;
+ bool fixed_metadata;
+ bool was_loaded;
+ bool force_checking;
+ bool check_payees;
+ bool day_break;
+ bool recursive_aliases;
+ bool no_aliases;
+ payee_alias_mappings_t payee_alias_mappings;
+ payee_uuid_mappings_t payee_uuid_mappings;
+ account_mappings_t account_mappings;
+ accounts_map account_aliases;
+ account_mappings_t payees_for_unknown_accounts;
+ checksum_map_t checksum_map;
+ tag_check_exprs_map tag_check_exprs;
+ optional<expr_t> value_expr;
+ parse_context_t * current_context;
enum checking_style_t {
CHECK_PERMISSIVE,
diff --git a/src/textual.cc b/src/textual.cc
index 55f22a2c..60250007 100644
--- a/src/textual.cc
+++ b/src/textual.cc
@@ -155,6 +155,7 @@ namespace {
void payee_directive(char * line);
void payee_alias_directive(const string& payee, string alias);
+ void payee_uuid_directive(const string& payee, string uuid);
void commodity_directive(char * line);
void commodity_alias_directive(commodity_t& comm, string alias);
@@ -1035,14 +1036,23 @@ void instance_t::payee_directive(char * line)
string keyword(p);
if (keyword == "alias")
payee_alias_directive(payee, b);
+ if (keyword == "uuid")
+ payee_uuid_directive(payee, b);
}
}
void instance_t::payee_alias_directive(const string& payee, string alias)
{
trim(alias);
- context.journal->payee_mappings
- .push_back(payee_mapping_t(mask_t(alias), payee));
+ context.journal->payee_alias_mappings
+ .push_back(payee_alias_mapping_t(mask_t(alias), payee));
+}
+
+void instance_t::payee_uuid_directive(const string& payee, string uuid)
+{
+ trim(uuid);
+ context.journal->payee_uuid_mappings
+ .push_back(payee_uuid_mapping_t(uuid, payee));
}
void instance_t::commodity_directive(char * line)
@@ -1862,6 +1872,17 @@ xact_t * instance_t::parse_xact(char * line,
else {
reveal_context = false;
+ if (!last_post) {
+ if (xact->has_tag(_("UUID"))) {
+ string uuid = xact->get_tag(_("UUID"))->to_string();
+ foreach (payee_uuid_mapping_t value, context.journal->payee_uuid_mappings) {
+ if (value.first.compare(uuid) == 0) {
+ xact->payee = value.second;
+ }
+ }
+ }
+ }
+
if (post_t * post =
parse_post(p, len - (p - line), account, xact.get())) {
reveal_context = true;