Completed
Push — master ( 33bd8c...1cf10e )
by Lorenzo
03:49
created

ValidateHelper::checkArrVociSpesa()   C

Complexity

Conditions 7
Paths 7

Size

Total Lines 25
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 56

Importance

Changes 4
Bugs 2 Features 0
Metric Value
c 4
b 2
f 0
dl 0
loc 25
ccs 0
cts 17
cp 0
rs 6.7273
cc 7
eloc 12
nc 7
nop 1
crap 56
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 6
	public function __construct(\fdisotto\PartitaIVA $objPartitaIVA, \CodiceFiscale\Checker $objCFChecker)
22
	{
23 6
		$this->arrErrors = array();
24 6
		$this->objPartitaIVA = $objPartitaIVA;
25 6
		$this->objCFChecker = $objCFChecker;
26 6
	}
27
28
    /**
29
     * @param       $codice
30
     * @param       $codice_nome
31
     * @param array $arrCodiciValidi
32
     * @param       $codice_len
33
     */
34 3
    public function checkCodice($codice, $codice_nome, array $arrCodiciValidi, $codice_len)
35
    {
36 3
        if($codice==''){
37 3
            $this->addError("$codice_nome mancante");
38 3
        }else{
39 3
            if( is_int($codice_len) && ($codice_len>0) && strlen($codice) != $codice_len){
40 3
                $this->addError("<b>".$codice."</b> - Il $codice_nome deve essere lungo $codice_len caratteri");
41 3
            }
42
43 3
            if(!in_array($codice, $arrCodiciValidi, null)){
44 3
                $this->addError("<b>".$codice."</b> - $codice_nome non valido. Codici validi: ".implode(", ",$arrCodiciValidi));
45 3
            }
46
        }
47 3
    }
48
49
	/**
50
	 * @param $codiceRegione
51
	 */
52 3
	public function checkCodiceRegione($codiceRegione)
53
	{
54 3
        $this->checkCodice($codiceRegione, 'Codice regione (codiceRegione)', CodiceRegione::getCostants(), 3);
55 3
	}
56
57
	/**
58
	 * @param $codiceSSA
59
	 */
60
	public function checkCodiceSSA($codiceSSA)
61
	{
62
        $this->checkCodice($codiceSSA, 'Codice SSA (codiceSSA)', CodiceSSA::getCostants(), 0);
63
	}
64
65
	/**
66
	 * @param $dateStr
67
	 *
68
	 * @return bool
69
	 */
70 3
	public function isoDateValidate($dateStr)
71
	{
72 3
		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){
73 3
			return TRUE;
74
		}else{
75 3
			return FALSE;
76
		}
77
	}
78
79
	/**+
80
	 * @param $arrVociSpesa
81
	 */
82
	public function checkArrVociSpesa($arrVociSpesa)
83
	{
84
	if(empty($arrVociSpesa)){
85
86
			$this->addError("Voci spesa mancanti");
87
		}else{
88
89
			$arrTipiSpesaPermessi = TipoSpesa::getCostants();
90
91
			foreach ($arrVociSpesa as $rigaVociSpesa){
92
				foreach ($rigaVociSpesa as $colonnaVociSpesa){
93
					foreach($colonnaVociSpesa as $campo=>$valore){
94
95
                        if ($campo == "tipoSpesa"){
96
97
                            $this->checkTipoSpesa($valore, $arrTipiSpesaPermessi);
98
                        }elseif ($campo == "importo") {
99
100
                            $this->checkImporto($valore);
101
                        }
102
                    }
103
				}
104
			}
105
		}
106
	}
107
108
	/**
109
	 * @param $arrSpesa
110
	 */
111
	public function checkArrSpesa($arrSpesa)
112
	{
113
		if(empty($arrSpesa)){
114
			$this->addError("Dati spesa mancanti");
115
		}else{
116
117
			$arrFlagOperazione = FlagOperazione::getCostants();
118
119
			// Controllo interno array spesa
120
			foreach($arrSpesa as $rigaSpesa){
121
122
				if(count($rigaSpesa)<6){
123
					$this->addError("Dati spesa incompleti");
124
				}
125
126
                $this->checkRigaSPesa($rigaSpesa, $arrFlagOperazione);
127
			}
128
		}
129
	}
130
131
	/**
132
	 * @param $pIva
133
	 */
134
	public function checkPIva($pIva)
135
	{
136
		if(empty($pIva)){
137
			$this->addError("Partita IVA mancante");
138
		}else{
139
			// Verifica formale della partita IVA
140
			if(!$this->objPartitaIVA->check($pIva)){
141
				$this->addError("<b>".$pIva."</b> - Partita IVA formalmente non corretta");
142
			}
143
		}
144
	}
145
146
	/**
147
	 * @param $cfProprietario
148
	 */
149
	public function checkCfProprietario($cfProprietario)
150
	{
151
		if(empty($cfProprietario)){
152
			$this->addError("Codice fiscale proprietario (cfProprietario) mancante");
153
		}else{
154
			// Verifica formale del codice fiscale
155
			if (!$this->objCFChecker->isFormallyCorrect($cfProprietario)){
156
				$this->addError("<b>".$cfProprietario."</b> - Codice fiscale proprietario (cfProprietario) formalmente non corretto");
157
			}
158
		}
159
	}
160
161
	/**
162
	 * @param $codiceAsl
163
	 */
164
	public function checkCodiceAsl($codiceAsl)
165
	{
166
        $this->checkCodice($codiceAsl, 'Codice ASL (codiceAsl)', CodiceAsl::getCostants(), 3);
167
	}
168
169
    /**
170
     * @param $campo
171
     * @param $valore
172
     */
173
    private function checkDataValida($campo, $valore)
174
    {
175
        if (!$this->isoDateValidate($valore)) {
176
            $this->addError("<b>" . $valore . "</b> - $campo non valida. La data deve essere nel formato ISO Es.: 2015-08-01");
177
        }
178
179
        if ($valore < "2015-01-01") {
180
            $this->addError("<b>" . $valore . "</b> - $campo deve essere successiva al 01/01/2015");
181
        }
182
    }
183
184
    /**
185
     * @param $valore
186
     * @param $arrTipiSpesaPermessi
187
     */
188
    private function checkTipoSpesa($valore, $arrTipiSpesaPermessi)
189
    {
190 View Code Duplication
        if (!in_array($valore, $arrTipiSpesaPermessi, null)) {
191
            $this->addError("<b>" . $valore . "</b> - Codice tipo spesa (tipoSpesa) non valido. Codici validi: " . implode(", ", $arrTipiSpesaPermessi));
192
        }
193
    }
194
195
    /**
196
     * @param $valore
197
     */
198
    private function checkImporto($valore)
199
    {
200
        if (!is_numeric($valore)) {
201
            $this->addError("<b>" . $valore . "</b> - Importo (importo) non numerico");
202
        }
203
    }
204
205
    /**
206
     * @param $valore
207
     * @param $campo
208
     */
209
    private function checkRequiredField($valore, $campo)
210
    {
211
        if ($valore == "" && $campo != "flagPagamentoAnticipato") { // flagPagamentoAnticipato e' facoltativo
212
            $this->addError("Dato spesa mancante campo: " . $campo);
213
        }
214
    }
215
216
    /**
217
     * @param $campo
218
     * @param $valore
219
     */
220
    private function checkDataEmissione($campo, $valore)
221
    {
222
            $this->checkDataValida($campo, $valore);
223
    }
224
225
    /**
226
     * @param $valore
227
     * @param $arrFlagOperazione
228
     */
229
    private function checkFlagOperazione($valore, $arrFlagOperazione)
230
    {
231 View Code Duplication
        if (!in_array($valore, $arrFlagOperazione, null)) {
232
            $this->addError("<b>" . $valore . "</b> - Flag Operazione (flagOperazione) non valido. Codici validi: " . implode(", ", $arrFlagOperazione));
233
        }
234
    }
235
236
    /**
237
     * @param $valore
238
     */
239
    private function checkCfCittadino($valore)
240
    {
241
        if (!$this->objCFChecker->isFormallyCorrect($valore)) {
242
            $this->addError("<b>" . $valore . "</b> - Codice fiscale (cfCittadino) cittadino non valido");
243
        }
244
    }
245
246
    /**
247
     * @param $valore
248
     */
249
    private function checkDispositivo($valore)
250
    {
251 View Code Duplication
        if (!is_numeric($valore) || strlen($valore) > 3) {
252
            $this->addError("<b>" . $valore . "</b> - Codice dispositivo (dispositivo) non valido: deve essere numerico, al massimo di 3 cifre");
253
        }
254
    }
255
256
    /**
257
     * @param $valore
258
     */
259
    private function checkNumDocumento($valore)
260
    {
261 View Code Duplication
        if (!is_numeric($valore) || strlen($valore) > 20) {
262
            $this->addError("<b>" . $valore . "</b> - Numero documento (numDocumento) non valido: deve essere numerico, al massimo di 20 cifre");
263
        }
264
    }
265
266
    /**
267
     * @param $rigaSpesa
268
     * @param $arrFlagOperazione
269
     */
270
    private function checkRigaSPesa($rigaSpesa, $arrFlagOperazione)
271
    {
272
        foreach($rigaSpesa as $campo => $valore) {
273
274
            $this->checkRequiredField($valore, $campo);
275
276
            if ($campo == "dataEmissione" || $campo == "dataPagamento") {
277
278
                $this->checkDataEmissione($campo, $valore);
279
            }elseif ($campo == "flagOperazione") {
280
281
                $this->checkFlagOperazione($valore, $arrFlagOperazione);
282
            }elseif ($campo == "cfCittadino") {
283
284
                $this->checkCfCittadino($valore);
285
            }elseif ($campo == "dispositivo") {
286
287
                $this->checkDispositivo($valore);
288
            }elseif ($campo == "numDocumento") {
289
290
                $this->checkNumDocumento($valore);
291
            }
292
        }
293
    }
294
295
}
296