Hi, I’m trying to write a small program to add (historical) prices to my gnucash file. I’m basing my approach off of some code I found on the gnucash-users list (http://article.gmane.org/gmane.comp.gnome.apps.gnucash.user/25065/match=historical+prices+bond). Essentially, my code opens up the book, tries to find a commodity (hard coded to “GOOG” for testing) and then creates a new price for that commodity. I’ve attached my code to this message, as well as an example.gnucash file that I’ve been using.
Unfortunately, I’m getting stuck — even though I’ve defined a GOOG
security in my gnucash file, I can’t seem to retrieve it from my file
using “gnc_commodity_table_lookup()”: I always get NULL for my
commodity, even though I can zless the example.gnucash file and can
see my commodity, as well as edit it in gnucash.
To wit, here’s a transcript of a session with my code:
%make
gcc -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
-I/usr/include/gnucash -L/usr/lib/gnucash -lgnc-core-utils -lgnc-qof -std=c99
-lgnc-backend-file-utils historical.c -g -o historical
%gnucash-env ./historical
Has NYSE namespace
commodity is NULL
%
(The example.gnucash file is in the same directory as the program.)
Am I doing something wrong? I’m using gnucash 2.2.6 on Ubuntu 8.10.
Thanks,
—Justin
#define HAVE_SCANF_LLD 1 // or else qof.h complains
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <qof.h>
#include <gnc-pricedb.h>
#include <gnc-session.h>
int main(int argc, char **argv) {
QofSession *session;
QofBook *book;
GNCPrice *price;
GNCPriceDB *price_db;
gnc_commodity *currency;
gnc_commodity_table *table;
gnc_commodity *commodity;
gnc_numeric n;
qof_init();
gnc_engine_init(argc, argv);
session = qof_session_new();
qof_session_begin(session, "file:example.gnucash", TRUE, FALSE);
book = qof_session_get_book(session);
price_db = gnc_book_get_pricedb(book);
table = gnc_commodity_table_get_table(book);
currency = gnc_commodity_table_lookup(table,
GNC_COMMODITY_NS_CURRENCY,
"USD");
if (gnc_commodity_table_has_namespace(table, "NYSE")) {
printf("Has NYSE namespace\n");
}
commodity = gnc_commodity_table_lookup(table,
GNC_COMMODITY_NS_NYSE,
"GOOG");
if (!commodity) {
printf("commodity is NULL\n");
return 1;
}
price = gnc_price_create(book);
gnc_price_set_commodity(price, commodity);
gnc_price_set_currency(price, currency);
gnc_price_set_time(price, gnc_dmy2timespec(1,11,2008));
gnc_price_set_source(price, "jmp:historical");
gnc_price_set_typestr(price, "last");
string_to_gnc_numeric("7337.34", &n);
gnc_price_set_value(price, n);
gnc_pricedb_add_price(price_db, price);
gnc_pricedb_print_contents(price_db, stdout);
qof_session_save(session, NULL);
return 0;
}
example.gnucash
Description: Binary data
_______________________________________________ gnucash-devel mailing list [email protected] https://lists.gnucash.org/mailman/listinfo/gnucash-devel
