-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathScheduledTransaction.php
More file actions
49 lines (41 loc) · 1.3 KB
/
ScheduledTransaction.php
File metadata and controls
49 lines (41 loc) · 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
namespace App;
use Carbon\Carbon;
use Recurr\Exception\InvalidRRule;
use Recurr\Rule;
use Recurr\Transformer\ArrayTransformer;
use Recurr\Transformer\ArrayTransformerConfig;
use Recurr\Transformer\Constraint\AfterConstraint;
use Recurr\Transformer\Constraint\BeforeConstraint;
use Recurr\Transformer\Constraint\BetweenConstraint;
class ScheduledTransaction extends Transaction
{
const FREQ_YEARLY = 'YEARLY';
const FREQ_MONTHLY = 'MONTHLY';
const FREQ_WEEKLY = 'WEEKLY';
const FREQ_DAILY = 'DAILY';
/**
* @return Rule
*
* @throws InvalidRRule
*/
public static function rule()
{
return new Rule();
}
public function getMonthlyRecurrences(Carbon $date)
{
$transformerConfig = new ArrayTransformerConfig();
$transformerConfig->enableLastDayOfMonthFix();
$transformer = new ArrayTransformer();
$transformer->setConfig($transformerConfig);
$betweenConstraint = new BetweenConstraint(
$date->startOfMonth()->toDateTime(),
$date->endOfMonth()->toDateTime(),
true
);
return $transformer->transform(new Rule($this->rrule), $betweenConstraint)->map(function ($recurrence) {
return Carbon::instance($recurrence->getStart())->startOfDay();
});
}
}