Completed
Push — master ( a1420e...5c3586 )
by Tomáš
02:42
created

HasPositions::addLoss()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 6
c 1
b 0
f 0
dl 0
loc 8
ccs 7
cts 7
cp 1
rs 10
cc 2
nc 2
nop 1
crap 2
1
<?php
2
3
4
namespace TournamentGenerator\Traits;
5
6
use Exception;
7
use TournamentGenerator\Base;
8
9
/**
10
 * Trait Positions
11
 *
12
 * A trait for a Team class (maybe something else in the future) for logging positions (first, second,..).
13
 *
14
 * @package TournamentGenerator\Traits
15
 * @author  Tomáš Vojík <[email protected]>
16
 * @since   0.4
17
 */
18
trait HasPositions
19
{
20
	/**
21
	 * @var array[] Associative array of results in each group
22
	 * @details [
23
	 * * groupId => [
24
	 * * * "group"  => Group, # GROUP OBJECT
25
	 * * * "points" => int 0, # NUMBER OF POINTS ACQUIRED
26
	 * * * "score"  => int 0, # SUM OF SCORE ACQUIRED
27
	 * * * "wins"   => int 0, # NUMBER OF WINS
28
	 * * * "draws"  => int 0, # NUMBER OF DRAWS
29
	 * * * "losses" => int 0, # NUMBER OF LOSSES
30
	 * * * "second" => int 0, # NUMBER OF TIMES BEING SECOND (ONLY FOR INGAME OPTION OF 3 OR 4)
31
	 * * * "third"  => int 0  # NUMBER OF TIMES BEING THIRD  (ONLY FOR INGAME OPTION OF 4)
32
	 * * ]
33
	 * ]
34
	 */
35
	public array $groupResults = [];
36
37
38
	/**
39
	 * Adds a win to the team
40
	 *
41
	 * @param string|int|null $groupId An id of group to add the results from
42
	 *
43
	 * @return $this
44
	 * @throws Exception if the group results have not been added
45
	 *
46
	 * @uses Group::getWinPoints() to retrieve the points to add
47
	 *
48
	 */
49 73
	public function addWin(string $groupId = '') : Base {
50 73
		if (!isset($this->groupResults[$groupId])) {
51 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
52
		}
53 72
		$this->groupResults[$groupId]['points'] += $this->groupResults[$groupId]['group']->getWinPoints();
54 72
		$this->addPoints($this->groupResults[$groupId]['group']->getWinPoints());
0 ignored issues
show
Bug introduced by
It seems like addPoints() must be provided by classes using this trait. How about adding it as abstract method to this trait? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

54
		$this->/** @scrutinizer ignore-call */ 
55
         addPoints($this->groupResults[$groupId]['group']->getWinPoints());
Loading history...
55 72
		$this->groupResults[$groupId]['wins']++;
56 72
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
57
	}
58
59
	/**
60
	 * Remove a win from the team
61
	 *
62
	 * @param string|int|null $groupId An id of group to add the results from
63
	 *
64
	 * @return $this
65
	 * @throws Exception if the group results have not been added
66
	 *
67
	 * @uses Group::getWinPoints() to retrieve the points to add
68
	 *
69
	 */
70 20
	public function removeWin(string $groupId = '') : Base {
71 20
		if (!isset($this->groupResults[$groupId])) {
72 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
73
		}
74 19
		$this->groupResults[$groupId]['points'] -= $this->groupResults[$groupId]['group']->getWinPoints();
75 19
		$this->removePoints($this->groupResults[$groupId]['group']->getWinPoints());
0 ignored issues
show
Bug introduced by
The method removePoints() does not exist on TournamentGenerator\Traits\HasPositions. Did you maybe mean removeWin()? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

75
		$this->/** @scrutinizer ignore-call */ 
76
         removePoints($this->groupResults[$groupId]['group']->getWinPoints());

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
76 19
		$this->groupResults[$groupId]['wins']--;
77 19
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
78
	}
79
80
	/**
81
	 * Adds a draw to the team
82
	 *
83
	 * @param string|int|null $groupId An id of group to add the results from
84
	 *
85
	 * @return $this
86
	 * @throws Exception if the group results have not been added
87
	 *
88
	 * @uses Group::getDrawPoints() to retrieve the points to add
89
	 *
90
	 */
91 15
	public function addDraw(string $groupId = '') : Base {
92 15
		if (!isset($this->groupResults[$groupId])) {
93 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
94
		}
95 14
		$this->groupResults[$groupId]['points'] += $this->groupResults[$groupId]['group']->getDrawPoints();
96 14
		$this->addPoints($this->groupResults[$groupId]['group']->getDrawPoints());
97 14
		$this->groupResults[$groupId]['draws']++;
98 14
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
99
	}
100
101
	/**
102
	 * Remove a draw from the team
103
	 *
104
	 * @param string|int|null $groupId An id of group to add the results from
105
	 *
106
	 * @return $this
107
	 * @throws Exception if the group results have not been added
108
	 *
109
	 * @uses Group::getDrawPoints() to retrieve the points to add
110
	 *
111
	 */
112 2
	public function removeDraw(string $groupId = '') : Base {
113 2
		if (!isset($this->groupResults[$groupId])) {
114 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
115
		}
116 1
		$this->groupResults[$groupId]['points'] -= $this->groupResults[$groupId]['group']->getDrawPoints();
117 1
		$this->removePoints($this->groupResults[$groupId]['group']->getDrawPoints());
118 1
		$this->groupResults[$groupId]['draws']--;
119 1
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
120
	}
121
122
	/**
123
	 * Adds a loss to the team
124
	 *
125
	 * @param string|int|null $groupId An id of group to add the results from
126
	 *
127
	 * @return $this
128
	 * @throws Exception if the group results have not been added
129
	 *
130
	 * @uses Group::getLossPoints() to retrieve the points to add
131
	 *
132
	 */
133 73
	public function addLoss(string $groupId = '') : Base {
134 73
		if (!isset($this->groupResults[$groupId])) {
135 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
136
		}
137 72
		$this->groupResults[$groupId]['points'] += $this->groupResults[$groupId]['group']->getLostPoints();
138 72
		$this->addPoints($this->groupResults[$groupId]['group']->getLostPoints());
139 72
		$this->groupResults[$groupId]['losses']++;
140 72
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
141
	}
142
143
	/**
144
	 * Remove a loss from the team
145
	 *
146
	 * @param string|int|null $groupId An id of group to add the results from
147
	 *
148
	 * @return $this
149
	 * @throws Exception if the group results have not been added
150
	 *
151
	 * @uses Group::getLossPoints() to retrieve the points to add
152
	 *
153
	 */
154 20
	public function removeLoss(string $groupId = '') : Base {
155 20
		if (!isset($this->groupResults[$groupId])) {
156 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
157
		}
158 19
		$this->groupResults[$groupId]['points'] -= $this->groupResults[$groupId]['group']->getLostPoints();
159 19
		$this->removePoints($this->groupResults[$groupId]['group']->getLostPoints());
160 19
		$this->groupResults[$groupId]['losses']--;
161 19
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
162
	}
163
164
	/**
165
	 * Add points for being second to the team
166
	 *
167
	 * @param string|int|null $groupId An id of group to add the results from
168
	 *
169
	 * @return $this
170
	 * @throws Exception if the group results have not been added
171
	 *
172
	 * @uses Group::getSecondPoints() to retrieve the points to add
173
	 *
174
	 */
175 11
	public function addSecond(string $groupId = '') : Base {
176 11
		if (!isset($this->groupResults[$groupId])) {
177 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
178
		}
179 10
		$this->groupResults[$groupId]['points'] += $this->groupResults[$groupId]['group']->getSecondPoints();
180 10
		$this->addPoints($this->groupResults[$groupId]['group']->getSecondPoints());
181 10
		$this->groupResults[$groupId]['second']++;
182 10
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
183
	}
184
185
	/**
186
	 * Remove points for being second from the team
187
	 *
188
	 * @param string|int|null $groupId An id of group to add the results from
189
	 *
190
	 * @return $this
191
	 * @throws Exception if the group results have not been added
192
	 *
193
	 * @uses Group::getSecondPoints() to retrieve the points to add
194
	 *
195
	 */
196 3
	public function removeSecond(string $groupId = '') : Base {
197 3
		if (!isset($this->groupResults[$groupId])) {
198 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
199
		}
200 2
		$this->groupResults[$groupId]['points'] -= $this->groupResults[$groupId]['group']->getSecondPoints();
201 2
		$this->removePoints($this->groupResults[$groupId]['group']->getSecondPoints());
202 2
		$this->groupResults[$groupId]['second']--;
203 2
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
204
	}
205
206
	/**
207
	 * Add points for being third to the team
208
	 *
209
	 * @param string|int|null $groupId An id of group to add the results from
210
	 *
211
	 * @return $this
212
	 * @throws Exception if the group results have not been added
213
	 *
214
	 * @uses Group::getThirdPoints() to retrieve the points to add
215
	 *
216
	 */
217 10
	public function addThird(string $groupId = '') : Base {
218 10
		if (!isset($this->groupResults[$groupId])) {
219 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
220
		}
221 9
		$this->groupResults[$groupId]['points'] += $this->groupResults[$groupId]['group']->getThirdPoints();
222 9
		$this->addPoints($this->groupResults[$groupId]['group']->getThirdPoints());
223 9
		$this->groupResults[$groupId]['third']++;
224 9
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
225
	}
226
227
	/**
228
	 * Remove points for being third from the team
229
	 *
230
	 * @param string|int|null $groupId An id of group to add the results from
231
	 *
232
	 * @return $this
233
	 * @throws Exception if the group results have not been added
234
	 *
235
	 * @uses Group::getThirdPoints() to retrieve the points to add
236
	 *
237
	 */
238 2
	public function removeThird(string $groupId = '') : Base {
239 2
		if (!isset($this->groupResults[$groupId])) {
240 1
			throw new Exception('Group '.$groupId.' is not set for this team ('.$this->name.')');
241
		}
242 1
		$this->groupResults[$groupId]['points'] -= $this->groupResults[$groupId]['group']->getThirdPoints();
243 1
		$this->removePoints($this->groupResults[$groupId]['group']->getThirdPoints());
244 1
		$this->groupResults[$groupId]['third']--;
245 1
		return $this;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this returns the type TournamentGenerator\Traits\HasPositions&object which includes types incompatible with the type-hinted return TournamentGenerator\Base.
Loading history...
246
	}
247
248
}