Validazione Partita IVA tramite Services

This commit is contained in:
Thomas Zilio 2019-09-19 10:42:20 +02:00
parent 93f9e26826
commit 8d1f01e146
5 changed files with 86 additions and 75 deletions

View File

@ -135,7 +135,7 @@ switch (post('op')) {
$partita_iva = is_numeric($partita_iva) ? $anagrafica->nazione->iso2.$partita_iva : $partita_iva;
$check_vat_number = Validate::isValidVatNumber($partita_iva);
if (empty($check_vat_number)) {
if (empty($check_vat_number['valid-format'])) {
flash()->warning(tr('Attenzione: la partita IVA _IVA_ potrebbe non essere valida', [
'_IVA_' => $partita_iva,
]));

View File

@ -59,16 +59,31 @@ switch ($name) {
$partita_iva = !empty($anagrafica) && is_numeric($value) ? $anagrafica->nazione->iso2.$value : $value;
$result = $disponibile;
$check = Validate::isValidVatNumber($partita_iva);
if (empty($check)) {
$message .= '. '.tr('Attenzione: la partita IVA _IVA_ potrebbe non essere valida', [
'_IVA_' => $partita_iva,
]);
if (empty($check['valid-format'])) {
$result = false;
$errors[] = tr('La partita iva inserita non possiede un formato valido');
}
if (empty($check['valid'])) {
$result = false;
$errors[] = tr("Impossibile verificare l'origine della partita iva");
}
$message .= '. ';
if (!empty($errors)) {
$message .= tr('Attenzione').':<ul>';
foreach ($errors as $error) {
$message .= '<li>'.$error.'</li>';
}
$message .= '</ul>';
}
$response = [
'result' => $disponibile,
'result' => $result,
'message' => $message,
'fields' => $check['fields'],
];
break;
@ -79,24 +94,29 @@ switch ($name) {
['email', '<>', ''],
['idanagrafica', '<>', $id_record],
])->count() == 0;
$result = $disponibile;
$message = $disponibile ? tr("L'email non è già inserita in una anagrafica") : tr("L'email è già utilizzata in un'altra anagrafica");
$result = $disponibile;
$errors = [];
$check = Validate::isValidEmail($value);
if (is_bool($check)) {
if (empty($check['valid-format'])) {
$result = false;
$message .= '. '.tr("Attenzione: l'email inserita non possiede un formato valido");
}else {
if(empty($check['format_valid'])){
$result = false;
$message .= '. '.tr("Attenzione: l'email inserita non possiede un formato valido");
$errors[] = tr("L'email inserita non possiede un formato valido");
}
if(empty($check['smtp_check'])){
if (empty($check['smtp-check'])) {
$result = false;
$message .= '. '.tr("Attenzione: impossibile verificare l'origine dell'email");
$errors[] = tr("Impossibile verificare l'origine dell'email");
}
$message .= '. ';
if (!empty($errors)) {
$message .= tr('Attenzione').':<ul>';
foreach ($errors as $error) {
$message .= '<li>'.$error.'</li>';
}
$message .= '</ul>';
}
$response = [

View File

@ -45,29 +45,20 @@ switch (post('op')) {
// Validazione indirizzo email mittente
$check_email = Validate::isValidEmail(post('from_address'));
// Se $check_email non è null e la riposta è negativa --> mostro il messaggio di avviso.
if (!empty($check_email)) {
// Controllo sulla validazione
if (!empty($check_email['valid-format'])) {
flash()->info(tr('Sintassi email verificata'));
if (is_object($check_email) && $check_email->smtp) {
if ($check_email->smtp_check) {
flash()->info(tr('SMTP email verificato'));
} elseif (!$check_email->smtp_check) {
flash()->warning(tr('SMTP email non verificato'));
} else {
flash()->error(tr("Attenzione: l'SMTP email _EMAIL_ sembra non essere valido", [
'_EMAIL_' => $check_email->email,
]));
}
}
} else {
flash()->error(tr("Attenzione: l'indirizzo email _EMAIL_ sembra non essere valido", [
'_EMAIL_' => $check_email->email,
]));
if (is_object($check_email) && !empty($check_email->error->info)) {
flash()->error($check_email->error->info);
}
// Controllo sulla verifica
if (!empty($check_email['smtp-check'])) {
flash()->info(tr('SMTP email verificato'));
} else {
flash()->warning(tr('SMTP email non verificato'));
}
if (isAjaxRequest()) {

View File

@ -120,13 +120,11 @@ class HTMLWrapper implements WrapperInterface
success: function(data) {
data = JSON.parse(data);
if (value == ""){
if (value == "") {
parent.removeClass("has-success").removeClass("has-error");
icon.attr("class", "fa fa-question-circle");
message.tooltipster("content", "'.tr('Validazione').'");
}
else{
} else {
if(data.result) {
icon.attr("class", "fa fa-check");
parent.addClass("has-success").removeClass("has-error");
@ -142,7 +140,8 @@ class HTMLWrapper implements WrapperInterface
fields = data.fields;
Object.keys(fields).forEach(function(element) {
$("[name=" + element + "]").val(fields[element]);
var single_input = $("[name=" + element + "]");
if (!single_input.val()) single_input.val(fields[element]);
});
}

View File

@ -55,15 +55,15 @@ class Validate
public static function isValidVatNumber($vat_number)
{
if (empty($vat_number)) {
return true;
$result['valid-format'] = true;
}
// Controllo sulla sintassi
if (starts_with($vat_number, 'IT') && !static::vatCheckIT($vat_number)) {
return false;
$result['valid-format'] = false;
}
/**
/*
// Controllo con API europea ufficiale
if (extension_loaded('soap')) {
try {
@ -77,64 +77,65 @@ class Validate
} */
// Controllo attraverso apilayer
$access_key = setting('apilayer API key for VAT number');
if (!empty($access_key)) {
if (!extension_loaded('curl')) {
flash()->warning(tr('Estensione cURL non installata'));
if (Services::isEnabled()) {
$response = Services::request('post', 'check_iva', [
'partita_iva' => $vat_number,
]);
$data = Services::responseBody($response);
return true;
if (!empty($data['result'])) {
$result['valid-format'] = $data['result']['format_valid'];
$result['valid'] = $data['result']['valid'];
$fields = [];
// Ragione sociale
$fields['ragione_sociale'] = $data['result']['company_name'];
// Indirizzo
$address = $data['result']['company_address'];
$info = explode(PHP_EOL, $address);
$fields['indirizzo'] = $info[0];
$info = explode(' ', $info[1]);
$fields['cap'] = $info[0];
$fields['citta'] = $info[1];
$fields['provincia'] = $info[2];
$result['fields'] = $fields;
}
}
$ch = curl_init();
$qs = '&vat_number='.urlencode(strtoupper($vat_number));
$url = "http://apilayer.net/api/validate?access_key=$access_key".$qs;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = json_decode(curl_exec($ch));
curl_close($ch);
/*se la riposta è null imposto la relativa proprietà dell'oggetto a 0*/
if ($data->valid == null) {
$data->valid = 0;
}
return $data->valid;
}
return true;
return $result;
}
/**
* Controlla se l'email inserita è valida.
*
* @param string $email
* @param bool $smtp
*
* @return bool|object
* @return array
*/
public static function isValidEmail($email, $smtp = 0)
public static function isValidEmail($email)
{
$result = [];
if (!v::email()->validate($email)) {
return false;
$result['valid-format'] = false;
}
// Controllo attraverso apilayer
if (Services::isEnabled()) {
$response = Services::request('post', 'check_email', [
'email' => $email,
'smtp' => $smtp,
'format' => 1,
]);
$data = Services::responseBody($response);
return $data['result'];
if (!empty($data['result'])) {
$result['valid-format'] = $data['result']['format_valid'];
$result['smtp-check'] = $data['result']['smtp_check'];
}
}
return null;
return $result;
}
public static function isValidTaxCode($codice_fiscale)