Verified Commit 79398ac6 authored by Jakob Moser's avatar Jakob Moser
Browse files

Add PaymentOrderCollection to aggregate

parent de1879d9
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
from dataclasses import dataclass
from pathlib import Path
from collections.abc import Iterable, Iterator

from ..utils import group_by

from .PaymentOrder import PaymentOrder
from .PaymentOrderLoader import load_pdf


@dataclass(frozen=True, eq=False)
class PaymentOrderCollection(Iterable[PaymentOrder]):

    base_dir: Path

    def __iter__(self) -> Iterator[PaymentOrder]:
        return (load_pdf(pdf) for pdf in self.base_dir.rglob("*.pdf"))

    @property
    def by_budgetary_item_id(self):
        return group_by(self, lambda payment_order: payment_order.budgetary_item_id)

muffin/utils.py

0 → 100644
+5 −0
Original line number Diff line number Diff line
import itertools


def group_by(iterable, key):
    return itertools.groupby(sorted(iterable, key=key), key)