1 | <?php |
||
2 | namespace Yabacon\Paystack; |
||
3 | |||
4 | class Fee |
||
5 | { |
||
6 | const DEFAULT_PERCENTAGE = 0.015; |
||
7 | const DEFAULT_ADDITIONAL_CHARGE = 10000; |
||
8 | const DEFAULT_THRESHOLD = 250000; |
||
9 | const DEFAULT_CAP = 200000; |
||
10 | |||
11 | public static $default_percentage = Fee::DEFAULT_PERCENTAGE; |
||
12 | public static $default_additional_charge = Fee::DEFAULT_ADDITIONAL_CHARGE; |
||
13 | public static $default_threshold = Fee::DEFAULT_THRESHOLD; |
||
14 | public static $default_cap = Fee::DEFAULT_CAP; |
||
15 | |||
16 | private $percentage; |
||
17 | private $additional_charge; |
||
18 | private $threshold; |
||
19 | private $cap; |
||
20 | |||
21 | private $chargeDivider; |
||
22 | private $crossover; |
||
23 | private $flatlinePlusCharge; |
||
24 | private $flatline; |
||
25 | |||
26 | 4 | public function __construct() |
|
27 | { |
||
28 | 4 | $this->percentage = Fee::$default_percentage; |
|
29 | 4 | $this->additional_charge = Fee::$default_additional_charge; |
|
30 | 4 | $this->threshold = Fee::$default_threshold; |
|
31 | 4 | $this->cap = Fee::$default_cap; |
|
32 | 4 | $this->__setup(); |
|
33 | 4 | } |
|
34 | |||
35 | 2 | public function withPercentage($percentage) |
|
36 | { |
||
37 | 2 | $this->percentage = $percentage; |
|
38 | 2 | $this->__setup(); |
|
39 | 2 | } |
|
40 | |||
41 | 1 | public static function resetDefaults() |
|
42 | { |
||
43 | 1 | Fee::$default_percentage = Fee::DEFAULT_PERCENTAGE; |
|
44 | 1 | Fee::$default_additional_charge = Fee::DEFAULT_ADDITIONAL_CHARGE; |
|
45 | 1 | Fee::$default_threshold = Fee::DEFAULT_THRESHOLD; |
|
46 | 1 | Fee::$default_cap = Fee::DEFAULT_CAP; |
|
47 | 1 | } |
|
48 | |||
49 | 2 | public function withAdditionalCharge($additional_charge) |
|
50 | { |
||
51 | 2 | $this->additional_charge = $additional_charge; |
|
52 | 2 | $this->__setup(); |
|
53 | 2 | } |
|
54 | |||
55 | 2 | public function withThreshold($threshold) |
|
56 | { |
||
57 | 2 | $this->threshold = $threshold; |
|
58 | 2 | $this->__setup(); |
|
59 | 2 | } |
|
60 | |||
61 | 2 | public function withCap($cap) |
|
62 | { |
||
63 | 2 | $this->cap = $cap; |
|
64 | 2 | $this->__setup(); |
|
65 | 2 | } |
|
66 | |||
67 | 4 | private function __setup() |
|
68 | { |
||
69 | 4 | $this->chargeDivider = $this->__chargeDivider(); |
|
70 | 4 | $this->crossover = $this->__crossover(); |
|
71 | 4 | $this->flatlinePlusCharge = $this->__flatlinePlusCharge(); |
|
72 | 4 | $this->flatline = $this->__flatline(); |
|
73 | 4 | } |
|
74 | |||
75 | 4 | private function __chargeDivider() |
|
76 | { |
||
77 | 4 | return 1 - $this->percentage; |
|
78 | } |
||
79 | |||
80 | 4 | private function __crossover() |
|
81 | { |
||
82 | 4 | return ($this->threshold * $this->chargeDivider) - $this->additional_charge; |
|
83 | } |
||
84 | |||
85 | 4 | private function __flatlinePlusCharge() |
|
86 | { |
||
87 | 4 | return ($this->cap - $this->additional_charge) / $this->percentage; |
|
88 | } |
||
89 | |||
90 | 4 | private function __flatline() |
|
91 | { |
||
92 | 4 | return $this->flatlinePlusCharge - $this->cap; |
|
93 | } |
||
94 | |||
95 | 3 | public function addFor($amountinkobo) |
|
96 | { |
||
97 | 3 | if ($amountinkobo > $this->flatline) { |
|
98 | 1 | return intval(ceil($amountinkobo + $this->cap)); |
|
99 | 3 | } elseif ($amountinkobo > $this->crossover) { |
|
100 | 3 | return intval(ceil(($amountinkobo + $this->additional_charge) / $this->chargeDivider)); |
|
101 | } else { |
||
102 | 3 | return intval(ceil($amountinkobo / $this->chargeDivider)); |
|
103 | } |
||
104 | } |
||
105 | |||
106 | 2 | public function calculateFor($amountinkobo) |
|
107 | { |
||
108 | 2 | $fee = $this->percentage * $amountinkobo; |
|
109 | 2 | if ($amountinkobo >= $this->threshold) { |
|
110 | 2 | $fee += $this->additional_charge; |
|
111 | 2 | } |
|
112 | 2 | if ($fee > $this->cap) { |
|
113 | 1 | $fee = $this->cap; |
|
114 | 1 | } |
|
115 | 2 | return intval(ceil($fee)); |
|
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||
116 | } |
||
117 | } |
||
118 |