Completed
Push — master ( d1ff53...78d2a6 )
by Lorenzo
02:16
created

ValidateHelper::checkRigaSPesa()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 17
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 1 Features 0
Metric Value
c 1
b 1
f 0
dl 0
loc 17
ccs 0
cts 11
cp 0
rs 9.4286
cc 2
eloc 8
nc 2
nop 2
crap 6
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
	public function __construct(\fdisotto\PartitaIVA $objPartitaIVA, \CodiceFiscale\Checker $objCFChecker)
22
	{
23
		$this->arrErrors = array();
24
		$this->objPartitaIVA = $objPartitaIVA;
25
		$this->objCFChecker = $objCFChecker;
26
	}
27
28
    /**
29
     * @param       $codice
30
     * @param       $codice_nome
31
     * @param array $arrCodiciValidi
32
     * @param       $codice_len
33
     */
34
    public function checkCodice($codice, $codice_nome, array $arrCodiciValidi, $codice_len)
35
    {
36
        if($codice==''){
37
            $this->addError("$codice_nome mancante");
38
        }else{
39
            if( is_int($codice_len) && ($codice_len>0) && strlen($codice) != $codice_len){
40
                $this->addError("<b>".$codice."</b> - Il $codice_nome deve essere lungo $codice_len caratteri");
41
            }
42
43
            if(!in_array($codice, $arrCodiciValidi)){
44
                $this->addError("<b>".$codice."</b> - $codice_nome non valido. Codici validi: ".implode(", ",$arrCodiciValidi));
45
            }
46
        }
47
    }
48
49
	/**
50
	 * @param $codiceRegione
51
	 */
52
	public function checkCodiceRegione($codiceRegione)
53
	{
54
        $this->checkCodice($codiceRegione, 'Codice regione (codiceRegione)', CodiceRegione::getCostants(), 3);
55
	}
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
	private function IsoDateValidate($dateStr)
71
	{
72
		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
			return TRUE;
74
		}else{
75
			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
                        $this->checkTipoSpesa($campo, $valore, $arrTipiSpesaPermessi);
96
                        $this->checkImporto($campo, $valore);
97
                    }
98
				}
99
			}
100
		}
101
	}
102
103
	/**
104
	 * @param $arrSpesa
105
	 */
106
	public function checkArrSpesa($arrSpesa)
107
	{
108
		if(empty($arrSpesa)){
109
			$this->addError("Dati spesa mancanti");
110
		}else{
111
112
			$arrFlagOperazione = FlagOperazione::getCostants();
113
114
			// Controllo interno array spesa
115
			foreach($arrSpesa as $rigaSpesa){
116
117
				if(count($rigaSpesa)<6){
118
					$this->addError("Dati spesa incompleti");
119
				}
120
121
                $this->checkRigaSPesa($rigaSpesa, $arrFlagOperazione);
122
			}
123
		}
124
	}
125
126
	/**
127
	 * @param $pIva
128
	 */
129
	public function checkPIva($pIva)
130
	{
131
		if(empty($pIva)){
132
			$this->addError("Partita IVA mancante");
133
		}else{
134
			// Verifica formale della partita IVA
135
			if(!$this->objPartitaIVA->check($pIva)){
136
				$this->addError("<b>".$pIva."</b> - Partita IVA formalmente non corretta");
137
			}
138
		}
139
	}
140
141
	/**
142
	 * @param $cfProprietario
143
	 */
144
	public function checkCfProprietario($cfProprietario)
145
	{
146
		if(empty($cfProprietario)){
147
			$this->addError("Codice fiscale proprietario (cfProprietario) mancante");
148
		}else{
149
			// Verifica formale del codice fiscale
150
			if (!$this->objCFChecker->isFormallyCorrect($cfProprietario)){
151
				$this->addError("<b>".$cfProprietario."</b> - Codice fiscale proprietario (cfProprietario) formalmente non corretto");
152
			}
153
		}
154
	}
155
156
	/**
157
	 * @param $codiceAsl
158
	 */
159
	public function checkCodiceAsl($codiceAsl)
160
	{
161
        $this->checkCodice($codiceAsl, 'Codice ASL (codiceAsl)', CodiceAsl::getCostants(), 3);
162
	}
163
164
    /**
165
     * @param $campo
166
     * @param $valore
167
     */
168
    private function checkDataValida($campo, $valore)
169
    {
170
        if (!$this->IsoDateValidate($valore)) {
171
            $this->addError("<b>" . $valore . "</b> - $campo non valida. La data deve essere nel formato ISO Es.: 2015-08-01");
172
        }
173
174
        if ($valore < "2015-01-01") {
175
            $this->addError("<b>" . $valore . "</b> - $campo deve essere successiva al 01/01/2015");
176
        }
177
    }
178
179
    /**
180
     * @param $campo
181
     * @param $valore
182
     * @param $arrTipiSpesaPermessi
183
     */
184
    private function checkTipoSpesa($campo, $valore, $arrTipiSpesaPermessi)
185
    {
186 View Code Duplication
        if ($campo == "tipoSpesa" && !in_array($valore, $arrTipiSpesaPermessi)) {
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
187
            $this->addError("<b>" . $valore . "</b> - Codice tipo spesa (tipoSpesa) non valido. Codici validi: " . implode(", ", $arrTipiSpesaPermessi));
188
        }
189
    }
190
191
    /**
192
     * @param $campo
193
     * @param $valore
194
     */
195
    private function checkImporto($campo, $valore)
196
    {
197
        if ($campo == "importo" && !is_numeric($valore)) {
198
            $this->addError("<b>" . $valore . "</b> - Importo (importo) non numerico");
199
        }
200
    }
201
202
    /**
203
     * @param $valore
204
     * @param $campo
205
     */
206
    private function checkRequiredField($valore, $campo)
207
    {
208
        if ($valore == "" && $campo != "flagPagamentoAnticipato") { // flagPagamentoAnticipato e' facoltativo
209
            $this->addError("Dato spesa mancante campo: " . $campo);
210
        }
211
    }
212
213
    /**
214
     * @param $campo
215
     * @param $valore
216
     */
217
    private function checkDataEmissione($campo, $valore)
218
    {
219
        if ($campo == "dataEmissione" || $campo == "dataPagamento") {
220
            $this->checkDataValida($campo, $valore);
221
        }
222
    }
223
224
    /**
225
     * @param $campo
226
     * @param $valore
227
     * @param $arrFlagOperazione
228
     */
229
    private function checkFlagOperazione($campo, $valore, $arrFlagOperazione)
230
    {
231 View Code Duplication
        if ($campo == "flagOperazione" && (!in_array($valore, $arrFlagOperazione))) {
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
232
            $this->addError("<b>" . $valore . "</b> - Flag Operazione (flagOperazione) non valido. Codici validi: " . implode(", ", $arrFlagOperazione));
233
        }
234
    }
235
236
    /**
237
     * @param $campo
238
     * @param $valore
239
     */
240
    private function checkCfCittadino($campo, $valore)
241
    {
242
        if ($campo == "cfCittadino" && !$this->objCFChecker->isFormallyCorrect($valore)) {
243
            $this->addError("<b>" . $valore . "</b> - Codice fiscale (cfCittadino) cittadino non valido");
244
        }
245
    }
246
247
    /**
248
     * @param $campo
249
     * @param $valore
250
     */
251
    private function checkDispositivo($campo, $valore)
252
    {
253 View Code Duplication
        if ($campo == "dispositivo" && (!is_numeric($valore) || strlen($valore) > 3)) {
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
254
            $this->addError("<b>" . $valore . "</b> - Codice dispositivo (dispositivo) non valido: deve essere numerico, al massimo di 3 cifre");
255
        }
256
    }
257
258
    /**
259
     * @param $campo
260
     * @param $valore
261
     */
262
    private function checkNumDocumento($campo, $valore)
263
    {
264 View Code Duplication
        if ($campo == "numDocumento" && (!is_numeric($valore) || strlen($valore) > 20)) {
1 ignored issue
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
265
            $this->addError("<b>" . $valore . "</b> - Numero documento (numDocumento) non valido: deve essere numerico, al massimo di 20 cifre");
266
        }
267
    }
268
269
    /**
270
     * @param $rigaSpesa
271
     * @param $arrFlagOperazione
272
     */
273
    private function checkRigaSPesa($rigaSpesa, $arrFlagOperazione)
274
    {
275
        foreach($rigaSpesa as $campo => $valore) {
276
277
            $this->checkRequiredField($valore, $campo);
278
279
            $this->checkDataEmissione($campo, $valore);
280
281
            $this->checkFlagOperazione($campo, $valore, $arrFlagOperazione);
282
283
            $this->checkCfCittadino($campo, $valore);
284
285
            $this->checkDispositivo($campo, $valore);
286
287
            $this->checkNumDocumento($campo, $valore);
288
        }
289
    }
290
291
}
292