diff --git a/superfaktura/bank_account.py b/superfaktura/bank_account.py new file mode 100644 index 0000000..32ba57c --- /dev/null +++ b/superfaktura/bank_account.py @@ -0,0 +1,61 @@ +from dataclasses import dataclass, asdict +from typing import Optional + +from superfaktura.superfaktura_api import SuperFakturaAPI + + +class NoDefaultBankAccountException(Exception): + pass + + +@dataclass +class BankAccountModel: + account: Optional[str] + bank_code: Optional[str] + bank_name: Optional[str] + default: Optional[int] + iban: Optional[str] + show: Optional[int] + swift: Optional[str] + id: Optional[int] + + def as_dict(self) -> dict: + data = asdict(self) + for key in list(data.keys()): + if data[key] is None: + del data[key] + return data + + @staticmethod + def from_dict(data: dict) -> "BankAccountModel": + return BankAccountModel( + **{ + k: v + for k, v in data.items() + if k in BankAccountModel.__dataclass_fields__ + } + ) + + +class BankAccount(SuperFakturaAPI): + def __init__(self): + super().__init__() + + def list(self) -> dict: + url = "bank_accounts/index" + return self.get(url) + + def default(self) -> Optional[BankAccountModel]: + accounts = self.list()["BankAccounts"] + for account in accounts: + if account["BankAccount"]["default"]: + return BankAccountModel.from_dict(account["BankAccount"]) + raise NoDefaultBankAccountException("No default bank account found") + + +if __name__ == "__main__": + bank = BankAccount() + from pprint import pprint + + pprint(bank.list()) + pprint(bank.default())