Merge branch 'fronkdev' into 'master'
Added Iban&Bic Validation to Address/Form See merge request fronk/thetool!161
This commit is contained in:
@@ -23,7 +23,7 @@
|
||||
<li class="breadcrumb-item"><a href="<?=self::getUrl("Dashboard")?>"><?=MFAPPNAME_SLUG?></a></li>
|
||||
<li class="breadcrumb-item"><a href="<?=self::getUrl("Address")?>">Personen & Firmen</a></li>
|
||||
<?php if($address->id): ?>
|
||||
<li class="breadcrumb-item"><a href="<?=self::getUrl("Address", "View", ['id' => $address->id])?>"><?=$address->getCompanyOrName()?> [<?=$address->customer_number?>]</a></li>
|
||||
<li class="breadcrumb-item"><a href="<?=self::getUrl("Address", "View", ['id' => $address->id])?>"><?=(is_object($address) && get_class($address) == "Address") ? $address->getCompanyOrName() : ""?> [<?=$address->customer_number?>]</a></li>
|
||||
<?php endif; ?>
|
||||
<li class="breadcrumb-item active"><?=($address->id) ? "bearbeiten" : "Neu" ?></li>
|
||||
</ol>
|
||||
@@ -169,7 +169,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h4>Verrechnungsdaten</h4>
|
||||
<h4 id="billing-data">Verrechnungsdaten</h4>
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<div class="form-group row">
|
||||
@@ -228,6 +228,11 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-group row">
|
||||
<label class="col-lg-2 col-form-label" for="bank_account_bic"></label>
|
||||
<div class="col-lg-10 alert alert-danger hidden" id="bank-error"></div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -400,6 +405,9 @@
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
var bankdata_valid = false;
|
||||
|
||||
$("#parent_id").select2({
|
||||
allowClear: true,
|
||||
placeholder: ""
|
||||
@@ -407,9 +415,7 @@
|
||||
$("#addresstypes").select2();
|
||||
|
||||
|
||||
|
||||
|
||||
function validateIban(iban) {
|
||||
function validateIbanFormat(iban) {
|
||||
if(!iban) {
|
||||
return false;
|
||||
}
|
||||
@@ -446,15 +452,87 @@
|
||||
}
|
||||
}
|
||||
|
||||
function validateIbanBic(iban, bic) {
|
||||
if(!iban) return false;
|
||||
iban = iban.toUpperCase().replace(/\s+/, '');
|
||||
|
||||
$.post("<?=self::getUrl("Address", "api")?>", {
|
||||
do: "validateIbanBic",
|
||||
iban: iban,
|
||||
bic: bic
|
||||
},
|
||||
function(success) {
|
||||
if(success.status == "OK") {
|
||||
var data = success.result;
|
||||
$("#bank-error").hide();
|
||||
$("#bank-error").text("");
|
||||
|
||||
if(data.iban_correct && !data.iban_sus && data.bic_correct) {
|
||||
bankdata_valid = true;
|
||||
$('#addressForm').submit();
|
||||
return;
|
||||
}
|
||||
|
||||
var bank_error = [];
|
||||
|
||||
if(!data.iban_correct) {
|
||||
$("#bank_account_iban").addClass("invalid");
|
||||
bank_error.push("Ungültige IBAN!");
|
||||
}
|
||||
if(data.iban_sus) {
|
||||
$("#bank_account_iban").addClass("invalid");
|
||||
bank_error.push("IBAN verdächtig (" + data.iban_sus + ")!");
|
||||
}
|
||||
if(!data.bic_correct) {
|
||||
$("#bank_account_bic").addClass("invalid");
|
||||
bank_error.push("Ungültige BIC!");
|
||||
if(Array.isArray(data.bic)) {
|
||||
bank_error.push(" Mögliche korrekte BIC: " + data.bic.join(", "));
|
||||
}
|
||||
}
|
||||
|
||||
$("#bank-error").html(bank_error.join("<br />\n"));
|
||||
$("#bank-error").show();
|
||||
$('html, body').animate( {scrollTop: $('#billing-data').offset().top - 230}, 200);
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
$("#bank-error").text("Beim Validieren der Bankdaten ist ein Fehler aufgetreten.");
|
||||
}
|
||||
},
|
||||
"json"
|
||||
);
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
$('#addressForm').submit(function(e) {
|
||||
$("#error").hide();
|
||||
if($('#billing_type').val() == "sepa" && !validateIban($("#bank_account_iban").val())) {
|
||||
$("#error").show();
|
||||
console.log("nope");
|
||||
$("#bank-error").hide();
|
||||
|
||||
if($('#billing_type').val() == "sepa") {
|
||||
console.log("bankdata_valid (1): " + bankdata_valid);
|
||||
if(bankdata_valid) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!validateIbanFormat($("#bank_account_iban").val())) {
|
||||
$("#error").show();
|
||||
console.log("nope");
|
||||
}
|
||||
|
||||
console.log("bankdata_valid: " + bankdata_valid);
|
||||
if($("#bank_account_iban").val() != "<?=$address->bank_account_iban?>" || $("#bank_account_bic").val() != "<?=$address->bank_account_bic?>") {
|
||||
validateIbanBic($("#bank_account_iban").val(), $("#bank_account_bic").val());
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -686,47 +686,13 @@ class AddressController extends mfBaseController {
|
||||
return false;
|
||||
}
|
||||
|
||||
$creds = TT_IBAN_VALIDATOR_USER.":".TT_IBAN_VALIDATOR_PASS;
|
||||
$b64creds = base64_encode($creds);
|
||||
|
||||
$ctx = stream_context_create([
|
||||
"http" => [
|
||||
"header" => "Authorization: Basic $b64creds"
|
||||
]
|
||||
]);
|
||||
|
||||
$url = TT_IBAN_VALIDATOR_BASEURL.$iban;
|
||||
$resp = file_get_contents($url, false, $ctx);
|
||||
|
||||
if($resp) {
|
||||
$data = json_decode($resp);
|
||||
$result = IbanValidator::validate($iban, $bic);
|
||||
if(is_array($result) && $result) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
$iban_correct = false;
|
||||
$iban_sus = false;
|
||||
$bic_correct = false;
|
||||
$potential_bics = [];
|
||||
return false;
|
||||
|
||||
if($data->result == "passed") {
|
||||
$iban_correct = true;
|
||||
}
|
||||
|
||||
if(is_array($data->all_bic_candidates) && count($data->all_bic_candidates)) {
|
||||
foreach($data->all_bic_candidates as $bic_candidate) {
|
||||
if(!$bic_candidate->bic) continue;
|
||||
$potential_bics[] = $bic_candidate->bic;
|
||||
|
||||
if($bic_candidate->bic == $bic) {
|
||||
$bic_correct = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($data->iban_listed) {
|
||||
$iban_sus = $data->iban_listed;
|
||||
}
|
||||
|
||||
return ["iban" => $data->iban, "bic" => $potential_bics, "iban_correct" => $iban_correct, "iban_sus" => $iban_sus, "bic_correct" => $bic_correct];
|
||||
}
|
||||
|
||||
|
||||
|
||||
57
lib/IbanValidator/IbanValidator.php
Normal file
57
lib/IbanValidator/IbanValidator.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
class IbanValidator {
|
||||
|
||||
public static function validate($iban, $bic = false) {
|
||||
if(!$iban) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$creds = TT_IBAN_VALIDATOR_USER.":".TT_IBAN_VALIDATOR_PASS;
|
||||
$b64creds = base64_encode($creds);
|
||||
|
||||
$ctx = stream_context_create([
|
||||
"http" => [
|
||||
"header" => "Authorization: Basic $b64creds"
|
||||
]
|
||||
]);
|
||||
|
||||
$url = TT_IBAN_VALIDATOR_BASEURL.$iban;
|
||||
$resp = file_get_contents($url, false, $ctx);
|
||||
|
||||
if($resp) {
|
||||
$data = json_decode($resp);
|
||||
}
|
||||
|
||||
$iban_correct = false;
|
||||
$iban_sus = false;
|
||||
$bic_correct = false;
|
||||
$potential_bics = [];
|
||||
$bank = false;
|
||||
|
||||
if($data->result == "passed") {
|
||||
$iban_correct = true;
|
||||
}
|
||||
|
||||
if(is_array($data->all_bic_candidates) && count($data->all_bic_candidates)) {
|
||||
foreach($data->all_bic_candidates as $bic_candidate) {
|
||||
if(!$bic_candidate->bic) continue;
|
||||
$potential_bics[] = $bic_candidate->bic;
|
||||
|
||||
if($bic_candidate->bic == $bic) {
|
||||
$bic_correct = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($data->iban_listed) {
|
||||
$iban_sus = $data->iban_listed;
|
||||
}
|
||||
|
||||
if($data->bank) {
|
||||
$bank = $data->bank;
|
||||
}
|
||||
|
||||
return ["bank" => $bank, "iban" => $data->iban, "bic" => $potential_bics, "iban_correct" => $iban_correct, "iban_sus" => $iban_sus, "bic_correct" => $bic_correct];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user