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

PaymentScheduleFactory   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 30
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 3
lcom 0
cbo 2
dl 0
loc 30
ccs 14
cts 14
cp 1
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
A generate() 0 23 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