Completed
Push — master ( 50021f...41e1c4 )
by Lorenzo
03:57
created

ValidateHelper   C

Complexity

Total Complexity 62

Size/Duplication

Total Lines 311
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 8

Test Coverage

Coverage 64.9%

Importance

Changes 9
Bugs 5 Features 3
Metric Value
wmc 62
c 9
b 5
f 3
lcom 1
cbo 8
dl 0
loc 311
ccs 98
cts 151
cp 0.649
rs 5.9494

21 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A checkCodiceRegione() 0 6 2
A isoDateValidate() 0 8 2
C checkArrVociSpesa() 0 23 7
A checkArrSpesa() 0 13 3
A checkCodiceSSA() 0 6 2
A checkPIva() 0 11 3
A checkCfProprietario() 0 11 3
A checkCodiceAsl() 0 6 2
A checkDataValida() 0 10 3
A checkTipoSpesa() 0 6 2
A checkImporto() 0 6 2
A checkRequiredField() 0 6 2
A checkDataEmissione() 0 4 1
A checkFlagOperazione() 0 6 2
A checkCfCittadino() 0 6 2
A checkDispositivo() 0 6 2
A checkNumDocumento() 0 6 2
B checkNumericField() 0 18 8
A checkRigaSpesa() 0 11 3
C checkDatiSpesa() 0 32 8

How to fix   Complexity   

Complex Class

Complex classes like ValidateHelper often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use ValidateHelper, and based on these observations, apply Extract Interface, too.

1
<?php
2
namespace Padosoft\TesseraSanitaria;
3
4
/**
5
 * Class ValidateHelper
6
 * @package Padosoft\TesseraSanitaria
7
 */
8
class ValidateHelper
9
{
10
	use traits\Errorable;
11
12
    private $objPartitaIVA = null;
13
    private $objCFChecker = null;
14
15
	/**+
16
	 * ValidateHelper constructor.
17
	 *
18
	 * @param \fdisotto\PartitaIVA   $objPartitaIVA
19
	 * @param \CodiceFiscale\Checker $objCFChecker
20
	 */
21 54
	public function __construct(\fdisotto\PartitaIVA $objPartitaIVA, \CodiceFiscale\Checker $objCFChecker)
22
	{
23 54
		$this->arrErrors = array();
24 54
		$this->objPartitaIVA = $objPartitaIVA;
25 54
		$this->objCFChecker = $objCFChecker;
26 54
	}
27
28
	/**
29
	 * @param $codiceRegione
30
	 */
31 3
	public function checkCodiceRegione($codiceRegione)
32
	{
33 3
        if (!CodiceRegione::isValidValue($codiceRegione)) {
34 3
            $this->addError("<b>".$codiceRegione."</b> - Codice regione (codiceRegione) non valido. Codici validi: ".CodiceRegione::getCostantsValues());
35 3
        }
36 3
	}
37
38
	/**
39
	 * @param $codiceSSA
40
	 */
41 3
	public function checkCodiceSSA($codiceSSA)
42
	{
43 3
        if (!CodiceSSA::isValidValue($codiceSSA)) {
44 3
            $this->addError("<b>".$codiceSSA."</b> - Codice SSA (codiceSSA) non valido. Codici validi: ".CodiceSSA::getCostantsValues());
45 3
        }
46 3
	}
47
48
	/**
49
	 * @param $dateStr
50
	 *
51
	 * @return bool
52
	 */
53 9
	public function isoDateValidate($dateStr)
54
	{
55 9
		if (preg_match('/^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/', $dateStr) > 0){
56 9
			return TRUE;
57
		}else{
58 9
			return FALSE;
59
		}
60
	}
61
62
	/**+
63
	 * @param $arrVociSpesa
64
	 */
65
	public function checkArrVociSpesa($arrVociSpesa)
66
	{
67
	    if(empty($arrVociSpesa)){
68
69
			$this->addError("Voci spesa mancanti");
70
		}else{
71
72
			foreach ($arrVociSpesa as $rigaVociSpesa){
73
				foreach ($rigaVociSpesa as $colonnaVociSpesa){
74
					foreach($colonnaVociSpesa as $campo=>$valore){
75
76
                        if ($campo == "tipoSpesa"){
77
78
                            $this->checkTipoSpesa($valore);
79
                        }elseif ($campo == "importo") {
80
81
                            $this->checkImporto($valore);
82
                        }
83
                    }
84
				}
85
			}
86
		}
87
	}
88
89
	/**
90
	 * @param $arrSpesa
91
	 */
92
	public function checkArrSpesa($arrSpesa)
93
	{
94
		if(empty($arrSpesa)){
95
			$this->addError("Dati spesa mancanti");
96
		}else{
97
98
			// Controllo interno array spesa
99
			foreach($arrSpesa as $rigaSpesa){
100
101
                $this->checkRigaSpesa($rigaSpesa);
102
			}
103
		}
104
	}
105
106
	/**
107
	 * @param $pIva
108
	 */
109 3
	public function checkPIva($pIva)
110
	{
111 3
		if(empty($pIva)){
112 3
			$this->addError("Partita IVA mancante");
113 3
		}else{
114
			// Verifica formale della partita IVA
115 3
			if(!$this->objPartitaIVA->check($pIva)){
116 3
				$this->addError("<b>".$pIva."</b> - Partita IVA formalmente non corretta");
117 3
			}
118
		}
119 3
	}
120
121
	/**
122
	 * @param $cfProprietario
123
	 */
124 3
	public function checkCfProprietario($cfProprietario)
125
	{
126 3
		if(empty($cfProprietario)){
127 3
			$this->addError("Codice fiscale proprietario (cfProprietario) mancante");
128 3
		}else{
129
			// Verifica formale del codice fiscale
130 3
			if (!$this->objCFChecker->isFormallyCorrect($cfProprietario)){
131 3
				$this->addError("<b>".$cfProprietario."</b> - Codice fiscale proprietario (cfProprietario) formalmente non corretto");
132 3
			}
133
		}
134 3
	}
135
136
	/**
137
	 * @param $codiceAsl
138
	 */
139 3
	public function checkCodiceAsl($codiceAsl)
140
	{
141 3
        if (!CodiceAsl::isValidValue($codiceAsl)) {
142 3
            $this->addError("<b>".$codiceAsl."</b> - Codice ASL (codiceAsl) non valido. Codici validi: ".CodiceAsl::getCostantsValues());
143 3
        }
144 3
	}
145
146
    /**
147
     * @param $campo
148
     * @param $valore
149
     */
150 6
    private function checkDataValida($campo, $valore)
151
    {
152 6
        if (!$this->isoDateValidate($valore)) {
153 6
            $this->addError("<b>" . $valore . "</b> - $campo non valida. La data deve essere nel formato ISO Es.: 2015-08-01");
154 6
        }
155
156 6
        if ($valore < "2015-01-01") {
157 6
            $this->addError("<b>" . $valore . "</b> - $campo deve essere successiva al 01/01/2015");
158 6
        }
159 6
    }
160
161
    /**
162
     * @param $valore
163
     */
164 3
    public function checkTipoSpesa($valore)
165
    {
166 3
        if (!TipoSpesa::isValidValue($valore)) {
167 3
            $this->addError("<b>" . $valore . "</b> - Codice tipo spesa (tipoSpesa) non valido. Codici validi: " . TipoSpesa::getCostantsValues());
168 3
        }
169 3
    }
170
171
    /**
172
     * @param $valore
173
     */
174 3
    private function checkImporto($valore)
175
    {
176 3
        if (!is_numeric($valore)) {
177 3
            $this->addError("<b>" . $valore . "</b> - Importo (importo) non numerico");
178 3
        }
179 3
    }
180
181
    /**
182
     * @param $valore
183
     * @param $campo
184
     */
185 3
    private function checkRequiredField($valore, $campo)
186
    {
187 3
        if ($valore == "") {
188 3
            $this->addError("Dato spesa mancante campo: " . $campo);
189 3
        }
190 3
    }
191
192
    /**
193
     * @param $campo
194
     * @param $valore
195
     */
196 3
    private function checkDataEmissione($campo, $valore)
197
    {
198 3
        $this->checkDataValida($campo, $valore);
199 3
    }
200
201
    /**
202
     * @param $valore
203
     */
204 3
    public function checkFlagOperazione($valore)
205
    {
206 3
        if (!FlagOperazione::isValidValue($valore)) {
207 3
            $this->addError("<b>" . $valore . "</b> - Flag Operazione (flagOperazione) non valido. Codici validi: " . FlagOperazione::getCostantsValues());
208 3
        }
209 3
    }
210
211
    /**
212
     * @param $valore
213
     */
214 3
    private function checkCfCittadino($valore)
215
    {
216 3
        if (!$this->objCFChecker->isFormallyCorrect($valore)) {
217 3
            $this->addError("<b>" . $valore . "</b> - Codice fiscale (cfCittadino) cittadino non valido");
218 3
        }
219 3
    }
220
221
    /**
222
     * @param $valore
223
     */
224 3
    public function checkDispositivo($valore)
225
    {
226 3
        if (!$this->checkNumericField($valore, 3, true)) {
227 3
            $this->addError("<b>" . $valore . "</b> - Codice dispositivo (dispositivo) non valido: deve essere numerico, al massimo di 3 cifre");
228 3
        }
229 3
    }
230
231
    /**
232
     * @param $valore
233
     */
234 3
    public function checkNumDocumento($valore)
235
    {
236 3
        if (!$this->checkNumericField($valore, 20)) {
237 3
            $this->addError("<b>" . $valore . "</b> - Numero documento (numDocumento) non valido: deve essere numerico, al massimo di 20 cifre");
238 3
        }
239 3
    }
240
241
    /**
242
     * @param            $valore
243
     * @param int        $maxLen
244
     * @param bool|false $zeroFilled
245
     *
246
     * @return bool
247
     */
248 9
    public function checkNumericField($valore, $maxLen=0, $zeroFilled=false)
249
    {
250 9
        if($zeroFilled && $valore!=''){
251 3
            $valore = ltrim(trim($valore), '0');
252 3
        }
253 9
        if(!is_numeric($valore)){
254 9
            return false;
255
        }
256 9
        if(strlen($valore)>1 && substr($valore, 0,2)=='00'){ //because '00123' passed!
257 3
            return false;
258
        }
259 9
        if(is_numeric($maxLen) && $maxLen>0){
260 9
            $maxNumber = pow(10, $maxLen);
261 9
            return !( $valore>=$maxNumber );
262
        }else{
263 3
            return true;
264
        }
265
    }
266
267
    /**
268
     * @param $rigaSpesa
269
     */
270
    private function checkRigaSpesa($rigaSpesa)
271
    {
272
        if(count($rigaSpesa)<6){
273
            $this->addError("Dati spesa incompleti");
274
        }
275
276
        foreach($rigaSpesa as $campo => $valore) {
277
278
            $this->checkDatiSpesa($campo, $valore);
279
        }
280
    }
281
    
282
    /**
283
     * @param $campo
284
     * @param $valore
285
     */
286
    private function checkDatiSpesa($campo, $valore)
287
    {
288
        if ($campo != "flagPagamentoAnticipato") { // flagPagamentoAnticipato e' facoltativo
289
290
            $this->checkRequiredField($valore, $campo);
291
        }
292
293
        switch ($campo) {
294
295
            case 'dataEmissione':
296
            case 'dataPagamento':
297
                $this->checkDataEmissione($campo, $valore);
298
                break;
299
300
            case 'flagOperazione':
301
                $this->checkFlagOperazione($valore);
302
                break;
303
304
            case 'cfCittadino':
305
                $this->checkCfCittadino($valore);
306
                break;
307
308
            case 'dispositivo':
309
                $this->checkDispositivo($valore);
310
                break;
311
312
            case 'numDocumento':
313
                $this->checkNumDocumento($valore);
314
                break;
315
316
        }
317
    }
318
}
319