Passed
Pull Request — master (#1)
by Kauri
03:27
created

PaymentScheduleFactory::generate()   B

Complexity

Conditions 4
Paths 6

Size

Total Lines 24
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 24
rs 8.6845
c 0
b 0
f 0
cc 4
eloc 14
nc 6
nop 1
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
    public static function generate(PaymentScheduleConfigInterface $paymentScheduleConfig): PaymentScheduleInterface
18
    {
19
        $schedule = new PaymentSchedule($paymentScheduleConfig);
20
21
        $startDate = $paymentScheduleConfig->getStartDate();
22
        $dateInterval = $paymentScheduleConfig->getDateInterval();
23
        $noOfPayments = $paymentScheduleConfig->getNoOfPayments();
24
        $firstPaymentDate = $paymentScheduleConfig->getFirstPaymentDate();
25
26
        if (!is_null($firstPaymentDate)){
27
            $startDate = $firstPaymentDate;
28
            $schedule->add($startDate, 1);
29
        }
30
31
        $period = new \DatePeriod($startDate, $dateInterval, ($noOfPayments - $schedule->getNoOfPayments()));
32
33
        foreach ($period as $iteration => $date) {
34
            if ($date != $startDate) {
35
                $schedule->add($date, $schedule->getNoOfPayments() + 1);
36
            }
37
        }
38
39
        return $schedule;
40
    }
41
}