def find_or_make_account(account_tuple, root_account, book, currency):
    current_account_name, account_path = account_tuple[0], account_tuple[1:]
    current_account = root_account.lookup_by_name(current_account_name)
    if current_account == None:
        current_account = Account(book)
        current_account.SetName(current_account_name)
        current_account.SetCommodity(currency)
        root_account.append_child(current_account)

    if len(account_path) > 0:
        return find_or_make_account(account_path, current_account, book,
                                    currency)
    else:
        account_commod = current_account.GetCommodity()
        if (account_commod.get_mnemonic(),
            account_commod.get_namespace() ) == \
            (currency.get_mnemonic(),
             currency.get_namespace()) :
            return current_account
        else:
            return None
示例#2
0
def recursivly_build_account_tree(original_parent_account, new_parent_account,
                                  new_book, new_commodity_table,
                                  opening_balance_per_currency,
                                  account_types_to_open):

    for child in original_parent_account.get_children():
        original_account = Account(instance=child)
        new_account = Account(new_book)
        # attach new account to its parent
        new_parent_account.append_child(new_account)

        # copy simple attributes
        for attribute in ('Name', 'Type', 'Description', 'Notes', 'Code',
                          'TaxRelated', 'Placeholder'):
            # new_account.SetAttribute( original_account.GetAttribute() )
            getattr(new_account,
                    'Set' + attribute)(getattr(original_account,
                                               'Get' + attribute)())

        # copy commodity
        orig_commodity = original_account.GetCommodity()
        namespace = orig_commodity.get_namespace()
        mnemonic = orig_commodity.get_mnemonic()
        new_commodity = new_commodity_table.lookup(namespace, mnemonic)
        assert (new_commodity.get_instance() != None)
        new_account.SetCommodity(new_commodity)

        record_opening_balance(
            original_account,
            new_account,
            new_book,
            opening_balance_per_currency,
            (namespace, mnemonic),
        )

        recursivly_build_account_tree(original_account, new_account, new_book,
                                      new_commodity_table,
                                      opening_balance_per_currency,
                                      account_types_to_open)