def __init__(self, parent): super(ContactTab, self).__init__(parent=parent) layout = QVBoxLayout(self) q = Transaction.query(keys_only=False, include_subclasses=True, raw=True) q.add_aggregate("amt", name="total", groupby=Contact, func="SUM") q.add_join(Contact, "contact", jointype="RIGHT") self.table = grumpy.view.TableView(q, [ bucks.app.base.DebitCreditColumn( attr='total', sign=bucks.app.base.DebitCreditColumn.Debit), bucks.app.DebitCreditColumn( attr='total', sign=bucks.app.base.DebitCreditColumn.Credit), grumpy.model.TableColumn(attr='contact."contact_name"', header='Name') ], key_attr='contact."_key"') self.table.setMinimumSize(400, 300) layout.addWidget(self.table) self.form = ContactForm(self) layout.addWidget(self.form) self.setLayout(layout) self.table.objectSelected.connect(self.form.set_instance) self.form.refresh.connect(self.table.refresh) QCoreApplication.instance().importer.imported.connect( self.table.refresh)
def __init__(self, tab): super(ContactForm, self).__init__(tab, Contact) self.addProperty(Contact, "^", 0, 1, refclass=Contact, query=self.query, label="Alias for", required=False) self.addProperty(Contact, "contact_name", 2, 1) q = Transaction.query(keys_only=False, include_subclasses=True, raw=True) q.add_parent_join(Account) q.add_filter("contact", "XX") self.tx_list = grumpy.view.TableView(q, [ grumpy.model.TableColumn(attr='date', header='Date'), grumpy.model.TableColumn(attr='+p."acc_name"', header='Account'), bucks.app.base.DebitCreditColumn( attr='amt', sign=bucks.app.base.DebitCreditColumn.Debit), bucks.app.base.DebitCreditColumn( attr='amt', sign=bucks.app.base.DebitCreditColumn.Credit), grumpy.model.TableColumn(attr='description', header='Description') ], key_attr='_key') self.addTab(self.tx_list, "Transactions")
def getvalue(self, instance): if not instance.is_new(): from bucks.datamodel.account import Transaction q = Transaction.query() q.add_filter(self.entity_prop, "->", instance) q.add_aggregate("amt") return q.singleton()
def get_categories(cls): from bucks.datamodel.account import Transaction q = Transaction.query(keys_only=False, include_subclasses=True, alias="category") q.add_synthetic_column("debit", "(CASE WHEN amt < 0 THEN -amt ELSE 0 END)") q.add_synthetic_column("credit", "(CASE WHEN amt > 0 THEN amt ELSE 0 END)") q.add_aggregate("k.debit", name="total_debit", groupby=Category, func="SUM", default=0.0) q.add_aggregate("k.credit", name="total_credit", groupby=Category, func="SUM", default=0.0) q.add_aggregate("k.amt", name="total", groupby=Category, func="SUM", default=0.0) q.add_join(Category, "category", jointype="RIGHT") q.add_sort("category.cat_name") return q
def transactions(self): from bucks.datamodel.account import Account from bucks.datamodel.account import Transaction from bucks.datamodel.project import Project from bucks.datamodel.contact import Contact q = Transaction.query(keys_only=False) q.add_parent_join(Account) q.add_filter("category", "->", self) q.add_synthetic_column("debit", "(CASE WHEN amt < 0 THEN -amt ELSE 0 END)") q.add_synthetic_column("credit", "(CASE WHEN amt > 0 THEN amt ELSE 0 END)") q.add_join(Project, "project", jointype="LEFT", alias="prj") q.add_join(Contact, "contact", jointype="LEFT", alias="ctc") q.add_sort("date") return q
def __init__(self, parent): super(ProjectTab, self).__init__(parent=parent) layout = QVBoxLayout(self) q = Transaction.query(keys_only=False, include_subclasses=True, alias="project") q.add_synthetic_column("debit", "(CASE WHEN amt < 0 THEN -amt ELSE 0 END)") q.add_synthetic_column("credit", "(CASE WHEN amt > 0 THEN amt ELSE 0 END)") q.add_aggregate("k.debit", name="total_debit", groupby=Project, func="SUM") q.add_aggregate("k.credit", name="total_credit", groupby=Project, func="SUM") q.add_aggregate("k.amt", name="total", groupby=Project, func="SUM") q.add_join(Project, "project", jointype="RIGHT") self.tree = grumpy.view.TreeView( self, kind=Project, query=q, root=None, columns=[ grumpy.model.TableColumn("total_debit", header="Debit"), grumpy.model.TableColumn("total_credit", header="Credit"), grumpy.model.TableColumn("total", header="Total"), ]) self.tree.setMinimumSize(400, 300) layout.addWidget(self.tree) self.form = ProjectForm(self) layout.addWidget(self.form) self.setLayout(layout) self.tree.objectSelected.connect(self.form.set_instance) self.form.refresh.connect(self.tree.refresh) QCoreApplication.instance().importer.imported.connect( self.tree.refresh)