Exemplo n.º 1
0
 def print_tx(tx: Transaction):
     print(
         "{0:%Y-%m-%d}|{1:20s}|{2:50s}|{3:>10s}|{4:>10s}|{5:20s}|{6:30s}|"
         .format(
             tx.date,
             tx.joined_value("p.acc_name"),
             tx.description,
             amt(tx.debit),
             amt(tx.credit),
             tx.joined_value("project.proj_name"),
             tx.joined_value("contact.contact_name"),
         ))
Exemplo n.º 2
0
 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)
Exemplo n.º 3
0
 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")
Exemplo n.º 4
0
 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()
Exemplo n.º 5
0
    def list_transactions(self, dummy=None):
        def print_tx(tx: Transaction):
            print(
                "{0:%Y-%m-%d}|{1:50s}|{2:>10s}|{3:>10s}|{4:20s}|{5:20s}|{6:30s}|"
                .format(
                    tx.date,
                    tx.description,
                    amt(tx.debit),
                    amt(tx.credit),
                    tx.category.cat_name if tx.category else '',
                    tx.project.proj_name if tx.project else '',
                    tx.contact.contact_name if tx.contact else '',
                ))

        if self.account():
            account: Account = self.account()
            with gripe.db.Tx.begin():
                txs = account.transactions()
                if txs:
                    table_header(("Date", 10), ("Description", 50),
                                 ("Debit", 10), ("Credit", 10),
                                 ("Category", 20), ("Project", 20),
                                 ("Contact", 30))
                    total = Transaction(parent=None,
                                        date=datetime.date.today(),
                                        description='Total',
                                        debit=0.0,
                                        credit=0.0)
                    for tx in txs:
                        print_tx(tx)
                        total.debit += tx.debit
                        total.credit += tx.credit
                    print_tx(total)
        return dummy
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
 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
Exemplo n.º 8
0
 def persist(self):
     attrs = {
         "date": self.date,
         "amt": self.amount,
         "currency": self.currency,
         "foreign_amt": self.foreign_amount,
         "description": self.description,
         "contact": self.find_or_create(Contact, "contact_name",
                                        self.contact),
         "category": self.find_or_create(Category, "cat_name",
                                         self.category),
         "project": self.find_or_create(Project, "proj_name", self.project)
     }
     if self.type == "T":
         attrs["counter"] = self.find_or_create(Account, "acc_name",
                                                self.counter)
     tx = Transaction.for_type(self.account, self.type, **attrs)
     if tx:
         tx.put()
Exemplo n.º 9
0
    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)
Exemplo n.º 10
0
    def transactions(self, dummy=None):
        def print_tx(tx: Transaction):
            print(
                "{0:%Y-%m-%d}|{1:20s}|{2:50s}|{3:>10s}|{4:>10s}|{5:20s}|{6:30s}|"
                .format(
                    tx.date,
                    tx.joined_value("p.acc_name"),
                    tx.description,
                    amt(tx.debit),
                    amt(tx.credit),
                    tx.joined_value("project.proj_name"),
                    tx.joined_value("contact.contact_name"),
                ))

        if self.category():
            category: Category = self.category()
            with gripe.db.Tx.begin():
                txs = category.transactions()
                if txs:
                    print(
                        "{0:^10s}|{1:^20s}|{2:^50s}|{3:^10s}|{4:^10s}|{5:^20s}|{6:^30s}|"
                        .format("Date", "Account", "Description", "Debit",
                                "Credit", "Project", "Contact"))
                    print(
                        "{0:-<10s}+{0:-<20s}+{0:-<50s}+{0:-<10s}+{0:-<10s}+{0:-<20s}+{0:-<30s}+"
                        .format(''))
                    total = Transaction(parent=None,
                                        date=datetime.date.today(),
                                        description='Total',
                                        debit=0.0,
                                        credit=0.0)
                    for tx in txs:
                        print_tx(tx)
                        total.debit += tx.debit
                        total.credit += tx.credit
                    print_tx(total)
        return dummy
Exemplo n.º 11
0
 def init_tx(self):
     ret = Transaction()
     sign = -1.0 if self.type.currentIndex() == 0 else 1.0
     ret.amt = sign * float(self.amount.text())
     return ret