SimpleDiscountCalculator::getAmountDue()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
1
<?php
2
3
namespace FinanCalc\Calculators {
4
5
    use FinanCalc\Interfaces\Calculator\CalculatorAbstract;
6
    use FinanCalc\Utils\Lambdas;
7
    use FinanCalc\Utils\MathFuncs;
8
    use FinanCalc\Utils\Time\TimeSpan;
9
10
    /**
11
     * Class SimpleDiscountCalculator
12
     * @package FinanCalc\Calculators
13
     */
14
    class SimpleDiscountCalculator extends CalculatorAbstract
15
    {
16
        // amount due = 'S'
17
        protected $amountDue;
18
        // annual discount rate = 'd'
19
        protected $annualDiscountRate;
20
        // the time, which converted to years = 't'
21
        /** @var  TimeSpan */
22
        protected $time;
23
24
        /**
25
         * @param $amountDue
26
         * @param $annualDiscountRate
27
         * @param TimeSpan $time
28
         */
29
        public function __construct(
30
            $amountDue,
31
            $annualDiscountRate,
32
            TimeSpan $time
33
        ) {
34
            $this->setAmountDue($amountDue);
35
            $this->setAnnualDiscountRate($annualDiscountRate);
36
            $this->setTime($time);
37
        }
38
39
        /**
40
         * @param $amountDue
41
         */
42
        public function setAmountDue($amountDue)
43
        {
44
            $this->setProperty("amountDue", $amountDue, Lambdas::checkIfPositive());
45
        }
46
47
        /**
48
         * @param $annualDiscountRate
49
         */
50
        public function setAnnualDiscountRate($annualDiscountRate)
51
        {
52
            $this->setProperty("annualDiscountRate", $annualDiscountRate, Lambdas::checkIfPositive());
53
        }
54
55
        /**
56
         * @param TimeSpan $time
57
         */
58
        public function setTime(TimeSpan $time)
59
        {
60
            $this->setProperty("time", $time, Lambdas::checkIfPositive());
61
        }
62
63
        /**
64
         * @return string
65
         */
66
        public function getAmountDue()
67
        {
68
            return $this->amountDue;
69
        }
70
71
        /**
72
         * @return string
73
         */
74
        public function getAnnualDiscountRate()
75
        {
76
            return $this->annualDiscountRate;
77
        }
78
79
        /**
80
         * @return TimeSpan
81
         */
82
        public function getTime()
83
        {
84
            return $this->time;
85
        }
86
87
        /**
88
         * @return string
89
         */
90
        public function getTimeInYears()
91
        {
92
            return $this->time->toYears();
93
        }
94
95
        /**
96
         * @return string
97
         */
98
        public function getTimeInMonths()
99
        {
100
            return $this->time->toMonths();
101
        }
102
103
        /**
104
         * @return string
105
         */
106
        public function getTimeInDays()
107
        {
108
            return $this->time->toDays();
109
        }
110
111
        /**
112
         * @return string
113
         */
114
        public function getDiscountAmount()
115
        {
116
            // D = S*d*t
117
            return MathFuncs::mul(
118
                $this->amountDue,
119
                MathFuncs::mul(
120
                    $this->annualDiscountRate,
121
                    $this->getTimeInYears()
122
                )
123
            );
124
        }
125
    }
126
}
127