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)){ |
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
|
|
|
$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)) { |
|
|
|
|
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))) { |
|
|
|
|
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)) { |
|
|
|
|
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)) { |
|
|
|
|
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
|
|
|
|
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.