change and % columns added to portfolio
authorDaniel Martin Yerga <yerga@ubuntu.(none)>
Wed, 17 Feb 2010 15:52:27 +0000 (16:52 +0100)
committerDaniel Martin Yerga <yerga@ubuntu.(none)>
Wed, 17 Feb 2010 15:52:27 +0000 (16:52 +0100)
changelog
stockthis.py

index 16f59ed..67d450e 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,3 +1,7 @@
+2010-02-17  Daniel Martin Yerga  <dyerga@gmail.com>
+
+  * Change and percentage columns added to portfolio view.
+
 2010-02-07  Daniel Martin Yerga  <dyerga@gmail.com>
 
   * Settings are saved with the system backup. MB#6078
index 8775a57..328853e 100644 (file)
@@ -779,6 +779,9 @@ class StocksPy:
 
     def show_portfolio_view(self, widget):
         data = settings.load_portfolio(settingsdb)
+        for item in data:
+            item.append('-')
+            item.append('-')
 
         win = hildon.StackableWindow()
         self.create_menu(win)
@@ -847,7 +850,6 @@ class StocksPy:
         dlg.run()
         dlg.destroy()
 
-
     def add_item(self, widget, dlg, button, entry1, entry2):
         symbol = entry2.get_text()
         name = entry1.get_text()
@@ -923,33 +925,54 @@ class StocksPy:
 
     def refresh_portfolio(self, widget, tv, win):
         data = settings.load_portfolio(settingsdb)
+        for item in data:
+            item.append('-')
+            item.append('-')
         import thread
         winprogind(win, 1)
         thread.start_new_thread(self._do_refresh_portfolio, (data, tv, win))
 
     def _do_refresh_portfolio(self, data, tv, win):
+        print data
         for item in data:
-            item[3] = self.get_price(item[0])
+            item[3], item[4] = self.get_portfolio_data(item[0])
+            try:
+                ch_percent = \
+                        100.0 * float(item[4])/(float(item[3]) - \
+                        float(item[4]))
+            except ValueError:
+                ch_percent = 0.0
 
+            item[5] = '%6.2f %%' % ch_percent
+
+
+        print data
         self.portfolio_model = self._create_portfolio_model(data)
         tv.set_model(self.portfolio_model)
         winprogind(win, 0)
 
-    def get_price(self, symbol):
+    def get_portfolio_data(self, symbol):
         from ystockquote import ystockquote as yt
         try:
-            price = yt.get_price(symbol)
-            return price
+            data = yt.get_all(symbol)
+            return data['price'], data['change']
         except:
             logger.exception("Getting price from Yahoo: %s" % symbol)
-            return "N/A"
+            return "-", "-"
 
     def _create_portfolio_model(self, data):
         lstore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING,
-                                gobject.TYPE_STRING, gobject.TYPE_STRING)
+                                gobject.TYPE_STRING, gobject.TYPE_STRING,
+                                gobject.TYPE_STRING, gobject.TYPE_STRING,
+                                gobject.TYPE_STRING)
         for item in data:
             iter = lstore.append()
-            lstore.set(iter, 0, item[0], 1, item[1], 2, item[2], 3, item[3])
+            if '+' in item[4]:
+                color = 'green'
+            else:
+                color = 'red'
+            lstore.set(iter, 0, item[0], 1, item[1], 2, item[2], 3, item[3],
+                        4, item[4], 5, item[5], 6, color)
         return lstore
 
     def _tv_portfolio_columns(self, treeview):
@@ -967,6 +990,15 @@ class StocksPy:
         column = gtk.TreeViewColumn('Price', gtk.CellRendererText(), text=3)
         treeview.append_column(column)
 
+        column = gtk.TreeViewColumn('Change', gtk.CellRendererText(), text=4)
+        treeview.append_column(column)
+
+
+        renderer = gtk.CellRendererText()
+        renderer.set_property("foreground-set", True)
+        column = gtk.TreeViewColumn('%', renderer, text=5, foreground=6)
+        treeview.append_column(column)
+
     def show_confirmation(self, window, msg):
         dialog = hildon.hildon_note_new_confirmation(window, msg)
         dialog.show_all()