Skip to content

Commit efa0561

Browse files
authored
feat: allow null remaining occurrences for infinite iterations (#19)
* infinite recurrence logic added with test * helper texts added
1 parent 8e864dc commit efa0561

File tree

4 files changed

+19
-3
lines changed

4 files changed

+19
-3
lines changed

app/Enums/Frequency.php

+5-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public function getLabel(): ?string
1919
return $this->name;
2020
}
2121

22-
public function getRemainingIterations(Carbon $start, Carbon $end, int $iterationsLeft): int
22+
public function getRemainingIterations(Carbon $start, Carbon $end, ?int $iterationsLeft): int
2323
{
2424
$diff = match ($this->value) {
2525
self::DAILY->value => $start->diffInDays($end),
@@ -34,6 +34,10 @@ public function getRemainingIterations(Carbon $start, Carbon $end, int $iteratio
3434

3535
$diff = $diff + 1; // the first date is inclusive
3636

37+
if (is_null($iterationsLeft)) {
38+
return $diff;
39+
}
40+
3741
return min($iterationsLeft, $diff);
3842
}
3943
}

app/Filament/Concerns/RecurringIncomeRecurringExpenseTrait.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ public static function form(Form $form): Form
6060
->required(),
6161

6262
TextInput::make('remaining_recurrences')
63-
->integer(),
63+
->integer()
64+
->helperText('Leave blank for infinite recurrences'),
6465

6566
Select::make('tags')
6667
->relationship('tags', 'name')

app/Filament/Resources/RecurringTransferResource.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ public static function form(Form $form): Form
6363
->required(),
6464

6565
TextInput::make('remaining_recurrences')
66-
->integer(),
66+
->integer()
67+
->helperText('Leave blank for infinite recurrences'),
6768

6869
Select::make('tags')
6970
->relationship('tags', 'name')

tests/Unit/Enums/FrequencyTest.php

+10
Original file line numberDiff line numberDiff line change
@@ -72,3 +72,13 @@
7272

7373
expect($remainingOccurrences)->toEqual(5);
7474
});
75+
76+
it('returns the iterations within the date range when remaining recurrences is null', function () {
77+
$start = Carbon::create(2023, 1, 1);
78+
$end = Carbon::create(2023, 1, 5); // 5 days
79+
$iterationsLeft = null;
80+
81+
$remainingOccurrences = Frequency::DAILY->getRemainingIterations($start, $end, $iterationsLeft);
82+
83+
expect($remainingOccurrences)->toEqual(5);
84+
});

0 commit comments

Comments
 (0)