def delete_entries(self, entries): """Remove transactions in which ``entries`` belong from the document's transaction list. :param entries: list of :class:`.Entry` """ from_account = first(entries).account transactions = dedupe(e.transaction for e in entries) self.delete_transactions(transactions, from_account=from_account)
def _swap_fields(self, panes, switch_func): seen = set() for pane in panes: entries = self.loader.accounts.entries_for_account(pane.account) txns = dedupe(e.transaction for e in entries) for txn in txns: if txn.affected_accounts() & seen: # We've already swapped this txn in a previous pane. continue switch_func(txn) seen.add(pane.account) self.import_table.refresh()
def _invert_amounts(self, apply_to_all): if apply_to_all: panes = self.panes else: panes = [self.selected_pane] for pane in panes: entries = self.loader.accounts.entries_for_account(pane.account) txns = dedupe(e.transaction for e in entries) for txn in txns: for split in txn.splits: split.amount = -split.amount self.import_table.refresh()
def guess_date_format(str_dates, formats_to_try): if not str_dates: return None for format in dedupe(formats_to_try): for str_date in str_dates: try: datetime.datetime.strptime(str_date, format) except ValueError: break else: return format return None
def show_transfer_account(self, row_index=None): if row_index is None: if not self.selected_entries: return row_index = self.selected_index entry = self[row_index].entry splits = entry.transaction.splits accounts = dedupe(split.account for split in splits if split.account is not None) if len(accounts) < 2: return # no transfer index = accounts.index(entry.account) if index < len(accounts) - 1: account_to_show = accounts[index+1] else: account_to_show = accounts[0] self.mainwindow.open_account(account_to_show)
def guess_date_format(str_dates, formats_to_try): for format in dedupe(formats_to_try): found_at_least_one = False for str_date in str_dates: try: datetime.datetime.strptime(str_date, format) found_at_least_one = True except ValueError: logging.debug( "Failed try to read the date %s with the format %s", str_date, format) break else: if found_at_least_one: logging.debug("Correct date format: %s", format) return format return None
def _revalidate(self): if self.mainwindow is None or not self.attrname: return doc = self.mainwindow.document attrname = self.attrname if attrname == 'description': self._candidates = doc.transactions.descriptions elif attrname == 'payee': self._candidates = doc.transactions.payees elif attrname in {'from', 'to', 'account', 'transfer'}: result = doc.transactions.account_names # `result` doesn't contain empty accounts' name, so we'll add them. result += [a.name for a in doc.accounts if not a.inactive] if attrname == 'transfer' and self.account is not None: result = [name for name in result if name != self.account.name] self._candidates = result self._candidates = dedupe([name for name in self._candidates if name.strip()])
def __init__(self, partial, candidates): """Build a completion list. 'partial' is the partial value to be completed 'candidates' is the list of candidate values to be tried, the most likely candidate first.""" if not partial: self._completions = None return partial = sort_string(partial) candidates = dedupe(c.strip() for c in candidates) self._completions = [] for candidate in candidates: normalized = sort_string(candidate) if normalized.startswith(partial): self._completions.append(candidate) self._completions.reverse() if self._completions: self._index = len(self._completions) - 1
def _revalidate(self): if self.mainwindow is None or not self.attrname: return doc = self.mainwindow.document attrname = self.attrname if attrname == 'description': self._candidates = doc.transactions.descriptions elif attrname == 'payee': self._candidates = doc.transactions.payees elif attrname in {'from', 'to', 'account', 'transfer'}: result = doc.transactions.account_names # `result` doesn't contain empty accounts' name, so we'll add them. result += [a.name for a in doc.accounts if not a.inactive] if attrname == 'transfer' and self.account is not None: result = [name for name in result if name != self.account.name] self._candidates = result self._candidates = dedupe( [name for name in self._candidates if name.strip()])
def _insertItem(self, item): self._items = dedupe([item] + self._items)[:self._maxItemCount]