Passed
Branch master (84c5d9)
by Kauri
02:42
created

PaymentScheduleFactory::generate()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 24
ccs 14
cts 14
cp 1
rs 8.6845
c 0
b 0
f 0
cc 4
eloc 14
nc 6
nop 1
crap 4
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
33 7
        foreach ($period as $iteration => $date) {
34 7
            if ($date != $startDate) {
35 7
                $schedule->add($date, $schedule->getNoOfPayments() + 1);
36
            }
37
        }
38
39 7
        return $schedule;
40
    }
41
}