示例#1
0
    def create_sort_data(self):
        account = 'Assets:Bank:Checking'
        date1 = date(2014, 1, 15)
        date2 = date(2014, 1, 18)
        date3 = date(2014, 1, 20)
        entries = [
            data.Transaction(data.new_metadata(".", 1100), date3, FLAG, None,
                             "Next day", None, None, []),
            data.Close(data.new_metadata(".", 1000), date2, account),
            data.Balance(data.new_metadata(".", 1001), date2, account,
                         A('200.00 USD"'), None, None),
            data.Open(data.new_metadata(".", 1002), date2, account, 'USD',
                      None),
            data.Transaction(data.new_metadata(".", 1009), date2, FLAG, None,
                             "Transaction 2", None, None, []),
            data.Transaction(data.new_metadata(".", 1008), date2, FLAG, None,
                             "Transaction 1", None, None, []),
            data.Transaction(data.new_metadata(".", 900), date1, FLAG, None,
                             "Previous day", None, None, []),
        ]

        for entry in entries:
            if isinstance(entry, data.Transaction):
                data.create_simple_posting(entry, 'Assets:Bank:Checking',
                                           '123.45', 'USD')

        return entries
示例#2
0
def Close(account, date):
    meta = meta_from(account, 'code')
    name = account_name(account)
    dates = list(map(lambda split: split.transaction.post_date,
                     account.splits))
    if len(dates) > 0:
        date = max(dates)

    # Ensure that we close *after* the open.
    date += datetime.timedelta(days=1)

    return data.Close(meta, date, name)
示例#3
0
 def get_member(self, id, name, date, balance):
     #name = member_account(name)
     name = self.accounts_by_id[id]
     if id in self.accounts_by_id and self.accounts_by_id[id] != name:
         # Generate rename
         txn = bcdata.Transaction(meta={},
                                  date=date,
                                  flag="txn",
                                  payee="",
                                  narration="Rename %(from)s to %(to)s" % {
                                      "from": self.accounts_by_id[id],
                                      "to": name,
                                  },
                                  tags=set("rename"),
                                  links=set(),
                                  postings=[])
         bcdata.create_simple_posting(txn, self.accounts_by_id[id], balance,
                                      "EUR")
         bcdata.create_simple_posting(txn, name, -balance, "EUR")
         self.entries.append(txn)
         if self.accounts_by_id[id] not in DONT_CLOSE:
             self.entries.append(
                 bcdata.Close(
                     meta={},
                     date=date + datetime.timedelta(days=1),
                     account=self.accounts_by_id[id],
                 ))
         # Disable the balance assertion for the next day
         self.last_assertion[name] = date
         self.initial_balances[name] = None
         self.accounts_by_id[id] = name
     elif name not in self.initial_balances:
         self.initial_balances[name] = balance
         self.last_assertion[name] = date
         self.accounts_by_id[id] = name
     elif self.last_assertion.get(
             name, None) != date and name != "Assets:Cash:Bar":
         self.entries.append(
             bcdata.Balance({"iline": str(self.line)}, date, name,
                            bcdata.Amount(-balance, "EUR"), None, None))
         self.last_assertion[name] = date
     return name
示例#4
0
def unwrap_entry(data: dict) -> bean.Directive:
    type, e = itemgetter("type", "entry")(data)
    meta = e.get("meta")
    date = parse_date(e["date"])
    if type == "Open":
        return bean.Open(
            meta,
            date,
            account=e["account"],
            currencies=e.get("currencies", []),
            booking=e.get("booking"),
        )
    if type == "Close":
        return bean.Close(meta, date, account=e["account"])
    if type == "Commodity":
        return bean.Commodity(meta, date, currency=e["currency"])
    if type == "Pad":
        return bean.Pad(meta,
                        date,
                        account=e["account"],
                        source_account=e["source_account"])
    if type == "Balance":
        return bean.Balance(
            meta,
            date,
            account=e["account"],
            amount=parse_amount(e["amount"]),
            tolerance=e.get("tolerance"),
            diff_amount=e.get("diff_amount"),
        )
    if type == "Transaction":
        return bean.Transaction(
            meta,
            date,
            flag=e["flag"],
            payee=e.get("payee"),
            narration=e["narration"],
            tags=set(e["tags"] if "tags" in e else []),
            links=set(e["links"] if "links" in e else []),
            postings=[parse_posting(p) for p in e.get("postings", [])],
        )
    if type == "Note":
        return bean.Note(meta,
                         date,
                         account=e["account"],
                         comment=e.get("comment", ""))
    if type == "Event":
        return bean.Event(meta,
                          date,
                          type=e["type"],
                          description=e["description"])
    if type == "Query":
        return bean.Query(meta,
                          date,
                          name=e["name"],
                          query_string=e["query_string"])
    if type == "Price":
        return bean.Price(meta,
                          date,
                          currency=e["currency"],
                          amount=parse_amount(e["amount"]))
    if type == "Document":
        return bean.Document(
            meta,
            date,
            account=e["account"],
            filename=e["filename"],
            tags=set(e["tags"] if "tags" in e else []),
            links=set(e["links"] if "links" in e else []),
        )
    if type == "Custom":
        return bean.Custom(meta, date, type=e["type"], values=e["values"])