"""Payment Processor.""" from typing import List from src.constants import BATCH_SIZE from src.models import Event, PaymentGroup from src.processors.base.payment_batch_processor import PaymentBatchProcessor from src.processors.models import EligibleAccountLevelData class Processor: """Processor to calculate worksheets for all eligible accounts in a payment.""" def __init__(self, payment_group: PaymentGroup, abacus_event: Event) -> None: """Init.""" self._payment_group: PaymentGroup = payment_group # payment group will be useful for retrieving payment entity info self._abacus_event: Event = abacus_event self._statement_period_id: int = abacus_event.statement_period_id self._total_count: int = 0 self._limit: int = BATCH_SIZE def _set_total_count(self) -> None: """TODO fill in logic to paginate and fetch total counts of eligible account data.""" pass def _get_eligible_account_batch_data( self, offset: int = 0 ) -> List[EligibleAccountLevelData]: """Will contain logic for fetching eligible accounts.""" return [] def _process_batch(self, offset: int = 0) -> None: """Fetch the given batch of accounts and create worksheets for them.""" eligible_accounts = self._get_eligible_account_batch_data(offset) PaymentBatchProcessor(self._abacus_event, eligible_accounts).process() def process(self) -> None: """Process all worksheets for eligible accounts in payment group.""" self._set_total_count() for offset in range(0, self._total_count, self._limit): self._process_batch(offset)