...
 
Commits (32)
Jan 06 13:04:22 EDT 2007
Road to a 0.3 release:
* Make sure to update categorie combobox in adddialog with category selected from categorydialog or original value if user clicked on cancel button in categorydialog.
* Finish categoriesdialog so that it allows the user to associate a color (use gtk.ColorButton?) to a category.
* Create a categoriesview class (inherit genericview) to display a colored square (pixbuf) and the name of the category (string).
* Finish alarm dialog so that user can select date and time for individual record.
Dec 04 01:05:35 EDT 2007
* Add an "action" to the notification message, allowing the user to open/start BillReminder to work on his bills. This has to detect if an instance of BillReminder is already running or not. If running, display it; else, launch it.
* Use all icons created by vdpizzol and add them to the setup script.
Mar 24 12:30:03 EDT 2007
* Add a label to the billdialog's calendar stating what it is for (i.e. Choose due date);
Mar 18 18:27:21 EDT 2007
* Add vdpizzol and pygi to the list of contributors.
Jan 15 20:52:37 EST 2007
* Add a mechanism for updating (drop and create) the database layer;
Partially implemented by larmesto (r.134)
Jan 10 05:48:23 GMT+1 2007
* Make a png icon.
Created by vdpizzol
* Change .desktop, setup and billy (done)
Jan 1 21:15:05 EST 2007
* Turn the class DAL into a singleton.
Changed my mind on this one.
Sun Dec 30 19:14:16 EST 2007
Road to a 0.3 release:
* Add searching set_visible_func function and automatically select records based on user search. (sf# 1866443)
* Fully implement the View menu entry so that records can be displayed based on selection. (sf# 1866431)
* Currently the categoriesdialog displays a colored square next to the category name, but it doesn't match the corresponding color yet. The create_pixbuf method expects a rgb (tuple) value but the record stores the hex value of the color.
* Make sure that maindialog also displays the category name and the colored image.
* Add verification routine to adddialog so that amount and category are validated prior to saving/updating a record.
Mar 19 15:21:45 EDT 2007
* Add regex to validate for numeric values only for billdialog's value field. Take localization into account;
* Feature to allow user to choose when to be reminded for a given bill;
Mar 13 13:09:01 EDT 2007
* Test and strengthen the updatetables method in DAL;
* Table validation should take the version into account when making decisions. If version in code is less than existing (in the db), we should not update;
Jan 15 20:52:37 EST 2007
* Add a method of payment to database and UI, so user can select the method of payment for any given record. For exemple, credit card, cash, check, etc. In case of payment by check, allow user to enter the check number; This should be good enough for this iteration;
Jan 10 05:48:23 GMT+1 2007
* Test build system
<?xml version="1.0"?>
<interface>
<requires lib="gtk+" version="2.16"/>
<!-- interface-naming-policy project-wide -->
<object class="GtkWindow" id="main_window">
<property name="window_position">center</property>
<property name="default_width">600</property>
<property name="default_height">400</property>
<signal name="delete_event" handler="on_delete_event"/>
<child>
<object class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkToolbar" id="toolbar1">
<property name="visible">True</property>
<child>
<object class="GtkToolButton" id="prev">
<property name="visible">True</property>
<property name="label" translatable="yes">toolbutton1</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-go-back</property>
<signal name="clicked" handler="on_prev_clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="next">
<property name="visible">True</property>
<property name="label" translatable="yes">toolbutton2</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-go-forward</property>
<signal name="clicked" handler="on_next_clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="home">
<property name="visible">True</property>
<property name="label" translatable="yes">toolbutton3</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-home</property>
<signal name="clicked" handler="on_home_clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="new">
<property name="visible">True</property>
<property name="label" translatable="yes">toolbutton4</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-new</property>
<signal name="clicked" handler="on_new_clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="edit">
<property name="visible">True</property>
<property name="label" translatable="yes">toolbutton5</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-edit</property>
<signal name="clicked" handler="on_edit_clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="delete">
<property name="visible">True</property>
<property name="label" translatable="yes">toolbutton6</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-delete</property>
<signal name="clicked" handler="on_delete_clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
<child>
<object class="GtkToolButton" id="about">
<property name="visible">True</property>
<property name="label" translatable="yes">toolbutton7</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-about</property>
<signal name="clicked" handler="on_about_clicked"/>
</object>
<packing>
<property name="expand">False</property>
<property name="homogeneous">True</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="border_width">12</property>
<property name="orientation">vertical</property>
<property name="spacing">20</property>
<child>
<object class="GtkLabel" id="range_title">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label">January 1-31, 2010</property>
<attributes>
<attribute name="weight" value="bold"/>
<attribute name="size" value="15000"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="time_box">
<property name="height_request">60</property>
<property name="visible">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<property name="spacing">10</property>
<child>
<object class="GtkScrolledWindow" id="scrollbox99">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<object class="GtkViewport" id="upcoming_box">
<property name="visible">True</property>
<property name="resize_mode">queue</property>
<child>
<object class="GtkAlignment" id="bill_box">
<property name="visible">True</property>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="totals">
<property name="width_request">250</property>
<property name="visible">True</property>
<property name="top_padding">20</property>
<child>
<object class="GtkVBox" id="vbox3">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkAlignment" id="by_type">
<property name="height_request">80</property>
<property name="visible">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkAlignment" id="by_category">
<property name="visible">True</property>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkMenu" id="context_menu">
<property name="visible">True</property>
<child>
<object class="GtkImageMenuItem" id="menuitem8">
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="menuitem9">
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="menuitem10">
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="menuitem11">
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
<child>
<object class="GtkImageMenuItem" id="menuitem12">
<property name="visible">True</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
</object>
</child>
</object>
</interface>
......@@ -2,13 +2,13 @@
# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
# This file is distributed under the same license as the billreminder package.
#
# Gabor Kelemen <kelemeng at gnome dot hu>, 2008, 2009.
# Gabor Kelemen <kelemeng at gnome dot hu>, 2008, 2009, 2010.
msgid ""
msgstr ""
"Project-Id-Version: billreminder master\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-08-15 01:57+0200\n"
"PO-Revision-Date: 2009-08-15 01:58+0200\n"
"POT-Creation-Date: 2010-01-22 01:03+0100\n"
"PO-Revision-Date: 2010-01-22 00:59+0100\n"
"Last-Translator: Gabor Kelemen <kelemeng at gnome dot hu>\n"
"Language-Team: Hungarian <gnome at fsf dot hu>\n"
"MIME-Version: 1.0\n"
......@@ -19,7 +19,7 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
#: ../data/billreminderd.desktop.in.h:1 ../src/billreminderd.py:43
#: ../src/daemon/alarm.py:121 ../src/daemon/dbus_manager.py:45
#: ../src/daemon/alarm.py:139 ../src/daemon/dbus_manager.py:44
msgid "BillReminder Notifier"
msgstr "Számlafigyelő-értesítő"
......@@ -140,32 +140,128 @@ msgstr "Az alkalmazás a rendszertálcán induljon-e?"
msgid "Whether to use dialogs for notifications."
msgstr "Ablakok használandók-e az értesítésekhez?"
#: ../src/billreminder.py:39 ../src/billreminderd.py:23
#. Dialog Title
#: ../data/main.ui.h:1 ../src/lib/dialogs.py:65
msgid "Add a new bill"
msgstr "Új számla felvétele"
#: ../data/main.ui.h:2
msgid "All Bills"
msgstr "Minden számla"
#: ../data/main.ui.h:3 ../src/gui/maindialog.py:139
msgid "Delete selected bill"
msgstr "Kiválasztott számla törlése"
#. Dialog Title
#: ../data/main.ui.h:4 ../src/gui/maindialog.py:136 ../src/lib/dialogs.py:76
msgid "Edit a bill"
msgstr "Számla szerkesztése"
#: ../data/main.ui.h:5 ../src/gui/maindialog.py:145
msgid "Mark as not paid"
msgstr "Befizetetlen"
#. Button Title
#: ../data/main.ui.h:6 ../src/daemon/alarm.py:146 ../src/gui/maindialog.py:142
#: ../src/lib/utils.py:135
msgid "Mark as paid"
msgstr "Befizetett"
#: ../data/main.ui.h:7
msgid "Not Paid Only"
msgstr "Csak a befizetetlenek"
#: ../data/main.ui.h:8
msgid "Paid Only"
msgstr "Csak a befizetettek"
#: ../data/main.ui.h:9 ../src/gui/maindialog.py:147
msgid "Show Toolbar"
msgstr "Eszköztár megjelenítése"
#: ../data/main.ui.h:10
msgid "_Bill"
msgstr "S_zámla"
#: ../data/main.ui.h:11
msgid "_Edit"
msgstr "S_zerkesztés"
#: ../data/main.ui.h:12
msgid "_Help"
msgstr "_Súgó"
#: ../data/main.ui.h:13
msgid "_View"
msgstr "_Nézet"
#: ../data/add_bill.ui.h:1
msgid "A_larm:\t"
msgstr "_Riasztás:\t"
#: ../data/add_bill.ui.h:2
msgid "Manage Categories"
msgstr "Kategóriák kezelése"
#: ../data/add_bill.ui.h:3
msgid "Optional Fields"
msgstr "Elhagyható mezők"
#: ../data/add_bill.ui.h:4
msgid "_Amount:"
msgstr "Össz_eg:"
#: ../data/add_bill.ui.h:5
msgid "_Category:"
msgstr "_Kategória:"
#: ../data/add_bill.ui.h:6
msgid "_Due Date:"
msgstr "Ese_dékesség napja:"
#: ../data/add_bill.ui.h:7
msgid "_End Date:"
msgstr "_Lejárat napja:"
#: ../data/add_bill.ui.h:8
msgid "_Notes:"
msgstr "_Megjegyzések:"
#: ../data/add_bill.ui.h:9
msgid "_Payee:"
msgstr "_Kiállító:"
#: ../data/add_bill.ui.h:10
msgid "_Repeat:"
msgstr "_Ismétlés:"
#: ../src/billreminder.py:45 ../src/billreminderd.py:23
msgid "Usage: billreminder [OPTIONS...]"
msgstr "Használat: billreminder [KAPCSOLÓK…]"
#: ../src/billreminder.py:40 ../src/billreminderd.py:24
#: ../src/billreminder.py:46 ../src/billreminderd.py:24
msgid "Displays the version number for this application."
msgstr "Megjeleníti az alkalmazás verziószámát."
#: ../src/billreminder.py:41
#: ../src/billreminder.py:47
msgid "About this application."
msgstr "Az alkalmazás névjegye."
#: ../src/billreminder.py:42
#: ../src/billreminder.py:48
msgid "Adds a new bill to the database."
msgstr "Új számla hozzáadása az adatbázishoz."
#: ../src/billreminder.py:43
#: ../src/billreminder.py:49
msgid "Access database directly, without daemon."
msgstr "Az adatbázis démon nélküli közvetlen elérése."
#: ../src/billreminder.py:52
#: ../src/billreminder.py:58
msgid "This option is not implemented yet."
msgstr "Ez a lehetőség még nincs megvalósítva."
#: ../src/billreminder.py:54 ../src/billreminderd.py:42
#: ../src/daemon/dbus_manager.py:44
#: ../src/billreminder.py:60 ../src/billreminderd.py:42
#: ../src/daemon/dbus_manager.py:43
#, python-format
msgid "This is %(appname)s - Version: %(version)s"
msgstr "Ez a %(appname)s %(version)s verziója"
......@@ -186,45 +282,37 @@ msgstr "A démon és a grafikus kezelőfelület elindítása."
msgid "Stop daemon."
msgstr "A démon leállítása"
#: ../src/daemon/alarm.py:63
#: ../src/daemon/alarm.py:76
#, python-format
msgid "You have %s outstanding bill to pay!"
msgid_plural "You have %s outstanding bills to pay!"
msgstr[0] "%s befizetetlen számlája van."
msgstr[1] "%s befizetetlen számlája van."
#: ../src/daemon/alarm.py:68
#: ../src/daemon/alarm.py:81
msgid "Show BillReminder"
msgstr "A Számlafigyelő megjelenítése"
#: ../src/daemon/alarm.py:70 ../src/daemon/alarm.py:131
msgid "Cancel"
msgstr "Mégsem"
#: ../src/daemon/alarm.py:105 ../src/daemon/alarm.py:202
#: ../src/daemon/alarm.py:123 ../src/daemon/alarm.py:230
#, python-format
msgid "The bill %(bill)s will be due at %(day)s."
msgstr "A(z) %(bill)s számla befizetése ekkor lesz esedékes: %(day)s."
#: ../src/daemon/alarm.py:117
#: ../src/daemon/alarm.py:135
#, python-format
msgid "The bill %s is due."
msgstr "A(z) %s számla most esedékes."
#. Button Title
#: ../src/daemon/alarm.py:128 ../src/gui/maindialog.py:299
#: ../src/gui/maindialog.py:332 ../src/lib/utils.py:135
msgid "Mark as paid"
msgstr "Befizetett"
#: ../src/daemon/alarm.py:130 ../src/lib/utils.py:136
#: ../src/daemon/alarm.py:148 ../src/gui/maindialog.py:135
#: ../src/lib/utils.py:136
msgid "Edit"
msgstr "Szerkesztés"
#: ../src/daemon/main.py:85
#, python-format
msgid "Lock File found: You have another instance running. (pid=%d)"
msgstr "Már létezik a zárolásfájl. Már fut az alkalmazás egy példánya. (pid=%d)"
msgstr ""
"Már létezik a zárolásfájl. Már fut az alkalmazás egy példánya. (pid=%d)"
#: ../src/daemon/main.py:90
msgid "Lock File found: Possibly the program was exited unexpectedly."
......@@ -248,7 +336,7 @@ msgstr "Sikertelen."
msgid "BillReminder Notifier is already running."
msgstr "A Számlafigyelő-értesítő már fut."
#: ../src/gui/aboutdialog.py:21
#: ../src/gui/aboutdialog.py:16
msgid "translator-credits"
msgstr ""
"Kelemen Gábor <kelemeng@gnome.hu>\n"
......@@ -256,92 +344,53 @@ msgstr ""
"Launchpad közreműködők:\n"
" HORVATH, Akos https://launchpad.net/~akos-horvath"
#: ../src/gui/aboutdialog.py:44
#: ../src/gui/aboutdialog.py:30
msgid "BillReminder Website"
msgstr "A Számlafigyelő weboldala"
#: ../src/gui/adddialog.py:80
msgid "<b>_Repeat:</b>"
msgstr "<b>_Ismétlés:</b>"
#: ../src/gui/adddialog.py:86
msgid "<b>Due Date:</b>"
msgstr "<b>Esedékesség napja:</b>"
#. TRANSLATORS: This is the end date for repeating bills.
#: ../src/gui/adddialog.py:90
msgid "<b>End Date:</b>"
msgstr "<b>Lejárat napja:</b>"
#: ../src/gui/adddialog.py:107
msgid "<b>_Payee:</b>"
msgstr "<b>_Kiállító:</b>"
#: ../src/gui/adddialog.py:110
msgid "<b>_Amount:</b>"
msgstr "<b>Ö_sszeg:</b>"
#: ../src/gui/adddialog.py:113
msgid "<b>_Category:</b>"
msgstr "<b>K_ategória:</b>"
#: ../src/gui/adddialog.py:116
msgid "<b>_Notes:</b>"
msgstr "<b>Megjegy_zések:</b>"
#: ../src/gui/adddialog.py:119
msgid "<b>A_larm:</b>"
msgstr "<b>_Riasztás:</b>"
#: ../src/gui/adddialog.py:144
msgid "Manage Categories"
msgstr "Kategóriák kezelése"
#: ../src/gui/adddialog.py:167 ../src/gui/widgets/datebutton.py:40
#: ../src/gui/adddialog.py:103 ../src/gui/widgets/datebutton.py:40
msgid "Select Date and Time"
msgstr "Válasszon dátumot és időt"
#. # Expander
#: ../src/gui/adddialog.py:202
msgid "<b>Optional Fields:</b>"
msgstr "<b>Elhagyható mezők:</b>"
#. TRANSLATORS: No date selected
#: ../src/gui/adddialog.py:351 ../src/gui/adddialog.py:375
#: ../src/gui/maindialog.py:280 ../src/gui/widgets/datebutton.py:18
#: ../src/gui/adddialog.py:240 ../src/gui/adddialog.py:264
#: ../src/gui/maindialog.py:232 ../src/gui/widgets/datebutton.py:18
#: ../src/gui/widgets/datebutton.py:26
msgid "None"
msgstr "Nincs"
#: ../src/gui/adddialog.py:357 ../src/gui/categoriesdialog.py:48
#: ../src/gui/adddialog.py:246 ../src/gui/categoriesdialog.py:48
msgid "New Category"
msgstr "Új kategória"
#: ../src/gui/adddialog.py:397
#: ../src/gui/adddialog.py:286
msgid ""
"The end date is set to a date prior to the start date. Setting it to match "
"the start date."
msgstr "A befejező dátum megelőzi a kezdődátumot. A kezdődátummal egyezőre lesz állítva."
msgstr ""
"A befejező dátum megelőzi a kezdődátumot. A kezdődátummal egyezőre lesz "
"állítva."
#: ../src/gui/adddialog.py:398
#: ../src/gui/adddialog.py:287
msgid "Date set in the past"
msgstr "A dátum a múltban van"
#: ../src/gui/adddialog.py:499
#: ../src/gui/adddialog.py:402
#, python-format
msgid "\"%s\" and \"%s\" are required fields."
msgstr "„%s” és „%s” mezőket ki kell tölteni."
#: ../src/gui/adddialog.py:500 ../src/gui/adddialog.py:504
#: ../src/gui/widgets/viewbill.py:89
#: ../src/gui/adddialog.py:403 ../src/gui/adddialog.py:406
#: ../src/gui/widgets/viewbill.py:85
msgid "Payee"
msgstr "Kiállító"
#: ../src/gui/adddialog.py:500 ../src/gui/widgets/viewbill.py:93
#: ../src/gui/adddialog.py:403 ../src/gui/adddialog.py:409
#: ../src/gui/widgets/viewbill.py:89
msgid "Amount"
msgstr "Összeg"
#: ../src/gui/adddialog.py:504
#: ../src/gui/adddialog.py:406 ../src/gui/adddialog.py:409
#, python-format
msgid "\"%s\" is required field."
msgstr "„%s” mezőt ki kell tölteni"
......@@ -362,7 +411,7 @@ msgstr "Név:"
msgid "Color:"
msgstr "Szín:"
#: ../src/gui/categoriesdialog.py:219
#: ../src/gui/categoriesdialog.py:215
#, python-format
msgid ""
"The category \"%s\" already exists in the database!\n"
......@@ -373,130 +422,52 @@ msgstr ""
"\n"
"Akarja a változtatásokat a meglévő kategóriára alkalmazni?"
#: ../src/gui/categoriesdialog.py:246
#: ../src/gui/categoriesdialog.py:239
msgid "Do you really want to delete this category?\n"
msgstr "Valóban törli ezt a kategóriát?\n"
#: ../src/gui/categoriesdialog.py:247
#: ../src/gui/categoriesdialog.py:240
#, python-format
msgid "There is %d more bill in this category."
msgid_plural "There are %d more bills in this category."
msgstr[0] "Még %d számla van ebben a kategóriában."
msgstr[1] "Még %d számla van ebben a kategóriában."
#: ../src/gui/categoriesdialog.py:250 ../src/gui/maindialog.py:567
#: ../src/gui/categoriesdialog.py:243 ../src/gui/maindialog.py:426
msgid "Confirmation"
msgstr "Jóváhagyás"
#: ../src/gui/maindialog.py:292
msgid "New"
msgstr "Új"
#. for some reason the actions strings do not get translated yet
#. so we define them here so they would be picked up by the pyfile scanner
#: ../src/gui/maindialog.py:132
msgid "Add New"
msgstr "Új felvitele"
#. Dialog Title
#: ../src/gui/maindialog.py:292 ../src/gui/maindialog.py:328
#: ../src/lib/dialogs.py:51
msgid "Add a new bill"
#: ../src/gui/maindialog.py:133
msgid "Add new bill"
msgstr "Új számla felvétele"
#. Dialog Title
#: ../src/gui/maindialog.py:294 ../src/gui/maindialog.py:329
#: ../src/lib/dialogs.py:62
msgid "Edit a bill"
msgstr "Számla szerkesztése"
#: ../src/gui/maindialog.py:296 ../src/gui/maindialog.py:330
msgid "Delete selected bill"
msgstr "Kiválasztott számla törlése"
#: ../src/gui/maindialog.py:138
msgid "Delete"
msgstr "Törlés"
#: ../src/gui/maindialog.py:299 ../src/gui/widgets/viewbill.py:97
#: ../src/gui/maindialog.py:141 ../src/gui/widgets/viewbill.py:93
msgid "Paid"
msgstr "Befizetett"
#: ../src/gui/maindialog.py:302
#: ../src/gui/maindialog.py:144
msgid "Not Paid"
msgstr "Befizetetlen"
#: ../src/gui/maindialog.py:302 ../src/gui/maindialog.py:333
msgid "Mark as not paid"
msgstr "Befizetetlen"
#: ../src/gui/maindialog.py:327
msgid "_File"
msgstr "_Fájl"
#: ../src/gui/maindialog.py:328 ../src/gui/maindialog.py:525
msgid "_Add New"
msgstr "Új _felvitele"
#: ../src/gui/maindialog.py:331
msgid "_Edit"
msgstr "S_zerkesztés"
#: ../src/gui/maindialog.py:332 ../src/gui/maindialog.py:535
msgid "_Paid"
msgstr "Befize_tett"
#: ../src/gui/maindialog.py:333
msgid "_Not Paid"
msgstr "Befizetet_len"
#: ../src/gui/maindialog.py:334
msgid "Edit preferences"
msgstr "Beállítások szerkesztése"
#: ../src/gui/maindialog.py:335
msgid "Quit the Program"
msgstr "Kilépés az alkalmazásból"
#: ../src/gui/maindialog.py:336
msgid "_View"
msgstr "_Nézet"
#: ../src/gui/maindialog.py:337
msgid "_Help"
msgstr "_Súgó"
#: ../src/gui/maindialog.py:338
msgid "About the application"
msgstr "Az alkalmazás névjegye"
#: ../src/gui/maindialog.py:348
msgid "_Show Toolbar"
msgstr "_Eszköztár megjelenítése"
#: ../src/gui/maindialog.py:348
#: ../src/gui/maindialog.py:148
msgid "Show the toolbar"
msgstr "Az eszköztár megjelenítése"
#: ../src/gui/maindialog.py:352
msgid "_Not Paid Only"
msgstr "Csak a befizetet_lenek"
#: ../src/gui/maindialog.py:352
msgid "Display all unpaid bills only"
msgstr "Csak az összes befizetetlen megjelenítése"
#: ../src/gui/maindialog.py:353
msgid "_Paid Only"
msgstr "Csak a befize_tettek"
#: ../src/gui/maindialog.py:353
msgid "Display all paid bills only"
msgstr "Csak az összes befizetett megjelenítése"
#: ../src/gui/maindialog.py:354
msgid "_All Bills"
msgstr "_Minden számla"
#: ../src/gui/maindialog.py:354
msgid "Display all bills"
msgstr "Minden számla megjelenítése"
#: ../src/gui/maindialog.py:538
msgid "Not _Paid"
msgstr "Befizete_tlen"
#: ../src/gui/maindialog.py:239
msgid "%m/%d"
msgstr "%m. %d."
#: ../src/gui/maindialog.py:565
#: ../src/gui/maindialog.py:424
#, python-format
msgid "Do you really want to delete \"%s\"?"
msgstr "Valóban törli a következőt: „%s”?"
......@@ -505,51 +476,51 @@ msgstr "Valóban törli a következőt: „%s”?"
msgid "Preferences"
msgstr "Beállítások"
#: ../src/gui/prefdialog.py:54
#: ../src/gui/prefdialog.py:55
msgid "<b>Alarms</b>"
msgstr "<b>Riasztások</b>"
#: ../src/gui/prefdialog.py:60
#: ../src/gui/prefdialog.py:61
msgid "_Alert before due date:"
msgstr "_Riasztás az esedékesség dátuma előtt:"
#: ../src/gui/prefdialog.py:65 ../src/gui/prefdialog.py:115
#: ../src/gui/prefdialog.py:66 ../src/gui/prefdialog.py:116
msgid "day(s)."
msgstr "nappal."
#: ../src/gui/prefdialog.py:68
#: ../src/gui/prefdialog.py:69
msgid "_Preferred time:"
msgstr "Ebben az i_dőpontban:"
#: ../src/gui/prefdialog.py:71
#: ../src/gui/prefdialog.py:72
msgid "Get alerted when individual bills are due."
msgstr "Riasztást kérek az egyes számlák befizetésének esedékességéről."
#: ../src/gui/prefdialog.py:95
#: ../src/gui/prefdialog.py:96
msgid "<b>Notifications</b>"
msgstr "<b>Értesítések</b>"
#: ../src/gui/prefdialog.py:101
#: ../src/gui/prefdialog.py:102
msgid "Define when to be notified of upcoming bills."
msgstr "Adja meg, hogy mikor kér értesítést az esedékes számlákról."
#: ../src/gui/prefdialog.py:109
#: ../src/gui/prefdialog.py:110
msgid "_Notify before due date:"
msgstr "Ért_esítés az esedékesség dátuma előtt:"
#: ../src/gui/prefdialog.py:130
#: ../src/gui/prefdialog.py:131
msgid "<b>Alert Type</b>"
msgstr "<b>Riasztás típusa</b>"
#: ../src/gui/prefdialog.py:140
#: ../src/gui/prefdialog.py:141
msgid "Notification _Bubble"
msgstr "Értesítő b_uborék"
#: ../src/gui/prefdialog.py:142
#: ../src/gui/prefdialog.py:143
msgid "Alert _Dialog"
msgstr "Riasztás_ablak"
#: ../src/gui/prefdialog.py:154
#: ../src/gui/prefdialog.py:155
msgid ""
"<b>Warning:</b> BillReminder Notifier is \n"
"not running! You need to start it in order \n"
......@@ -559,11 +530,11 @@ msgstr ""
"nem fut! Ha szeretne értesítéseket kapni,\n"
"el kell indítania!"
#: ../src/gui/prefdialog.py:161
#: ../src/gui/prefdialog.py:162
msgid "_Start BillReminder Notifier"
msgstr "A Számlafigyelő-értesítő i_ndítása"
#: ../src/gui/prefdialog.py:233
#: ../src/gui/prefdialog.py:231
msgid "<b>Note:</b> BillReminder Notifier is now running."
msgstr "<b>Megjegyzés:</b> a Számlafigyelő-értesítő működik."
......@@ -616,28 +587,23 @@ msgstr "Névjegy"
msgid "Quit"
msgstr "Kilépés"
#. TRANSLATORS: This is a date format. You can change the order.
#: ../src/gui/widgets/viewbill.py:46
msgid "%m/%d"
msgstr "%m. %d."
#: ../src/gui/widgets/viewbill.py:87 ../src/gui/widgets/viewcategory.py:39
#: ../src/gui/widgets/viewbill.py:83 ../src/gui/widgets/viewcategory.py:39
msgid "Category"
msgstr "Kategória"
#: ../src/gui/widgets/viewbill.py:91
#: ../src/gui/widgets/viewbill.py:87
msgid "Date"
msgstr "Dátum"
#: ../src/gui/widgets/viewbill.py:95
#: ../src/gui/widgets/viewbill.py:91
msgid "Notes"
msgstr "Megjegyzések"
#: ../src/gui/widgets/viewbill.py:99
#: ../src/gui/widgets/viewbill.py:95
msgid "Alarm"
msgstr "Riasztás"
#: ../src/lib/common.py:18
#: ../src/lib/common.py:19
msgid "Developers:"
msgstr "Fejlesztők:"
......@@ -691,4 +657,3 @@ msgstr "Hetente"
#: ../src/lib/scheduler.py:8
msgid "Monthly"
msgstr "Havonta"
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
from optparse import OptionParser
import datetime as dt
current_path = os.path.realpath(__file__)
basedir = os.path.dirname(os.path.realpath(__file__))
......@@ -13,7 +15,6 @@ sys.path.insert(0, basedir)
os.chdir(basedir)
try:
import pygtk
pygtk.require("2.0")
......@@ -38,8 +39,14 @@ from lib import common
from lib import i18n
from gui.maindialog import MainDialog as BillReminder
def main():
# migrate settings to gconf
# TODO - move to fixtures / consider for removal
if os.path.exists(os.path.join(common.USER_CFG_PATH, common.CFG_NAME)):
from lib.migrate_to_gconf import migrate
migrate(os.path.join(common.USER_CFG_PATH, common.CFG_NAME))
def main():
#args = sys.argv
parser = OptionParser()
parser.set_usage(_("Usage: billreminder [OPTIONS...]"))
......@@ -47,10 +54,18 @@ def main():
parser.add_option('--about', action='store_true', dest='app_about', default=False, help=_('About this application.'))
parser.add_option('--add', action='store_true', dest='app_add', default=False, help=_('Adds a new bill to the database.'))
parser.add_option('--standalone', action='store_true', dest='app_standalone', default=False, help=_('Access database directly, without daemon.'))
parser.add_option('--new', action='store_true', dest='new_main', default=False)
# Verify arguments
options, args = parser.parse_args()
if options.app_about:
if options.new_main:
from gui.new import MainWindow
app = MainWindow()
gtk.main()
elif options.app_about:
dialogs.about_dialog()
elif options.app_add:
print dialogs.add_dialog()
......
......@@ -2,6 +2,8 @@
__all__ = ['Server', 'get_interface', 'verify_service']
from datetime import date
import dbus
import dbus.service
......@@ -54,36 +56,35 @@ class Server(dbus.service.Object):
self.parent.client_pid = pid
return self.parent.client_pid
@dbus.service.method(common.DBUS_INTERFACE, in_signature='iii', out_signature='a(sis)')
def get_monthly_totals(self, status, start, end):
# Return a list of categories and totals for the given month
@dbus.service.method(common.DBUS_INTERFACE, in_signature='iii', out_signature='aa{ss}')
def get_interval_bills(self, start, end, paid):
ret = []
records = self.actions.get_monthly_totals(start, end, status)
records = self.actions.get_interval_bills(date.fromordinal(start), date.fromordinal(end), paid)
for record in records:
ret.append(record)
ret.append(force_string(record.__dict__))
return ret
@dbus.service.method(common.DBUS_INTERFACE, in_signature='iii', out_signature='aa{ss}')
def get_monthly_bills(self, status, month, year):
def get_alarm_bills(self, start, end, paid):
ret = []
records = self.actions.get_interval_bills(month, year, status)
records = self.actions.get_alarm_bills(date.fromordinal(start), date.fromordinal(end), paid)
for record in records:
ret.append(force_string(record))
return ret
@dbus.service.method(common.DBUS_INTERFACE, in_signature='iii', out_signature='a(sis)')
def get_interval_totals(self, status, start, end):
def get_monthly_totals(self, start, end, paid):
# Return a list of categories and totals for the given month
ret = []
records = self.actions.get_monthly_totals(start, end, status)
records = self.actions.get_monthly_totals(date.fromordinal(start), date.fromordinal(end), paid)
for record in records:
ret.append(record)
return ret
@dbus.service.method(common.DBUS_INTERFACE, in_signature='iii', out_signature='aa{ss}')
def get_interval_bills(self, status, start, end):
def get_monthly_bills(self, month, year, paid):
ret = []
records = self.actions.get_interval_bills(start, end, status)
records = self.actions.get_interval_bills(month, year, paid)
for record in records:
ret.append(force_string(record))
return ret
......@@ -106,35 +107,13 @@ class Server(dbus.service.Object):
ret.append(force_string(record))
return ret
@dbus.service.method(common.DBUS_INTERFACE, in_signature='a{ss}', out_signature='a{ss}')
def edit_bill(self, kwargs):
""" Edit a record in the database """
ret = self.actions.edit(kwargs)
if ret:
self.bill_edited(ret)
return force_string(ret)
@dbus.service.method(common.DBUS_INTERFACE, in_signature='a{ss}', out_signature='a{ss}')
def add_bill(self, kwargs):
""" Add a record to the database """
ret = self.actions.add(kwargs)
if ret:
self.bill_added(kwargs)
return force_string(ret)
@dbus.service.method(common.DBUS_INTERFACE, in_signature='i', out_signature='b')
def delete_bill(self, key):
""" Delete a record in the database """
ret = self.actions.delete(key)
if ret:
self.bill_deleted(key)
return ret
@dbus.service.method(common.DBUS_INTERFACE, in_signature='a{ss}', out_signature='aa{ss}')
def get_categories(self, kwargs):
""" Returns one or more records that meet the criteria passed """
print 'get_categories'
ret = []
records = self.actions.get_categories(kwargs)
records = self.actions.get_categories(**kwargs)
print records
for record in records:
ret.append(force_string(record))
return ret
......@@ -149,21 +128,27 @@ class Server(dbus.service.Object):
return ret
@dbus.service.method(common.DBUS_INTERFACE, in_signature='a{ss}', out_signature='a{ss}')
def edit_category(self, kwargs):
def edit(self, kwargs):
""" Edit a record in the database """
ret = self.actions.edit(kwargs)
if ret:
self.bill_edited(ret)
return force_string(ret)
@dbus.service.method(common.DBUS_INTERFACE, in_signature='a{ss}', out_signature='a{ss}')
def add_category(self, kwargs):
def add(self, kwargs):
""" Add a record to the database """
ret = self.actions.add(kwargs)
if ret:
self.bill_added(kwargs)
return force_string(ret)
@dbus.service.method(common.DBUS_INTERFACE, in_signature='i', out_signature='b')
def delete_category(self, key):
@dbus.service.method(common.DBUS_INTERFACE, in_signature='a{ss}', out_signature='b')
def delete(self, kwargs):
""" Delete a record in the database """
ret = self.actions.delete(key)
ret = self.actions.delete(kwargs)
if ret:
self.bill_deleted(kwargs)
return ret
@dbus.service.method(common.DBUS_INTERFACE, in_signature='a{ss}')
......
from lib import i18n
from sqlalchemy import Column, Integer, String, Numeric, Text, Date, DateTime, Boolean, ForeignKey
from sqlalchemy.orm import relation, backref
from sqlalchemy.ext.declarative import declarative_base
......@@ -11,7 +13,7 @@ class Category(Base):
name = Column(String(length=255, convert_unicode=True))
color = Column(String(length=6, convert_unicode=True))
def __init__(self, name, color=None):
def __init__(self, name=_("None"), color="#d3d7cf"):
self.name = name
if color:
self.color = color
......
# -*- coding: utf-8 -*-
__all__ = ['AddDialog']
import os
import pygtk
pygtk.require('2.0')
import gtk
import datetime
import locale
......@@ -13,14 +8,14 @@ import gobject
from lib import utils
from lib import common
from lib import scheduler
from db.entities import Bill, Category
from lib.actions import Actions
from lib.utils import create_pixbuf
from db.entities import Bill
from lib import i18n
from gui.widgets.datebutton import DateButton
from gui.widgets.datepicker import DatePicker
from gui import widgets
from gui.categoriesdialog import CategoriesDialog
#from lib.config import Configuration
from lib.Settings import Settings as Configuration
class AddDialog(object):
......@@ -28,10 +23,10 @@ class AddDialog(object):
Class used to generate dialog to allow user to enter/edit records.
"""
def __init__(self, title=None, parent=None, record=None, selectedDate=None):
self.ui = gtk.Builder()
self.ui.add_from_file(os.path.join(common.DEFAULT_CFG_PATH, "add_bill.ui"))
self.ui = utils.load_ui_file("add_bill.ui")
self.window = self.ui.get_object("add_bill_dialog")
self.actions = Actions()
self.window.set_icon_from_file(common.APP_ICON)
......@@ -72,11 +67,11 @@ class AddDialog(object):
def _initialize_dialog_widgets(self):
self.frequency = self.ui.get_object("frequency")
self.dueDate = DatePicker()
self.dueDate = widgets.DatePicker()
self.ui.get_object("due_date_box").add(self.dueDate)
self.dueDate.connect('date_changed', self._on_datepicker_date_changed)
self.endDate = DatePicker()
self.endDate = widgets.DatePicker()
self.ui.get_object("end_date_box").add(self.endDate)
self.payee = self.ui.get_object("payee")
......@@ -99,7 +94,7 @@ class AddDialog(object):
self.notes = self.ui.get_object("notes")
self.txtbuffer = self.notes.get_buffer()
self.alarmbutton = DateButton(self.window)
self.alarmbutton = widgets.DateButton(self.window)
self.alarmbutton.set_tooltip_text(_("Select Date and Time"))
self.ui.get_object("alarm_button_box").add(self.alarmbutton)
self.ui.get_object("alarm_label").set_mnemonic_widget(self.alarmbutton)
......@@ -147,9 +142,8 @@ class AddDialog(object):
utils.select_combo_text(self.payee, self.currentrecord.payee)
if self.currentrecord.category:
actions = Actions()
cat_name = self.currentrecord.category.name
records = actions.get_categories(name=cat_name)
records = self.actions.get_categories(name=cat_name)
if records:
categoryname = records[0].name
utils.select_combo_text(self.category, categoryname, 1)
......@@ -166,11 +160,9 @@ class AddDialog(object):
def _populate_payee(self):
""" Populates combobox with existing payees """
# Connects to the database
actions = Actions()
# List of payees from database
payees = []
records = actions.get_bills()
records = self.actions.get_bills()
for rec in records:
if rec.payee not in payees:
payees.append(rec.payee)
......@@ -217,20 +209,18 @@ class AddDialog(object):
def _populate_category(self, categoryname=None):
""" Populates combobox with existing categories """
# Connects to the database
actions = Actions()
# List of categories from database
categories = []
records = actions.get_categories()
records = self.actions.get_categories()
ret = 0
empty_color = create_pixbuf()
empty_color = utils.create_pixbuf()
for rec in records:
#if [rec['categoryname'], rec['id']] not in categories:
#TODO: Better put color creation in a function
color = rec.color and rec.color or '#000'
categories.append([create_pixbuf(color=color), rec.name, int(rec.id)])
categories.append([utils.create_pixbuf(color=color), rec.name, int(rec.id)])
if categoryname and categoryname == rec.name:
ret = len(categories) + 1
......@@ -250,9 +240,6 @@ class AddDialog(object):
def _get_category(self):
""" Extracts information typed into comboboxentry """
actions = Actions()
if self.category.get_active_iter() is not None:
model = self.category.get_model()
iteration = self.category.get_active_iter()
......@@ -264,7 +251,7 @@ class AddDialog(object):
if not name or name == _("None"):
return None
records = actions.get_categories(name=name)
records = self.actions.get_categories(name=name)
if records:
return records[0]
else:
......
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__all__ = ['MainDialog']
import os
import pygtk
pygtk.require('2.0')
import gtk
import time
import datetime
import datetime as dt
from gobject import timeout_add
# Import widgets modules
from gui.widgets.statusbar import Statusbar
from gui.widgets.viewbill import ViewBill as ViewBill
from gui.widgets.trayicon import NotifyIcon
from gui.widgets.chartwidget import ChartWidget
from gui.widgets.timeline import Timeline, Bullet
# Import data model modules
from lib.bill import Bill
from lib.actions import Actions
from gui import widgets
from lib.actions import Actions # data model
# Import common utilities
from lib import common
from lib import dialogs
from lib import scheduler
#from lib.config import Configuration
from lib.Settings import Settings as Configuration
from lib.utils import Message
from lib.utils import get_dbus_interface
from lib.utils import force_string
from lib.utils import create_pixbuf
from lib import utils
from lib import i18n
from lib.common import GCONF_PATH, GCONF_GUI_PATH, GCONF_ALARM_PATH
from lib.common import CFG_NAME
from lib.common import USER_CFG_PATH, DEFAULT_CFG_PATH
from os.path import exists, join
class MainDialog:
search_text = ""
_bullet_cache = {}
def __init__(self):
if exists(join(USER_CFG_PATH, CFG_NAME)):
from lib.migrate_to_gconf import migrate
migrate(join(USER_CFG_PATH, CFG_NAME))
self.gconf_client = Configuration()
self.message = Message()
self.message = utils.Message()
# Connects to the database
self.actions = Actions()
self.ui = gtk.Builder()
self.ui.add_from_file(os.path.join(DEFAULT_CFG_PATH, "main.ui"))
self.ui = utils.load_ui_file("main.ui")
self.window = self.ui.get_object("main_window")
self.window.set_title("%s" % common.APPNAME)
self.window.set_icon_from_file(common.APP_ICON)
# ViewBill
self.list = ViewBill()
self.list = widgets.ViewBill()
self.list.connect('cursor_changed', self._on_list_cursor_changed)
self.list.connect('row_activated', self._on_list_row_activated)
self.list.connect('button_press_event', self._on_list_button_press_event)
......@@ -76,16 +47,16 @@ class MainDialog:
self._populate_menubar()
# Statusbar
self.statusbar = Statusbar()
self.statusbar = widgets.Statusbar()
self.ui.get_object("statusbar_box").add(self.statusbar)
# Timeline
self.timeline = Timeline(callback=self.on_timeline_cb)
self.timeline = widgets.Timeline(callback=self.on_timeline_cb)
self.timeline.connect("value-changed", self._on_timeline_changed)
self.ui.get_object("timeline_box").add(self.timeline)
# Chart
self.chart = ChartWidget()
self.chart = widgets.ChartWidget()
self.ui.get_object("chart_box").add(self.chart)
# Restore position and size of window
......@@ -111,11 +82,11 @@ class MainDialog:
# populate treeview
self.reloadTreeView()
self.notify = NotifyIcon(self)
self.notify = widgets.NotifyIcon(self)
# Connects to the Daemon
self.iface = None
iface = get_dbus_interface(common.DBUS_INTERFACE, common.DBUS_PATH)
iface = utils.get_dbus_interface(common.DBUS_INTERFACE, common.DBUS_PATH)
if iface:
iface.connect_to_signal("bill_edited", self.reloadTreeView)
iface.connect_to_signal("bill_edited", self.reloadTimeline)
......@@ -149,17 +120,9 @@ class MainDialog:
# Methods: UI
def _send_tray_hints(self):
self.iface.set_tray_hints(force_string(self.notify.get_hints()))
self.iface.set_tray_hints(utils.force_string(self.notify.get_hints()))
timeout_add(60000, self._send_tray_hints)
def get_window_visibility(self):
return self.window.get_property("visible")
def show_hide_window(self):
if self.window.get_property("visible"):
self.window.hide()
else:
self.window.show()
def get_selected_record(self):
""" Returns a bill object from the current selected record """
......@@ -233,7 +196,7 @@ class MainDialog:
categoryColor = row.category.color if row.category else '#d3d7cf'
formatted = [
row.id,
create_pixbuf(color=categoryColor),
utils.create_pixbuf(color=categoryColor),
categoryName,
row.payee,
row.dueDate.strftime(_('%m/%d').encode('ASCII')),
......@@ -282,42 +245,6 @@ class MainDialog:
self.ui.get_object("showToolbar").set_active(self.gconf_client.get('show_toolbar'))
def add_bill(self):
selectedDate = self.timeline.value
records = dialogs.add_dialog(parent=self.window, selectedDate=selectedDate)
# Checks if the user did not cancel the action
if records:
# Add new bill to database
for rec in records:
bill = self.actions.add(rec)
if bill:
self.list.add(self.format_row(bill))
self.update_statusbar()
# Reload records tree (something changed)
self.reloadTreeView()
self.reloadTimeline()
def edit_bill(self):
records = dialogs.edit_dialog(parent=self.window, record=self.currentrecord)
# Checks if the user did not cancel the action
if records:
for rec in records:
# Edit bill to database
rec = self.actions.edit(rec)
# Reload records tree (something changed)
self.reloadTreeView()
self.reloadTimeline()
def remove_bill(self):
self.actions.delete(self.currentrecord)
self.list.remove()
self.update_statusbar()
self.reloadTreeView()
self.reloadTimeline()
def toggle_bill_paid(self):
# Fetch record from database
record = self.actions.get_bills(id=self.currentrecord.id)[0]
......@@ -337,12 +264,6 @@ class MainDialog:
self.reloadTreeView()
self.reloadTimeline()
def about(self):
dialogs.about_dialog(parent=self.window)
def preferences(self):
dialogs.preferences_dialog(parent=self.window)
# Methods
def _quit_application(self):
self.save_position()
......@@ -412,20 +333,55 @@ class MainDialog:
self.update_statusbar()
def on_newBill_activate(self, toolbutton):
self.add_bill()
selectedDate = self.timeline.value
records = dialogs.add_dialog(parent=self.window, selectedDate=selectedDate)
# Checks if the user did not cancel the action
if records:
# Add new bill to database
for rec in records:
bill = self.actions.add(rec)
if bill:
self.list.add(self.format_row(bill))
self.update_statusbar()
# Reload records tree (something changed)
self.reloadTreeView()
self.reloadTimeline()
def on_editBill_activate(self, toolbutton):
if self.currentrecord:
self.edit_bill()
if not self.currentrecord:
return
records = dialogs.edit_dialog(parent=self.window, record=self.currentrecord)
# Checks if the user did not cancel the action
if records:
for rec in records:
# Edit bill to database
rec = self.actions.edit(rec)
# Reload records tree (something changed)
self.reloadTreeView()
self.reloadTimeline()
def on_removeBill_activate(self, toolbutton):
if self.currentrecord:
resp = self.message.ShowQuestionYesNo(
_("Do you really want to delete \"%s\"?") % \
self.currentrecord.payee,
self.window, _("Confirmation"))
if resp:
self.remove_bill()
if not self.currentrecord:
return
resp = self.message.ShowQuestionYesNo(
_("Do you really want to delete \"%s\"?") % \
self.currentrecord.payee,
self.window, _("Confirmation"))
if not resp:
return
self.actions.delete(self.currentrecord)
self.list.remove()
self.update_statusbar()
self.reloadTreeView()
self.reloadTimeline()
def on_markNotPaid_activate(self, toolbutton):
self.on_markPaid_activate(toolbutton) # forward
......@@ -435,10 +391,10 @@ class MainDialog:
self.toggle_bill_paid()
def on_btnAbout_activate(self, toolbutton):
self.about()
dialogs.about_dialog(parent=self.window)
def on_btnPrefs_activate(self, toolbutton):
self.preferences()
dialogs.preferences_dialog(parent=self.window)
def on_btnQuit_activate(self, toolbutton):
self._quit_application()
......@@ -491,7 +447,7 @@ class MainDialog:
status = self.gconf_client.get('show_paid_bills')
amount = 0
tooltip = ''
bullet = Bullet()
bullet = widgets.Bullet()
bullet.date = date
for bill in self._bullet_cache[date]:
......@@ -505,7 +461,7 @@ class MainDialog:
if bill.paid:
if status == 0: return False
bullet.status = bullet.status | bullet.PAID
elif date <= datetime.date.today():