. */ declare(strict_types=1); namespace FireflyIII\Repositories\Recurring; use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; use FireflyIII\Models\Recurrence; use FireflyIII\Models\RecurrenceRepetition; use FireflyIII\Models\RecurrenceTransaction; use FireflyIII\User; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; /** * Interface RecurringRepositoryInterface * */ interface RecurringRepositoryInterface { /** * Destroy a recurring transaction. * * @param Recurrence $recurrence */ public function destroy(Recurrence $recurrence): void; /** * Destroy all recurring transactions. */ public function destroyAll(): void; /** * Returns all of the user's recurring transactions. * * @return Collection */ public function get(): Collection; /** * Get ALL recurring transactions. * * @return Collection */ public function getAll(): Collection; /** * Get the category from a recurring transaction transaction. * * @param RecurrenceTransaction $recTransaction * * @return null|int */ public function getBillId(RecurrenceTransaction $recTransaction): ?int; /** * Get the budget ID from a recurring transaction transaction. * * @param RecurrenceTransaction $recTransaction * * @return null|int */ public function getBudget(RecurrenceTransaction $recTransaction): ?int; /** * Get the category from a recurring transaction transaction. * * @param RecurrenceTransaction $recTransaction * * @return null|int */ public function getCategoryId(RecurrenceTransaction $recTransaction): ?int; /** * Get the category from a recurring transaction transaction. * * @param RecurrenceTransaction $recTransaction * * @return null|string */ public function getCategoryName(RecurrenceTransaction $recTransaction): ?string; /** * Returns the count of journals created for this recurrence, possibly limited by time. * * @param Recurrence $recurrence * @param Carbon|null $start * @param Carbon|null $end * * @return int */ public function getJournalCount(Recurrence $recurrence, Carbon $start = null, Carbon $end = null): int; /** * Get journal ID's for journals created by this recurring transaction. * * @param Recurrence $recurrence * * @return array */ public function getJournalIds(Recurrence $recurrence): array; /** * Get the notes. * * @param Recurrence $recurrence * * @return string */ public function getNoteText(Recurrence $recurrence): string; /** * Generate events in the date range. * * @param RecurrenceRepetition $repetition * @param Carbon $start * @param Carbon $end * * @return array */ public function getOccurrencesInRange(RecurrenceRepetition $repetition, Carbon $start, Carbon $end): array; /** * @param RecurrenceTransaction $transaction * * @return int|null */ public function getPiggyBank(RecurrenceTransaction $transaction): ?int; /** * Get the tags from the recurring transaction. * * @param RecurrenceTransaction $transaction * * @return array */ public function getTags(RecurrenceTransaction $transaction): array; /** * @param Recurrence $recurrence * @param int $page * @param int $pageSize * * @return LengthAwarePaginator */ public function getTransactionPaginator(Recurrence $recurrence, int $page, int $pageSize): LengthAwarePaginator; /** * @param Recurrence $recurrence * * @return Collection */ public function getTransactions(Recurrence $recurrence): Collection; /** * Calculate the next X iterations starting on the date given in $date. * Returns an array of Carbon objects. * * @param RecurrenceRepetition $repetition * @param Carbon $date * @param int $count * * @return array * @throws FireflyException */ public function getXOccurrences(RecurrenceRepetition $repetition, Carbon $date, int $count): array; /** * Calculate the next X iterations starting on the date given in $date. * Returns an array of Carbon objects. * * Only returns them of they are after $afterDate * * @param RecurrenceRepetition $repetition * @param Carbon $date * @param Carbon $afterDate * @param int $count * * @return array * @throws FireflyException */ public function getXOccurrencesSince(RecurrenceRepetition $repetition, Carbon $date, Carbon $afterDate, int $count): array; /** * Parse the repetition in a string that is user readable. * * @param RecurrenceRepetition $repetition * * @return string */ public function repetitionDescription(RecurrenceRepetition $repetition): string; /** * @param string $query * @param int $limit * * @return Collection */ public function searchRecurrence(string $query, int $limit): Collection; /** * Set user for in repository. * * @param User $user */ public function setUser(User $user): void; /** * Store a new recurring transaction. * * @param array $data * * @return Recurrence * @throws FireflyException */ public function store(array $data): Recurrence; /** * Calculate how many transactions are to be expected from this recurrence. * * @param Recurrence $recurrence * @param RecurrenceRepetition $repetition * * @return int */ public function totalTransactions(Recurrence $recurrence, RecurrenceRepetition $repetition): int; /** * Update a recurring transaction. * * @param Recurrence $recurrence * @param array $data * * @return Recurrence */ public function update(Recurrence $recurrence, array $data): Recurrence; }