ScoreCalculator   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 104
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 97.06%

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 4
dl 0
loc 104
ccs 33
cts 34
cp 0.9706
rs 10
c 0
b 0
f 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A calculateBuyScore() 0 4 1
A calculateSellScore() 0 8 2
A calculateScore() 0 13 3
A getMoneyPercentage() 0 8 2
A calculateBaseValue() 0 13 1
A getManager() 0 4 1
1
<?php
2
3
namespace OSS\CoreBundle\Transfer;
4
5
use OSS\CoreBundle\Entity\Manager;
6
use OSS\CoreBundle\Entity\Player;
7
8
class ScoreCalculator
9
{
10
    const TYPE_BUY = 'buy';
11
    const TYPE_SELL = 'sell';
12
13
    /**
14
     * @var Manager
15
     */
16
    private $manager;
17
18
    /**
19
     * @param Manager $manager
20
     */
21 26
    public function __construct(Manager $manager)
22
    {
23 26
        $this->manager = $manager;
24 26
    }
25
26
    /**
27
     * @param Player $player
28
     *
29
     * @return int
30
     */
31 10
    public function calculateBuyScore(Player $player)
32
    {
33 10
        return $this->calculateScore($player, self::TYPE_BUY);
34
    }
35
36
    /**
37
     * @param Player $player
38
     *
39
     * @return int
40
     */
41 6
    public function calculateSellScore(Player $player)
42
    {
43 6
        if ($this->manager->getTeam()->getPlayers()->count() <= 11) {
44 1
            return -1;
45
        }
46
47 5
        return $this->calculateScore($player, self::TYPE_SELL);
48
    }
49
50
    /**
51
     * @param Player $player
52
     * @param string $type
53
     *
54
     * @return int
55
     */
56 15
    private function calculateScore(Player $player, $type)
57
    {
58 15
        $value = $this->calculateBaseValue($player);
59 15
        $moneyFactor = $this->getMoneyPercentage($player->getMarketValue(), $this->manager->getTeam()->getMoney()) * 10 * $this->manager->getTransferFactorMoneyBehaviour();
60
61 15
        if ($moneyFactor > 0) {
62 15
            $value = $type == self::TYPE_BUY ? $value / $moneyFactor : $value * $moneyFactor * 2;
63 15
        } else {
64
            $value = -1;
65
        }
66
67 15
        return $value;
68
    }
69
70
    /**
71
     * @param int $marketValue
72
     * @param int $money
73
     *
74
     * @return float
75
     */
76 16
    public function getMoneyPercentage($marketValue, $money)
77
    {
78 16
        if (empty($money)) {
79 1
            return 0;
80
        }
81
82 16
        return round($marketValue / $money, 2);
83
    }
84
85
    /**
86
     * @param Player $player
87
     *
88
     * @return float
89
     */
90 15
    private function calculateBaseValue(Player $player)
91
    {
92 15
        return $player->getSkills()->getTackling() * $this->manager->getTransferFactorTackling() / 100
93 15
               + $player->getSkills()->getPassing() * $this->manager->getTransferFactorPassing() / 100
94 15
               + $player->getSkills()->getShooting() * $this->manager->getTransferFactorShooting() / 100
95 15
               + $player->getSkills()->getHeading() * $this->manager->getTransferFactorHeading() / 100
96 15
               + $player->getSkills()->getSpeed() * $this->manager->getTransferFactorSpeed() / 100
97 15
               + $player->getSkills()->getCrossing() * $this->manager->getTransferFactorCrossing() / 100
98 15
               + $player->getSkills()->getTechnics() * $this->manager->getTransferFactorTechnics() / 100
99 15
               + $player->getSkills()->getIntelligence() * $this->manager->getTransferFactorIntelligence() / 100
100 15
               + $player->getSkills()->getSafety() * $this->manager->getTransferFactorSafety() / 100
101 15
               + $player->getSkills()->getDribbling() * $this->manager->getTransferFactorDribbling() / 100;
102
    }
103
104
    /**
105
     * @return Manager
106
     */
107 15
    public function getManager()
108
    {
109 15
        return $this->manager;
110
    }
111
}
112