This commit is contained in:
MatteoPistorello 2021-04-26 13:25:56 +02:00
commit 00e643e342
25 changed files with 313 additions and 84 deletions

View File

@ -318,7 +318,10 @@ elseif (post('op') == 'send-email') {
// Inclusione di eventuale plugin personalizzato
if (!empty($structure['script'])) {
include $structure->getEditFile();
$path = $structure->getEditFile();
if (!empty($path)) {
include $path;
}
$database->commitTransaction();

View File

@ -136,7 +136,7 @@ Input.prototype.getElement = function () {
/**
* Gestisce l'abilitazione e la disibilitazione dell'input sulla base del valore indicato.
*
* @param {bool} value
* @param {boolean} value
* @returns {Input}
*/
Input.prototype.setDisabled = function (value) {
@ -215,6 +215,15 @@ Input.prototype.enable = function () {
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.
*

View File

@ -273,7 +273,10 @@ if (empty($record) || !$has_access) {
<div id="module-edit">';
include $structure->getEditFile();
$path = $structure->getEditFile();
if (!empty($path)) {
include $path;
}
echo '
</div>

View File

@ -31,7 +31,10 @@ if (!empty($id_plugin)) {
if (!empty($id_plugin)) {
// Inclusione di eventuale plugin personalizzato
if (!empty($structure['script'])) {
include $structure->getEditFile();
$path = $structure->getEditFile();
if (!empty($path)) {
include $path;
}
return;
}
@ -234,7 +237,10 @@ if (!empty($type) && $type != 'menu' && $type != 'custom') {
* Inclusione modulo personalizzato
*/
elseif ($type == 'custom') {
include $structure->getEditFile();
$path = $structure->getEditFile();
if (!empty($path)) {
include $path;
}
}
// Caricamento file aggiuntivo su elenco record

View File

@ -82,7 +82,7 @@ echo '
<b>'.tr('Destinatari').' <span class="tip" title="'.tr('Email delle sedi, dei referenti o agente collegato all\'anagrafica.').'"><i class="fa fa-question-circle-o"></i></span></b>
<div class="row" id="lista-destinatari">
<div class="col-md-12">
{[ "type": "email", "name": "destinatari[0]", "value": "'.$email.'", "icon-before": "choice|email", "extra": "onkeyup=\'aggiungi_destinatario();\'", "class": "destinatari", "required": 1 ]}
{[ "type": "email", "name": "destinatari[0]", "value": "'.$email.'", "icon-before": "choice|email", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari", "required": 1 ]}
</div>
</div>
@ -136,7 +136,7 @@ echo '
<!-- PULSANTI -->
<div class="row">
<div class="col-md-12 text-right">
<button type="button" class="btn btn-primary" onclick="send()"><i class="fa fa-envelope"></i> '.tr('Invia').'</button>
<button type="button" class="btn btn-primary" onclick="inviaEmail()"><i class="fa fa-envelope"></i> '.tr('Invia').'</button>
</div>
</div>
</form>';
@ -144,7 +144,7 @@ echo '
echo '
<div class="hidden" id="template-destinatario">
<div class="col-md-12">
{[ "type": "email", "name": "destinatari[-id-]", "icon-before": "choice|email", "extra": "onkeyup=\'aggiungi_destinatario();\'", "class": "destinatari" ]}
{[ "type": "email", "name": "destinatari[-id-]", "icon-before": "choice|email", "extra": "onkeyup=\'aggiungiDestinatario();\'", "class": "destinatari" ]}
</div>
</div>';
@ -161,18 +161,10 @@ echo '
emails = JSON.parse(response);
$(".destinatari").each(function(){
$(this).autocomplete({
source: emails,
minLength: 0,
close: function(){
aggiungi_destinatario();
}
}).focus(function() {
$(this).autocomplete("search", $(this).val());
});
addAutoComplete(this);
});
aggiungi_destinatario();
aggiungiDestinatario();
});';
}
@ -180,13 +172,25 @@ echo '
});
function send() {
function inviaEmail() {
if($("#email-form").parsley().validate() && confirm("Inviare e-mail?")) {
$("#email-form").submit();
}
}
function aggiungi_destinatario() {
function addAutoComplete(input){
$(input).autocomplete({
source: emails,
minLength: 0,
close: function() {
aggiungiDestinatario();
},
}).focus(function() {
$(this).autocomplete("search", $(this).val());
});
}
function aggiungiDestinatario() {
var last = $("#lista-destinatari input").last();
if (last.val()) {
@ -195,7 +199,7 @@ echo '
aggiungiContenuto("#lista-destinatari", "#template-destinatario", {"-id-": $("#lista-destinatari > div").length});
$(".destinatari").each(function(){
$(this).autocomplete({source: emails});
addAutoComplete(this);
});
restart_inputs();

View File

@ -218,7 +218,7 @@ class CSV extends CSVImporter
// Gestione categoria e sottocategoria
$categoria = null;
$sotto_categoria = null;
$sottocategoria = null;
if (!empty($record['id_categoria'])) {
// Categoria
$categoria = Categoria::where('nome', strtolower($record['id_categoria']))->first();
@ -229,14 +229,14 @@ class CSV extends CSVImporter
// Sotto-categoria
if (!empty($record['id_sottocategoria'])) {
$sotto_categoria = Categoria::where('nome', $record['id_sottocategoria'])
$sottocategoria = Categoria::where('nome', $record['id_sottocategoria'])
->where('parent', $categoria->id)
->first();
if (empty($sottocategoria)) {
$sotto_categoria = Categoria::build($record['id_categoria']);
$sotto_categoria->parent()->associate($categoria);
$sotto_categoria->save();
$sottocategoria = Categoria::build($record['id_sottocategoria']);
$sottocategoria->parent()->associate($categoria);
$sottocategoria->save();
}
}
}
@ -254,7 +254,7 @@ class CSV extends CSVImporter
$articolo = Articolo::where($primary_key, $record[$primary_key])->first();
}
if (empty($articolo)) {
$articolo = Articolo::build($record['codice'], $record['descrizione'], $categoria, $sotto_categoria);
$articolo = Articolo::build($record['codice'], $record['descrizione'], $categoria, $sottocategoria);
}
$articolo->idiva_vendita = $aliquota->id;

View File

@ -18,7 +18,9 @@
*/
use Modules\Anagrafiche\Anagrafica;
use Modules\Anagrafiche\Nazione;
use Modules\Banche\Banca;
use Modules\Banche\IBAN;
include_once __DIR__.'/../../core.php';
@ -28,10 +30,8 @@ switch (filter('op')) {
$anagrafica = Anagrafica::find($id_anagrafica);
$nome = filter('nome');
$iban = filter('iban');
$bic = filter('bic');
$banca = Banca::build($anagrafica, $nome, $iban, $bic);
$banca = Banca::build($anagrafica, $nome, filter('iban'), filter('bic'));
$id_record = $banca->id;
if (isAjaxRequest()) {
@ -75,5 +75,41 @@ switch (filter('op')) {
'_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;
}

View File

@ -21,8 +21,6 @@ include_once __DIR__.'/../../core.php';
$id_anagrafica = filter('id_anagrafica');
$help_codice_bic = tr('Il codice BIC (o SWIFT) è composto da 8 a 11 caratteri (lettere e numeri) ed è suddiviso in:').'<br><br><ul><li>'.tr('AAAA - codice bancario').'</li><li>'.tr('BB - codice ISO della nazione').'</li><li>'.tr('CC - codice città presso la quale è ubicata la banca').'</li><li>'.tr('DD - codice della filiale (opzionale)').'</li></ul>';
echo '
<form action="" method="post" id="add-form">
<input type="hidden" name="op" value="add">
@ -42,6 +40,7 @@ echo '
<div class="col-md-8">
{[ "type": "text", "label": "'.tr('IBAN').'", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
</div>
<div class="col-md-4">
{[ "type": "text", "label": "'.tr('BIC').'", "name": "bic", "required": "1", "class": "alphanumeric-mask", "minlength": 8, "maxlength": 11, "value": "$bic$", "help": "'.$help_codice_bic.'" ]}
</div>

View File

@ -59,10 +59,12 @@ include_once __DIR__.'/../../core.php';
{[ "type": "text", "label": "<?php echo tr('IBAN'); ?>", "name": "iban", "required": "1", "class": "alphanumeric-mask", "maxlength": 32, "value": "$iban$" ]}
</div>
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('BIC'); ?>", "name": "bic", "required": "1", "class": "alphanumeric-mask", "maxlength": 11, "value": "$bic$" ]}
<div class="col-md-4">
{[ "type": "text", "label": "<?php echo tr('BIC'); ?>", "name": "bic", "required": "1", "class": "alphanumeric-mask", "minlength": 8, "maxlength": 11, "value": "$bic$", "help": "<?php echo $help_codice_bic; ?>" ]}
</div>
</div>
<div class="row">
<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)."); ?>" ]}
</div>
@ -79,9 +81,45 @@ include_once __DIR__.'/../../core.php';
</div>
</div>
</div>
</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)'); ?>", "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 (CIN europeo)'); ?>", "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 (CIN nazionale)'); ?>", "name": "national_check_digits", "class": "alphanumeric-mask", "value": "$national_check_digits$" ]}
</div>
</div>
</div>
</div>
<?php
// Collegamenti diretti (numerici)
$numero_documenti = $dbo->fetchNum('SELECT idanagrafica FROM an_anagrafiche WHERE idbanca_vendite='.prepare($id_record).'
@ -101,3 +139,105 @@ if (!empty($numero_documenti)) {
<a class="btn btn-danger ask" data-backto="record-list">
<i class="fa fa-trash"></i> <?php echo tr('Elimina'); ?>
</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);
},
error: function() {
toastr["error"]("<?php echo tr('Formato IBAN non valido'); ?>");
}
});
}
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);
},
error: function() {
toastr["error"]("<?php echo tr('Formato IBAN non valido'); ?>");
}
});
}
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>

View File

@ -28,3 +28,5 @@ if (isset($id_record)) {
$record = $banca->toArray();
}
}
$help_codice_bic = tr('Il codice BIC (o SWIFT) è composto da 8 a 11 caratteri (lettere e numeri) ed è suddiviso in:').'<br><br><ul><li>'.tr('AAAA - codice bancario').'</li><li>'.tr('BB - codice ISO della nazione').'</li><li>'.tr('CC - codice città presso la quale è ubicata la banca').'</li><li>'.tr('DD - codice della filiale (opzionale)').'</li></ul>';

View File

@ -23,6 +23,7 @@ use Common\SimpleModelTrait;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Modules\Anagrafiche\Anagrafica;
use Modules\Anagrafiche\Nazione;
class Banca extends Model
{
@ -65,6 +66,17 @@ class Banca extends Model
{
$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);
}

View File

@ -11,8 +11,8 @@ use UnexpectedValueException;
* c = Account number
* d = Account type
* i = National identification number
* k = IBAN check digits
* x = National check digits (CIN).
* k = IBAN check digits (CIN europeo)
* x = National check digits (CIN nazionale).
*/
class IBAN
{
@ -417,7 +417,7 @@ class IBAN
preg_match_all('/^'.$regex.'/', $iban, $matches);
$matches = array_filter($matches, 'is_string', ARRAY_FILTER_USE_KEY);
foreach ($matches as $key => $value) {
if (empty($value[0])) {
if (!isset($value[0])) {
throw new UnexpectedValueException('Invalid '.$key.' for format '.$regex);
}
@ -442,7 +442,9 @@ class IBAN
$char = $structure[$current];
if (in_array($char, $keys)) {
$count = substr_count($structure, $char);
$result .= str_pad($contents[self::$parsers[$char]], $count, STR_PAD_LEFT);
$result .= str_pad(
substr($contents[self::$parsers[$char]], 0, $count),
$count, STR_PAD_LEFT);
$current += $count;
} else {
$result .= $char;

View File

@ -19,7 +19,7 @@
include_once __DIR__.'/../../core.php';
echo'
echo '
<button type="button" class="btn btn-primary" onclick="if( confirm(\'Duplicare questo template?\') ){ $(\'#copia-template\').submit(); }"> <i class="fa fa-copy"></i> '.tr('Duplica template').'</button>';
// Duplica template
@ -28,4 +28,3 @@ echo '
<input type="hidden" name="backto" value="record-edit">
<input type="hidden" name="op" value="copy">
</form>';

View File

@ -327,7 +327,7 @@ elseif ($record['stato'] == 'Bozza') {
<strike>';
}
echo (empty($scadenza->da_pagare) ? '<i class="fa fa-exclamation-triangle"></i>' : '').moneyFormat($scadenza->da_pagare);
echo(empty($scadenza->da_pagare) ? '<i class="fa fa-exclamation-triangle"></i>' : '').moneyFormat($scadenza->da_pagare);
if ($pagamento_iniziato) {
echo '

View File

@ -551,7 +551,6 @@ class Fattura extends Document
$this->attributes['iva_rivalsainps'] = $this->iva_rivalsa_inps;
$this->attributes['rivalsainps'] = $this->rivalsa_inps;
$this->attributes['ritenutaacconto'] = $this->ritenuta_acconto;
// Generazione numero fattura se non presente (Bozza -> Emessa)
if ((($stato_precedente->descrizione == 'Bozza' && $this->stato['descrizione'] == 'Emessa') or (!$is_fiscale)) && empty($this->numero_esterno)) {

View File

@ -236,7 +236,7 @@ switch (post('op')) {
} catch (InvalidArgumentException $e) {
}
}
flash()->info(tr('Interventi eliminati!'));
break;
}
@ -247,7 +247,6 @@ if (App::debug()) {
];
}
$operations['export-bulk'] = [
'text' => '<span><i class="fa fa-file-archive-o"></i> '.tr('Esporta stampe'),
'data' => [

View File

@ -165,7 +165,7 @@ switch ($operazione) {
// Creazione fattura
if (empty($id_documento)) {
$fattura = Fattura::build($contratto->anagrafica, $tipo, $data, $id_segment);
}else{
} else {
$fattura = Fattura::find($id_documento);
}
$fattura->note = post('note');

View File

@ -80,11 +80,15 @@ echo '
</div>
</div>';
// Descrizione fattura
$descrizione = tr('Rata _N_ del contratto numero _NUM_', [
'_N_' => $numero_rata,
'_NUM_' => $contratto->numero,
]);
//gestione replace
$descrizione = get_var('Descrizione fattura pianificata');
$modules = MODULES::get('Contratti')['id'];
$variables = include Modules::filepath($modules, 'variables.php');
foreach ($variables as $variable => $value) {
$descrizione = str_replace('{'.$variable.'}', $value, $descrizione);
}
$descrizione = str_replace('{rata}', $numero_rata, $descrizione);
$descrizione = str_replace('{zona}', $zona, $descrizione);
echo '
<div class="row">

View File

@ -72,7 +72,7 @@ class DefaultHandler implements HandlerInterface
{
// Generazione del codice HTML
return '
<input |attr| autocomplete='.setting("Autocompletamento form").'>';
<input |attr| autocomplete="'.(database()->isInstalled() ? setting('Autocompletamento form') : 0).'">';
}
/**

View File

@ -18,7 +18,6 @@
*/
use Modules\Interventi\Intervento;
use Carbon\Carbon;
include_once __DIR__.'/../../core.php';
@ -59,21 +58,20 @@ echo '
</tr>
</table>';
/*
Sedi
*/
$sedi = $dbo->fetchArray("SELECT * FROM an_sedi WHERE idanagrafica=".prepare($anagrafica->idanagrafica));
if( !empty($sedi) ){
$sedi = $dbo->fetchArray('SELECT * FROM an_sedi WHERE idanagrafica='.prepare($anagrafica->idanagrafica));
if (!empty($sedi)) {
echo '
<table class="table table-bordered">
<tr>
<th colspan="4" style="font-size:13pt;" class="text-center">'.tr('Sedi', [], ['upper' => true]).'</th>
</tr>';
for($i=0; count($sedi)>$i; $i++){
echo '
for ($i = 0; count($sedi) > $i; ++$i) {
echo '
<tr>
<td colspan="4" class="text-left" >'.tr('Nome sede').': <b>'.$sedi[$i]['nomesede'].'</b></td>
</tr>
@ -90,11 +88,11 @@ if( !empty($sedi) ){
<td class="text-left" colspan="2">'.tr('cellulare').': <b>'.$sedi[$i]['cellulare'].'</b></td>
</tr>';
if( !empty($sedi[$i+1]) ){
echo '
if (!empty($sedi[$i + 1])) {
echo '
<tr><td colspan="4"></td></tr>';
}
}
}
echo '
</table>';
@ -104,17 +102,17 @@ if( !empty($sedi) ){
Impianti
*/
$impianti = $dbo->fetchArray("SELECT * FROM my_impianti WHERE idanagrafica=".prepare($anagrafica->idanagrafica));
$impianti = $dbo->fetchArray('SELECT * FROM my_impianti WHERE idanagrafica='.prepare($anagrafica->idanagrafica));
if( !empty($impianti) ){
if (!empty($impianti)) {
echo '
<table class="table table-bordered">
<tr>
<th colspan="4" style="font-size:13pt;" class="text-center">'.tr('Impianti', [], ['upper' => true]).'</th>
</tr>';
for($i=0; count($impianti)>$i; $i++){
echo '
for ($i = 0; count($impianti) > $i; ++$i) {
echo '
<tr>
<td colspan="2" class="text-left" >'.tr('Matricola').': <b>'.$impianti[$i]['matricola'].'</b></td>
<td colspan="2" class="text-left" >'.tr('Data').': <b>'.Translator::dataToLocale($impianti[$i]['data']).'</b></td>
@ -126,11 +124,11 @@ if( !empty($impianti) ){
<td colspan="4" class="text-left" >'.tr('descrizione').': <b>'.$impianti[$i]['descrizione'].'</b></td>
</tr>';
if( !empty($impianti[$i+1]) ){
echo '
if (!empty($impianti[$i + 1])) {
echo '
<tr><td colspan="4"></td></tr>';
}
}
}
echo '
</table>';
@ -140,18 +138,18 @@ if( !empty($impianti) ){
Attività
*/
$interventi = $dbo->fetchArray("SELECT id, sessione.inizio FROM in_interventi LEFT JOIN (SELECT MIN(orario_inizio) AS inizio, in_interventi_tecnici.idintervento FROM in_interventi_tecnici GROUP BY in_interventi_tecnici.idintervento) AS sessione ON sessione.idintervento=in_interventi.id WHERE idanagrafica=".prepare($anagrafica->idanagrafica));
$interventi = $dbo->fetchArray('SELECT id, sessione.inizio FROM in_interventi LEFT JOIN (SELECT MIN(orario_inizio) AS inizio, in_interventi_tecnici.idintervento FROM in_interventi_tecnici GROUP BY in_interventi_tecnici.idintervento) AS sessione ON sessione.idintervento=in_interventi.id WHERE idanagrafica='.prepare($anagrafica->idanagrafica));
if( !empty($interventi) ){
if (!empty($interventi)) {
echo '
<table class="table table-bordered">
<tr>
<th colspan="4" style="font-size:13pt;" class="text-center">'.tr('Attività', [], ['upper' => true]).'</th>
</tr>';
for($i=0; count($interventi)>$i; $i++){
$intervento = Intervento::find($interventi[$i]['id']);
echo '
for ($i = 0; count($interventi) > $i; ++$i) {
$intervento = Intervento::find($interventi[$i]['id']);
echo '
<tr>
<td class="text-left">'.tr('Data richiesta').': <b>'.Translator::dateToLocale($intervento->data_richiesta).'</b></td>
<td class="text-left" colspan="2" >'.tr('Data scadenza').': <b>'.Translator::dateToLocale($intervento->data_scadenza).'</b></td>
@ -165,12 +163,12 @@ if( !empty($interventi) ){
<td colspan="4" class="text-left" >'.tr('richiesta').': <b>'.$intervento->richiesta.'</b></td>
</tr>';
if( !empty($interventi[$i+1]) ){
echo '
if (!empty($interventi[$i + 1])) {
echo '
<tr><td colspan="4"></td></tr>';
}
}
}
echo '
</table>';
}
}

View File

@ -22,4 +22,4 @@ include_once __DIR__.'/../../core.php';
use Modules\Anagrafiche\Anagrafica;
$anagrafica = Anagrafica::find($id_record);
$agente = Anagrafica::find($anagrafica->idagente);
$agente = Anagrafica::find($anagrafica->idagente);

View File

@ -17,13 +17,11 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
use Modules\Interventi\Intervento;
use Modules\Banche\Banca;
use Carbon\Carbon;
include_once __DIR__.'/../../core.php';
$banca = Banca::where('id_anagrafica',$anagrafica->idanagrafica)
$banca = Banca::where('id_anagrafica', $anagrafica->idanagrafica)
->where('predefined', 1)
->first();
@ -64,4 +62,4 @@ echo '
<td class="text-left">'.tr('cellulare').': <b>'.$anagrafica['cellulare'].'</b></td>
<td class="text-left">'.tr('fax').': <b>'.$anagrafica['fax'].'</b></td>
</tr>
</table>';
</table>';

View File

@ -21,4 +21,4 @@ include_once __DIR__.'/../../core.php';
use Modules\Anagrafiche\Anagrafica;
$anagrafica = Anagrafica::find(setting('Azienda predefinita'));
$anagrafica = Anagrafica::find(setting('Azienda predefinita'));

View File

@ -1,5 +1,6 @@
<?php
use Modules\Banche\Banca;
use Modules\Fatture\Fattura;
use Modules\Fatture\Gestori\Movimenti as GestoreMovimenti;
@ -14,3 +15,9 @@ foreach ($fatture as $fattura) {
$gestore = new GestoreMovimenti($fattura);
$gestore->registra();
}
// Completamento automatico informazioni IBAN per banche
$banche = Banca::all();
foreach ($banche as $banca) {
$banca->save();
}

View File

@ -171,4 +171,13 @@ UPDATE `zz_widgets` SET `query` = 'SELECT \n CONCAT_WS(\' \', REPLACE(REPLACE(RE
-- Aggiunto campo descrizione revisione in preventivi
ALTER TABLE `co_preventivi` ADD `descrizione_revision` VARCHAR(255) NOT NULL AFTER `default_revision`;
UPDATE `zz_prints` SET `filename` = 'Preventivo num. {numero} del {data} rev {revisione}' WHERE `zz_prints`.`name` = 'Preventivo';
UPDATE `zz_prints` SET `filename` = 'Preventivo num. {numero} del {data} rev {revisione}' WHERE `zz_prints`.`name` = 'Preventivo';
-- Aggiunti campi per componenti IBAN
ALTER TABLE `co_banche` ADD `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`);