mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-03-12 17:20:08 +01:00
Compilazione IBAN automatica per modulo Banche
This commit is contained in:
parent
aa10ccef1f
commit
364580bc33
@ -136,7 +136,7 @@ Input.prototype.getElement = function () {
|
|||||||
/**
|
/**
|
||||||
* Gestisce l'abilitazione e la disibilitazione dell'input sulla base del valore indicato.
|
* Gestisce l'abilitazione e la disibilitazione dell'input sulla base del valore indicato.
|
||||||
*
|
*
|
||||||
* @param {bool} value
|
* @param {boolean} value
|
||||||
* @returns {Input}
|
* @returns {Input}
|
||||||
*/
|
*/
|
||||||
Input.prototype.setDisabled = function (value) {
|
Input.prototype.setDisabled = function (value) {
|
||||||
@ -215,6 +215,15 @@ Input.prototype.enable = function () {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controlla se l'input è disabilitato.
|
||||||
|
*
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
Input.prototype.isDisabled = function () {
|
||||||
|
return this.element.hasClass("disabled")
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restituisce un oggetto cotentente le caratteristiche dell'input.
|
* Restituisce un oggetto cotentente le caratteristiche dell'input.
|
||||||
*
|
*
|
||||||
|
@ -18,7 +18,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
|
use Modules\Anagrafiche\Nazione;
|
||||||
use Modules\Banche\Banca;
|
use Modules\Banche\Banca;
|
||||||
|
use Modules\Banche\IBAN;
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
@ -52,7 +54,6 @@ switch (filter('op')) {
|
|||||||
|
|
||||||
$banca->nome = post('nome');
|
$banca->nome = post('nome');
|
||||||
$banca->iban = post('iban');
|
$banca->iban = post('iban');
|
||||||
$banca->bic = post('bic');
|
|
||||||
|
|
||||||
$banca->note = post('note');
|
$banca->note = post('note');
|
||||||
$banca->id_pianodeiconti3 = post('id_pianodeiconti3');
|
$banca->id_pianodeiconti3 = post('id_pianodeiconti3');
|
||||||
@ -75,5 +76,41 @@ switch (filter('op')) {
|
|||||||
'_TYPE_' => 'Banca',
|
'_TYPE_' => 'Banca',
|
||||||
]));
|
]));
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'compose':
|
||||||
|
$nazione = Nazione::find(filter('id_nazione'));
|
||||||
|
|
||||||
|
$iban = IBAN::generate([
|
||||||
|
'nation' => $nazione->iso2,
|
||||||
|
'bank_code' => filter('bank_code'),
|
||||||
|
'branch_code' => filter('branch_code'),
|
||||||
|
'account_number' => filter('account_number'),
|
||||||
|
'check_digits' => filter('check_digits'),
|
||||||
|
'national_check_digits' => filter('national_check_digits'),
|
||||||
|
]);
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'iban' => $iban->getIban(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'decompose':
|
||||||
|
$iban = new IBAN(filter('iban'));
|
||||||
|
$nazione = Nazione::where('iso2', '=', $iban->getNation())->first();
|
||||||
|
|
||||||
|
echo json_encode([
|
||||||
|
'id_nazione' => [
|
||||||
|
'id' => $nazione->id,
|
||||||
|
'text' => $nazione->nome,
|
||||||
|
],
|
||||||
|
'bank_code' => $iban->getBankCode(),
|
||||||
|
'branch_code' => $iban->getBranchCode(),
|
||||||
|
'account_number' => $iban->getAccountNumber(),
|
||||||
|
'check_digits' => $iban->getCheckDigits(),
|
||||||
|
'national_check_digits' => $iban->getNationalCheckDigits(),
|
||||||
|
]);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -58,11 +58,9 @@ include_once __DIR__.'/../../core.php';
|
|||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
{[ "type": "text", "label": "<?php echo tr('IBAN'); ?>", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
|
{[ "type": "text", "label": "<?php echo tr('IBAN'); ?>", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="col-md-4">
|
<div class="row">
|
||||||
{[ "type": "text", "label": "<?php echo tr('BIC'); ?>", "name": "bic", "required": "1", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="col-md-6">
|
<div class="col-md-6">
|
||||||
{[ "type": "text", "label": "<?php echo tr('ID Creditore SEPA'); ?>", "name": "creditor_id", "class": "alphanumeric-mask", "value": "$creditor_id$", "help": "<?php echo tr("Codice identificativo per l'azienda nell'area SEPA. Nel caso di aziende aderenti alla procedura Allineamento Elettronico Archivio per le quali non risulta reperibile in CF/PIVA viene generato un codice identificativo non significativo (NOTPROVIDEDXXXXXXXXXXXX)."); ?>" ]}
|
{[ "type": "text", "label": "<?php echo tr('ID Creditore SEPA'); ?>", "name": "creditor_id", "class": "alphanumeric-mask", "value": "$creditor_id$", "help": "<?php echo tr("Codice identificativo per l'azienda nell'area SEPA. Nel caso di aziende aderenti alla procedura Allineamento Elettronico Archivio per le quali non risulta reperibile in CF/PIVA viene generato un codice identificativo non significativo (NOTPROVIDEDXXXXXXXXXXXX)."); ?>" ]}
|
||||||
</div>
|
</div>
|
||||||
@ -79,9 +77,45 @@ include_once __DIR__.'/../../core.php';
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<!-- Composizione IBAN -->
|
||||||
|
<div class="box box-info">
|
||||||
|
<div class="box-header">
|
||||||
|
<h3 class="box-title"><?php echo tr('Composizione IBAN'); ?></h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box-body">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
{[ "type": "select", "label": "<?php echo tr('Nazione'); ?>", "name": "id_nazione", "value": "$id_nazione$", "ajax-source": "nazioni" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Codice banca nazionale (ABI e BIC)'); ?>", "name": "branch_code", "class": "alphanumeric-mask", "value": "$branch_code$" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Codice filiale (CAB)'); ?>", "name": "bank_code", "class": "alphanumeric-mask", "value": "$bank_code$" ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Numero account'); ?>", "name": "account_number", "class": "alphanumeric-mask", "value": "$account_number$"]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Cifre di controllo'); ?>", "name": "check_digits", "class": "alphanumeric-mask", "value": "$check_digits$" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-4">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Cifre di verifica nazionale'); ?>", "name": "national_check_digits", "class": "alphanumeric-mask", "value": "$national_check_digits$" ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
// Collegamenti diretti (numerici)
|
// Collegamenti diretti (numerici)
|
||||||
$numero_documenti = $dbo->fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).'
|
$numero_documenti = $dbo->fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).'
|
||||||
@ -101,3 +135,99 @@ if (!empty($numero_documenti)) {
|
|||||||
<a class="btn btn-danger ask" data-backto="record-list">
|
<a class="btn btn-danger ask" data-backto="record-list">
|
||||||
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var iban = input("iban");
|
||||||
|
|
||||||
|
var branch_code = input("branch_code");
|
||||||
|
var bank_code = input("bank_code");
|
||||||
|
var account_number = input("account_number");
|
||||||
|
var check_digits = input("check_digits");
|
||||||
|
var national_check_digits = input("national_check_digits");
|
||||||
|
var id_nazione = input("id_nazione");
|
||||||
|
|
||||||
|
var components = [branch_code, bank_code, account_number, check_digits, national_check_digits, id_nazione];
|
||||||
|
|
||||||
|
$(document).ready(function (){
|
||||||
|
iban.trigger("change");
|
||||||
|
});
|
||||||
|
|
||||||
|
iban.change(function () {
|
||||||
|
if (!iban.isDisabled()){
|
||||||
|
let value = iban.get();
|
||||||
|
for (const component of components){
|
||||||
|
component.setDisabled(value !== "")
|
||||||
|
}
|
||||||
|
|
||||||
|
scomponiIban();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
for (const component of components){
|
||||||
|
component.change(function () {
|
||||||
|
let i = input(this);
|
||||||
|
if (!i.isDisabled()) {
|
||||||
|
iban.setDisabled(i.get() !== "")
|
||||||
|
|
||||||
|
componiIban();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function scomponiIban() {
|
||||||
|
$.ajax({
|
||||||
|
url: globals.rootdir + '/actions.php',
|
||||||
|
data: {
|
||||||
|
id_module: globals.id_module,
|
||||||
|
op: "decompose",
|
||||||
|
iban: iban.get(),
|
||||||
|
},
|
||||||
|
type: 'GET',
|
||||||
|
dataType: "json",
|
||||||
|
success: function (response) {
|
||||||
|
compilaCampi(response);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function componiIban() {
|
||||||
|
// Controllo su campi con valore impostato
|
||||||
|
let continua = false;
|
||||||
|
for (const component of components){
|
||||||
|
continua |= !([undefined, null, ""].includes(component.get()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!continua){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: globals.rootdir + '/actions.php',
|
||||||
|
data: {
|
||||||
|
id_module: globals.id_module,
|
||||||
|
op: "compose",
|
||||||
|
branch_code: branch_code.get(),
|
||||||
|
bank_code: bank_code.get(),
|
||||||
|
account_number: account_number.get(),
|
||||||
|
check_digits: check_digits.get(),
|
||||||
|
national_check_digits: national_check_digits.get(),
|
||||||
|
id_nazione: id_nazione.get(),
|
||||||
|
},
|
||||||
|
type: 'GET',
|
||||||
|
dataType: "json",
|
||||||
|
success: function (response) {
|
||||||
|
compilaCampi(response);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function compilaCampi(values) {
|
||||||
|
for([key, value] of Object.entries(values)) {
|
||||||
|
if (typeof value === 'object' && value !== null) {
|
||||||
|
input(key).getElement().selectSetNew(value.id, value.text, value);
|
||||||
|
} else {
|
||||||
|
input(key).set(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
@ -23,6 +23,7 @@ use Common\SimpleModelTrait;
|
|||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Modules\Anagrafiche\Anagrafica;
|
use Modules\Anagrafiche\Anagrafica;
|
||||||
|
use Modules\Anagrafiche\Nazione;
|
||||||
|
|
||||||
class Banca extends Model
|
class Banca extends Model
|
||||||
{
|
{
|
||||||
@ -65,6 +66,17 @@ class Banca extends Model
|
|||||||
{
|
{
|
||||||
$this->fixPredefined();
|
$this->fixPredefined();
|
||||||
|
|
||||||
|
// Camponenti IBAN
|
||||||
|
$iban = new IBAN($this->iban);
|
||||||
|
$nazione = Nazione::where('iso2', '=', $iban->getNation())->first();
|
||||||
|
$this->id_nazione = $nazione->id;
|
||||||
|
$this->iban = $iban->getIban();
|
||||||
|
$this->bank_code = $iban->getBankCode();
|
||||||
|
$this->branch_code = $iban->getBranchCode();
|
||||||
|
$this->account_number = $iban->getAccountNumber();
|
||||||
|
$this->check_digits = $iban->getCheckDigits();
|
||||||
|
$this->national_check_digits = $iban->getNationalCheckDigits();
|
||||||
|
|
||||||
return parent::save($options);
|
return parent::save($options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ use UnexpectedValueException;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Format:
|
* Format:
|
||||||
* b = National bank code (Codice ABI)
|
* b = National bank code (Codice ABI e BIC)
|
||||||
* s = Bank/branch code (sort code, or CAB – Codice d'Avviamento Bancario)
|
* s = Bank/branch code (sort code, or CAB – Codice d'Avviamento Bancario)
|
||||||
* c = Account number
|
* c = Account number
|
||||||
* d = Account type
|
* d = Account type
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Modules\Banche\Banca;
|
||||||
use Modules\Fatture\Fattura;
|
use Modules\Fatture\Fattura;
|
||||||
use Modules\Fatture\Gestori\Movimenti as GestoreMovimenti;
|
use Modules\Fatture\Gestori\Movimenti as GestoreMovimenti;
|
||||||
|
|
||||||
@ -14,3 +15,9 @@ foreach ($fatture as $fattura) {
|
|||||||
$gestore = new GestoreMovimenti($fattura);
|
$gestore = new GestoreMovimenti($fattura);
|
||||||
$gestore->registra();
|
$gestore->registra();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Completamento automatico informazioni IBAN per banche
|
||||||
|
$banche = Banca::all();
|
||||||
|
foreach ($banche as $banca) {
|
||||||
|
$banca->save();
|
||||||
|
}
|
||||||
|
@ -168,3 +168,12 @@ INSERT INTO `zz_group_module` (`idgruppo`, `idmodule`, `name`, `clause`, `positi
|
|||||||
|
|
||||||
-- Fix widget crediti clienti
|
-- Fix widget crediti clienti
|
||||||
UPDATE `zz_widgets` SET `query` = 'SELECT \n CONCAT_WS(\' \', REPLACE(REPLACE(REPLACE(FORMAT((\n SELECT SUM(da_pagare-pagato)), 2), \',\', \'#\'), \'.\', \',\'),\'#\', \'.\'), \'€\') AS dato FROM (co_scadenziario INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir=\'entrata\' AND co_documenti.idstatodocumento!=1 |segment| AND 1=1' WHERE `zz_widgets`.`name` = 'Crediti da clienti';
|
UPDATE `zz_widgets` SET `query` = 'SELECT \n CONCAT_WS(\' \', REPLACE(REPLACE(REPLACE(FORMAT((\n SELECT SUM(da_pagare-pagato)), 2), \',\', \'#\'), \'.\', \',\'),\'#\', \'.\'), \'€\') AS dato FROM (co_scadenziario INNER JOIN co_documenti ON co_scadenziario.iddocumento=co_documenti.id) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_tipidocumento.dir=\'entrata\' AND co_documenti.idstatodocumento!=1 |segment| AND 1=1' WHERE `zz_widgets`.`name` = 'Crediti da clienti';
|
||||||
|
|
||||||
|
-- Aggiunti campi per componenti IBAN
|
||||||
|
ALTER TABLE `co_banche` CHANGE `bic` `branch_code` VARCHAR(20) NULL,
|
||||||
|
ADD `bank_code` VARCHAR(20) NULL,
|
||||||
|
ADD `account_number` VARCHAR(20) NULL,
|
||||||
|
ADD `check_digits` VARCHAR(20) NULL,
|
||||||
|
ADD `national_check_digits` VARCHAR(20) NULL,
|
||||||
|
ADD `id_nazione` INT(11) NULL,
|
||||||
|
ADD FOREIGN KEY (`id_nazione`) REFERENCES `an_nazioni`(`id`);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user