Passed
Pull Request — master (#2)
by Kauri
03:12
created

PaymentScheduleFactory::generate()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 23
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 3

Importance

Changes 0
Metric Value
dl 0
loc 23
ccs 14
cts 14
cp 1
rs 9.0856
c 0
b 0
f 0
cc 3
eloc 14
nc 4
nop 1
crap 3
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace Kauri\Loan;
6
7
/**
8
 * Class PaymentScheduleFactory
9
 * @package Kauri\Loan
10
 */
11
class PaymentScheduleFactory implements PaymentScheduleFactoryInterface
12
{
13
    /**
14
     * @param PaymentScheduleConfigInterface $paymentScheduleConfig
15
     * @return PaymentScheduleInterface
16
     */
17 7
    public static function generate(PaymentScheduleConfigInterface $paymentScheduleConfig): PaymentScheduleInterface
18
    {
19 7
        $schedule = new PaymentSchedule($paymentScheduleConfig);
20
21 7
        $startDate = $paymentScheduleConfig->getStartDate();
22 7
        $dateInterval = $paymentScheduleConfig->getDateInterval();
23 7
        $noOfPayments = $paymentScheduleConfig->getNoOfPayments();
24 7
        $firstPaymentDate = $paymentScheduleConfig->getFirstPaymentDate();
25
26 7
        if (!is_null($firstPaymentDate)) {
27 4
            $startDate = $firstPaymentDate;
28 4
            $schedule->add($startDate, 1);
29
        }
30
31 7
        $period = new \DatePeriod($startDate, $dateInterval, ($noOfPayments - $schedule->getNoOfPayments()),
32 7
            \DatePeriod::EXCLUDE_START_DATE);
33
34 7
        foreach ($period as $iteration => $date) {
35 7
            $schedule->add($date, $schedule->getNoOfPayments() + 1);
36
        }
37
38 7
        return $schedule;
39
    }
40
}
41