ValidateHelper::checkRequiredField()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

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