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
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)
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
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"])